<?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>54410</bug_id>
          
          <creation_ts>2011-02-14 13:33:09 -0800</creation_ts>
          <short_desc>SVG animation doesn&apos;t support attribute value &apos;inherit&apos;</short_desc>
          <delta_ts>2011-02-15 09:03:24 -0800</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>PC</rep_platform>
          <op_sys>OS X 10.5</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>41761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>350850</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-14 13:33:09 -0800</bug_when>
    <thetext>SVG animation doesn&apos;t support attribute value &apos;inherit&apos; for CSS properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350897</commentid>
    <comment_count>1</comment_count>
      <attachid>82365</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-14 14:42:01 -0800</bug_when>
    <thetext>Created attachment 82365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350900</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-14 14:51:21 -0800</bug_when>
    <thetext>Attachment 82365 did not build on chromium:
Build output: http://queues.webkit.org/results/7911651</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350908</commentid>
    <comment_count>3</comment_count>
      <attachid>82367</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-14 15:00:46 -0800</bug_when>
    <thetext>Created attachment 82367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350910</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-14 15:03:13 -0800</bug_when>
    <thetext>Forgot to mention that this fixes two more tests of the W3C test suite:

http://dev.w3.org/SVG/profiles/1.1F2/test/svg/animate-elem-84-t.svg
http://dev.w3.org/SVG/profiles/1.1F2/test/svg/animate-elem-85-t.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350913</commentid>
    <comment_count>5</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-14 15:06:21 -0800</bug_when>
    <thetext>Attachment 82365 did not build on qt:
Build output: http://queues.webkit.org/results/7909708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351135</commentid>
    <comment_count>6</comment_count>
      <attachid>82367</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-15 00:40:01 -0800</bug_when>
    <thetext>Comment on attachment 82367
Patch

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

Almost r=me, still some comments to be resolved, setting r- for the meanwhile.

&gt; Source/WebCore/ChangeLog:19
&gt; +        (WebCore::SVGAnimateElement::calculateAnimatedValue): Get the computed style of attribute for &apos;inherit&apos;
&gt; +        or &apos;currentColor&apos; during the animation, since the values could be animated themselves.

When a property value is &apos;inherit&apos; or &apos;currentColor&apos; during the animation, get the computed style of the property since the values could be animated themselves.

&gt; Source/WebCore/ChangeLog:28
&gt; +        the attribute is an animatable CSS property with the use of a CSS property map in SVGStyledElement.

s/with the use of .../by using the CSS property map in SVGStyledElement/.

&gt; Source/WebCore/ChangeLog:30
&gt; +        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue): Take targetElement instead of target
&gt; +        for consistency reasons.

s/Take..../ -&gt; s/target/targetElement/ for consistency.

&gt; Source/WebCore/ChangeLog:33
&gt; +        (WebCore::SVGStyledElement::isAnimatableCSSProperty): Check if attribute is a animatable CSS property.

s/Check if/.../ -&gt; Checks if the CSS property is animable.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:101
&gt; +static inline String adujustForInheritance(SVGElement* targetElement, const String&amp; attributeName)

For consistency: avoid the return value, and use a &quot;String&amp; attributeValue&quot; as parameter?
s/adujust/adjust/

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:103
&gt; +    // FIXME: Needs to handle animation types directly.

What does that mean?

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:163
&gt; +        // Get current values on property value &apos;currentColor&apos; as well as &apos;inherit&apos;

Replace &apos;currentColor&apos; / &apos;inherit&apos; by their computed property values.

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:192
&gt; +        // Get current values on property value &apos;currentColor&apos; and &apos;inherit&apos;

Same comment as I suggested above. And use periods at the end of sentences.

&gt; Source/WebCore/svg/SVGAnimateElement.h:54
&gt; +    // If we have &apos;currentColor&apos; or &apos;inherit&apos; as animation value, we need to grep the value during the animation

s/grep/grab/

