<?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>142063</bug_id>
          
          <creation_ts>2015-02-26 16:02:23 -0800</creation_ts>
          <short_desc>Remove PassRefPtr from svg/properties classes</short_desc>
          <delta_ts>2015-04-23 01:47:38 -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>SVG</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>144092</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1072537</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-02-26 16:02:23 -0800</bug_when>
    <thetext>In the revision http://trac.webkit.org/changeset/180129, I changed the return type of some functions from PassRefPtr&lt;&gt; to Ref&lt;&gt;. But I did not check the callers of these functions to correct the type of variables which are assigned the return of the modified functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072549</commentid>
    <comment_count>1</comment_count>
      <attachid>247466</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-02-26 16:29:14 -0800</bug_when>
    <thetext>Created attachment 247466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073522</commentid>
    <comment_count>2</comment_count>
      <attachid>247466</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-02 16:46:19 -0800</bug_when>
    <thetext>Comment on attachment 247466
Patch

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

&gt; Source/WebCore/svg/SVGMarkerElement.cpp:242
&gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGMarkerElement::lookupOrCreateOrientTypeWrapper(SVGElement* contextElement)

Shouldn&apos;t this return a Ref&lt;&gt;?

&gt; Source/WebCore/svg/SVGPathElement.cpp:314
&gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGPathElement::lookupOrCreateDWrapper(SVGElement* contextElement)

Shouldn&apos;t this return a Ref&lt;&gt;?

&gt; Source/WebCore/svg/SVGPolyElement.cpp:140
&gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGPolyElement::lookupOrCreatePointsWrapper(SVGElement* contextElement)

Shouldn&apos;t this return a Ref&lt;&gt;?

&gt; Source/WebCore/svg/SVGTextContentElement.cpp:84
&gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGTextContentElement::lookupOrCreateTextLengthWrapper(SVGElement* contextElement)

Shouldn&apos;t this return a Ref&lt;&gt;?

&gt; Source/WebCore/svg/SVGViewSpec.cpp:170
&gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGViewSpec::lookupOrCreateViewBoxWrapper(SVGViewSpec* ownerType)

Shouldn&apos;t this return a Ref&lt;&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075201</commentid>
    <comment_count>3</comment_count>
      <attachid>248131</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-03-06 19:10:12 -0800</bug_when>
    <thetext>Created attachment 248131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075210</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-03-06 20:02:35 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 247466 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247466&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGMarkerElement.cpp:242
&gt; &gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGMarkerElement::lookupOrCreateOrientTypeWrapper(SVGElement* contextElement)
&gt; 
&gt; Shouldn&apos;t this return a Ref&lt;&gt;?
&gt; 
&gt; &gt; Source/WebCore/svg/SVGPathElement.cpp:314
&gt; &gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGPathElement::lookupOrCreateDWrapper(SVGElement* contextElement)
&gt; 
&gt; Shouldn&apos;t this return a Ref&lt;&gt;?
&gt; 
&gt; &gt; Source/WebCore/svg/SVGPolyElement.cpp:140
&gt; &gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGPolyElement::lookupOrCreatePointsWrapper(SVGElement* contextElement)
&gt; 
&gt; Shouldn&apos;t this return a Ref&lt;&gt;?
&gt; 
&gt; &gt; Source/WebCore/svg/SVGTextContentElement.cpp:84
&gt; &gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGTextContentElement::lookupOrCreateTextLengthWrapper(SVGElement* contextElement)
&gt; 
&gt; Shouldn&apos;t this return a Ref&lt;&gt;?
&gt; 
&gt; &gt; Source/WebCore/svg/SVGViewSpec.cpp:170
&gt; &gt; +RefPtr&lt;SVGAnimatedProperty&gt; SVGViewSpec::lookupOrCreateViewBoxWrapper(SVGViewSpec* ownerType)
&gt; 
&gt; Shouldn&apos;t this return a Ref&lt;&gt;?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075262</commentid>
    <comment_count>5</comment_count>
      <attachid>248131</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-07 08:48:43 -0800</bug_when>
    <thetext>Comment on attachment 248131
Patch

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

&gt; Source/WTF/wtf/Ref.h:159
&gt; +template&lt;typename T, typename U&gt; inline Ref&lt;T&gt; static_reference_cast(Ref&lt;U&gt;&amp; reference)
&gt; +{
&gt; +    return Ref&lt;T&gt;(static_cast&lt;T&amp;&gt;(reference.get()));
&gt; +}
&gt; +
&gt; +template&lt;typename T, typename U&gt; inline Ref&lt;T&gt; static_reference_cast(const Ref&lt;U&gt;&amp; reference)
&gt; +{
&gt; +    return Ref&lt;T&gt;(static_cast&lt;T&amp;&gt;(reference.copyRef().get()));
&gt; +}

It would be nice to avoid adding this if we can. Read below to see why we may not need it.

&gt; Source/WebCore/svg/properties/SVGAnimatedProperty.h:51
&gt; +    static Ref&lt;TearOffType&gt; lookupOrCreateWrapper(OwnerType* element, const SVGPropertyInfo* info, PropertyType&amp; property)

Because of the caching approach, the return type here could be TearOffType&amp;. Whether it’s found in the cache or created, the cache has a reference to the return value, so there’s no need for the return type to do reference counting at all; the caller can ref the object if they intend to keep it by storing it in a Ref, or not. This could simplify all the callers, which in turn don’t need to use static_reference_cast. I think there will be a cascading effect of this that should turn many return values into simple references rather than Ref.

&gt; Source/WebCore/svg/properties/SVGListProperty.h:145
&gt;              return 0;

If you are refactoring like this, these should change into nullptr.

&gt; Source/WebCore/svg/properties/SVGListProperty.h:166
&gt; +        return newItem;

