<?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>214522</bug_id>
          
          <creation_ts>2020-07-18 11:49:18 -0700</creation_ts>
          <short_desc>Rename Color::transparent to Color::transparentBlack to more clearly state what it is</short_desc>
          <delta_ts>2020-07-19 15:40:18 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>dstockwell</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1672818</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-18 11:49:18 -0700</bug_when>
    <thetext>Rename Color::transparent to Color::transparentBlack to more clearly state what it is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672824</commentid>
    <comment_count>1</comment_count>
      <attachid>404645</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-18 11:53:37 -0700</bug_when>
    <thetext>Created attachment 404645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672826</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-07-18 11:54:46 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672899</commentid>
    <comment_count>3</comment_count>
      <attachid>404645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 08:42:44 -0700</bug_when>
    <thetext>Comment on attachment 404645
Patch

Should we also consider using the named version less? I think that sometimes returning { } instead of Color::transparentBlack would represent our intent more clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672900</commentid>
    <comment_count>4</comment_count>
      <attachid>404645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-19 08:51:00 -0700</bug_when>
    <thetext>Comment on attachment 404645
Patch

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

Just realized that for Color { } is &quot;invalid transparent black&quot; not &quot;valid transparent black&quot;, which affects my earlier comment. For SRGBA&lt;uint8_t&gt; { } is &quot;transparent black&quot;.

Not really sure about the many places we use transparent black but could be using invalid instead.

&gt; Source/WebCore/accessibility/AccessibilityObject.h:406
&gt; +    SRGBA&lt;uint8_t&gt; colorValue() const override { return Color::transparentBlack; }

Perfect example of a place where I am not sure explicitly returning transparentBlack is the right thing. Also, violates Liskov substitution principle, but so does so much of our code.

&gt; Source/WebCore/editing/EditingStyle.cpp:394
&gt; -        return Color::transparent;
&gt; +        return Color::transparentBlack;

Interesting choice that we use &quot;valid transparent black&quot; for this, not &quot;invalid transparent black&quot;.

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:134
&gt; +        return Color::transparentBlack;

Truly peculiar choice to represent parsing failure as &quot;valid transparent black&quot;.

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:140
&gt; +        return Color::transparentBlack;

Ditto.

&gt; Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp:274
&gt;      if (!windowColor.isValid())
&gt; -        windowColor = Color::transparent;
&gt; +        windowColor = Color::transparentBlack;

This is the &quot;make valid&quot; pattern (see below).

&gt; Source/WebCore/page/TextIndicator.cpp:224
&gt; +    auto estimatedBackgroundColor = frame.view() ? frame.view()-&gt;documentBackgroundColor() : Color::transparentBlack;

Interesting to use &quot;valid&quot; instead of &quot;invalid&quot; here.

&gt; Source/WebCore/platform/graphics/Color.h:149
&gt; +    static constexpr auto transparentBlack = ColorBuilder&lt;SRGBA&lt;uint8_t&gt;&gt; { };

As the list of colors gets longer we may want to consider just alphabetical sorting instead of logical sorting.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:2063
&gt; -    if (colorProperty == CSSPropertyBackgroundColor &amp;&amp; visitedColor == Color::transparent)
&gt; +    if (colorProperty == CSSPropertyBackgroundColor &amp;&amp; visitedColor == Color::transparentBlack)
&gt;          return unvisitedColor;

Should this be checking for any color with alpha 0? Why is specifically checking for transparent black a good idea.

&gt; Source/WebCore/style/StyleBuilderCustom.h:836
&gt; +        auto shadowData = makeUnique&lt;ShadowData&gt;(LayoutPoint(x, y), blur, spread, shadowStyle, property == CSSPropertyWebkitBoxShadow, color.isValid() ? color : Color::transparentBlack);

This is the &quot;make valid&quot; operation. Not sure why we ever need to do this, specifically why we need to do it here, and this should be a named function, not this peculiar-looking expression.

&gt; Source/WebCore/style/StyleBuilderState.cpp:269
&gt; +            operations.operations().append(DropShadowFilterOperation::create(location, blur, color.isValid() ? color : Color::transparentBlack));

Ditto.

&gt; Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:95
&gt; -    , backgroundColor(WebCore::Color::transparent)
&gt; +    , backgroundColor(WebCore::Color::transparentBlack)

Seems like this is already the default and would happen without an initializer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672947</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-19 13:04:21 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 404645 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=404645&amp;action=review
&gt; 
&gt; Just realized that for Color { } is &quot;invalid transparent black&quot; not &quot;valid
&gt; transparent black&quot;, which affects my earlier comment. For SRGBA&lt;uint8_t&gt; { }
&gt; is &quot;transparent black&quot;.
&gt; 
&gt; Not really sure about the many places we use transparent black but could be
&gt; using invalid instead.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityObject.h:406
&gt; &gt; +    SRGBA&lt;uint8_t&gt; colorValue() const override { return Color::transparentBlack; }
&gt; 
&gt; Perfect example of a place where I am not sure explicitly returning
&gt; transparentBlack is the right thing. Also, violates Liskov substitution
&gt; principle, but so does so much of our code.

Liskov breaks down a bit, at least as I understand it, when you start talking about type conversions, which is what&apos;s going on here. SRGBA&lt;uint8_t&gt; does not expose anything like the API of Color on purpose, it&apos;s just meant to be the data. That said, your point is just as valid that the isValid() bit on Color is really quite problematic.

Wondering out loud without a clear opinion yet, I wonder if we made invalid Color objects not act like transparent black (e.g. make functions like toSRGBALossy() return Optional&lt;SRGBA&lt;T&gt;&gt;) if that would improve things or make things worse. I&apos;m inclined to think it would make things work, and working towards getting rid of valid bit is probably a much better way forward. 