&gt; Source/WebCore/svg/SVGAnimateElement.h:56
&gt; +    enum BasicValueChange {

Why BasicValueChange? Doesn&apos;t make a lot of sense to me.
enum AnimatedPropertyValueType {
RegularPropertyValue,
CurrentColorValue,
InheritValue
}; ?

&gt; Source/WebCore/svg/SVGAnimateElement.h:59
&gt; +        constantBasicValue,
&gt; +        currentColorBasicValue,
&gt; +        inheritBasicValue

Capitalize those enum values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351147</commentid>
    <comment_count>7</comment_count>
      <attachid>82428</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-15 01:33:12 -0800</bug_when>
    <thetext>Created attachment 82428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351155</commentid>
    <comment_count>8</comment_count>
      <attachid>82428</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-15 02:18:34 -0800</bug_when>
    <thetext>Comment on attachment 82428
Patch

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

r=me. Great job!

&gt; Source/WebCore/svg/SVGAnimateElement.cpp:299
&gt; +static bool isCurrentColor(const String&amp; value)

attributeValueIsCurrentColor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351177</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-15 03:16:53 -0800</bug_when>
    <thetext>Committed r78543: &lt;http://trac.webkit.org/changeset/78543&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351213</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-15 06:05:36 -0800</bug_when>
    <thetext>Committed r78552: &lt;http://trac.webkit.org/changeset/78552&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351323</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-15 09:03:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78560 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82365</attachid>
            <date>2011-02-14 14:42:01 -0800</date>
            <delta_ts>2011-02-14 15:00:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54410-20110214234158.patch</filename>
            <type>text/plain</type>
            <size>29572</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDItMTQgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhdHRyaWJ1dGUg
dmFsdWUgJ2luaGVyaXQnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDQxMAorCisgICAgICAgIFNWRyBhbmltYXRpb24gZG9lcyBub3Qgc3VwcG9ydCAn
aW5oZXJpdCcgYXMgdmFsdWUgZm9yIENTUyBwcm9wZXJ0eSBhbmltYXRpb25zLiBXaXRoIHRoZSBw
YXRjaCwgU1ZHIGRldGVybWluZXMKKyAgICAgICAgaWYgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgdGFy
Z2V0IGVsZW1lbnQgaXMgYW4gYW5pbWF0YWJsZSBDU1MgUHJvcGVydHkgYW5kIGNvbXB1dGVzIHRo
ZSBzdHlsZSBkdXJpbmcgdGhlCisgICAgICAgIGFuaW1hdGlvbi4KKworICAgICAgICBUZXN0czog
c3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuaHRtbAorICAgICAgICAgICAgICAg
c3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sCisKKyAgICAg
ICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0
Rm9yQ3VycmVudENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmFkdWp1c3RGb3JJbmhlcml0YW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0
ZWRWYWx1ZSk6IEdldCB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgYXR0cmlidXRlIGZvciAnaW5oZXJp
dCcKKyAgICAgICAgb3IgJ2N1cnJlbnRDb2xvcicgZHVyaW5nIHRoZSBhbmltYXRpb24sIHNpbmNl
IHRoZSB2YWx1ZXMgY291bGQgYmUgYW5pbWF0ZWQgdGhlbXNlbHZlcy4KKyAgICAgICAgKFdlYkNv
cmU6OmluaGVyaXRzRnJvbVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ3VycmVudENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMpOiBDaGVjayBpZiAnZnJvbScsICdieScgb3IgJ3RvJyB2YWx1ZSBoYXMgdGhl
CisgICAgICAgIHN0cmluZyAnaW5oZXJpdCcgb3IgJ2N1cnJlbnRDb2xvcicgYW5kIGlmIHRoZSBh
dHRyaWJ1dGUgc3VwcG9ydHMgb25lIG9mIHRoZXNlIHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOiBEaXR0by4KKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpp
c1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KTogQ2hlY2sgaWYgdGFyZ2V0IGVsZW1lbnQgaXMg
c3R5bGFibGUgYW5kCisgICAgICAgIHRoZSBhdHRyaWJ1dGUgaXMgYW4gYW5pbWF0YWJsZSBDU1Mg
cHJvcGVydHkgd2l0aCB0aGUgdXNlIG9mIGEgQ1NTIHByb3BlcnR5IG1hcCBpbiBTVkdTdHlsZWRF
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0
QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSk6IFRha2UgdGFyZ2V0RWxlbWVudCBpbnN0ZWFkIG9mIHRh
cmdldAorICAgICAgICBmb3IgY29uc2lzdGVuY3kgcmVhc29ucy4KKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDog
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9w
ZXJ0eSk6IENoZWNrIGlmIGF0dHJpYnV0ZSBpcyBhIGFuaW1hdGFibGUgQ1NTIHByb3BlcnR5Lgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5jcHA6IFVzZSB0aGUgbmV3IGZ1bmN0aW9uIGlzVGFyZ2V0QXR0
cmlidXRlQ1NTUHJvcGVydHkgdG8gZGV0ZXJtaW5lCisgICAgICAgIGlmIHRoZSB0YXJnZXQgZWxl
bWVudCBpcyBzdHlsYWJsZSBhbmQgdGhlIGF0dHJpYnV0ZSBpcyBhbiBhbmltYXRhYmxlIENTUyBw
cm9wZXJ0eS4KKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVG
b3IpOgorCiAyMDExLTAyLTE0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3ODM0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDggQEAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNpbmNs
dWRlICJTVkdBbmltYXRlRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNvbG9yRGlzdGFuY2UuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKQEAgLTM1LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyRmFj
dG9yeS5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRM
aXN0LmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC04NSwxNSArODgsMzAgQEAgc3RhdGljIGJvb2wgcGFyc2VOdW1iZXJWYWx1ZUFu
ZFVuaXQoY29ucwogICAgIHJldHVybiBvazsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGFkanVz
dEZvckN1cnJlbnRDb2xvcihDb2xvciYgY29sb3IsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFNWR0Vs
ZW1lbnQqIHRhcmdldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RGb3JDdXJyZW50Q29sb3Io
U1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgQ29sb3ImIGNvbG9yKQogewotICAgIGlmICghdGFy
Z2V0IHx8ICF0YXJnZXQtPmlzU3R5bGVkKCkgfHwgdmFsdWUgIT0gImN1cnJlbnRDb2xvciIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CiAgICAgCi0g
ICAgaWYgKFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXQtPnJlbmRlcmVyKCkp
CisgICAgaWYgKFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXRFbGVtZW50LT5y
ZW5kZXJlcigpKQogICAgICAgICBjb2xvciA9IHRhcmdldFJlbmRlcmVyLT5zdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CisgICAgZWxzZQorICAgICAgICBj
b2xvciA9IENvbG9yKCk7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIGFkdWp1c3RGb3JJbmhlcml0YW5jZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgLy8gRklYTUU6IE5lZWRzIHRvIGhhbmRs
ZSBhbmltYXRpb24gdHlwZXMgZGlyZWN0bHkuCisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwor
ICAgIFN0cmluZyB2YWx1ZTsKKworICAgIEVsZW1lbnQqIHBhcmVudCA9IHRhcmdldEVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIFNWR0VsZW1lbnQqIHN2Z1BhcmVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXJlbnQpOworICAgIGlmICghc3ZnUGFyZW50LT5p
c1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgCisgICAgcmV0dXJuIGNvbXB1
dGVkU3R5bGUoc3ZnUGFyZW50KS0+Z2V0UHJvcGVydHlWYWx1ZShjc3NQcm9wZXJ0eUlEKGF0dHJp
YnV0ZU5hbWUpKTsKIH0KIAogU1ZHQW5pbWF0ZUVsZW1lbnQ6OlByb3BlcnR5VHlwZSBTVkdBbmlt
YXRlRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRl
KSBjb25zdApAQCAtMTE1LDEzICsxMzMsMjEgQEAgU1ZHQW5pbWF0ZUVsZW1lbnQ6OlByb3BlcnR5
VHlwZSBTVkdBbmltYQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQq
IHJlc3VsdEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKHBlcmNlbnRhZ2UgPj0gMC5mICYmIHBlcmNl
bnRhZ2UgPD0gMS5mKTsKKyAgICBBU1NFUlQocGVyY2VudGFnZSA+PSAwICYmIHBlcmNlbnRhZ2Ug
PD0gMSk7CiAgICAgQVNTRVJUKHJlc3VsdEVsZW1lbnQpOwotICAgIGJvb2wgaXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uID0gcGVyY2VudGFnZSA8IDAuNTsKKyAgICBib29sIGlzSW5GaXJzdEhhbGZP
ZkFuaW1hdGlvbiA9IHBlcmNlbnRhZ2UgPCAwLjVmOwogICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0
aW9uTW9kZSA9IHRoaXMtPmFuaW1hdGlvbk1vZGUoKTsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRF
bGVtZW50ID0gMDsKKyAgICAvLyBBdm9pZCB0YXJnZXRFbGVtZW50KCkgY2FsbCBpZiBwb3NzaWJs
ZS4gSXQgbWlnaHQgc2xvdyBkb3duIGFuaW1hdGlvbnMuCisgICAgaWYgKG1fZnJvbUJhc2ljVmFs
dWUgPT0gaW5oZXJpdEJhc2ljVmFsdWUgfHwgbV90b0Jhc2ljVmFsdWUgPT0gaW5oZXJpdEJhc2lj
VmFsdWUKKyAgICAgICAgfHwgbV9mcm9tQmFzaWNWYWx1ZSA9PSBjdXJyZW50Q29sb3JCYXNpY1Zh
bHVlIHx8IG1fdG9CYXNpY1ZhbHVlID09IGN1cnJlbnRDb2xvckJhc2ljVmFsdWUpIHsKKyAgICAg
ICAgdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCF0
YXJnZXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBpZiAo
aGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKLSAgICAgICAgcGVyY2VudGFnZSA9IDEuZjsK
KyAgICAgICAgcGVyY2VudGFnZSA9IDE7CiAgICAgaWYgKCFyZXN1bHRFbGVtZW50LT5oYXNUYWdO
YW1lKFNWR05hbWVzOjphbmltYXRlVGFnKSAmJiAhcmVzdWx0RWxlbWVudC0+aGFzVGFnTmFtZShT
VkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSAKICAgICAgICAgJiYgIXJlc3VsdEVsZW1lbnQtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNCw2ICsx
NjAsMTYgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAg
ICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAgICAgICAgIG1fZnJvbU51
bWJlciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWROdW1iZXI7CiAgICAgICAgIAorICAgICAgICAvLyBH
ZXQgY3VycmVudCB2YWx1ZXMgb24gcHJvcGVydHkgdmFsdWUgJ2N1cnJlbnRDb2xvcicgYXMgd2Vs
bCBhcyAnaW5oZXJpdCcKKyAgICAgICAgaWYgKG1fZnJvbUJhc2ljVmFsdWUgPT0gaW5oZXJpdEJh
c2ljVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoYWR1
anVzdEZvckluaGVyaXRhbmNlKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSksIG1fZnJv
bU51bWJlciwgbV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1fdG9CYXNpY1ZhbHVlID09IGluaGVyaXRCYXNpY1ZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGFkdWp1c3RGb3JJbmhlcml0
YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpLCBtX3RvTnVtYmVyLCBtX251bWJl
clVuaXQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGRv
dWJsZSBudW1iZXI7CiAgICAgICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlRGlzY3JldGUp
CiAgICAgICAgICAgICBudW1iZXIgPSBpc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21O
dW1iZXIgOiBtX3RvTnVtYmVyOwpAQCAtMTUyLDYgKzE4OCwxNyBAQCB2b2lkIFNWR0FuaW1hdGVF
bGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9y
UHJvcGVydHkpIHsKICAgICAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pCiAg
ICAgICAgICAgICBtX2Zyb21Db2xvciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWRDb2xvcjsKKworICAg
ICAgICAvLyBHZXQgY3VycmVudCB2YWx1ZXMgb24gcHJvcGVydHkgdmFsdWUgJ2N1cnJlbnRDb2xv
cicgYW5kICdpbmhlcml0JworICAgICAgICBpZiAobV9mcm9tQmFzaWNWYWx1ZSA9PSBjdXJyZW50
Q29sb3JCYXNpY1ZhbHVlKQorICAgICAgICAgICAgYWRqdXN0Rm9yQ3VycmVudENvbG9yKHRhcmdl
dEVsZW1lbnQsIG1fZnJvbUNvbG9yKTsKKyAgICAgICAgZWxzZSBpZiAobV9mcm9tQmFzaWNWYWx1
ZSA9PSBpbmhlcml0QmFzaWNWYWx1ZSkKKyAgICAgICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGFkdWp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRF
bGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpKTsKKyAgICAgICAgaWYgKG1fdG9CYXNpY1ZhbHVlID09
IGN1cnJlbnRDb2xvckJhc2ljVmFsdWUpCisgICAgICAgICAgICBhZGp1c3RGb3JDdXJyZW50Q29s
b3IodGFyZ2V0RWxlbWVudCwgbV90b0NvbG9yKTsKKyAgICAgICAgZWxzZSBpZiAobV90b0Jhc2lj
VmFsdWUgPT0gaW5oZXJpdEJhc2ljVmFsdWUpCisgICAgICAgICAgICBtX3RvQ29sb3IgPSBTVkdD
b2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoYWR1anVzdEZvckluaGVyaXRhbmNlKHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSkpOworCiAgICAgICAgIENvbG9yIGNvbG9yOwogICAg
ICAgICBpZiAoY2FsY01vZGUoKSA9PSBDYWxjTW9kZURpc2NyZXRlKQogICAgICAgICAgICAgY29s
b3IgPSBpc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Db2xvciA6IG1fdG9Db2xvcjsK
QEAgLTIxNiw3ICsyNjMsMTMgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5p
bWF0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChhbmltYXRpb25Nb2RlID09
IEZyb21Ub0FuaW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IGFuaW1h
dGlvbk1vZGUgPT0gVmFsdWVzQW5pbWF0aW9uKTsKLSAgICBpZiAoKGFuaW1hdGlvbk1vZGUgPT0g
RnJvbVRvQW5pbWF0aW9uICYmIHBlcmNlbnRhZ2UgPiAwLjVmKSB8fCBhbmltYXRpb25Nb2RlID09
IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMS4wZikKKyAgICAvLyBHZXQgY3VycmVudCB2
YWx1ZXMgb24gcHJvcGVydHkgdmFsdWUgJ2N1cnJlbnRDb2xvcicgYW5kICdpbmhlcml0JworICAg
IGlmIChtX2Zyb21CYXNpY1ZhbHVlID09IGluaGVyaXRCYXNpY1ZhbHVlKQorICAgICAgICBtX2Zy
b21TdHJpbmcgPSBhZHVqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRl
TmFtZSgpKTsKKyAgICBpZiAobV90b0Jhc2ljVmFsdWUgPT0gaW5oZXJpdEJhc2ljVmFsdWUpCisg
ICAgICAgIG1fdG9TdHJpbmcgPSBhZHVqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwg
YXR0cmlidXRlTmFtZSgpKTsKKworICAgIGlmICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9Bbmlt
YXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRp
b24gfHwgcGVyY2VudGFnZSA9PSAxKQogICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkU3RyaW5n
ID0gbV90b1N0cmluZzsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRTdHJp
bmcgPSBtX2Zyb21TdHJpbmc7CkBAIC0yMjQsMTcgKzI3Nyw0NSBAQCB2b2lkIFNWR0FuaW1hdGVF
bGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgcmVzdWx0cy0+bV9wcm9wZXJ0eVR5cGUgPSBT
dHJpbmdQcm9wZXJ0eTsKIH0KIAorc3RhdGljIGJvb2wgaW5oZXJpdHNGcm9tUHJvcGVydHkoU1ZH
RWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaW5oZXJpdCwgKCJpbmhlcml0Iikp
OworCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZSAhPSBpbmhlcml0IHx8ICF0YXJn
ZXRFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5pbWF0YWJsZUNTU1Byb3BlcnR5KFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUsIG51bGxBdG9tKSk7Cit9CisKK3N0YXRpYyBib29sIGlz
Q3VycmVudENvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGN1cnJlbnRDb2xvciwgKCJjdXJyZW50Q29sb3IiKSk7
CisgICAgcmV0dXJuIHZhbHVlID09IGN1cnJlbnRDb2xvcjsKK30KKwogYm9vbCBTVkdBbmltYXRl
RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZnJvbUJhc2ljVmFsdWUgPSBpbmhlcml0c0Zyb21Q
cm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGZyb21TdHJpbmcpID8gaW5o
ZXJpdEJhc2ljVmFsdWUgOiBjb25zdGFudEJhc2ljVmFsdWU7CisgICAgbV90b0Jhc2ljVmFsdWUg
PSBpbmhlcml0c0Zyb21Qcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIHRv
U3RyaW5nKSA/IGluaGVyaXRCYXNpY1ZhbHVlIDogY29uc3RhbnRCYXNpY1ZhbHVlOworCiAgICAg
Ly8gRklYTUU6IE5lZWRzIG1vcmUgc29saWQgd2F5IGRldGVybWluZSB0YXJnZXQgYXR0cmlidXRl
IHR5cGUuCiAgICAgbV9wcm9wZXJ0eVR5cGUgPSBkZXRlcm1pbmVQcm9wZXJ0eVR5cGUoYXR0cmli
dXRlTmFtZSgpKTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgewot
ICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgp
OwotICAgICAgICBpZiAoIWFkanVzdEZvckN1cnJlbnRDb2xvcihtX2Zyb21Db2xvciwgZnJvbVN0
cmluZywgdGFyZ2V0RWxlbWVudCkpCisgICAgICAgIGJvb2wgZnJvbUlzQ3VycmVudENvbG9yID0g
aXNDdXJyZW50Q29sb3IoZnJvbVN0cmluZyk7CisgICAgICAgIGJvb2wgdG9Jc0N1cnJlbnRDb2xv
ciA9IGlzQ3VycmVudENvbG9yKHRvU3RyaW5nKTsKKyAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRD
b2xvcikKKyAgICAgICAgICAgIG1fZnJvbUJhc2ljVmFsdWUgPSBjdXJyZW50Q29sb3JCYXNpY1Zh
bHVlOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpj
b2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsKLSAgICAgICAgaWYgKCFhZGp1c3RG
b3JDdXJyZW50Q29sb3IobV90b0NvbG9yLCB0b1N0cmluZywgdGFyZ2V0RWxlbWVudCkpCisgICAg
ICAgIGlmICh0b0lzQ3VycmVudENvbG9yKQorICAgICAgICAgICAgbV90b0Jhc2ljVmFsdWUgPSBj
dXJyZW50Q29sb3JCYXNpY1ZhbHVlOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3RvQ29s
b3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOwotICAgICAg
ICBpZiAoKG1fZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiBtX3RvQ29sb3IuaXNWYWxpZCgpKSB8fCAo
bV90b0NvbG9yLmlzVmFsaWQoKSAmJiBhbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24pKQor
ICAgICAgICBpZiAoKG1fZnJvbUNvbG9yLmlzVmFsaWQoKSB8fCBmcm9tSXNDdXJyZW50Q29sb3Ip
ICYmIChtX3RvQ29sb3IuaXNWYWxpZCgpIHx8IHRvSXNDdXJyZW50Q29sb3IpCisgICAgICAgICAg
ICB8fCAobV90b0NvbG9yLmlzVmFsaWQoKSB8fCB0b0lzQ3VycmVudENvbG9yKSAmJiBhbmltYXRp
b25Nb2RlKCkgPT0gVG9BbmltYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
IGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09IE51bWJlclByb3BlcnR5KSB7CiAgICAgICAgIG1f
bnVtYmVyVW5pdCA9IFN0cmluZygpOwpAQCAtMjY4LDE2ICszNDksMjggQEAgYm9vbCBTVkdBbmlt
YXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogCiBib29sIFNWR0FuaW1hdGVFbGVtZW50Ojpj
YWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGJ5U3RyaW5nKQogeworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSB0aGlz
LT50YXJnZXRFbGVtZW50KCk7CisgICAgaWYgKCF0YXJnZXRFbGVtZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbV9mcm9tQmFzaWNWYWx1ZSA9IGluaGVyaXRzRnJvbVByb3BlcnR5KHRh
cmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgZnJvbVN0cmluZykgPyBpbmhlcml0QmFzaWNW
YWx1ZSA6IGNvbnN0YW50QmFzaWNWYWx1ZTsKKyAgICBtX3RvQmFzaWNWYWx1ZSA9IGluaGVyaXRz
RnJvbVByb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgYnlTdHJpbmcpID8g
aW5oZXJpdEJhc2ljVmFsdWUgOiBjb25zdGFudEJhc2ljVmFsdWU7CisKICAgICBBU1NFUlQoIWhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpOwogICAgIG1fcHJvcGVydHlUeXBlID0gZGV0ZXJt
aW5lUHJvcGVydHlUeXBlKGF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBl
ID09IENvbG9yUHJvcGVydHkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9
IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFhZGp1c3RGb3JDdXJyZW50Q29s
b3IobV9mcm9tQ29sb3IsIGZyb21TdHJpbmcsIHRhcmdldEVsZW1lbnQpKQotICAgICAgICAgICAg
bV9mcm9tQ29sb3IgPSBmcm9tU3RyaW5nLmlzRW1wdHkoKSA/IENvbG9yKCkgOiBTVkdDb2xvcjo6
Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJvbVN0cmluZyk7Ci0gICAgICAgIGlmICghYWRqdXN0
Rm9yQ3VycmVudENvbG9yKG1fdG9Db2xvciwgYnlTdHJpbmcsIHRhcmdldEVsZW1lbnQpKQorICAg
ICAgICBib29sIGZyb21Jc0N1cnJlbnRDb2xvciA9IGlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcp
OworICAgICAgICBib29sIGJ5SXNDdXJyZW50Q29sb3IgPSBpc0N1cnJlbnRDb2xvcihieVN0cmlu
Zyk7CisgICAgICAgIGlmIChmcm9tSXNDdXJyZW50Q29sb3IpCisgICAgICAgICAgICBtX2Zyb21C
YXNpY1ZhbHVlID0gY3VycmVudENvbG9yQmFzaWNWYWx1ZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJv
bVN0cmluZyk7CisgICAgICAgIGlmIChieUlzQ3VycmVudENvbG9yKQorICAgICAgICAgICAgbV90
b0Jhc2ljVmFsdWUgPSBjdXJyZW50Q29sb3JCYXNpY1ZhbHVlOworICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoYnlT
dHJpbmcpOwotICAgICAgICBtX3RvQ29sb3IgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRD
bGFtcChtX2Zyb21Db2xvciwgbV90b0NvbG9yKTsKLSAgICAgICAgaWYgKCFtX2Zyb21Db2xvci5p
c1ZhbGlkKCkgfHwgIW1fdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgIAorICAgICAgICBpZiAo
IW1fZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhZnJvbUlzQ3VycmVudENvbG9yCisgICAgICAgICAg
ICB8fCAhbV90b0NvbG9yLmlzVmFsaWQoKSAmJiAhYnlJc0N1cnJlbnRDb2xvcikKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBtX251bWJlclVuaXQgPSBT
dHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCShyZXZp
c2lvbiA3ODM0MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxMCArNTEsMTkgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
ZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRvU3RyaW5nKTsKIAogcHJpdmF0ZToKKyAgICAvLyBJZiB3ZSBoYXZlICdjdXJyZW50
Q29sb3InIG9yICdpbmhlcml0JyBhcyBhbmltYXRpb24gdmFsdWUsIHdlIG5lZWQgdG8gZ3JlcCB0
aGUgdmFsdWUgZHVyaW5nIHRoZSBhbmltYXRpb24KKyAgICAvLyBzaW5jZSB0aGUgdmFsdWUgY2Fu
IGJlIGFuaW1hdGVkIGl0c2VsZi4KKyAgICBlbnVtIEJhc2ljVmFsdWVDaGFuZ2UgeworICAgICAg
ICBjb25zdGFudEJhc2ljVmFsdWUsCisgICAgICAgIGN1cnJlbnRDb2xvckJhc2ljVmFsdWUsCisg
ICAgICAgIGluaGVyaXRCYXNpY1ZhbHVlCisgICAgfTsKICAgICBlbnVtIFByb3BlcnR5VHlwZSB7
IE51bWJlclByb3BlcnR5LCBDb2xvclByb3BlcnR5LCBTdHJpbmdQcm9wZXJ0eSwgUGF0aFByb3Bl
cnR5LCBQb2ludHNQcm9wZXJ0eSB9OwogICAgIFByb3BlcnR5VHlwZSBkZXRlcm1pbmVQcm9wZXJ0
eVR5cGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUpIGNvbnN0OwogICAgIFByb3BlcnR5VHlwZSBt
X3Byb3BlcnR5VHlwZTsKIAorICAgIEJhc2ljVmFsdWVDaGFuZ2UgbV9mcm9tQmFzaWNWYWx1ZTsK
KyAgICBCYXNpY1ZhbHVlQ2hhbmdlIG1fdG9CYXNpY1ZhbHVlOwogICAgIGRvdWJsZSBtX2Zyb21O
dW1iZXI7CiAgICAgZG91YmxlIG1fdG9OdW1iZXI7CiAgICAgZG91YmxlIG1fYW5pbWF0ZWROdW1i
ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA3ODM0MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnRJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJY
TGlua05hbWVzLmgiCkBAIC0yOTMsNjcgKzI5NCw1NiBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6Omhhc1ZhbGlkVGFyZ2V0CiB7CiAgICAgcmV0dXJuIHRhcmdldEVsZW1lbnQoKTsKIH0KLSAg
ICAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlSXNDU1MoY29uc3QgU3RyaW5n
JiBhdHRyaWJ1dGVOYW1lKQorCitib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0
cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5n
JiBhdHRyaWJ1dGVOYW1lKQogewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIG1hcCBv
ZiBhbGwgU1ZHIHByb3BlcnRpZXMgYW5kIHRoZWlyIGF0dHJpYnV0ZSB0eXBlcyBzbyB3ZQotICAg
IC8vIGNvdWxkIHZhbGlkYXRlIGFuaW1hdGlvbnMgYmV0dGVyLiBUaGUgc3BlYyBpcyB2ZXJ5IHZh
Z3VlIGFib3V0IHRoaXMuCi0gICAgdW5zaWduZWQgaWQgPSBjc3NQcm9wZXJ0eUlEKGF0dHJpYnV0
ZU5hbWUpOwotICAgIC8vIFNWRyByYW5nZQotICAgIGlmIChpZCA+PSBDU1NQcm9wZXJ0eUNsaXBQ
YXRoICYmIGlkIDw9IENTU1Byb3BlcnR5V3JpdGluZ01vZGUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIC8vIFJlZ3VsYXIgQ1NTIHByb3BlcnRpZXMgYWxzbyBpbiBTVkcKLSAgICByZXR1cm4g
aWQgPT0gQ1NTUHJvcGVydHlDb2xvciB8fCBpZCA9PSBDU1NQcm9wZXJ0eURpc3BsYXkgfHwgaWQg
PT0gQ1NTUHJvcGVydHlPcGFjaXR5Ci0gICAgICAgICAgICB8fCAoaWQgPj0gQ1NTUHJvcGVydHlG
b250ICYmIGlkIDw9IENTU1Byb3BlcnR5Rm9udFdlaWdodCkgCi0gICAgICAgICAgICB8fCBpZCA9
PSBDU1NQcm9wZXJ0eU92ZXJmbG93IHx8IGlkID09IENTU1Byb3BlcnR5VmlzaWJpbGl0eTsKLX0K
LSAgICAKLWJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmlidXRlSXNDU1MoKSBj
b25zdAotewotICAgIEF0dHJpYnV0ZVR5cGUgdHlwZSA9IGF0dHJpYnV0ZVR5cGUoKTsKLSAgICBp
ZiAodHlwZSA9PSBBdHRyaWJ1dGVUeXBlQ1NTKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAodHlwZSA9PSBBdHRyaWJ1dGVUeXBlWE1MKQorICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsK
KyAgICBpZiAoIXRhcmdldEVsZW1lbnQtPmlzU3R5bGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gYXR0cmlidXRlSXNDU1MoYXR0cmlidXRlTmFtZSgpKTsKKworICAgIHJl
dHVybiBTVkdTdHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9wZXJ0eShRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCBhdHRyaWJ1dGVOYW1lLCBudWxsQXRvbSkpOwogfQogCiB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBTVkdFbGVtZW50KiB0YXJnZXQgPSB0YXJnZXRFbGVtZW50KCk7CisgICAgU1ZHRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKICAgICBTdHJpbmcg
YXR0cmlidXRlTmFtZSA9IHRoaXMtPmF0dHJpYnV0ZU5hbWUoKTsKLSAgICBpZiAoIXRhcmdldCB8
fCBhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSB8fCB2YWx1ZS5pc051bGwoKSkKKyAgICBpZiAoIXRh
cmdldEVsZW1lbnQgfHwgYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkgfHwgdmFsdWUuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIGluc3RhbmNlIHRy
ZWUgdG8gZ2V0IHJlYnVpbGQuIEluc3RhbmNlcyBhcmUgdXBkYXRlZCBpbiB0aGUgbG9vcCBiZWxv
dy4KLSAgICBpZiAodGFyZ2V0LT5pc1N0eWxlZCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50Kj4odGFyZ2V0KS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh0cnVlKTsK
KyAgICBpZiAodGFyZ2V0RWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8
U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldEVsZW1lbnQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9j
a2VkKHRydWUpOwogICAgICAgICAKKyAgICBib29sIGF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkgPSBp
c1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUp
OworICAgIC8vIFN0b3AgYW5pbWF0aW9uLCBpZiBhdHRyaWJ1dGVUeXBlIGlzIHNldCB0byBDU1Mg
YnkgdGhlIHVzZXIsIGJ1dCB0aGUgYXR0cmlidXRlIGl0c2VsZiBpcyBub3QgYSBDU1MgcHJvcGVy
dHkuCisgICAgaWYgKCFhdHRyaWJ1dGVJc0NTU1Byb3BlcnR5ICYmIGF0dHJpYnV0ZVR5cGUoKSA9
PSBBdHRyaWJ1dGVUeXBlQ1NTKQorICAgICAgICByZXR1cm47CisKICAgICBFeGNlcHRpb25Db2Rl
IGVjOwotICAgIGJvb2wgaXNDU1MgPSB0YXJnZXRBdHRyaWJ1dGVJc0NTUygpOwotICAgIGlmIChp
c0NTUykgeworICAgIGlmIChhdHRyaWJ1dGVJc0NTU1Byb3BlcnR5KSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBzZXQgdGhlIG92ZXJyaWRlIHN0eWxlLCBub3QgdGhlIGlubGluZSBz
dHlsZS4KICAgICAgICAgLy8gU2FkbHkgb3ZlcnJpZGUgc3R5bGVzIGFyZSBub3QgeWV0IGltcGxl
bWVudGVkLgotICAgICAgICB0YXJnZXQtPnN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5h
bWUsIHZhbHVlLCAiIiwgZWMpOworICAgICAgICB0YXJnZXRFbGVtZW50LT5zdHlsZSgpLT5zZXRQ
cm9wZXJ0eShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgIiIsIGVjKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc2V0IHRoZSAncHJlc2VudGF0aW9uJyB2YWx1ZSwg
bm90IHRoZSBhY3R1YWwgCiAgICAgICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZS4gV2hhdGV2ZXIgdGhh
dCBtZWFucyBpbiBwcmFjdGljZS4KLSAgICAgICAgdGFyZ2V0LT5zZXRBdHRyaWJ1dGUoYXR0cmli
dXRlTmFtZSwgdmFsdWUsIGVjKTsKKyAgICAgICAgdGFyZ2V0RWxlbWVudC0+c2V0QXR0cmlidXRl
KGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCBlYyk7CiAgICAgfQogICAgIAotICAgIGlmICh0YXJnZXQt
PmlzU3R5bGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJn
ZXQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGZhbHNlKTsKKyAgICBpZiAodGFyZ2V0RWxl
bWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+
KHRhcmdldEVsZW1lbnQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGZhbHNlKTsKICAgICAK
ICAgICAvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgdXNlZCBpbiBhbiA8dXNlPiBpbnN0YW5j
ZSB0cmVlLCB1cGRhdGUgdGhhdCBhcyB3ZWxsLgotICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVu
dEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IHRhcmdldC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpOwor
ICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IHRhcmdl
dEVsZW1lbnQtPmluc3RhbmNlc0ZvckVsZW1lbnQoKTsKICAgICBjb25zdCBIYXNoU2V0PFNWR0Vs
ZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CiAg
ICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZHRWxlbWVu
dCogc2hhZG93VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKICAgICAg
ICAgaWYgKCFzaGFkb3dUcmVlRWxlbWVudCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoaXNDU1MpCisgICAgICAgIGlmIChhdHRyaWJ1dGVJc0NTU1Byb3BlcnR5KQogICAgICAg
ICAgICAgc2hhZG93VHJlZUVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5h
bWUsIHZhbHVlLCAiIiwgZWMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzaGFkb3dUcmVl
RWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCBlYyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHJldmlzaW9uIDc4MzQzKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsOCArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luRWxlbWVu
dEF0KGZsb2F0IG9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGVuZEVsZW1lbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZW5kRWxlbWVudEF0KGZsb2F0IG9mZnNldCk7Ci0gICAgCi0gICAgc3RhdGlj
IGJvb2wgYXR0cmlidXRlSXNDU1MoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVOYW1lKTsKKworICAg
IHN0YXRpYyBib29sIGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkoU1ZHRWxlbWVudCosIGNv
bnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHQW5pbWF0aW9uRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTgwLDcgKzgwLDYgQEAgcHJvdGVjdGVk
OgogICAgIAogICAgIFN0cmluZyB0YXJnZXRBdHRyaWJ1dGVCYXNlVmFsdWUoKSBjb25zdDsKICAg
ICB2b2lkIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVkVmFsdWUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgYm9vbCB0YXJnZXRBdHRyaWJ1dGVJc0NTUygpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaXNB
ZGRpdGl2ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNBY2N1bXVsYXRlZCgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNzgzNDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3Myw2ICsyNzMsMTEgQEAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIFNWR1N0eWxlZEVsZW1l
bnQ6OgogICAgIHJldHVybiBBbmltYXRlZFVua25vd247CiB9CiAKK2Jvb2wgU1ZHU3R5bGVkRWxl
bWVudDo6aXNBbmltYXRhYmxlQ1NTUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCit7CisgICAgcmV0dXJuIGNzc1Byb3BlcnR5VG9UeXBlTWFwKCkuY29udGFpbnMoYXR0ck5h
bWUpOworfQorCiB2b2lkIFNWR1N0eWxlZEVsZW1lbnQ6OmZpbGxQYXNzZWRBdHRyaWJ1dGVUb1By
b3BlcnR5VHlwZU1hcChBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgYXR0cmlidXRlVG9Qcm9w
ZXJ0eVR5cGVNYXApCiB7CiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KEhUTUxO
YW1lczo6Y2xhc3NBdHRyLCBBbmltYXRlZFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDc4MzQ1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGJvb2wpOwogCiAgICAgQW5p
bWF0ZWRBdHRyaWJ1dGVUeXBlIGFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQ1NTUHJvcGVydHkoY29u
c3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHN0YXRpYyBib29sIGlzQW5pbWF0YWJsZUNTU1Byb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3Jt
IGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNv
bnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNzgzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDE1
ICsxOTYsMTUgQEAgU3RyaW5nIFNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVGb3IoRQogICAg
IGlmIChpdCAhPSBtX3NhdmVkQmFzZVZhbHVlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7CiAgICAgCi0gICAgU1ZHRWxlbWVudCogdGFyZ2V0ID0ga2V5LmZpcnN0OworICAgIFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBrZXkuZmlyc3Q7CiAgICAgU3RyaW5nIGF0dHJpYnV0
ZU5hbWUgPSBrZXkuc2Vjb25kOwotICAgIEFTU0VSVCh0YXJnZXQpOworICAgIEFTU0VSVCh0YXJn
ZXRFbGVtZW50KTsKICAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsKICAgICBT
dHJpbmcgYmFzZVZhbHVlOwotICAgIGlmIChTVkdBbmltYXRpb25FbGVtZW50OjphdHRyaWJ1dGVJ
c0NTUyhhdHRyaWJ1dGVOYW1lKSkKLSAgICAgICAgYmFzZVZhbHVlID0gY29tcHV0ZWRTdHlsZSh0
YXJnZXQpLT5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZSkpOwor
ICAgIGlmIChTVkdBbmltYXRpb25FbGVtZW50Ojppc1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5
KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICBiYXNlVmFsdWUgPSBjb21w
dXRlZFN0eWxlKHRhcmdldEVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQo
YXR0cmlidXRlTmFtZSkpOwogICAgIGVsc2UKLSAgICAgICAgYmFzZVZhbHVlID0gdGFyZ2V0LT5n
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7CisgICAgICAgIGJhc2VWYWx1ZSA9IHRhcmdldEVs
ZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKICAgICBtX3NhdmVkQmFzZVZhbHVl
cy5hZGQoa2V5LCBiYXNlVmFsdWUpOwogICAgIHJldHVybiBiYXNlVmFsdWU7CiB9CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3ODUwMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTAyLTE0ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U1ZHIGFuaW1hdGlvbiBkb2Vzbid0IHN1cHBvcnQgYXR0cmlidXRlIHZhbHVlICdpbmhlcml0Jwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0MTAKKwor
ICAgICAgICBDaGVjayBzdXBwb3J0IGZvciAnaW5oZXJpdCcgYW5kICdjdXJyZW50Q29sb3InIG9u
IFNWRyBhbmltYXRpb25zLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJy
ZW50Q29sb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9h
bmltYXRlLWN1cnJlbnRDb2xvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9u
cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJy
ZW50Q29sb3IuanM6IEFkZGVkLgorICAgICAgICAoc2FtcGxlMSk6CisgICAgICAgIChzYW1wbGUy
KToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAoZXhlY3V0ZVRlc3QpOgorICAgICAgICAq
IHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5
LmpzOiBBZGRlZC4KKyAgICAgICAgKHNhbXBsZTEpOgorICAgICAgICAoc2FtcGxlMik6CisgICAg
ICAgIChzYW1wbGUzKToKKyAgICAgICAgKGV4ZWN1dGVUZXN0KToKKwogMjAxMS0wMi0xNCAgWGlh
b21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6
IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1
cnJlbnRDb2xvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQgQEAKK1NWRyAxLjEgZHluYW1pYyBhbmltYXRpb24gdGVzdHMKKworVGVz
dHMgYW5pbWF0aW9uIG9uICdjdXJyZW50Q29sb3InLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyNGRjAwMDAnCitQQVNTIHJlY3Quc3R5
bGUuZmlsbCBpcyAnIzgwNDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjMDA4MDAwJwor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29s
b3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1h
dGUtY3VycmVudENvbG9yLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZHluYW1pYy11cGRhdGVz
L3Jlc291cmNlcy9TVkdUZXN0Q2FzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL1NWR0FuaW1hdGlvblRlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGgxPlNWRyAxLjEgZHluYW1pYyBhbmltYXRpb24gdGVzdHM8L2gxPgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1w
cm9wZXJ0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1h
dGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorU1ZHIDEu
MSBkeW5hbWljIGFuaW1hdGlvbiB0ZXN0cworCitUZXN0cyBhbmltYXRpb24gd2l0aCAnaW5oZXJp
dCcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlY3Quc3R5bGUuZmls
bCBpcyAnI0ZGMDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjODA0MDAwJworUEFTUyBy
ZWN0LnN0eWxlLmZpbGwgaXMgJyMwMDgwMDAnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
YW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1j
c3MtcHJvcGVydHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9keW5hbWljLXVwZGF0ZXMvcmVz
b3VyY2VzL1NWR1Rlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
U1ZHQW5pbWF0aW9uVGVzdENhc2UuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aDE+
U1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlvbiB0ZXN0czwvaDE+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmlt
YXRlLWN1cnJlbnRDb2xvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1jdXJyZW50
Q29sb3IuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0
cyBhbmltYXRpb24gb24gJ2N1cnJlbnRDb2xvcicuIik7CitjcmVhdGVTVkdUZXN0Q2FzZSgpOwor
CisvLyBTZXR1cCB0ZXN0IGRvY3VtZW50Cit2YXIgcmVjdCA9IGNyZWF0ZVNWR0VsZW1lbnQoInJl
Y3QiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJyZWN0Iik7CityZWN0LnNldEF0dHJpYnV0
ZSgid2lkdGgiLCAiMTAwcHgiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCAiMTAwcHgi
KTsKK3JlY3Quc2V0QXR0cmlidXRlKCJmaWxsIiwgInJlZCIpOworcmVjdC5zZXRBdHRyaWJ1dGUo
ImNvbG9yIiwgImdyZWVuIik7CisKK3ZhciBhbmltYXRlQ3VycmVudENvbG9yID0gY3JlYXRlU1ZH
RWxlbWVudCgiYW5pbWF0ZUNvbG9yIik7CithbmltYXRlQ3VycmVudENvbG9yLnNldEF0dHJpYnV0
ZSgiaWQiLCAiYW5pbWF0ZUN1cnJlbnRDb2xvciIpOworYW5pbWF0ZUN1cnJlbnRDb2xvci5zZXRB
dHRyaWJ1dGUoImF0dHJpYnV0ZU5hbWUiLCAiZmlsbCIpOworYW5pbWF0ZUN1cnJlbnRDb2xvci5z
ZXRBdHRyaWJ1dGUoImZyb20iLCAicmVkIik7CithbmltYXRlQ3VycmVudENvbG9yLnNldEF0dHJp
YnV0ZSgidG8iLCAiY3VycmVudENvbG9yIik7CithbmltYXRlQ3VycmVudENvbG9yLnNldEF0dHJp
YnV0ZSgiZHVyIiwgIjNzIik7CithbmltYXRlQ3VycmVudENvbG9yLnNldEF0dHJpYnV0ZSgiYmVn
aW4iLCAiY2xpY2siKTsKK2FuaW1hdGVDdXJyZW50Q29sb3Iuc2V0QXR0cmlidXRlKCJmaWxsIiwg
ImZyZWV6ZSIpOworcmVjdC5hcHBlbmRDaGlsZChhbmltYXRlQ3VycmVudENvbG9yKTsKK3Jvb3RT
VkdFbGVtZW50LmFwcGVuZENoaWxkKHJlY3QpOworCisvLyBTZXR1cCBhbmltYXRpb24gdGVzdAor
ZnVuY3Rpb24gc2FtcGxlMSgpIHsKKyAgICAvLyBDaGVjayBpbml0aWFsL2VuZCBjb25kaXRpb25z
CisgICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInI0ZGMDAwMCciKTsKK30KKworZnVu
Y3Rpb24gc2FtcGxlMigpIHsKKyAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucworICAg
IHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyM4MDQwMDAnIik7Cit9CisKK2Z1bmN0aW9u
IHNhbXBsZTMoKSB7CisgICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRpdGlvbnMKKyAgICBzaG91
bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjMDA4MDAwJyIpOworfQorCitmdW5jdGlvbiBleGVj
dXRlVGVzdCgpIHsKKyAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IFsKKyAgICAgICAgLy8gW2Fu
aW1hdGlvbklkLCB0aW1lLCBlbGVtZW50SWQsIHNhbXBsZUNhbGxiYWNrXQorICAgICAgICBbImFu
aW1hdGVDdXJyZW50Q29sb3IiLCAwLjAsICAgICJyZWN0Iiwgc2FtcGxlMV0sCisgICAgICAgIFsi
YW5pbWF0ZUN1cnJlbnRDb2xvciIsIDEuNSwgICAgInJlY3QiLCBzYW1wbGUyXSwKKyAgICAgICAg
WyJhbmltYXRlQ3VycmVudENvbG9yIiwgMy4wLCAgICAicmVjdCIsIHNhbXBsZTNdCisgICAgXTsK
KworICAgIHJ1bkFuaW1hdGlvblRlc3QoZXhwZWN0ZWRWYWx1ZXMpOworfQorCisvLyBCZWdpbiB0
ZXN0IGFzeW5jCityZWN0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICJleGVjdXRlVGVzdCgpIik7
Cit3aW5kb3cuc2V0VGltZW91dCgidHJpZ2dlclVwZGF0ZSg1MCwgNTApIiwgMCk7Cit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5o
ZXJpdC1jc3MtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorZGVzY3JpcHRpb24oIlRlc3RzIGFuaW1hdGlvbiB3
aXRoICdpbmhlcml0Jy4iKTsKK2NyZWF0ZVNWR1Rlc3RDYXNlKCk7CisKKy8vIFNldHVwIHRlc3Qg
ZG9jdW1lbnQKK3ZhciBnID0gY3JlYXRlU1ZHRWxlbWVudCgiZyIpOworZy5zZXRBdHRyaWJ1dGUo
ImZpbGwiLCAiZ3JlZW4iKTsKKwordmFyIHJlY3QgPSBjcmVhdGVTVkdFbGVtZW50KCJyZWN0Iik7
CityZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCAicmVjdCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoIndp
ZHRoIiwgIjEwMHB4Iik7CityZWN0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgIjEwMHB4Iik7City
ZWN0LnNldEF0dHJpYnV0ZSgiZmlsbCIsICJyZWQiKTsKK2cuYXBwZW5kQ2hpbGQocmVjdCk7CisK
K3ZhciBhbmltYXRlSW5oZXJpdCA9IGNyZWF0ZVNWR0VsZW1lbnQoImFuaW1hdGVDb2xvciIpOwor
YW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJpZCIsICJhbmltYXRlSW5oZXJpdCIpOworYW5p
bWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJhdHRyaWJ1dGVOYW1lIiwgImZpbGwiKTsKK2FuaW1h
dGVJbmhlcml0LnNldEF0dHJpYnV0ZSgiZnJvbSIsICJyZWQiKTsKK2FuaW1hdGVJbmhlcml0LnNl
dEF0dHJpYnV0ZSgidG8iLCAiaW5oZXJpdCIpOworYW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRl
KCJkdXIiLCAiM3MiKTsKK2FuaW1hdGVJbmhlcml0LnNldEF0dHJpYnV0ZSgiYmVnaW4iLCAiY2xp
Y2siKTsKK2FuaW1hdGVJbmhlcml0LnNldEF0dHJpYnV0ZSgiZmlsbCIsICJmcmVlemUiKTsKK3Jl
Y3QuYXBwZW5kQ2hpbGQoYW5pbWF0ZUluaGVyaXQpOworcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hp
bGQoZyk7CisKKy8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CitmdW5jdGlvbiBzYW1wbGUxKCkgewor
ICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKKyAgICBzaG91bGRCZSgicmVjdC5z
dHlsZS5maWxsIiwgIicjRkYwMDAwJyIpOworfQorCitmdW5jdGlvbiBzYW1wbGUyKCkgeworICAg
IC8vIENoZWNrIGhhbGYtdGltZSBjb25kaXRpb25zCisgICAgc2hvdWxkQmUoInJlY3Quc3R5bGUu
ZmlsbCIsICInIzgwNDAwMCciKTsKK30KKworZnVuY3Rpb24gc2FtcGxlMygpIHsKKyAgICAvLyBD
aGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucworICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwi
LCAiJyMwMDgwMDAnIik7Cit9CisKK2Z1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIGNvbnN0
IGV4cGVjdGVkVmFsdWVzID0gWworICAgICAgICAvLyBbYW5pbWF0aW9uSWQsIHRpbWUsIGVsZW1l
bnRJZCwgc2FtcGxlQ2FsbGJhY2tdCisgICAgICAgIFsiYW5pbWF0ZUluaGVyaXQiLCAwLjAsICAg
ICJyZWN0Iiwgc2FtcGxlMV0sCisgICAgICAgIFsiYW5pbWF0ZUluaGVyaXQiLCAxLjUsICAgICJy
ZWN0Iiwgc2FtcGxlMl0sCisgICAgICAgIFsiYW5pbWF0ZUluaGVyaXQiLCAzLjAsICAgICJyZWN0
Iiwgc2FtcGxlM10KKyAgICBdOworCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVl
cyk7Cit9CisKKy8vIEJlZ2luIHRlc3QgYXN5bmMKK3JlY3Quc2V0QXR0cmlidXRlKCJvbmNsaWNr
IiwgImV4ZWN1dGVUZXN0KCkiKTsKK3dpbmRvdy5zZXRUaW1lb3V0KCJ0cmlnZ2VyVXBkYXRlKDUw
LCA1MCkiLCAwKTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82367</attachid>
            <date>2011-02-14 15:00:46 -0800</date>
            <delta_ts>2011-02-15 01:33:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54410-20110215000044.patch</filename>
            <type>text/plain</type>
            <size>29580</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDItMTQgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhdHRyaWJ1dGUg
dmFsdWUgJ2luaGVyaXQnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDQxMAorCisgICAgICAgIFNWRyBhbmltYXRpb24gZG9lcyBub3Qgc3VwcG9ydCAn
aW5oZXJpdCcgYXMgdmFsdWUgZm9yIENTUyBwcm9wZXJ0eSBhbmltYXRpb25zLiBXaXRoIHRoZSBw
YXRjaCwgU1ZHIGRldGVybWluZXMKKyAgICAgICAgaWYgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgdGFy
Z2V0IGVsZW1lbnQgaXMgYW4gYW5pbWF0YWJsZSBDU1MgUHJvcGVydHkgYW5kIGNvbXB1dGVzIHRo
ZSBzdHlsZSBkdXJpbmcgdGhlCisgICAgICAgIGFuaW1hdGlvbi4KKworICAgICAgICBUZXN0czog
c3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuaHRtbAorICAgICAgICAgICAgICAg
c3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sCisKKyAgICAg
ICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0
Rm9yQ3VycmVudENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmFkdWp1c3RGb3JJbmhlcml0YW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0
ZWRWYWx1ZSk6IEdldCB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgYXR0cmlidXRlIGZvciAnaW5oZXJp
dCcKKyAgICAgICAgb3IgJ2N1cnJlbnRDb2xvcicgZHVyaW5nIHRoZSBhbmltYXRpb24sIHNpbmNl
IHRoZSB2YWx1ZXMgY291bGQgYmUgYW5pbWF0ZWQgdGhlbXNlbHZlcy4KKyAgICAgICAgKFdlYkNv
cmU6OmluaGVyaXRzRnJvbVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ3VycmVudENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMpOiBDaGVjayBpZiAnZnJvbScsICdieScgb3IgJ3RvJyB2YWx1ZSBoYXMgdGhl
CisgICAgICAgIHN0cmluZyAnaW5oZXJpdCcgb3IgJ2N1cnJlbnRDb2xvcicgYW5kIGlmIHRoZSBh
dHRyaWJ1dGUgc3VwcG9ydHMgb25lIG9mIHRoZXNlIHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOiBEaXR0by4KKyAg
ICAgICAgKiBzdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpp
c1RhcmdldEF0dHJpYnV0ZUNTU1Byb3BlcnR5KTogQ2hlY2sgaWYgdGFyZ2V0IGVsZW1lbnQgaXMg
c3R5bGFibGUgYW5kCisgICAgICAgIHRoZSBhdHRyaWJ1dGUgaXMgYW4gYW5pbWF0YWJsZSBDU1Mg
cHJvcGVydHkgd2l0aCB0aGUgdXNlIG9mIGEgQ1NTIHByb3BlcnR5IG1hcCBpbiBTVkdTdHlsZWRF
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0
QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSk6IFRha2UgdGFyZ2V0RWxlbWVudCBpbnN0ZWFkIG9mIHRh
cmdldAorICAgICAgICBmb3IgY29uc2lzdGVuY3kgcmVhc29ucy4KKyAgICAgICAgKiBzdmcvU1ZH
QW5pbWF0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDog
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9w
ZXJ0eSk6IENoZWNrIGlmIGF0dHJpYnV0ZSBpcyBhIGFuaW1hdGFibGUgQ1NTIHByb3BlcnR5Lgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5jcHA6IFVzZSB0aGUgbmV3IGZ1bmN0aW9uIGlzVGFyZ2V0QXR0
cmlidXRlQ1NTUHJvcGVydHkgdG8gZGV0ZXJtaW5lCisgICAgICAgIGlmIHRoZSB0YXJnZXQgZWxl
bWVudCBpcyBzdHlsYWJsZSBhbmQgdGhlIGF0dHJpYnV0ZSBpcyBhbiBhbmltYXRhYmxlIENTUyBw
cm9wZXJ0eS4KKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpiYXNlVmFsdWVG
b3IpOgorCiAyMDExLTAyLTE0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3ODM0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDggQEAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNpbmNs
dWRlICJTVkdBbmltYXRlRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNvbG9yRGlzdGFuY2UuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKQEAgLTM1LDYgKzM3LDcgQEAKICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyRmFj
dG9yeS5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRM
aXN0LmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC04NSwxNSArODgsMzAgQEAgc3RhdGljIGJvb2wgcGFyc2VOdW1iZXJWYWx1ZUFu
ZFVuaXQoY29ucwogICAgIHJldHVybiBvazsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGFkanVz
dEZvckN1cnJlbnRDb2xvcihDb2xvciYgY29sb3IsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFNWR0Vs
ZW1lbnQqIHRhcmdldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RGb3JDdXJyZW50Q29sb3Io
U1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgQ29sb3ImIGNvbG9yKQogewotICAgIGlmICghdGFy
Z2V0IHx8ICF0YXJnZXQtPmlzU3R5bGVkKCkgfHwgdmFsdWUgIT0gImN1cnJlbnRDb2xvciIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CiAgICAgCi0g
ICAgaWYgKFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXQtPnJlbmRlcmVyKCkp
CisgICAgaWYgKFJlbmRlck9iamVjdCogdGFyZ2V0UmVuZGVyZXIgPSB0YXJnZXRFbGVtZW50LT5y
ZW5kZXJlcigpKQogICAgICAgICBjb2xvciA9IHRhcmdldFJlbmRlcmVyLT5zdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CisgICAgZWxzZQorICAgICAgICBj
b2xvciA9IENvbG9yKCk7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIGFkdWp1c3RGb3JJbmhlcml0YW5jZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgLy8gRklYTUU6IE5lZWRzIHRvIGhhbmRs
ZSBhbmltYXRpb24gdHlwZXMgZGlyZWN0bHkuCisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwor
ICAgIFN0cmluZyB2YWx1ZTsKKworICAgIEVsZW1lbnQqIHBhcmVudCA9IHRhcmdldEVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1NWR0VsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIFNWR0VsZW1lbnQqIHN2Z1BhcmVudCA9
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXJlbnQpOworICAgIGlmICghc3ZnUGFyZW50LT5p
c1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgCisgICAgcmV0dXJuIGNvbXB1
dGVkU3R5bGUoc3ZnUGFyZW50KS0+Z2V0UHJvcGVydHlWYWx1ZShjc3NQcm9wZXJ0eUlEKGF0dHJp
YnV0ZU5hbWUpKTsKIH0KIAogU1ZHQW5pbWF0ZUVsZW1lbnQ6OlByb3BlcnR5VHlwZSBTVkdBbmlt
YXRlRWxlbWVudDo6ZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRl
KSBjb25zdApAQCAtMTE1LDEzICsxMzMsMjEgQEAgU1ZHQW5pbWF0ZUVsZW1lbnQ6OlByb3BlcnR5
VHlwZSBTVkdBbmltYQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQq
IHJlc3VsdEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKHBlcmNlbnRhZ2UgPj0gMC5mICYmIHBlcmNl
bnRhZ2UgPD0gMS5mKTsKKyAgICBBU1NFUlQocGVyY2VudGFnZSA+PSAwICYmIHBlcmNlbnRhZ2Ug
PD0gMSk7CiAgICAgQVNTRVJUKHJlc3VsdEVsZW1lbnQpOwotICAgIGJvb2wgaXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uID0gcGVyY2VudGFnZSA8IDAuNTsKKyAgICBib29sIGlzSW5GaXJzdEhhbGZP
ZkFuaW1hdGlvbiA9IHBlcmNlbnRhZ2UgPCAwLjVmOwogICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0
aW9uTW9kZSA9IHRoaXMtPmFuaW1hdGlvbk1vZGUoKTsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRF
bGVtZW50ID0gMDsKKyAgICAvLyBBdm9pZCB0YXJnZXRFbGVtZW50KCkgY2FsbCBpZiBwb3NzaWJs
ZS4gSXQgbWlnaHQgc2xvdyBkb3duIGFuaW1hdGlvbnMuCisgICAgaWYgKG1fZnJvbUJhc2ljVmFs
dWUgPT0gaW5oZXJpdEJhc2ljVmFsdWUgfHwgbV90b0Jhc2ljVmFsdWUgPT0gaW5oZXJpdEJhc2lj
VmFsdWUKKyAgICAgICAgfHwgbV9mcm9tQmFzaWNWYWx1ZSA9PSBjdXJyZW50Q29sb3JCYXNpY1Zh
bHVlIHx8IG1fdG9CYXNpY1ZhbHVlID09IGN1cnJlbnRDb2xvckJhc2ljVmFsdWUpIHsKKyAgICAg
ICAgdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCF0
YXJnZXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBpZiAo
aGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKLSAgICAgICAgcGVyY2VudGFnZSA9IDEuZjsK
KyAgICAgICAgcGVyY2VudGFnZSA9IDE7CiAgICAgaWYgKCFyZXN1bHRFbGVtZW50LT5oYXNUYWdO
YW1lKFNWR05hbWVzOjphbmltYXRlVGFnKSAmJiAhcmVzdWx0RWxlbWVudC0+aGFzVGFnTmFtZShT
VkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSAKICAgICAgICAgJiYgIXJlc3VsdEVsZW1lbnQtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNCw2ICsx
NjAsMTYgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQogICAgICAg
ICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAgICAgICAgIG1fZnJvbU51
bWJlciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWROdW1iZXI7CiAgICAgICAgIAorICAgICAgICAvLyBH
ZXQgY3VycmVudCB2YWx1ZXMgb24gcHJvcGVydHkgdmFsdWUgJ2N1cnJlbnRDb2xvcicgYXMgd2Vs
bCBhcyAnaW5oZXJpdCcKKyAgICAgICAgaWYgKG1fZnJvbUJhc2ljVmFsdWUgPT0gaW5oZXJpdEJh
c2ljVmFsdWUpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoYWR1
anVzdEZvckluaGVyaXRhbmNlKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSksIG1fZnJv
bU51bWJlciwgbV9udW1iZXJVbml0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1fdG9CYXNpY1ZhbHVlID09IGluaGVyaXRCYXNpY1ZhbHVlKSB7Cisg
ICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyVmFsdWVBbmRVbml0KGFkdWp1c3RGb3JJbmhlcml0
YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpLCBtX3RvTnVtYmVyLCBtX251bWJl
clVuaXQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGRv
dWJsZSBudW1iZXI7CiAgICAgICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNNb2RlRGlzY3JldGUp
CiAgICAgICAgICAgICBudW1iZXIgPSBpc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21O
dW1iZXIgOiBtX3RvTnVtYmVyOwpAQCAtMTUyLDYgKzE4OCwxNyBAQCB2b2lkIFNWR0FuaW1hdGVF
bGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9y
UHJvcGVydHkpIHsKICAgICAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pCiAg
ICAgICAgICAgICBtX2Zyb21Db2xvciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWRDb2xvcjsKKworICAg
ICAgICAvLyBHZXQgY3VycmVudCB2YWx1ZXMgb24gcHJvcGVydHkgdmFsdWUgJ2N1cnJlbnRDb2xv
cicgYW5kICdpbmhlcml0JworICAgICAgICBpZiAobV9mcm9tQmFzaWNWYWx1ZSA9PSBjdXJyZW50
Q29sb3JCYXNpY1ZhbHVlKQorICAgICAgICAgICAgYWRqdXN0Rm9yQ3VycmVudENvbG9yKHRhcmdl
dEVsZW1lbnQsIG1fZnJvbUNvbG9yKTsKKyAgICAgICAgZWxzZSBpZiAobV9mcm9tQmFzaWNWYWx1
ZSA9PSBpbmhlcml0QmFzaWNWYWx1ZSkKKyAgICAgICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGFkdWp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRF
bGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpKTsKKyAgICAgICAgaWYgKG1fdG9CYXNpY1ZhbHVlID09
IGN1cnJlbnRDb2xvckJhc2ljVmFsdWUpCisgICAgICAgICAgICBhZGp1c3RGb3JDdXJyZW50Q29s
b3IodGFyZ2V0RWxlbWVudCwgbV90b0NvbG9yKTsKKyAgICAgICAgZWxzZSBpZiAobV90b0Jhc2lj
VmFsdWUgPT0gaW5oZXJpdEJhc2ljVmFsdWUpCisgICAgICAgICAgICBtX3RvQ29sb3IgPSBTVkdD
b2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoYWR1anVzdEZvckluaGVyaXRhbmNlKHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSkpOworCiAgICAgICAgIENvbG9yIGNvbG9yOwogICAg
ICAgICBpZiAoY2FsY01vZGUoKSA9PSBDYWxjTW9kZURpc2NyZXRlKQogICAgICAgICAgICAgY29s
b3IgPSBpc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Db2xvciA6IG1fdG9Db2xvcjsK
QEAgLTIxNiw3ICsyNjMsMTMgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5p
bWF0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChhbmltYXRpb25Nb2RlID09
IEZyb21Ub0FuaW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IGFuaW1h
dGlvbk1vZGUgPT0gVmFsdWVzQW5pbWF0aW9uKTsKLSAgICBpZiAoKGFuaW1hdGlvbk1vZGUgPT0g
RnJvbVRvQW5pbWF0aW9uICYmIHBlcmNlbnRhZ2UgPiAwLjVmKSB8fCBhbmltYXRpb25Nb2RlID09
IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMS4wZikKKyAgICAvLyBHZXQgY3VycmVudCB2
YWx1ZXMgb24gcHJvcGVydHkgdmFsdWUgJ2N1cnJlbnRDb2xvcicgYW5kICdpbmhlcml0JworICAg
IGlmIChtX2Zyb21CYXNpY1ZhbHVlID09IGluaGVyaXRCYXNpY1ZhbHVlKQorICAgICAgICBtX2Zy
b21TdHJpbmcgPSBhZHVqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRl
TmFtZSgpKTsKKyAgICBpZiAobV90b0Jhc2ljVmFsdWUgPT0gaW5oZXJpdEJhc2ljVmFsdWUpCisg
ICAgICAgIG1fdG9TdHJpbmcgPSBhZHVqdXN0Rm9ySW5oZXJpdGFuY2UodGFyZ2V0RWxlbWVudCwg
YXR0cmlidXRlTmFtZSgpKTsKKworICAgIGlmICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9Bbmlt
YXRpb24gJiYgcGVyY2VudGFnZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRp
b24gfHwgcGVyY2VudGFnZSA9PSAxKQogICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkU3RyaW5n
ID0gbV90b1N0cmluZzsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRTdHJp
bmcgPSBtX2Zyb21TdHJpbmc7CkBAIC0yMjQsMTcgKzI3Nyw0NSBAQCB2b2lkIFNWR0FuaW1hdGVF
bGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgcmVzdWx0cy0+bV9wcm9wZXJ0eVR5cGUgPSBT
dHJpbmdQcm9wZXJ0eTsKIH0KIAorc3RhdGljIGJvb2wgaW5oZXJpdHNGcm9tUHJvcGVydHkoU1ZH
RWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaW5oZXJpdCwgKCJpbmhlcml0Iikp
OworCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZSAhPSBpbmhlcml0IHx8ICF0YXJn
ZXRFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5pbWF0YWJsZUNTU1Byb3BlcnR5KFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUsIG51bGxBdG9tKSk7Cit9CisKK3N0YXRpYyBib29sIGlz
Q3VycmVudENvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGN1cnJlbnRDb2xvciwgKCJjdXJyZW50Q29sb3IiKSk7
CisgICAgcmV0dXJuIHZhbHVlID09IGN1cnJlbnRDb2xvcjsKK30KKwogYm9vbCBTVkdBbmltYXRl
RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVt
ZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fZnJvbUJhc2ljVmFsdWUgPSBpbmhlcml0c0Zyb21Q
cm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGZyb21TdHJpbmcpID8gaW5o
ZXJpdEJhc2ljVmFsdWUgOiBjb25zdGFudEJhc2ljVmFsdWU7CisgICAgbV90b0Jhc2ljVmFsdWUg
PSBpbmhlcml0c0Zyb21Qcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIHRv
U3RyaW5nKSA/IGluaGVyaXRCYXNpY1ZhbHVlIDogY29uc3RhbnRCYXNpY1ZhbHVlOworCiAgICAg
Ly8gRklYTUU6IE5lZWRzIG1vcmUgc29saWQgd2F5IGRldGVybWluZSB0YXJnZXQgYXR0cmlidXRl
IHR5cGUuCiAgICAgbV9wcm9wZXJ0eVR5cGUgPSBkZXRlcm1pbmVQcm9wZXJ0eVR5cGUoYXR0cmli
dXRlTmFtZSgpKTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkgewot
ICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgp
OwotICAgICAgICBpZiAoIWFkanVzdEZvckN1cnJlbnRDb2xvcihtX2Zyb21Db2xvciwgZnJvbVN0
cmluZywgdGFyZ2V0RWxlbWVudCkpCisgICAgICAgIGJvb2wgZnJvbUlzQ3VycmVudENvbG9yID0g
aXNDdXJyZW50Q29sb3IoZnJvbVN0cmluZyk7CisgICAgICAgIGJvb2wgdG9Jc0N1cnJlbnRDb2xv
ciA9IGlzQ3VycmVudENvbG9yKHRvU3RyaW5nKTsKKyAgICAgICAgaWYgKGZyb21Jc0N1cnJlbnRD
b2xvcikKKyAgICAgICAgICAgIG1fZnJvbUJhc2ljVmFsdWUgPSBjdXJyZW50Q29sb3JCYXNpY1Zh
bHVlOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpj
b2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsKLSAgICAgICAgaWYgKCFhZGp1c3RG
b3JDdXJyZW50Q29sb3IobV90b0NvbG9yLCB0b1N0cmluZywgdGFyZ2V0RWxlbWVudCkpCisgICAg
ICAgIGlmICh0b0lzQ3VycmVudENvbG9yKQorICAgICAgICAgICAgbV90b0Jhc2ljVmFsdWUgPSBj
dXJyZW50Q29sb3JCYXNpY1ZhbHVlOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3RvQ29s
b3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOwotICAgICAg
ICBpZiAoKG1fZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiBtX3RvQ29sb3IuaXNWYWxpZCgpKSB8fCAo
bV90b0NvbG9yLmlzVmFsaWQoKSAmJiBhbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24pKQor
ICAgICAgICBpZiAoKChtX2Zyb21Db2xvci5pc1ZhbGlkKCkgfHwgZnJvbUlzQ3VycmVudENvbG9y
KSAmJiAobV90b0NvbG9yLmlzVmFsaWQoKSB8fCB0b0lzQ3VycmVudENvbG9yKSkKKyAgICAgICAg
ICAgIHx8ICgobV90b0NvbG9yLmlzVmFsaWQoKSB8fCB0b0lzQ3VycmVudENvbG9yKSAmJiBhbmlt
YXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgewogICAgICAg
ICBtX251bWJlclVuaXQgPSBTdHJpbmcoKTsKQEAgLTI2OCwxNiArMzQ5LDI4IEBAIGJvb2wgU1ZH
QW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmQKIAogYm9vbCBTVkdBbmltYXRlRWxlbWVu
dDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29u
c3QgU3RyaW5nJiBieVN0cmluZykKIHsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0g
dGhpcy0+dGFyZ2V0RWxlbWVudCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIG1fZnJvbUJhc2ljVmFsdWUgPSBpbmhlcml0c0Zyb21Qcm9wZXJ0
eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGZyb21TdHJpbmcpID8gaW5oZXJpdEJh
c2ljVmFsdWUgOiBjb25zdGFudEJhc2ljVmFsdWU7CisgICAgbV90b0Jhc2ljVmFsdWUgPSBpbmhl
cml0c0Zyb21Qcm9wZXJ0eSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGJ5U3RyaW5n
KSA/IGluaGVyaXRCYXNpY1ZhbHVlIDogY29uc3RhbnRCYXNpY1ZhbHVlOworCiAgICAgQVNTRVJU
KCFoYXNUYWdOYW1lKFNWR05hbWVzOjpzZXRUYWcpKTsKICAgICBtX3Byb3BlcnR5VHlwZSA9IGRl
dGVybWluZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwogICAgIGlmIChtX3Byb3BlcnR5
VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1l
bnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmICghYWRqdXN0Rm9yQ3VycmVu
dENvbG9yKG1fZnJvbUNvbG9yLCBmcm9tU3RyaW5nLCB0YXJnZXRFbGVtZW50KSkKLSAgICAgICAg
ICAgIG1fZnJvbUNvbG9yID0gZnJvbVN0cmluZy5pc0VtcHR5KCkgPyBDb2xvcigpIDogU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGZyb21TdHJpbmcpOwotICAgICAgICBpZiAoIWFk
anVzdEZvckN1cnJlbnRDb2xvcihtX3RvQ29sb3IsIGJ5U3RyaW5nLCB0YXJnZXRFbGVtZW50KSkK
KyAgICAgICAgYm9vbCBmcm9tSXNDdXJyZW50Q29sb3IgPSBpc0N1cnJlbnRDb2xvcihmcm9tU3Ry
aW5nKTsKKyAgICAgICAgYm9vbCBieUlzQ3VycmVudENvbG9yID0gaXNDdXJyZW50Q29sb3IoYnlT
dHJpbmcpOworICAgICAgICBpZiAoZnJvbUlzQ3VycmVudENvbG9yKQorICAgICAgICAgICAgbV9m
cm9tQmFzaWNWYWx1ZSA9IGN1cnJlbnRDb2xvckJhc2ljVmFsdWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fZnJvbUNvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5n
KGZyb21TdHJpbmcpOworICAgICAgICBpZiAoYnlJc0N1cnJlbnRDb2xvcikKKyAgICAgICAgICAg
IG1fdG9CYXNpY1ZhbHVlID0gY3VycmVudENvbG9yQmFzaWNWYWx1ZTsKKyAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV90b0NvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5n
KGJ5U3RyaW5nKTsKLSAgICAgICAgbV90b0NvbG9yID0gQ29sb3JEaXN0YW5jZTo6YWRkQ29sb3Jz
QW5kQ2xhbXAobV9mcm9tQ29sb3IsIG1fdG9Db2xvcik7Ci0gICAgICAgIGlmICghbV9mcm9tQ29s
b3IuaXNWYWxpZCgpIHx8ICFtX3RvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAKKyAgICAgICAg
aWYgKCghbV9mcm9tQ29sb3IuaXNWYWxpZCgpICYmICFmcm9tSXNDdXJyZW50Q29sb3IpCisgICAg
ICAgICAgICB8fCAoIW1fdG9Db2xvci5pc1ZhbGlkKCkgJiYgIWJ5SXNDdXJyZW50Q29sb3IpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbnVtYmVy
VW5pdCA9IFN0cmluZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50
LmgJKHJldmlzaW9uIDc4MzQzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEwICs1MSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcs
IGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwogCiBwcml2YXRlOgorICAgIC8vIElmIHdlIGhhdmUg
J2N1cnJlbnRDb2xvcicgb3IgJ2luaGVyaXQnIGFzIGFuaW1hdGlvbiB2YWx1ZSwgd2UgbmVlZCB0
byBncmVwIHRoZSB2YWx1ZSBkdXJpbmcgdGhlIGFuaW1hdGlvbgorICAgIC8vIHNpbmNlIHRoZSB2
YWx1ZSBjYW4gYmUgYW5pbWF0ZWQgaXRzZWxmLgorICAgIGVudW0gQmFzaWNWYWx1ZUNoYW5nZSB7
CisgICAgICAgIGNvbnN0YW50QmFzaWNWYWx1ZSwKKyAgICAgICAgY3VycmVudENvbG9yQmFzaWNW
YWx1ZSwKKyAgICAgICAgaW5oZXJpdEJhc2ljVmFsdWUKKyAgICB9OwogICAgIGVudW0gUHJvcGVy
dHlUeXBlIHsgTnVtYmVyUHJvcGVydHksIENvbG9yUHJvcGVydHksIFN0cmluZ1Byb3BlcnR5LCBQ
YXRoUHJvcGVydHksIFBvaW50c1Byb3BlcnR5IH07CiAgICAgUHJvcGVydHlUeXBlIGRldGVybWlu
ZVByb3BlcnR5VHlwZShjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSkgY29uc3Q7CiAgICAgUHJvcGVy
dHlUeXBlIG1fcHJvcGVydHlUeXBlOwogCisgICAgQmFzaWNWYWx1ZUNoYW5nZSBtX2Zyb21CYXNp
Y1ZhbHVlOworICAgIEJhc2ljVmFsdWVDaGFuZ2UgbV90b0Jhc2ljVmFsdWU7CiAgICAgZG91Ymxl
IG1fZnJvbU51bWJlcjsKICAgICBkb3VibGUgbV90b051bWJlcjsKICAgICBkb3VibGUgbV9hbmlt
YXRlZE51bWJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDc4MzQzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTI5Myw2NyArMjk0LDU2IEBAIGJvb2wgU1ZHQW5pbWF0
aW9uRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQKIHsKICAgICByZXR1cm4gdGFyZ2V0RWxlbWVudCgp
OwogfQotICAgIAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50OjphdHRyaWJ1dGVJc0NTUyhjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCisKK2Jvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNU
YXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZl
IGEgbWFwIG9mIGFsbCBTVkcgcHJvcGVydGllcyBhbmQgdGhlaXIgYXR0cmlidXRlIHR5cGVzIHNv
IHdlCi0gICAgLy8gY291bGQgdmFsaWRhdGUgYW5pbWF0aW9ucyBiZXR0ZXIuIFRoZSBzcGVjIGlz
IHZlcnkgdmFndWUgYWJvdXQgdGhpcy4KLSAgICB1bnNpZ25lZCBpZCA9IGNzc1Byb3BlcnR5SUQo
YXR0cmlidXRlTmFtZSk7Ci0gICAgLy8gU1ZHIHJhbmdlCi0gICAgaWYgKGlkID49IENTU1Byb3Bl
cnR5Q2xpcFBhdGggJiYgaWQgPD0gQ1NTUHJvcGVydHlXcml0aW5nTW9kZSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgLy8gUmVndWxhciBDU1MgcHJvcGVydGllcyBhbHNvIGluIFNWRwotICAg
IHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eUNvbG9yIHx8IGlkID09IENTU1Byb3BlcnR5RGlzcGxh
eSB8fCBpZCA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkKLSAgICAgICAgICAgIHx8IChpZCA+PSBDU1NQ
cm9wZXJ0eUZvbnQgJiYgaWQgPD0gQ1NTUHJvcGVydHlGb250V2VpZ2h0KSAKLSAgICAgICAgICAg
IHx8IGlkID09IENTU1Byb3BlcnR5T3ZlcmZsb3cgfHwgaWQgPT0gQ1NTUHJvcGVydHlWaXNpYmls
aXR5OwotfQotICAgIAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGVJ
c0NTUygpIGNvbnN0Ci17Ci0gICAgQXR0cmlidXRlVHlwZSB0eXBlID0gYXR0cmlidXRlVHlwZSgp
OwotICAgIGlmICh0eXBlID09IEF0dHJpYnV0ZVR5cGVDU1MpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICh0eXBlID09IEF0dHJpYnV0ZVR5cGVYTUwpCisgICAgQVNTRVJUKHRhcmdldEVs
ZW1lbnQpOworICAgIGlmICghdGFyZ2V0RWxlbWVudC0+aXNTdHlsZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBhdHRyaWJ1dGVJc0NTUyhhdHRyaWJ1dGVOYW1lKCkpOwor
CisgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5pbWF0YWJsZUNTU1Byb3BlcnR5KFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUsIG51bGxBdG9tKSk7CiB9CiAKIHZv
aWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghaGFzVmFsaWRUYXJnZXQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IHRhcmdldEVsZW1lbnQoKTsKKyAg
ICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVudCgpOwogICAg
IFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmlidXRlTmFtZSgpOwotICAgIGlmICgh
dGFyZ2V0IHx8IGF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpIHx8IHZhbHVlLmlzTnVsbCgpKQorICAg
IGlmICghdGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSB8fCB2YWx1ZS5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgaW5z
dGFuY2UgdHJlZSB0byBnZXQgcmVidWlsZC4gSW5zdGFuY2VzIGFyZSB1cGRhdGVkIGluIHRoZSBs
b29wIGJlbG93LgotICAgIGlmICh0YXJnZXQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHN0YXRpY19j
YXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpLT5zZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2Vk
KHRydWUpOworICAgIGlmICh0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICBzdGF0
aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBk
YXRlc0Jsb2NrZWQodHJ1ZSk7CiAgICAgICAgIAorICAgIGJvb2wgYXR0cmlidXRlSXNDU1NQcm9w
ZXJ0eSA9IGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0cmli
dXRlTmFtZSk7CisgICAgLy8gU3RvcCBhbmltYXRpb24sIGlmIGF0dHJpYnV0ZVR5cGUgaXMgc2V0
IHRvIENTUyBieSB0aGUgdXNlciwgYnV0IHRoZSBhdHRyaWJ1dGUgaXRzZWxmIGlzIG5vdCBhIENT
UyBwcm9wZXJ0eS4KKyAgICBpZiAoIWF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkgJiYgYXR0cmlidXRl
VHlwZSgpID09IEF0dHJpYnV0ZVR5cGVDU1MpCisgICAgICAgIHJldHVybjsKKwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7Ci0gICAgYm9vbCBpc0NTUyA9IHRhcmdldEF0dHJpYnV0ZUlzQ1NTKCk7Ci0g
ICAgaWYgKGlzQ1NTKSB7CisgICAgaWYgKGF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkpIHsKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0aGUgb3ZlcnJpZGUgc3R5bGUsIG5vdCB0aGUg
aW5saW5lIHN0eWxlLgogICAgICAgICAvLyBTYWRseSBvdmVycmlkZSBzdHlsZXMgYXJlIG5vdCB5
ZXQgaW1wbGVtZW50ZWQuCi0gICAgICAgIHRhcmdldC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoYXR0
cmlidXRlTmFtZSwgdmFsdWUsICIiLCBlYyk7CisgICAgICAgIHRhcmdldEVsZW1lbnQtPnN0eWxl
KCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCAiIiwgZWMpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBzZXQgdGhlICdwcmVzZW50YXRpb24n
IHZhbHVlLCBub3QgdGhlIGFjdHVhbCAKICAgICAgICAgLy8gYXR0cmlidXRlIHZhbHVlLiBXaGF0
ZXZlciB0aGF0IG1lYW5zIGluIHByYWN0aWNlLgotICAgICAgICB0YXJnZXQtPnNldEF0dHJpYnV0
ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZWMpOworICAgICAgICB0YXJnZXRFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUsIGVjKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KHRhcmdldC0+aXNTdHlsZWQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVu
dCo+KHRhcmdldCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoZmFsc2UpOworICAgIGlmICh0
YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRF
bGVtZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoZmFsc2Up
OwogICAgIAogICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVudCBpcyB1c2VkIGluIGFuIDx1c2U+
IGluc3RhbmNlIHRyZWUsIHVwZGF0ZSB0aGF0IGFzIHdlbGwuCi0gICAgY29uc3QgSGFzaFNldDxT
VkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzID0gdGFyZ2V0LT5pbnN0YW5jZXNGb3JFbGVt
ZW50KCk7CisgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2Vz
ID0gdGFyZ2V0RWxlbWVudC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpOwogICAgIGNvbnN0IEhhc2hT
ZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5l
bmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBT
VkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgp
OwogICAgICAgICBpZiAoIXNoYWRvd1RyZWVFbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChpc0NTUykKKyAgICAgICAgaWYgKGF0dHJpYnV0ZUlzQ1NTUHJvcGVydHkp
CiAgICAgICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoYXR0
cmlidXRlTmFtZSwgdmFsdWUsICIiLCBlYyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNo
YWRvd1RyZWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUsIGVjKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24g
NzgzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5FbGVtZW50QXQoZmxvYXQgb2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kRWxlbWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCBlbmRFbGVtZW50QXQoZmxvYXQgb2Zmc2V0KTsKLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVJc0NTUyhjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUp
OworCisgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eShTVkdFbGVt
ZW50KiwgY29uc3QgU3RyaW5nJik7CiAKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRpb25FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAtODAsNyArODAsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgCiAgICAgU3RyaW5nIHRhcmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgpIGNv
bnN0OwogICAgIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJp
bmcmKTsKLSAgICBib29sIHRhcmdldEF0dHJpYnV0ZUlzQ1NTKCkgY29uc3Q7CiAgICAgCiAgICAg
Ym9vbCBpc0FkZGl0aXZlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0FjY3VtdWxhdGVkKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3
ODM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjczLDYgKzI3MywxMSBAQCBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgU1ZHU3R5
bGVkRWxlbWVudDo6CiAgICAgcmV0dXJuIEFuaW1hdGVkVW5rbm93bjsKIH0KIAorYm9vbCBTVkdT
dHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSkKK3sKKyAgICByZXR1cm4gY3NzUHJvcGVydHlUb1R5cGVNYXAoKS5jb250YWlu
cyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6ZmlsbFBhc3NlZEF0dHJp
YnV0ZVRvUHJvcGVydHlUeXBlTWFwKEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwJiBhdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcCkKIHsKICAgICBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcC5z
ZXQoSFRNTE5hbWVzOjpjbGFzc0F0dHIsIEFuaW1hdGVkU3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gNzgzNDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoYm9vbCk7CiAK
ICAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgYW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JDU1NQcm9w
ZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgc3RhdGljIGJvb2wgaXNBbmltYXRhYmxl
Q1NTUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCiAgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1T
Y29wZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU01JTFRpbWVDb250YWluZXIuY3BwCShyZXZpc2lvbiA3ODM0MykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsMTUgKzE5NiwxNSBAQCBTdHJpbmcgU01JTFRpbWVDb250YWluZXI6OmJhc2VWYWx1ZUZv
cihFCiAgICAgaWYgKGl0ICE9IG1fc2F2ZWRCYXNlVmFsdWVzLmVuZCgpKQogICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKICAgICAKLSAgICBTVkdFbGVtZW50KiB0YXJnZXQgPSBrZXkuZmlyc3Q7
CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGtleS5maXJzdDsKICAgICBTdHJpbmcg
YXR0cmlidXRlTmFtZSA9IGtleS5zZWNvbmQ7Ci0gICAgQVNTRVJUKHRhcmdldCk7CisgICAgQVNT
RVJUKHRhcmdldEVsZW1lbnQpOwogICAgIEFTU0VSVCghYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkp
OwogICAgIFN0cmluZyBiYXNlVmFsdWU7Ci0gICAgaWYgKFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0
dHJpYnV0ZUlzQ1NTKGF0dHJpYnV0ZU5hbWUpKQotICAgICAgICBiYXNlVmFsdWUgPSBjb21wdXRl
ZFN0eWxlKHRhcmdldCktPmdldFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVO
YW1lKSk7CisgICAgaWYgKFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzVGFyZ2V0QXR0cmlidXRlQ1NT
UHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSkpCisgICAgICAgIGJhc2VWYWx1
ZSA9IGNvbXB1dGVkU3R5bGUodGFyZ2V0RWxlbWVudCktPmdldFByb3BlcnR5VmFsdWUoY3NzUHJv
cGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7CiAgICAgZWxzZQotICAgICAgICBiYXNlVmFsdWUgPSB0
YXJnZXQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgYmFzZVZhbHVlID0g
dGFyZ2V0RWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogICAgIG1fc2F2ZWRC
YXNlVmFsdWVzLmFkZChrZXksIGJhc2VWYWx1ZSk7CiAgICAgcmV0dXJuIGJhc2VWYWx1ZTsKIH0K
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc4NTAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDItMTQgIERpcmsgU2NodWx6ZSAgPGty
aXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTVkcgYW5pbWF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhdHRyaWJ1dGUgdmFsdWUgJ2lu
aGVyaXQnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDQxMAorCisgICAgICAgIENoZWNrIHN1cHBvcnQgZm9yICdpbmhlcml0JyBhbmQgJ2N1cnJlbnRD
b2xvcicgb24gU1ZHIGFuaW1hdGlvbnMuCisKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmlt
YXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmlt
YXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9h
bmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmlt
YXRlLWN1cnJlbnRDb2xvci5qczogQWRkZWQuCisgICAgICAgIChzYW1wbGUxKToKKyAgICAgICAg
KHNhbXBsZTIpOgorICAgICAgICAoc2FtcGxlMyk6CisgICAgICAgIChleGVjdXRlVGVzdCk6Cisg
ICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3Mt
cHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoc2FtcGxlMSk6CisgICAgICAgIChzYW1wbGUy
KToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAoZXhlY3V0ZVRlc3QpOgorCiAyMDExLTAy
LTE0ICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3It
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2Fu
aW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorU1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlvbiB0ZXN0
cworCitUZXN0cyBhbmltYXRpb24gb24gJ2N1cnJlbnRDb2xvcicuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnI0ZGMDAwMCcKK1BBU1Mg
cmVjdC5zdHlsZS5maWxsIGlzICcjODA0MDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyMw
MDgwMDAnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3Iu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1
cnJlbnRDb2xvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9keW5hbWlj
LXVwZGF0ZXMvcmVzb3VyY2VzL1NWR1Rlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvU1ZHQW5pbWF0aW9uVGVzdENhc2UuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8aDE+U1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlvbiB0ZXN0czwvaDE+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVy
aXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJp
dC1jc3MtcHJvcGVydHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBA
CitTVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3RzCisKK1Rlc3RzIGFuaW1hdGlvbiB3aXRo
ICdpbmhlcml0Jy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmVjdC5z
dHlsZS5maWxsIGlzICcjRkYwMDAwJworUEFTUyByZWN0LnN0eWxlLmZpbGwgaXMgJyM4MDQwMDAn
CitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzAwODAwMCcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1p
bmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2R5bmFtaWMtdXBk
YXRlcy9yZXNvdXJjZXMvU1ZHVGVzdENhc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxoMT5TVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3RzPC9oMT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRl
c3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2
Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRl
LWN1cnJlbnRDb2xvci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorZGVzY3JpcHRp
b24oIlRlc3RzIGFuaW1hdGlvbiBvbiAnY3VycmVudENvbG9yJy4iKTsKK2NyZWF0ZVNWR1Rlc3RD
YXNlKCk7CisKKy8vIFNldHVwIHRlc3QgZG9jdW1lbnQKK3ZhciByZWN0ID0gY3JlYXRlU1ZHRWxl
bWVudCgicmVjdCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInJlY3QiKTsKK3JlY3Quc2V0
QXR0cmlidXRlKCJ3aWR0aCIsICIxMDBweCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIs
ICIxMDBweCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoImZpbGwiLCAicmVkIik7CityZWN0LnNldEF0
dHJpYnV0ZSgiY29sb3IiLCAiZ3JlZW4iKTsKKwordmFyIGFuaW1hdGVDdXJyZW50Q29sb3IgPSBj
cmVhdGVTVkdFbGVtZW50KCJhbmltYXRlQ29sb3IiKTsKK2FuaW1hdGVDdXJyZW50Q29sb3Iuc2V0
QXR0cmlidXRlKCJpZCIsICJhbmltYXRlQ3VycmVudENvbG9yIik7CithbmltYXRlQ3VycmVudENv
bG9yLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRlTmFtZSIsICJmaWxsIik7CithbmltYXRlQ3VycmVu
dENvbG9yLnNldEF0dHJpYnV0ZSgiZnJvbSIsICJyZWQiKTsKK2FuaW1hdGVDdXJyZW50Q29sb3Iu
c2V0QXR0cmlidXRlKCJ0byIsICJjdXJyZW50Q29sb3IiKTsKK2FuaW1hdGVDdXJyZW50Q29sb3Iu
c2V0QXR0cmlidXRlKCJkdXIiLCAiM3MiKTsKK2FuaW1hdGVDdXJyZW50Q29sb3Iuc2V0QXR0cmli
dXRlKCJiZWdpbiIsICJjbGljayIpOworYW5pbWF0ZUN1cnJlbnRDb2xvci5zZXRBdHRyaWJ1dGUo
ImZpbGwiLCAiZnJlZXplIik7CityZWN0LmFwcGVuZENoaWxkKGFuaW1hdGVDdXJyZW50Q29sb3Ip
Oworcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7CisKKy8vIFNldHVwIGFuaW1hdGlv
biB0ZXN0CitmdW5jdGlvbiBzYW1wbGUxKCkgeworICAgIC8vIENoZWNrIGluaXRpYWwvZW5kIGNv
bmRpdGlvbnMKKyAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjRkYwMDAwJyIpOwor
fQorCitmdW5jdGlvbiBzYW1wbGUyKCkgeworICAgIC8vIENoZWNrIGhhbGYtdGltZSBjb25kaXRp
b25zCisgICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzgwNDAwMCciKTsKK30KKwor
ZnVuY3Rpb24gc2FtcGxlMygpIHsKKyAgICAvLyBDaGVjayBoYWxmLXRpbWUgY29uZGl0aW9ucwor
ICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyMwMDgwMDAnIik7Cit9CisKK2Z1bmN0
aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gWworICAgICAg
ICAvLyBbYW5pbWF0aW9uSWQsIHRpbWUsIGVsZW1lbnRJZCwgc2FtcGxlQ2FsbGJhY2tdCisgICAg
ICAgIFsiYW5pbWF0ZUN1cnJlbnRDb2xvciIsIDAuMCwgICAgInJlY3QiLCBzYW1wbGUxXSwKKyAg
ICAgICAgWyJhbmltYXRlQ3VycmVudENvbG9yIiwgMS41LCAgICAicmVjdCIsIHNhbXBsZTJdLAor
ICAgICAgICBbImFuaW1hdGVDdXJyZW50Q29sb3IiLCAzLjAsICAgICJyZWN0Iiwgc2FtcGxlM10K
KyAgICBdOworCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBlY3RlZFZhbHVlcyk7Cit9CisKKy8v
IEJlZ2luIHRlc3QgYXN5bmMKK3JlY3Quc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImV4ZWN1dGVU
ZXN0KCkiKTsKK3dpbmRvdy5zZXRUaW1lb3V0KCJ0cmlnZ2VyVXBkYXRlKDUwLCA1MCkiLCAwKTsK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5p
bWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACitkZXNjcmlwdGlvbigiVGVzdHMgYW5p
bWF0aW9uIHdpdGggJ2luaGVyaXQnLiIpOworY3JlYXRlU1ZHVGVzdENhc2UoKTsKKworLy8gU2V0
dXAgdGVzdCBkb2N1bWVudAordmFyIGcgPSBjcmVhdGVTVkdFbGVtZW50KCJnIik7CitnLnNldEF0
dHJpYnV0ZSgiZmlsbCIsICJncmVlbiIpOworCit2YXIgcmVjdCA9IGNyZWF0ZVNWR0VsZW1lbnQo
InJlY3QiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJyZWN0Iik7CityZWN0LnNldEF0dHJp
YnV0ZSgid2lkdGgiLCAiMTAwcHgiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCAiMTAw
cHgiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJmaWxsIiwgInJlZCIpOworZy5hcHBlbmRDaGlsZChy
ZWN0KTsKKwordmFyIGFuaW1hdGVJbmhlcml0ID0gY3JlYXRlU1ZHRWxlbWVudCgiYW5pbWF0ZUNv
bG9yIik7CithbmltYXRlSW5oZXJpdC5zZXRBdHRyaWJ1dGUoImlkIiwgImFuaW1hdGVJbmhlcml0
Iik7CithbmltYXRlSW5oZXJpdC5zZXRBdHRyaWJ1dGUoImF0dHJpYnV0ZU5hbWUiLCAiZmlsbCIp
OworYW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJmcm9tIiwgInJlZCIpOworYW5pbWF0ZUlu
aGVyaXQuc2V0QXR0cmlidXRlKCJ0byIsICJpbmhlcml0Iik7CithbmltYXRlSW5oZXJpdC5zZXRB
dHRyaWJ1dGUoImR1ciIsICIzcyIpOworYW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJiZWdp
biIsICJjbGljayIpOworYW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJmaWxsIiwgImZyZWV6
ZSIpOworcmVjdC5hcHBlbmRDaGlsZChhbmltYXRlSW5oZXJpdCk7Cityb290U1ZHRWxlbWVudC5h
cHBlbmRDaGlsZChnKTsKKworLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKK2Z1bmN0aW9uIHNhbXBs
ZTEoKSB7CisgICAgLy8gQ2hlY2sgaW5pdGlhbC9lbmQgY29uZGl0aW9ucworICAgIHNob3VsZEJl
KCJyZWN0LnN0eWxlLmZpbGwiLCAiJyNGRjAwMDAnIik7Cit9CisKK2Z1bmN0aW9uIHNhbXBsZTIo
KSB7CisgICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRpdGlvbnMKKyAgICBzaG91bGRCZSgicmVj
dC5zdHlsZS5maWxsIiwgIicjODA0MDAwJyIpOworfQorCitmdW5jdGlvbiBzYW1wbGUzKCkgewor
ICAgIC8vIENoZWNrIGhhbGYtdGltZSBjb25kaXRpb25zCisgICAgc2hvdWxkQmUoInJlY3Quc3R5
bGUuZmlsbCIsICInIzAwODAwMCciKTsKK30KKworZnVuY3Rpb24gZXhlY3V0ZVRlc3QoKSB7Cisg
ICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAgIC8vIFthbmltYXRpb25JZCwgdGlt
ZSwgZWxlbWVudElkLCBzYW1wbGVDYWxsYmFja10KKyAgICAgICAgWyJhbmltYXRlSW5oZXJpdCIs
IDAuMCwgICAgInJlY3QiLCBzYW1wbGUxXSwKKyAgICAgICAgWyJhbmltYXRlSW5oZXJpdCIsIDEu
NSwgICAgInJlY3QiLCBzYW1wbGUyXSwKKyAgICAgICAgWyJhbmltYXRlSW5oZXJpdCIsIDMuMCwg
ICAgInJlY3QiLCBzYW1wbGUzXQorICAgIF07CisKKyAgICBydW5BbmltYXRpb25UZXN0KGV4cGVj
dGVkVmFsdWVzKTsKK30KKworLy8gQmVnaW4gdGVzdCBhc3luYworcmVjdC5zZXRBdHRyaWJ1dGUo
Im9uY2xpY2siLCAiZXhlY3V0ZVRlc3QoKSIpOword2luZG93LnNldFRpbWVvdXQoInRyaWdnZXJV
cGRhdGUoNTAsIDUwKSIsIDApOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82428</attachid>
            <date>2011-02-15 01:33:12 -0800</date>
            <delta_ts>2011-02-15 02:18:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54410-20110215103309.patch</filename>
            <type>text/plain</type>
            <size>30228</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDItMTQgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhdHRyaWJ1dGUg
dmFsdWUgJ2luaGVyaXQnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDQxMAorCisgICAgICAgIFNWRyBhbmltYXRpb24gZG9lcyBub3Qgc3VwcG9ydCAn
aW5oZXJpdCcgYXMgdmFsdWUgZm9yIENTUyBwcm9wZXJ0eSBhbmltYXRpb25zLiBXaXRoIHRoZSBw
YXRjaCwgU1ZHIGRldGVybWluZXMKKyAgICAgICAgaWYgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgdGFy
Z2V0IGVsZW1lbnQgaXMgYW4gYW5pbWF0YWJsZSBDU1MgUHJvcGVydHkgYW5kIGNvbXB1dGVzIHRo
ZSBzdHlsZSBkdXJpbmcgdGhlCisgICAgICAgIGFuaW1hdGlvbi4KKworICAgICAgICBUaGlzIGZp
eGVzIHRoZSBmb2xsb3dpbmcgdGVzdHMgb24gdGhlIFczQyB0ZXN0IHN1aXRlOgorICAgICAgICAq
IGFuaW1hdGUtZWxlbS04NC10LnN2ZworICAgICAgICAqIGFuaW1hdGUtZWxlbS04NS10LnN2Zwor
CisgICAgICAgIFRlc3RzOiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci5odG1s
CisgICAgICAgICAgICAgICBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3Bl
cnR5Lmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphZGp1c3RGb3JDdXJyZW50Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6YWRq
dXN0Rm9ySW5oZXJpdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6
OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOiBXaGVuIGEgcHJvcGVydHkgdmFsdWUgaXMgJ2luaGVy
aXQnIG9yICdjdXJyZW50Q29sb3InCisgICAgICAgIGR1cmluZyB0aGUgYW5pbWF0aW9uLCBnZXQg
dGhlIGNvbXB1dGVkIHN0eWxlIG9mIHRoZSBwcm9wZXJ0eSBzaW5jZSB0aGUgdmFsdWVzIGNvdWxk
IGJlIGFuaW1hdGVkIHRoZW1zZWx2ZXMuCisgICAgICAgIChXZWJDb3JlOjppbmhlcml0c0Zyb21Q
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjppc0N1cnJlbnRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKTogQ2hl
Y2sgaWYgJ2Zyb20nLCAnYnknIG9yICd0bycgdmFsdWUgaGFzIHRoZQorICAgICAgICBzdHJpbmcg
J2luaGVyaXQnIG9yICdjdXJyZW50Q29sb3InIGFuZCBpZiB0aGUgYXR0cmlidXRlIHN1cHBvcnRz
IG9uZSBvZiB0aGVzZSB2YWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVu
dDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVD
U1NQcm9wZXJ0eSk6IENoZWNrIGlmIHRhcmdldCBlbGVtZW50IGlzIHN0eWxhYmxlIGFuZAorICAg
ICAgICB0aGUgYXR0cmlidXRlIGlzIGFuIGFuaW1hdGFibGUgQ1NTIHByb3BlcnR5IGJ5IHVzaW5n
IHRoZSBDU1MgcHJvcGVydHkgbWFwIGluIFNWR1N0eWxlZEVsZW1lbnQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVl
KTogcy90YXJnZXQvdGFyZ2V0RWxlbWVudC8gZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICAqIHN2
Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
Y3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5pbWF0YWJsZUNT
U1Byb3BlcnR5KTogQ2hlY2tzIGlmIHRoZSBDU1MgcHJvcGVydHkgaXMgYW5pbWF0YWJsZS4KKyAg
ICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuY3BwOiBVc2UgdGhlIG5ldyBmdW5jdGlvbiBpc1RhcmdldEF0dHJp
YnV0ZUNTU1Byb3BlcnR5IHRvIGRldGVybWluZQorICAgICAgICBpZiB0aGUgdGFyZ2V0IGVsZW1l
bnQgaXMgc3R5bGFibGUgYW5kIHRoZSBhdHRyaWJ1dGUgaXMgYW4gYW5pbWF0YWJsZSBDU1MgcHJv
cGVydHkuCisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6YmFzZVZhbHVlRm9y
KToKKwogMjAxMS0wMi0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkocmV2aXNpb24gNzgzNDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsy
NCw4IEBACiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKFNWR19BTklNQVRJT04pCiAjaW5jbHVk
ZSAiU1ZHQW5pbWF0ZUVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKICNpbmNsdWRlICJDb2xvckRpc3RhbmNlLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCkBAIC0zNSw2ICszNyw3IEBACiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNlckZhY3Rv
cnkuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdC5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlz
dC5oIgorI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtODUsMTUgKzg4LDI5IEBAIHN0YXRpYyBib29sIHBhcnNlTnVtYmVyVmFsdWVBbmRV
bml0KGNvbnMKICAgICByZXR1cm4gb2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhZGp1c3RG
b3JDdXJyZW50Q29sb3IoQ29sb3ImIGNvbG9yLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBTVkdFbGVt
ZW50KiB0YXJnZXQpCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0Rm9yQ3VycmVudENvbG9yKFNW
R0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoIXRhcmdl
dCB8fCAhdGFyZ2V0LT5pc1N0eWxlZCgpIHx8IHZhbHVlICE9ICJjdXJyZW50Q29sb3IiKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwogICAgIAotICAg
IGlmIChSZW5kZXJPYmplY3QqIHRhcmdldFJlbmRlcmVyID0gdGFyZ2V0LT5yZW5kZXJlcigpKQor
ICAgIGlmIChSZW5kZXJPYmplY3QqIHRhcmdldFJlbmRlcmVyID0gdGFyZ2V0RWxlbWVudC0+cmVu
ZGVyZXIoKSkKICAgICAgICAgY29sb3IgPSB0YXJnZXRSZW5kZXJlci0+c3R5bGUoKS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOworICAgIGVsc2UKKyAgICAgICAgY29s
b3IgPSBDb2xvcigpOworfQogCi0gICAgcmV0dXJuIHRydWU7CitzdGF0aWMgaW5saW5lIHZvaWQg
YWRqdXN0Rm9ySW5oZXJpdGFuY2UoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lLCBTdHJpbmcmIHZhbHVlKQoreworICAgIC8vIEZJWE1FOiBBdCB0
aGUgbW9tZW50IHRoZSBjb21wdXRlZCBzdHlsZSBnZXRzIHJldHVybmVkIGFzIGEgU3RyaW5nIGFu
ZCBuZWVkcyB0byBnZXQgcGFyc2VkIGFnYWluLgorICAgIC8vIEluIHRoZSBmdXR1cmUgd2UgbWln
aHQgd2FudCB0byB3b3JrIHdpdGggdGhlIHZhbHVlIHR5cGUgZGlyZWN0bHkgdG8gYXZvaWQgdGhl
IFN0cmluZyBwYXJzaW5nLgorICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKKworICAgIEVsZW1l
bnQqIHBhcmVudCA9IHRhcmdldEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIXBh
cmVudCB8fCAhcGFyZW50LT5pc1NWR0VsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
U1ZHRWxlbWVudCogc3ZnUGFyZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhcmVudCk7
CisgICAgaWYgKHN2Z1BhcmVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgdmFsdWUgPSBjb21wdXRl
ZFN0eWxlKHN2Z1BhcmVudCktPmdldFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1
dGVOYW1lKSk7CiB9CiAKIFNWR0FuaW1hdGVFbGVtZW50OjpQcm9wZXJ0eVR5cGUgU1ZHQW5pbWF0
ZUVsZW1lbnQ6OmRldGVybWluZVByb3BlcnR5VHlwZShjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSkg
Y29uc3QKQEAgLTExNSwxMyArMTMyLDIxIEBAIFNWR0FuaW1hdGVFbGVtZW50OjpQcm9wZXJ0eVR5
cGUgU1ZHQW5pbWEKIAogdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiBy
ZXN1bHRFbGVtZW50KQogewotICAgIEFTU0VSVChwZXJjZW50YWdlID49IDAuZiAmJiBwZXJjZW50
YWdlIDw9IDEuZik7CisgICAgQVNTRVJUKHBlcmNlbnRhZ2UgPj0gMCAmJiBwZXJjZW50YWdlIDw9
IDEpOwogICAgIEFTU0VSVChyZXN1bHRFbGVtZW50KTsKLSAgICBib29sIGlzSW5GaXJzdEhhbGZP
ZkFuaW1hdGlvbiA9IHBlcmNlbnRhZ2UgPCAwLjU7CisgICAgYm9vbCBpc0luRmlyc3RIYWxmT2ZB
bmltYXRpb24gPSBwZXJjZW50YWdlIDwgMC41ZjsKICAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlv
bk1vZGUgPSB0aGlzLT5hbmltYXRpb25Nb2RlKCk7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxl
bWVudCA9IDA7CisgICAgLy8gQXZvaWQgdGFyZ2V0RWxlbWVudCgpIGNhbGwgaWYgcG9zc2libGUu
IEl0IG1pZ2h0IHNsb3cgZG93biBhbmltYXRpb25zLgorICAgIGlmIChtX2Zyb21Qcm9wZXJ0eVZh
bHVlVHlwZSA9PSBJbmhlcml0VmFsdWUgfHwgbV90b1Byb3BlcnR5VmFsdWVUeXBlID09IEluaGVy
aXRWYWx1ZQorICAgICAgICB8fCBtX2Zyb21Qcm9wZXJ0eVZhbHVlVHlwZSA9PSBDdXJyZW50Q29s
b3JWYWx1ZSB8fCBtX3RvUHJvcGVydHlWYWx1ZVR5cGUgPT0gQ3VycmVudENvbG9yVmFsdWUpIHsK
KyAgICAgICAgdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICAgICAg
aWYgKCF0YXJnZXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAg
ICBpZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKLSAgICAgICAgcGVyY2VudGFnZSA9
IDEuZjsKKyAgICAgICAgcGVyY2VudGFnZSA9IDE7CiAgICAgaWYgKCFyZXN1bHRFbGVtZW50LT5o
YXNUYWdOYW1lKFNWR05hbWVzOjphbmltYXRlVGFnKSAmJiAhcmVzdWx0RWxlbWVudC0+aGFzVGFn
TmFtZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSAKICAgICAgICAgJiYgIXJlc3VsdEVsZW1l
bnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNldFRhZykpCiAgICAgICAgIHJldHVybjsKQEAgLTEz
NCw2ICsxNTksMjAgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlQW5pbWF0ZQog
ICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAgICAgICAgIG1f
ZnJvbU51bWJlciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWROdW1iZXI7CiAgICAgICAgIAorICAgICAg
ICAvLyBSZXBsYWNlICdjdXJyZW50Q29sb3InIC8gJ2luaGVyaXQnIGJ5IHRoZWlyIGNvbXB1dGVk
IHByb3BlcnR5IHZhbHVlcy4KKyAgICAgICAgaWYgKG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlID09
IEluaGVyaXRWYWx1ZSkgeworICAgICAgICAgICAgU3RyaW5nIGZyb21OdW1iZXJTdHJpbmc7Cisg
ICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lKCksIGZyb21OdW1iZXJTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlclZh
bHVlQW5kVW5pdChmcm9tTnVtYmVyU3RyaW5nLCBtX2Zyb21OdW1iZXIsIG1fbnVtYmVyVW5pdCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3RvUHJv
cGVydHlWYWx1ZVR5cGUgPT0gSW5oZXJpdFZhbHVlKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9O
dW1iZXJTdHJpbmc7CisgICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRFbGVt
ZW50LCBhdHRyaWJ1dGVOYW1lKCksIHRvTnVtYmVyU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQodG9OdW1iZXJTdHJpbmcsIG1fdG9OdW1iZXIsIG1fbnVt
YmVyVW5pdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAg
ZG91YmxlIG51bWJlcjsKICAgICAgICAgaWYgKGNhbGNNb2RlKCkgPT0gQ2FsY01vZGVEaXNjcmV0
ZSkKICAgICAgICAgICAgIG51bWJlciA9IGlzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU51bWJlciA6IG1fdG9OdW1iZXI7CkBAIC0xNTIsNiArMTkxLDIzIEBAIHZvaWQgU1ZHQW5pbWF0
ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gQ29s
b3JQcm9wZXJ0eSkgewogICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikK
ICAgICAgICAgICAgIG1fZnJvbUNvbG9yID0gcmVzdWx0cy0+bV9hbmltYXRlZENvbG9yOworCisg
ICAgICAgIC8vIFJlcGxhY2UgJ2N1cnJlbnRDb2xvcicgLyAnaW5oZXJpdCcgYnkgdGhlaXIgY29t
cHV0ZWQgcHJvcGVydHkgdmFsdWVzLgorICAgICAgICBpZiAobV9mcm9tUHJvcGVydHlWYWx1ZVR5
cGUgPT0gQ3VycmVudENvbG9yVmFsdWUpCisgICAgICAgICAgICBhZGp1c3RGb3JDdXJyZW50Q29s
b3IodGFyZ2V0RWxlbWVudCwgbV9mcm9tQ29sb3IpOworICAgICAgICBlbHNlIGlmIChtX2Zyb21Q
cm9wZXJ0eVZhbHVlVHlwZSA9PSBJbmhlcml0VmFsdWUpIHsKKyAgICAgICAgICAgIFN0cmluZyBm
cm9tQ29sb3JTdHJpbmc7CisgICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRF
bGVtZW50LCBhdHRyaWJ1dGVOYW1lKCksIGZyb21Db2xvclN0cmluZyk7CisgICAgICAgICAgICBt
X2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tQ29sb3JT
dHJpbmcpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3RvUHJvcGVydHlWYWx1ZVR5cGUgPT0g
Q3VycmVudENvbG9yVmFsdWUpCisgICAgICAgICAgICBhZGp1c3RGb3JDdXJyZW50Q29sb3IodGFy
Z2V0RWxlbWVudCwgbV90b0NvbG9yKTsKKyAgICAgICAgZWxzZSBpZiAobV90b1Byb3BlcnR5VmFs
dWVUeXBlID09IEluaGVyaXRWYWx1ZSkgeworICAgICAgICAgICAgU3RyaW5nIHRvQ29sb3JTdHJp
bmc7CisgICAgICAgICAgICBhZGp1c3RGb3JJbmhlcml0YW5jZSh0YXJnZXRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lKCksIHRvQ29sb3JTdHJpbmcpOworICAgICAgICAgICAgbV90b0NvbG9yID0gU1ZH
Q29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRvQ29sb3JTdHJpbmcpOworICAgICAgICB9
CisKICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgIGlmIChjYWxjTW9kZSgpID09IENhbGNN
b2RlRGlzY3JldGUpCiAgICAgICAgICAgICBjb2xvciA9IGlzSW5GaXJzdEhhbGZPZkFuaW1hdGlv
biA/IG1fZnJvbUNvbG9yIDogbV90b0NvbG9yOwpAQCAtMjE2LDcgKzI3MiwxMyBAQCB2b2lkIFNW
R0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRlCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQVNTRVJUKGFuaW1hdGlvbk1vZGUgPT0gRnJvbVRvQW5pbWF0aW9uIHx8IGFuaW1hdGlv
bk1vZGUgPT0gVG9BbmltYXRpb24gfHwgYW5pbWF0aW9uTW9kZSA9PSBWYWx1ZXNBbmltYXRpb24p
OwotICAgIGlmICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24gJiYgcGVyY2VudGFn
ZSA+IDAuNWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgcGVyY2VudGFnZSA9
PSAxLjBmKQorICAgIC8vIFJlcGxhY2UgJ2N1cnJlbnRDb2xvcicgLyAnaW5oZXJpdCcgYnkgdGhl
aXIgY29tcHV0ZWQgcHJvcGVydHkgdmFsdWVzLgorICAgIGlmIChtX2Zyb21Qcm9wZXJ0eVZhbHVl
VHlwZSA9PSBJbmhlcml0VmFsdWUpCisgICAgICAgIGFkanVzdEZvckluaGVyaXRhbmNlKHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgbV9mcm9tU3RyaW5nKTsKKyAgICBpZiAobV90b1By
b3BlcnR5VmFsdWVUeXBlID09IEluaGVyaXRWYWx1ZSkKKyAgICAgICAgYWRqdXN0Rm9ySW5oZXJp
dGFuY2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpLCBtX3RvU3RyaW5nKTsKKworICAg
IGlmICgoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24gJiYgcGVyY2VudGFnZSA+IDAu
NWYpIHx8IGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24gfHwgcGVyY2VudGFnZSA9PSAxKQog
ICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkU3RyaW5nID0gbV90b1N0cmluZzsKICAgICBlbHNl
CiAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRTdHJpbmcgPSBtX2Zyb21TdHJpbmc7CkBAIC0y
MjQsMTcgKzI4Niw0NSBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
CiAgICAgcmVzdWx0cy0+bV9wcm9wZXJ0eVR5cGUgPSBTdHJpbmdQcm9wZXJ0eTsKIH0KIAorc3Rh
dGljIGJvb2wgaW5oZXJpdHNGcm9tUHJvcGVydHkoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwg
Y29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IEFTU0VSVCh0YXJnZXRFbGVtZW50KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgaW5oZXJpdCwgKCJpbmhlcml0IikpOworCisgICAgaWYgKHZhbHVlLmlzRW1w
dHkoKSB8fCB2YWx1ZSAhPSBpbmhlcml0IHx8ICF0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5p
bWF0YWJsZUNTU1Byb3BlcnR5KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUs
IG51bGxBdG9tKSk7Cit9CisKK3N0YXRpYyBib29sIGlzQ3VycmVudENvbG9yKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGN1cnJlbnRDb2xvciwgKCJjdXJyZW50Q29sb3IiKSk7CisgICAgcmV0dXJuIHZhbHVlID09IGN1
cnJlbnRDb2xvcjsKK30KKwogYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmlu
ZykKIHsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVu
dCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlID0gaW5oZXJpdHNGcm9tUHJvcGVydHkodGFyZ2V0RWxl
bWVudCwgYXR0cmlidXRlTmFtZSgpLCBmcm9tU3RyaW5nKSA/IEluaGVyaXRWYWx1ZSA6IEN1cnJl
bnRDb2xvclZhbHVlOworICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9IGluaGVyaXRzRnJvbVBy
b3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgdG9TdHJpbmcpID8gSW5oZXJp
dFZhbHVlIDogQ3VycmVudENvbG9yVmFsdWU7CisKICAgICAvLyBGSVhNRTogTmVlZHMgbW9yZSBz
b2xpZCB3YXkgZGV0ZXJtaW5lIHRhcmdldCBhdHRyaWJ1dGUgdHlwZS4KICAgICBtX3Byb3BlcnR5
VHlwZSA9IGRldGVybWluZVByb3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOwogICAgIGlmICht
X3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHRh
cmdldEVsZW1lbnQgPSB0aGlzLT50YXJnZXRFbGVtZW50KCk7Ci0gICAgICAgIGlmICghYWRqdXN0
Rm9yQ3VycmVudENvbG9yKG1fZnJvbUNvbG9yLCBmcm9tU3RyaW5nLCB0YXJnZXRFbGVtZW50KSkK
KyAgICAgICAgYm9vbCBmcm9tSXNDdXJyZW50Q29sb3IgPSBpc0N1cnJlbnRDb2xvcihmcm9tU3Ry
aW5nKTsKKyAgICAgICAgYm9vbCB0b0lzQ3VycmVudENvbG9yID0gaXNDdXJyZW50Q29sb3IodG9T
dHJpbmcpOworICAgICAgICBpZiAoZnJvbUlzQ3VycmVudENvbG9yKQorICAgICAgICAgICAgbV9m
cm9tUHJvcGVydHlWYWx1ZVR5cGUgPSBDdXJyZW50Q29sb3JWYWx1ZTsKKyAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJp
bmcoZnJvbVN0cmluZyk7Ci0gICAgICAgIGlmICghYWRqdXN0Rm9yQ3VycmVudENvbG9yKG1fdG9D
b2xvciwgdG9TdHJpbmcsIHRhcmdldEVsZW1lbnQpKQorICAgICAgICBpZiAodG9Jc0N1cnJlbnRD
b2xvcikKKyAgICAgICAgICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9IEN1cnJlbnRDb2xvclZh
bHVlOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29s
b3JGcm9tUkdCQ29sb3JTdHJpbmcodG9TdHJpbmcpOwotICAgICAgICBpZiAoKG1fZnJvbUNvbG9y
LmlzVmFsaWQoKSAmJiBtX3RvQ29sb3IuaXNWYWxpZCgpKSB8fCAobV90b0NvbG9yLmlzVmFsaWQo
KSAmJiBhbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24pKQorICAgICAgICBpZiAoKChtX2Zy
b21Db2xvci5pc1ZhbGlkKCkgfHwgZnJvbUlzQ3VycmVudENvbG9yKSAmJiAobV90b0NvbG9yLmlz
VmFsaWQoKSB8fCB0b0lzQ3VycmVudENvbG9yKSkKKyAgICAgICAgICAgIHx8ICgobV90b0NvbG9y
LmlzVmFsaWQoKSB8fCB0b0lzQ3VycmVudENvbG9yKSAmJiBhbmltYXRpb25Nb2RlKCkgPT0gVG9B
bmltYXRpb24pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChtX3By
b3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9wZXJ0eSkgewogICAgICAgICBtX251bWJlclVuaXQgPSBT
dHJpbmcoKTsKQEAgLTI2OCwxNiArMzU4LDI4IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNh
bGN1bGF0ZUZyb21BbmQKIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFu
ZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmlu
ZykKIHsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxlbWVu
dCgpOworICAgIGlmICghdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fZnJvbVByb3BlcnR5VmFsdWVUeXBlID0gaW5oZXJpdHNGcm9tUHJvcGVydHkodGFyZ2V0RWxl
bWVudCwgYXR0cmlidXRlTmFtZSgpLCBmcm9tU3RyaW5nKSA/IEluaGVyaXRWYWx1ZSA6IEN1cnJl
bnRDb2xvclZhbHVlOworICAgIG1fdG9Qcm9wZXJ0eVZhbHVlVHlwZSA9IGluaGVyaXRzRnJvbVBy
b3BlcnR5KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSwgYnlTdHJpbmcpID8gSW5oZXJp
dFZhbHVlIDogQ3VycmVudENvbG9yVmFsdWU7CisKICAgICBBU1NFUlQoIWhhc1RhZ05hbWUoU1ZH
TmFtZXM6OnNldFRhZykpOwogICAgIG1fcHJvcGVydHlUeXBlID0gZGV0ZXJtaW5lUHJvcGVydHlU
eXBlKGF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENvbG9yUHJv
cGVydHkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdl
dEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFhZGp1c3RGb3JDdXJyZW50Q29sb3IobV9mcm9tQ29s
b3IsIGZyb21TdHJpbmcsIHRhcmdldEVsZW1lbnQpKQotICAgICAgICAgICAgbV9mcm9tQ29sb3Ig
PSBmcm9tU3RyaW5nLmlzRW1wdHkoKSA/IENvbG9yKCkgOiBTVkdDb2xvcjo6Y29sb3JGcm9tUkdC
Q29sb3JTdHJpbmcoZnJvbVN0cmluZyk7Ci0gICAgICAgIGlmICghYWRqdXN0Rm9yQ3VycmVudENv
bG9yKG1fdG9Db2xvciwgYnlTdHJpbmcsIHRhcmdldEVsZW1lbnQpKQorICAgICAgICBib29sIGZy
b21Jc0N1cnJlbnRDb2xvciA9IGlzQ3VycmVudENvbG9yKGZyb21TdHJpbmcpOworICAgICAgICBi
b29sIGJ5SXNDdXJyZW50Q29sb3IgPSBpc0N1cnJlbnRDb2xvcihieVN0cmluZyk7CisgICAgICAg
IGlmIChmcm9tSXNDdXJyZW50Q29sb3IpCisgICAgICAgICAgICBtX2Zyb21Qcm9wZXJ0eVZhbHVl
VHlwZSA9IEN1cnJlbnRDb2xvclZhbHVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Zy
b21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsK
KyAgICAgICAgaWYgKGJ5SXNDdXJyZW50Q29sb3IpCisgICAgICAgICAgICBtX3RvUHJvcGVydHlW
YWx1ZVR5cGUgPSBDdXJyZW50Q29sb3JWYWx1ZTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV90b0NvbG9yID0gU1ZHQ29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKGJ5U3RyaW5nKTsK
LSAgICAgICAgbV90b0NvbG9yID0gQ29sb3JEaXN0YW5jZTo6YWRkQ29sb3JzQW5kQ2xhbXAobV9m
cm9tQ29sb3IsIG1fdG9Db2xvcik7Ci0gICAgICAgIGlmICghbV9mcm9tQ29sb3IuaXNWYWxpZCgp
IHx8ICFtX3RvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAKKyAgICAgICAgaWYgKCghbV9mcm9t
Q29sb3IuaXNWYWxpZCgpICYmICFmcm9tSXNDdXJyZW50Q29sb3IpCisgICAgICAgICAgICB8fCAo
IW1fdG9Db2xvci5pc1ZhbGlkKCkgJiYgIWJ5SXNDdXJyZW50Q29sb3IpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbnVtYmVyVW5pdCA9IFN0cmlu
ZygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJldmlzaW9u
IDc4MzQzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDEwICs1MSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBmbG9h
dCBjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdG9TdHJpbmcpOwogCiBwcml2YXRlOgorICAgIC8vIElmIHdlIGhhdmUgJ2N1cnJlbnRDb2xv
cicgb3IgJ2luaGVyaXQnIGFzIGFuaW1hdGlvbiB2YWx1ZSwgd2UgbmVlZCB0byBncmFiIHRoZSB2
YWx1ZSBkdXJpbmcgdGhlIGFuaW1hdGlvbgorICAgIC8vIHNpbmNlIHRoZSB2YWx1ZSBjYW4gYmUg
YW5pbWF0ZWQgaXRzZWxmLgorICAgIGVudW0gQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSB7Cisg
ICAgICAgIFJlZ3VsYXJQcm9wZXJ0eVZhbHVlLAorICAgICAgICBDdXJyZW50Q29sb3JWYWx1ZSwK
KyAgICAgICAgSW5oZXJpdFZhbHVlCisgICAgfTsKICAgICBlbnVtIFByb3BlcnR5VHlwZSB7IE51
bWJlclByb3BlcnR5LCBDb2xvclByb3BlcnR5LCBTdHJpbmdQcm9wZXJ0eSwgUGF0aFByb3BlcnR5
LCBQb2ludHNQcm9wZXJ0eSB9OwogICAgIFByb3BlcnR5VHlwZSBkZXRlcm1pbmVQcm9wZXJ0eVR5
cGUoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUpIGNvbnN0OwogICAgIFByb3BlcnR5VHlwZSBtX3By
b3BlcnR5VHlwZTsKIAorICAgIEFuaW1hdGVkUHJvcGVydHlWYWx1ZVR5cGUgbV9mcm9tUHJvcGVy
dHlWYWx1ZVR5cGU7CisgICAgQW5pbWF0ZWRQcm9wZXJ0eVZhbHVlVHlwZSBtX3RvUHJvcGVydHlW
YWx1ZVR5cGU7CiAgICAgZG91YmxlIG1fZnJvbU51bWJlcjsKICAgICBkb3VibGUgbV90b051bWJl
cjsKICAgICBkb3VibGUgbV9hbmltYXRlZE51bWJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4MzQzKQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2
ICs0MSw3IEBACiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTVkdT
dHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAi
U1ZHVXNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTI5Myw2NyArMjk0
LDU2IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRUYXJnZXQKIHsKICAgICBy
ZXR1cm4gdGFyZ2V0RWxlbWVudCgpOwogfQotICAgIAotYm9vbCBTVkdBbmltYXRpb25FbGVtZW50
OjphdHRyaWJ1dGVJc0NTUyhjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCisKK2Jvb2wgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6aXNUYXJnZXRBdHRyaWJ1dGVDU1NQcm9wZXJ0eShTVkdFbGVtZW50
KiB0YXJnZXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBoYXZlIGEgbWFwIG9mIGFsbCBTVkcgcHJvcGVydGllcyBhbmQgdGhl
aXIgYXR0cmlidXRlIHR5cGVzIHNvIHdlCi0gICAgLy8gY291bGQgdmFsaWRhdGUgYW5pbWF0aW9u
cyBiZXR0ZXIuIFRoZSBzcGVjIGlzIHZlcnkgdmFndWUgYWJvdXQgdGhpcy4KLSAgICB1bnNpZ25l
ZCBpZCA9IGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZSk7Ci0gICAgLy8gU1ZHIHJhbmdlCi0g
ICAgaWYgKGlkID49IENTU1Byb3BlcnR5Q2xpcFBhdGggJiYgaWQgPD0gQ1NTUHJvcGVydHlXcml0
aW5nTW9kZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gUmVndWxhciBDU1MgcHJvcGVy
dGllcyBhbHNvIGluIFNWRwotICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0eUNvbG9yIHx8IGlk
ID09IENTU1Byb3BlcnR5RGlzcGxheSB8fCBpZCA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkKLSAgICAg
ICAgICAgIHx8IChpZCA+PSBDU1NQcm9wZXJ0eUZvbnQgJiYgaWQgPD0gQ1NTUHJvcGVydHlGb250
V2VpZ2h0KSAKLSAgICAgICAgICAgIHx8IGlkID09IENTU1Byb3BlcnR5T3ZlcmZsb3cgfHwgaWQg
PT0gQ1NTUHJvcGVydHlWaXNpYmlsaXR5OwotfQotICAgIAotYm9vbCBTVkdBbmltYXRpb25FbGVt
ZW50Ojp0YXJnZXRBdHRyaWJ1dGVJc0NTUygpIGNvbnN0Ci17Ci0gICAgQXR0cmlidXRlVHlwZSB0
eXBlID0gYXR0cmlidXRlVHlwZSgpOwotICAgIGlmICh0eXBlID09IEF0dHJpYnV0ZVR5cGVDU1Mp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh0eXBlID09IEF0dHJpYnV0ZVR5cGVYTUwp
CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworICAgIGlmICghdGFyZ2V0RWxlbWVudC0+aXNT
dHlsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBhdHRyaWJ1dGVJc0NT
UyhhdHRyaWJ1dGVOYW1lKCkpOworCisgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1lbnQ6OmlzQW5p
bWF0YWJsZUNTU1Byb3BlcnR5KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUs
IG51bGxBdG9tKSk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0
cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghaGFz
VmFsaWRUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9
IHRhcmdldEVsZW1lbnQoKTsKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+
dGFyZ2V0RWxlbWVudCgpOwogICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0cmli
dXRlTmFtZSgpOwotICAgIGlmICghdGFyZ2V0IHx8IGF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpIHx8
IHZhbHVlLmlzTnVsbCgpKQorICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCBhdHRyaWJ1dGVOYW1l
LmlzRW1wdHkoKSB8fCB2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0aGUgaW5zdGFuY2UgdHJlZSB0byBnZXQgcmVidWlsZC4gSW5zdGFuY2Vz
IGFyZSB1cGRhdGVkIGluIHRoZSBsb29wIGJlbG93LgotICAgIGlmICh0YXJnZXQtPmlzU3R5bGVk
KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0YXJnZXQpLT5zZXRJ
bnN0YW5jZVVwZGF0ZXNCbG9ja2VkKHRydWUpOworICAgIGlmICh0YXJnZXRFbGVtZW50LT5pc1N0
eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0RWxl
bWVudCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQodHJ1ZSk7CiAgICAgICAgIAorICAgIGJv
b2wgYXR0cmlidXRlSXNDU1NQcm9wZXJ0eSA9IGlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHko
dGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CisgICAgLy8gU3RvcCBhbmltYXRpb24sIGlm
IGF0dHJpYnV0ZVR5cGUgaXMgc2V0IHRvIENTUyBieSB0aGUgdXNlciwgYnV0IHRoZSBhdHRyaWJ1
dGUgaXRzZWxmIGlzIG5vdCBhIENTUyBwcm9wZXJ0eS4KKyAgICBpZiAoIWF0dHJpYnV0ZUlzQ1NT
UHJvcGVydHkgJiYgYXR0cmlidXRlVHlwZSgpID09IEF0dHJpYnV0ZVR5cGVDU1MpCisgICAgICAg
IHJldHVybjsKKwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgYm9vbCBpc0NTUyA9IHRhcmdl
dEF0dHJpYnV0ZUlzQ1NTKCk7Ci0gICAgaWYgKGlzQ1NTKSB7CisgICAgaWYgKGF0dHJpYnV0ZUlz
Q1NTUHJvcGVydHkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHNldCB0aGUgb3Zl
cnJpZGUgc3R5bGUsIG5vdCB0aGUgaW5saW5lIHN0eWxlLgogICAgICAgICAvLyBTYWRseSBvdmVy
cmlkZSBzdHlsZXMgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCi0gICAgICAgIHRhcmdldC0+c3R5
bGUoKS0+c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZSwgdmFsdWUsICIiLCBlYyk7CisgICAgICAg
IHRhcmdldEVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KGF0dHJpYnV0ZU5hbWUsIHZhbHVl
LCAiIiwgZWMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBz
ZXQgdGhlICdwcmVzZW50YXRpb24nIHZhbHVlLCBub3QgdGhlIGFjdHVhbCAKICAgICAgICAgLy8g
YXR0cmlidXRlIHZhbHVlLiBXaGF0ZXZlciB0aGF0IG1lYW5zIGluIHByYWN0aWNlLgotICAgICAg
ICB0YXJnZXQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZWMpOworICAgICAg
ICB0YXJnZXRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUsIGVjKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKHRhcmdldC0+aXNTdHlsZWQoKSkKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRhcmdldCktPnNldEluc3RhbmNlVXBkYXRlc0Jsb2Nr
ZWQoZmFsc2UpOworICAgIGlmICh0YXJnZXRFbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0RWxlbWVudCktPnNldEluc3RhbmNl
VXBkYXRlc0Jsb2NrZWQoZmFsc2UpOwogICAgIAogICAgIC8vIElmIHRoZSB0YXJnZXQgZWxlbWVu
dCBpcyB1c2VkIGluIGFuIDx1c2U+IGluc3RhbmNlIHRyZWUsIHVwZGF0ZSB0aGF0IGFzIHdlbGwu
Ci0gICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzID0gdGFy
Z2V0LT5pbnN0YW5jZXNGb3JFbGVtZW50KCk7CisgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50
SW5zdGFuY2UqPiYgaW5zdGFuY2VzID0gdGFyZ2V0RWxlbWVudC0+aW5zdGFuY2VzRm9yRWxlbWVu
dCgpOwogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudElu
c3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBTVkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9ICgqaXQp
LT5zaGFkb3dUcmVlRWxlbWVudCgpOwogICAgICAgICBpZiAoIXNoYWRvd1RyZWVFbGVtZW50KQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpc0NTUykKKyAgICAgICAgaWYgKGF0
dHJpYnV0ZUlzQ1NTUHJvcGVydHkpCiAgICAgICAgICAgICBzaGFkb3dUcmVlRWxlbWVudC0+c3R5
bGUoKS0+c2V0UHJvcGVydHkoYXR0cmlidXRlTmFtZSwgdmFsdWUsICIiLCBlYyk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmli
dXRlTmFtZSwgdmFsdWUsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuaAkocmV2aXNpb24gNzgzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5FbGVtZW50QXQoZmxvYXQgb2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgZW5kRWxlbWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRFbGVtZW50QXQoZmxv
YXQgb2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVJc0NTUyhjb25zdCBT
dHJpbmcmIGF0dHJpYnV0ZU5hbWUpOworCisgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRBdHRyaWJ1
dGVDU1NQcm9wZXJ0eShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CiAKIHByb3RlY3RlZDoK
ICAgICBTVkdBbmltYXRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwpAQCAtODAsNyArODAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgU3RyaW5nIHRhcmdldEF0
dHJpYnV0ZUJhc2VWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGFyZ2V0QXR0cmlidXRlQW5p
bWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHRhcmdldEF0dHJpYnV0ZUlzQ1NT
KCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpc0FkZGl0aXZlKCkgY29uc3Q7CiAgICAgYm9vbCBp
c0FjY3VtdWxhdGVkKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA3ODM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDYgKzI3MywxMSBAQCBBbmltYXRl
ZEF0dHJpYnV0ZVR5cGUgU1ZHU3R5bGVkRWxlbWVudDo6CiAgICAgcmV0dXJuIEFuaW1hdGVkVW5r
bm93bjsKIH0KIAorYm9vbCBTVkdTdHlsZWRFbGVtZW50Ojppc0FuaW1hdGFibGVDU1NQcm9wZXJ0
eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK3sKKyAgICByZXR1cm4gY3NzUHJvcGVy
dHlUb1R5cGVNYXAoKS5jb250YWlucyhhdHRyTmFtZSk7Cit9CisKIHZvaWQgU1ZHU3R5bGVkRWxl
bWVudDo6ZmlsbFBhc3NlZEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKEF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwJiBhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCkKIHsKICAgICBhdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcC5zZXQoSFRNTE5hbWVzOjpjbGFzc0F0dHIsIEFuaW1hdGVkU3Ry
aW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24g
NzgzNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEluc3RhbmNlVXBk
YXRlc0Jsb2NrZWQoYm9vbCk7CiAKICAgICBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgYW5pbWF0ZWRQ
cm9wZXJ0eVR5cGVGb3JDU1NQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgc3Rh
dGljIGJvb2wgaXNBbmltYXRhYmxlQ1NTUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zv
cm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCShyZXZpc2lvbiA3
ODM0MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsMTUgKzE5NiwxNSBAQCBTdHJpbmcgU01JTFRpbWVD
b250YWluZXI6OmJhc2VWYWx1ZUZvcihFCiAgICAgaWYgKGl0ICE9IG1fc2F2ZWRCYXNlVmFsdWVz
LmVuZCgpKQogICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKICAgICAKLSAgICBTVkdFbGVtZW50
KiB0YXJnZXQgPSBrZXkuZmlyc3Q7CisgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGtl
eS5maXJzdDsKICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGtleS5zZWNvbmQ7Ci0gICAgQVNT
RVJUKHRhcmdldCk7CisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOwogICAgIEFTU0VSVCghYXR0
cmlidXRlTmFtZS5pc0VtcHR5KCkpOwogICAgIFN0cmluZyBiYXNlVmFsdWU7Ci0gICAgaWYgKFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZUlzQ1NTKGF0dHJpYnV0ZU5hbWUpKQotICAgICAg
ICBiYXNlVmFsdWUgPSBjb21wdXRlZFN0eWxlKHRhcmdldCktPmdldFByb3BlcnR5VmFsdWUoY3Nz
UHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7CisgICAgaWYgKFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmlzVGFyZ2V0QXR0cmlidXRlQ1NTUHJvcGVydHkodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSkpCisgICAgICAgIGJhc2VWYWx1ZSA9IGNvbXB1dGVkU3R5bGUodGFyZ2V0RWxlbWVudCktPmdl
dFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7CiAgICAgZWxzZQot
ICAgICAgICBiYXNlVmFsdWUgPSB0YXJnZXQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsK
KyAgICAgICAgYmFzZVZhbHVlID0gdGFyZ2V0RWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJpYnV0
ZU5hbWUpOwogICAgIG1fc2F2ZWRCYXNlVmFsdWVzLmFkZChrZXksIGJhc2VWYWx1ZSk7CiAgICAg
cmV0dXJuIGJhc2VWYWx1ZTsKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NTAxKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDIt
MTQgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcgYW5pbWF0aW9uIGRvZXNuJ3Qgc3VwcG9y
dCBhdHRyaWJ1dGUgdmFsdWUgJ2luaGVyaXQnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDQxMAorCisgICAgICAgIENoZWNrIHN1cHBvcnQgZm9yICdp
bmhlcml0JyBhbmQgJ2N1cnJlbnRDb2xvcicgb24gU1ZHIGFuaW1hdGlvbnMuCisKKyAgICAgICAg
KiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVy
dHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmltYXRl
LWluaGVyaXQtY3NzLXByb3BlcnR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRp
b25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qczogQWRkZWQuCisgICAgICAg
IChzYW1wbGUxKToKKyAgICAgICAgKHNhbXBsZTIpOgorICAgICAgICAoc2FtcGxlMyk6CisgICAg
ICAgIChleGVjdXRlVGVzdCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3Rz
L2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoc2FtcGxl
MSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAoZXhl
Y3V0ZVRlc3QpOgorCiAyMDExLTAyLTE0ICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
YW5pbWF0ZS1jdXJyZW50Q29sb3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENvbG9yLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtY3VycmVudENv
bG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorU1ZHIDEuMSBk
eW5hbWljIGFuaW1hdGlvbiB0ZXN0cworCitUZXN0cyBhbmltYXRpb24gb24gJ2N1cnJlbnRDb2xv
cicuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlY3Quc3R5bGUuZmls
bCBpcyAnI0ZGMDAwMCcKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjODA0MDAwJworUEFTUyBy
ZWN0LnN0eWxlLmZpbGwgaXMgJyMwMDgwMDAnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMv
YW5pbWF0ZS1jdXJyZW50Q29sb3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9hbmltYXRlLWN1cnJlbnRDb2xvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1jdXJyZW50Q29sb3IuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9keW5hbWljLXVwZGF0ZXMvcmVzb3VyY2VzL1NWR1Rlc3RDYXNlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvU1ZHQW5pbWF0aW9uVGVzdENhc2UuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aDE+U1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlv
biB0ZXN0czwvaDE+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmlt
YXRpb25zL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVydHktZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE0IEBACitTVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3RzCisK
K1Rlc3RzIGFuaW1hdGlvbiB3aXRoICdpbmhlcml0Jy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgcmVjdC5zdHlsZS5maWxsIGlzICcjRkYwMDAwJworUEFTUyByZWN0LnN0
eWxlLmZpbGwgaXMgJyM4MDQwMDAnCitQQVNTIHJlY3Quc3R5bGUuZmlsbCBpcyAnIzAwODAwMCcK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLWluaGVyaXQtY3NzLXByb3BlcnR5
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1p
bmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2R5bmFtaWMtdXBkYXRlcy9yZXNvdXJjZXMvU1ZHVGVzdENhc2UuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRl
c3RzPC9oMT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2FuaW1hdGUtaW5oZXJpdC1jc3MtcHJvcGVy
dHkuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtY3VycmVudENvbG9yLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1
cnJlbnRDb2xvci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L3NjcmlwdC10ZXN0cy9hbmltYXRlLWN1cnJlbnRDb2xvci5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NCBAQAorZGVzY3JpcHRpb24oIlRlc3RzIGFuaW1hdGlvbiBvbiAnY3VycmVudENvbG9y
Jy4iKTsKK2NyZWF0ZVNWR1Rlc3RDYXNlKCk7CisKKy8vIFNldHVwIHRlc3QgZG9jdW1lbnQKK3Zh
ciByZWN0ID0gY3JlYXRlU1ZHRWxlbWVudCgicmVjdCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoImlk
IiwgInJlY3QiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsICIxMDBweCIpOworcmVjdC5z
ZXRBdHRyaWJ1dGUoImhlaWdodCIsICIxMDBweCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoImZpbGwi
LCAicmVkIik7CityZWN0LnNldEF0dHJpYnV0ZSgiY29sb3IiLCAiZ3JlZW4iKTsKKwordmFyIGFu
aW1hdGVDdXJyZW50Q29sb3IgPSBjcmVhdGVTVkdFbGVtZW50KCJhbmltYXRlQ29sb3IiKTsKK2Fu
aW1hdGVDdXJyZW50Q29sb3Iuc2V0QXR0cmlidXRlKCJpZCIsICJhbmltYXRlQ3VycmVudENvbG9y
Iik7CithbmltYXRlQ3VycmVudENvbG9yLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRlTmFtZSIsICJm
aWxsIik7CithbmltYXRlQ3VycmVudENvbG9yLnNldEF0dHJpYnV0ZSgiZnJvbSIsICJyZWQiKTsK
K2FuaW1hdGVDdXJyZW50Q29sb3Iuc2V0QXR0cmlidXRlKCJ0byIsICJjdXJyZW50Q29sb3IiKTsK
K2FuaW1hdGVDdXJyZW50Q29sb3Iuc2V0QXR0cmlidXRlKCJkdXIiLCAiM3MiKTsKK2FuaW1hdGVD
dXJyZW50Q29sb3Iuc2V0QXR0cmlidXRlKCJiZWdpbiIsICJjbGljayIpOworYW5pbWF0ZUN1cnJl
bnRDb2xvci5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZnJlZXplIik7CityZWN0LmFwcGVuZENoaWxk
KGFuaW1hdGVDdXJyZW50Q29sb3IpOworcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVjdCk7
CisKKy8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0CitmdW5jdGlvbiBzYW1wbGUxKCkgeworICAgIC8v
IENoZWNrIGluaXRpYWwvZW5kIGNvbmRpdGlvbnMKKyAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5m
aWxsIiwgIicjRkYwMDAwJyIpOworfQorCitmdW5jdGlvbiBzYW1wbGUyKCkgeworICAgIC8vIENo
ZWNrIGhhbGYtdGltZSBjb25kaXRpb25zCisgICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIs
ICInIzgwNDAwMCciKTsKK30KKworZnVuY3Rpb24gc2FtcGxlMygpIHsKKyAgICAvLyBDaGVjayBo
YWxmLXRpbWUgY29uZGl0aW9ucworICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyMw
MDgwMDAnIik7Cit9CisKK2Z1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIGNvbnN0IGV4cGVj
dGVkVmFsdWVzID0gWworICAgICAgICAvLyBbYW5pbWF0aW9uSWQsIHRpbWUsIGVsZW1lbnRJZCwg
c2FtcGxlQ2FsbGJhY2tdCisgICAgICAgIFsiYW5pbWF0ZUN1cnJlbnRDb2xvciIsIDAuMCwgICAg
InJlY3QiLCBzYW1wbGUxXSwKKyAgICAgICAgWyJhbmltYXRlQ3VycmVudENvbG9yIiwgMS41LCAg
ICAicmVjdCIsIHNhbXBsZTJdLAorICAgICAgICBbImFuaW1hdGVDdXJyZW50Q29sb3IiLCAzLjAs
ICAgICJyZWN0Iiwgc2FtcGxlM10KKyAgICBdOworCisgICAgcnVuQW5pbWF0aW9uVGVzdChleHBl
Y3RlZFZhbHVlcyk7Cit9CisKKy8vIEJlZ2luIHRlc3QgYXN5bmMKK3JlY3Quc2V0QXR0cmlidXRl
KCJvbmNsaWNrIiwgImV4ZWN1dGVUZXN0KCkiKTsKK3dpbmRvdy5zZXRUaW1lb3V0KCJ0cmlnZ2Vy
VXBkYXRlKDUwLCA1MCkiLCAwKTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhl
cml0LWNzcy1wcm9wZXJ0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0
aW9ucy9zY3JpcHQtdGVzdHMvYW5pbWF0ZS1pbmhlcml0LWNzcy1wcm9wZXJ0eS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRl
LWluaGVyaXQtY3NzLXByb3BlcnR5LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACitk
ZXNjcmlwdGlvbigiVGVzdHMgYW5pbWF0aW9uIHdpdGggJ2luaGVyaXQnLiIpOworY3JlYXRlU1ZH
VGVzdENhc2UoKTsKKworLy8gU2V0dXAgdGVzdCBkb2N1bWVudAordmFyIGcgPSBjcmVhdGVTVkdF
bGVtZW50KCJnIik7CitnLnNldEF0dHJpYnV0ZSgiZmlsbCIsICJncmVlbiIpOworCit2YXIgcmVj
dCA9IGNyZWF0ZVNWR0VsZW1lbnQoInJlY3QiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJpZCIsICJy
ZWN0Iik7CityZWN0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCAiMTAwcHgiKTsKK3JlY3Quc2V0QXR0
cmlidXRlKCJoZWlnaHQiLCAiMTAwcHgiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJmaWxsIiwgInJl
ZCIpOworZy5hcHBlbmRDaGlsZChyZWN0KTsKKwordmFyIGFuaW1hdGVJbmhlcml0ID0gY3JlYXRl
U1ZHRWxlbWVudCgiYW5pbWF0ZUNvbG9yIik7CithbmltYXRlSW5oZXJpdC5zZXRBdHRyaWJ1dGUo
ImlkIiwgImFuaW1hdGVJbmhlcml0Iik7CithbmltYXRlSW5oZXJpdC5zZXRBdHRyaWJ1dGUoImF0
dHJpYnV0ZU5hbWUiLCAiZmlsbCIpOworYW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJmcm9t
IiwgInJlZCIpOworYW5pbWF0ZUluaGVyaXQuc2V0QXR0cmlidXRlKCJ0byIsICJpbmhlcml0Iik7
CithbmltYXRlSW5oZXJpdC5zZXRBdHRyaWJ1dGUoImR1ciIsICIzcyIpOworYW5pbWF0ZUluaGVy
aXQuc2V0QXR0cmlidXRlKCJiZWdpbiIsICJjbGljayIpOworYW5pbWF0ZUluaGVyaXQuc2V0QXR0
cmlidXRlKCJmaWxsIiwgImZyZWV6ZSIpOworcmVjdC5hcHBlbmRDaGlsZChhbmltYXRlSW5oZXJp
dCk7Cityb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChnKTsKKworLy8gU2V0dXAgYW5pbWF0aW9u
IHRlc3QKK2Z1bmN0aW9uIHNhbXBsZTEoKSB7CisgICAgLy8gQ2hlY2sgaW5pdGlhbC9lbmQgY29u
ZGl0aW9ucworICAgIHNob3VsZEJlKCJyZWN0LnN0eWxlLmZpbGwiLCAiJyNGRjAwMDAnIik7Cit9
CisKK2Z1bmN0aW9uIHNhbXBsZTIoKSB7CisgICAgLy8gQ2hlY2sgaGFsZi10aW1lIGNvbmRpdGlv
bnMKKyAgICBzaG91bGRCZSgicmVjdC5zdHlsZS5maWxsIiwgIicjODA0MDAwJyIpOworfQorCitm
dW5jdGlvbiBzYW1wbGUzKCkgeworICAgIC8vIENoZWNrIGhhbGYtdGltZSBjb25kaXRpb25zCisg
ICAgc2hvdWxkQmUoInJlY3Quc3R5bGUuZmlsbCIsICInIzAwODAwMCciKTsKK30KKworZnVuY3Rp
b24gZXhlY3V0ZVRlc3QoKSB7CisgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBbCisgICAgICAg
IC8vIFthbmltYXRpb25JZCwgdGltZSwgZWxlbWVudElkLCBzYW1wbGVDYWxsYmFja10KKyAgICAg
ICAgWyJhbmltYXRlSW5oZXJpdCIsIDAuMCwgICAgInJlY3QiLCBzYW1wbGUxXSwKKyAgICAgICAg
WyJhbmltYXRlSW5oZXJpdCIsIDEuNSwgICAgInJlY3QiLCBzYW1wbGUyXSwKKyAgICAgICAgWyJh
bmltYXRlSW5oZXJpdCIsIDMuMCwgICAgInJlY3QiLCBzYW1wbGUzXQorICAgIF07CisKKyAgICBy
dW5BbmltYXRpb25UZXN0KGV4cGVjdGVkVmFsdWVzKTsKK30KKworLy8gQmVnaW4gdGVzdCBhc3lu
YworcmVjdC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiZXhlY3V0ZVRlc3QoKSIpOword2luZG93
LnNldFRpbWVvdXQoInRyaWdnZXJVcGRhdGUoNTAsIDUwKSIsIDApOwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CisK
</data>
<flag name="review"
          id="74101"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>