Without an explicit call to WTF::move, does this result in reference count churn, or is the language/compiler smart enough to do a move with the WTF::move?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075970</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-03-10 09:40:20 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 248131 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248131&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Ref.h:159
&gt; &gt; +template&lt;typename T, typename U&gt; inline Ref&lt;T&gt; static_reference_cast(Ref&lt;U&gt;&amp; reference)
&gt; &gt; +{
&gt; &gt; +    return Ref&lt;T&gt;(static_cast&lt;T&amp;&gt;(reference.get()));
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T, typename U&gt; inline Ref&lt;T&gt; static_reference_cast(const Ref&lt;U&gt;&amp; reference)
&gt; &gt; +{
&gt; &gt; +    return Ref&lt;T&gt;(static_cast&lt;T&amp;&gt;(reference.copyRef().get()));
&gt; &gt; +}
&gt; 
&gt; It would be nice to avoid adding this if we can. Read below to see why we
&gt; may not need it.
&gt; 
&gt; &gt; Source/WebCore/svg/properties/SVGAnimatedProperty.h:51
&gt; &gt; +    static Ref&lt;TearOffType&gt; lookupOrCreateWrapper(OwnerType* element, const SVGPropertyInfo* info, PropertyType&amp; property)
&gt; 
&gt; Because of the caching approach, the return type here could be TearOffType&amp;.
&gt; Whether it’s found in the cache or created, the cache has a reference to the
&gt; return value, so there’s no need for the return type to do reference
&gt; counting at all; the caller can ref the object if they intend to keep it by
&gt; storing it in a Ref, or not. This could simplify all the callers, which in
&gt; turn don’t need to use static_reference_cast. I think there will be a
&gt; cascading effect of this that should turn many return values into simple
&gt; references rather than Ref.
&gt; 

Ic could convert SVGAnimatedProperty::lookupOrCreateWrapper() to return a TearOffType&amp; but I could not go any deeper than that. The reason is SVGAttributeToPropertyMap packs the properties with their values of an SVG element in a Vector&lt;RefPtr&lt;SVGAnimatedProperty&gt;&gt;. This vector is put in a  SVGElementAnimatedProperties which is assigned to m_animatedProperties of the class SVGAnimateElementBase. I am not sure about the lifetime of SVGAnimatedProperty and its cache versus SVGAnimateElementBase: which one gets released first? So I left all the calls after SVGAnimatedProperty::lookupOrCreateWrapper() to be Ref&lt;&gt;.

&gt; &gt; Source/WebCore/svg/properties/SVGListProperty.h:145
&gt; &gt;              return 0;
&gt; 
&gt; If you are refactoring like this, these should change into nullptr.
&gt; 

Done.

&gt; &gt; Source/WebCore/svg/properties/SVGListProperty.h:166
&gt; &gt; +        return newItem;
&gt; 
&gt; Without an explicit call to WTF::move, does this result in reference count
&gt; churn, or is the language/compiler smart enough to do a move with the
&gt; WTF::move?

I do not think we need to explicitly WTF::move the passed argument to the return value. Since they are both of type RefPtr&lt;&gt; the move constructor is called for the return statement and hence the ref-count should not be affected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075971</commentid>
    <comment_count>7</comment_count>
      <attachid>248333</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-03-10 09:40:55 -0700</bug_when>
    <thetext>Created attachment 248333
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076059</commentid>
    <comment_count>8</comment_count>
      <attachid>248333</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-10 13:40:20 -0700</bug_when>
    <thetext>Comment on attachment 248333
Patch

Clearing flags on attachment: 248333

Committed r181345: &lt;http://trac.webkit.org/changeset/181345&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076060</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-10 13:40:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247466</attachid>
            <date>2015-02-26 16:29:14 -0800</date>
            <delta_ts>2015-03-06 19:10:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142063-20150226162900.patch</filename>
            <type>text/plain</type>
            <size>41717</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE1LTAyLTI2ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBh
c3NSZWZQdHIgZnJvbSBzdmcvcHJvcGVydGllcyBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMDYzLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIg
ZnJvbSBzdmcvcHJvcGVydGllcyBjbGFzc2VzLiBBbGwgdGhlIHJldHVybiB0eXBlcyBhbmQKKyAg
ICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzaG91bGQgYmUgUmVmUHRyLiBJZiB3ZSBhcmUgc3Vy
ZSB0aGUgcG9pbnRlciBjYW4ndAorICAgICAgICBiZSBudWxsLCB3ZSB1c2UgUmVmIGluc3RlYWQu
CisKKyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdNYXJrZXJFbGVtZW50Ojpsb29rdXBPckNyZWF0ZU9yaWVudFR5cGVXcmFwcGVyKToKKyAg
ICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6bG9va3VwT3JDcmVh
dGVEV3JhcHBlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICog
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50
Ojpsb29rdXBPckNyZWF0ZVBvaW50c1dyYXBwZXIpOgorICAgICAgICAqIHN2Zy9TVkdQb2x5RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpsb29rdXBPckNyZWF0ZVRleHRMZW5n
dGhXcmFwcGVyKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50Lmg6CisgICAg
ICAgICogc3ZnL1NWR1ZpZXdTcGVjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVj
Ojpsb29rdXBPckNyZWF0ZVZpZXdCb3hXcmFwcGVyKToKKyAgICAgICAgKiBzdmcvU1ZHVmlld1Nw
ZWMuaDoKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZEVudW1lcmF0aW9uUHJv
cGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZEVudW1lcmF0aW9u
UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmg6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToK
KyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFBy
b3BlcnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdMaXN0
UHJvcGVydHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eTo6aW5pdGlhbGl6
ZVZhbHVlc0FuZFdyYXBwZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eTo6
Z2V0SXRlbVZhbHVlc0FuZFdyYXBwZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9w
ZXJ0eTo6aW5zZXJ0SXRlbUJlZm9yZVZhbHVlc0FuZFdyYXBwZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0xpc3RQcm9wZXJ0eTo6cmVwbGFjZUl0ZW1WYWx1ZXNBbmRXcmFwcGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6OnJlbW92ZUl0ZW1WYWx1ZXNBbmRXcmFwcGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6OmFwcGVuZEl0ZW1WYWx1ZXNB
bmRXcmFwcGVycyk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5VGVh
ck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5VGVhck9mZjo6Z2V0SXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHlUZWFyT2ZmOjppbnNlcnRJdGVtQmVmb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnJlcGxhY2VJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnJlbW92ZUl0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5VGVhck9mZjo6YXBwZW5kSXRlbSk6
CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6Omdl
dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6
OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0UHJvcGVydHlU
ZWFyT2ZmOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlz
dFByb3BlcnR5VGVhck9mZjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZjo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6YXBwZW5kSXRlbSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlJbmZvLmg6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJv
cGVydGllcy9TVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0YXRpY1Byb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGll
cy9TVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlU1ZHVHJhbnNmb3JtRnJv
bU1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmOjpjb25zb2xpZGF0ZSk6CisKIDIwMTUtMDItMjYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkgdG8g
RGF0YWJhc2VNYW5hZ2VyOjpzaW5nbGV0b24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
YXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAg
dm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzeW5jaHJvbml6ZU9yaWVudAogICAgIG93bmVyVHlwZS5t
X29yaWVudFR5cGUuc3luY2hyb25pemUoJm93bmVyVHlwZSwgb3JpZW50VHlwZVByb3BlcnR5SW5m
bygpLT5hdHRyaWJ1dGVOYW1lLCBhdXRvU3RyaW5nKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdBbmlt
YXRlZFByb3BlcnR5PiBTVkdNYXJrZXJFbGVtZW50Ojpsb29rdXBPckNyZWF0ZU9yaWVudFR5cGVX
cmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorUmVmUHRyPFNWR0FuaW1hdGVkUHJv
cGVydHk+IFNWR01hcmtlckVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlT3JpZW50VHlwZVdyYXBwZXIo
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50
KTsKICAgICBTVkdNYXJrZXJFbGVtZW50JiBvd25lclR5cGUgPSBkb3duY2FzdDxTVkdNYXJrZXJF
bGVtZW50PigqY29udGV4dEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01h
cmtlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5oCShyZXZpc2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToK
IHB1YmxpYzoKICAgICAvLyBDdXN0b20gJ29yaWVudFR5cGUnIHByb3BlcnR5LgogICAgIHN0YXRp
YyB2b2lkIHN5bmNocm9uaXplT3JpZW50VHlwZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVh
dGVPcmllbnRUeXBlV3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7CisgICAgc3Rh
dGljIFJlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZU9yaWVudFR5cGVX
cmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKICAgICBTVkdNYXJrZXJPcmllbnRU
eXBlJiBvcmllbnRUeXBlKCkgY29uc3Q7CiAgICAgU1ZHTWFya2VyT3JpZW50VHlwZSYgb3JpZW50
VHlwZUJhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50VHlwZS52YWx1ZTsgfQogICAg
IHZvaWQgc2V0T3JpZW50VHlwZUJhc2VWYWx1ZShjb25zdCBTVkdNYXJrZXJPcmllbnRUeXBlJiB0
eXBlKSB7IG1fb3JpZW50VHlwZS52YWx1ZSA9IHR5cGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDcgKzMxMSw3IEBA
IFNWR1BhdGhCeXRlU3RyZWFtKiBTVkdQYXRoRWxlbWVudDo6cGF0aEIKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHByb3BlcnR5
KS0+YW5pbWF0ZWRQYXRoQnl0ZVN0cmVhbSgpOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVk
UHJvcGVydHk+IFNWR1BhdGhFbGVtZW50Ojpsb29rdXBPckNyZWF0ZURXcmFwcGVyKFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50KQorUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhF
bGVtZW50Ojpsb29rdXBPckNyZWF0ZURXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KQogewogICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7CiAgICAgU1ZHUGF0aEVsZW1lbnQmIG93
bmVyVHlwZSA9IGRvd25jYXN0PFNWR1BhdGhFbGVtZW50PigqY29udGV4dEVsZW1lbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHJldmlzaW9uIDE4MDY5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NyArMTA5LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEN1c3RvbSAnZCcgcHJvcGVydHkKICAgICBz
dGF0aWMgdm9pZCBzeW5jaHJvbml6ZUQoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlRFdy
YXBwZXIoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZH
QW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVEV3JhcHBlcihTVkdFbGVtZW50KiBjb250
ZXh0RWxlbWVudCk7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZH
UGF0aEVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfTlVNQkVSKFBhdGhMZW5ndGgs
IHBhdGhMZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE4MDY5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFNWR1BvbHlFbGVtZW50Ojpz
eW5jaHJvbml6ZVBvaW50cyhTCiAgICAgb3duZXJUeXBlLm1fcG9pbnRzLnN5bmNocm9uaXplKCZv
d25lclR5cGUsIHBvaW50c1Byb3BlcnR5SW5mbygpLT5hdHRyaWJ1dGVOYW1lLCBvd25lclR5cGUu
bV9wb2ludHMudmFsdWUudmFsdWVBc1N0cmluZygpKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdBbmlt
YXRlZFByb3BlcnR5PiBTVkdQb2x5RWxlbWVudDo6bG9va3VwT3JDcmVhdGVQb2ludHNXcmFwcGVy
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+
IFNWR1BvbHlFbGVtZW50Ojpsb29rdXBPckNyZWF0ZVBvaW50c1dyYXBwZXIoU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKICAgICBTVkdQ
b2x5RWxlbWVudCYgb3duZXJUeXBlID0gZG93bmNhc3Q8U1ZHUG9seUVsZW1lbnQ+KCpjb250ZXh0
RWxlbWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuaAkocmV2aXNpb24g
MTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEN1c3RvbSAncG9pbnRz
JyBwcm9wZXJ0eQogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUG9pbnRzKFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3Bl
cnR5PiBsb29rdXBPckNyZWF0ZVBvaW50c1dyYXBwZXIoU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVh
dGVQb2ludHNXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKIAogICAgIEJFR0lO
X0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdQb2x5RWxlbWVudCkKICAgICAgICAgREVD
TEFSRV9BTklNQVRFRF9CT09MRUFOKEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGV4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcg
QEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnN5bmNocm9uaXplVAogICAgIG93bmVyVHlw
ZS5tX3RleHRMZW5ndGguc3luY2hyb25pemUoJm93bmVyVHlwZSwgdGV4dExlbmd0aFByb3BlcnR5
SW5mbygpLT5hdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CiB9CiAKLVBhc3NSZWZQdHI8U1ZHQW5pbWF0
ZWRQcm9wZXJ0eT4gU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpsb29rdXBPckNyZWF0ZVRleHRMZW5n
dGhXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorUmVmUHRyPFNWR0FuaW1hdGVk
UHJvcGVydHk+IFNWR1RleHRDb250ZW50RWxlbWVudDo6bG9va3VwT3JDcmVhdGVUZXh0TGVuZ3Ro
V3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKIHsKICAgICBBU1NFUlQoY29udGV4
dEVsZW1lbnQpOwogICAgIFNWR1RleHRDb250ZW50RWxlbWVudCYgb3duZXJUeXBlID0gZG93bmNh
c3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50PigqY29udGV4dEVsZW1lbnQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkocmV2aXNpb24gMTgwNjk2KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEN1c3RvbSAndGV4dExl
bmd0aCcgcHJvcGVydHkKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVRleHRMZW5ndGgoU1ZH
RWxlbWVudCogY29udGV4dEVsZW1lbnQpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0FuaW1h
dGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIoU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4g
bG9va3VwT3JDcmVhdGVUZXh0TGVuZ3RoV3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCk7CiAgICAgbXV0YWJsZSBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHTGVu
Z3RoPiBtX3RleHRMZW5ndGg7CiAgICAgU1ZHTGVuZ3RoIG1fc3BlY2lmaWVkVGV4dExlbmd0aDsK
ICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDE4MDY5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Nyw3ICsxNjcsNyBAQCBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
CiAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvPihsb29rdXBPckNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW9XcmFwcGVyKHRoaXMpKTsK
IH0KIAotUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdWaWV3U3BlYzo6bG9va3Vw
T3JDcmVhdGVWaWV3Qm94V3JhcHBlcihTVkdWaWV3U3BlYyogb3duZXJUeXBlKQorUmVmUHRyPFNW
R0FuaW1hdGVkUHJvcGVydHk+IFNWR1ZpZXdTcGVjOjpsb29rdXBPckNyZWF0ZVZpZXdCb3hXcmFw
cGVyKFNWR1ZpZXdTcGVjKiBvd25lclR5cGUpCiB7CiAgICAgQVNTRVJUKG93bmVyVHlwZSk7CiAg
ICAgQVNTRVJUKG93bmVyVHlwZS0+Y29udGV4dEVsZW1lbnQoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVmlld1NwZWMuaAkocmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZpZXdTcGVjLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvSWRlbnRpZmll
cigpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3Vw
T3JDcmVhdGVUcmFuc2Zvcm1XcmFwcGVyKFNWR1ZpZXdTcGVjKiBjb250ZXh0RWxlbWVudCk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVW
aWV3Qm94V3JhcHBlcihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOworICAgIHN0YXRpYyBS
ZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVWaWV3Qm94V3JhcHBlcihT
VkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0Fu
aW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpb1dyYXBwZXIo
U1ZHVmlld1NwZWMqIGNvbnRleHRFbGVtZW50KTsKIAogICAgIFNWR0VsZW1lbnQqIG1fY29udGV4
dEVsZW1lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5o
CShyZXZpc2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDEwICszOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlU
ZWFyT2ZmPHVuc2lnbmVkPjo6c2V0QmFzZVZhbChwcm9wZXJ0eSwgZWMpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8
RW51bVR5cGU+PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJv
cGVydHlUeXBlLCBFbnVtVHlwZSYgcHJvcGVydHkpCisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmPEVudW1UeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmlt
YXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgRW51bVR5cGUmIHByb3BlcnR5
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmPEVudW1U
eXBlPihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQmPihwcm9wZXJ0eSkpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZjxFbnVt
VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVydHlUeXBl
LCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkJj4ocHJvcGVydHkpKSk7CiAgICAgfQogCiAgICAg
RW51bVR5cGUmIGN1cnJlbnRBbmltYXRlZFZhbHVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5
VGVhck9mZi5oCShyZXZpc2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAt
MTUzLDEwICsxNTMsMTAgQEAgcHVibGljOgogICAgICAgICBzeW5jaHJvbml6ZVdyYXBwZXJzSWZO
ZWVkZWQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3Bl
cnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiB2YWx1ZXMpCisgICAg
c3RhdGljIFJlZjxTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4g
Y3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwg
UHJvcGVydHlUeXBlJiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoY29udGV4dEVsZW1l
bnQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5
VGVhck9mZjxQcm9wZXJ0eVR5cGU+KGNvbnRleHRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBhbmlt
YXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+KGNvbnRleHRFbGVt
ZW50LCBhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7CiAgICAg
fQogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVh
ck9mZi5oCShyZXZpc2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaXN0UHJvcGVydHlUZWFyT2ZmKj4obV9iYXNlVmFsLmdldCgpKS0+cmVtb3ZlSXRlbUZyb21M
aXN0KGl0ZW1JbmRleCwgc2hvdWxkU3luY2hyb25pemVXcmFwcGVycyk7CiAgICAgfQogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4g
Y3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwg
U1ZHUGF0aFNlZ0xpc3QmIHZhbHVlcykKKyAgICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUg
YW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIFNWR1BhdGhTZWdMaXN0JiB2YWx1ZXMpCiAgICAgewogICAg
ICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYoY29udGV4dEVsZW1lbnQsIGF0
dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCB2YWx1ZXMpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihj
b250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHZhbHVl
cykpOwogICAgIH0KIAogICAgIHVzaW5nIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxT
VkdQYXRoU2VnTGlzdD46OmFuaW1hdGlvblN0YXJ0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCShyZXZpc2lvbiAx
ODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3Bl
cnR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgflNWR0FuaW1hdGVkUHJvcGVydHkoKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVy
VHlwZSwgdHlwZW5hbWUgVGVhck9mZlR5cGUsIHR5cGVuYW1lIFByb3BlcnR5VHlwZT4KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZWFyT2ZmVHlwZT4gbG9va3VwT3JDcmVhdGVXcmFwcGVyKE93bmVy
VHlwZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvLCBQcm9wZXJ0eVR5cGUm
IHByb3BlcnR5KQorICAgIHN0YXRpYyBSZWZQdHI8VGVhck9mZlR5cGU+IGxvb2t1cE9yQ3JlYXRl
V3JhcHBlcihPd25lclR5cGUqIGVsZW1lbnQsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogaW5mbywg
UHJvcGVydHlUeXBlJiBwcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmZvKTsKICAg
ICAgICAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eURlc2NyaXB0aW9uIGtleShlbGVtZW50LCBpbmZvLT5w
cm9wZXJ0eUlkZW50aWZpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQcm9wZXJ0eU1hY3Jvcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaAkocmV2aXNpb24gMTgw
Njk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0
eU1hY3Jvcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGljOiBcCiAg
ICAgICAgIG1fIyNMb3dlclByb3BlcnR5LmlzVmFsaWQgPSB2YWxpZFZhbHVlOyBcCiAgICAgfSBc
CiBcCi0gICAgUGFzc1JlZlB0cjxUZWFyT2ZmVHlwZT4gTG93ZXJQcm9wZXJ0eSMjQW5pbWF0ZWQo
KSBcCisgICAgUmVmUHRyPFRlYXJPZmZUeXBlPiBMb3dlclByb3BlcnR5IyNBbmltYXRlZCgpIFwK
ICAgICB7IFwKICAgICAgICAgbV8jI0xvd2VyUHJvcGVydHkuc2hvdWxkU3luY2hyb25pemUgPSB0
cnVlOyBcCiAgICAgICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRlYXJPZmZUeXBlPihs
b29rdXBPckNyZWF0ZSMjVXBwZXJQcm9wZXJ0eSMjV3JhcHBlcih0aGlzKSk7IFwKQEAgLTE1Miw3
ICsxNTIsNyBAQCBwcml2YXRlOiBcCiAgICAgICAgIG1fIyNMb3dlclByb3BlcnR5LnN5bmNocm9u
aXplKHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5mbygpLT5hdHRyaWJ1dGVOYW1lLCB2
YWx1ZSk7IFwKICAgICB9IFwKIFwKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFBy
b3BlcnR5PiBsb29rdXBPckNyZWF0ZSMjVXBwZXJQcm9wZXJ0eSMjV3JhcHBlcihTVkdFbGVtZW50
KiBtYXNrZWRPd25lclR5cGUpIFwKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVy
dHk+IGxvb2t1cE9yQ3JlYXRlIyNVcHBlclByb3BlcnR5IyNXcmFwcGVyKFNWR0VsZW1lbnQqIG1h
c2tlZE93bmVyVHlwZSkgXAogICAgIHsgXAogICAgICAgICBBU1NFUlQobWFza2VkT3duZXJUeXBl
KTsgXAogICAgICAgICBVc2VPd25lclR5cGUqIG93bmVyVHlwZSA9IHN0YXRpY19jYXN0PFVzZU93
bmVyVHlwZSo+KG1hc2tlZE93bmVyVHlwZSk7IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAko
cmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAgKzU3LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYW5pbVZhbC5nZXQoKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+
PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBl
LCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQorICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVt
ZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5
VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiBwcm9wZXJ0eSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPihjb250ZXh0RWxl
bWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHByb3BlcnR5KSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmPFBy
b3BlcnR5VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVy
dHlUeXBlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFu
aW1hdGVkVmFsdWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCShyZXZp
c2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAg
QEAgcHVibGljOgogICAgICAgICBjb21taXRDaGFuZ2UoKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+
PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBl
LCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQorICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRTdGF0
aWNQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRl
eHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFBy
b3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiBwcm9wZXJ0eSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBl
Pihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHBy
b3BlcnR5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkU3RhdGlj
UHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5h
bWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIFByb3Bl
cnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4MDY5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVh
ck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsMTAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1M
aXN0Pio+KG1fYW5pbVZhbC5nZXQoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmPiBjcmVhdGUoU1ZHRWxlbWVu
dCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFu
aW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBTVkdUcmFuc2Zvcm1MaXN0
JiB2YWx1ZXMpCisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUsIFNWR1RyYW5zZm9ybUxpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAgIEFTU0VS
VChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKGNvbnRleHRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZihjb250ZXh0
RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHZhbHVlcykpOwog
ICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0xpc3RQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCShyZXZpc2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIFNWR1Byb3BlcnR5VHJh
aXRzPFByb3BlcnR5VHlwZT46Okxpc3RJdGVtVHlwZSBMaXN0SXRlbVR5cGU7CiAgICAgdHlwZWRl
ZiBTVkdQcm9wZXJ0eVRlYXJPZmY8TGlzdEl0ZW1UeXBlPiBMaXN0SXRlbVRlYXJPZmY7Ci0gICAg
dHlwZWRlZiBQYXNzUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gUGFzc0xpc3RJdGVtVGVhck9mZjsK
KyAgICB0eXBlZGVmIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IFB0ckxpc3RJdGVtVGVhck9mZjsK
ICAgICB0eXBlZGVmIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+
IEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFNWR0Fu
aW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+OjpMaXN0V3JhcHBlckNhY2hl
IExpc3RXcmFwcGVyQ2FjaGU7CiAKQEAgLTEzOCwxOSArMTM4LDE4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiBpbml0
aWFsaXplVmFsdWVzQW5kV3JhcHBlcnMoUGFzc0xpc3RJdGVtVGVhck9mZiBwYXNzTmV3SXRlbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIGluaXRpYWxpemVWYWx1
ZXNBbmRXcmFwcGVycyhQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7CiAgICAgICAgIGlmICghY2Fu
QWx0ZXJMaXN0KGVjKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIC8vIE5vdCBz
cGVjaWZpZWQsIGJ1dCBGRi9PcGVyYSBkbyBpdCB0aGlzIHdheSwgYW5kIGl0J3MganVzdCBzYW5l
LgotICAgICAgICBpZiAoIXBhc3NOZXdJdGVtKSB7CisgICAgICAgIGlmICghbmV3SXRlbSkgewog
ICAgICAgICAgICAgZWMgPSBTVkdFeGNlcHRpb246OlNWR19XUk9OR19UWVBFX0VSUjsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPExpc3RJdGVtVGVh
ck9mZj4gbmV3SXRlbSA9IHBhc3NOZXdJdGVtOwogICAgICAgICBBU1NFUlQobV92YWx1ZXMtPnNp
emUoKSA9PSBtX3dyYXBwZXJzLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFNwZWM6IElmIHRoZSBp
bnNlcnRlZCBpdGVtIGlzIGFscmVhZHkgaW4gYSBsaXN0LCBpdCBpcyByZW1vdmVkIGZyb20gaXRz
IHByZXZpb3VzIGxpc3QgYmVmb3JlIGl0IGlzIGluc2VydGVkIGludG8gdGhpcyBsaXN0LgpAQCAt
MTY0LDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV93cmFwcGVycy0+YXBwZW5kKG5ld0l0
ZW0pOwogCiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwotICAgICAgICByZXR1cm4gbmV3SXRlbS5y
ZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBuZXdJdGVtOwogICAgIH0KIAogICAgIC8vIFNWR0xp
c3Q6OmdldEl0ZW0oKQpAQCAtMTg3LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fdmFsdWVzLT5hdChpbmRleCk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiBn
ZXRJdGVtVmFsdWVzQW5kV3JhcHBlcnMoQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmKiBhbmlt
YXRlZExpc3QsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICBQdHJMaXN0
SXRlbVRlYXJPZmYgZ2V0SXRlbVZhbHVlc0FuZFdyYXBwZXJzKEFuaW1hdGVkTGlzdFByb3BlcnR5
VGVhck9mZiogYW5pbWF0ZWRMaXN0LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgewogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7CiAgICAgICAgIGlmICghY2FuR2V0
SXRlbShpbmRleCwgZWMpKQpAQCAtMjMyLDE0ICsyMzEsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbmV3SXRlbTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIGluc2VydEl0
ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyhQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBhc3NOZXdJdGVt
LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFy
T2ZmIGluc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyhQdHJMaXN0SXRlbVRlYXJPZmYg
bmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAoIWNhbkFsdGVyTGlzdChlYykpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBOb3Qgc3BlY2lmaWVkLCBidXQgRkYv
T3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4KLSAgICAgICAgaWYgKCFw
YXNzTmV3SXRlbSkgeworICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAgICAgICAgIGVjID0g
U1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQpAQCAtMjQ4LDcgKzI0Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGluZGV4
ID4gbV92YWx1ZXMtPnNpemUoKSkKICAgICAgICAgICAgICBpbmRleCA9IG1fdmFsdWVzLT5zaXpl
KCk7CiAKLSAgICAgICAgUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gbmV3SXRlbSA9IHBhc3NOZXdJ
dGVtOwogICAgICAgICBBU1NFUlQobV92YWx1ZXMtPnNpemUoKSA9PSBtX3dyYXBwZXJzLT5zaXpl
KCkpOwogCiAgICAgICAgIC8vIFNwZWM6IElmIG5ld0l0ZW0gaXMgYWxyZWFkeSBpbiBhIGxpc3Qs
IGl0IGlzIHJlbW92ZWQgZnJvbSBpdHMgcHJldmlvdXMgbGlzdCBiZWZvcmUgaXQgaXMgaW5zZXJ0
ZWQgaW50byB0aGlzIGxpc3QuCkBAIC0yNjMsNyArMjYxLDcgQEAgcHVibGljOgogICAgICAgICBt
X3dyYXBwZXJzLT5pbnNlcnQoaW5kZXgsIG5ld0l0ZW0pOwogCiAgICAgICAgIGNvbW1pdENoYW5n
ZSgpOwotICAgICAgICByZXR1cm4gbmV3SXRlbS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBu
ZXdJdGVtOwogICAgIH0KIAogICAgIC8vIFNWR0xpc3Q6OnJlcGxhY2VJdGVtKCkKQEAgLTMwNSwy
OSArMzAzLDI4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCi0g
ICAgUGFzc0xpc3RJdGVtVGVhck9mZiByZXBsYWNlSXRlbVZhbHVlc0FuZFdyYXBwZXJzKFBhc3NM
aXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0ZW0sIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgcmVwbGFjZUl0ZW1WYWx1ZXNBbmRXcmFwcGVy
cyhQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAo
IWNhblJlcGxhY2VJdGVtKGluZGV4LCBlYykpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAg
ICAgICAvLyBOb3Qgc3BlY2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBp
dCdzIGp1c3Qgc2FuZS4KLSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAo
IW5ld0l0ZW0pIHsKICAgICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQ
RV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChtX3ZhbHVlcy0+c2l6ZSgpID09IG1fd3JhcHBlcnMtPnNpemUoKSk7Ci0gICAgICAgIFJlZlB0
cjxMaXN0SXRlbVRlYXJPZmY+IG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKIAogICAgICAgICAvLyBT
cGVjOiBJZiBuZXdJdGVtIGlzIGFscmVhZHkgaW4gYSBsaXN0LCBpdCBpcyByZW1vdmVkIGZyb20g
aXRzIHByZXZpb3VzIGxpc3QgYmVmb3JlIGl0IGlzIGluc2VydGVkIGludG8gdGhpcyBsaXN0Lgog
ICAgICAgICAvLyBTcGVjOiBJZiB0aGUgaXRlbSBpcyBhbHJlYWR5IGluIHRoaXMgbGlzdCwgbm90
ZSB0aGF0IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXBsYWNlIGlzIGJlZm9yZSB0aGUgcmVt
b3ZhbCBvZiB0aGUgaXRlbS4KICAgICAgICAgaWYgKCFwcm9jZXNzSW5jb21pbmdMaXN0SXRlbVdy
YXBwZXIobmV3SXRlbSwgJmluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBuZXdJdGVtLnJlbGVh
c2UoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdJdGVtOwogCiAgICAgICAgIGlmIChtX3ZhbHVl
cy0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV93cmFwcGVycy0+aXNFbXB0eSgp
KTsKLSAgICAgICAgICAgIC8vICdwYXNzTmV3SXRlbScgYWxyZWFkeSBsaXZlZCBpbiBvdXIgbGlz
dCwgd2UgcmVtb3ZlZCBpdCwgYW5kIG5vdyB3ZSdyZSBlbXB0eSwgd2hpY2ggbWVhbnMgdGhlcmUn
cyBub3RoaW5nIHRvIHJlcGxhY2UuCisgICAgICAgICAgICAvLyAnbmV3SXRlbScgYWxyZWFkeSBs
aXZlZCBpbiBvdXIgbGlzdCwgd2UgcmVtb3ZlZCBpdCwgYW5kIG5vdyB3ZSdyZSBlbXB0eSwgd2hp
Y2ggbWVhbnMgdGhlcmUncyBub3RoaW5nIHRvIHJlcGxhY2UuCiAgICAgICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTM0Miw3
ICszMzksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fd3JhcHBlcnMtPmF0KGluZGV4KSA9IG5ld0l0
ZW07CiAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBuZXdJdGVtLnJl
bGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCiAgICAgLy8gU1ZHTGlz
dDo6cmVtb3ZlSXRlbSgpCkBAIC0zNzEsNyArMzY4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gb2xkSXRlbTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIHJlbW92ZUl0ZW1W
YWx1ZXNBbmRXcmFwcGVycyhBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYqIGFuaW1hdGVkTGlz
dCwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVGVh
ck9mZiByZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnMoQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFy
T2ZmKiBhbmltYXRlZExpc3QsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3dyYXBwZXJzKTsKICAgICAgICAgaWYgKCFjYW5SZW1vdmVJ
dGVtKGluZGV4LCBlYykpCkBAIC00MDgsMTkgKzQwNSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBuZXdJdGVtOwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgYXBwZW5kSXRl
bVZhbHVlc0FuZFdyYXBwZXJzKFBhc3NMaXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0ZW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVGVhck9mZiBhcHBlbmRJdGVtVmFsdWVzQW5k
V3JhcHBlcnMoUHRyTGlzdEl0ZW1UZWFyT2ZmIG5ld0l0ZW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAoIWNhbkFsdGVy
TGlzdChlYykpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBOb3Qgc3BlY2lm
aWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4KLSAg
ICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAg
ICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7CiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+
IG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLT5zaXplKCkg
PT0gbV93cmFwcGVycy0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBTcGVjOiBJZiBuZXdJdGVtIGlz
IGFscmVhZHkgaW4gYSBsaXN0LCBpdCBpcyByZW1vdmVkIGZyb20gaXRzIHByZXZpb3VzIGxpc3Qg
YmVmb3JlIGl0IGlzIGluc2VydGVkIGludG8gdGhpcyBsaXN0LgpAQCAtNDMxLDcgKzQyNyw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV93cmFwcGVycy0+YXBwZW5kKG5ld0l0ZW0pOwogCiAgICAgICAg
IGNvbW1pdENoYW5nZShMaXN0TW9kaWZpY2F0aW9uQXBwZW5kKTsKLSAgICAgICAgcmV0dXJuIG5l
d0l0ZW0ucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gbmV3SXRlbTsKICAgICB9CiAKICAgICBQ
cm9wZXJ0eVR5cGUmIHZhbHVlcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lvbiAxODA2OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHlUZWFyT2Zm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBTVkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+OjpMaXN0SXRlbVR5cGUg
TGlzdEl0ZW1UeXBlOwogICAgIHR5cGVkZWYgU1ZHUHJvcGVydHlUZWFyT2ZmPExpc3RJdGVtVHlw
ZT4gTGlzdEl0ZW1UZWFyT2ZmOwotICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxMaXN0SXRlbVRlYXJP
ZmY+IFBhc3NMaXN0SXRlbVRlYXJPZmY7CisgICAgdHlwZWRlZiBSZWZQdHI8TGlzdEl0ZW1UZWFy
T2ZmPiBQdHJMaXN0SXRlbVRlYXJPZmY7CiAgICAgdHlwZWRlZiBTVkdBbmltYXRlZExpc3RQcm9w
ZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPiBBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVy
dHlUeXBlPjo6TGlzdFdyYXBwZXJDYWNoZSBMaXN0V3JhcHBlckNhY2hlOwogCkBAIC00MCwxMCAr
NDAsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2U6Om1fdmFsdWVzOwogICAgIHVzaW5nIEJh
c2U6Om1fd3JhcHBlcnM7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWxmPiBjcmVhdGUoQW5p
bWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmKiBhbmltYXRlZFByb3BlcnR5LCBTVkdQcm9wZXJ0eVJv
bGUgcm9sZSwgUHJvcGVydHlUeXBlJiB2YWx1ZXMsIExpc3RXcmFwcGVyQ2FjaGUmIHdyYXBwZXJz
KQorICAgIHN0YXRpYyBSZWY8U2VsZj4gY3JlYXRlKEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9m
ZiogYW5pbWF0ZWRQcm9wZXJ0eSwgU1ZHUHJvcGVydHlSb2xlIHJvbGUsIFByb3BlcnR5VHlwZSYg
dmFsdWVzLCBMaXN0V3JhcHBlckNhY2hlJiB3cmFwcGVycykKICAgICB7CiAgICAgICAgIEFTU0VS
VChhbmltYXRlZFByb3BlcnR5KTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWxmKGFu
aW1hdGVkUHJvcGVydHksIHJvbGUsIHZhbHVlcywgd3JhcHBlcnMpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2VsZihhbmltYXRlZFByb3BlcnR5LCByb2xlLCB2YWx1ZXMsIHdyYXBw
ZXJzKSk7CiAgICAgfQogCiAgICAgaW50IGZpbmRJdGVtKExpc3RJdGVtVGVhck9mZiogaXRlbSkg
Y29uc3QKQEAgLTgzLDM0ICs4MywzNCBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2U6OmNsZWFyVmFs
dWVzQW5kV3JhcHBlcnMoZWMpOwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgaW5p
dGlhbGl6ZShQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBhc3NOZXdJdGVtLCBFeGNlcHRpb25Db2RlJiBl
YykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgaW5pdGlhbGl6ZShQdHJMaXN0SXRlbVRlYXJPZmYg
bmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewotICAgICAgICByZXR1cm4gQmFzZTo6
aW5pdGlhbGl6ZVZhbHVlc0FuZFdyYXBwZXJzKHBhc3NOZXdJdGVtLCBlYyk7CisgICAgICAgIHJl
dHVybiBCYXNlOjppbml0aWFsaXplVmFsdWVzQW5kV3JhcHBlcnMobmV3SXRlbSwgZWMpOwogICAg
IH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgZ2V0SXRlbSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIGdldEl0ZW0odW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgcmV0dXJuIEJhc2U6Omdl
dEl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhtX2FuaW1hdGVkUHJvcGVydHkuZ2V0KCksIGluZGV4LCBl
Yyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiBpbnNlcnRJdGVtQmVmb3JlKFBh
c3NMaXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0ZW0sIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgaW5zZXJ0SXRlbUJlZm9yZShQdHJMaXN0
SXRlbVRlYXJPZmYgbmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEJhc2U6Omluc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFw
cGVycyhwYXNzTmV3SXRlbSwgaW5kZXgsIGVjKTsKKyAgICAgICAgcmV0dXJuIEJhc2U6Omluc2Vy
dEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyhuZXdJdGVtLCBpbmRleCwgZWMpOwogICAgIH0K
IAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgcmVwbGFjZUl0ZW0oUGFzc0xpc3RJdGVtVGVhck9m
ZiBwYXNzTmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0
ckxpc3RJdGVtVGVhck9mZiByZXBsYWNlSXRlbShQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRlbSwg
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEJhc2U6OnJlcGxhY2VJdGVtVmFsdWVzQW5kV3JhcHBlcnMocGFzc05ld0l0ZW0sIGluZGV4LCBl
Yyk7CisgICAgICAgIHJldHVybiBCYXNlOjpyZXBsYWNlSXRlbVZhbHVlc0FuZFdyYXBwZXJzKG5l
d0l0ZW0sIGluZGV4LCBlYyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiByZW1v
dmVJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICBQdHJMaXN0SXRl
bVRlYXJPZmYgcmVtb3ZlSXRlbSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgewogICAgICAgICByZXR1cm4gQmFzZTo6cmVtb3ZlSXRlbVZhbHVlc0FuZFdyYXBwZXJzKG1f
YW5pbWF0ZWRQcm9wZXJ0eS5nZXQoKSwgaW5kZXgsIGVjKTsKICAgICB9CiAKLSAgICBQYXNzTGlz
dEl0ZW1UZWFyT2ZmIGFwcGVuZEl0ZW0oUGFzc0xpc3RJdGVtVGVhck9mZiBwYXNzTmV3SXRlbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIGFwcGVuZEl0ZW0oUHRy
TGlzdEl0ZW1UZWFyT2ZmIG5ld0l0ZW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEJhc2U6OmFwcGVuZEl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhwYXNzTmV3SXRlbSwg
ZWMpOworICAgICAgICByZXR1cm4gQmFzZTo6YXBwZW5kSXRlbVZhbHVlc0FuZFdyYXBwZXJzKG5l
d0l0ZW0sIGVjKTsKICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5
VGVhck9mZi5jcHAJKHJldmlzaW9uIDE4MDY5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsMjAgKzQ3LDIwIEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNs
ZWEKICAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6QmFzZTo6Y2xlYXJWYWx1ZXMo
ZWMpOwogfQogCi1TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6UGFzc0xpc3RJdGVtVHlw
ZSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Z2V0SXRlbSh1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCitTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6UHRyTGlz
dEl0ZW1UeXBlIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpnZXRJdGVtKHVuc2lnbmVk
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBMaXN0SXRlbVR5cGUgcmV0dXJuZWRJ
dGVtID0gQmFzZTo6Z2V0SXRlbVZhbHVlcyhpbmRleCwgZWMpOwogICAgIGlmIChyZXR1cm5lZEl0
ZW0pIHsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdXaXRoQ29udGV4dCo+
KHJldHVybmVkSXRlbS5nZXQoKSktPmNvbnRleHRFbGVtZW50KCkgPT0gY29udGV4dEVsZW1lbnQo
KSk7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnV2l0aENvbnRleHQqPihy
ZXR1cm5lZEl0ZW0uZ2V0KCkpLT5yb2xlKCkgPT0gbV9wYXRoU2VnUm9sZSk7CiAgICAgfQotICAg
IHJldHVybiByZXR1cm5lZEl0ZW0ucmVsZWFzZSgpOworICAgIHJldHVybiByZXR1cm5lZEl0ZW07
CiB9CiAKLVNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQYXNzTGlzdEl0ZW1UeXBlIFNW
R1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbShQYXNzTGlzdEl0ZW1UeXBl
IHBhc3NOZXdJdGVtLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTVkdQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZjo6UHRyTGlzdEl0ZW1UeXBlIFNWR1BhdGhTZWdMaXN0UHJv
cGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbShQdHJMaXN0SXRlbVR5cGUgbmV3SXRlbSwgdW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIE5vdCBzcGVjaWZpZWQsIGJ1
dCBGRi9PcGVyYSBkbyBpdCB0aGlzIHdheSwgYW5kIGl0J3MganVzdCBzYW5lLgotICAgIGlmICgh
cGFzc05ld0l0ZW0pIHsKKyAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAgICAgZWMgPSBTVkdFeGNl
cHRpb246OlNWR19XUk9OR19UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAt
NzEsMTYgKzcxLDE1IEBAIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQYXNzTGlzdEkK
ICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4ocmVwbGFjZWRJdGVt
LmdldCgpKS0+c2V0Q29udGV4dEFuZFJvbGUoMCwgUGF0aFNlZ1VuZGVmaW5lZFJvbGUpOwogICAg
IH0KIAotICAgIExpc3RJdGVtVHlwZSBuZXdJdGVtID0gcGFzc05ld0l0ZW07CiAgICAgcmV0dXJu
IEJhc2U6OnJlcGxhY2VJdGVtVmFsdWVzKG5ld0l0ZW0sIGluZGV4LCBlYyk7CiB9CiAKLVNWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQYXNzTGlzdEl0ZW1UeXBlIFNWR1BhdGhTZWdMaXN0
UHJvcGVydHlUZWFyT2ZmOjpyZW1vdmVJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKK1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQdHJMaXN0SXRlbVR5cGUgU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnJlbW92ZUl0ZW0odW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpM
aXN0SXRlbVR5cGUgcmVtb3ZlZEl0ZW0gPSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6
QmFzZTo6cmVtb3ZlSXRlbVZhbHVlcyhpbmRleCwgZWMpOwogICAgIGlmIChyZW1vdmVkSXRlbSkK
ICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4ocmVtb3ZlZEl0ZW0u
Z2V0KCkpLT5zZXRDb250ZXh0QW5kUm9sZSgwLCBQYXRoU2VnVW5kZWZpbmVkUm9sZSk7Ci0gICAg
cmV0dXJuIHJlbW92ZWRJdGVtLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiB9
CiAKIFNWR1BhdGhFbGVtZW50KiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Y29udGV4
dEVsZW1lbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lv
biAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlz
dFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIgQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgU1ZHTGlzdFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0PiBCYXNlOwog
ICAgIHR5cGVkZWYgU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BhdGhTZWdMaXN0
PiBBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAgICAgdHlwZWRlZiBTVkdQcm9wZXJ0eVRy
YWl0czxTVkdQYXRoU2VnTGlzdD46Okxpc3RJdGVtVHlwZSBMaXN0SXRlbVR5cGU7Ci0gICAgdHlw
ZWRlZiBQYXNzUmVmUHRyPFNWR1BhdGhTZWc+IFBhc3NMaXN0SXRlbVR5cGU7CisgICAgdHlwZWRl
ZiBSZWZQdHI8U1ZHUGF0aFNlZz4gUHRyTGlzdEl0ZW1UeXBlOwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0ZShBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmYqIGFuaW1hdGVkUHJvcGVydHksIFNWR1Byb3BlcnR5Um9sZSByb2xlLCBT
VkdQYXRoU2VnUm9sZSBwYXRoU2VnUm9sZSwgU1ZHUGF0aFNlZ0xpc3QmIHZhbHVlcywgTGlzdFdy
YXBwZXJDYWNoZSYgd3JhcHBlcnMpCisgICAgc3RhdGljIFJlZjxTVkdQYXRoU2VnTGlzdFByb3Bl
cnR5VGVhck9mZj4gY3JlYXRlKEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRQ
cm9wZXJ0eSwgU1ZHUHJvcGVydHlSb2xlIHJvbGUsIFNWR1BhdGhTZWdSb2xlIHBhdGhTZWdSb2xl
LCBTVkdQYXRoU2VnTGlzdCYgdmFsdWVzLCBMaXN0V3JhcHBlckNhY2hlJiB3cmFwcGVycykKICAg
ICB7CiAgICAgICAgIEFTU0VSVChhbmltYXRlZFByb3BlcnR5KTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihhbmltYXRlZFByb3BlcnR5
LCByb2xlLCBwYXRoU2VnUm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihhbmltYXRlZFByb3Bl
cnR5LCByb2xlLCBwYXRoU2VnUm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOwogICAgIH0KIAogICAg
IGludCBmaW5kSXRlbShjb25zdCBMaXN0SXRlbVR5cGUmIGl0ZW0pIGNvbnN0CkBAIC02Nyw0NiAr
NjcsNDMgQEAgcHVibGljOgogICAgIC8vIFNWR0xpc3QgQVBJCiAgICAgdm9pZCBjbGVhcihFeGNl
cHRpb25Db2RlJik7CiAKLSAgICBQYXNzTGlzdEl0ZW1UeXBlIGluaXRpYWxpemUoUGFzc0xpc3RJ
dGVtVHlwZSBwYXNzTmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1U
eXBlIGluaXRpYWxpemUoUHRyTGlzdEl0ZW1UeXBlIG5ld0l0ZW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIHsKICAgICAgICAgLy8gTm90IHNwZWNpZmllZCwgYnV0IEZGL09wZXJhIGRvIGl0IHRo
aXMgd2F5LCBhbmQgaXQncyBqdXN0IHNhbmUuCi0gICAgICAgIGlmICghcGFzc05ld0l0ZW0pIHsK
KyAgICAgICAgaWYgKCFuZXdJdGVtKSB7CiAgICAgICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6
U1ZHX1dST05HX1RZUEVfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAog
ICAgICAgICBjbGVhckNvbnRleHRBbmRSb2xlcygpOwotICAgICAgICBMaXN0SXRlbVR5cGUgbmV3
SXRlbSA9IHBhc3NOZXdJdGVtOwogICAgICAgICByZXR1cm4gQmFzZTo6aW5pdGlhbGl6ZVZhbHVl
cyhuZXdJdGVtLCBlYyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVHlwZSBnZXRJdGVtKHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgUHRyTGlzdEl0ZW1UeXBlIGdldEl0
ZW0odW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NMaXN0SXRlbVR5
cGUgaW5zZXJ0SXRlbUJlZm9yZShQYXNzTGlzdEl0ZW1UeXBlIHBhc3NOZXdJdGVtLCB1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UeXBlIGluc2VydEl0
ZW1CZWZvcmUoUHRyTGlzdEl0ZW1UeXBlIG5ld0l0ZW0sIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICB7CiAgICAgICAgIC8vIE5vdCBzcGVjaWZpZWQsIGJ1dCBGRi9PcGVy
YSBkbyBpdCB0aGlzIHdheSwgYW5kIGl0J3MganVzdCBzYW5lLgotICAgICAgICBpZiAoIXBhc3NO
ZXdJdGVtKSB7CisgICAgICAgIGlmICghbmV3SXRlbSkgewogICAgICAgICAgICAgZWMgPSBTVkdF
eGNlcHRpb246OlNWR19XUk9OR19UWVBFX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9CiAKLSAgICAgICAgTGlzdEl0ZW1UeXBlIG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKICAg
ICAgICAgcmV0dXJuIEJhc2U6Omluc2VydEl0ZW1CZWZvcmVWYWx1ZXMobmV3SXRlbSwgaW5kZXgs
IGVjKTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UeXBlIHJlcGxhY2VJdGVtKFBhc3NMaXN0
SXRlbVR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgUHRyTGlzdEl0
ZW1UeXBlIHJlcGxhY2VJdGVtKFB0ckxpc3RJdGVtVHlwZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAotICAgIFBhc3NMaXN0SXRlbVR5cGUgcmVtb3ZlSXRlbSh1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFB0ckxpc3RJdGVtVHlwZSByZW1vdmVJdGVtKHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzTGlzdEl0ZW1UeXBlIGFw
cGVuZEl0ZW0oUGFzc0xpc3RJdGVtVHlwZSBwYXNzTmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMp
CisgICAgUHRyTGlzdEl0ZW1UeXBlIGFwcGVuZEl0ZW0oUHRyTGlzdEl0ZW1UeXBlIG5ld0l0ZW0s
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgLy8gTm90IHNwZWNpZmllZCwgYnV0
IEZGL09wZXJhIGRvIGl0IHRoaXMgd2F5LCBhbmQgaXQncyBqdXN0IHNhbmUuCi0gICAgICAgIGlm
ICghcGFzc05ld0l0ZW0pIHsKKyAgICAgICAgaWYgKCFuZXdJdGVtKSB7CiAgICAgICAgICAgICBl
YyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX1dST05HX1RZUEVfRVJSOwogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIH0KIAotICAgICAgICBMaXN0SXRlbVR5cGUgbmV3SXRlbSA9IHBhc3NOZXdJ
dGVtOwogICAgICAgICByZXR1cm4gQmFzZTo6YXBwZW5kSXRlbVZhbHVlcyhuZXdJdGVtLCBlYyk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0
eUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQ
cm9wZXJ0eUluZm8uaAkocmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHUHJvcGVydHlJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgc3RydWN0IFNWR1Byb3BlcnR5SW5mbyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB2b2lkICgqU3luY2hyb25pemVQcm9wZXJ0eSkoU1ZHRWxl
bWVudCopOwotICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiAoKkxv
b2t1cE9yQ3JlYXRlV3JhcHBlckZvckFuaW1hdGVkUHJvcGVydHkpKFNWR0VsZW1lbnQqKTsKKyAg
ICB0eXBlZGVmIFJlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiAoKkxvb2t1cE9yQ3JlYXRlV3Jh
cHBlckZvckFuaW1hdGVkUHJvcGVydHkpKFNWR0VsZW1lbnQqKTsKIAogICAgIFNWR1Byb3BlcnR5
SW5mbyhBbmltYXRlZFByb3BlcnR5VHlwZSBuZXdUeXBlLCBBbmltYXRlZFByb3BlcnR5U3RhdGUg
bmV3U3RhdGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5ld0F0dHJpYnV0ZU5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3UHJvcGVydHlJZGVudGlmaWVyLCBT
eW5jaHJvbml6ZVByb3BlcnR5IG5ld1N5bmNocm9uaXplUHJvcGVydHksCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljTGlzdFBy
b3BlcnR5VGVhck9mZi5oCShyZXZpc2lvbiAxODA2OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDkgKzM1LDkgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2U6Om1fcm9sZTsKICAgICB1
c2luZyBCYXNlOjptX3ZhbHVlczsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1N0YXRpY0xp
c3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQmIGNvbnRl
eHRFbGVtZW50LCBQcm9wZXJ0eVR5cGUmIHZhbHVlcykKKyAgICBzdGF0aWMgUmVmPFNWR1N0YXRp
Y0xpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQmIGNv
bnRleHRFbGVtZW50LCBQcm9wZXJ0eVR5cGUmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+
KCZjb250ZXh0RWxlbWVudCwgdmFsdWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPigmY29udGV4dEVsZW1l
bnQsIHZhbHVlcykpOwogICAgIH0KIAogICAgIC8vIFNWR0xpc3QgQVBJCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdTdGF0aWNQcm9wZXJ0eVRl
YXJPZmYuaAkocmV2aXNpb24gMTgwNjk2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3
LDkgQEAgcHVibGljOgogCiAgICAgLy8gVXNlZCBmb3Igbm9uLWFuaW1hdGVkIFBPRCB0eXBlcyB0
aGF0IGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGEgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSBvYmplY3Qs
IG5vciB3aXRoIGEgWE1MIERPTSBhdHRyaWJ1dGUKICAgICAvLyAoZm9yIGV4YW1wbGU6IFNWR1NW
R0VsZW1lbnQ6OmN1cnJlbnRUcmFuc2xhdGUpLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlbGY+
IGNyZWF0ZShDb250ZXh0RWxlbWVudCYgY29udGV4dEVsZW1lbnQsIFByb3BlcnR5VHlwZSYgdmFs
dWUsIFVwZGF0ZU1ldGhvZCB1cGRhdGUpCisgICAgc3RhdGljIFJlZjxTZWxmPiBjcmVhdGUoQ29u
dGV4dEVsZW1lbnQmIGNvbnRleHRFbGVtZW50LCBQcm9wZXJ0eVR5cGUmIHZhbHVlLCBVcGRhdGVN
ZXRob2QgdXBkYXRlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWxmKCZj
b250ZXh0RWxlbWVudCwgdmFsdWUsIHVwZGF0ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTZWxmKCZjb250ZXh0RWxlbWVudCwgdmFsdWUsIHVwZGF0ZSkpOwogICAgIH0KIAogICAg
IHZpcnR1YWwgdm9pZCBjb21taXRDaGFuZ2UoKSB7IChtX2NvbnRleHRFbGVtZW50LmdldCgpLT4q
bV91cGRhdGUpKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Ry
YW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlz
aW9uIDE4MDY5NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1RyYW5zZm9y
bUxpc3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNDEgKzMxLDQxIEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxTVkdU
cmFuc2Zvcm1MaXN0PiBBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAgICAgdHlwZWRlZiBT
VkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD46Okxpc3RXcmFw
cGVyQ2FjaGUgTGlzdFdyYXBwZXJDYWNoZTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0xp
c3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD4+IGNyZWF0ZShBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmYqIGFuaW1hdGVkUHJvcGVydHksIFNWR1Byb3BlcnR5Um9sZSByb2xlLCBT
VkdUcmFuc2Zvcm1MaXN0JiB2YWx1ZXMsIExpc3RXcmFwcGVyQ2FjaGUmIHdyYXBwZXJzKQorICAg
IHN0YXRpYyBSZWY8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0Pj4gY3Jl
YXRlKEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRQcm9wZXJ0eSwgU1ZHUHJv
cGVydHlSb2xlIHJvbGUsIFNWR1RyYW5zZm9ybUxpc3QmIHZhbHVlcywgTGlzdFdyYXBwZXJDYWNo
ZSYgd3JhcHBlcnMpCiAgICAgewogICAgICAgICBBU1NFUlQoYW5pbWF0ZWRQcm9wZXJ0eSk7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9m
ZihhbmltYXRlZFByb3BlcnR5LCByb2xlLCB2YWx1ZXMsIHdyYXBwZXJzKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYoYW5pbWF0
ZWRQcm9wZXJ0eSwgcm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOwogICAgIH0KIAotICAgIFBhc3NS
ZWZQdHI8U1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybT4+IGNyZWF0ZVNWR1RyYW5zZm9y
bUZyb21NYXRyaXgoU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR01hdHJpeD4qIG1hdHJpeCwgRXhjZXB0
aW9uQ29kZSYgZWMpCisgICAgUmVmUHRyPFNWR1Byb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm0+
PiBjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KFNWR1Byb3BlcnR5VGVhck9mZjxTVkdNYXRy
aXg+KiBtYXRyaXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
dmFsdWVzKTsKICAgICAgICAgaWYgKCFtYXRyaXgpIHsKICAgICAgICAgICAgIGVjID0gVFlQRV9N
SVNNQVRDSF9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZH
VHJhbnNmb3JtPjo6Y3JlYXRlKG1fdmFsdWVzLT5jcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4
KG1hdHJpeC0+cHJvcGVydHlSZWZlcmVuY2UoKSkpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8
U1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRlKEV4Y2VwdGlvbkNv
ZGUmIGVjKQorICAgIFJlZlB0cjxTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPj4gY29u
c29saWRhdGUoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV92YWx1
ZXMpOwogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7CiAgICAgICAgIGlmICghY2FuQWx0ZXJM
aXN0KGVjKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLT5zaXplKCkgPT0gbV93cmFwcGVycy0+c2l6
ZSgpKTsKIAogICAgICAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2
YWx1ZSBvZiBudWxsIGlzIHJldHVybmVkLgogICAgICAgICBpZiAobV92YWx1ZXMtPmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAgICAgZGV0YWNoTGlzdFdyYXBwZXJzKDApOwogICAgICAgICBSZWZQdHI8U1ZHUHJvcGVy
dHlUZWFyT2ZmPFNWR1RyYW5zZm9ybT4+IHdyYXBwZXIgPSBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZH
VHJhbnNmb3JtPjo6Y3JlYXRlKG1fdmFsdWVzLT5jb25zb2xpZGF0ZSgpKTsKICAgICAgICAgbV93
cmFwcGVycy0+YXBwZW5kKHdyYXBwZXIpOwogCiAgICAgICAgIEFTU0VSVChtX3ZhbHVlcy0+c2l6
ZSgpID09IG1fd3JhcHBlcnMtPnNpemUoKSk7Ci0gICAgICAgIHJldHVybiB3cmFwcGVyLnJlbGVh
c2UoKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248131</attachid>
            <date>2015-03-06 19:10:12 -0800</date>
            <delta_ts>2015-03-10 09:40:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142063-20150306190952.patch</filename>
            <type>text/plain</type>
            <size>53067</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODEyMDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAzLTA2ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIgZnJv
bSBzdmcvcHJvcGVydGllcyBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMDYzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL1JlZi5oOgorICAgICAgICAoV1RGOjpzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3QpOiBBZGQgYSBzdGF0X2Nhc3QgZnVuY3Rpb24gdG8gUmVmPD4uCisKIDIwMTUt
MDMtMDYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
Y3Jhc2hlcyBzZWVuIG9uIHRoZSB0aGUgV2luZG93cyBidWlsZGJvdHMgYWZ0ZXIgbXkgbGFzdCBw
YXRjaC4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1JlZi5oCShyZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCwxNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
ZW1wbGF0ZTx0eXBlbmFtZSBVCiAgICAgcmV0dXJuIG9sZFJlZmVyZW5jZTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFJlZjxUPiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3QoUmVmPFU+JiByZWZlcmVuY2UpCit7CisgICAgcmV0dXJuIFJlZjxUPihzdGF0aWNfY2Fz
dDxUJj4ocmVmZXJlbmNlLmdldCgpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBSZWY8VD4gc3RhdGljX3JlZmVyZW5jZV9jYXN0KGNvbnN0IFJlZjxVPiYg
cmVmZXJlbmNlKQoreworICAgIHJldHVybiBSZWY8VD4oc3RhdGljX2Nhc3Q8VCY+KHJlZmVyZW5j
ZS5jb3B5UmVmKCkuZ2V0KCkpKTsKK30KKwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBzdHJ1Y3Qg
R2V0UHRySGVscGVyPFJlZjxUPj4gewogICAgIHR5cGVkZWYgVCogUHRyVHlwZTsKQEAgLTE2Niw1
ICsxNzYsNiBAQCBpbmxpbmUgUmVmPFQ+IGFkb3B0UmVmKFQmIHJlZmVyZW5jZSkKIAogdXNpbmcg
V1RGOjpSZWY7CiB1c2luZyBXVEY6OmFkb3B0UmVmOwordXNpbmcgV1RGOjpzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q7CiAKICNlbmRpZiAvLyBXVEZfUmVmX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE4MTIwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDg5IEBACisyMDE1LTAzLTA2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIgZnJvbSBzdmcvcHJvcGVy
dGllcyBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQyMDYzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIgZnJvbSBzdmcvcHJvcGVydGllcyBjbGFz
c2VzLiBBbGwgdGhlIHJldHVybiB0eXBlcyBhbmQKKyAgICAgICAgdGhlIGxvY2FsIHZhcmlhYmxl
cyBzaG91bGQgYmUgUmVmUHRyLiBJZiB3ZSBhcmUgc3VyZSB0aGUgcG9pbnRlciBjYW4ndAorICAg
ICAgICBiZSBudWxsLCB3ZSB1c2UgUmVmIGluc3RlYWQuCisKKyAgICAgICAgKiBzdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50Ojpsb29r
dXBPckNyZWF0ZU9yaWVudFR5cGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtl
ckVsZW1lbnQ6Om9yaWVudFR5cGVBbmltYXRlZCk6CisgICAgICAgICogc3ZnL1NWR01hcmtlckVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlRFdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhFbGVtZW50OjphbmltYXRlZFBhdGhTZWdMaXN0KToKKyAgICAgICAgKiBzdmcvU1ZH
UGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9seUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6cG9pbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BvbHlFbGVtZW50OjphbmltYXRlZFBvaW50cyk6CisgICAgICAgICogc3ZnL1NW
R1BvbHlFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRl
VGV4dExlbmd0aFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVt
ZW50Ojp0ZXh0TGVuZ3RoQW5pbWF0ZWQpOgorICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVmlld1NwZWM6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3Bl
Yzo6dmlld0JveEFuaW1hdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdTcGVjOjpwcmVz
ZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6
Omxvb2t1cE9yQ3JlYXRlVmlld0JveFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmll
d1NwZWM6Omxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpb1dyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBlcik6
CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmg6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAg
ICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToK
KyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlU
ZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVk
UHJvcGVydHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJvcGVydHk6Omxvb2t1
cE9yQ3JlYXRlV3JhcHBlcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eU1hY3Jvcy5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJv
cGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5VGVh
ck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0YXRp
Y1Byb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRTdGF0aWNQ
cm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdMaXN0UHJvcGVydHk6OmluaXRpYWxpemVWYWx1ZXNBbmRXcmFwcGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6OmdldEl0ZW1WYWx1ZXNBbmRXcmFwcGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6Omluc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRX
cmFwcGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6OnJlcGxhY2VJdGVt
VmFsdWVzQW5kV3JhcHBlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5Ojpy
ZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFBy
b3BlcnR5OjphcHBlbmRJdGVtVmFsdWVzQW5kV3JhcHBlcnMpOgorICAgICAgICAqIHN2Zy9wcm9w
ZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xp
c3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9w
ZXJ0eVRlYXJPZmY6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5
VGVhck9mZjo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9w
ZXJ0eVRlYXJPZmY6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6cmVtb3ZlSXRlbSk6CisgICAgICAgICog
c3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6Omluc2VydEl0
ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJP
ZmY6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5SW5m
by5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1N0YXRpY0xpc3RQcm9wZXJ0eVRlYXJP
ZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6
CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9m
Zi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJP
ZmY6OmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZjo6Y29uc29saWRhdGUpOgorCiAyMDE1LTAzLTA2
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0NvbnRlbnQgRXh0ZW5z
aW9uc10gTW92ZSBjb21waWxpbmcgb2YgY29udGVudCBleHRlbnNpb25zIHRvIHRoZSBVSVByb2Nl
c3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE4MTEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c3lu
Y2hyb25pemVPcmllbnQKICAgICBvd25lclR5cGUubV9vcmllbnRUeXBlLnN5bmNocm9uaXplKCZv
d25lclR5cGUsIG9yaWVudFR5cGVQcm9wZXJ0eUluZm8oKS0+YXR0cmlidXRlTmFtZSwgYXV0b1N0
cmluZyk7CiB9CiAKLVBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHTWFya2VyRWxl
bWVudDo6bG9va3VwT3JDcmVhdGVPcmllbnRUeXBlV3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdNYXJrZXJFbGVtZW50Ojpsb29r
dXBPckNyZWF0ZU9yaWVudFR5cGVXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQog
ewogICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7CiAgICAgU1ZHTWFya2VyRWxlbWVudCYgb3du
ZXJUeXBlID0gZG93bmNhc3Q8U1ZHTWFya2VyRWxlbWVudD4oKmNvbnRleHRFbGVtZW50KTsKQEAg
LTI1OCwxMCArMjU4LDEwIEBAIFNWR01hcmtlck9yaWVudFR5cGUmIFNWR01hcmtlckVsZW1lbnQ6
Om8KICAgICByZXR1cm4gbV9vcmllbnRUeXBlLnZhbHVlOwogfQogCi1QYXNzUmVmUHRyPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8U1ZHTWFya2VyT3JpZW50VHlwZT4+IFNW
R01hcmtlckVsZW1lbnQ6Om9yaWVudFR5cGVBbmltYXRlZCgpCitSZWY8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvblByb3BlcnR5VGVhck9mZjxTVkdNYXJrZXJPcmllbnRUeXBlPj4gU1ZHTWFya2VyRWxl
bWVudDo6b3JpZW50VHlwZUFuaW1hdGVkKCkKIHsKICAgICBtX29yaWVudFR5cGUuc2hvdWxkU3lu
Y2hyb25pemUgPSB0cnVlOwotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1h
dGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8U1ZHTWFya2VyT3JpZW50VHlwZT4+KGxvb2t1
cE9yQ3JlYXRlT3JpZW50VHlwZVdyYXBwZXIodGhpcykpOworICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZjxTVkdNYXJr
ZXJPcmllbnRUeXBlPj4obG9va3VwT3JDcmVhdGVPcmllbnRUeXBlV3JhcHBlcih0aGlzKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNpb24g
MTgxMTIwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3LDExICsxNTcsMTEgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBD
dXN0b20gJ29yaWVudFR5cGUnIHByb3BlcnR5LgogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXpl
T3JpZW50VHlwZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVPcmllbnRUeXBlV3JhcHBl
cihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7CisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRl
ZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZU9yaWVudFR5cGVXcmFwcGVyKFNWR0VsZW1lbnQqIGNv
bnRleHRFbGVtZW50KTsKICAgICBTVkdNYXJrZXJPcmllbnRUeXBlJiBvcmllbnRUeXBlKCkgY29u
c3Q7CiAgICAgU1ZHTWFya2VyT3JpZW50VHlwZSYgb3JpZW50VHlwZUJhc2VWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZW50VHlwZS52YWx1ZTsgfQogICAgIHZvaWQgc2V0T3JpZW50VHlwZUJh
c2VWYWx1ZShjb25zdCBTVkdNYXJrZXJPcmllbnRUeXBlJiB0eXBlKSB7IG1fb3JpZW50VHlwZS52
YWx1ZSA9IHR5cGU7IH0KLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9w
ZXJ0eVRlYXJPZmY8U1ZHTWFya2VyT3JpZW50VHlwZT4+IG9yaWVudFR5cGVBbmltYXRlZCgpOwor
ICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmPFNWR01hcmtlck9y
aWVudFR5cGU+PiBvcmllbnRUeXBlQW5pbWF0ZWQoKTsKIAogcHJpdmF0ZToKICAgICBtdXRhYmxl
IFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdNYXJrZXJPcmllbnRUeXBlPiBt
X29yaWVudFR5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE4MTEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMSwxMyArMzExLDEzIEBAIFNWR1BhdGhCeXRlU3RyZWFtKiBT
VkdQYXRoRWxlbWVudDo6cGF0aEIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQ
YXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHByb3BlcnR5KS0+YW5pbWF0ZWRQYXRoQnl0ZVN0
cmVhbSgpOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVt
ZW50Ojpsb29rdXBPckNyZWF0ZURXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQor
UmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVtZW50Ojpsb29rdXBPckNyZWF0ZURX
cmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQogewogICAgIEFTU0VSVChjb250ZXh0
RWxlbWVudCk7CiAgICAgU1ZHUGF0aEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25jYXN0PFNWR1Bh
dGhFbGVtZW50PigqY29udGV4dEVsZW1lbnQpOwogCiAgICAgaWYgKFNWR0FuaW1hdGVkUHJvcGVy
dHkqIHByb3BlcnR5ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQYXRo
RWxlbWVudCwgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4oJm93bmVyVHlw
ZSwgZFByb3BlcnR5SW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgICAgICBy
ZXR1cm4gKnByb3BlcnR5OwogCiAgICAgLy8gQnVpbGQgaW5pdGlhbCBTVkdQYXRoU2VnTGlzdC4K
ICAgICBidWlsZFNWR1BhdGhTZWdMaXN0RnJvbUJ5dGVTdHJlYW0ob3duZXJUeXBlLm1fcGF0aEJ5
dGVTdHJlYW0uZ2V0KCksICZvd25lclR5cGUsIG93bmVyVHlwZS5tX3BhdGhTZWdMaXN0LnZhbHVl
LCBVbmFsdGVyZWRQYXJzaW5nKTsKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFNWR1BhdGhFbGVt
ZW50OjpzeW5jaHJvbml6ZUQoU1ZHRWxlCiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiog
U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0KCkKIHsKICAgICBtX3BhdGhTZWdMaXN0LnNob3Vs
ZFN5bmNocm9uaXplID0gdHJ1ZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xp
c3RQcm9wZXJ0eVRlYXJPZmYqPihzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxvb2t1cE9yQ3JlYXRlRFdyYXBwZXIodGhpcykpLT5iYXNl
VmFsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVh
ck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmPihsb29rdXBPckNyZWF0ZURXcmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpKTsKIH0K
IAogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50Ojpub3JtYWxp
emVkUGF0aFNlZ0xpc3QoKQpAQCAtMzUxLDcgKzM1MSw3IEBAIFNWR1BhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmKiBTVkdQYXRoRWwKIHsKICAgICBtX3BhdGhTZWdMaXN0LnNob3VsZFN5bmNocm9u
aXplID0gdHJ1ZTsKICAgICBtX2lzQW5pbVZhbE9ic2VydmVkID0gdHJ1ZTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihzdGF0aWNfcG9pbnRl
cl9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxvb2t1cE9yQ3Jl
YXRlRFdyYXBwZXIodGhpcykpLT5hbmltVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdB
bmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0ZURXcmFwcGVy
KHRoaXMpKS0+YW5pbVZhbCgpKTsKIH0KIAogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYq
IFNWR1BhdGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMTgxMTIwKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsx
MDksNyBAQCBwcml2YXRlOgogCiAgICAgLy8gQ3VzdG9tICdkJyBwcm9wZXJ0eQogICAgIHN0YXRp
YyB2b2lkIHN5bmNocm9uaXplRChTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVEV3JhcHBl
cihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7CisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRl
ZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZURXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVt
ZW50KTsKIAogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdQYXRoRWxl
bWVudCkKICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9OVU1CRVIoUGF0aExlbmd0aCwgcGF0aExl
bmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24g
MTgxMTIwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN5bmNocm9u
aXplUG9pbnRzKFMKICAgICBvd25lclR5cGUubV9wb2ludHMuc3luY2hyb25pemUoJm93bmVyVHlw
ZSwgcG9pbnRzUHJvcGVydHlJbmZvKCktPmF0dHJpYnV0ZU5hbWUsIG93bmVyVHlwZS5tX3BvaW50
cy52YWx1ZS52YWx1ZUFzU3RyaW5nKCkpOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJv
cGVydHk+IFNWR1BvbHlFbGVtZW50Ojpsb29rdXBPckNyZWF0ZVBvaW50c1dyYXBwZXIoU1ZHRWxl
bWVudCogY29udGV4dEVsZW1lbnQpCitSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHUG9seUVs
ZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxl
bWVudCkKIHsKICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwogICAgIFNWR1BvbHlFbGVtZW50
JiBvd25lclR5cGUgPSBkb3duY2FzdDxTVkdQb2x5RWxlbWVudD4oKmNvbnRleHRFbGVtZW50KTsK
QEAgLTE0OCwxMyArMTQ4LDEzIEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZH
UG9seUUKIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0PiogU1ZHUG9seUVsZW1l
bnQ6OnBvaW50cygpCiB7CiAgICAgbV9wb2ludHMuc2hvdWxkU3luY2hyb25pemUgPSB0cnVlOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlz
dD4qPihzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pihsb29rdXBPckNy
ZWF0ZVBvaW50c1dyYXBwZXIodGhpcykpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qPihzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3Q+KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBl
cih0aGlzKSktPmJhc2VWYWwoKSk7CiB9CiAKIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9p
bnRMaXN0PiogU1ZHUG9seUVsZW1lbnQ6OmFuaW1hdGVkUG9pbnRzKCkKIHsKICAgICBtX3BvaW50
cy5zaG91bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xp
c3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pio+KHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZH
QW5pbWF0ZWRQb2ludExpc3Q+KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcih0aGlzKSktPmFu
aW1WYWwoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8
U1ZHUG9pbnRMaXN0Pio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlz
dD4obG9va3VwT3JDcmVhdGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDE4MTEyMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDdXN0b20gJ3BvaW50cycgcHJvcGVy
dHkKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVBvaW50cyhTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9v
a3VwT3JDcmVhdGVQb2ludHNXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKKyAg
ICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3Jh
cHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FO
SU1BVEVEX1BST1BFUlRJRVMoU1ZHUG9seUVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFU
RURfQk9PTEVBTihFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE4MTEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29u
dGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVQKICAgICBvd25lclR5cGUubV90ZXh0TGVu
Z3RoLnN5bmNocm9uaXplKCZvd25lclR5cGUsIHRleHRMZW5ndGhQcm9wZXJ0eUluZm8oKS0+YXR0
cmlidXRlTmFtZSwgdmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+
IFNWR1RleHRDb250ZW50RWxlbWVudDo6bG9va3VwT3JDcmVhdGVUZXh0TGVuZ3RoV3JhcHBlcihT
VkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIoU1ZHRWxl
bWVudCogY29udGV4dEVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKICAg
ICBTVkdUZXh0Q29udGVudEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25jYXN0PFNWR1RleHRDb250
ZW50RWxlbWVudD4oKmNvbnRleHRFbGVtZW50KTsKQEAgLTg5LDE0ICs4OSwxNCBAQCBQYXNzUmVm
UHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1RleHRDCiAgICAgICAgICgmb3duZXJUeXBlLCB0
ZXh0TGVuZ3RoUHJvcGVydHlJbmZvKCksIG93bmVyVHlwZS5tX3RleHRMZW5ndGgudmFsdWUpOwog
fQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6
OnRleHRMZW5ndGhBbmltYXRlZCgpCitSZWY8U1ZHQW5pbWF0ZWRMZW5ndGg+IFNWR1RleHRDb250
ZW50RWxlbWVudDo6dGV4dExlbmd0aEFuaW1hdGVkKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U1ZHTGVuZ3RoPiBkZWZhdWx0VGV4dExlbmd0aChMZW5ndGhNb2RlT3RoZXIpOwogICAg
IGlmIChtX3NwZWNpZmllZFRleHRMZW5ndGggPT0gZGVmYXVsdFRleHRMZW5ndGgpCiAgICAgICAg
IG1fdGV4dExlbmd0aC52YWx1ZS5uZXdWYWx1ZVNwZWNpZmllZFVuaXRzKExlbmd0aFR5cGVOdW1i
ZXIsIGdldENvbXB1dGVkVGV4dExlbmd0aCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAogICAg
IG1fdGV4dExlbmd0aC5zaG91bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRp
Y19wb2ludGVyX2Nhc3Q8U1ZHQW5pbWF0ZWRMZW5ndGg+KGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0
aFdyYXBwZXIodGhpcykpOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5p
bWF0ZWRMZW5ndGg+KGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIodGhpcykpOwogCiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJl
dmlzaW9uIDE4MTEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGV4
dExlbmd0aCBpcyBub3QgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkIERFQ0xBUkVfQU5JTUFU
RURfTEVOR1RIIG1hY3JvCiAgICAgLy8gYXMgaXRzIGdldHRlciBuZWVkcyBzcGVjaWFsIGhhbmRs
aW5nIChyZXR1cm4gZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCksIGluc3RlYWQgb2YgbV90ZXh0TGVu
Z3RoKS4KICAgICBTVkdMZW5ndGgmIHNwZWNpZmllZFRleHRMZW5ndGgoKSB7IHJldHVybiBtX3Nw
ZWNpZmllZFRleHRMZW5ndGg7IH0KLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiB0
ZXh0TGVuZ3RoQW5pbWF0ZWQoKTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRMZW5ndGg+IHRleHRMZW5n
dGhBbmltYXRlZCgpOwogICAgIHN0YXRpYyBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIHRleHRMZW5n
dGhQcm9wZXJ0eUluZm8oKTsKIAogcHJvdGVjdGVkOgpAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZh
dGU6CiAKICAgICAvLyBDdXN0b20gJ3RleHRMZW5ndGgnIHByb3BlcnR5CiAgICAgc3RhdGljIHZv
aWQgc3luY2hyb25pemVUZXh0TGVuZ3RoKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZVRl
eHRMZW5ndGhXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKKyAgICBzdGF0aWMg
UmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIo
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwogICAgIG11dGFibGUgU1ZHU3luY2hyb25pemFi
bGVBbmltYXRlZFByb3BlcnR5PFNWR0xlbmd0aD4gbV90ZXh0TGVuZ3RoOwogICAgIFNWR0xlbmd0
aCBtX3NwZWNpZmllZFRleHRMZW5ndGg7CiAgIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCShyZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNDAgKzE0OCw0MCBAQCBTVkdFbGVtZW50KiBT
VkdWaWV3U3BlYzo6dmlld1RhcmdldCgpIGNvCiBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmKiBTVkdWaWV3U3BlYzo6dHJhbnNmb3JtKCkKIHsKICAgICBpZiAoIW1fY29udGV4dEVsZW1l
bnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBS
ZXR1cm4gdGhlIGFuaW1WYWwgaGVyZSwgYXMgaXRzIHJlYWRvbmx5IGJ5IGRlZmF1bHQgLSB3aGlj
aCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudCBoZXJlLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdB
bmltYXRlZFRyYW5zZm9ybUxpc3Q+KGxvb2t1cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBlcih0aGlz
KSktPmFuaW1WYWwoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3RQ
cm9wZXJ0eVRlYXJPZmYqPihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRUcmFuc2Zv
cm1MaXN0Pihsb29rdXBPckNyZWF0ZVRyYW5zZm9ybVdyYXBwZXIodGhpcykpLT5hbmltVmFsKCkp
OwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUmVjdD4gU1ZHVmlld1NwZWM6OnZpZXdCb3hB
bmltYXRlZCgpCitSZWZQdHI8U1ZHQW5pbWF0ZWRSZWN0PiBTVkdWaWV3U3BlYzo6dmlld0JveEFu
aW1hdGVkKCkKIHsKICAgICBpZiAoIW1fY29udGV4dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUmVjdD4obG9va3Vw
T3JDcmVhdGVWaWV3Qm94V3JhcHBlcih0aGlzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRSZWN0Pihsb29rdXBP
ckNyZWF0ZVZpZXdCb3hXcmFwcGVyKHRoaXMpKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW8+IFNWR1ZpZXdTcGVjOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQW5p
bWF0ZWQoKQorUmVmUHRyPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gU1ZHVmlld1Nw
ZWM6OnByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRlZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRF
bGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2Fz
dDxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KGxvb2t1cE9yQ3JlYXRlUHJlc2VydmVB
c3BlY3RSYXRpb1dyYXBwZXIodGhpcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
bz4obG9va3VwT3JDcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvV3JhcHBlcih0aGlzKSk7CiB9CiAK
LVBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3Jl
YXRlVmlld0JveFdyYXBwZXIoU1ZHVmlld1NwZWMqIG93bmVyVHlwZSkKK1JlZjxTVkdBbmltYXRl
ZFByb3BlcnR5PiBTVkdWaWV3U3BlYzo6bG9va3VwT3JDcmVhdGVWaWV3Qm94V3JhcHBlcihTVkdW
aWV3U3BlYyogb3duZXJUeXBlKQogewogICAgIEFTU0VSVChvd25lclR5cGUpOwogICAgIEFTU0VS
VChvd25lclR5cGUtPmNvbnRleHRFbGVtZW50KCkpOwogICAgIHJldHVybiBTVkdBbmltYXRlZFBy
b3BlcnR5Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRSZWN0
LCBGbG9hdFJlY3Q+KG93bmVyVHlwZS0+Y29udGV4dEVsZW1lbnQoKSwgdmlld0JveFByb3BlcnR5
SW5mbygpLCBvd25lclR5cGUtPm1fdmlld0JveCk7CiB9CiAKLVBhc3NSZWZQdHI8U1ZHQW5pbWF0
ZWRQcm9wZXJ0eT4gU1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RSYXRp
b1dyYXBwZXIoU1ZHVmlld1NwZWMqIG93bmVyVHlwZSkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5
PiBTVkdWaWV3U3BlYzo6bG9va3VwT3JDcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvV3JhcHBlcihT
VkdWaWV3U3BlYyogb3duZXJUeXBlKQogewogICAgIEFTU0VSVChvd25lclR5cGUpOwogICAgIEFT
U0VSVChvd25lclR5cGUtPmNvbnRleHRFbGVtZW50KCkpOwogICAgIHJldHVybiBTVkdBbmltYXRl
ZFByb3BlcnR5Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPihvd25lclR5cGUtPmNv
bnRleHRFbGVtZW50KCksIHByZXNlcnZlQXNwZWN0UmF0aW9Qcm9wZXJ0eUluZm8oKSwgb3duZXJU
eXBlLT5tX3ByZXNlcnZlQXNwZWN0UmF0aW8pOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVk
UHJvcGVydHk+IFNWR1ZpZXdTcGVjOjpsb29rdXBPckNyZWF0ZVRyYW5zZm9ybVdyYXBwZXIoU1ZH
Vmlld1NwZWMqIG93bmVyVHlwZSkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdWaWV3U3Bl
Yzo6bG9va3VwT3JDcmVhdGVUcmFuc2Zvcm1XcmFwcGVyKFNWR1ZpZXdTcGVjKiBvd25lclR5cGUp
CiB7CiAgICAgQVNTRVJUKG93bmVyVHlwZSk7CiAgICAgQVNTRVJUKG93bmVyVHlwZS0+Y29udGV4
dEVsZW1lbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAkocmV2aXNpb24gMTgx
MTIwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDEzICs3MiwxMyBAQCBwdWJsaWM6CiAgICAgU1ZHVHJhbnNmb3JtTGlzdCB0cmFuc2Zv
cm1CYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCiAgICAgLy8gQ3Vz
dG9tIGFuaW1hdGVkICd2aWV3Qm94JyBwcm9wZXJ0eS4KLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1h
dGVkUmVjdD4gdmlld0JveEFuaW1hdGVkKCk7CisgICAgUmVmUHRyPFNWR0FuaW1hdGVkUmVjdD4g
dmlld0JveEFuaW1hdGVkKCk7CiAgICAgRmxvYXRSZWN0JiB2aWV3Qm94KCkgeyByZXR1cm4gbV92
aWV3Qm94OyB9CiAgICAgRmxvYXRSZWN0IHZpZXdCb3hCYXNlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZpZXdCb3g7IH0KICAgICB2b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUoY29uc3QgRmxvYXRS
ZWN0JiB2aWV3Qm94KSB7IG1fdmlld0JveCA9IHZpZXdCb3g7IH0KIAogICAgIC8vIEN1c3RvbSBh
bmltYXRlZCAncHJlc2VydmVBc3BlY3RSYXRpbycgcHJvcGVydHkuCi0gICAgUGFzc1JlZlB0cjxT
VkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IHByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRl
ZCgpOworICAgIFJlZlB0cjxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IHByZXNlcnZl
QXNwZWN0UmF0aW9BbmltYXRlZCgpOwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNl
cnZlQXNwZWN0UmF0aW8oKSB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KICAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KICAgICB2b2lkIHNldFByZXNlcnZl
QXNwZWN0UmF0aW9CYXNlVmFsdWUoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2Vy
dmVBc3BlY3RSYXRpbykgeyBtX3ByZXNlcnZlQXNwZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJh
dGlvOyB9CkBAIC05NCw5ICs5NCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmlld0JveElkZW50aWZpZXIoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvSWRlbnRpZmllcigpOwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVUcmFuc2Zvcm1XcmFwcGVy
KFNWR1ZpZXdTcGVjKiBjb250ZXh0RWxlbWVudCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZH
QW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVWaWV3Qm94V3JhcHBlcihTVkdWaWV3U3Bl
YyogY29udGV4dEVsZW1lbnQpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJv
cGVydHk+IGxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpb1dyYXBwZXIoU1ZHVmlld1Nw
ZWMqIGNvbnRleHRFbGVtZW50KTsKKyAgICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+
IGxvb2t1cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBlcihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1l
bnQpOworICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVW
aWV3Qm94V3JhcHBlcihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOworICAgIHN0YXRpYyBS
ZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlv
V3JhcHBlcihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOwogCiAgICAgU1ZHRWxlbWVudCog
bV9jb250ZXh0RWxlbWVudDsKICAgICBTVkdab29tQW5kUGFuVHlwZSBtX3pvb21BbmRQYW47Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZEVudW1lcmF0aW9u
UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lvbiAx
ODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZEVudW1l
cmF0aW9uUHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmPHVuc2ln
bmVkPjo6c2V0QmFzZVZhbChwcm9wZXJ0eSwgZWMpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8RW51bVR5cGU+PiBj
cmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBF
bnVtVHlwZSYgcHJvcGVydHkpCisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9u
UHJvcGVydHlUZWFyT2ZmPEVudW1UeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVt
ZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5
VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgRW51bVR5cGUmIHByb3BlcnR5KQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmPEVudW1UeXBlPihjb250ZXh0
RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQmPihwcm9wZXJ0eSkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZjxFbnVtVHlwZT4oY29udGV4
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkJj4ocHJvcGVydHkpKSk7CiAgICAgfQogCiAgICAgRW51bVR5cGUmIGN1
cnJlbnRBbmltYXRlZFZhbHVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCShy
ZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDEwICsxNTMs
MTAgQEAgcHVibGljOgogICAgICAgICBzeW5jaHJvbml6ZVdyYXBwZXJzSWZOZWVkZWQoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJP
ZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmlt
YXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiB2YWx1ZXMpCisgICAgc3RhdGljIFJlZjxT
VkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0Vs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
LCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBl
JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9w
ZXJ0eVR5cGU+KGNvbnRleHRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5
VHlwZSwgdmFsdWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVk
TGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+KGNvbnRleHRFbGVtZW50LCBhdHRyaWJ1
dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBhdGhT
ZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZp
c2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1
OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmKj4obV9iYXNlVmFsLmdldCgpKS0+cmVtb3ZlSXRlbUZyb21MaXN0KGl0ZW1JbmRl
eCwgc2hvdWxkU3luY2hyb25pemVXcmFwcGVycyk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4gY3JlYXRlKFNWR0Vs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
LCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgU1ZHUGF0aFNlZ0xp
c3QmIHZhbHVlcykKKyAgICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUsIFNWR1BhdGhTZWdMaXN0JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQo
Y29udGV4dEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVk
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYoY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUs
IGFuaW1hdGVkUHJvcGVydHlUeXBlLCB2YWx1ZXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihjb250ZXh0RWxlbWVu
dCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHZhbHVlcykpOwogICAgIH0K
IAogICAgIHVzaW5nIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQYXRoU2VnTGlz
dD46OmFuaW1hdGlvblN0YXJ0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRlZFByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCShyZXZpc2lvbiAxODExMjApCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDE4ICs0OCwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1ZHQW5p
bWF0ZWRQcm9wZXJ0eSgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBl
bmFtZSBUZWFyT2ZmVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlUeXBlPgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFRlYXJPZmZUeXBlPiBsb29rdXBPckNyZWF0ZVdyYXBwZXIoT3duZXJUeXBlKiBlbGVt
ZW50LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8sIFByb3BlcnR5VHlwZSYgcHJvcGVydHkp
CisgICAgc3RhdGljIFJlZjxUZWFyT2ZmVHlwZT4gbG9va3VwT3JDcmVhdGVXcmFwcGVyKE93bmVy
VHlwZSogZWxlbWVudCwgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvLCBQcm9wZXJ0eVR5cGUm
IHByb3BlcnR5KQogICAgIHsKICAgICAgICAgQVNTRVJUKGluZm8pOwogICAgICAgICBTVkdBbmlt
YXRlZFByb3BlcnR5RGVzY3JpcHRpb24ga2V5KGVsZW1lbnQsIGluZm8tPnByb3BlcnR5SWRlbnRp
Zmllcik7Ci0gICAgICAgIFJlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiB3cmFwcGVyID0gYW5p
bWF0ZWRQcm9wZXJ0eUNhY2hlKCktPmdldChrZXkpOwotICAgICAgICBpZiAoIXdyYXBwZXIpIHsK
LSAgICAgICAgICAgIHdyYXBwZXIgPSBUZWFyT2ZmVHlwZTo6Y3JlYXRlKGVsZW1lbnQsIGluZm8t
PmF0dHJpYnV0ZU5hbWUsIGluZm8tPmFuaW1hdGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSk7Ci0g
ICAgICAgICAgICBpZiAoaW5mby0+YW5pbWF0ZWRQcm9wZXJ0eVN0YXRlID09IFByb3BlcnR5SXNS
ZWFkT25seSkKLSAgICAgICAgICAgICAgICB3cmFwcGVyLT5zZXRJc1JlYWRPbmx5KCk7Ci0gICAg
ICAgICAgICBhbmltYXRlZFByb3BlcnR5Q2FjaGUoKS0+c2V0KGtleSwgd3JhcHBlci5nZXQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8VGVhck9mZlR5
cGU+KHdyYXBwZXIpOworICAgICAgICBhdXRvJiBzbG90ID0gYW5pbWF0ZWRQcm9wZXJ0eUNhY2hl
KCktPmFkZChrZXksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKHNsb3Qp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVhck9mZlR5cGUmPigqc2xvdCk7Cisg
ICAgICAgIFJlZjxTVkdBbmltYXRlZFByb3BlcnR5PiB3cmFwcGVyID0gVGVhck9mZlR5cGU6OmNy
ZWF0ZShlbGVtZW50LCBpbmZvLT5hdHRyaWJ1dGVOYW1lLCBpbmZvLT5hbmltYXRlZFByb3BlcnR5
VHlwZSwgcHJvcGVydHkpOworICAgICAgICBpZiAoaW5mby0+YW5pbWF0ZWRQcm9wZXJ0eVN0YXRl
ID09IFByb3BlcnR5SXNSZWFkT25seSkKKyAgICAgICAgICAgIHdyYXBwZXItPnNldElzUmVhZE9u
bHkoKTsKKyAgICAgICAgc2xvdCA9IHdyYXBwZXIucHRyKCk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8VGVhck9mZlR5cGU+KHdyYXBwZXIpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgVGVhck9mZlR5cGU+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eU1hY3Jvcy5oCShyZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMiwxMCArMTMyLDEwIEBAIHB1YmxpYzogXAogICAgICAgICBtXyMjTG93ZXJQcm9wZXJ0eS5p
c1ZhbGlkID0gdmFsaWRWYWx1ZTsgXAogICAgIH0gXAogXAotICAgIFBhc3NSZWZQdHI8VGVhck9m
ZlR5cGU+IExvd2VyUHJvcGVydHkjI0FuaW1hdGVkKCkgXAorICAgIFJlZjxUZWFyT2ZmVHlwZT4g
TG93ZXJQcm9wZXJ0eSMjQW5pbWF0ZWQoKSBcCiAgICAgeyBcCiAgICAgICAgIG1fIyNMb3dlclBy
b3BlcnR5LnNob3VsZFN5bmNocm9uaXplID0gdHJ1ZTsgXAotICAgICAgICByZXR1cm4gc3RhdGlj
X3BvaW50ZXJfY2FzdDxUZWFyT2ZmVHlwZT4obG9va3VwT3JDcmVhdGUjI1VwcGVyUHJvcGVydHkj
I1dyYXBwZXIodGhpcykpOyBcCisgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
VGVhck9mZlR5cGU+KGxvb2t1cE9yQ3JlYXRlIyNVcHBlclByb3BlcnR5IyNXcmFwcGVyKHRoaXMp
KTsgXAogICAgIH0gXAogXAogICAgIGJvb2wgTG93ZXJQcm9wZXJ0eSMjSXNWYWxpZCgpIGNvbnN0
IFwKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOiBcCiAgICAgICAgIG1fIyNMb3dlclByb3Bl
cnR5LnN5bmNocm9uaXplKHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5mbygpLT5hdHRy
aWJ1dGVOYW1lLCB2YWx1ZSk7IFwKICAgICB9IFwKIFwKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
VkdBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZSMjVXBwZXJQcm9wZXJ0eSMjV3JhcHBl
cihTVkdFbGVtZW50KiBtYXNrZWRPd25lclR5cGUpIFwKKyAgICBzdGF0aWMgUmVmPFNWR0FuaW1h
dGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlIyNVcHBlclByb3BlcnR5IyNXcmFwcGVyKFNWR0Vs
ZW1lbnQqIG1hc2tlZE93bmVyVHlwZSkgXAogICAgIHsgXAogICAgICAgICBBU1NFUlQobWFza2Vk
T3duZXJUeXBlKTsgXAogICAgICAgICBVc2VPd25lclR5cGUqIG93bmVyVHlwZSA9IHN0YXRpY19j
YXN0PFVzZU93bmVyVHlwZSo+KG1hc2tlZE93bmVyVHlwZSk7IFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRl
YXJPZmYuaAkocmV2aXNpb24gMTgxMTIwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAg
KzU3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYW5pbVZhbC5nZXQoKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjxQcm9w
ZXJ0eVR5cGU+PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJv
cGVydHlUeXBlLCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQorICAgIHN0YXRpYyBSZWY8U1ZHQW5p
bWF0ZWRQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNv
bnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRl
ZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiBwcm9wZXJ0
eSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPihj
b250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHByb3Bl
cnR5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkUHJvcGVydHlU
ZWFyT2ZmPFByb3BlcnR5VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1h
dGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIFByb3BlcnR5VHlwZSYg
Y3VycmVudEFuaW1hdGVkVmFsdWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9m
Zi5oCShyZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwx
MCArNDgsMTAgQEAgcHVibGljOgogICAgICAgICBjb21taXRDaGFuZ2UoKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZjxQcm9w
ZXJ0eVR5cGU+PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJv
cGVydHlUeXBlLCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQorICAgIHN0YXRpYyBSZWY8U1ZHQW5p
bWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBB
bmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiBw
cm9wZXJ0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8UHJv
cGVydHlUeXBlPihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0
eVR5cGUsIHByb3BlcnR5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1h
dGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0
dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAog
ICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4MTEyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFBy
b3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsMTAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdU
cmFuc2Zvcm1MaXN0Pio+KG1fYW5pbVZhbC5nZXQoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmPiBjcmVhdGUo
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBTVkdUcmFu
c2Zvcm1MaXN0JiB2YWx1ZXMpCisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgYW5p
bWF0ZWRQcm9wZXJ0eVR5cGUsIFNWR1RyYW5zZm9ybUxpc3QmIHZhbHVlcykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKGNvbnRleHRFbGVtZW50LCBh
dHRyaWJ1dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9m
Zihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHZh
bHVlcykpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCShyZXZpc2lvbiAxODExMjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIFNWR1By
b3BlcnR5VHJhaXRzPFByb3BlcnR5VHlwZT46Okxpc3RJdGVtVHlwZSBMaXN0SXRlbVR5cGU7CiAg
ICAgdHlwZWRlZiBTVkdQcm9wZXJ0eVRlYXJPZmY8TGlzdEl0ZW1UeXBlPiBMaXN0SXRlbVRlYXJP
ZmY7Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gUGFzc0xpc3RJdGVt
VGVhck9mZjsKKyAgICB0eXBlZGVmIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IFB0ckxpc3RJdGVt
VGVhck9mZjsKICAgICB0eXBlZGVmIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9w
ZXJ0eVR5cGU+IEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjsKICAgICB0eXBlZGVmIHR5cGVu
YW1lIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+OjpMaXN0V3Jh
cHBlckNhY2hlIExpc3RXcmFwcGVyQ2FjaGU7CiAKQEAgLTEzOCwxOSArMTM4LDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVh
ck9mZiBpbml0aWFsaXplVmFsdWVzQW5kV3JhcHBlcnMoUGFzc0xpc3RJdGVtVGVhck9mZiBwYXNz
TmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIGluaXRp
YWxpemVWYWx1ZXNBbmRXcmFwcGVycyhQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRlbSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7CiAgICAgICAg
IGlmICghY2FuQWx0ZXJMaXN0KGVjKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAg
IC8vIE5vdCBzcGVjaWZpZWQsIGJ1dCBGRi9PcGVyYSBkbyBpdCB0aGlzIHdheSwgYW5kIGl0J3Mg
anVzdCBzYW5lLgotICAgICAgICBpZiAoIXBhc3NOZXdJdGVtKSB7CisgICAgICAgIGlmICghbmV3
SXRlbSkgewogICAgICAgICAgICAgZWMgPSBTVkdFeGNlcHRpb246OlNWR19XUk9OR19UWVBFX0VS
UjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPExp
c3RJdGVtVGVhck9mZj4gbmV3SXRlbSA9IHBhc3NOZXdJdGVtOwogICAgICAgICBBU1NFUlQobV92
YWx1ZXMtPnNpemUoKSA9PSBtX3dyYXBwZXJzLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFNwZWM6
IElmIHRoZSBpbnNlcnRlZCBpdGVtIGlzIGFscmVhZHkgaW4gYSBsaXN0LCBpdCBpcyByZW1vdmVk
IGZyb20gaXRzIHByZXZpb3VzIGxpc3QgYmVmb3JlIGl0IGlzIGluc2VydGVkIGludG8gdGhpcyBs
aXN0LgpAQCAtMTY0LDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV93cmFwcGVycy0+YXBw
ZW5kKG5ld0l0ZW0pOwogCiAgICAgICAgIGNvbW1pdENoYW5nZSgpOwotICAgICAgICByZXR1cm4g
bmV3SXRlbS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBuZXdJdGVtOwogICAgIH0KIAogICAg
IC8vIFNWR0xpc3Q6OmdldEl0ZW0oKQpAQCAtMTg3LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fdmFsdWVzLT5hdChpbmRleCk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVt
VGVhck9mZiBnZXRJdGVtVmFsdWVzQW5kV3JhcHBlcnMoQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFy
T2ZmKiBhbmltYXRlZExpc3QsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKKyAg
ICBQdHJMaXN0SXRlbVRlYXJPZmYgZ2V0SXRlbVZhbHVlc0FuZFdyYXBwZXJzKEFuaW1hdGVkTGlz
dFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRMaXN0LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7CiAgICAgICAgIGlm
ICghY2FuR2V0SXRlbShpbmRleCwgZWMpKQpAQCAtMjMyLDE0ICsyMzEsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbmV3SXRlbTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2Zm
IGluc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyhQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBh
c3NOZXdJdGVtLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlz
dEl0ZW1UZWFyT2ZmIGluc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyhQdHJMaXN0SXRl
bVRlYXJPZmYgbmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAoIWNhbkFsdGVyTGlz
dChlYykpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBOb3Qgc3BlY2lmaWVk
LCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4KLSAgICAg
ICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAgICAg
ICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMjQ4LDcgKzI0Nyw2IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKGluZGV4ID4gbV92YWx1ZXMtPnNpemUoKSkKICAgICAgICAgICAgICBpbmRleCA9IG1fdmFs
dWVzLT5zaXplKCk7CiAKLSAgICAgICAgUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gbmV3SXRlbSA9
IHBhc3NOZXdJdGVtOwogICAgICAgICBBU1NFUlQobV92YWx1ZXMtPnNpemUoKSA9PSBtX3dyYXBw
ZXJzLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFNwZWM6IElmIG5ld0l0ZW0gaXMgYWxyZWFkeSBp
biBhIGxpc3QsIGl0IGlzIHJlbW92ZWQgZnJvbSBpdHMgcHJldmlvdXMgbGlzdCBiZWZvcmUgaXQg
aXMgaW5zZXJ0ZWQgaW50byB0aGlzIGxpc3QuCkBAIC0yNjMsNyArMjYxLDcgQEAgcHVibGljOgog
ICAgICAgICBtX3dyYXBwZXJzLT5pbnNlcnQoaW5kZXgsIG5ld0l0ZW0pOwogCiAgICAgICAgIGNv
bW1pdENoYW5nZSgpOwotICAgICAgICByZXR1cm4gbmV3SXRlbS5yZWxlYXNlKCk7CisgICAgICAg
IHJldHVybiBuZXdJdGVtOwogICAgIH0KIAogICAgIC8vIFNWR0xpc3Q6OnJlcGxhY2VJdGVtKCkK
QEAgLTMwNSwyOSArMzAzLDI4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAg
ICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiByZXBsYWNlSXRlbVZhbHVlc0FuZFdyYXBw
ZXJzKFBhc3NMaXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0ZW0sIHVuc2lnbmVkIGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgcmVwbGFjZUl0ZW1WYWx1ZXNB
bmRXcmFwcGVycyhQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAg
ICAgICBpZiAoIWNhblJlcGxhY2VJdGVtKGluZGV4LCBlYykpCiAgICAgICAgICAgICByZXR1cm4g
MDsKIAogICAgICAgICAvLyBOb3Qgc3BlY2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3
YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4KLSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAg
ICAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdf
V1JPTkdfVFlQRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCiAgICAg
ICAgIEFTU0VSVChtX3ZhbHVlcy0+c2l6ZSgpID09IG1fd3JhcHBlcnMtPnNpemUoKSk7Ci0gICAg
ICAgIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKIAogICAg
ICAgICAvLyBTcGVjOiBJZiBuZXdJdGVtIGlzIGFscmVhZHkgaW4gYSBsaXN0LCBpdCBpcyByZW1v
dmVkIGZyb20gaXRzIHByZXZpb3VzIGxpc3QgYmVmb3JlIGl0IGlzIGluc2VydGVkIGludG8gdGhp
cyBsaXN0LgogICAgICAgICAvLyBTcGVjOiBJZiB0aGUgaXRlbSBpcyBhbHJlYWR5IGluIHRoaXMg
bGlzdCwgbm90ZSB0aGF0IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXBsYWNlIGlzIGJlZm9y
ZSB0aGUgcmVtb3ZhbCBvZiB0aGUgaXRlbS4KICAgICAgICAgaWYgKCFwcm9jZXNzSW5jb21pbmdM
aXN0SXRlbVdyYXBwZXIobmV3SXRlbSwgJmluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBuZXdJ
dGVtLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdJdGVtOwogCiAgICAgICAgIGlm
IChtX3ZhbHVlcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV93cmFwcGVycy0+
aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIC8vICdwYXNzTmV3SXRlbScgYWxyZWFkeSBsaXZlZCBp
biBvdXIgbGlzdCwgd2UgcmVtb3ZlZCBpdCwgYW5kIG5vdyB3ZSdyZSBlbXB0eSwgd2hpY2ggbWVh
bnMgdGhlcmUncyBub3RoaW5nIHRvIHJlcGxhY2UuCisgICAgICAgICAgICAvLyAnbmV3SXRlbScg
YWxyZWFkeSBsaXZlZCBpbiBvdXIgbGlzdCwgd2UgcmVtb3ZlZCBpdCwgYW5kIG5vdyB3ZSdyZSBl
bXB0eSwgd2hpY2ggbWVhbnMgdGhlcmUncyBub3RoaW5nIHRvIHJlcGxhY2UuCiAgICAgICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0K
QEAgLTM0Miw3ICszMzksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fd3JhcHBlcnMtPmF0KGluZGV4
KSA9IG5ld0l0ZW07CiAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBu
ZXdJdGVtLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCiAgICAg
Ly8gU1ZHTGlzdDo6cmVtb3ZlSXRlbSgpCkBAIC0zNzEsNyArMzY4LDcgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gb2xkSXRlbTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIHJl
bW92ZUl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYqIGFu
aW1hdGVkTGlzdCwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxp
c3RJdGVtVGVhck9mZiByZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnMoQW5pbWF0ZWRMaXN0UHJv
cGVydHlUZWFyT2ZmKiBhbmltYXRlZExpc3QsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3dyYXBwZXJzKTsKICAgICAgICAgaWYgKCFj
YW5SZW1vdmVJdGVtKGluZGV4LCBlYykpCkBAIC00MDgsMTkgKzQwNSwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBuZXdJdGVtOwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYg
YXBwZW5kSXRlbVZhbHVlc0FuZFdyYXBwZXJzKFBhc3NMaXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0
ZW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVGVhck9mZiBhcHBlbmRJdGVt
VmFsdWVzQW5kV3JhcHBlcnMoUHRyTGlzdEl0ZW1UZWFyT2ZmIG5ld0l0ZW0sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAo
IWNhbkFsdGVyTGlzdChlYykpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBO
b3Qgc3BlY2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBpdCdzIGp1c3Qg
c2FuZS4KLSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAoIW5ld0l0ZW0p
IHsKICAgICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7CiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxMaXN0SXRl
bVRlYXJPZmY+IG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKICAgICAgICAgQVNTRVJUKG1fdmFsdWVz
LT5zaXplKCkgPT0gbV93cmFwcGVycy0+c2l6ZSgpKTsKIAogICAgICAgICAvLyBTcGVjOiBJZiBu
ZXdJdGVtIGlzIGFscmVhZHkgaW4gYSBsaXN0LCBpdCBpcyByZW1vdmVkIGZyb20gaXRzIHByZXZp
b3VzIGxpc3QgYmVmb3JlIGl0IGlzIGluc2VydGVkIGludG8gdGhpcyBsaXN0LgpAQCAtNDMxLDcg
KzQyNyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV93cmFwcGVycy0+YXBwZW5kKG5ld0l0ZW0pOwog
CiAgICAgICAgIGNvbW1pdENoYW5nZShMaXN0TW9kaWZpY2F0aW9uQXBwZW5kKTsKLSAgICAgICAg
cmV0dXJuIG5ld0l0ZW0ucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gbmV3SXRlbTsKICAgICB9
CiAKICAgICBQcm9wZXJ0eVR5cGUmIHZhbHVlcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lv
biAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVy
dHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgcHVibGljOgogCiAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBTVkdQcm9wZXJ0eVRyYWl0czxQcm9wZXJ0eVR5cGU+OjpMaXN0
SXRlbVR5cGUgTGlzdEl0ZW1UeXBlOwogICAgIHR5cGVkZWYgU1ZHUHJvcGVydHlUZWFyT2ZmPExp
c3RJdGVtVHlwZT4gTGlzdEl0ZW1UZWFyT2ZmOwotICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxMaXN0
SXRlbVRlYXJPZmY+IFBhc3NMaXN0SXRlbVRlYXJPZmY7CisgICAgdHlwZWRlZiBSZWZQdHI8TGlz
dEl0ZW1UZWFyT2ZmPiBQdHJMaXN0SXRlbVRlYXJPZmY7CiAgICAgdHlwZWRlZiBTVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPiBBbmltYXRlZExpc3RQcm9wZXJ0eVRl
YXJPZmY7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJP
ZmY8UHJvcGVydHlUeXBlPjo6TGlzdFdyYXBwZXJDYWNoZSBMaXN0V3JhcHBlckNhY2hlOwogCkBA
IC00MCwxMCArNDAsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2U6Om1fdmFsdWVzOwogICAg
IHVzaW5nIEJhc2U6Om1fd3JhcHBlcnM7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZWxmPiBj
cmVhdGUoQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmKiBhbmltYXRlZFByb3BlcnR5LCBTVkdQ
cm9wZXJ0eVJvbGUgcm9sZSwgUHJvcGVydHlUeXBlJiB2YWx1ZXMsIExpc3RXcmFwcGVyQ2FjaGUm
IHdyYXBwZXJzKQorICAgIHN0YXRpYyBSZWY8U2VsZj4gY3JlYXRlKEFuaW1hdGVkTGlzdFByb3Bl
cnR5VGVhck9mZiogYW5pbWF0ZWRQcm9wZXJ0eSwgU1ZHUHJvcGVydHlSb2xlIHJvbGUsIFByb3Bl
cnR5VHlwZSYgdmFsdWVzLCBMaXN0V3JhcHBlckNhY2hlJiB3cmFwcGVycykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChhbmltYXRlZFByb3BlcnR5KTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTZWxmKGFuaW1hdGVkUHJvcGVydHksIHJvbGUsIHZhbHVlcywgd3JhcHBlcnMpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VsZihhbmltYXRlZFByb3BlcnR5LCByb2xlLCB2YWx1
ZXMsIHdyYXBwZXJzKSk7CiAgICAgfQogCiAgICAgaW50IGZpbmRJdGVtKExpc3RJdGVtVGVhck9m
ZiogaXRlbSkgY29uc3QKQEAgLTgzLDM0ICs4MywzNCBAQCBwdWJsaWM6CiAgICAgICAgIEJhc2U6
OmNsZWFyVmFsdWVzQW5kV3JhcHBlcnMoZWMpOwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRl
YXJPZmYgaW5pdGlhbGl6ZShQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBhc3NOZXdJdGVtLCBFeGNlcHRp
b25Db2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgaW5pdGlhbGl6ZShQdHJMaXN0SXRl
bVRlYXJPZmYgbmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewotICAgICAgICByZXR1
cm4gQmFzZTo6aW5pdGlhbGl6ZVZhbHVlc0FuZFdyYXBwZXJzKHBhc3NOZXdJdGVtLCBlYyk7Cisg
ICAgICAgIHJldHVybiBCYXNlOjppbml0aWFsaXplVmFsdWVzQW5kV3JhcHBlcnMobmV3SXRlbSwg
ZWMpOwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgZ2V0SXRlbSh1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIGdldEl0ZW0o
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgcmV0dXJu
IEJhc2U6OmdldEl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhtX2FuaW1hdGVkUHJvcGVydHkuZ2V0KCks
IGluZGV4LCBlYyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiBpbnNlcnRJdGVt
QmVmb3JlKFBhc3NMaXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0ZW0sIHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgaW5zZXJ0SXRlbUJlZm9y
ZShQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJhc2U6Omluc2VydEl0ZW1CZWZvcmVWYWx1
ZXNBbmRXcmFwcGVycyhwYXNzTmV3SXRlbSwgaW5kZXgsIGVjKTsKKyAgICAgICAgcmV0dXJuIEJh
c2U6Omluc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyhuZXdJdGVtLCBpbmRleCwgZWMp
OwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgcmVwbGFjZUl0ZW0oUGFzc0xpc3RJ
dGVtVGVhck9mZiBwYXNzTmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorICAgIFB0ckxpc3RJdGVtVGVhck9mZiByZXBsYWNlSXRlbShQdHJMaXN0SXRlbVRlYXJPZmYg
bmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEJhc2U6OnJlcGxhY2VJdGVtVmFsdWVzQW5kV3JhcHBlcnMocGFzc05ld0l0ZW0s
IGluZGV4LCBlYyk7CisgICAgICAgIHJldHVybiBCYXNlOjpyZXBsYWNlSXRlbVZhbHVlc0FuZFdy
YXBwZXJzKG5ld0l0ZW0sIGluZGV4LCBlYyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVh
ck9mZiByZW1vdmVJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICBQ
dHJMaXN0SXRlbVRlYXJPZmYgcmVtb3ZlSXRlbSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgewogICAgICAgICByZXR1cm4gQmFzZTo6cmVtb3ZlSXRlbVZhbHVlc0FuZFdy
YXBwZXJzKG1fYW5pbWF0ZWRQcm9wZXJ0eS5nZXQoKSwgaW5kZXgsIGVjKTsKICAgICB9CiAKLSAg
ICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIGFwcGVuZEl0ZW0oUGFzc0xpc3RJdGVtVGVhck9mZiBwYXNz
TmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIGFwcGVu
ZEl0ZW0oUHRyTGlzdEl0ZW1UZWFyT2ZmIG5ld0l0ZW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFwcGVuZEl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhwYXNz
TmV3SXRlbSwgZWMpOworICAgICAgICByZXR1cm4gQmFzZTo6YXBwZW5kSXRlbVZhbHVlc0FuZFdy
YXBwZXJzKG5ld0l0ZW0sIGVjKTsKICAgICB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlz
dFByb3BlcnR5VGVhck9mZi5jcHAJKHJldmlzaW9uIDE4MTEyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMjAgKzQ3LDIwIEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRl
YXJPZmY6OmNsZWEKICAgICBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6QmFzZTo6Y2xl
YXJWYWx1ZXMoZWMpOwogfQogCi1TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6UGFzc0xp
c3RJdGVtVHlwZSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Z2V0SXRlbSh1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCitTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zjo6UHRyTGlzdEl0ZW1UeXBlIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpnZXRJdGVt
KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBMaXN0SXRlbVR5cGUg
cmV0dXJuZWRJdGVtID0gQmFzZTo6Z2V0SXRlbVZhbHVlcyhpbmRleCwgZWMpOwogICAgIGlmIChy
ZXR1cm5lZEl0ZW0pIHsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdXaXRo
Q29udGV4dCo+KHJldHVybmVkSXRlbS5nZXQoKSktPmNvbnRleHRFbGVtZW50KCkgPT0gY29udGV4
dEVsZW1lbnQoKSk7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnV2l0aENv
bnRleHQqPihyZXR1cm5lZEl0ZW0uZ2V0KCkpLT5yb2xlKCkgPT0gbV9wYXRoU2VnUm9sZSk7CiAg
ICAgfQotICAgIHJldHVybiByZXR1cm5lZEl0ZW0ucmVsZWFzZSgpOworICAgIHJldHVybiByZXR1
cm5lZEl0ZW07CiB9CiAKLVNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQYXNzTGlzdEl0
ZW1UeXBlIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbShQYXNzTGlz
dEl0ZW1UeXBlIHBhc3NOZXdJdGVtLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6UHRyTGlzdEl0ZW1UeXBlIFNWR1BhdGhT
ZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbShQdHJMaXN0SXRlbVR5cGUgbmV3SXRl
bSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIE5vdCBzcGVj
aWZpZWQsIGJ1dCBGRi9PcGVyYSBkbyBpdCB0aGlzIHdheSwgYW5kIGl0J3MganVzdCBzYW5lLgot
ICAgIGlmICghcGFzc05ld0l0ZW0pIHsKKyAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAgICAgZWMg
PSBTVkdFeGNlcHRpb246OlNWR19XUk9OR19UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtNzEsMTYgKzcxLDE1IEBAIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQ
YXNzTGlzdEkKICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4ocmVw
bGFjZWRJdGVtLmdldCgpKS0+c2V0Q29udGV4dEFuZFJvbGUoMCwgUGF0aFNlZ1VuZGVmaW5lZFJv
bGUpOwogICAgIH0KIAotICAgIExpc3RJdGVtVHlwZSBuZXdJdGVtID0gcGFzc05ld0l0ZW07CiAg
ICAgcmV0dXJuIEJhc2U6OnJlcGxhY2VJdGVtVmFsdWVzKG5ld0l0ZW0sIGluZGV4LCBlYyk7CiB9
CiAKLVNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQYXNzTGlzdEl0ZW1UeXBlIFNWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZW1vdmVJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKK1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQdHJMaXN0SXRl
bVR5cGUgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OnJlbW92ZUl0ZW0odW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlU
ZWFyT2ZmOjpMaXN0SXRlbVR5cGUgcmVtb3ZlZEl0ZW0gPSBTVkdQYXRoU2VnTGlzdFByb3BlcnR5
VGVhck9mZjo6QmFzZTo6cmVtb3ZlSXRlbVZhbHVlcyhpbmRleCwgZWMpOwogICAgIGlmIChyZW1v
dmVkSXRlbSkKICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4ocmVt
b3ZlZEl0ZW0uZ2V0KCkpLT5zZXRDb250ZXh0QW5kUm9sZSgwLCBQYXRoU2VnVW5kZWZpbmVkUm9s
ZSk7Ci0gICAgcmV0dXJuIHJlbW92ZWRJdGVtLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcmVtb3Zl
ZEl0ZW07CiB9CiAKIFNWR1BhdGhFbGVtZW50KiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zjo6Y29udGV4dEVsZW1lbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5o
CShyZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQ
YXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIs
MTIgQEAgcHVibGljOgogICAgIHR5cGVkZWYgU1ZHTGlzdFByb3BlcnR5PFNWR1BhdGhTZWdMaXN0
PiBCYXNlOwogICAgIHR5cGVkZWYgU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1Bh
dGhTZWdMaXN0PiBBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAgICAgdHlwZWRlZiBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdQYXRoU2VnTGlzdD46Okxpc3RJdGVtVHlwZSBMaXN0SXRlbVR5cGU7
Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPFNWR1BhdGhTZWc+IFBhc3NMaXN0SXRlbVR5cGU7Cisg
ICAgdHlwZWRlZiBSZWZQdHI8U1ZHUGF0aFNlZz4gUHRyTGlzdEl0ZW1UeXBlOwogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0ZShBbmlt
YXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYqIGFuaW1hdGVkUHJvcGVydHksIFNWR1Byb3BlcnR5Um9s
ZSByb2xlLCBTVkdQYXRoU2VnUm9sZSBwYXRoU2VnUm9sZSwgU1ZHUGF0aFNlZ0xpc3QmIHZhbHVl
cywgTGlzdFdyYXBwZXJDYWNoZSYgd3JhcHBlcnMpCisgICAgc3RhdGljIFJlZjxTVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZj4gY3JlYXRlKEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiog
YW5pbWF0ZWRQcm9wZXJ0eSwgU1ZHUHJvcGVydHlSb2xlIHJvbGUsIFNWR1BhdGhTZWdSb2xlIHBh
dGhTZWdSb2xlLCBTVkdQYXRoU2VnTGlzdCYgdmFsdWVzLCBMaXN0V3JhcHBlckNhY2hlJiB3cmFw
cGVycykKICAgICB7CiAgICAgICAgIEFTU0VSVChhbmltYXRlZFByb3BlcnR5KTsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihhbmltYXRl
ZFByb3BlcnR5LCByb2xlLCBwYXRoU2VnUm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihhbmlt
YXRlZFByb3BlcnR5LCByb2xlLCBwYXRoU2VnUm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOwogICAg
IH0KIAogICAgIGludCBmaW5kSXRlbShjb25zdCBMaXN0SXRlbVR5cGUmIGl0ZW0pIGNvbnN0CkBA
IC02Nyw0NiArNjcsNDMgQEAgcHVibGljOgogICAgIC8vIFNWR0xpc3QgQVBJCiAgICAgdm9pZCBj
bGVhcihFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzTGlzdEl0ZW1UeXBlIGluaXRpYWxpemUo
UGFzc0xpc3RJdGVtVHlwZSBwYXNzTmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRy
TGlzdEl0ZW1UeXBlIGluaXRpYWxpemUoUHRyTGlzdEl0ZW1UeXBlIG5ld0l0ZW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgLy8gTm90IHNwZWNpZmllZCwgYnV0IEZGL09wZXJh
IGRvIGl0IHRoaXMgd2F5LCBhbmQgaXQncyBqdXN0IHNhbmUuCi0gICAgICAgIGlmICghcGFzc05l
d0l0ZW0pIHsKKyAgICAgICAgaWYgKCFuZXdJdGVtKSB7CiAgICAgICAgICAgICBlYyA9IFNWR0V4
Y2VwdGlvbjo6U1ZHX1dST05HX1RZUEVfRVJSOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGNsZWFyQ29udGV4
dEFuZFJvbGVzKCk7Ci0gICAgICAgIExpc3RJdGVtVHlwZSBuZXdJdGVtID0gcGFzc05ld0l0ZW07
CiAgICAgICAgIHJldHVybiBCYXNlOjppbml0aWFsaXplVmFsdWVzKG5ld0l0ZW0sIGVjKTsKICAg
ICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UeXBlIGdldEl0ZW0odW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQdHJMaXN0SXRlbVR5cGUgZ2V0SXRlbSh1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc0xpc3RJdGVtVHlwZSBpbnNlcnRJdGVtQmVmb3Jl
KFBhc3NMaXN0SXRlbVR5cGUgcGFzc05ld0l0ZW0sIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVR5cGUgaW5zZXJ0SXRlbUJlZm9yZShQdHJMaXN0SXRl
bVR5cGUgbmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsK
ICAgICAgICAgLy8gTm90IHNwZWNpZmllZCwgYnV0IEZGL09wZXJhIGRvIGl0IHRoaXMgd2F5LCBh
bmQgaXQncyBqdXN0IHNhbmUuCi0gICAgICAgIGlmICghcGFzc05ld0l0ZW0pIHsKKyAgICAgICAg
aWYgKCFuZXdJdGVtKSB7CiAgICAgICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX1dST05H
X1RZUEVfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAgICBM
aXN0SXRlbVR5cGUgbmV3SXRlbSA9IHBhc3NOZXdJdGVtOwogICAgICAgICByZXR1cm4gQmFzZTo6
aW5zZXJ0SXRlbUJlZm9yZVZhbHVlcyhuZXdJdGVtLCBpbmRleCwgZWMpOwogICAgIH0KIAotICAg
IFBhc3NMaXN0SXRlbVR5cGUgcmVwbGFjZUl0ZW0oUGFzc0xpc3RJdGVtVHlwZSwgdW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQdHJMaXN0SXRlbVR5cGUgcmVwbGFjZUl0ZW0o
UHRyTGlzdEl0ZW1UeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
UGFzc0xpc3RJdGVtVHlwZSByZW1vdmVJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgUHRyTGlzdEl0ZW1UeXBlIHJlbW92ZUl0ZW0odW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAotICAgIFBhc3NMaXN0SXRlbVR5cGUgYXBwZW5kSXRlbShQYXNzTGlzdEl0
ZW1UeXBlIHBhc3NOZXdJdGVtLCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVR5
cGUgYXBwZW5kSXRlbShQdHJMaXN0SXRlbVR5cGUgbmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgewogICAgICAgICAvLyBOb3Qgc3BlY2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhp
cyB3YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4KLSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgewor
ICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpT
VkdfV1JPTkdfVFlQRV9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgTGlzdEl0ZW1UeXBlIG5ld0l0ZW0g
PSBwYXNzTmV3SXRlbTsKICAgICAgICAgcmV0dXJuIEJhc2U6OmFwcGVuZEl0ZW1WYWx1ZXMobmV3
SXRlbSwgZWMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHUHJvcGVydHlJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHUHJvcGVydHlJbmZvLmgJKHJldmlzaW9uIDE4MTEyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eUluZm8gewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgdm9pZCAoKlN5bmNocm9uaXplUHJvcGVy
dHkpKFNWR0VsZW1lbnQqKTsKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eT4gKCpMb29rdXBPckNyZWF0ZVdyYXBwZXJGb3JBbmltYXRlZFByb3BlcnR5KShTVkdFbGVt
ZW50Kik7CisgICAgdHlwZWRlZiBSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gKCpMb29rdXBPckNy
ZWF0ZVdyYXBwZXJGb3JBbmltYXRlZFByb3BlcnR5KShTVkdFbGVtZW50Kik7CiAKICAgICBTVkdQ
cm9wZXJ0eUluZm8oQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgbmV3VHlwZSwgQW5pbWF0ZWRQcm9wZXJ0
eVN0YXRlIG5ld1N0YXRlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuZXdBdHRyaWJ1dGVOYW1lLAog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1Byb3BlcnR5SWRlbnRp
ZmllciwgU3luY2hyb25pemVQcm9wZXJ0eSBuZXdTeW5jaHJvbml6ZVByb3BlcnR5LApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9m
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1N0YXRp
Y0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMTgxMTIwKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw5ICszNSw5IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlOjptX3JvbGU7
CiAgICAgdXNpbmcgQmFzZTo6bV92YWx1ZXM7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdT
dGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4+IGNyZWF0ZShTVkdFbGVtZW50
JiBjb250ZXh0RWxlbWVudCwgUHJvcGVydHlUeXBlJiB2YWx1ZXMpCisgICAgc3RhdGljIFJlZjxT
VkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4+IGNyZWF0ZShTVkdFbGVt
ZW50JiBjb250ZXh0RWxlbWVudCwgUHJvcGVydHlUeXBlJiB2YWx1ZXMpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVy
dHlUeXBlPigmY29udGV4dEVsZW1lbnQsIHZhbHVlcykpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4oJmNvbnRl
eHRFbGVtZW50LCB2YWx1ZXMpKTsKICAgICB9CiAKICAgICAvLyBTVkdMaXN0IEFQSQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljUHJv
cGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4MTEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw5ICszNyw5IEBAIHB1YmxpYzoKIAogICAgIC8vIFVzZWQgZm9yIG5vbi1hbmltYXRlZCBQT0Qg
dHlwZXMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhIFNWR0FuaW1hdGVkUHJvcGVydHkg
b2JqZWN0LCBub3Igd2l0aCBhIFhNTCBET00gYXR0cmlidXRlCiAgICAgLy8gKGZvciBleGFtcGxl
OiBTVkdTVkdFbGVtZW50OjpjdXJyZW50VHJhbnNsYXRlKS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTZWxmPiBjcmVhdGUoQ29udGV4dEVsZW1lbnQmIGNvbnRleHRFbGVtZW50LCBQcm9wZXJ0eVR5
cGUmIHZhbHVlLCBVcGRhdGVNZXRob2QgdXBkYXRlKQorICAgIHN0YXRpYyBSZWY8U2VsZj4gY3Jl
YXRlKENvbnRleHRFbGVtZW50JiBjb250ZXh0RWxlbWVudCwgUHJvcGVydHlUeXBlJiB2YWx1ZSwg
VXBkYXRlTWV0aG9kIHVwZGF0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2VsZigmY29udGV4dEVsZW1lbnQsIHZhbHVlLCB1cGRhdGUpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2VsZigmY29udGV4dEVsZW1lbnQsIHZhbHVlLCB1cGRhdGUpKTsKICAgICB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q2hhbmdlKCkgeyAobV9jb250ZXh0RWxlbWVudC5n
ZXQoKS0+Km1fdXBkYXRlKSgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5o
CShyZXZpc2lvbiAxODExMjApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdU
cmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDQxICsz
MSw0MSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJP
ZmY8U1ZHVHJhbnNmb3JtTGlzdD4gQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmOwogICAgIHR5
cGVkZWYgU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybUxpc3Q+OjpM
aXN0V3JhcHBlckNhY2hlIExpc3RXcmFwcGVyQ2FjaGU7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybUxpc3Q+PiBjcmVhdGUoQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmKiBhbmltYXRlZFByb3BlcnR5LCBTVkdQcm9wZXJ0eVJvbGUg
cm9sZSwgU1ZHVHJhbnNmb3JtTGlzdCYgdmFsdWVzLCBMaXN0V3JhcHBlckNhY2hlJiB3cmFwcGVy
cykKKyAgICBzdGF0aWMgUmVmPFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlz
dD4+IGNyZWF0ZShBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYqIGFuaW1hdGVkUHJvcGVydHks
IFNWR1Byb3BlcnR5Um9sZSByb2xlLCBTVkdUcmFuc2Zvcm1MaXN0JiB2YWx1ZXMsIExpc3RXcmFw
cGVyQ2FjaGUmIHdyYXBwZXJzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFuaW1hdGVkUHJvcGVy
dHkpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmYoYW5pbWF0ZWRQcm9wZXJ0eSwgcm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2Zm
KGFuaW1hdGVkUHJvcGVydHksIHJvbGUsIHZhbHVlcywgd3JhcHBlcnMpKTsKICAgICB9CiAKLSAg
ICBQYXNzUmVmUHRyPFNWR1Byb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm0+PiBjcmVhdGVTVkdU
cmFuc2Zvcm1Gcm9tTWF0cml4KFNWR1Byb3BlcnR5VGVhck9mZjxTVkdNYXRyaXg+KiBtYXRyaXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFJlZlB0cjxTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJh
bnNmb3JtPj4gY3JlYXRlU1ZHVHJhbnNmb3JtRnJvbU1hdHJpeChTVkdQcm9wZXJ0eVRlYXJPZmY8
U1ZHTWF0cml4PiogbWF0cml4LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3ZhbHVlcyk7CiAgICAgICAgIGlmICghbWF0cml4KSB7CiAgICAgICAgICAgICBlYyA9
IFRZUEVfTUlTTUFUQ0hfRVJSOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU1ZHUHJvcGVydHlUZWFy
T2ZmPFNWR1RyYW5zZm9ybT46OmNyZWF0ZShtX3ZhbHVlcy0+Y3JlYXRlU1ZHVHJhbnNmb3JtRnJv
bU1hdHJpeChtYXRyaXgtPnByb3BlcnR5UmVmZXJlbmNlKCkpKTsKICAgICB9CiAKLSAgICBQYXNz
UmVmUHRyPFNWR1Byb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm0+PiBjb25zb2xpZGF0ZShFeGNl
cHRpb25Db2RlJiBlYykKKyAgICBSZWZQdHI8U1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9y
bT4+IGNvbnNvbGlkYXRlKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fdmFsdWVzKTsKICAgICAgICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAoIWNh
bkFsdGVyTGlzdChlYykpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgICAgIEFTU0VSVChtX3ZhbHVlcy0+c2l6ZSgpID09IG1fd3JhcHBl
cnMtPnNpemUoKSk7CiAKICAgICAgICAgLy8gU3BlYzogSWYgdGhlIGxpc3Qgd2FzIGVtcHR5LCB0
aGVuIGEgdmFsdWUgb2YgbnVsbCBpcyByZXR1cm5lZC4KICAgICAgICAgaWYgKG1fdmFsdWVzLT5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGRldGFjaExpc3RXcmFwcGVycygwKTsKICAgICAgICAgUmVmUHRyPFNW
R1Byb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm0+PiB3cmFwcGVyID0gU1ZHUHJvcGVydHlUZWFy
T2ZmPFNWR1RyYW5zZm9ybT46OmNyZWF0ZShtX3ZhbHVlcy0+Y29uc29saWRhdGUoKSk7CiAgICAg
ICAgIG1fd3JhcHBlcnMtPmFwcGVuZCh3cmFwcGVyKTsKIAogICAgICAgICBBU1NFUlQobV92YWx1
ZXMtPnNpemUoKSA9PSBtX3dyYXBwZXJzLT5zaXplKCkpOwotICAgICAgICByZXR1cm4gd3JhcHBl
ci5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248333</attachid>
            <date>2015-03-10 09:40:55 -0700</date>
            <delta_ts>2015-03-10 13:40:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142063-20150310094031.patch</filename>
            <type>text/plain</type>
            <size>53675</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAzLTA5ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIgZnJv
bSBzdmcvcHJvcGVydGllcyBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMDYzLgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgICogd3RmL1JlZi5oOgorICAgICAgICAoV1RGOjpzdGF0aWNfcmVmZXJl
bmNlX2Nhc3QpOiBBZGQgYSBzdGF0X2Nhc3QgZnVuY3Rpb24gdG8gUmVmPD4uCisKIDIwMTUtMDMt
MDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtF
RkxdIE1vdmUgRGlzcGF0Y2hRdWV1ZSB0byBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZi5oCShyZXZpc2lvbiAxODEyOTkpCisr
KyBTb3VyY2UvV1RGL3d0Zi9SZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDYgKzE0OCwxNiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVCiAgICAgcmV0dXJuIG9s
ZFJlZmVyZW5jZTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IFJlZjxUPiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3QoUmVmPFU+JiByZWZlcmVuY2UpCit7CisgICAg
cmV0dXJuIFJlZjxUPihzdGF0aWNfY2FzdDxUJj4ocmVmZXJlbmNlLmdldCgpKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBSZWY8VD4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0KGNvbnN0IFJlZjxVPiYgcmVmZXJlbmNlKQoreworICAgIHJldHVybiBSZWY8VD4o
c3RhdGljX2Nhc3Q8VCY+KHJlZmVyZW5jZS5jb3B5UmVmKCkuZ2V0KCkpKTsKK30KKwogdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2V0UHRySGVscGVyPFJlZjxUPj4gewogICAgIHR5cGVk
ZWYgVCogUHRyVHlwZTsKQEAgLTE2Niw1ICsxNzYsNiBAQCBpbmxpbmUgUmVmPFQ+IGFkb3B0UmVm
KFQmIHJlZmVyZW5jZSkKIAogdXNpbmcgV1RGOjpSZWY7CiB1c2luZyBXVEY6OmFkb3B0UmVmOwor
dXNpbmcgV1RGOjpzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q7CiAKICNlbmRpZiAvLyBXVEZfUmVmX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE1LTAzLTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFBh
c3NSZWZQdHIgZnJvbSBzdmcvcHJvcGVydGllcyBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMDYzLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorICAgICAgICAKKyAgICAgICAgUmVtb3ZlIFBhc3NSZWZQdHIgZnJv
bSBzdmcvcHJvcGVydGllcyBjbGFzc2VzLiBBbGwgdGhlIHJldHVybiB0eXBlcyBhbmQKKyAgICAg
ICAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzaG91bGQgYmUgUmVmUHRyLiBJZiB3ZSBhcmUgc3VyZSB0
aGUgcG9pbnRlciBjYW4ndAorICAgICAgICBiZSBudWxsLCB3ZSB1c2UgUmVmIGluc3RlYWQuCisK
KyAgICAgICAgKiBzdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNYXJrZXJFbGVtZW50Ojpsb29rdXBPckNyZWF0ZU9yaWVudFR5cGVXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6Om9yaWVudFR5cGVBbmltYXRlZCk6CisgICAg
ICAgICogc3ZnL1NWR01hcmtlckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRl
RFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhdGhTZWdMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50OjphbmltYXRlZFBhdGhTZWdMaXN0
KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHUG9s
eUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6Omxvb2t1cE9y
Q3JlYXRlUG9pbnRzV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2x5RWxlbWVudDo6
cG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BvbHlFbGVtZW50OjphbmltYXRlZFBvaW50
cyk6CisgICAgICAgICogc3ZnL1NWR1BvbHlFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50Ojp0ZXh0TGVuZ3RoQW5pbWF0ZWQpOgorICAgICAgICAq
IHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVmlld1NwZWMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6OnRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6dmlld0JveEFuaW1hdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1ZpZXdTcGVjOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3JlYXRlVmlld0JveFdyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RS
YXRpb1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3Jl
YXRlVHJhbnNmb3JtV3JhcHBlcik6CisgICAgICAgICogc3ZnL1NWR1ZpZXdTcGVjLmg6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9m
Zi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVh
ck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkTGlzdFByb3Bl
cnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRl
ZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVkUHJvcGVydHk6Omxvb2t1cE9yQ3JlYXRlV3JhcHBlcik6CisgICAgICAgICogc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eU1hY3Jvcy5oOgorICAgICAgICAqIHN2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKiBzdmcvcHJvcGVy
dGllcy9TVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAgICog
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJP
ZmY6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6OmluaXRpYWxpemVWYWx1ZXNBbmRX
cmFwcGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6OmdldEl0ZW1WYWx1
ZXNBbmRXcmFwcGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHk6Omluc2Vy
dEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaXN0
UHJvcGVydHk6OnJlcGxhY2VJdGVtVmFsdWVzQW5kV3JhcHBlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTGlzdFByb3BlcnR5OjpyZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTGlzdFByb3BlcnR5OjphcHBlbmRJdGVtVmFsdWVzQW5kV3JhcHBlcnMp
OgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHlUZWFyT2ZmOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmdldEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGlzdFByb3BlcnR5VGVhck9mZjo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZW1vdmVJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmFwcGVuZEl0ZW0pOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpnZXRJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpyZXBsYWNlSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6cmVt
b3ZlSXRlbSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0
eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRl
YXJPZmY6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9w
ZXJ0eVRlYXJPZmY6Omluc2VydEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIHN2Zy9wcm9w
ZXJ0aWVzL1NWR1Byb3BlcnR5SW5mby5oOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1N0
YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmYuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0YXRpY0xp
c3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZH
U3RhdGljUHJvcGVydHlUZWFyT2ZmLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdGF0aWNQcm9w
ZXJ0eVRlYXJPZmY6OmNyZWF0ZSk6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHVHJhbnNm
b3JtTGlzdFByb3BlcnR5VGVhck9mZi5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3Jt
TGlzdFByb3BlcnR5VGVhck9mZjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5z
Zm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY6OmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZjo6Y29uc29s
aWRhdGUpOgorCiAyMDE1LTAzLTA5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTc2OTc4KTogSW5saW5lLWJsb2NrcyB3aXRo
IG92ZXJmbG93aW5nIGNvbnRlbnRzIGhhdmUgYXNjZW50cyB0aGF0IGFyZSB0b28gbGFyZ2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MTI5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c3luY2hyb25p
emVPcmllbnQKICAgICBvd25lclR5cGUubV9vcmllbnRUeXBlLnN5bmNocm9uaXplKCZvd25lclR5
cGUsIG9yaWVudFR5cGVQcm9wZXJ0eUluZm8oKS0+YXR0cmlidXRlTmFtZSwgYXV0b1N0cmluZyk7
CiB9CiAKLVBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHTWFya2VyRWxlbWVudDo6
bG9va3VwT3JDcmVhdGVPcmllbnRUeXBlV3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdNYXJrZXJFbGVtZW50Ojpsb29rdXBPckNy
ZWF0ZU9yaWVudFR5cGVXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQogewogICAg
IEFTU0VSVChjb250ZXh0RWxlbWVudCk7CiAgICAgU1ZHTWFya2VyRWxlbWVudCYgb3duZXJUeXBl
ID0gZG93bmNhc3Q8U1ZHTWFya2VyRWxlbWVudD4oKmNvbnRleHRFbGVtZW50KTsKQEAgLTI1OCwx
MCArMjU4LDEwIEBAIFNWR01hcmtlck9yaWVudFR5cGUmIFNWR01hcmtlckVsZW1lbnQ6Om8KICAg
ICByZXR1cm4gbV9vcmllbnRUeXBlLnZhbHVlOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVk
RW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8U1ZHTWFya2VyT3JpZW50VHlwZT4+IFNWR01hcmtl
ckVsZW1lbnQ6Om9yaWVudFR5cGVBbmltYXRlZCgpCitSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
blByb3BlcnR5VGVhck9mZjxTVkdNYXJrZXJPcmllbnRUeXBlPj4gU1ZHTWFya2VyRWxlbWVudDo6
b3JpZW50VHlwZUFuaW1hdGVkKCkKIHsKICAgICBtX29yaWVudFR5cGUuc2hvdWxkU3luY2hyb25p
emUgPSB0cnVlOwotICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkRW51
bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8U1ZHTWFya2VyT3JpZW50VHlwZT4+KGxvb2t1cE9yQ3Jl
YXRlT3JpZW50VHlwZVdyYXBwZXIodGhpcykpOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZjxTVkdNYXJrZXJPcmll
bnRUeXBlPj4obG9va3VwT3JDcmVhdGVPcmllbnRUeXBlV3JhcHBlcih0aGlzKSk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNpb24gMTgxMjk5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU3LDExICsxNTcsMTEgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICAvLyBDdXN0b20g
J29yaWVudFR5cGUnIHByb3BlcnR5LgogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplT3JpZW50
VHlwZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVPcmllbnRUeXBlV3JhcHBlcihTVkdF
bGVtZW50KiBjb250ZXh0RWxlbWVudCk7CisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZFByb3Bl
cnR5PiBsb29rdXBPckNyZWF0ZU9yaWVudFR5cGVXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KTsKICAgICBTVkdNYXJrZXJPcmllbnRUeXBlJiBvcmllbnRUeXBlKCkgY29uc3Q7CiAg
ICAgU1ZHTWFya2VyT3JpZW50VHlwZSYgb3JpZW50VHlwZUJhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZW50VHlwZS52YWx1ZTsgfQogICAgIHZvaWQgc2V0T3JpZW50VHlwZUJhc2VWYWx1
ZShjb25zdCBTVkdNYXJrZXJPcmllbnRUeXBlJiB0eXBlKSB7IG1fb3JpZW50VHlwZS52YWx1ZSA9
IHR5cGU7IH0KLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRl
YXJPZmY8U1ZHTWFya2VyT3JpZW50VHlwZT4+IG9yaWVudFR5cGVBbmltYXRlZCgpOworICAgIFJl
ZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmPFNWR01hcmtlck9yaWVudFR5
cGU+PiBvcmllbnRUeXBlQW5pbWF0ZWQoKTsKIAogcHJpdmF0ZToKICAgICBtdXRhYmxlIFNWR1N5
bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdNYXJrZXJPcmllbnRUeXBlPiBtX29yaWVu
dFR5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE4MTI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMSwxMyArMzExLDEzIEBAIFNWR1BhdGhCeXRlU3RyZWFtKiBTVkdQYXRo
RWxlbWVudDo6cGF0aEIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZio+KHByb3BlcnR5KS0+YW5pbWF0ZWRQYXRoQnl0ZVN0cmVhbSgp
OwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVtZW50Ojps
b29rdXBPckNyZWF0ZURXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQorUmVmPFNW
R0FuaW1hdGVkUHJvcGVydHk+IFNWR1BhdGhFbGVtZW50Ojpsb29rdXBPckNyZWF0ZURXcmFwcGVy
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQogewogICAgIEFTU0VSVChjb250ZXh0RWxlbWVu
dCk7CiAgICAgU1ZHUGF0aEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25jYXN0PFNWR1BhdGhFbGVt
ZW50PigqY29udGV4dEVsZW1lbnQpOwogCiAgICAgaWYgKFNWR0FuaW1hdGVkUHJvcGVydHkqIHBy
b3BlcnR5ID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6bG9va3VwV3JhcHBlcjxTVkdQYXRoRWxlbWVu
dCwgU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4oJm93bmVyVHlwZSwgZFBy
b3BlcnR5SW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgICAgICByZXR1cm4g
KnByb3BlcnR5OwogCiAgICAgLy8gQnVpbGQgaW5pdGlhbCBTVkdQYXRoU2VnTGlzdC4KICAgICBi
dWlsZFNWR1BhdGhTZWdMaXN0RnJvbUJ5dGVTdHJlYW0ob3duZXJUeXBlLm1fcGF0aEJ5dGVTdHJl
YW0uZ2V0KCksICZvd25lclR5cGUsIG93bmVyVHlwZS5tX3BhdGhTZWdMaXN0LnZhbHVlLCBVbmFs
dGVyZWRQYXJzaW5nKTsKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50Ojpz
eW5jaHJvbml6ZUQoU1ZHRWxlCiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiogU1ZHUGF0
aEVsZW1lbnQ6OnBhdGhTZWdMaXN0KCkKIHsKICAgICBtX3BhdGhTZWdMaXN0LnNob3VsZFN5bmNo
cm9uaXplID0gdHJ1ZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3RQcm9w
ZXJ0eVRlYXJPZmYqPihzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmY+KGxvb2t1cE9yQ3JlYXRlRFdyYXBwZXIodGhpcykpLT5iYXNlVmFsKCkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZio+
KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmPihsb29rdXBPckNyZWF0ZURXcmFwcGVyKHRoaXMpKS0+YmFzZVZhbCgpKTsKIH0KIAogU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqIFNWR1BhdGhFbGVtZW50Ojpub3JtYWxpemVkUGF0
aFNlZ0xpc3QoKQpAQCAtMzUxLDcgKzM1MSw3IEBAIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmKiBTVkdQYXRoRWwKIHsKICAgICBtX3BhdGhTZWdMaXN0LnNob3VsZFN5bmNocm9uaXplID0g
dHJ1ZTsKICAgICBtX2lzQW5pbVZhbE9ic2VydmVkID0gdHJ1ZTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqPihzdGF0aWNfcG9pbnRlcl9jYXN0
PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KGxvb2t1cE9yQ3JlYXRlRFdy
YXBwZXIodGhpcykpLT5hbmltVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGlzdFByb3BlcnR5VGVhck9mZio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRl
ZFBhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmPihsb29rdXBPckNyZWF0ZURXcmFwcGVyKHRoaXMp
KS0+YW5pbVZhbCgpKTsKIH0KIAogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYqIFNWR1Bh
dGhFbGVtZW50OjphbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMTgxMjk5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBA
QCBwcml2YXRlOgogCiAgICAgLy8gQ3VzdG9tICdkJyBwcm9wZXJ0eQogICAgIHN0YXRpYyB2b2lk
IHN5bmNocm9uaXplRChTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVEV3JhcHBlcihTVkdF
bGVtZW50KiBjb250ZXh0RWxlbWVudCk7CisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZFByb3Bl
cnR5PiBsb29rdXBPckNyZWF0ZURXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsK
IAogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdQYXRoRWxlbWVudCkK
ICAgICAgICAgREVDTEFSRV9BTklNQVRFRF9OVU1CRVIoUGF0aExlbmd0aCwgcGF0aExlbmd0aCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTgxMjk5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgU1ZHUG9seUVsZW1lbnQ6OnN5bmNocm9uaXplUG9p
bnRzKFMKICAgICBvd25lclR5cGUubV9wb2ludHMuc3luY2hyb25pemUoJm93bmVyVHlwZSwgcG9p
bnRzUHJvcGVydHlJbmZvKCktPmF0dHJpYnV0ZU5hbWUsIG93bmVyVHlwZS5tX3BvaW50cy52YWx1
ZS52YWx1ZUFzU3RyaW5nKCkpOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+
IFNWR1BvbHlFbGVtZW50Ojpsb29rdXBPckNyZWF0ZVBvaW50c1dyYXBwZXIoU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQpCitSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHUG9seUVsZW1lbnQ6
Omxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcihTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkK
IHsKICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwogICAgIFNWR1BvbHlFbGVtZW50JiBvd25l
clR5cGUgPSBkb3duY2FzdDxTVkdQb2x5RWxlbWVudD4oKmNvbnRleHRFbGVtZW50KTsKQEAgLTE0
OCwxMyArMTQ4LDEzIEBAIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHUG9seUUK
IFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0PiogU1ZHUG9seUVsZW1lbnQ6OnBv
aW50cygpCiB7CiAgICAgbV9wb2ludHMuc2hvdWxkU3luY2hyb25pemUgPSB0cnVlOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qPihz
dGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUG9pbnRMaXN0Pihsb29rdXBPckNyZWF0ZVBv
aW50c1dyYXBwZXIodGhpcykpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4qPihzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8U1ZHQW5pbWF0ZWRQb2ludExpc3Q+KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcih0aGlz
KSktPmJhc2VWYWwoKSk7CiB9CiAKIFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0
PiogU1ZHUG9seUVsZW1lbnQ6OmFuaW1hdGVkUG9pbnRzKCkKIHsKICAgICBtX3BvaW50cy5zaG91
bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9w
ZXJ0eVRlYXJPZmY8U1ZHUG9pbnRMaXN0Pio+KHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHQW5pbWF0
ZWRQb2ludExpc3Q+KGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcih0aGlzKSktPmFuaW1WYWwo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9p
bnRMaXN0Pio+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxTVkdBbmltYXRlZFBvaW50TGlzdD4obG9v
a3VwT3JDcmVhdGVQb2ludHNXcmFwcGVyKHRoaXMpKS0+YW5pbVZhbCgpKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDE4MTI5OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDdXN0b20gJ3BvaW50cycgcHJvcGVydHkKICAg
ICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVBvaW50cyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JD
cmVhdGVQb2ludHNXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKKyAgICBzdGF0
aWMgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlUG9pbnRzV3JhcHBlcihT
VkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVE
X1BST1BFUlRJRVMoU1ZHUG9seUVsZW1lbnQpCiAgICAgICAgIERFQ0xBUkVfQU5JTUFURURfQk9P
TEVBTihFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLCBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE4MTI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpzeW5jaHJvbml6ZVQKICAgICBvd25lclR5cGUubV90ZXh0TGVuZ3RoLnN5
bmNocm9uaXplKCZvd25lclR5cGUsIHRleHRMZW5ndGhQcm9wZXJ0eUluZm8oKS0+YXR0cmlidXRl
TmFtZSwgdmFsdWUpOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6bG9va3VwT3JDcmVhdGVUZXh0TGVuZ3RoV3JhcHBlcihTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6Omxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIoU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKICAgICBTVkdU
ZXh0Q29udGVudEVsZW1lbnQmIG93bmVyVHlwZSA9IGRvd25jYXN0PFNWR1RleHRDb250ZW50RWxl
bWVudD4oKmNvbnRleHRFbGVtZW50KTsKQEAgLTg5LDE0ICs4OSwxNCBAQCBQYXNzUmVmUHRyPFNW
R0FuaW1hdGVkUHJvcGVydHk+IFNWR1RleHRDCiAgICAgICAgICgmb3duZXJUeXBlLCB0ZXh0TGVu
Z3RoUHJvcGVydHlJbmZvKCksIG93bmVyVHlwZS5tX3RleHRMZW5ndGgudmFsdWUpOwogfQogCi1Q
YXNzUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnRleHRM
ZW5ndGhBbmltYXRlZCgpCitSZWY8U1ZHQW5pbWF0ZWRMZW5ndGg+IFNWR1RleHRDb250ZW50RWxl
bWVudDo6dGV4dExlbmd0aEFuaW1hdGVkKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U1ZHTGVuZ3RoPiBkZWZhdWx0VGV4dExlbmd0aChMZW5ndGhNb2RlT3RoZXIpOwogICAgIGlmICht
X3NwZWNpZmllZFRleHRMZW5ndGggPT0gZGVmYXVsdFRleHRMZW5ndGgpCiAgICAgICAgIG1fdGV4
dExlbmd0aC52YWx1ZS5uZXdWYWx1ZVNwZWNpZmllZFVuaXRzKExlbmd0aFR5cGVOdW1iZXIsIGdl
dENvbXB1dGVkVGV4dExlbmd0aCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIAogICAgIG1fdGV4
dExlbmd0aC5zaG91bGRTeW5jaHJvbml6ZSA9IHRydWU7Ci0gICAgcmV0dXJuIHN0YXRpY19wb2lu
dGVyX2Nhc3Q8U1ZHQW5pbWF0ZWRMZW5ndGg+KGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBw
ZXIodGhpcykpOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRM
ZW5ndGg+KGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIodGhpcykpOwogCiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9u
IDE4MTI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGV4dExlbmd0
aCBpcyBub3QgZGVjbGFyZWQgdXNpbmcgdGhlIHN0YW5kYXJkIERFQ0xBUkVfQU5JTUFURURfTEVO
R1RIIG1hY3JvCiAgICAgLy8gYXMgaXRzIGdldHRlciBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIChy
ZXR1cm4gZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCksIGluc3RlYWQgb2YgbV90ZXh0TGVuZ3RoKS4K
ICAgICBTVkdMZW5ndGgmIHNwZWNpZmllZFRleHRMZW5ndGgoKSB7IHJldHVybiBtX3NwZWNpZmll
ZFRleHRMZW5ndGg7IH0KLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiB0ZXh0TGVu
Z3RoQW5pbWF0ZWQoKTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRMZW5ndGg+IHRleHRMZW5ndGhBbmlt
YXRlZCgpOwogICAgIHN0YXRpYyBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIHRleHRMZW5ndGhQcm9w
ZXJ0eUluZm8oKTsKIAogcHJvdGVjdGVkOgpAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBDdXN0b20gJ3RleHRMZW5ndGgnIHByb3BlcnR5CiAgICAgc3RhdGljIHZvaWQgc3lu
Y2hyb25pemVUZXh0TGVuZ3RoKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZVRleHRMZW5n
dGhXcmFwcGVyKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKKyAgICBzdGF0aWMgUmVmPFNW
R0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlVGV4dExlbmd0aFdyYXBwZXIoU1ZHRWxl
bWVudCogY29udGV4dEVsZW1lbnQpOwogICAgIG11dGFibGUgU1ZHU3luY2hyb25pemFibGVBbmlt
YXRlZFByb3BlcnR5PFNWR0xlbmd0aD4gbV90ZXh0TGVuZ3RoOwogICAgIFNWR0xlbmd0aCBtX3Nw
ZWNpZmllZFRleHRMZW5ndGg7CiAgIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdT
cGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3Bw
CShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNDAgKzE0OCw0MCBAQCBTVkdFbGVtZW50KiBTVkdWaWV3
U3BlYzo6dmlld1RhcmdldCgpIGNvCiBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKiBT
VkdWaWV3U3BlYzo6dHJhbnNmb3JtKCkKIHsKICAgICBpZiAoIW1fY29udGV4dEVsZW1lbnQpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBSZXR1cm4g
dGhlIGFuaW1WYWwgaGVyZSwgYXMgaXRzIHJlYWRvbmx5IGJ5IGRlZmF1bHQgLSB3aGljaCBpcyBl
eGFjdGx5IHdoYXQgd2Ugd2FudCBoZXJlLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdUcmFu
c2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKj4oc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3Q+KGxvb2t1cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBlcih0aGlzKSktPmFu
aW1WYWwoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmYqPihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
Pihsb29rdXBPckNyZWF0ZVRyYW5zZm9ybVdyYXBwZXIodGhpcykpLT5hbmltVmFsKCkpOwogfQog
Ci1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUmVjdD4gU1ZHVmlld1NwZWM6OnZpZXdCb3hBbmltYXRl
ZCgpCitSZWZQdHI8U1ZHQW5pbWF0ZWRSZWN0PiBTVkdWaWV3U3BlYzo6dmlld0JveEFuaW1hdGVk
KCkKIHsKICAgICBpZiAoIW1fY29udGV4dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0FuaW1hdGVkUmVjdD4obG9va3VwT3JDcmVh
dGVWaWV3Qm94V3JhcHBlcih0aGlzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8U1ZHQW5pbWF0ZWRSZWN0Pihsb29rdXBPckNyZWF0
ZVZpZXdCb3hXcmFwcGVyKHRoaXMpKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW8+IFNWR1ZpZXdTcGVjOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0ZWQo
KQorUmVmUHRyPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gU1ZHVmlld1NwZWM6OnBy
ZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRlZCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRFbGVtZW50
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdB
bmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KGxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RS
YXRpb1dyYXBwZXIodGhpcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4obG9v
a3VwT3JDcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvV3JhcHBlcih0aGlzKSk7CiB9CiAKLVBhc3NS
ZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gU1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3JlYXRlVmll
d0JveFdyYXBwZXIoU1ZHVmlld1NwZWMqIG93bmVyVHlwZSkKK1JlZjxTVkdBbmltYXRlZFByb3Bl
cnR5PiBTVkdWaWV3U3BlYzo6bG9va3VwT3JDcmVhdGVWaWV3Qm94V3JhcHBlcihTVkdWaWV3U3Bl
Yyogb3duZXJUeXBlKQogewogICAgIEFTU0VSVChvd25lclR5cGUpOwogICAgIEFTU0VSVChvd25l
clR5cGUtPmNvbnRleHRFbGVtZW50KCkpOwogICAgIHJldHVybiBTVkdBbmltYXRlZFByb3BlcnR5
Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRSZWN0LCBGbG9h
dFJlY3Q+KG93bmVyVHlwZS0+Y29udGV4dEVsZW1lbnQoKSwgdmlld0JveFByb3BlcnR5SW5mbygp
LCBvd25lclR5cGUtPm1fdmlld0JveCk7CiB9CiAKLVBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eT4gU1ZHVmlld1NwZWM6Omxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpb1dyYXBw
ZXIoU1ZHVmlld1NwZWMqIG93bmVyVHlwZSkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdW
aWV3U3BlYzo6bG9va3VwT3JDcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvV3JhcHBlcihTVkdWaWV3
U3BlYyogb3duZXJUeXBlKQogewogICAgIEFTU0VSVChvd25lclR5cGUpOwogICAgIEFTU0VSVChv
d25lclR5cGUtPmNvbnRleHRFbGVtZW50KCkpOwogICAgIHJldHVybiBTVkdBbmltYXRlZFByb3Bl
cnR5Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXI8U1ZHRWxlbWVudCwgU1ZHQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvLCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPihvd25lclR5cGUtPmNvbnRleHRF
bGVtZW50KCksIHByZXNlcnZlQXNwZWN0UmF0aW9Qcm9wZXJ0eUluZm8oKSwgb3duZXJUeXBlLT5t
X3ByZXNlcnZlQXNwZWN0UmF0aW8pOwogfQogCi1QYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVy
dHk+IFNWR1ZpZXdTcGVjOjpsb29rdXBPckNyZWF0ZVRyYW5zZm9ybVdyYXBwZXIoU1ZHVmlld1Nw
ZWMqIG93bmVyVHlwZSkKK1JlZjxTVkdBbmltYXRlZFByb3BlcnR5PiBTVkdWaWV3U3BlYzo6bG9v
a3VwT3JDcmVhdGVUcmFuc2Zvcm1XcmFwcGVyKFNWR1ZpZXdTcGVjKiBvd25lclR5cGUpCiB7CiAg
ICAgQVNTRVJUKG93bmVyVHlwZSk7CiAgICAgQVNTRVJUKG93bmVyVHlwZS0+Y29udGV4dEVsZW1l
bnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuaAkocmV2aXNpb24gMTgxMjk5KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmgJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDEzICs3MiwxMyBAQCBwdWJsaWM6CiAgICAgU1ZHVHJhbnNmb3JtTGlzdCB0cmFuc2Zvcm1CYXNl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCiAgICAgLy8gQ3VzdG9tIGFu
aW1hdGVkICd2aWV3Qm94JyBwcm9wZXJ0eS4KLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkUmVj
dD4gdmlld0JveEFuaW1hdGVkKCk7CisgICAgUmVmUHRyPFNWR0FuaW1hdGVkUmVjdD4gdmlld0Jv
eEFuaW1hdGVkKCk7CiAgICAgRmxvYXRSZWN0JiB2aWV3Qm94KCkgeyByZXR1cm4gbV92aWV3Qm94
OyB9CiAgICAgRmxvYXRSZWN0IHZpZXdCb3hCYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXdCb3g7IH0KICAgICB2b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUoY29uc3QgRmxvYXRSZWN0JiB2
aWV3Qm94KSB7IG1fdmlld0JveCA9IHZpZXdCb3g7IH0KIAogICAgIC8vIEN1c3RvbSBhbmltYXRl
ZCAncHJlc2VydmVBc3BlY3RSYXRpbycgcHJvcGVydHkuCi0gICAgUGFzc1JlZlB0cjxTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IHByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRlZCgpOwor
ICAgIFJlZlB0cjxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IHByZXNlcnZlQXNwZWN0
UmF0aW9BbmltYXRlZCgpOwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNw
ZWN0UmF0aW8oKSB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KICAgICBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KICAgICB2b2lkIHNldFByZXNlcnZlQXNwZWN0
UmF0aW9CYXNlVmFsdWUoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3Bl
Y3RSYXRpbykgeyBtX3ByZXNlcnZlQXNwZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOyB9
CkBAIC05NCw5ICs5NCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmlld0JveElkZW50aWZpZXIoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvSWRlbnRpZmllcigpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVUcmFuc2Zvcm1XcmFwcGVyKFNWR1Zp
ZXdTcGVjKiBjb250ZXh0RWxlbWVudCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0
ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVWaWV3Qm94V3JhcHBlcihTVkdWaWV3U3BlYyogY29u
dGV4dEVsZW1lbnQpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+
IGxvb2t1cE9yQ3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpb1dyYXBwZXIoU1ZHVmlld1NwZWMqIGNv
bnRleHRFbGVtZW50KTsKKyAgICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1
cE9yQ3JlYXRlVHJhbnNmb3JtV3JhcHBlcihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOwor
ICAgIHN0YXRpYyBSZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVWaWV3Qm94
V3JhcHBlcihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOworICAgIHN0YXRpYyBSZWY8U1ZH
QW5pbWF0ZWRQcm9wZXJ0eT4gbG9va3VwT3JDcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvV3JhcHBl
cihTVkdWaWV3U3BlYyogY29udGV4dEVsZW1lbnQpOwogCiAgICAgU1ZHRWxlbWVudCogbV9jb250
ZXh0RWxlbWVudDsKICAgICBTVkdab29tQW5kUGFuVHlwZSBtX3pvb21BbmRQYW47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVy
dHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lvbiAxODEyOTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZEVudW1lcmF0aW9u
UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmPHVuc2lnbmVkPjo6
c2V0QmFzZVZhbChwcm9wZXJ0eSwgZWMpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJPZmY8RW51bVR5cGU+PiBjcmVhdGUo
U1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBFbnVtVHlw
ZSYgcHJvcGVydHkpCisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVy
dHlUZWFyT2ZmPEVudW1UeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBh
bmltYXRlZFByb3BlcnR5VHlwZSwgRW51bVR5cGUmIHByb3BlcnR5KQogICAgIHsKICAgICAgICAg
QVNTRVJUKGNvbnRleHRFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdB
bmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmPEVudW1UeXBlPihjb250ZXh0RWxlbWVu
dCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQmPihwcm9wZXJ0eSkpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZjxFbnVtVHlwZT4oY29udGV4dEVsZW1l
bnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkJj4ocHJvcGVydHkpKSk7CiAgICAgfQogCiAgICAgRW51bVR5cGUmIGN1cnJlbnRB
bmltYXRlZFZhbHVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lv
biAxODEyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZExp
c3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDEwICsxNTMsMTAgQEAg
cHVibGljOgogICAgICAgICBzeW5jaHJvbml6ZVdyYXBwZXJzSWZOZWVkZWQoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8UHJv
cGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFBy
b3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiB2YWx1ZXMpCisgICAgc3RhdGljIFJlZjxTVkdBbmlt
YXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmlt
YXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBlJiB2YWx1
ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5
cGU+KGNvbnRleHRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwg
dmFsdWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkTGlzdFBy
b3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+KGNvbnRleHRFbGVtZW50LCBhdHRyaWJ1dGVOYW1l
LCBhbmltYXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBhdGhTZWdMaXN0
UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5oCShyZXZpc2lvbiAx
ODEyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFBhdGhT
ZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEwICs1OSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFy
T2ZmKj4obV9iYXNlVmFsLmdldCgpKS0+cmVtb3ZlSXRlbUZyb21MaXN0KGl0ZW1JbmRleCwgc2hv
dWxkU3luY2hyb25pemVXcmFwcGVycyk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4gY3JlYXRlKFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBBbmlt
YXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgU1ZHUGF0aFNlZ0xpc3QmIHZh
bHVlcykKKyAgICBzdGF0aWMgUmVmPFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJP
ZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgYW5pbWF0ZWRQcm9wZXJ0eVR5
cGUsIFNWR1BhdGhTZWdMaXN0JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBBU1NFUlQoY29udGV4
dEVsZW1lbnQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0FuaW1hdGVkUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYoY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1h
dGVkUHJvcGVydHlUeXBlLCB2YWx1ZXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZihjb250ZXh0RWxlbWVudCwgYXR0
cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHZhbHVlcykpOwogICAgIH0KIAogICAg
IHVzaW5nIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxTVkdQYXRoU2VnTGlzdD46OmFu
aW1hdGlvblN0YXJ0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRlZFByb3BlcnR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oCShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDE4ICs0OCwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1ZHQW5pbWF0ZWRQ
cm9wZXJ0eSgpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3duZXJUeXBlLCB0eXBlbmFtZSBU
ZWFyT2ZmVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlUeXBlPgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRlYXJPZmZUeXBlPiBsb29rdXBPckNyZWF0ZVdyYXBwZXIoT3duZXJUeXBlKiBlbGVtZW50LCBj
b25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8sIFByb3BlcnR5VHlwZSYgcHJvcGVydHkpCisgICAg
c3RhdGljIFRlYXJPZmZUeXBlJiBsb29rdXBPckNyZWF0ZVdyYXBwZXIoT3duZXJUeXBlKiBlbGVt
ZW50LCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8sIFByb3BlcnR5VHlwZSYgcHJvcGVydHkp
CiAgICAgewogICAgICAgICBBU1NFUlQoaW5mbyk7CiAgICAgICAgIFNWR0FuaW1hdGVkUHJvcGVy
dHlEZXNjcmlwdGlvbiBrZXkoZWxlbWVudCwgaW5mby0+cHJvcGVydHlJZGVudGlmaWVyKTsKLSAg
ICAgICAgUmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+IHdyYXBwZXIgPSBhbmltYXRlZFByb3Bl
cnR5Q2FjaGUoKS0+Z2V0KGtleSk7Ci0gICAgICAgIGlmICghd3JhcHBlcikgewotICAgICAgICAg
ICAgd3JhcHBlciA9IFRlYXJPZmZUeXBlOjpjcmVhdGUoZWxlbWVudCwgaW5mby0+YXR0cmlidXRl
TmFtZSwgaW5mby0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIHByb3BlcnR5KTsKKyAgICAgICAgYXV0
byYgc2xvdCA9IGFuaW1hdGVkUHJvcGVydHlDYWNoZSgpLT5hZGQoa2V5LCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIGlmICghc2xvdCkgeworICAgICAgICAgICAgUmVmPFNWR0Fu
aW1hdGVkUHJvcGVydHk+IHdyYXBwZXIgPSBUZWFyT2ZmVHlwZTo6Y3JlYXRlKGVsZW1lbnQsIGlu
Zm8tPmF0dHJpYnV0ZU5hbWUsIGluZm8tPmFuaW1hdGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSk7
CiAgICAgICAgICAgICBpZiAoaW5mby0+YW5pbWF0ZWRQcm9wZXJ0eVN0YXRlID09IFByb3BlcnR5
SXNSZWFkT25seSkKICAgICAgICAgICAgICAgICB3cmFwcGVyLT5zZXRJc1JlYWRPbmx5KCk7Ci0g
ICAgICAgICAgICBhbmltYXRlZFByb3BlcnR5Q2FjaGUoKS0+c2V0KGtleSwgd3JhcHBlci5nZXQo
KSk7CisgICAgICAgICAgICBzbG90ID0gJndyYXBwZXIubGVha1JlZigpOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PFRlYXJPZmZUeXBlPih3cmFwcGVyKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlYXJPZmZUeXBlJj4oKnNsb3QpOwogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE93bmVyVHlwZSwgdHlwZW5hbWUgVGVhck9mZlR5cGU+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
TWFjcm9zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eU1hY3Jvcy5oCShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMiwxMCArMTMyLDEwIEBAIHB1YmxpYzogXAogICAgICAgICBtXyMjTG93ZXJQ
cm9wZXJ0eS5pc1ZhbGlkID0gdmFsaWRWYWx1ZTsgXAogICAgIH0gXAogXAotICAgIFBhc3NSZWZQ
dHI8VGVhck9mZlR5cGU+IExvd2VyUHJvcGVydHkjI0FuaW1hdGVkKCkgXAorICAgIFJlZjxUZWFy
T2ZmVHlwZT4gTG93ZXJQcm9wZXJ0eSMjQW5pbWF0ZWQoKSBcCiAgICAgeyBcCiAgICAgICAgIG1f
IyNMb3dlclByb3BlcnR5LnNob3VsZFN5bmNocm9uaXplID0gdHJ1ZTsgXAotICAgICAgICByZXR1
cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxUZWFyT2ZmVHlwZT4obG9va3VwT3JDcmVhdGUjI1VwcGVy
UHJvcGVydHkjI1dyYXBwZXIodGhpcykpOyBcCisgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8VGVhck9mZlR5cGU+KGxvb2t1cE9yQ3JlYXRlIyNVcHBlclByb3BlcnR5IyNXcmFw
cGVyKHRoaXMpKTsgXAogICAgIH0gXAogXAogICAgIGJvb2wgTG93ZXJQcm9wZXJ0eSMjSXNWYWxp
ZCgpIGNvbnN0IFwKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOiBcCiAgICAgICAgIG1fIyNM
b3dlclByb3BlcnR5LnN5bmNocm9uaXplKHRoaXMsIExvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5m
bygpLT5hdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7IFwKICAgICB9IFwKIFwKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiBsb29rdXBPckNyZWF0ZSMjVXBwZXJQcm9wZXJ0
eSMjV3JhcHBlcihTVkdFbGVtZW50KiBtYXNrZWRPd25lclR5cGUpIFwKKyAgICBzdGF0aWMgUmVm
PFNWR0FuaW1hdGVkUHJvcGVydHk+IGxvb2t1cE9yQ3JlYXRlIyNVcHBlclByb3BlcnR5IyNXcmFw
cGVyKFNWR0VsZW1lbnQqIG1hc2tlZE93bmVyVHlwZSkgXAogICAgIHsgXAogICAgICAgICBBU1NF
UlQobWFza2VkT3duZXJUeXBlKTsgXAogICAgICAgICBVc2VPd25lclR5cGUqIG93bmVyVHlwZSA9
IHN0YXRpY19jYXN0PFVzZU93bmVyVHlwZSo+KG1hc2tlZE93bmVyVHlwZSk7IFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVRlYXJPZmYuaAkocmV2aXNpb24gMTgxMjk5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMTAgKzU3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYW5pbVZhbC5nZXQo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5VGVh
ck9mZjxQcm9wZXJ0eVR5cGU+PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFu
aW1hdGVkUHJvcGVydHlUeXBlLCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQorICAgIHN0YXRpYyBS
ZWY8U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0Vs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1l
LCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVydHlUeXBl
JiBwcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8UHJvcGVy
dHlUeXBlPihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0eVR5
cGUsIHByb3BlcnR5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVk
UHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4oY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5h
bWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSkpOwogICAgIH0KIAogICAgIFByb3Bl
cnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFN0YXRpY1Byb3Bl
cnR5VGVhck9mZi5oCShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMCArNDgsMTAgQEAgcHVibGljOgogICAgICAgICBjb21taXRDaGFuZ2UoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFN0YXRpY1Byb3BlcnR5VGVh
ck9mZjxQcm9wZXJ0eVR5cGU+PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFu
aW1hdGVkUHJvcGVydHlUeXBlLCBQcm9wZXJ0eVR5cGUmIHByb3BlcnR5KQorICAgIHN0YXRpYyBS
ZWY8U1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRl
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBBbmltYXRlZFByb3BlcnR5VHlwZSBhbmltYXRlZFByb3BlcnR5VHlwZSwgUHJvcGVy
dHlUeXBlJiBwcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5pbWF0ZWRTdGF0aWNQcm9wZXJ0eVRl
YXJPZmY8UHJvcGVydHlUeXBlPihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0
ZWRQcm9wZXJ0eVR5cGUsIHByb3BlcnR5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNWR0FuaW1hdGVkU3RhdGljUHJvcGVydHlUZWFyT2ZmPFByb3BlcnR5VHlwZT4oY29udGV4dEVs
ZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIGFuaW1hdGVkUHJvcGVydHlUeXBlLCBwcm9wZXJ0eSkpOwog
ICAgIH0KIAogICAgIFByb3BlcnR5VHlwZSYgY3VycmVudEFuaW1hdGVkVmFsdWUoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJv
cGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4
MTI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdFByb3BlcnR5VGVhck9mZi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsMTAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTGlzdFByb3BlcnR5VGVh
ck9mZjxTVkdUcmFuc2Zvcm1MaXN0Pio+KG1fYW5pbVZhbC5nZXQoKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2Zm
PiBjcmVhdGUoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUsIEFuaW1hdGVkUHJvcGVydHlUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBl
LCBTVkdUcmFuc2Zvcm1MaXN0JiB2YWx1ZXMpCisgICAgc3RhdGljIFJlZjxTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmY+IGNyZWF0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxl
bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgQW5pbWF0ZWRQcm9wZXJ0
eVR5cGUgYW5pbWF0ZWRQcm9wZXJ0eVR5cGUsIFNWR1RyYW5zZm9ybUxpc3QmIHZhbHVlcykKICAg
ICB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmKGNvbnRleHRF
bGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBhbmltYXRlZFByb3BlcnR5VHlwZSwgdmFsdWVzKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3Bl
cnR5VGVhck9mZihjb250ZXh0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgYW5pbWF0ZWRQcm9wZXJ0
eVR5cGUsIHZhbHVlcykpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCShyZXZpc2lvbiAxODEyOTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVydHkuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIHR5cGVu
YW1lIFNWR1Byb3BlcnR5VHJhaXRzPFByb3BlcnR5VHlwZT46Okxpc3RJdGVtVHlwZSBMaXN0SXRl
bVR5cGU7CiAgICAgdHlwZWRlZiBTVkdQcm9wZXJ0eVRlYXJPZmY8TGlzdEl0ZW1UeXBlPiBMaXN0
SXRlbVRlYXJPZmY7Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gUGFz
c0xpc3RJdGVtVGVhck9mZjsKKyAgICB0eXBlZGVmIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IFB0
ckxpc3RJdGVtVGVhck9mZjsKICAgICB0eXBlZGVmIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVh
ck9mZjxQcm9wZXJ0eVR5cGU+IEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjsKICAgICB0eXBl
ZGVmIHR5cGVuYW1lIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+
OjpMaXN0V3JhcHBlckNhY2hlIExpc3RXcmFwcGVyQ2FjaGU7CiAKQEAgLTEzOCwxOSArMTM4LDE4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCi0gICAgUGFzc0xp
c3RJdGVtVGVhck9mZiBpbml0aWFsaXplVmFsdWVzQW5kV3JhcHBlcnMoUGFzc0xpc3RJdGVtVGVh
ck9mZiBwYXNzTmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFy
T2ZmIGluaXRpYWxpemVWYWx1ZXNBbmRXcmFwcGVycyhQdHJMaXN0SXRlbVRlYXJPZmYgbmV3SXRl
bSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7
CiAgICAgICAgIGlmICghY2FuQWx0ZXJMaXN0KGVjKSkKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgLy8gTm90IHNwZWNpZmllZCwg
YnV0IEZGL09wZXJhIGRvIGl0IHRoaXMgd2F5LCBhbmQgaXQncyBqdXN0IHNhbmUuCi0gICAgICAg
IGlmICghcGFzc05ld0l0ZW0pIHsKKyAgICAgICAgaWYgKCFuZXdJdGVtKSB7CiAgICAgICAgICAg
ICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX1dST05HX1RZUEVfRVJSOwotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKICAgICAgICAg
QVNTRVJUKG1fdmFsdWVzLT5zaXplKCkgPT0gbV93cmFwcGVycy0+c2l6ZSgpKTsKIAogICAgICAg
ICAvLyBTcGVjOiBJZiB0aGUgaW5zZXJ0ZWQgaXRlbSBpcyBhbHJlYWR5IGluIGEgbGlzdCwgaXQg
aXMgcmVtb3ZlZCBmcm9tIGl0cyBwcmV2aW91cyBsaXN0IGJlZm9yZSBpdCBpcyBpbnNlcnRlZCBp
bnRvIHRoaXMgbGlzdC4KQEAgLTE2NCw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fd3Jh
cHBlcnMtPmFwcGVuZChuZXdJdGVtKTsKIAogICAgICAgICBjb21taXRDaGFuZ2UoKTsKLSAgICAg
ICAgcmV0dXJuIG5ld0l0ZW0ucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gbmV3SXRlbTsKICAg
ICB9CiAKICAgICAvLyBTVkdMaXN0OjpnZXRJdGVtKCkKQEAgLTE4NywxMSArMTg2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzLT5hdChpbmRleCk7CiAgICAgfQogCi0gICAg
UGFzc0xpc3RJdGVtVGVhck9mZiBnZXRJdGVtVmFsdWVzQW5kV3JhcHBlcnMoQW5pbWF0ZWRMaXN0
UHJvcGVydHlUZWFyT2ZmKiBhbmltYXRlZExpc3QsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgZ2V0SXRlbVZhbHVlc0FuZFdyYXBwZXJz
KEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRMaXN0LCB1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV93cmFwcGVycyk7
CiAgICAgICAgIGlmICghY2FuR2V0SXRlbShpbmRleCwgZWMpKQotICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBTcGVjOiBSZXR1
cm5zIHRoZSBzcGVjaWZpZWQgaXRlbSBmcm9tIHRoZSBsaXN0LiBUaGUgcmV0dXJuZWQgaXRlbSBp
cyB0aGUgaXRlbSBpdHNlbGYgYW5kIG5vdCBhIGNvcHkuCiAgICAgICAgIC8vIEFueSBjaGFuZ2Vz
IG1hZGUgdG8gdGhlIGl0ZW0gYXJlIGltbWVkaWF0ZWx5IHJlZmxlY3RlZCBpbiB0aGUgbGlzdC4K
QEAgLTIzMiwyMyArMjMxLDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAg
ICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiBpbnNlcnRJdGVtQmVmb3JlVmFsdWVzQW5k
V3JhcHBlcnMoUGFzc0xpc3RJdGVtVGVhck9mZiBwYXNzTmV3SXRlbSwgdW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVGVhck9mZiBpbnNlcnRJdGVtQmVm
b3JlVmFsdWVzQW5kV3JhcHBlcnMoUHRyTGlzdEl0ZW1UZWFyT2ZmIG5ld0l0ZW0sIHVuc2lnbmVk
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3dyYXBw
ZXJzKTsKICAgICAgICAgaWYgKCFjYW5BbHRlckxpc3QoZWMpKQotICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBOb3Qgc3BlY2lm
aWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4KLSAg
ICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKICAgICAg
ICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gU3BlYzogSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBu
dW1iZXJPZkl0ZW1zLCB0aGVuIHRoZSBuZXcgaXRlbSBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9m
IHRoZSBsaXN0LgogICAgICAgICBpZiAoaW5kZXggPiBtX3ZhbHVlcy0+c2l6ZSgpKQogICAgICAg
ICAgICAgIGluZGV4ID0gbV92YWx1ZXMtPnNpemUoKTsKIAotICAgICAgICBSZWZQdHI8TGlzdEl0
ZW1UZWFyT2ZmPiBuZXdJdGVtID0gcGFzc05ld0l0ZW07CiAgICAgICAgIEFTU0VSVChtX3ZhbHVl
cy0+c2l6ZSgpID09IG1fd3JhcHBlcnMtPnNpemUoKSk7CiAKICAgICAgICAgLy8gU3BlYzogSWYg
bmV3SXRlbSBpcyBhbHJlYWR5IGluIGEgbGlzdCwgaXQgaXMgcmVtb3ZlZCBmcm9tIGl0cyBwcmV2
aW91cyBsaXN0IGJlZm9yZSBpdCBpcyBpbnNlcnRlZCBpbnRvIHRoaXMgbGlzdC4KQEAgLTI2Myw3
ICsyNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fd3JhcHBlcnMtPmluc2VydChpbmRleCwgbmV3
SXRlbSk7CiAKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBuZXdJdGVt
LnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCiAgICAgLy8gU1ZH
TGlzdDo6cmVwbGFjZUl0ZW0oKQpAQCAtMzA1LDMxICszMDMsMzAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbmV3SXRlbTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIHJlcGxh
Y2VJdGVtVmFsdWVzQW5kV3JhcHBlcnMoUGFzc0xpc3RJdGVtVGVhck9mZiBwYXNzTmV3SXRlbSwg
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVGVhck9m
ZiByZXBsYWNlSXRlbVZhbHVlc0FuZFdyYXBwZXJzKFB0ckxpc3RJdGVtVGVhck9mZiBuZXdJdGVt
LCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NF
UlQobV93cmFwcGVycyk7CiAgICAgICAgIGlmICghY2FuUmVwbGFjZUl0ZW0oaW5kZXgsIGVjKSkK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAgICAgLy8gTm90IHNwZWNpZmllZCwgYnV0IEZGL09wZXJhIGRvIGl0IHRoaXMgd2F5LCBhbmQg
aXQncyBqdXN0IHNhbmUuCi0gICAgICAgIGlmICghcGFzc05ld0l0ZW0pIHsKKyAgICAgICAgaWYg
KCFuZXdJdGVtKSB7CiAgICAgICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZHX1dST05HX1RZ
UEVfRVJSOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChtX3ZhbHVlcy0+c2l6ZSgpID09IG1fd3Jh
cHBlcnMtPnNpemUoKSk7Ci0gICAgICAgIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IG5ld0l0ZW0g
PSBwYXNzTmV3SXRlbTsKIAogICAgICAgICAvLyBTcGVjOiBJZiBuZXdJdGVtIGlzIGFscmVhZHkg
aW4gYSBsaXN0LCBpdCBpcyByZW1vdmVkIGZyb20gaXRzIHByZXZpb3VzIGxpc3QgYmVmb3JlIGl0
IGlzIGluc2VydGVkIGludG8gdGhpcyBsaXN0LgogICAgICAgICAvLyBTcGVjOiBJZiB0aGUgaXRl
bSBpcyBhbHJlYWR5IGluIHRoaXMgbGlzdCwgbm90ZSB0aGF0IHRoZSBpbmRleCBvZiB0aGUgaXRl
bSB0byByZXBsYWNlIGlzIGJlZm9yZSB0aGUgcmVtb3ZhbCBvZiB0aGUgaXRlbS4KICAgICAgICAg
aWYgKCFwcm9jZXNzSW5jb21pbmdMaXN0SXRlbVdyYXBwZXIobmV3SXRlbSwgJmluZGV4KSkKLSAg
ICAgICAgICAgIHJldHVybiBuZXdJdGVtLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBu
ZXdJdGVtOwogCiAgICAgICAgIGlmIChtX3ZhbHVlcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBBU1NFUlQobV93cmFwcGVycy0+aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIC8vICdwYXNzTmV3
SXRlbScgYWxyZWFkeSBsaXZlZCBpbiBvdXIgbGlzdCwgd2UgcmVtb3ZlZCBpdCwgYW5kIG5vdyB3
ZSdyZSBlbXB0eSwgd2hpY2ggbWVhbnMgdGhlcmUncyBub3RoaW5nIHRvIHJlcGxhY2UuCisgICAg
ICAgICAgICAvLyAnbmV3SXRlbScgYWxyZWFkeSBsaXZlZCBpbiBvdXIgbGlzdCwgd2UgcmVtb3Zl
ZCBpdCwgYW5kIG5vdyB3ZSdyZSBlbXB0eSwgd2hpY2ggbWVhbnMgdGhlcmUncyBub3RoaW5nIHRv
IHJlcGxhY2UuCiAgICAgICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIERldGFjaCB0aGUgZXhpc3Rpbmcgd3JhcHBlci4KQEAgLTM0Miw3ICszMzksNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fd3JhcHBlcnMtPmF0KGluZGV4KSA9IG5ld0l0ZW07CiAKICAgICAg
ICAgY29tbWl0Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybiBuZXdJdGVtLnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIG5ld0l0ZW07CiAgICAgfQogCiAgICAgLy8gU1ZHTGlzdDo6cmVtb3ZlSXRl
bSgpCkBAIC0zNzEsMTEgKzM2OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBvbGRJdGVt
OwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJPZmYgcmVtb3ZlSXRlbVZhbHVlc0FuZFdy
YXBwZXJzKEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRMaXN0LCB1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1UZWFyT2ZmIHJlbW92
ZUl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYqIGFuaW1h
dGVkTGlzdCwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fd3JhcHBlcnMpOwogICAgICAgICBpZiAoIWNhblJlbW92ZUl0ZW0oaW5kZXgs
IGVjKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzLT5zaXplKCkgPT0gbV93cmFwcGVycy0+c2l6ZSgp
KTsKIApAQCAtNDA4LDE5ICs0MDUsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbmV3SXRl
bTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIGFwcGVuZEl0ZW1WYWx1ZXNBbmRX
cmFwcGVycyhQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBhc3NOZXdJdGVtLCBFeGNlcHRpb25Db2RlJiBl
YykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgYXBwZW5kSXRlbVZhbHVlc0FuZFdyYXBwZXJzKFB0
ckxpc3RJdGVtVGVhck9mZiBuZXdJdGVtLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3dyYXBwZXJzKTsKICAgICAgICAgaWYgKCFjYW5BbHRlckxpc3QoZWMpKQot
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
ICAgICAvLyBOb3Qgc3BlY2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBp
dCdzIGp1c3Qgc2FuZS4KLSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAo
IW5ld0l0ZW0pIHsKICAgICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQ
RV9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gbmV3SXRlbSA9
IHBhc3NOZXdJdGVtOwogICAgICAgICBBU1NFUlQobV92YWx1ZXMtPnNpemUoKSA9PSBtX3dyYXBw
ZXJzLT5zaXplKCkpOwogCiAgICAgICAgIC8vIFNwZWM6IElmIG5ld0l0ZW0gaXMgYWxyZWFkeSBp
biBhIGxpc3QsIGl0IGlzIHJlbW92ZWQgZnJvbSBpdHMgcHJldmlvdXMgbGlzdCBiZWZvcmUgaXQg
aXMgaW5zZXJ0ZWQgaW50byB0aGlzIGxpc3QuCkBAIC00MzEsNyArNDI3LDcgQEAgcHVibGljOgog
ICAgICAgICBtX3dyYXBwZXJzLT5hcHBlbmQobmV3SXRlbSk7CiAKICAgICAgICAgY29tbWl0Q2hh
bmdlKExpc3RNb2RpZmljYXRpb25BcHBlbmQpOwotICAgICAgICByZXR1cm4gbmV3SXRlbS5yZWxl
YXNlKCk7CisgICAgICAgIHJldHVybiBuZXdJdGVtOwogICAgIH0KIAogICAgIFByb3BlcnR5VHlw
ZSYgdmFsdWVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQ
cm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4MTI5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eVRlYXJPZmYuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIHR5cGVuYW1l
IFNWR1Byb3BlcnR5VHJhaXRzPFByb3BlcnR5VHlwZT46Okxpc3RJdGVtVHlwZSBMaXN0SXRlbVR5
cGU7CiAgICAgdHlwZWRlZiBTVkdQcm9wZXJ0eVRlYXJPZmY8TGlzdEl0ZW1UeXBlPiBMaXN0SXRl
bVRlYXJPZmY7Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPExpc3RJdGVtVGVhck9mZj4gUGFzc0xp
c3RJdGVtVGVhck9mZjsKKyAgICB0eXBlZGVmIFJlZlB0cjxMaXN0SXRlbVRlYXJPZmY+IFB0ckxp
c3RJdGVtVGVhck9mZjsKICAgICB0eXBlZGVmIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9m
ZjxQcm9wZXJ0eVR5cGU+IEFuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjsKICAgICB0eXBlZGVm
IHR5cGVuYW1lIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+OjpM
aXN0V3JhcHBlckNhY2hlIExpc3RXcmFwcGVyQ2FjaGU7CiAKQEAgLTQwLDEwICs0MCwxMCBAQCBw
dWJsaWM6CiAgICAgdXNpbmcgQmFzZTo6bV92YWx1ZXM7CiAgICAgdXNpbmcgQmFzZTo6bV93cmFw
cGVyczsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlbGY+IGNyZWF0ZShBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmYqIGFuaW1hdGVkUHJvcGVydHksIFNWR1Byb3BlcnR5Um9sZSByb2xlLCBQ
cm9wZXJ0eVR5cGUmIHZhbHVlcywgTGlzdFdyYXBwZXJDYWNoZSYgd3JhcHBlcnMpCisgICAgc3Rh
dGljIFJlZjxTZWxmPiBjcmVhdGUoQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmKiBhbmltYXRl
ZFByb3BlcnR5LCBTVkdQcm9wZXJ0eVJvbGUgcm9sZSwgUHJvcGVydHlUeXBlJiB2YWx1ZXMsIExp
c3RXcmFwcGVyQ2FjaGUmIHdyYXBwZXJzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFuaW1hdGVk
UHJvcGVydHkpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlbGYoYW5pbWF0ZWRQcm9w
ZXJ0eSwgcm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTZWxmKGFuaW1hdGVkUHJvcGVydHksIHJvbGUsIHZhbHVlcywgd3JhcHBlcnMpKTsKICAg
ICB9CiAKICAgICBpbnQgZmluZEl0ZW0oTGlzdEl0ZW1UZWFyT2ZmKiBpdGVtKSBjb25zdApAQCAt
ODMsMzQgKzgzLDM0IEBAIHB1YmxpYzoKICAgICAgICAgQmFzZTo6Y2xlYXJWYWx1ZXNBbmRXcmFw
cGVycyhlYyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVGVhck9mZiBpbml0aWFsaXplKFBh
c3NMaXN0SXRlbVRlYXJPZmYgcGFzc05ld0l0ZW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0
ckxpc3RJdGVtVGVhck9mZiBpbml0aWFsaXplKFB0ckxpc3RJdGVtVGVhck9mZiBuZXdJdGVtLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICB7Ci0gICAgICAgIHJldHVybiBCYXNlOjppbml0aWFsaXpl
VmFsdWVzQW5kV3JhcHBlcnMocGFzc05ld0l0ZW0sIGVjKTsKKyAgICAgICAgcmV0dXJuIEJhc2U6
OmluaXRpYWxpemVWYWx1ZXNBbmRXcmFwcGVycyhuZXdJdGVtLCBlYyk7CiAgICAgfQogCi0gICAg
UGFzc0xpc3RJdGVtVGVhck9mZiBnZXRJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgZ2V0SXRlbSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0SXRlbVZhbHVl
c0FuZFdyYXBwZXJzKG1fYW5pbWF0ZWRQcm9wZXJ0eS5nZXQoKSwgaW5kZXgsIGVjKTsKICAgICB9
CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIGluc2VydEl0ZW1CZWZvcmUoUGFzc0xpc3RJdGVt
VGVhck9mZiBwYXNzTmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
ICAgIFB0ckxpc3RJdGVtVGVhck9mZiBpbnNlcnRJdGVtQmVmb3JlKFB0ckxpc3RJdGVtVGVhck9m
ZiBuZXdJdGVtLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewotICAg
ICAgICByZXR1cm4gQmFzZTo6aW5zZXJ0SXRlbUJlZm9yZVZhbHVlc0FuZFdyYXBwZXJzKHBhc3NO
ZXdJdGVtLCBpbmRleCwgZWMpOworICAgICAgICByZXR1cm4gQmFzZTo6aW5zZXJ0SXRlbUJlZm9y
ZVZhbHVlc0FuZFdyYXBwZXJzKG5ld0l0ZW0sIGluZGV4LCBlYyk7CiAgICAgfQogCi0gICAgUGFz
c0xpc3RJdGVtVGVhck9mZiByZXBsYWNlSXRlbShQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBhc3NOZXdJ
dGVtLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgUHRyTGlzdEl0ZW1U
ZWFyT2ZmIHJlcGxhY2VJdGVtKFB0ckxpc3RJdGVtVGVhck9mZiBuZXdJdGVtLCB1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewotICAgICAgICByZXR1cm4gQmFzZTo6cmVw
bGFjZUl0ZW1WYWx1ZXNBbmRXcmFwcGVycyhwYXNzTmV3SXRlbSwgaW5kZXgsIGVjKTsKKyAgICAg
ICAgcmV0dXJuIEJhc2U6OnJlcGxhY2VJdGVtVmFsdWVzQW5kV3JhcHBlcnMobmV3SXRlbSwgaW5k
ZXgsIGVjKTsKICAgICB9CiAKLSAgICBQYXNzTGlzdEl0ZW1UZWFyT2ZmIHJlbW92ZUl0ZW0odW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVGVhck9mZiBy
ZW1vdmVJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CiAgICAg
ICAgIHJldHVybiBCYXNlOjpyZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnMobV9hbmltYXRlZFBy
b3BlcnR5LmdldCgpLCBpbmRleCwgZWMpOwogICAgIH0KIAotICAgIFBhc3NMaXN0SXRlbVRlYXJP
ZmYgYXBwZW5kSXRlbShQYXNzTGlzdEl0ZW1UZWFyT2ZmIHBhc3NOZXdJdGVtLCBFeGNlcHRpb25D
b2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVRlYXJPZmYgYXBwZW5kSXRlbShQdHJMaXN0SXRlbVRl
YXJPZmYgbmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewotICAgICAgICByZXR1cm4g
QmFzZTo6YXBwZW5kSXRlbVZhbHVlc0FuZFdyYXBwZXJzKHBhc3NOZXdJdGVtLCBlYyk7CisgICAg
ICAgIHJldHVybiBCYXNlOjphcHBlbmRJdGVtVmFsdWVzQW5kV3JhcHBlcnMobmV3SXRlbSwgZWMp
OwogICAgIH0KIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNw
cAkocmV2aXNpb24gMTgxMjk5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywyMCAr
NDcsMjAgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZjo6Y2xlYQogICAgIFNW
R1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpCYXNlOjpjbGVhclZhbHVlcyhlYyk7CiB9CiAK
LVNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQYXNzTGlzdEl0ZW1UeXBlIFNWR1BhdGhT
ZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpnZXRJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpQdHJMaXN0SXRlbVR5cGUg
U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmdldEl0ZW0odW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIExpc3RJdGVtVHlwZSByZXR1cm5lZEl0ZW0gPSBCYXNl
OjpnZXRJdGVtVmFsdWVzKGluZGV4LCBlYyk7CiAgICAgaWYgKHJldHVybmVkSXRlbSkgewogICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4ocmV0dXJuZWRJ
dGVtLmdldCgpKS0+Y29udGV4dEVsZW1lbnQoKSA9PSBjb250ZXh0RWxlbWVudCgpKTsKICAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdXaXRoQ29udGV4dCo+KHJldHVybmVkSXRl
bS5nZXQoKSktPnJvbGUoKSA9PSBtX3BhdGhTZWdSb2xlKTsKICAgICB9Ci0gICAgcmV0dXJuIHJl
dHVybmVkSXRlbS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHJldHVybmVkSXRlbTsKIH0KIAotU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OlBhc3NMaXN0SXRlbVR5cGUgU1ZHUGF0aFNlZ0xp
c3RQcm9wZXJ0eVRlYXJPZmY6OnJlcGxhY2VJdGVtKFBhc3NMaXN0SXRlbVR5cGUgcGFzc05ld0l0
ZW0sIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK1NWR1BhdGhTZWdMaXN0UHJv
cGVydHlUZWFyT2ZmOjpQdHJMaXN0SXRlbVR5cGUgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJP
ZmY6OnJlcGxhY2VJdGVtKFB0ckxpc3RJdGVtVHlwZSBuZXdJdGVtLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gTm90IHNwZWNpZmllZCwgYnV0IEZGL09wZXJh
IGRvIGl0IHRoaXMgd2F5LCBhbmQgaXQncyBqdXN0IHNhbmUuCi0gICAgaWYgKCFwYXNzTmV3SXRl
bSkgeworICAgIGlmICghbmV3SXRlbSkgewogICAgICAgICBlYyA9IFNWR0V4Y2VwdGlvbjo6U1ZH
X1dST05HX1RZUEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03MSwxNiArNzEs
MTUgQEAgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OlBhc3NMaXN0SQogICAgICAgICBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnV2l0aENvbnRleHQqPihyZXBsYWNlZEl0ZW0uZ2V0KCkpLT5z
ZXRDb250ZXh0QW5kUm9sZSgwLCBQYXRoU2VnVW5kZWZpbmVkUm9sZSk7CiAgICAgfQogCi0gICAg
TGlzdEl0ZW1UeXBlIG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKICAgICByZXR1cm4gQmFzZTo6cmVw
bGFjZUl0ZW1WYWx1ZXMobmV3SXRlbSwgaW5kZXgsIGVjKTsKIH0KIAotU1ZHUGF0aFNlZ0xpc3RQ
cm9wZXJ0eVRlYXJPZmY6OlBhc3NMaXN0SXRlbVR5cGUgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRl
YXJPZmY6OnJlbW92ZUl0ZW0odW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU1ZH
UGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OlB0ckxpc3RJdGVtVHlwZSBTVkdQYXRoU2VnTGlz
dFByb3BlcnR5VGVhck9mZjo6cmVtb3ZlSXRlbSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6Okxpc3RJdGVtVHlw
ZSByZW1vdmVkSXRlbSA9IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpCYXNlOjpyZW1v
dmVJdGVtVmFsdWVzKGluZGV4LCBlYyk7CiAgICAgaWYgKHJlbW92ZWRJdGVtKQogICAgICAgICBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnV2l0aENvbnRleHQqPihyZW1vdmVkSXRlbS5nZXQoKSktPnNl
dENvbnRleHRBbmRSb2xlKDAsIFBhdGhTZWdVbmRlZmluZWRSb2xlKTsKLSAgICByZXR1cm4gcmVt
b3ZlZEl0ZW0ucmVsZWFzZSgpOworICAgIHJldHVybiByZW1vdmVkSXRlbTsKIH0KIAogU1ZHUGF0
aEVsZW1lbnQqIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjb250ZXh0RWxlbWVudCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlz
dFByb3BlcnR5VGVhck9mZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4MTI5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlU
ZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEyICszMiwxMiBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiBTVkdMaXN0UHJvcGVydHk8U1ZHUGF0aFNlZ0xpc3Q+IEJhc2U7CiAgICAgdHlwZWRl
ZiBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHUGF0aFNlZ0xpc3Q+IEFuaW1hdGVk
TGlzdFByb3BlcnR5VGVhck9mZjsKICAgICB0eXBlZGVmIFNWR1Byb3BlcnR5VHJhaXRzPFNWR1Bh
dGhTZWdMaXN0Pjo6TGlzdEl0ZW1UeXBlIExpc3RJdGVtVHlwZTsKLSAgICB0eXBlZGVmIFBhc3NS
ZWZQdHI8U1ZHUGF0aFNlZz4gUGFzc0xpc3RJdGVtVHlwZTsKKyAgICB0eXBlZGVmIFJlZlB0cjxT
VkdQYXRoU2VnPiBQdHJMaXN0SXRlbVR5cGU7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQ
YXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4gY3JlYXRlKEFuaW1hdGVkTGlzdFByb3BlcnR5VGVh
ck9mZiogYW5pbWF0ZWRQcm9wZXJ0eSwgU1ZHUHJvcGVydHlSb2xlIHJvbGUsIFNWR1BhdGhTZWdS
b2xlIHBhdGhTZWdSb2xlLCBTVkdQYXRoU2VnTGlzdCYgdmFsdWVzLCBMaXN0V3JhcHBlckNhY2hl
JiB3cmFwcGVycykKKyAgICBzdGF0aWMgUmVmPFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2Zm
PiBjcmVhdGUoQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmKiBhbmltYXRlZFByb3BlcnR5LCBT
VkdQcm9wZXJ0eVJvbGUgcm9sZSwgU1ZHUGF0aFNlZ1JvbGUgcGF0aFNlZ1JvbGUsIFNWR1BhdGhT
ZWdMaXN0JiB2YWx1ZXMsIExpc3RXcmFwcGVyQ2FjaGUmIHdyYXBwZXJzKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGFuaW1hdGVkUHJvcGVydHkpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKGFuaW1hdGVkUHJvcGVydHksIHJvbGUsIHBh
dGhTZWdSb2xlLCB2YWx1ZXMsIHdyYXBwZXJzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmKGFuaW1hdGVkUHJvcGVydHksIHJvbGUs
IHBhdGhTZWdSb2xlLCB2YWx1ZXMsIHdyYXBwZXJzKSk7CiAgICAgfQogCiAgICAgaW50IGZpbmRJ
dGVtKGNvbnN0IExpc3RJdGVtVHlwZSYgaXRlbSkgY29uc3QKQEAgLTY3LDQ2ICs2Nyw0MyBAQCBw
dWJsaWM6CiAgICAgLy8gU1ZHTGlzdCBBUEkKICAgICB2b2lkIGNsZWFyKEV4Y2VwdGlvbkNvZGUm
KTsKIAotICAgIFBhc3NMaXN0SXRlbVR5cGUgaW5pdGlhbGl6ZShQYXNzTGlzdEl0ZW1UeXBlIHBh
c3NOZXdJdGVtLCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICBQdHJMaXN0SXRlbVR5cGUgaW5pdGlh
bGl6ZShQdHJMaXN0SXRlbVR5cGUgbmV3SXRlbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewog
ICAgICAgICAvLyBOb3Qgc3BlY2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFu
ZCBpdCdzIGp1c3Qgc2FuZS4KLSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBp
ZiAoIW5ld0l0ZW0pIHsKICAgICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdf
VFlQRV9FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICB9CiAKICAgICAgICAgY2xlYXJDb250ZXh0QW5kUm9sZXMoKTsKLSAgICAg
ICAgTGlzdEl0ZW1UeXBlIG5ld0l0ZW0gPSBwYXNzTmV3SXRlbTsKICAgICAgICAgcmV0dXJuIEJh
c2U6OmluaXRpYWxpemVWYWx1ZXMobmV3SXRlbSwgZWMpOwogICAgIH0KIAotICAgIFBhc3NMaXN0
SXRlbVR5cGUgZ2V0SXRlbSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFB0
ckxpc3RJdGVtVHlwZSBnZXRJdGVtKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAK
LSAgICBQYXNzTGlzdEl0ZW1UeXBlIGluc2VydEl0ZW1CZWZvcmUoUGFzc0xpc3RJdGVtVHlwZSBw
YXNzTmV3SXRlbSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxp
c3RJdGVtVHlwZSBpbnNlcnRJdGVtQmVmb3JlKFB0ckxpc3RJdGVtVHlwZSBuZXdJdGVtLCB1bnNp
Z25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICAvLyBOb3Qgc3Bl
Y2lmaWVkLCBidXQgRkYvT3BlcmEgZG8gaXQgdGhpcyB3YXksIGFuZCBpdCdzIGp1c3Qgc2FuZS4K
LSAgICAgICAgaWYgKCFwYXNzTmV3SXRlbSkgeworICAgICAgICBpZiAoIW5ld0l0ZW0pIHsKICAg
ICAgICAgICAgIGVjID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIExpc3RJdGVtVHlwZSBuZXdJdGVt
ID0gcGFzc05ld0l0ZW07CiAgICAgICAgIHJldHVybiBCYXNlOjppbnNlcnRJdGVtQmVmb3JlVmFs
dWVzKG5ld0l0ZW0sIGluZGV4LCBlYyk7CiAgICAgfQogCi0gICAgUGFzc0xpc3RJdGVtVHlwZSBy
ZXBsYWNlSXRlbShQYXNzTGlzdEl0ZW1UeXBlLCB1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFB0ckxpc3RJdGVtVHlwZSByZXBsYWNlSXRlbShQdHJMaXN0SXRlbVR5cGUsIHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzTGlzdEl0ZW1UeXBlIHJl
bW92ZUl0ZW0odW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQdHJMaXN0SXRl
bVR5cGUgcmVtb3ZlSXRlbSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
UGFzc0xpc3RJdGVtVHlwZSBhcHBlbmRJdGVtKFBhc3NMaXN0SXRlbVR5cGUgcGFzc05ld0l0ZW0s
IEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFB0ckxpc3RJdGVtVHlwZSBhcHBlbmRJdGVtKFB0ckxp
c3RJdGVtVHlwZSBuZXdJdGVtLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CiAgICAgICAgIC8v
IE5vdCBzcGVjaWZpZWQsIGJ1dCBGRi9PcGVyYSBkbyBpdCB0aGlzIHdheSwgYW5kIGl0J3MganVz
dCBzYW5lLgotICAgICAgICBpZiAoIXBhc3NOZXdJdGVtKSB7CisgICAgICAgIGlmICghbmV3SXRl
bSkgewogICAgICAgICAgICAgZWMgPSBTVkdFeGNlcHRpb246OlNWR19XUk9OR19UWVBFX0VSUjsK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0KIAotICAgICAgICBMaXN0SXRlbVR5cGUgbmV3SXRlbSA9IHBhc3NOZXdJdGVtOwogICAg
ICAgICByZXR1cm4gQmFzZTo6YXBwZW5kSXRlbVZhbHVlcyhuZXdJdGVtLCBlYyk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eUluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eUlu
Zm8uaAkocmV2aXNpb24gMTgxMjk5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHUHJvcGVydHlJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgc3RydWN0
IFNWR1Byb3BlcnR5SW5mbyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiB2b2lkICgqU3luY2hyb25pemVQcm9wZXJ0eSkoU1ZHRWxlbWVudCopOwot
ICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5PiAoKkxvb2t1cE9yQ3Jl
YXRlV3JhcHBlckZvckFuaW1hdGVkUHJvcGVydHkpKFNWR0VsZW1lbnQqKTsKKyAgICB0eXBlZGVm
IFJlZjxTVkdBbmltYXRlZFByb3BlcnR5PiAoKkxvb2t1cE9yQ3JlYXRlV3JhcHBlckZvckFuaW1h
dGVkUHJvcGVydHkpKFNWR0VsZW1lbnQqKTsKIAogICAgIFNWR1Byb3BlcnR5SW5mbyhBbmltYXRl
ZFByb3BlcnR5VHlwZSBuZXdUeXBlLCBBbmltYXRlZFByb3BlcnR5U3RhdGUgbmV3U3RhdGUsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5ld0F0dHJpYnV0ZU5hbWUsCiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmV3UHJvcGVydHlJZGVudGlmaWVyLCBTeW5jaHJvbml6ZVBy
b3BlcnR5IG5ld1N5bmNocm9uaXplUHJvcGVydHksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9m
Zi5oCShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1
LDkgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2U6Om1fcm9sZTsKICAgICB1c2luZyBCYXNlOjpt
X3ZhbHVlczsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRl
YXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQmIGNvbnRleHRFbGVtZW50LCBQ
cm9wZXJ0eVR5cGUmIHZhbHVlcykKKyAgICBzdGF0aWMgUmVmPFNWR1N0YXRpY0xpc3RQcm9wZXJ0
eVRlYXJPZmY8UHJvcGVydHlUeXBlPj4gY3JlYXRlKFNWR0VsZW1lbnQmIGNvbnRleHRFbGVtZW50
LCBQcm9wZXJ0eVR5cGUmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZjxQcm9wZXJ0eVR5cGU+KCZjb250ZXh0RWxl
bWVudCwgdmFsdWVzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1N0YXRpY0xp
c3RQcm9wZXJ0eVRlYXJPZmY8UHJvcGVydHlUeXBlPigmY29udGV4dEVsZW1lbnQsIHZhbHVlcykp
OwogICAgIH0KIAogICAgIC8vIFNWR0xpc3QgQVBJCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaAkocmV2
aXNpb24gMTgxMjk5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHU3RhdGlj
UHJvcGVydHlUZWFyT2ZmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgcHVibGlj
OgogCiAgICAgLy8gVXNlZCBmb3Igbm9uLWFuaW1hdGVkIFBPRCB0eXBlcyB0aGF0IGFyZSBub3Qg
YXNzb2NpYXRlZCB3aXRoIGEgU1ZHQW5pbWF0ZWRQcm9wZXJ0eSBvYmplY3QsIG5vciB3aXRoIGEg
WE1MIERPTSBhdHRyaWJ1dGUKICAgICAvLyAoZm9yIGV4YW1wbGU6IFNWR1NWR0VsZW1lbnQ6OmN1
cnJlbnRUcmFuc2xhdGUpLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlbGY+IGNyZWF0ZShDb250
ZXh0RWxlbWVudCYgY29udGV4dEVsZW1lbnQsIFByb3BlcnR5VHlwZSYgdmFsdWUsIFVwZGF0ZU1l
dGhvZCB1cGRhdGUpCisgICAgc3RhdGljIFJlZjxTZWxmPiBjcmVhdGUoQ29udGV4dEVsZW1lbnQm
IGNvbnRleHRFbGVtZW50LCBQcm9wZXJ0eVR5cGUmIHZhbHVlLCBVcGRhdGVNZXRob2QgdXBkYXRl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWxmKCZjb250ZXh0RWxlbWVu
dCwgdmFsdWUsIHVwZGF0ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZWxmKCZj
b250ZXh0RWxlbWVudCwgdmFsdWUsIHVwZGF0ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRDaGFuZ2UoKSB7IChtX2NvbnRleHRFbGVtZW50LmdldCgpLT4qbV91cGRhdGUpKCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1RyYW5zZm9ybUxpc3RQ
cm9wZXJ0eVRlYXJPZmYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVy
dGllcy9TVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgJKHJldmlzaW9uIDE4MTI5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmYuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNDEgKzMxLDQxIEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0
PiBBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmY7CiAgICAgdHlwZWRlZiBTVkdBbmltYXRlZExp
c3RQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD46Okxpc3RXcmFwcGVyQ2FjaGUgTGlz
dFdyYXBwZXJDYWNoZTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0xpc3RQcm9wZXJ0eVRl
YXJPZmY8U1ZHVHJhbnNmb3JtTGlzdD4+IGNyZWF0ZShBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJP
ZmYqIGFuaW1hdGVkUHJvcGVydHksIFNWR1Byb3BlcnR5Um9sZSByb2xlLCBTVkdUcmFuc2Zvcm1M
aXN0JiB2YWx1ZXMsIExpc3RXcmFwcGVyQ2FjaGUmIHdyYXBwZXJzKQorICAgIHN0YXRpYyBSZWY8
U1ZHTGlzdFByb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm1MaXN0Pj4gY3JlYXRlKEFuaW1hdGVk
TGlzdFByb3BlcnR5VGVhck9mZiogYW5pbWF0ZWRQcm9wZXJ0eSwgU1ZHUHJvcGVydHlSb2xlIHJv
bGUsIFNWR1RyYW5zZm9ybUxpc3QmIHZhbHVlcywgTGlzdFdyYXBwZXJDYWNoZSYgd3JhcHBlcnMp
CiAgICAgewogICAgICAgICBBU1NFUlQoYW5pbWF0ZWRQcm9wZXJ0eSk7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZihhbmltYXRlZFBy
b3BlcnR5LCByb2xlLCB2YWx1ZXMsIHdyYXBwZXJzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYoYW5pbWF0ZWRQcm9wZXJ0eSwg
cm9sZSwgdmFsdWVzLCB3cmFwcGVycykpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8U1ZHUHJv
cGVydHlUZWFyT2ZmPFNWR1RyYW5zZm9ybT4+IGNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgo
U1ZHUHJvcGVydHlUZWFyT2ZmPFNWR01hdHJpeD4qIG1hdHJpeCwgRXhjZXB0aW9uQ29kZSYgZWMp
CisgICAgUmVmUHRyPFNWR1Byb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm0+PiBjcmVhdGVTVkdU
cmFuc2Zvcm1Gcm9tTWF0cml4KFNWR1Byb3BlcnR5VGVhck9mZjxTVkdNYXRyaXg+KiBtYXRyaXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdmFsdWVzKTsKICAg
ICAgICAgaWYgKCFtYXRyaXgpIHsKICAgICAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPjo6
Y3JlYXRlKG1fdmFsdWVzLT5jcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KG1hdHJpeC0+cHJv
cGVydHlSZWZlcmVuY2UoKSkpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8U1ZHUHJvcGVydHlU
ZWFyT2ZmPFNWR1RyYW5zZm9ybT4+IGNvbnNvbGlkYXRlKEV4Y2VwdGlvbkNvZGUmIGVjKQorICAg
IFJlZlB0cjxTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPj4gY29uc29saWRhdGUoRXhj
ZXB0aW9uQ29kZSYgZWMpCiAgICAgewogICAgICAgICBBU1NFUlQobV92YWx1ZXMpOwogICAgICAg
ICBBU1NFUlQobV93cmFwcGVycyk7CiAgICAgICAgIGlmICghY2FuQWx0ZXJMaXN0KGVjKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAg
ICAgQVNTRVJUKG1fdmFsdWVzLT5zaXplKCkgPT0gbV93cmFwcGVycy0+c2l6ZSgpKTsKIAogICAg
ICAgICAvLyBTcGVjOiBJZiB0aGUgbGlzdCB3YXMgZW1wdHksIHRoZW4gYSB2YWx1ZSBvZiBudWxs
IGlzIHJldHVybmVkLgogICAgICAgICBpZiAobV92YWx1ZXMtPmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgZGV0
YWNoTGlzdFdyYXBwZXJzKDApOwogICAgICAgICBSZWZQdHI8U1ZHUHJvcGVydHlUZWFyT2ZmPFNW
R1RyYW5zZm9ybT4+IHdyYXBwZXIgPSBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPjo6
Y3JlYXRlKG1fdmFsdWVzLT5jb25zb2xpZGF0ZSgpKTsKICAgICAgICAgbV93cmFwcGVycy0+YXBw
ZW5kKHdyYXBwZXIpOwogCiAgICAgICAgIEFTU0VSVChtX3ZhbHVlcy0+c2l6ZSgpID09IG1fd3Jh
cHBlcnMtPnNpemUoKSk7Ci0gICAgICAgIHJldHVybiB3cmFwcGVyLnJlbGVhc2UoKTsKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQogCiBwcml2YXRlOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>