Because we would want to replace some uses of Color with Optional&lt;Color&gt;, in the few places where there is some need to differentiate, it leads me to another question I am not clear on. Should we ever specialize Optional&lt;T&gt; such that rather than being implemented as (roughly) Optional { T value; bool hasValue; } we instead just store T, and use a trick like HashTableEmptyValueType to store the invalid state in the object itself. This would be nice, since you could then use Optional&lt;T&gt; in places where you don&apos;t want to waste space. I have not done something like this so far as I am not sure (and pretty doubtful) if it would be compatible with std::optional&lt;&gt; if we ever wanted to move to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672951</commentid>
    <comment_count>6</comment_count>
      <attachid>404681</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-19 13:20:57 -0700</bug_when>
    <thetext>Created attachment 404681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672964</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-19 15:13:11 -0700</bug_when>
    <thetext>Found 1 new test failure: webgl/2.0.0/conformance2/state/gl-object-get-calls.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672967</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-19 15:33:49 -0700</bug_when>
    <thetext>(In reply to EWS from comment #7)
&gt; Found 1 new test failure:
&gt; webgl/2.0.0/conformance2/state/gl-object-get-calls.html

I don&apos;t believe this is related, just a flakey test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672968</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-19 15:39:52 -0700</bug_when>
    <thetext>Committed r264585: &lt;https://trac.webkit.org/changeset/264585&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672969</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-19 15:40:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/65798718&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404645</attachid>
            <date>2020-07-18 11:53:37 -0700</date>
            <delta_ts>2020-07-19 13:20:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214522-20200718115336.patch</filename>
            <type>text/plain</type>
            <size>51336</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDU2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDIwLTA3LTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQ29sb3I6OnRyYW5zcGFy
ZW50IHRvIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIHRvIG1vcmUgY2xlYXJseSBzdGF0ZSB3aGF0
IGl0IGlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTQ1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAqIGNzcy9D
U1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljQ1NTVmFsdWVQb29sOjpT
dGF0aWNDU1NWYWx1ZVBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVh
dGVDb2xvclZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjc3NWYWx1ZVRvQ29sb3IpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphdXRvRmlsbFN0cm9uZ1Bhc3N3b3JkTWFz
a0ltYWdlKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnB1dFR5cGU6OnZhbHVlQXNDb2xvciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRv
dyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd1NoYXBlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgor
ICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5OjpwYWludEJveERlY29yYXRpb24pOgorICAgICAgICAqIHBhZ2Uv
Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zV2luZG93Q1NTIGNvbnN0KToKKyAg
ICAgICAgKiBwYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRy
YXdSaWdodEFsaWduZWRUZXh0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNuYXBzaG90Tm9kZSk6CisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZWNhbGN1bGF0ZUJhc2VC
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuaDoKKyAgICAgICAg
KiBwYWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXN0aW1hdGVkQmFj
a2dyb3VuZENvbG9yRm9yUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0ZvckJsZW5kaW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNhY2hlZENHQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2
ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNv
bGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246
OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpuc0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJhc2ljLmNwcDoKKyAgICAgICAgKE5pY29zaWE6
OlBhaW50aW5nRW5naW5lQmFzaWM6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZVRocmVhZGVkLmNwcDoKKyAgICAgICAgKE5p
Y29zaWE6OnBhaW50TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW06CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdFZp
ZGVvQ29udGVudExheWVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpyZXR1cm5WaWRlb0NvbnRlbnRMYXllcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50
SW5jb21wbGV0ZUltYWdlT3V0bGluZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGxhdGZv
cm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVJT1M6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE1lbmNsb3NlOjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbEJh
Y2tncm91bmRDb2xvcik6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFk
b3dWYWx1ZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6
CisgICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5IGNvbnN0KToKKyAgICAgICAg
KiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNl
dFZpZXdJc1RyYW5zcGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0Vmll
d0Jhc2VCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBDb2xvcjo6dHJhbnNwYXJlbnQgdG8gQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2suCisKIDIwMjAtMDctMTggIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBidWlsZCB3YXJu
aW5ncyBpbiB0aGUgV2ViWFIgYmFja2VuZApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9u
IDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk1LDEzICsxOTk1LDEzIEBAIFN0cmlu
ZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c3RyaW5nVmEKIFNSR0JBPHVpbnQ4X3Q+IEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojpjb2xvclZhbHVlKCkgY29uc3QKIHsKICNpZiAhRU5BQkxFKElO
UFVUX1RZUEVfQ09MT1IpCi0gICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICByZXR1
cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAjZWxzZQogICAgIGlmICghaXNDb2xvcldlbGwo
KSkKLSAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihu
b2RlKCkpKQotICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OworICAgICAgICByZXR1
cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAzLDcgKzQwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShW
ZWN0b3I8RWxlbWVudCo+JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgLy8gT25seSBpZiBpc0NvbG9yV2VsbCgpCi0gICAgU1JHQkE8dWludDhfdD4gY29sb3JW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsgfQorICAg
IFNSR0JBPHVpbnQ4X3Q+IGNvbG9yVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjazsgfQogCiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZVZhbHVl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yb2xlOyB9CiAgICAgU3RyaW5nIHJvbGVQbGF0
Zm9ybVN0cmluZygpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIFN0YXRpY0NTU1ZhbHVl
UG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0VmFsdWUuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRWYWx1ZS5jb25zdHJ1Y3QoQ1NT
VmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1
Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIG1f
dHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgbV93aGl0ZUNvbG9yLmNvbnN0cnVjdChDU1NWYWx1
ZTo6U3RhdGljQ1NTVmFsdWUsIENvbG9yOjp3aGl0ZSk7CiAgICAgbV9ibGFja0NvbG9yLmNvbnN0
cnVjdChDU1NWYWx1ZTo6U3RhdGljQ1NTVmFsdWUsIENvbG9yOjpibGFjayk7CiAKQEAgLTkyLDcg
KzkyLDcgQEAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZQogUmVmPENT
U1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUNvbG9yVmFsdWUoY29uc3QgQ29s
b3ImIGNvbG9yKQogewogICAgIC8vIFRoZXNlIGFyZSB0aGUgZW1wdHkgYW5kIGRlbGV0ZWQgdmFs
dWVzIG9mIHRoZSBoYXNoIHRhYmxlLgotICAgIGlmIChjb2xvciA9PSBDb2xvcjo6dHJhbnNwYXJl
bnQpCisgICAgaWYgKGNvbG9yID09IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKQogICAgICAgICBy
ZXR1cm4gc3RhdGljQ1NTVmFsdWVQb29sLT5tX3RyYW5zcGFyZW50Q29sb3IuZ2V0KCk7CiAgICAg
aWYgKGNvbG9yID09IENvbG9yOjp3aGl0ZSkKICAgICAgICAgcmV0dXJuIHN0YXRpY0NTU1ZhbHVl
UG9vbC0+bV93aGl0ZUNvbG9yLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTEsNyArMzkxLDcgQEAgRWRp
dGluZ1N0eWxlOjp+RWRpdGluZ1N0eWxlKCkgPSBkZWZhdWx0Owogc3RhdGljIENvbG9yIGNzc1Zh
bHVlVG9Db2xvcihDU1NWYWx1ZSogY29sb3JWYWx1ZSkKIHsKICAgICBpZiAoIWlzPENTU1ByaW1p
dGl2ZVZhbHVlPihjb2xvclZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVu
dDsKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogICAgIAogICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVDb2xvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqY29sb3JWYWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZUNvbG9yLmlzUkdCQ29sb3IoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24g
MjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA1Niw3ICsyMDU2LDcgQEAgc3RhdGljIFJlZjxDU1NMaW5lYXJHcmFk
aWVudFZhbHVlPiBhdXRvRgogICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7
CiAKICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzZWNvbmRTdG9wOwotICAgIHNlY29uZFN0b3Au
Y29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoQ29sb3I6
OnRyYW5zcGFyZW50KTsKKyAgICBzZWNvbmRTdG9wLmNvbG9yID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICBz
ZWNvbmRTdG9wLnBvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSgxMDAsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKICAgICBhdXRvIGdyYWRpZW50
ID0gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKENTU0dyYWRpZW50UmVwZWF0OjpOb25S
ZXBlYXRpbmcsIENTU0dyYWRpZW50VHlwZTo6Q1NTTGluZWFyR3JhZGllbnQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE2LDcgKzExMTYsNyBA
QCB2b2lkIElucHV0VHlwZTo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuCiAKIENvbG9yIElucHV0
VHlwZTo6dmFsdWVBc0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFy
ZW50OworICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIH0KIAogdm9pZCBJbnB1
dFR5cGU6OnNlbGVjdENvbG9yKFN0cmluZ1ZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAkocmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIs
NyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6U3RhCiAgICAgLCBsaW5l
Sm9pbihNaXRlckpvaW4pCiAgICAgLCBtaXRlckxpbWl0KDEwKQogICAgICwgc2hhZG93Qmx1cigw
KQotICAgICwgc2hhZG93Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KQorICAgICwgc2hhZG93Q29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spCiAgICAgLCBnbG9iYWxBbHBoYSgxKQogICAgICwg
Z2xvYmFsQ29tcG9zaXRlKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyKQogICAgICwgZ2xv
YmFsQmxlbmQoQmxlbmRNb2RlOjpOb3JtYWwpCkBAIC0xMjA3LDcgKzEyMDcsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyCiAgICAgaWYgKHNob3VsZERyYXdTaGFk
b3dzKCkpIHsKICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBzYXZlZCA9IHRydWU7
Ci0gICAgICAgIGNvbnRleHQtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6
OnRyYW5zcGFyZW50KTsKKyAgICAgICAgY29udGV4dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6
ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgp
Lmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTMwNSw3ICsx
MzA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdHJvawogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nLCBPcHRpb25h
bDxmbG9hdD4gYWxwaGEpCiB7Ci0gICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
CisgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKICAgICBpZiAoIWNv
bG9yU3RyaW5nLmlzTnVsbCgpKSB7CiAgICAgICAgIGNvbG9yID0gcGFyc2VDb2xvck9yQ3VycmVu
dENvbG9yKGNvbG9yU3RyaW5nLCBjYW52YXNCYXNlKCkpOwogICAgICAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKQEAgLTEzMzEsNyArMTMzMSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVh
clNoYWRvdygpCiB7Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNw
YXJlbnQpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50
QmxhY2spOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRv
dyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9y
KQpAQCAtMTM1OSw3ICsxMzU5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjphcHBseQogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWln
aHQoKTsKICAgICAgICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5z
cGFyZW50KTsKKyAgICAgICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjayk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkocmV2aXNpb24gMjY0NTY1KQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDIsNyArMzAyLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYXBlSGlnaGxpZ2h0KEdyYXBo
aWNzQwogICAgICAgICBMYXlvdXRSZWN0IHNoYXBlQm91bmRzID0gc2hhcGVPdXRzaWRlSW5mby0+
Y29tcHV0ZWRTaGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKTsKICAgICAgICAgRmxvYXRRdWFkIHNo
YXBlUXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChzaGFwZUJv
dW5kcykpOwogICAgICAgICBjb250ZW50c1F1YWRUb0Nvb3JkaW5hdGVTeXN0ZW0obWFpblZpZXcs
IGNvbnRhaW5pbmdWaWV3LCBzaGFwZVF1YWQsIEluc3BlY3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVT
eXN0ZW06OkRvY3VtZW50KTsKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBzaGFw
ZVF1YWQsIHNoYXBlSGlnaGxpZ2h0Q29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCwgYm91bmRzKTsK
KyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBzaGFwZVF1YWQsIHNoYXBlSGlnaGxp
Z2h0Q29sb3IsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBib3VuZHMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjY0NTY1KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSwxMyArMTMxLDEzIEBAIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VD
aGFyW10gPSB7IDAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCog
Y29sb3JPYmplY3QpCiB7CiAgICAgaWYgKCFjb2xvck9iamVjdCkKLSAgICAgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
OwogCiAgICAgaW50IHIgPSAwOwogICAgIGludCBnID0gMDsKICAgICBpbnQgYiA9IDA7CiAgICAg
aWYgKCFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiciIsIHIpIHx8ICFjb2xvck9iamVjdC0+Z2V0
SW50ZWdlcigiZyIsIGcpIHx8ICFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiYiIsIGIpKQotICAg
ICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OworICAgICAgICByZXR1cm4gQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2s7CiAKICAgICBkb3VibGUgYSA9IDEuMDsKICAgICBpZiAoIWNvbG9yT2Jq
ZWN0LT5nZXREb3VibGUoImEiLCBhKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcAkocmV2aXNpb24gMjY0NTY1KQor
KysgU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgdm9pZCBwYWludEJveERlY29y
YXRpb24oR3JhcGhpY3NDCiAgICAgICAgICAgICBjb250ZXh0LmRyYXdMaW5lKHN0YXJ0LCBlbmQp
OwogICAgICAgICB9OwogCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFu
c3BhcmVudCk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrKTsKIAogICAgICAgICBhdXRvIGRlY29yYXRpb25Cb3hXaWR0aCA9IGRlY29yYXRpb25C
b3hTaXplLndpZHRoKCk7CiAgICAgICAgIGF1dG8gZGVjb3JhdGlvbkJveEhlaWdodCA9IGRlY29y
YXRpb25Cb3hTaXplLmhlaWdodCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHJldmlzaW9uIDI2NDU2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNyArMjcxLDcgQEAgU3RyaW5nIENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGOjpjYQogCiAgICAgQ29sb3Igd2luZG93Q29sb3IoY29sb3IuZ2V0KCkp
OwogICAgIGlmICghd2luZG93Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICB3aW5kb3dDb2xvciA9
IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgd2luZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjazsKIAogICAgIGJvb2wgaW1wb3J0YW50ID0gYmVoYXZpb3IgPT0ga01BQ2FwdGlv
bkFwcGVhcmFuY2VCZWhhdmlvclVzZVZhbHVlOwogICAgIENHRmxvYXQgb3BhY2l0eSA9IE1BQ2Fw
dGlvbkFwcGVhcmFuY2VHZXRXaW5kb3dPcGFjaXR5KGtNQUNhcHRpb25BcHBlYXJhbmNlRG9tYWlu
VXNlciwgJmJlaGF2aW9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zl
cmxheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zl
cmxheXMuY3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVn
UGFnZU92ZXJsYXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdSaWdodEFsaWduZWRUZXh0KGNvbnN0IFMKICAgICBmbG9hdCB0ZXh0QmFzZWxp
bmVGcm9tVG9wID0gMTQ7CiAKICAgICBUZXh0UnVuIHRleHRSdW4gPSBUZXh0UnVuKHRleHQpOwot
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgIGZsb2F0IHRleHRX
aWR0aCA9IGNvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgeyB9KTsKICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwg
dGV4dFJ1biwgYm94TG9jYXRpb24gKyBGbG9hdFNpemUoLSh0ZXh0V2lkdGggKyB0ZXh0R2FwKSwg
dGV4dEJhc2VsaW5lRnJvbVRvcCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNu
YXBzaG90dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNu
YXBzaG90dGluZy5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVTbmFwc2hvdHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdE5vZAogCiAgICAgU2NvcGVkRnJh
bWVQYWludGluZ1N0YXRlIHN0YXRlKGZyYW1lLCAmbm9kZSk7CiAKLSAgICBmcmFtZS52aWV3KCkt
PnNldEJhc2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBmcmFtZS52
aWV3KCktPnNldEJhc2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwog
ICAgIGZyYW1lLnZpZXcoKS0+c2V0Tm9kZVRvRHJhdygmbm9kZSk7CiAKICAgICBMYXlvdXRSZWN0
IHRvcExldmVsUmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9u
IDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpyZWNhbGN1bGF0ZUJhc2VC
YWNrZ3JvdW4KICAgICBtX3VzZXNEYXJrQXBwZWFyYW5jZSA9IHVzaW5nRGFya0FwcGVhcmFuY2U7
CiAgICAgT3B0aW9uYWw8Q29sb3I+IGJhY2tncm91bmRDb2xvcjsKICAgICBpZiAobV9pc1RyYW5z
cGFyZW50KQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJl
bnQpOworICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7CiAgICAgdXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGJhY2tncm91bmRDb2xvcik7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmgJKHJldmlzaW9uIDI2NDU2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZU92ZXJsYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ0LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAgICAgT3ZlcmxheVR5cGUgbV9vdmVybGF5VHlwZTsK
ICAgICBJbnRSZWN0IG1fb3ZlcnJpZGVGcmFtZTsKIAotICAgIENvbG9yIG1fYmFja2dyb3VuZENv
bG9yIHsgQ29sb3I6OnRyYW5zcGFyZW50IH07CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3Ig
eyBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayB9OwogICAgIFBhZ2VPdmVybGF5SUQgbV9wYWdlT3Zl
cmxheUlEOwogCiAgICAgYm9vbCBtX3Nob3VsZElnbm9yZU1vdXNlRXZlbnRzT3V0c2lkZUJvdW5k
cyB7IHRydWUgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAkocmV2
aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIHN0YXRpYyBGbG9hdFJlY3QgYWJzb2x1
dGVCb3VuZGluZ1JlY3RGb3IKIAogc3RhdGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xv
ckZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQog
ewotICAgIGF1dG8gZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yID0gZnJhbWUudmlldygpID8gZnJh
bWUudmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogQ29sb3I6OnRyYW5zcGFyZW50
OworICAgIGF1dG8gZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yID0gZnJhbWUudmlldygpID8gZnJh
bWUudmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogQ29sb3I6OnRyYW5zcGFyZW50
QmxhY2s7CiAKICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IG51bGxwdHI7CiAgICAgYXV0
byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNv
bnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7CkBAIC0yNDUsNyArMjQ1LDcgQEAgc3RhdGlj
IENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvcgogICAgICAgICAgICAgcmV0dXJuIGVz
dGltYXRlZEJhY2tncm91bmRDb2xvcjsKIAogICAgICAgICBhdXRvIHZpc2l0ZWREZXBlbmRlbnRC
YWNrZ3JvdW5kQ29sb3IgPSBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpOwotICAgICAgICBpZiAodmlzaXRlZERlcGVuZGVudEJhY2tncm91bmRD
b2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgICAgIGlmICh2aXNpdGVkRGVwZW5kZW50
QmFja2dyb3VuZENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKQogICAgICAgICAgICAg
cGFyZW50UmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3JzLmFwcGVuZCh2aXNpdGVkRGVwZW5kZW50QmFj
a2dyb3VuZENvbG9yKTsKICAgICB9CiAgICAgcGFyZW50UmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3Jz
LnJldmVyc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzY2LDEwICs3NjYsMTAgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgc2hhZG93
TGlzdExlbmd0aChjbwogCiBzdGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0Zv
ckJsZW5kaW5nKGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSog
b3RoZXJTaGFkb3cpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRl
ZmF1bHRTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWws
IGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
aGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNo
YWRvd1N0eWxlOjpJbnNldCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hTaGFkb3dEYXRhKExh
eW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENvbG9yOjp0cmFu
c3BhcmVudCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJ
bnNldFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6
Okluc2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBT
aGFkb3dTdHlsZTo6Tm9ybWFsLCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRTaGFkb3dEYXRh
KExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpJbnNldCwgZmFsc2UsIENvbG9yOjp0
cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4g
ZGVmYXVsdFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5
bGU6Ok5vcm1hbCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRXZWJLaXRCb3hTaGFkb3dEYXRh
KExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpJbnNldCwgdHJ1ZSwgQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2spOwogCiAgICAgaWYgKHNyY1NoYWRvdykKICAgICAgICAgcmV0dXJuIHNy
Y1NoYWRvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDEyICsxNDYsMTIgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3Q7CiAjZW5kaWYKIAor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB0cmFuc3BhcmVudEJsYWNrID0gQ29sb3JCdWlsZGVy
PFNSR0JBPHVpbnQ4X3Q+PiB7IH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGJsYWNrID0g
Q29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4X3Q+PiB7IDAsIDAsIDAgfTsKICAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gd2hpdGUgPSBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IHsgMjU1LCAy
NTUsIDI1NSB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBkYXJrR3JheSA9IENvbG9yQnVp
bGRlcjxTUkdCQTx1aW50OF90Pj4geyAxMjgsIDEyOCwgMTI4IH07CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBhdXRvIGdyYXkgPSBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IHsgMTYwLCAxNjAs
IDE2MCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBsaWdodEdyYXkgPSBDb2xvckJ1aWxk
ZXI8U1JHQkE8dWludDhfdD4+IHsgMTkyLCAxOTIsIDE5MiB9OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYXV0byB0cmFuc3BhcmVudCA9IENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4geyB9Owog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjeWFuID0gQ29sb3JCdWlsZGVyPFNSR0JBPHVpbnQ4
X3Q+PiB7IDAsIDI1NSwgMjU1IH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHllbGxvdyA9
IENvbG9yQnVpbGRlcjxTUkdCQTx1aW50OF90Pj4geyAyNTUsIDI1NSwgMCB9OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byByZWQgPSBDb2xvckJ1aWxkZXI8U1JHQkE8dWludDhfdD4+IHsgMjU1
LCAwLCAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3ODUsNyArMzc4NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRE
ZWJ1Z0JhY2tncm91bmQKICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBtX2xheWVy
LT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXllci0+
c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIG1fbGF5ZXIt
PnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9yLCBmbG9hdCYg
d2lkdGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsx
MTgsNyBAQCBDR0NvbG9yUmVmIGNhY2hlZENHQ29sb3IoY29uc3QgQ29sb3ImIGNvCiB7CiAgICAg
aWYgKGNvbG9yLmlzSW5saW5lKCkpIHsKICAgICAgICAgc3dpdGNoIChQYWNrZWQ6OlJHQkEgeyBj
b2xvci5hc0lubGluZSgpIH0udmFsdWUpIHsKLSAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBD
b2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTogeworICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIH0udmFsdWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBD
R0NvbG9yUmVmIHRyYW5zcGFyZW50Q0dDb2xvciA9IGxlYWtDR0NvbG9yKGNvbG9yKTsKICAgICAg
ICAgICAgIHJldHVybiB0cmFuc3BhcmVudENHQ29sb3I7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cu
Y3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBD
b2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjCiAgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGltYWdl
LmdldCgpKTsKIAogICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xvcjo6dHJh
bnNwYXJlbnQ7CisgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHBpeGVsWzBdICogMjU1IC8gcGl4
ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzNdKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9u
IDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDEyICszMDUsMTIgQEAgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gRHJvcFNoYWRvd0ZpbHRlcgogICAgICAgICByZXR1cm4gRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQobV9sb2NhdGlvbiwgSW50UG9pbnQoKSwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dyZXNzKSwKLSAgICAgICAgICAgIFdlYkNv
cmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCwgcHJvZ3Jlc3MpKTsKKyAgICAg
ICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBw
cm9ncmVzcykpOwogCiAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZnJvbU9w
ZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZyb20pOwogICAg
IEludFBvaW50IGZyb21Mb2NhdGlvbiA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5s
b2NhdGlvbigpIDogSW50UG9pbnQoKTsKICAgICBpbnQgZnJvbVN0ZERldmlhdGlvbiA9IGZyb21P
cGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSA6IDA7Ci0gICAgQ29sb3Ig
ZnJvbUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkgOiBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgQ29sb3IgZnJvbUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZy
b21PcGVyYXRpb24tPmNvbG9yKCkgOiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKICAgICAKICAg
ICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRpb24sIHByb2dyZXNzKSwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJl
dmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIE5TQ29sb3IgKm5z
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChjb2xvci5pc0lubGluZSgpKSB7
CiAgICAgICAgIHN3aXRjaCAoUGFja2VkOjpSR0JBIHsgY29sb3IuYXNJbmxpbmUoKSB9LnZhbHVl
KSB7Ci0gICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFyZW50IH0udmFs
dWU6IHsKKyAgICAgICAgY2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgTlNDb2xvciAqY2xlYXJDb2xvciA9IFtb
TlNDb2xvciBjb2xvcldpdGhTUkdCUmVkOjAgZ3JlZW46MCBibHVlOjAgYWxwaGE6MF0gcmV0YWlu
XTsKICAgICAgICAgICAgIHJldHVybiBjbGVhckNvbG9yOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2lu
ZUJhc2ljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJhc2ljLmNwcAkocmV2aXNpb24gMjY0NTY1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFp
bnRpbmdFbmdpbmVCYXNpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9v
bCBQYWludGluZ0VuZ2luZUJhc2ljOjpwYWludChHcmFwaGljcwogCiAgICAgICAgICAgICBpZiAo
c3VwcG9ydHNBbHBoYSkgewogICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc291cmNlUmVjdC5zaXplKCkpLCBD
b2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBzb3VyY2VSZWN0LnNpemUoKSksIENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlcik7CiAgICAgICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5n
RW5naW5lVGhyZWFkZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lVGhyZWFkZWQuY3BwCShyZXZp
c2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFQYWludGluZ0VuZ2luZVRocmVhZGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBzdGF0aWMgdm9pZCBwYWludExheWVyKEdyYXBoaWNzQ29udGV4dCYgCiAKICAg
ICBpZiAoc3VwcG9ydHNBbHBoYSkgewogICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvcjo6Q29weSk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBzb3VyY2VSZWN0LnNpemUoKSksIENvbG9yOjp0cmFu
c3BhcmVudCk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBzb3VyY2VSZWN0LnNpemUoKSksIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICAg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXIuY3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6cAogICAgICAgICBBU1NFUlQoIW1fdGV4dHVyZSk7CiAg
ICAgICAgIGlmIChtX2hvbGVQdW5jaENsaWVudCkKICAgICAgICAgICAgIG1faG9sZVB1bmNoQ2xp
ZW50LT5zZXRWaWRlb1JlY3RhbmdsZShlbmNsb3NpbmdJbnRSZWN0KG1vZGVsVmlld01hdHJpeC5t
YXBSZWN0KHRhcmdldFJlY3QpKSk7Ci0gICAgICAgIHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgQ29sb3I6OnRyYW5zcGFyZW50LCBmYWxzZSk7Cisg
ICAgICAgIHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJBVktpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCShyZXZpc2lvbiAyNjQ1
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckFWS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cgogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CiAgICAgV2ViVGhyZWFkUnVuKFtwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlzKSwgdGhpcywgdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBy
ZXRhaW5QdHIoW21fdmlkZW9GdWxsc2NyZWVuVmlldyBsYXllcl0pXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgW3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0Nv
bG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCldOworICAgICAgICBbdmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6
OnRyYW5zcGFyZW50QmxhY2spXTsKICAgICAgICAgbV9mdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKHZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBbcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRoaXNdICgpIG11dGFibGUgewogICAgICAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0aGlzXSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFtX2ludGVyZmFjZSkKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVm
UHRyKHRoaXMpLCB0aGlzLCB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IHJldGFpblB0cihbbV92aWRl
b0Z1bGxzY3JlZW5WaWV3IGxheWVyXSldICgpIG11dGFibGUgewotICAgICAgICBbdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29s
b3I6OnRyYW5zcGFyZW50KV07CisgICAgICAgIFt2aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCYWNr
Z3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayldOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bmlsLCBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRoaXNdICgpIG11
dGFibGUgewogICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0aGlzXSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2ludGVyZmFjZSkKQEAgLTMwMCw3ICszMDAsNyBAQCAgICAg
ICAgIG1faW50ZXJmYWNlLT5lbnRlckZ1bGxzY3JlZW4oKTsKICAgICB9KTsKICNlbHNlCiAgICAg
V2ViVGhyZWFkUnVuKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlzKSwgdGhpcywgdmlk
ZW9GdWxsc2NyZWVuTGF5ZXIgPSByZXRhaW5QdHIoW21fdmlkZW9GdWxsc2NyZWVuVmlldyBsYXll
cl0pXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgW3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJhY2tn
cm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudCldOwor
ICAgICAgICBbdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENH
Q29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50QmxhY2spXTsKICAgICAgICAgbV9mdWxs
c2NyZWVuTW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvRnVsbHNjcmVlbkxheWVy
LmdldCgpLCBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRoaXNdICgp
IG11dGFibGUgewogICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0aGlzXSB7
CiAgICAgICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmVudGVyRnVsbHNjcmVlbigpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAyNjQ1NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzAsNyArNDcwLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRJbmNvbXBsZXRl
SW1hZ2VPdQogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
KCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgY29udGV4
dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6bGlnaHRHcmF5KTsKLSAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrKTsKICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMoTGF5b3V0UmVjdCh7IHBhaW50T2Zmc2V0LngoKSArIGxlZnRCb3JkZXIgKyBsZWZ0
UGFkZGluZywgcGFpbnRPZmZzZXQueSgpICsgdG9wQm9yZGVyICsgdG9wUGFkZGluZyB9LCBjb250
ZW50U2l6ZSksIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIGJvcmRlcldpZHRoKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZp
c2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTI1LDcgKzQxMjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIoR3JhcGhpY3NDCiAgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91
dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkg
KyAxX2x1KSk7CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4g
eyAyMTcsIDIxNywgMjE3IH0pOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygx
LjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsK
KyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwog
ICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwog
ICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3NSw3ICsxMTc1LDcgQEAg
dm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICBjb250ZXh0
LmRyYXdFbGxpcHNlKG1hcmtlclJlY3QpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMaXN0
U3R5bGVUeXBlOjpDaXJjbGU6Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudCk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKICAgICAgICAgY29udGV4dC5kcmF3RWxsaXBzZShtYXJrZXJSZWN0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGlzdFN0eWxlVHlwZTo6U3F1YXJlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjY0NTY1
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTI5LDEyICsxMTI5LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
RmlsZVVwbG9hZEljb24KIAogQ29sb3IgUmVuZGVyVGhlbWVJT1M6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3QKIHsKLSAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OworICAgIHJldHVybiBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjazsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVJT1M6OnBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+KSBjb25zdAogewotICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgcmV0dXJu
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+JiBj
YWNoZWRGb2N1c1JpbmdDb2xvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSwx
NyArMjQ1LDE3IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QKICAg
ICAgICAgICAgIC8vIERvIG5vdCBkdW1wIGludmFsaWQgb3IgdHJhbnNwYXJlbnQgYmFja2dyb3Vu
ZHMsIHNpbmNlIHRoYXQgaXMgdGhlIGRlZmF1bHQuCiAgICAgICAgICAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKTsKICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ1NlbWFudGljQ29s
b3Ioby5wYXJlbnQoKS0+c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kQ29sb3IpLCBiYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICAgICAgJiYgYmFj
a2dyb3VuZENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICAgICAgICAgICAgICAmJiBi
YWNrZ3JvdW5kQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spCiAgICAgICAgICAgICAg
ICAgdHMgPDwgIiBbYmdjb2xvcj0iIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGJhY2tncm91bmRDb2xvcikgPDwgIl0iOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb2xv
ciB0ZXh0RmlsbENvbG9yID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpLCB0ZXh0RmlsbENvbG9yKQotICAgICAgICAg
ICAgICAgICYmIHRleHRGaWxsQ29sb3IgIT0gY29sb3IgJiYgdGV4dEZpbGxDb2xvciAhPSBDb2xv
cjo6dHJhbnNwYXJlbnQpCisgICAgICAgICAgICAgICAgJiYgdGV4dEZpbGxDb2xvciAhPSBjb2xv
ciAmJiB0ZXh0RmlsbENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKQogICAgICAgICAg
ICAgICAgIHRzIDw8ICIgW3RleHRGaWxsQ29sb3I9IiA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVy
VHJlZUFzVGV4dCh0ZXh0RmlsbENvbG9yKSA8PCAiXSI7CiAKICAgICAgICAgICAgIENvbG9yIHRl
eHRTdHJva2VDb2xvciA9IG8uc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihvLnBhcmVudCgpLT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciksIHRleHRTdHJva2VDb2xvcikKLSAgICAg
ICAgICAgICAgICAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gY29sb3IgJiYgdGV4dFN0cm9rZUNvbG9y
ICE9IENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICAgICAgICAgICAgICAmJiB0ZXh0U3Ryb2tlQ29s
b3IgIT0gY29sb3IgJiYgdGV4dFN0cm9rZUNvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KQogICAgICAgICAgICAgICAgIHRzIDw8ICIgW3RleHRTdHJva2VDb2xvcj0iIDw8IHNlcmlhbGl6
YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KHRleHRTdHJva2VDb2xvcikgPDwgIl0iOwogCiAgICAg
ICAgICAgICBpZiAoby5wYXJlbnQoKS0+c3R5bGUoKS50ZXh0U3Ryb2tlV2lkdGgoKSAhPSBvLnN0
eWxlKCkudGV4dFN0cm9rZVdpZHRoKCkgJiYgby5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpID4g
MCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVu
Y2xvc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MTWVuY2xvc2UuY3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MTWVuY2xvc2U6OnBhaW50
KFBhaW50SW4KICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZVRoaWNrbmVzcyh0aGlj
a25lc3MpOwogICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJv
a2UpOwogICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS52aXNp
dGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlDb2xvcikpOwotICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Cisg
ICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spOwogICAgIHBhaW50SW5mby5hcHBseVRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFu
c2xhdGUocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKSk7CiAKICAgICAvLyBJbiB0aGUgTWF0aE1M
IGluIEhUTUw1IGltcGxlbWVudGF0aW9uIG5vdGUsIHRoZSAibGVmdCIgbm90YXRpb24gaXMgZGVz
Y3JpYmVkIGFzIGZvbGxvd3M6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNTks
NyArMjA1OSw3IEBAIENvbG9yIFJlbmRlclN0eWxlOjp2aXNpdGVkRGVwZW5kZW50Q29sb3IKICAg
ICAvLyB3ZSdyZSByZXR1cm5pbmcgdW52aXNpdGVkIGluZm8gZm9yIGEgdmlzaXRlZCBsaW5rLCBi
dXQgZ2l2ZW4gb3VyIHJlc3RyaWN0aW9uIHRoYXQgdGhlIGFscGhhIHZhbHVlcwogICAgIC8vIGhh
dmUgdG8gbWF0Y2gsIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gcmV0dXJuIHRoZSB1bnZpc2l0ZWQg
YmFja2dyb3VuZCBjb2xvciBpZiBzcGVjaWZpZWQgdGhhbiBpdAogICAgIC8vIGRvZXMgdG8gcmV0
dXJuIGJsYWNrLiBUaGlzIGJlaGF2aW9yIG1hdGNoZXMgd2hhdCBGaXJlZm94IDQgZG9lcyBhcyB3
ZWxsLgotICAgIGlmIChjb2xvclByb3BlcnR5ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
ICYmIHZpc2l0ZWRDb2xvciA9PSBDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgaWYgKGNvbG9yUHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IgJiYgdmlzaXRlZENvbG9yID09IENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrKQogICAgICAgICByZXR1cm4gdW52aXNpdGVkQ29sb3I7CiAK
ICAgICAvLyBUYWtlIHRoZSBhbHBoYSBmcm9tIHRoZSB1bnZpc2l0ZWQgY29sb3IsIGJ1dCBnZXQg
dGhlIFJHQiB2YWx1ZXMgZnJvbSB0aGUgdmlzaXRlZCBjb2xvci4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyNjQ1NjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMyMCw3ICsxMzIwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IENvbG9yJiB2aXNp
dGVkTGlua1N0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+
dmlzaXRlZExpbmtTdHJva2VDb2xvcjsgfQogICAgIHZvaWQgc2V0SGFzRXhwbGljaXRseVNldFN0
cm9rZUNvbG9yKGJvb2wgdikgeyBTRVRfVkFSKG1fcmFyZUluaGVyaXRlZERhdGEsIGhhc1NldFN0
cm9rZUNvbG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odikpOyB9CiAgICAgYm9vbCBoYXNFeHBs
aWNpdGx5U2V0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRh
LT5oYXNTZXRTdHJva2VDb2xvcjsgfTsKLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0cm9rZUNv
bG9yKCkgeyByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OyB9CisgICAgc3RhdGljIENvbG9yIGlu
aXRpYWxTdHJva2VDb2xvcigpIHsgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOyB9CiAg
ICAgQ29sb3IgY29tcHV0ZWRTdHJva2VDb2xvcigpIGNvbnN0OwogCiAgICAgZmxvYXQgc3Ryb2tl
TWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPm1pdGVyTGlt
aXQ7IH0KQEAgLTE2MDEsNyArMTYwMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgaW5p
dGlhbFBlcnNwZWN0aXZlKCkgeyByZXR1cm4gMDsgfQogICAgIHN0YXRpYyBMZW5ndGggaW5pdGlh
bFBlcnNwZWN0aXZlT3JpZ2luWCgpIHsgcmV0dXJuIExlbmd0aCg1MC4wZiwgUGVyY2VudCk7IH0K
ICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxQZXJzcGVjdGl2ZU9yaWdpblkoKSB7IHJldHVybiBM
ZW5ndGgoNTAuMGYsIFBlcmNlbnQpOyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxCYWNrZ3Jv
dW5kQ29sb3IoKSB7IHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7IH0KKyAgICBzdGF0aWMgQ29s
b3IgaW5pdGlhbEJhY2tncm91bmRDb2xvcigpIHsgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrOyB9CiAgICAgc3RhdGljIENvbG9yIGluaXRpYWxUZXh0RW1waGFzaXNDb2xvcigpIHsgcmV0
dXJuIGN1cnJlbnRDb2xvcigpOyB9CiAgICAgc3RhdGljIFRleHRFbXBoYXNpc0ZpbGwgaW5pdGlh
bFRleHRFbXBoYXNpc0ZpbGwoKSB7IHJldHVybiBUZXh0RW1waGFzaXNGaWxsOjpGaWxsZWQ7IH0K
ICAgICBzdGF0aWMgVGV4dEVtcGhhc2lzTWFyayBpbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpIHsg
cmV0dXJuIFRleHRFbXBoYXNpc01hcms6Ok5vbmU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtODMzLDcg
KzgzMyw3IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VGV4dE9yQm8KICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY29sb3IgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5jb2xvcigp
OwogCi0gICAgICAgIGF1dG8gc2hhZG93RGF0YSA9IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oTGF5
b3V0UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIHByb3BlcnR5ID09IENT
U1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9y
Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIGF1dG8gc2hhZG93RGF0YSA9IG1ha2VVbmlxdWU8U2hh
ZG93RGF0YT4oTGF5b3V0UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIHBy
b3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBj
b2xvciA6IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICAgICAgaWYgKHByb3BlcnR5ID09
IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldFRleHRTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFk
ZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgZWxz
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAkocmV2
aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2LDcgQEAgYm9vbCBCdWlsZGVyU3RhdGU6
OmNyZWF0ZUZpbHRlck9wZXJhdGlvbgogICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3IpCiAgICAg
ICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZVdpdGhSZXNvbHZlZEN1
cnJlbnRDb2xvcigqaXRlbS5jb2xvcik7CiAKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24s
IGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7Cisg
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xv
ciA6IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY28KIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29s
b3JJbmNsdWRpbmdPcGFjaXR5KCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAg
ICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgICAgIHJldHVybiBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjazsKIAogICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsK
ICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjAsNyArMTk2MCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0Vmlld0lzVHIKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIE9wdGlvbmFsPENvbG9y
PiBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgaWYgKHRyYW5zcGFyZW50KQotICAgICAgICBiYWNrZ3Jv
dW5kQ29sb3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgZG9jdW1lbnQtPnZp
ZXcoKS0+dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGJhY2tncm91bmRDb2xvcik7CiAgICAg
cmV0dXJuIHsgfTsKIH0KQEAgLTE5ODAsNyArMTk4MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElu
dGVybmFsczo6c2V0Vmlld0Jhc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwogCiAgICAgaWYgKGNvbG9yVmFsdWUgPT0gInRyYW5zcGFyZW50Iikgewot
ICAgICAgICBkb2N1bWVudC0+dmlldygpLT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudCk7CisgICAgICAgIGRvY3VtZW50LT52aWV3KCktPnNldEJhc2VCYWNrZ3JvdW5k
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KICAgICBpZiAoY29sb3JWYWx1ZSA9PSAid2hpdGUiKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjY0NTY1KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyNyBAQAorMjAyMC0wNy0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmVuYW1lIENvbG9yOjp0cmFuc3BhcmVudCB0byBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayB0byBtb3JlIGNsZWFybHkgc3RhdGUgd2hhdCBpdCBpcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NTIyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzOjpMYXllclByb3BlcnRpZXMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbToKKyAgICAgICAgKHNj
cm9sbFZpZXdCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3NldE9wYXF1
ZUludGVybmFsOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldERyYXdzQmFja2dyb3VuZCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1fdHJh
bnNjb2RpbmdRdWV1ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z2xpYi9XZWJLaXRXZWJQYWdlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlBhZ2VEaWRSZWNlaXZl
TWVzc2FnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzbmFwc2hvdE5vZGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvY29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6Vmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQp
OgorICAgICAgICBDb2xvcjo6dHJhbnNwYXJlbnQgdG8gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2su
CisKIDIwMjAtMDctMTcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbW92ZSBmaW5hbCB2ZXN0aWdhdGVzIG9mIFNpbXBsZUNvbG9yCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OkxheWVyUHJvcGVydAogICAgICwgY29ybmVyUmFkaXVzKDApCiAgICAgLCBib3JkZXJXaWR0
aCgwKQogICAgICwgb3BhY2l0eSgxKQotICAgICwgYmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNv
bG9yOjp0cmFuc3BhcmVudCkKKyAgICAsIGJhY2tncm91bmRDb2xvcihXZWJDb3JlOjpDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaykKICAgICAsIGJvcmRlckNvbG9yKFdlYkNvcmU6OkNvbG9yOjpibGFj
aykKICAgICAsIGVkZ2VBbnRpYWxpYXNpbmdNYXNrKGtDQUxheWVyTGVmdEVkZ2UgfCBrQ0FMYXll
clJpZ2h0RWRnZSB8IGtDQUxheWVyQm90dG9tRWRnZSB8IGtDQUxheWVyVG9wRWRnZSkKICAgICAs
IGN1c3RvbUFwcGVhcmFuY2UoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q3VzdG9tQXBwZWFyYW5j
ZTo6Tm9uZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
cmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBAIFdlYlBhZ2VQcm94eTo6V2Vi
UGFnZVByb3h5KFBhZ2VDbGllbnQmIHAKICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKExvYWRp
bmcsICJjb25zdHJ1Y3RvcjoiKTsKIAogICAgIGlmICghbV9jb25maWd1cmF0aW9uLT5kcmF3c0Jh
Y2tncm91bmQoKSkKLSAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihDb2xvcjo6dHJh
bnNwYXJlbnQpOworICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IENvbG9yKENvbG9yOjp0cmFu
c3BhcmVudEJsYWNrKTsKIAogICAgIHVwZGF0ZUFjdGl2aXR5U3RhdGUoKTsKICAgICB1cGRhdGVU
aHJvdHRsZVN0YXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dL
V2ViVmlld0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
aW9zL1dLV2ViVmlld0lPUy5tbQkocmV2aXNpb24gMjY0NTY1KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw3
ICs0ODksNyBAQCBzdGF0aWMgV2ViQ29yZTo6Q29sb3IgYmFzZVNjcm9sbFZpZXdCYWNrCiBzdGF0
aWMgV2ViQ29yZTo6Q29sb3Igc2Nyb2xsVmlld0JhY2tncm91bmRDb2xvcihXS1dlYlZpZXcgKndl
YlZpZXcpCiB7CiAgICAgaWYgKCF3ZWJWaWV3Lm9wYXF1ZSkKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkNvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbG9yOjp0
cmFuc3BhcmVudEJsYWNrOwogCiAjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBX
ZWJDb3JlOjpMb2NhbEN1cnJlbnRUcmFpdENvbGxlY3Rpb24gbG9jYWxUcmFpdENvbGxlY3Rpb24o
d2ViVmlldy50cmFpdENvbGxlY3Rpb24pOwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAgLSAodm9pZClf
c2V0T3BhcXVlSW50ZXJuYWw6KEJPT0wpb3BhcXVlCiAKICAgICBPcHRpb25hbDxXZWJDb3JlOjpD
b2xvcj4gYmFja2dyb3VuZENvbG9yOwogICAgIGlmICghb3BhcXVlKQotICAgICAgICBiYWNrZ3Jv
dW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpOwor
ICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcihXZWJDb3JlOjpDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgX3BhZ2UtPnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3Jv
dW5kQ29sb3IpOwogCiAgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kXTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCShyZXZp
c2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0RHJhd3NCYWNrZ3JvdW5kKGJvbwogewogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkNvbG9y
PiBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgaWYgKCFkcmF3c0JhY2tncm91bmQpCi0gICAgICAgIGJh
Y2tncm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVu
dCk7CisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9yKFdlYkNvcmU6OkNv
bG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICBtX3BhZ2UtPnNldEJhY2tncm91bmRDb2xvcihi
YWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gTWFrZSBzdXJlIHVwZGF0ZUxheWVyIGdldHMgY2Fs
bGVkIG9uIHRoZSB3ZWIgdmlldy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQ2LDcgKzc0Niw3IEBAIHZvaWQgd2Via2l0V2ViUGFnZURpZFJlY2VpdmVNZXNzYWdlKFdlYksK
ICAgICAgICAgICAgICAgICBDb2xvciBzYXZlZEJhY2tncm91bmRDb2xvcjsKICAgICAgICAgICAg
ICAgICBpZiAodHJhbnNwYXJlbnRCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIHNh
dmVkQmFja2dyb3VuZENvbG9yID0gZnJhbWVWaWV3LT5iYXNlQmFja2dyb3VuZENvbG9yKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZyYW1lVmlldy0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihDb2xv
cjo6dHJhbnNwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICBmcmFtZVZpZXctPnNldEJhc2VC
YWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBzbmFwc2hvdEltYWdlID0gd2ViUGFnZS0+c2NhbGVkU25hcHNo
b3RXaXRoT3B0aW9ucyhzbmFwc2hvdFJlY3QsIDEsIHNuYXBzaG90T3B0aW9ucyB8IFNuYXBzaG90
T3B0aW9uc1NoYXJlYWJsZSk7CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmFja2dy
b3VuZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCShyZXZpc2lvbiAyNjQ1NjUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5Miw3ICsyNDkyLDcgQEAgUmVmUHRy
PFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hvdE5vZGUoVwogICAgIGdyYXBoaWNzQ29udGV4dC0+
dHJhbnNsYXRlKC1zbmFwc2hvdFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBDb2xvciBzYXZlZEJh
Y2tncm91bmRDb2xvciA9IGZyYW1lVmlldy0+YmFzZUJhY2tncm91bmRDb2xvcigpOwotICAgIGZy
YW1lVmlldy0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAg
IGZyYW1lVmlldy0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayk7CiAgICAgZnJhbWVWaWV3LT5zZXROb2RlVG9EcmF3KCZub2RlKTsKIAogICAgIGZyYW1lVmll
dy0+cGFpbnRDb250ZW50c0ZvclNuYXBzaG90KCpncmFwaGljc0NvbnRleHQsIHNuYXBzaG90UmVj
dCwgRnJhbWVWaWV3OjpFeGNsdWRlU2VsZWN0aW9uLCBGcmFtZVZpZXc6OkRvY3VtZW50Q29vcmRp
bmF0ZXMpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0JKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDcgQEAgICAgIGlmICghaW50ZXJmYWNlLT5sYXllckhv
c3RpbmdDb250ZXh0KAogICAgICAgICBbdmlkZW9MYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOwogICAgICAgICBbdmlkZW9MYXllciBz
ZXROYW1lOkAiV2ViIFZpZGVvIEZ1bGxzY3JlZW4gTGF5ZXIiXTsKICAgICAgICAgW3ZpZGVvTGF5
ZXIgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoMCwgMCldOwotICAgICAgICBbdmlkZW9MYXllciBz
ZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJl
bnQpXTsKKyAgICAgICAgW3ZpZGVvTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29s
b3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50QmxhY2spXTsKIAogICAgICAgICAvLyBTZXQg
YSBzY2FsZSBmYWN0b3IgaGVyZSB0byBtYWtlIGNvbnZlcnRSZWN0OnRvTGF5ZXI6bmlsIHRha2Ug
c2NhbGUgZmFjdG9yIGludG8gYWNjb3VudC4gPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KICAg
ICAgICAgLy8gVGhpcyBzY2FsZSBmYWN0b3IgaXMgaW52ZXJ0ZWQgaW4gdGhlIGhvc3RpbmcgcHJv
Y2Vzcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDU2NSkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE2IEBACisyMDIwLTA3LTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
KworICAgICAgICBSZW5hbWUgQ29sb3I6OnRyYW5zcGFyZW50IHRvIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrIHRvIG1vcmUgY2xlYXJseSBzdGF0ZSB3aGF0IGl0IGlzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0
aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAg
ICAgIChXZWJGcmFtZTo6dXBkYXRlQmFja2dyb3VuZCk6CisgICAgICAgIENvbG9yOjp0cmFuc3Bh
cmVudCB0byBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjay4KKwogMjAyMC0wNy0xNyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGZpbmFsIHZlc3RpZ2F0ZXMg
b2YgU2ltcGxlQ29sb3IKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEzNyw3ICsyMTM3LDcgQEAgdm9pZCBXZWJGcmFtZTo6dXBkYXRl
QmFja2dyb3VuZCgpCiAKICAgICBPcHRpb25hbDxDb2xvcj4gYmFja2dyb3VuZENvbG9yOwogICAg
IGlmICh3ZWJWaWV3KCktPnRyYW5zcGFyZW50KCkpCi0gICAgICAgIGJhY2tncm91bmRDb2xvciA9
IENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IENv
bG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+dXBk
YXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGJhY2tncm91bmRDb2xvcik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDI2NDU2NSkKKysrIFNvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTYwLDcgKzk2MCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnRyYW5zaXRpb25Ub0MKICAgICB2aWV3LT5mcmFtZVJlY3QoJnBpeGVsUmVjdCk7CiAgICAg
T3B0aW9uYWw8Q29sb3I+IGJhY2tncm91bmRDb2xvcjsKICAgICBpZiAodmlldy0+dHJhbnNwYXJl
bnQoKSkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
KTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spOwogICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWUocGl4ZWxSZWN0KTsKICAgICBsb2dpY2Fs
RnJhbWUuc2NhbGUoMS4wZiAvIHZpZXctPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGNvcmUo
bV93ZWJGcmFtZSktPmNyZWF0ZVZpZXcoZW5jbG9zaW5nSW50UmVjdChsb2dpY2FsRnJhbWUpLnNp
emUoKSwgYmFja2dyb3VuZENvbG9yLCAvKiBmaXhlZExheW91dFNpemUgKi8geyB9LCAvKiBmaXhl
ZFZpc2libGVDb250ZW50UmVjdCAqLyB7IH0pOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY0NTY4KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDctMTggIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBDb2xvcjo6dHJhbnNw
YXJlbnQgdG8gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2sgdG8gbW9yZSBjbGVhcmx5IHN0YXRlIHdo
YXQgaXQgaXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNDUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW06CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50IGNvbnN0KToKKyAgICAgICAgVXBk
YXRlIGZvciByZW5hbWUgZnJvbSBDb2xvcjo6dHJhbnNwYXJlbnQgdG8gQ29sb3I6OnRyYW5zcGFy
ZW50QmxhY2suCisKIDIwMjAtMDctMTcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBmaW5hbCB2ZXN0aWdhdGVzIG9mIFNpbXBsZUNvbG9yCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24g
MjY0NTY1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERG
UGFnZTo6Y29sb3JBdFBvaW50CiAgICAgYXV0byBhID0gcGl4ZWxbaSArIDNdOwogCiAgICAgaWYg
KCFhKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50OworICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAgICAgcmV0dXJuIFdl
YkNvcmU6OmNsYW1wVG9Db21wb25lbnRCeXRlczxXZWJDb3JlOjpTUkdCQT4ociAqIDI1NSAvIGEs
IGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404681</attachid>
            <date>2020-07-19 13:20:57 -0700</date>
            <delta_ts>2020-07-19 15:33:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214522-20200719132056.patch</filename>
            <type>text/plain</type>
            <size>51160</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDIwLTA3LTE5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQ29sb3I6OnRyYW5zcGFy
ZW50IHRvIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIHRvIG1vcmUgY2xlYXJseSBzdGF0ZSB3aGF0
IGl0IGlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTQ1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAqIGNzcy9DU1NW
YWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljQ1NTVmFsdWVQb29sOjpTdGF0
aWNDU1NWYWx1ZVBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVQb29sOjpjcmVhdGVD
b2xvclZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjc3NWYWx1ZVRvQ29sb3IpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphdXRvRmlsbFN0cm9uZ1Bhc3N3b3JkTWFza0lt
YWdlKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dFR5cGU6OnZhbHVlQXNDb2xvciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdyk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd1NoYXBlSGlnaGxpZ2h0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3IpOgorICAg
ICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpwYWludEJveERlY29yYXRpb24pOgorICAgICAgICAqIHBhZ2UvQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OmNhcHRpb25zV2luZG93Q1NTIGNvbnN0KToKKyAgICAg
ICAgKiBwYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdS
aWdodEFsaWduZWRUZXh0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNuYXBzaG90Tm9kZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZWNhbGN1bGF0ZUJhc2VCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAqIHBhZ2UvUGFnZU92ZXJsYXkuaDoKKyAgICAgICAgKiBw
YWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXN0aW1hdGVkQmFja2dy
b3VuZENvbG9yRm9yUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0ZvckJsZW5kaW5nKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhY2hlZENHQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUlt
YWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlk
Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmJs
ZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpuc0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJhc2ljLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OlBh
aW50aW5nRW5naW5lQmFzaWM6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZVRocmVhZGVkLmNwcDoKKyAgICAgICAgKE5pY29z
aWE6OnBhaW50TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW06
CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdFZpZGVv
Q29udGVudExheWVyKToKKyAgICAgICAgKFZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpyZXR1cm5WaWRlb0NvbnRlbnRMYXllcik6CisgICAgICAgIChWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW5j
b21wbGV0ZUltYWdlT3V0bGluZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVJT1M6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ig
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE1lbmNsb3NlOjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
Ojp2aXNpdGVkRGVwZW5kZW50Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxT
dHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFkb3dW
YWx1ZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6Cisg
ICAgICAgICogc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5IGNvbnN0KToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFZp
ZXdJc1RyYW5zcGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0Vmlld0Jh
c2VCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICBDb2xvcjo6dHJhbnNwYXJlbnQgdG8gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2suCisKIDIwMjAtMDctMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBDb2xvckJ1aWxkZXIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5NSwxMyArMTk5
NSwxMyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnN0cmluZ1ZhCiBTUkdCQTx1
aW50OF90PiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiB7CiAj
aWYgIUVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJl
bnQ7CisgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogI2Vsc2UKICAgICBpZiAo
IWlzQ29sb3JXZWxsKCkpCi0gICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAg
ICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4obm9kZSgpKSkKLSAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsK
KyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMjY0NTg0KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwMyw3ICs0MDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbGVtZW50c0Zy
b21BdHRyaWJ1dGUoVmVjdG9yPEVsZW1lbnQqPiYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIC8vIE9ubHkgaWYgaXNDb2xvcldlbGwoKQotICAgIFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yVmFsdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvcjo6dHJhbnNw
YXJlbnQ7IH0KKyAgICBTUkdCQTx1aW50OF90PiBjb2xvclZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7IH0KIAogICAgIEFjY2Vzc2liaWxpdHlS
b2xlIHJvbGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcm9sZTsgfQogICAgIFN0
cmluZyByb2xlUGxhdGZvcm1TdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBT
dGF0aWNDU1NWYWx1ZVBvb2w6OlN0YXRpY0NTU1ZhbHVlUG9vbCgpCiAgICAgbV91bnNldFZhbHVl
LmNvbnN0cnVjdChDU1NWYWx1ZTo6U3RhdGljQ1NTVmFsdWUpOwogICAgIG1fcmV2ZXJ0VmFsdWUu
Y29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAKLSAgICBtX3RyYW5zcGFyZW50
Q29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29sb3I6OnRyYW5zcGFy
ZW50KTsKKyAgICBtX3RyYW5zcGFyZW50Q29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWND
U1NWYWx1ZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgIG1fd2hpdGVDb2xvci5jb25z
dHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6d2hpdGUpOwogICAgIG1fYmxh
Y2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2sp
OwogCkBAIC05Miw3ICs5Miw3IEBAIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29s
OjpjcmUKIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpjcmVhdGVDb2xvclZh
bHVlKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBUaGVzZSBhcmUgdGhlIGVtcHR5IGFu
ZCBkZWxldGVkIHZhbHVlcyBvZiB0aGUgaGFzaCB0YWJsZS4KLSAgICBpZiAoY29sb3IgPT0gQ29s
b3I6OnRyYW5zcGFyZW50KQorICAgIGlmIChjb2xvciA9PSBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
aykKICAgICAgICAgcmV0dXJuIHN0YXRpY0NTU1ZhbHVlUG9vbC0+bV90cmFuc3BhcmVudENvbG9y
LmdldCgpOwogICAgIGlmIChjb2xvciA9PSBDb2xvcjo6d2hpdGUpCiAgICAgICAgIHJldHVybiBz
dGF0aWNDU1NWYWx1ZVBvb2wtPm1fd2hpdGVDb2xvci5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDcg
KzM5MSw3IEBAIEVkaXRpbmdTdHlsZTo6fkVkaXRpbmdTdHlsZSgpID0gZGVmYXVsdDsKIHN0YXRp
YyBDb2xvciBjc3NWYWx1ZVRvQ29sb3IoQ1NTVmFsdWUqIGNvbG9yVmFsdWUpCiB7CiAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oY29sb3JWYWx1ZSkpCi0gICAgICAgIHJldHVybiBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsK
ICAgICAKICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlQ29sb3IgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKmNvbG9yVmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVDb2xvci5p
c1JHQkNvbG9yKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNTYsNyArMjA1Niw3IEBAIHN0YXRpYyBSZWY8
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gYXV0b0YKICAgICBmaXJzdFN0b3AucG9zaXRpb24gPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDUwLCBDU1NVbml0VHlwZTo6Q1NT
X1BFUkNFTlRBR0UpOwogCiAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc2Vjb25kU3RvcDsKLSAg
ICBzZWNvbmRTdG9wLmNvbG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVDb2xv
clZhbHVlKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgc2Vjb25kU3RvcC5jb2xvciA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7CiAgICAgc2Vjb25kU3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoMTAwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOwogCiAgICAg
YXV0byBncmFkaWVudCA9IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShDU1NHcmFkaWVu
dFJlcGVhdDo6Tm9uUmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGU6OkNTU0xpbmVhckdyYWRpZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEx
Niw3ICsxMTE2LDcgQEAgdm9pZCBJbnB1dFR5cGU6OnN0ZXBVcEZyb21SZW5kZXJlcihpbnQgbgog
CiBDb2xvciBJbnB1dFR5cGU6OnZhbHVlQXNDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudDsKKyAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiB9
CiAKIHZvaWQgSW5wdXRUeXBlOjpzZWxlY3RDb2xvcihTdHJpbmdWaWV3KQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzIsNyArMTcyLDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGU6OlN0
YQogICAgICwgbGluZUpvaW4oTWl0ZXJKb2luKQogICAgICwgbWl0ZXJMaW1pdCgxMCkKICAgICAs
IHNoYWRvd0JsdXIoMCkKLSAgICAsIHNoYWRvd0NvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKKyAg
ICAsIHNoYWRvd0NvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKQogICAgICwgZ2xvYmFsQWxw
aGEoMSkKICAgICAsIGdsb2JhbENvbXBvc2l0ZShDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
cikKICAgICAsIGdsb2JhbEJsZW5kKEJsZW5kTW9kZTo6Tm9ybWFsKQpAQCAtMTIwNyw3ICsxMjA3
LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhcgogICAgIGlmIChz
aG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAg
c2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXpl
KCksIDAsIENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIGNvbnRleHQtPnNldExlZ2FjeVNo
YWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgIH0KICAg
ICBpZiAoc3RhdGUoKS5nbG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsK
QEAgLTEzMDUsNyArMTMwNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c3Ryb2sKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xvclN0
cmluZywgT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKQogewotICAgIENvbG9yIGNvbG9yID0gQ29sb3I6
OnRyYW5zcGFyZW50OworICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7
CiAgICAgaWYgKCFjb2xvclN0cmluZy5pc051bGwoKSkgewogICAgICAgICBjb2xvciA9IHBhcnNl
Q29sb3JPckN1cnJlbnRDb2xvcihjb2xvclN0cmluZywgY2FudmFzQmFzZSgpKTsKICAgICAgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkpCkBAIC0xMzMxLDcgKzEzMzEsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y2xlYXJTaGFkb3coKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwg
Q29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJiBjb2xvcikKQEAgLTEzNTksNyArMTM1OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6YXBwbHkKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCk7CiAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Ip
OwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNp
emUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogfQogCiBib29sIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDI2
NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAyLDcgKzMwMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFwZUhp
Z2hsaWdodChHcmFwaGljc0MKICAgICAgICAgTGF5b3V0UmVjdCBzaGFwZUJvdW5kcyA9IHNoYXBl
T3V0c2lkZUluZm8tPmNvbXB1dGVkU2hhcGVQaHlzaWNhbEJvdW5kaW5nQm94KCk7CiAgICAgICAg
IEZsb2F0UXVhZCBzaGFwZVF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3Qoc2hhcGVCb3VuZHMpKTsKICAgICAgICAgY29udGVudHNRdWFkVG9Db29yZGluYXRlU3lz
dGVtKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgc2hhcGVRdWFkLCBJbnNwZWN0b3JPdmVybGF5
OjpDb29yZGluYXRlU3lzdGVtOjpEb2N1bWVudCk7Ci0gICAgICAgIGRyYXdPdXRsaW5lZFF1YWQo
Y29udGV4dCwgc2hhcGVRdWFkLCBzaGFwZUhpZ2hsaWdodENvbG9yLCBDb2xvcjo6dHJhbnNwYXJl
bnQsIGJvdW5kcyk7CisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgc2hhcGVRdWFk
LCBzaGFwZUhpZ2hsaWdodENvbG9yLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgYm91bmRzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDI2NDU4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBzdGF0aWMgY29uc3QgVUNo
YXIgZWxsaXBzaXNVQ2hhcltdID0geyAwCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yT2JqZWN0KQogewogICAgIGlmICghY29sb3JPYmplY3QpCi0gICAg
ICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgICAgIHJldHVybiBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjazsKIAogICAgIGludCByID0gMDsKICAgICBpbnQgZyA9IDA7CiAgICAgaW50
IGIgPSAwOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldEludGVnZXIoInIiLCByKSB8fCAhY29s
b3JPYmplY3QtPmdldEludGVnZXIoImciLCBnKSB8fCAhY29sb3JPYmplY3QtPmdldEludGVnZXIo
ImIiLCBiKSkKLSAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgcmV0
dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgZG91YmxlIGEgPSAxLjA7CiAgICAg
aWYgKCFjb2xvck9iamVjdC0+Z2V0RG91YmxlKCJhIiwgYSkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHAJKHJldmlz
aW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
UGFpbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIHZvaWQg
cGFpbnRCb3hEZWNvcmF0aW9uKEdyYXBoaWNzQwogICAgICAgICAgICAgY29udGV4dC5kcmF3TGlu
ZShzdGFydCwgZW5kKTsKICAgICAgICAgfTsKIAotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjayk7CiAKICAgICAgICAgYXV0byBkZWNvcmF0aW9uQm94V2lkdGgg
PSBkZWNvcmF0aW9uQm94U2l6ZS53aWR0aCgpOwogICAgICAgICBhdXRvIGRlY29yYXRpb25Cb3hI
ZWlnaHQgPSBkZWNvcmF0aW9uQm94U2l6ZS5oZWlnaHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZp
c2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDcgKzI3MSw3IEBAIFN0cmluZyBD
YXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIAogICAgIENvbG9yIHdpbmRvd0NvbG9y
KGNvbG9yLmdldCgpKTsKICAgICBpZiAoIXdpbmRvd0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
d2luZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgICAgIHdpbmRvd0NvbG9yID0g
Q29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKICAgICBib29sIGltcG9ydGFudCA9IGJlaGF2aW9y
ID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VWYWx1ZTsKICAgICBDR0Zsb2F0IG9w
YWNpdHkgPSBNQUNhcHRpb25BcHBlYXJhbmNlR2V0V2luZG93T3BhY2l0eShrTUFDYXB0aW9uQXBw
ZWFyYW5jZURvbWFpblVzZXIsICZiZWhhdmlvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RlYnVnUGFnZU92ZXJsYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RlYnVnUGFnZU92ZXJsYXlzLmNwcAkocmV2aXNpb24gMjY0NTg0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsx
NjcsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UmlnaHRBbGlnbmVkVGV4dChjb25zdCBTCiAgICAgZmxv
YXQgdGV4dEJhc2VsaW5lRnJvbVRvcCA9IDE0OwogCiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gVGV4
dFJ1bih0ZXh0KTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQp
OworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAg
ICBmbG9hdCB0ZXh0V2lkdGggPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIHsgfSk7
CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjb250ZXh0LmRy
YXdUZXh0KGZvbnQsIHRleHRSdW4sIGJveExvY2F0aW9uICsgRmxvYXRTaXplKC0odGV4dFdpZHRo
ICsgdGV4dEdhcCksIHRleHRCYXNlbGluZUZyb21Ub3ApKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUx
LDcgKzE1MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3ROb2QKIAog
ICAgIFNjb3BlZEZyYW1lUGFpbnRpbmdTdGF0ZSBzdGF0ZShmcmFtZSwgJm5vZGUpOwogCi0gICAg
ZnJhbWUudmlldygpLT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7
CisgICAgZnJhbWUudmlldygpLT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKICAgICBmcmFtZS52aWV3KCktPnNldE5vZGVUb0RyYXcoJm5vZGUpOwogCiAg
ICAgTGF5b3V0UmVjdCB0b3BMZXZlbFJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIEZyYW1lVmlldzo6cmVj
YWxjdWxhdGVCYXNlQmFja2dyb3VuCiAgICAgbV91c2VzRGFya0FwcGVhcmFuY2UgPSB1c2luZ0Rh
cmtBcHBlYXJhbmNlOwogICAgIE9wdGlvbmFsPENvbG9yPiBiYWNrZ3JvdW5kQ29sb3I7CiAgICAg
aWYgKG1faXNUcmFuc3BhcmVudCkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2spOwogICAgIHVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShiYWNr
Z3JvdW5kQ29sb3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlT3ZlcmxheS5oCShyZXZp
c2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VPdmVybGF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIE92ZXJsYXlUeXBlIG1f
b3ZlcmxheVR5cGU7CiAgICAgSW50UmVjdCBtX292ZXJyaWRlRnJhbWU7CiAKLSAgICBDb2xvciBt
X2JhY2tncm91bmRDb2xvciB7IENvbG9yOjp0cmFuc3BhcmVudCB9OworICAgIENvbG9yIG1fYmFj
a2dyb3VuZENvbG9yIHsgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2sgfTsKICAgICBQYWdlT3Zlcmxh
eUlEIG1fcGFnZU92ZXJsYXlJRDsKIAogICAgIGJvb2wgbV9zaG91bGRJZ25vcmVNb3VzZUV2ZW50
c091dHNpZGVCb3VuZHMgeyB0cnVlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGlj
YXRvci5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBzdGF0aWMgRmxv
YXRSZWN0IGFic29sdXRlQm91bmRpbmdSZWN0Rm9yCiAKIHN0YXRpYyBDb2xvciBlc3RpbWF0ZWRC
YWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEZy
YW1lJiBmcmFtZSkKIHsKLSAgICBhdXRvIGVzdGltYXRlZEJhY2tncm91bmRDb2xvciA9IGZyYW1l
LnZpZXcoKSA/IGZyYW1lLnZpZXcoKS0+ZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSA6IENvbG9y
Ojp0cmFuc3BhcmVudDsKKyAgICBhdXRvIGVzdGltYXRlZEJhY2tncm91bmRDb2xvciA9IGZyYW1l
LnZpZXcoKSA/IGZyYW1lLnZpZXcoKS0+ZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSA6IENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBudWxs
cHRyOwogICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihy
YW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpOwpAQCAtMjQ1LDcgKzI0
NSw3IEBAIHN0YXRpYyBDb2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3IKICAgICAgICAg
ICAgIHJldHVybiBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3I7CiAKICAgICAgICAgYXV0byB2aXNp
dGVkRGVwZW5kZW50QmFja2dyb3VuZENvbG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKLSAgICAgICAgaWYgKHZpc2l0ZWREZXBlbmRl
bnRCYWNrZ3JvdW5kQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50KQorICAgICAgICBpZiAodmlz
aXRlZERlcGVuZGVudEJhY2tncm91bmRDb2xvciAhPSBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaykK
ICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyQmFja2dyb3VuZENvbG9ycy5hcHBlbmQodmlzaXRl
ZERlcGVuZGVudEJhY2tncm91bmRDb2xvcik7CiAgICAgfQogICAgIHBhcmVudFJlbmRlcmVyQmFj
a2dyb3VuZENvbG9ycy5yZXZlcnNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyNjQ1
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2NiwxMCArNzY2LDEwIEBAIHN0YXRpYyBpbmxpbmUg
c2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY28KIAogc3RhdGljIGlubGluZSBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dGb3JCbGVuZGluZyhjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3csIGNvbnN0
IFNoYWRvd0RhdGEqIG90aGVyU2hhZG93KQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
aGFkb3dEYXRhPiBkZWZhdWx0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dT
dHlsZTo6Tm9ybWFsLCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2lu
dCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnQp
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94
U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVl
LCBDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dE
YXRhPiBkZWZhdWx0SW5zZXRXZWJLaXRCb3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAs
IFNoYWRvd1N0eWxlOjpJbnNldCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9p
bnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdElu
c2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZh
bHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAs
IDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0
Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRy
dWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKIAogICAgIGlmIChzcmNTaGFkb3cpCiAgICAg
ICAgIHJldHVybiBzcmNTaGFkb3c7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMiArMTQ1LDEyIEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0
OwogI2VuZGlmCiAKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gdHJhbnNwYXJlbnRCbGFjayA9
IFNSR0JBPHVpbnQ4X3Q+IHsgfTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gYmxhY2sgPSBT
UkdCQTx1aW50OF90PiB7IDAsIDAsIDAgfTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gd2hp
dGUgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMjU1LCAyNTUgfTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gZGFya0dyYXkgPSBTUkdCQTx1aW50OF90PiB7IDEyOCwgMTI4LCAxMjggfTsKICAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gZ3JheSA9IFNSR0JBPHVpbnQ4X3Q+IHsgMTYwLCAxNjAs
IDE2MCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBsaWdodEdyYXkgPSBTUkdCQTx1aW50
OF90PiB7IDE5MiwgMTkyLCAxOTIgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gdHJhbnNw
YXJlbnQgPSBTUkdCQTx1aW50OF90PiB7IH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGN5
YW4gPSBTUkdCQTx1aW50OF90PiB7IDAsIDI1NSwgMjU1IH07CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIHllbGxvdyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAyNTUsIDAgfTsKICAgICBzdGF0
aWMgY29uc3RleHByIGF1dG8gcmVkID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDAsIDAgfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcAkocmV2aXNpb24gMjY0NTg0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc4NSw3ICszNzg1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldERlYnVnQmFja2dyb3Vu
ZAogICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIG1fbGF5ZXItPnNldEJhY2tncm91
bmRDb2xvcihjb2xvcik7CiAgICAgZWxzZQotICAgICAgICBtX2xheWVyLT5zZXRCYWNrZ3JvdW5k
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgbV9sYXllci0+c2V0QmFja2dyb3Vu
ZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVy
Q0E6OmdldERlYnVnQm9yZGVySW5mbyhDb2xvciYgY29sb3IsIGZsb2F0JiB3aWR0aCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cu
Y3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIENHQ29s
b3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY28KIHsKICAgICBpZiAoY29sb3IuaXNJ
bmxpbmUoKSkgewogICAgICAgICBzd2l0Y2ggKFBhY2tlZDo6UkdCQSB7IGNvbG9yLmFzSW5saW5l
KCkgfS52YWx1ZSkgewotICAgICAgICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFuc3Bh
cmVudCB9LnZhbHVlOiB7CisgICAgICAgIGNhc2UgUGFja2VkOjpSR0JBIHsgQ29sb3I6OnRyYW5z
cGFyZW50QmxhY2sgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIENHQ29sb3JSZWYgdHJh
bnNwYXJlbnRDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwogICAgICAgICAgICAgcmV0dXJu
IHRyYW5zcGFyZW50Q0dDb2xvcjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9u
IDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUlt
YWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIENvbG9yIG5hdGl2ZUlt
YWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFw
Q29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwogCiAg
ICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKKyAg
ICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCiAgICAgcmV0dXJuIGNsYW1w
VG9Db21wb25lbnRCeXRlczxTUkdCQT4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
MV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10p
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjY0NTg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsMTIgKzMwNSwxMiBAQCBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBEcm9wU2hhZG93RmlsdGVyCiAgICAgICAgIHJldHVybiBEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2xvY2F0aW9u
LCBJbnRQb2ludCgpLCBwcm9ncmVzcyksCiAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3N0
ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9j
b2xvciwgQ29sb3I6OnRyYW5zcGFyZW50LCBwcm9ncmVzcykpOworICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9jb2xvciwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIHByb2dyZXNzKSk7CiAK
ICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93
bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oZnJvbSk7CiAgICAgSW50UG9pbnQgZnJv
bUxvY2F0aW9uID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmxvY2F0aW9uKCkgOiBJ
bnRQb2ludCgpOwogICAgIGludCBmcm9tU3RkRGV2aWF0aW9uID0gZnJvbU9wZXJhdGlvbiA/IGZy
b21PcGVyYXRpb24tPnN0ZERldmlhdGlvbigpIDogMDsKLSAgICBDb2xvciBmcm9tQ29sb3IgPSBm
cm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+Y29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVu
dDsKKyAgICBDb2xvciBmcm9tQ29sb3IgPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
Y29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogICAgIAogICAgIHJldHVybiBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZy
b21Mb2NhdGlvbiwgbV9sb2NhdGlvbiwgcHJvZ3Jlc3MpLApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjY0NTg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgTlNDb2xvciAqbnNDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzSW5saW5lKCkpIHsKICAgICAgICAgc3dp
dGNoIChQYWNrZWQ6OlJHQkEgeyBjb2xvci5hc0lubGluZSgpIH0udmFsdWUpIHsKLSAgICAgICAg
Y2FzZSBQYWNrZWQ6OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJlbnQgfS52YWx1ZTogeworICAgICAg
ICBjYXNlIFBhY2tlZDo6UkdCQSB7IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIH0udmFsdWU6IHsK
ICAgICAgICAgICAgIHN0YXRpYyBOU0NvbG9yICpjbGVhckNvbG9yID0gW1tOU0NvbG9yIGNvbG9y
V2l0aFNSR0JSZWQ6MCBncmVlbjowIGJsdWU6MCBhbHBoYTowXSByZXRhaW5dOwogICAgICAgICAg
ICAgcmV0dXJuIGNsZWFyQ29sb3I7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lQmFzaWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmlj
b3NpYVBhaW50aW5nRW5naW5lQmFzaWMuY3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJh
c2ljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIFBhaW50aW5nRW5n
aW5lQmFzaWM6OnBhaW50KEdyYXBoaWNzCiAKICAgICAgICAgICAgIGlmIChzdXBwb3J0c0FscGhh
KSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3I6OkNvcHkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBzb3VyY2VSZWN0LnNpemUoKSksIENvbG9yOjp0cmFuc3Bh
cmVudCk7CisgICAgICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHNvdXJjZVJlY3Quc2l6ZSgpKSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwog
ICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VPdmVyKTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdFbmdpbmVUaHJlYWRl
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhUGFpbnRpbmdFbmdpbmVUaHJlYWRlZC5jcHAJKHJldmlzaW9uIDI2NDU4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50
aW5nRW5naW5lVGhyZWFkZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0
YXRpYyB2b2lkIHBhaW50TGF5ZXIoR3JhcGhpY3NDb250ZXh0JiAKIAogICAgIGlmIChzdXBwb3J0
c0FscGhhKSB7CiAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yOjpDb3B5KTsKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHNvdXJjZVJlY3Quc2l6ZSgpKSwgQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAg
ICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNvdXJjZVJl
Y3Quc2l6ZSgpKSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgICAgICBjb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlcik7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlci5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyOjpwCiAgICAgICAgIEFTU0VSVCghbV90ZXh0dXJlKTsKICAgICAgICAgaWYgKG1f
aG9sZVB1bmNoQ2xpZW50KQogICAgICAgICAgICAgbV9ob2xlUHVuY2hDbGllbnQtPnNldFZpZGVv
UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QobW9kZWxWaWV3TWF0cml4Lm1hcFJlY3QodGFyZ2V0
UmVjdCkpKTsKLSAgICAgICAgdGV4bWFwR0wuZHJhd1NvbGlkQ29sb3IodGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBDb2xvcjo6dHJhbnNwYXJlbnQsIGZhbHNlKTsKKyAgICAgICAgdGV4bWFw
R0wuZHJhd1NvbGlkQ29sb3IodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjaywgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFW
S2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0JKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIFZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpyCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKICAgICBXZWJUaHJlYWRSdW4oW3Byb3RlY3RlZFRoaXMgPSBtYWtl
UmVmUHRyKHRoaXMpLCB0aGlzLCB2aWRlb0Z1bGxzY3JlZW5MYXllciA9IHJldGFpblB0cihbbV92
aWRlb0Z1bGxzY3JlZW5WaWV3IGxheWVyXSldICgpIG11dGFibGUgewotICAgICAgICBbdmlkZW9G
dWxsc2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6
Q29sb3I6OnRyYW5zcGFyZW50KV07CisgICAgICAgIFt2aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRC
YWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayldOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5
ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUo
cHJvdGVjdGVkVGhpcyksIHRoaXNdIHsKICAgICAgICAgICAgICAgICBpZiAoIW1faW50ZXJmYWNl
KQpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnIKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OwogICAgIFdlYlRocmVhZFJ1bihbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIodGhpcyksIHRo
aXMsIHZpZGVvRnVsbHNjcmVlbkxheWVyID0gcmV0YWluUHRyKFttX3ZpZGVvRnVsbHNjcmVlblZp
ZXcgbGF5ZXJdKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIFt2aWRlb0Z1bGxzY3JlZW5MYXllciBz
ZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJl
bnQpXTsKKyAgICAgICAgW3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJhY2tncm91bmRDb2xvcjpj
YWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudEJsYWNrKV07CiAgICAgICAg
IG1fZnVsbHNjcmVlbk1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwsIFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRoaXNdIHsKICAgICAgICAgICAgICAg
ICBpZiAoIW1faW50ZXJmYWNlKQpAQCAtMzAwLDcgKzMwMCw3IEBAICAgICAgICAgbV9pbnRlcmZh
Y2UtPmVudGVyRnVsbHNjcmVlbigpOwogICAgIH0pOwogI2Vsc2UKICAgICBXZWJUaHJlYWRSdW4o
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpLCB0aGlzLCB2aWRlb0Z1bGxzY3JlZW5M
YXllciA9IHJldGFpblB0cihbbV92aWRlb0Z1bGxzY3JlZW5WaWV3IGxheWVyXSldICgpIG11dGFi
bGUgewotICAgICAgICBbdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNh
Y2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50KV07CisgICAgICAgIFt2aWRl
b0Z1bGxzY3JlZW5MYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcihXZWJDb3Jl
OjpDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayldOwogICAgICAgICBtX2Z1bGxzY3JlZW5Nb2RlbC0+
c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIHRoaXNdIHsKICAgICAgICAgICAg
ICAgICBtX2ludGVyZmFjZS0+ZW50ZXJGdWxsc2NyZWVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MCw3
ICs0NzAsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEluY29tcGxldGVJbWFnZU91CiAgICAg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsKICAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKENvbG9yOjpsaWdodEdyYXkpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudCk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
QmxhY2spOwogICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlv
dXRSZWN0KHsgcGFpbnRPZmZzZXQueCgpICsgbGVmdEJvcmRlciArIGxlZnRQYWRkaW5nLCBwYWlu
dE9mZnNldC55KCkgKyB0b3BCb3JkZXIgKyB0b3BQYWRkaW5nIH0sIGNvbnRlbnRTaXplKSwgZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgYm9yZGVyV2lkdGgpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDI2NDU4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxMjUsNyArNDEyNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihH
cmFwaGljc0MKICAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJD
b3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKICAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAy
MTcgfSk7CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgICAgIGNvbnRl
eHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CiAgICAgfQogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2
aXNpb24gMjY0NTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc1LDcgKzExNzUsNyBAQCB2b2lkIFJlbmRlckxp
c3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIGNvbnRleHQuZHJhd0VsbGlwc2Uo
bWFya2VyUmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIExpc3RTdHlsZVR5cGU6OkNp
cmNsZToKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsK
KyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwog
ICAgICAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1hcmtlclJlY3QpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBMaXN0U3R5bGVUeXBlOjpTcXVhcmU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEx
MjksMTIgKzExMjksMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRGaWxlVXBsb2FkSWNv
bgogCiBDb2xvciBSZW5kZXJUaGVtZUlPUzo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJl
dHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZUlPUzo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICByZXR1cm4gQ29sb3I6OnRyYW5z
cGFyZW50QmxhY2s7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxDb2xvcj4mIGNhY2hlZEZvY3VzUmlu
Z0NvbG9yKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDE3ICsyNDUsMTcgQEAg
dm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAgICAgICAgICAgLy8g
RG8gbm90IGR1bXAgaW52YWxpZCBvciB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kcywgc2luY2UgdGhh
dCBpcyB0aGUgZGVmYXVsdC4KICAgICAgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IG8u
c3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
OwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihvLnBhcmVudCgp
LT5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciksIGJhY2tncm91bmRDb2xvcikKLSAgICAgICAgICAgICAgICAmJiBiYWNrZ3JvdW5kQ29sb3Ig
IT0gQ29sb3I6OnRyYW5zcGFyZW50KQorICAgICAgICAgICAgICAgICYmIGJhY2tncm91bmRDb2xv
ciAhPSBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaykKICAgICAgICAgICAgICAgICB0cyA8PCAiIFti
Z2NvbG9yPSIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoYmFja2dyb3VuZENv
bG9yKSA8PCAiXSI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENvbG9yIHRleHRGaWxsQ29s
b3IgPSBvLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4
dEZpbGxDb2xvcik7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9y
KG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dEZpbGxDb2xvciksIHRleHRGaWxsQ29sb3IpCi0gICAgICAgICAgICAgICAgJiYgdGV4
dEZpbGxDb2xvciAhPSBjb2xvciAmJiB0ZXh0RmlsbENvbG9yICE9IENvbG9yOjp0cmFuc3BhcmVu
dCkKKyAgICAgICAgICAgICAgICAmJiB0ZXh0RmlsbENvbG9yICE9IGNvbG9yICYmIHRleHRGaWxs
Q29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spCiAgICAgICAgICAgICAgICAgdHMgPDwg
IiBbdGV4dEZpbGxDb2xvcj0iIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KHRl
eHRGaWxsQ29sb3IpIDw8ICJdIjsKIAogICAgICAgICAgICAgQ29sb3IgdGV4dFN0cm9rZUNvbG9y
ID0gby5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2VDb2xvcik7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9y
KG8ucGFyZW50KCktPnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZUNvbG9yKSwgdGV4dFN0cm9rZUNvbG9yKQotICAgICAgICAgICAgICAgICYm
IHRleHRTdHJva2VDb2xvciAhPSBjb2xvciAmJiB0ZXh0U3Ryb2tlQ29sb3IgIT0gQ29sb3I6OnRy
YW5zcGFyZW50KQorICAgICAgICAgICAgICAgICYmIHRleHRTdHJva2VDb2xvciAhPSBjb2xvciAm
JiB0ZXh0U3Ryb2tlQ29sb3IgIT0gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spCiAgICAgICAgICAg
ICAgICAgdHMgPDwgIiBbdGV4dFN0cm9rZUNvbG9yPSIgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQodGV4dFN0cm9rZUNvbG9yKSA8PCAiXSI7CiAKICAgICAgICAgICAgIGlmIChv
LnBhcmVudCgpLT5zdHlsZSgpLnRleHRTdHJva2VXaWR0aCgpICE9IG8uc3R5bGUoKS50ZXh0U3Ry
b2tlV2lkdGgoKSAmJiBvLnN0eWxlKCkudGV4dFN0cm9rZVdpZHRoKCkgPiAwKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNZW5jbG9zZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxN
ZW5jbG9zZS5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xvc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
NyArMjIxLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxNZW5jbG9zZTo6cGFpbnQoUGFpbnRJbgogICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUNvbG9yKSk7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQoKS5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBwYWludEluZm8u
Y29udGV4dCgpLnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgcGFp
bnRJbmZvLmFwcGx5VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShwYWludE9m
ZnNldCArIGxvY2F0aW9uKCkpKTsKIAogICAgIC8vIEluIHRoZSBNYXRoTUwgaW4gSFRNTDUgaW1w
bGVtZW50YXRpb24gbm90ZSwgdGhlICJsZWZ0IiBub3RhdGlvbiBpcyBkZXNjcmliZWQgYXMgZm9s
bG93czoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAkocmV2aXNpb24gMjY0NTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1OSw3ICsyMDU5LDcgQEAg
Q29sb3IgUmVuZGVyU3R5bGU6OnZpc2l0ZWREZXBlbmRlbnRDb2xvcgogICAgIC8vIHdlJ3JlIHJl
dHVybmluZyB1bnZpc2l0ZWQgaW5mbyBmb3IgYSB2aXNpdGVkIGxpbmssIGJ1dCBnaXZlbiBvdXIg
cmVzdHJpY3Rpb24gdGhhdCB0aGUgYWxwaGEgdmFsdWVzCiAgICAgLy8gaGF2ZSB0byBtYXRjaCwg
aXQgbWFrZXMgbW9yZSBzZW5zZSB0byByZXR1cm4gdGhlIHVudmlzaXRlZCBiYWNrZ3JvdW5kIGNv
bG9yIGlmIHNwZWNpZmllZCB0aGFuIGl0CiAgICAgLy8gZG9lcyB0byByZXR1cm4gYmxhY2suIFRo
aXMgYmVoYXZpb3IgbWF0Y2hlcyB3aGF0IEZpcmVmb3ggNCBkb2VzIGFzIHdlbGwuCi0gICAgaWYg
KGNvbG9yUHJvcGVydHkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IgJiYgdmlzaXRlZENv
bG9yID09IENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICBpZiAoY29sb3JQcm9wZXJ0eSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvciAmJiB2aXNpdGVkQ29sb3IgPT0gQ29sb3I6OnRyYW5zcGFy
ZW50QmxhY2spCiAgICAgICAgIHJldHVybiB1bnZpc2l0ZWRDb2xvcjsKIAogICAgIC8vIFRha2Ug
dGhlIGFscGhhIGZyb20gdGhlIHVudmlzaXRlZCBjb2xvciwgYnV0IGdldCB0aGUgUkdCIHZhbHVl
cyBmcm9tIHRoZSB2aXNpdGVkIGNvbG9yLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIw
LDcgKzEzMjAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRMaW5rU3Ryb2tl
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1N0
cm9rZUNvbG9yOyB9CiAgICAgdm9pZCBzZXRIYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoYm9v
bCB2KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVkRGF0YSwgaGFzU2V0U3Ryb2tlQ29sb3IsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2KSk7IH0KICAgICBib29sIGhhc0V4cGxpY2l0bHlTZXRTdHJv
a2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPmhhc1NldFN0cm9r
ZUNvbG9yOyB9OwotICAgIHN0YXRpYyBDb2xvciBpbml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJldHVy
biBDb2xvcjo6dHJhbnNwYXJlbnQ7IH0KKyAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0cm9rZUNv
bG9yKCkgeyByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7IH0KICAgICBDb2xvciBjb21w
dXRlZFN0cm9rZUNvbG9yKCkgY29uc3Q7CiAKICAgICBmbG9hdCBzdHJva2VNaXRlckxpbWl0KCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+bWl0ZXJMaW1pdDsgfQpAQCAtMTYw
MSw3ICsxNjAxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsUGVyc3BlY3Rp
dmUoKSB7IHJldHVybiAwOyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsUGVyc3BlY3RpdmVP
cmlnaW5YKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjBmLCBQZXJjZW50KTsgfQogICAgIHN0YXRpYyBM
ZW5ndGggaW5pdGlhbFBlcnNwZWN0aXZlT3JpZ2luWSgpIHsgcmV0dXJuIExlbmd0aCg1MC4wZiwg
UGVyY2VudCk7IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbEJhY2tncm91bmRDb2xvcigpIHsg
cmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0aWFsQmFj
a2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7IH0KICAgICBz
dGF0aWMgQ29sb3IgaW5pdGlhbFRleHRFbXBoYXNpc0NvbG9yKCkgeyByZXR1cm4gY3VycmVudENv
bG9yKCk7IH0KICAgICBzdGF0aWMgVGV4dEVtcGhhc2lzRmlsbCBpbml0aWFsVGV4dEVtcGhhc2lz
RmlsbCgpIHsgcmV0dXJuIFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZDsgfQogICAgIHN0YXRpYyBU
ZXh0RW1waGFzaXNNYXJrIGluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkgeyByZXR1cm4gVGV4dEVt
cGhhc2lzTWFyazo6Tm9uZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyQ3VzdG9tLmgJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MzMsNyArODMzLDcgQEAgaW5s
aW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCbwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBjb2xvciA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNvbG9yKCk7CiAKLSAgICAgICAg
YXV0byBzaGFkb3dEYXRhID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihMYXlvdXRQb2ludCh4LCB5
KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJr
aXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50
KTsKKyAgICAgICAgYXV0byBzaGFkb3dEYXRhID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihMYXlv
dXRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgcHJvcGVydHkgPT0gQ1NT
UHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2spOwogICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlU
ZXh0U2hhZG93KQogICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFNoYWRv
dyhXVEZNb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0
IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCShyZXZpc2lvbiAyNjQ1ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2Niw3ICsyNjYsNyBAQCBib29sIEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9uCiAgICAgICAgICAgICBpZiAoaXRlbS5jb2xvcikKICAgICAgICAgICAgICAgICBj
b2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlV2l0aFJlc29sdmVkQ3VycmVudENvbG9yKCpp
dGVtLmNvbG9yKTsKIAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5k
KERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29sb3Iu
aXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2spKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlz
aW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZChjbwogQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
OwogCiAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogICAgIGF1dG8mIHN2
Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2MCw3ICsxOTYwLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRWaWV3SXNUcgogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAgICAgT3B0aW9uYWw8Q29sb3I+IGJhY2tncm91bmRD
b2xvcjsKICAgICBpZiAodHJhbnNwYXJlbnQpCi0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENv
bG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9y
KENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICBkb2N1bWVudC0+dmlldygpLT51cGRhdGVC
YWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yKTsKICAgICByZXR1cm4geyB9Owog
fQpAQCAtMTk4MCw3ICsxOTgwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRW
aWV3QmFzZQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
CiAKICAgICBpZiAoY29sb3JWYWx1ZSA9PSAidHJhbnNwYXJlbnQiKSB7Ci0gICAgICAgIGRvY3Vt
ZW50LT52aWV3KCktPnNldEJhc2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsK
KyAgICAgICAgZG9jdW1lbnQtPnZpZXcoKS0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIGlmIChj
b2xvclZhbHVlID09ICJ3aGl0ZSIpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjQ1ODQpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDIwLTA3LTE5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgQ29sb3I6OnRyYW5zcGFyZW50IHRvIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIHRvIG1v
cmUgY2xlYXJseSBzdGF0ZSB3aGF0IGl0IGlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpMYXllclByb3BlcnRpZXM6OkxheWVyUHJvcGVydGllcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tOgorICAgICAgICAoc2Nyb2xsVmlld0JhY2tncm91
bmRDb2xvcik6CisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0T3BhcXVlSW50ZXJuYWw6XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6bV90cmFuc2NvZGluZ1F1ZXVlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBh
Z2UuY3BwOgorICAgICAgICAod2Via2l0V2ViUGFnZURpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnNuYXBzaG90Tm9kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6CisgICAgICAgIENvbG9y
Ojp0cmFuc3BhcmVudCB0byBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjay4KKwogMjAyMC0wNy0xOSAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIENvbG9yQnVp
bGRlcgpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkocmV2aXNpb24g
MjY0NTg0KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnQKICAgICAsIGNvcm5lclJhZGl1
cygwKQogICAgICwgYm9yZGVyV2lkdGgoMCkKICAgICAsIG9wYWNpdHkoMSkKLSAgICAsIGJhY2tn
cm91bmRDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpCisgICAgLCBiYWNrZ3JvdW5k
Q29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50QmxhY2spCiAgICAgLCBib3JkZXJDb2xv
cihXZWJDb3JlOjpDb2xvcjo6YmxhY2spCiAgICAgLCBlZGdlQW50aWFsaWFzaW5nTWFzayhrQ0FM
YXllckxlZnRFZGdlIHwga0NBTGF5ZXJSaWdodEVkZ2UgfCBrQ0FMYXllckJvdHRvbUVkZ2UgfCBr
Q0FMYXllclRvcEVkZ2UpCiAgICAgLCBjdXN0b21BcHBlYXJhbmNlKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OkN1c3RvbUFwcGVhcmFuY2U6Ok5vbmUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI2NDU4NCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAs
NyBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwCiAgICAgUkVMRUFT
RV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAiY29uc3RydWN0b3I6Iik7CiAKICAgICBpZiAoIW1f
Y29uZmlndXJhdGlvbi0+ZHJhd3NCYWNrZ3JvdW5kKCkpCi0gICAgICAgIG1fYmFja2dyb3VuZENv
bG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kQ29s
b3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAKICAgICB1cGRhdGVBY3Rpdml0
eVN0YXRlKCk7CiAgICAgdXBkYXRlVGhyb3R0bGVTdGF0ZSgpOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0JKHJldmlzaW9uIDI2NDU4
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00ODksNyArNDg5LDcgQEAgc3RhdGljIFdlYkNvcmU6OkNvbG9yIGJh
c2VTY3JvbGxWaWV3QmFjawogc3RhdGljIFdlYkNvcmU6OkNvbG9yIHNjcm9sbFZpZXdCYWNrZ3Jv
dW5kQ29sb3IoV0tXZWJWaWV3ICp3ZWJWaWV3KQogewogICAgIGlmICghd2ViVmlldy5vcGFxdWUp
Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCiAgICAgV2ViQ29yZTo6TG9jYWxDdXJyZW50VHJhaXRDb2xsZWN0aW9u
IGxvY2FsVHJhaXRDb2xsZWN0aW9uKHdlYlZpZXcudHJhaXRDb2xsZWN0aW9uKTsKQEAgLTE0MTUs
NyArMTQxNSw3IEBAIC0gKHZvaWQpX3NldE9wYXF1ZUludGVybmFsOihCT09MKW9wYXF1ZQogCiAg
ICAgT3B0aW9uYWw8V2ViQ29yZTo6Q29sb3I+IGJhY2tncm91bmRDb2xvcjsKICAgICBpZiAoIW9w
YXF1ZSkKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gV2ViQ29yZTo6Q29sb3IoV2ViQ29yZTo6
Q29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0gV2ViQ29yZTo6
Q29sb3IoV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgIF9wYWdlLT5zZXRC
YWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKIAogICAgIFtzZWxmIF91cGRhdGVTY3Jv
bGxWaWV3QmFja2dyb3VuZF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjY0NTg0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MDEsNyArMTUw
MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldERyYXdzQmFja2dyb3VuZChib28KIHsKICAgICBP
cHRpb25hbDxXZWJDb3JlOjpDb2xvcj4gYmFja2dyb3VuZENvbG9yOwogICAgIGlmICghZHJhd3NC
YWNrZ3JvdW5kKQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcihXZWJD
b3JlOjpDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBXZWJD
b3JlOjpDb2xvcihXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgbV9wYWdl
LT5zZXRCYWNrZ3JvdW5kQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB1cGRhdGVMYXllciBnZXRzIGNhbGxlZCBvbiB0aGUgd2ViIHZpZXcuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViUGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9nbGliL1dlYktpdFdlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIHdlYmtpdFdlYlBhZ2VE
aWRSZWNlaXZlTWVzc2FnZShXZWJLCiAgICAgICAgICAgICAgICAgQ29sb3Igc2F2ZWRCYWNrZ3Jv
dW5kQ29sb3I7CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmFja2dyb3VuZCkgewog
ICAgICAgICAgICAgICAgICAgICBzYXZlZEJhY2tncm91bmRDb2xvciA9IGZyYW1lVmlldy0+YmFz
ZUJhY2tncm91bmRDb2xvcigpOwotICAgICAgICAgICAgICAgICAgICBmcmFtZVZpZXctPnNldEJh
c2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgZnJhbWVWaWV3LT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc25hcHNob3RJbWFnZSA9
IHdlYlBhZ2UtPnNjYWxlZFNuYXBzaG90V2l0aE9wdGlvbnMoc25hcHNob3RSZWN0LCAxLCBzbmFw
c2hvdE9wdGlvbnMgfCBTbmFwc2hvdE9wdGlvbnNTaGFyZWFibGUpOwogICAgICAgICAgICAgICAg
IGlmICh0cmFuc3BhcmVudEJhY2tncm91bmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjY0NTg0KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
OTIsNyArMjQ5Miw3IEBAIFJlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c25hcHNob3ROb2RlKFcK
ICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtc25hcHNob3RSZWN0LmxvY2F0aW9uKCkp
OwogCiAgICAgQ29sb3Igc2F2ZWRCYWNrZ3JvdW5kQ29sb3IgPSBmcmFtZVZpZXctPmJhc2VCYWNr
Z3JvdW5kQ29sb3IoKTsKLSAgICBmcmFtZVZpZXctPnNldEJhc2VCYWNrZ3JvdW5kQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50KTsKKyAgICBmcmFtZVZpZXctPnNldEJhc2VCYWNrZ3JvdW5kQ29sb3Io
Q29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwogICAgIGZyYW1lVmlldy0+c2V0Tm9kZVRvRHJhdygm
bm9kZSk7CiAKICAgICBmcmFtZVZpZXctPnBhaW50Q29udGVudHNGb3JTbmFwc2hvdCgqZ3JhcGhp
Y3NDb250ZXh0LCBzbmFwc2hvdFJlY3QsIEZyYW1lVmlldzo6RXhjbHVkZVNlbGVjdGlvbiwgRnJh
bWVWaWV3OjpEb2N1bWVudENvb3JkaW5hdGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCShyZXZp
c2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBAICAgICBp
ZiAoIWludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgKICAgICAgICAgW3ZpZGVvTGF5ZXIg
c2V0RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsK
ICAgICAgICAgW3ZpZGVvTGF5ZXIgc2V0TmFtZTpAIldlYiBWaWRlbyBGdWxsc2NyZWVuIExheWVy
Il07CiAgICAgICAgIFt2aWRlb0xheWVyIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDAsIDApXTsK
LSAgICAgICAgW3ZpZGVvTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3IoV2Vi
Q29yZTo6Q29sb3I6OnRyYW5zcGFyZW50KV07CisgICAgICAgIFt2aWRlb0xheWVyIHNldEJhY2tn
cm91bmRDb2xvcjpjYWNoZWRDR0NvbG9yKFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KV07CiAKICAgICAgICAgLy8gU2V0IGEgc2NhbGUgZmFjdG9yIGhlcmUgdG8gbWFrZSBjb252ZXJ0
UmVjdDp0b0xheWVyOm5pbCB0YWtlIHNjYWxlIGZhY3RvciBpbnRvIGFjY291bnQuIDxyZGFyOi8v
cHJvYmxlbS8xODMxNjU0Mj4uCiAgICAgICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9yIGlzIGludmVy
dGVkIGluIHRoZSBob3N0aW5nIHByb2Nlc3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wNy0xOSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIENvbG9yOjp0cmFuc3BhcmVu
dCB0byBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayB0byBtb3JlIGNsZWFybHkgc3RhdGUgd2hhdCBp
dCBpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0
NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJGcmFtZUxv
YWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6CisgICAgICAgICog
V2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnVwZGF0ZUJhY2tncm91bmQpOgorICAg
ICAgICBDb2xvcjo6dHJhbnNwYXJlbnQgdG8gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2suCisKIDIw
MjAtMDctMTcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBmaW5hbCB2ZXN0aWdhdGVzIG9mIFNpbXBsZUNvbG9yCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjQ1ODQpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMzcsNyArMjEzNyw3IEBAIHZv
aWQgV2ViRnJhbWU6OnVwZGF0ZUJhY2tncm91bmQoKQogCiAgICAgT3B0aW9uYWw8Q29sb3I+IGJh
Y2tncm91bmRDb2xvcjsKICAgICBpZiAod2ViVmlldygpLT50cmFuc3BhcmVudCgpKQotICAgICAg
ICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgICAgICBi
YWNrZ3JvdW5kQ29sb3IgPSBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgY29y
ZUZyYW1lLT52aWV3KCktPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShiYWNrZ3JvdW5kQ29s
b3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAy
NjQ1ODQpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2MCw3ICs5NjAsNyBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiAgICAgdmlldy0+ZnJhbWVSZWN0
KCZwaXhlbFJlY3QpOwogICAgIE9wdGlvbmFsPENvbG9yPiBiYWNrZ3JvdW5kQ29sb3I7CiAgICAg
aWYgKHZpZXctPnRyYW5zcGFyZW50KCkpCi0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9y
KENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lKHBpeGVs
UmVjdCk7CiAgICAgbG9naWNhbEZyYW1lLnNjYWxlKDEuMGYgLyB2aWV3LT5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKICAgICBjb3JlKG1fd2ViRnJhbWUpLT5jcmVhdGVWaWV3KGVuY2xvc2luZ0ludFJl
Y3QobG9naWNhbEZyYW1lKS5zaXplKCksIGJhY2tncm91bmRDb2xvciwgLyogZml4ZWRMYXlvdXRT
aXplICovIHsgfSwgLyogZml4ZWRWaXNpYmxlQ29udGVudFJlY3QgKi8geyB9KTsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2
NDU4NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDIwLTA3LTE5ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgQ29sb3I6OnRyYW5zcGFyZW50IHRvIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIHRvIG1v
cmUgY2xlYXJseSBzdGF0ZSB3aGF0IGl0IGlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1t
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFBERlBhZ2U6OmNvbG9yQXRQb2ludCBjb25z
dCk6CisgICAgICAgIFVwZGF0ZSBmb3IgcmVuYW1lIGZyb20gQ29sb3I6OnRyYW5zcGFyZW50IHRv
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLgorCiAyMDIwLTA3LTE5ICBNaWNoYWVsIENhdGFuemFy
byAgPG1jYXRhbnphcm9AZ25vbWUub3JnPgogCiAgICAgICAgIGNwcC5weTozNjg4OiBGdXR1cmVX
YXJuaW5nOiBQb3NzaWJsZSBuZXN0ZWQgc2V0IGF0IHBvc2l0aW9uIDEwMQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHJldmlzaW9uIDI2NDU4
NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgV2ViQ29yZTo6Q29sb3IgVGVzdFBERlBhZ2U6
OmNvbG9yQXRQb2ludAogICAgIGF1dG8gYSA9IHBpeGVsW2kgKyAzXTsKIAogICAgIGlmICghYSkK
LSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudDsKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogICAgIHJldHVybiBXZWJDb3Jl
OjpjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8V2ViQ29yZTo6U1JHQkE+KHIgKiAyNTUgLyBhLCBnICog
MjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEpOwogfQogCg==
</data>
<flag name="commit-queue"
          id="420070"
          type_id="3"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>