<?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>202192</bug_id>
          
          <creation_ts>2019-09-25 02:56:19 -0700</creation_ts>
          <short_desc>[Web Animations] Move Document.getAnimations() to DocumentOrShadowRoot</short_desc>
          <delta_ts>2020-04-06 10:41:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1574002</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2019-09-25 02:56:19 -0700</bug_when>
    <thetext>This method moved to also apply to shadow roots, see https://drafts.csswg.org/web-animations/#dom-documentorshadowroot-getanimations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574003</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-25 02:56:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/55697775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638078</commentid>
    <comment_count>2</comment_count>
      <attachid>395563</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-04-06 07:25:34 -0700</bug_when>
    <thetext>Created attachment 395563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638079</commentid>
    <comment_count>3</comment_count>
      <attachid>395563</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-06 07:42:18 -0700</bug_when>
    <thetext>Comment on attachment 395563
Patch

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

&gt; Source/WebCore/dom/Document.cpp:8104
&gt; -Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; Document::getAnimations()
&gt; +Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; Document::getAnimations(IncludeAnimationsTargetingElementsInShadowRoot includeAnimationsTargetingElementsInShadowRoot)

It might be cleaner to have a separate internal function that takes the argument and have the argument-free getAnimations() just call that.

Internal clients would all switch to the new function.

&gt; Source/WebCore/dom/Document.cpp:8120
&gt; +    for (auto&amp; animation : m_timeline-&gt;getAnimations()) {
&gt; +        auto* effect = animation-&gt;effect();
&gt; +        ASSERT(is&lt;KeyframeEffect&gt;(animation-&gt;effect()));
&gt; +        auto* target = downcast&lt;KeyframeEffect&gt;(*effect).target();

Couldn&apos;t getAnimations()/new internal function just return a list of KeyframeEffects is those are the only things it can contain?

&gt; Source/WebCore/dom/Document.h:1488
&gt; +    Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; getAnimations(IncludeAnimationsTargetingElementsInShadowRoot = IncludeAnimationsTargetingElementsInShadowRoot::No);

Then you wouldn&apos;t need a default parameter either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638080</commentid>
    <comment_count>4</comment_count>
      <attachid>395563</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-06 07:44:06 -0700</bug_when>
    <thetext>Comment on attachment 395563
Patch

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

&gt; Source/WebCore/dom/ShadowRoot.cpp:384
&gt; +Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; ShadowRoot::getAnimations()
&gt; +{
&gt; +    Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; animations;
&gt; +    for (auto&amp; animation : document().getAnimations(Document::IncludeAnimationsTargetingElementsInShadowRoot::Yes)) {
&gt; +        auto* effect = animation-&gt;effect();
&gt; +        ASSERT(is&lt;KeyframeEffect&gt;(animation-&gt;effect()));
&gt; +        auto* target = downcast&lt;KeyframeEffect&gt;(*effect).target();
&gt; +        ASSERT(target);
&gt; +        if (target-&gt;containingShadowRoot() == this)
&gt; +            animations.append(animation);
&gt; +    }
&gt; +    return animations;
&gt; +}

You can put code shared between Document and ShadowRoot to TreeScope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638107</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-04-06 08:38:14 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 395563 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=395563&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:8104
&gt; &gt; -Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; Document::getAnimations()
&gt; &gt; +Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; Document::getAnimations(IncludeAnimationsTargetingElementsInShadowRoot includeAnimationsTargetingElementsInShadowRoot)
&gt; 
&gt; It might be cleaner to have a separate internal function that takes the
&gt; argument and have the argument-free getAnimations() just call that.
&gt; 
&gt; Internal clients would all switch to the new function.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:8120
&gt; &gt; +    for (auto&amp; animation : m_timeline-&gt;getAnimations()) {
&gt; &gt; +        auto* effect = animation-&gt;effect();
&gt; &gt; +        ASSERT(is&lt;KeyframeEffect&gt;(animation-&gt;effect()));
&gt; &gt; +        auto* target = downcast&lt;KeyframeEffect&gt;(*effect).target();
&gt; 
&gt; Couldn&apos;t getAnimations()/new internal function just return a list of
&gt; KeyframeEffects is those are the only things it can contain?
&gt; 
&gt; &gt; Source/WebCore/dom/Document.h:1488
&gt; &gt; +    Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; getAnimations(IncludeAnimationsTargetingElementsInShadowRoot = IncludeAnimationsTargetingElementsInShadowRoot::No);
&gt; 
&gt; Then you wouldn&apos;t need a default parameter either.

All of these are useful comments! I think Document::getAnimations() will implement the API and call a new internal method Document::filterAnimations() which will take an optional lambda that will run for each Element targeted by an animation to filter it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638121</commentid>
    <comment_count>6</comment_count>
      <attachid>395573</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-04-06 09:43:08 -0700</bug_when>
    <thetext>Created attachment 395573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638130</commentid>
    <comment_count>7</comment_count>
      <attachid>395573</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-06 09:55:42 -0700</bug_when>
    <thetext>Comment on attachment 395573
Patch

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

&gt; Source/WebCore/dom/Document.cpp:8111
&gt; +Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; Document::getMatchingAnimations(const WTF::Function&lt;bool(Element&amp;)&gt;&amp; function)

We don&apos;t usually name functions getSomething. API functions like getAnimations() are the exception. Maybe just matchingAnimations()?

&gt; Source/WebCore/dom/Document.cpp:8129
&gt; +    for (auto&amp; animation : m_timeline-&gt;getAnimations()) {
&gt; +        auto* effect = animation-&gt;effect();
&gt; +        ASSERT(is&lt;KeyframeEffect&gt;(animation-&gt;effect()));
&gt; +        auto* target = downcast&lt;KeyframeEffect&gt;(*effect).target();
&gt; +        ASSERT(target);
&gt; +        if (function(*target))
&gt; +            animations.append(animation);
&gt; +    }
&gt; +    return animations;

This function doesn&apos;t really have much to do with Document. Maybe it could live in DocumentTimeline instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638138</commentid>
    <comment_count>8</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-04-06 10:08:24 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #7)
&gt; Comment on attachment 395573 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=395573&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:8111
&gt; &gt; +Vector&lt;RefPtr&lt;WebAnimation&gt;&gt; Document::getMatchingAnimations(const WTF::Function&lt;bool(Element&amp;)&gt;&amp; function)
&gt; 
&gt; We don&apos;t usually name functions getSomething. API functions like
&gt; getAnimations() are the exception. Maybe just matchingAnimations()?

Good point. I&apos;ll change the method name.

&gt; &gt; Source/WebCore/dom/Document.cpp:8129
&gt; &gt; +    for (auto&amp; animation : m_timeline-&gt;getAnimations()) {
&gt; &gt; +        auto* effect = animation-&gt;effect();
&gt; &gt; +        ASSERT(is&lt;KeyframeEffect&gt;(animation-&gt;effect()));
&gt; &gt; +        auto* target = downcast&lt;KeyframeEffect&gt;(*effect).target();
&gt; &gt; +        ASSERT(target);
&gt; &gt; +        if (function(*target))
&gt; &gt; +            animations.append(animation);
&gt; &gt; +    }
&gt; &gt; +    return animations;
&gt; 
&gt; This function doesn&apos;t really have much to do with Document. Maybe it could
&gt; live in DocumentTimeline instead?

While we don&apos;t support that well yet, eventually we should return animations for all timelines associated with the provided document, so it belongs on Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638165</commentid>
    <comment_count>9</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-04-06 10:41:53 -0700</bug_when>
    <thetext>Committed r259577: &lt;https://trac.webkit.org/changeset/259577&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395563</attachid>
            <date>2020-04-06 07:25:34 -0700</date>
            <delta_ts>2020-04-06 09:43:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202192-20200406162532.patch</filename>
            <type>text/plain</type>
            <size>18021</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDMxNzJkNTNmMzA5ZTk4
MjM0ODhkZDY1MjI1MDdlNWRmMGE5NWViYi4uOTA0NmUzZDU5ZjY0YTYyYzNiOWYwN2JkMzE2MmM5
NzA4NGJmOWY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIwLTA0LTA2ICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBBbmltYXRpb25z
XSBNb3ZlIERvY3VtZW50LmdldEFuaW1hdGlvbnMoKSB0byBEb2N1bWVudE9yU2hhZG93Um9vdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTkyCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTY5Nzc3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSByZW1vdmUgdGhlIGdldEFuaW1hdGlvbnMoKSBk
ZWNsYXJhdGlvbiBmcm9tIHRoZSBEb2N1bWVudCBpbnRlcmZhY2UgdG8gaW5zdGVhZCBoYXZlIGl0
IG9uIHRoZSBEb2N1bWVudE9yU2hhZG93Um9vdCBpbnRlcmZhY2UuIEZvciBEb2N1bWVudDo6Z2V0
QW5pbWF0aW9ucygpLCB3ZSBub3cgdGFrZSBpbiBhbiBvcHRpb25hbCBwYXJhbWV0ZXIKKyAgICAg
ICAgdG8gc3BlY2lmeSB3aGV0aGVyIHdlIHdhbnQgdG8gaW5jbHVkZSBhbmltYXRpb25zIHRhcmdl
dGluZyBlbGVtZW50cyBob3N0ZWQgaW4gc2hhZG93IHJvb3RzLiBJdCBkZWZhdWx0cyB0byAiTm8i
IHNpbmNlIGNhbGxpbmcgRG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpIGZyb20gdGhlIGJpbmRpbmdz
IHNob3VsZCBub3QgaW5jbHVkZSBzdWNoCisgICAgICAgIGFuaW1hdGlvbnMuIEluIEVsZW1lbnQ6
OmdldEFuaW1hdGlvbnMoKSB3ZSBlbnN1cmUgdG8gcGFzcyAiWWVzIiB3aGVuIGNhbGxpbmcgRG9j
dW1lbnQ6OmdldEFuaW1hdGlvbnMoKSB0byBwcmVzZXJ2ZSB0aGUgZXhpc3Rpbmcg4oCTIGFuZCBj
b3JyZWN0IOKAkyBiZWhhdmlvci4gRmluYWxseSwgaW4gU2hhZG93Um9vdDpnZXRBbmltYXRpb25z
KCksCisgICAgICAgIHdlIGNhbGwgdGhlIERvY3VtZW50IG1ldGhvZCB3aXRoICJZZXMiIGFzIHdl
bGwgYW5kIGZpbHRlciBhbnkgYW5pbWF0aW9uIHRoYXQgaXMgdGFyZ2V0aW5nIGFuIGVsZW1lbnQg
dGhhdCBpcyBub3QgaG9zdGVkIGluIHRoZSBzaGFkb3cgcm9vdCB0aGUgbWV0aG9kIHdhcyBjYWxs
ZWQgb24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmdldEFuaW1hdGlvbnMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JTaGFkb3dS
b290LmlkbDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpnZXRBbmltYXRpb25zKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpnZXRBbmltYXRpb25zKToKKyAgICAgICAgKiBk
b20vU2hhZG93Um9vdC5oOgorCiAyMDIwLTA0LTA1ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIGNvZGUgdGhhdCBoYXMgbm8gZWZmZWN0IGZyb20gbG9hZFVS
TApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggM2VmOTQ1OTAwYmE4ZjI0ZTAyZjVlY2YyMGRl
Y2ZjNzA4YmZkODJhMC4uYzFjMDM4YzA5YWQ1MTQ4NDZmODAzZmE4ZjYyOGIzMGU1OGRkNWZmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04MTAxLDE1ICs4MTAxLDI4IEBAIERvY3VtZW50
VGltZWxpbmUmIERvY3VtZW50Ojp0aW1lbGluZSgpCiAgICAgcmV0dXJuICptX3RpbWVsaW5lOwog
fQogCi1WZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+IERvY3VtZW50OjpnZXRBbmltYXRpb25z
KCkKK1ZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gRG9jdW1lbnQ6OmdldEFuaW1hdGlvbnMo
SW5jbHVkZUFuaW1hdGlvbnNUYXJnZXRpbmdFbGVtZW50c0luU2hhZG93Um9vdCBpbmNsdWRlQW5p
bWF0aW9uc1RhcmdldGluZ0VsZW1lbnRzSW5TaGFkb3dSb290KQogewogICAgIC8vIEZvciB0aGUg
bGlzdCBvZiBhbmltYXRpb25zIHRvIGJlIGN1cnJlbnQsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3Ig
YW55IHBlbmRpbmcgQ1NTIGNoYW5nZXMsCiAgICAgLy8gc3VjaCBhcyB1cGRhdGVzIHRvIENTUyBB
bmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMuCiAgICAgdXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogCi0gICAgaWYgKG1fdGltZWxpbmUpCisgICAgaWYgKCFtX3RpbWVsaW5lKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgaWYgKGluY2x1ZGVBbmltYXRpb25zVGFyZ2V0aW5nRWxlbWVudHNJ
blNoYWRvd1Jvb3QgPT0gSW5jbHVkZUFuaW1hdGlvbnNUYXJnZXRpbmdFbGVtZW50c0luU2hhZG93
Um9vdDo6WWVzKQogICAgICAgICByZXR1cm4gbV90aW1lbGluZS0+Z2V0QW5pbWF0aW9ucygpOwot
ICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+IGFuaW1h
dGlvbnM7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX3RpbWVsaW5lLT5nZXRBbmltYXRp
b25zKCkpIHsKKyAgICAgICAgYXV0byogZWZmZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKKyAg
ICAgICAgQVNTRVJUKGlzPEtleWZyYW1lRWZmZWN0PihhbmltYXRpb24tPmVmZmVjdCgpKSk7Cisg
ICAgICAgIGF1dG8qIHRhcmdldCA9IGRvd25jYXN0PEtleWZyYW1lRWZmZWN0PigqZWZmZWN0KS50
YXJnZXQoKTsKKyAgICAgICAgQVNTRVJUKHRhcmdldCk7CisgICAgICAgIGlmICghdGFyZ2V0LT5j
b250YWluaW5nU2hhZG93Um9vdCgpKQorICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQoYW5p
bWF0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGFuaW1hdGlvbnM7CiB9CiAKICNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA4MzlhZmNkNThiYWEz
MWE3MmU5ZmE1ZjFlNjU3OTI2M2Y4N2YyYmMxLi42MTU5NjgwMTg3Y2JlODU2NzdlNDA1OTg2MmJk
OWI1N2I4MjI1YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTQ4NCw4ICsxNDg0LDkgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlVGltZWxpbmUoRG9jdW1lbnRUaW1lbGluZSYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIERvY3VtZW50VGltZWxpbmUmIHRpbWVsaW5lKCk7CiAgICAgRG9jdW1l
bnRUaW1lbGluZSogZXhpc3RpbmdUaW1lbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZWxpbmUu
Z2V0KCk7IH0KLSAgICBWZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+IGdldEFuaW1hdGlvbnMo
KTsKLSAgICAgICAgCisgICAgZW51bSBjbGFzcyBJbmNsdWRlQW5pbWF0aW9uc1RhcmdldGluZ0Vs
ZW1lbnRzSW5TaGFkb3dSb290IHsgWWVzLCBObyB9OworICAgIFZlY3RvcjxSZWZQdHI8V2ViQW5p
bWF0aW9uPj4gZ2V0QW5pbWF0aW9ucyhJbmNsdWRlQW5pbWF0aW9uc1RhcmdldGluZ0VsZW1lbnRz
SW5TaGFkb3dSb290ID0gSW5jbHVkZUFuaW1hdGlvbnNUYXJnZXRpbmdFbGVtZW50c0luU2hhZG93
Um9vdDo6Tm8pOworCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICB2b2lkIHJl
Z2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRJ
bnNlcnRBdHRhY2htZW50RWxlbWVudChIVE1MQXR0YWNobWVudEVsZW1lbnQmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaWRsCmluZGV4IGNlM2RlZTA5ZjRkMTdiNmJkNjk5M2E4OTU1NTMzNGEwY2E1M2Fi
ZWIuLjdiZDA1NWM3MGRmZjM3ZTc3ZjI3M2I3MTdmMzM1YTU1MGM3ZGQ3MTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmlkbApAQCAtMTkwLDcgKzE5MCw2IEBAIHR5cGVkZWYgKAogICAgIFtSZXBsYWNl
YWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxBbGxDb2xsZWN0aW9uIGFsbDsgLyogW1NhbWVP
YmplY3RdICovCiAKICAgICBbRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zXSByZWFkb25s
eSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0aW1lbGluZTsKLSAgICBbRW5hYmxlZEF0UnVu
dGltZT1XZWJBbmltYXRpb25zXSBzZXF1ZW5jZTxXZWJBbmltYXRpb24+IGdldEFuaW1hdGlvbnMo
KTsKIH07CiAKIGVudW0gRG9jdW1lbnRSZWFkeVN0YXRlIHsgImxvYWRpbmciLCAiaW50ZXJhY3Rp
dmUiLCAiY29tcGxldGUiIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPclNoYWRvd1Jvb3QuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JTaGFkb3dS
b290LmlkbAppbmRleCBiOWIyM2YxMWNhN2QzNTE4OWVmZGE3NTEyNzU5MTliMGU5ZDVkYTMwLi4z
ODYzNjJhOThmZjM1MmRjZjMxNDE4ZGM4MWUyY2U2ZjA0MzE0ZjQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPclNoYWRvd1Jvb3QuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yU2hhZG93Um9vdC5pZGwKQEAgLTQzLDQgKzQzLDcgQEAKIAogICAg
IC8vIEV4dGVuc2lvbnMgZnJvbSBQaWN0dXJlLWluLVBpY3R1cmUgQVBJIChodHRwczovL3dpY2cu
Z2l0aHViLmlvL3BpY3R1cmUtaW4tcGljdHVyZS8jZG9jdW1lbnRvcnNoYWRvd3Jvb3QtZXh0ZW5z
aW9uKQogICAgIFtDb25kaXRpb25hbD1QSUNUVVJFX0lOX1BJQ1RVUkVfQVBJLCBFbmFibGVkQnlT
ZXR0aW5nPVBpY3R1cmVJblBpY3R1cmVBUEldIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50PyBw
aWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKKworICAgIC8vIEV4dGVuc2lvbiBmcm9tIFdlYiBBbmlt
YXRpb25zIEFQSSAoaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4
dGVuc2lvbnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbikKKyAg
ICBbRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zXSBzZXF1ZW5jZTxXZWJBbmltYXRpb24+
IGdldEFuaW1hdGlvbnMoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYThiNDAxMTky
NTQxOGQzZjhlMjQ5YjFmOTE1ZmY2YjEyZWE2Y2M3Mi4uMDYwNTg2OGZjM2Y0OWExYmUyY2VjNDFh
MmE1ZDI2ODc4NTIyNWU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNDU1MSw3ICs0NTUx
LDcgQEAgVmVjdG9yPFJlZlB0cjxXZWJBbmltYXRpb24+PiBFbGVtZW50OjpnZXRBbmltYXRpb25z
KE9wdGlvbmFsPEdldEFuaW1hdGlvbnNPcHRpb24KICAgICAvLyBwc2V1ZG8gZWxlbWVudC4KICAg
ICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5zdWJ0cmVlKSB7CiAgICAgICAgIFZlY3RvcjxSZWZQ
dHI8V2ViQW5pbWF0aW9uPj4gYW5pbWF0aW9uczsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRp
b24gOiBkb2N1bWVudCgpLmdldEFuaW1hdGlvbnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGFu
aW1hdGlvbiA6IGRvY3VtZW50KCkuZ2V0QW5pbWF0aW9ucyhEb2N1bWVudDo6SW5jbHVkZUFuaW1h
dGlvbnNUYXJnZXRpbmdFbGVtZW50c0luU2hhZG93Um9vdDo6WWVzKSkgewogICAgICAgICAgICAg
YXV0byogZWZmZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKICAgICAgICAgICAgIEFTU0VSVChp
czxLZXlmcmFtZUVmZmVjdD4oYW5pbWF0aW9uLT5lZmZlY3QoKSkpOwogICAgICAgICAgICAgYXV0
byogdGFyZ2V0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCplZmZlY3QpLnRhcmdldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IDZmNGY0YzQzNjc1ZTM3YmZiMWUxYzI3ZGY4
ZWZlM2VhZmNjOGQ2MDguLmRlMTcwZGJhNGJiOGM2MjYwZmIwYjcxYTU4YWIyMjBiZTkzZjJlN2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaWYg
RU5BQkxFKFBJQ1RVUkVfSU5fUElDVFVSRV9BUEkpCisjaW5jbHVkZSAiS2V5ZnJhbWVFZmZlY3Qu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiUmVuZGVy
RWxlbWVudC5oIgpAQCAtNDEsNiArNDIsNyBAQAogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKKyNp
bmNsdWRlICJXZWJBbmltYXRpb24uaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0zNjcsNCArMzY5LDE4IEBAIEhUTUxWaWRlb0Vs
ZW1lbnQqIFNoYWRvd1Jvb3Q6OnBpY3R1cmVJblBpY3R1cmVFbGVtZW50KCkgY29uc3QKIH0KICNl
bmRpZgogCitWZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+IFNoYWRvd1Jvb3Q6OmdldEFuaW1h
dGlvbnMoKQoreworICAgIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gYW5pbWF0aW9uczsK
KyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IGRvY3VtZW50KCkuZ2V0QW5pbWF0aW9ucyhEb2N1
bWVudDo6SW5jbHVkZUFuaW1hdGlvbnNUYXJnZXRpbmdFbGVtZW50c0luU2hhZG93Um9vdDo6WWVz
KSkgeworICAgICAgICBhdXRvKiBlZmZlY3QgPSBhbmltYXRpb24tPmVmZmVjdCgpOworICAgICAg
ICBBU1NFUlQoaXM8S2V5ZnJhbWVFZmZlY3Q+KGFuaW1hdGlvbi0+ZWZmZWN0KCkpKTsKKyAgICAg
ICAgYXV0byogdGFyZ2V0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCplZmZlY3QpLnRhcmdl
dCgpOworICAgICAgICBBU1NFUlQodGFyZ2V0KTsKKyAgICAgICAgaWYgKHRhcmdldC0+Y29udGFp
bmluZ1NoYWRvd1Jvb3QoKSA9PSB0aGlzKQorICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQo
YW5pbWF0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGFuaW1hdGlvbnM7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5oCmluZGV4IGIwYzlkYzEyMzhhZjM2MDdlNWM3ZjY1ZmJhYjgzYzliNjY4
MTQ1NWEuLmRhYmUyN2Y2NGQ4ZjYwMTc2ZmE1MGFiMzdkYjYyMDZiMDQ4YzZmNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBIVE1MU2xvdEVsZW1lbnQ7CiBjbGFzcyBTbG90QXNzaWdubWVudDsKIGNsYXNzIFN0eWxl
U2hlZXRMaXN0OworY2xhc3MgV2ViQW5pbWF0aW9uOwogCiBjbGFzcyBTaGFkb3dSb290IGZpbmFs
IDogcHVibGljIERvY3VtZW50RnJhZ21lbnQsIHB1YmxpYyBUcmVlU2NvcGUgewogICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoU2hhZG93Um9vdCk7CkBAIC0xMTEsNiArMTEyLDggQEAgcHVibGlj
OgogICAgIEhUTUxWaWRlb0VsZW1lbnQqIHBpY3R1cmVJblBpY3R1cmVFbGVtZW50KCkgY29uc3Q7
CiAjZW5kaWYKIAorICAgIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gZ2V0QW5pbWF0aW9u
cygpOworCiBwcml2YXRlOgogICAgIFNoYWRvd1Jvb3QoRG9jdW1lbnQmLCBTaGFkb3dSb290TW9k
ZSwgRGVsZWdhdGVzRm9jdXMpOwogICAgIFNoYWRvd1Jvb3QoRG9jdW1lbnQmLCBzdGQ6OnVuaXF1
ZV9wdHI8U2xvdEFzc2lnbm1lbnQ+JiYpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5k
ZXggZGFjMjY5ZjExMGMzZDgwYmUwZDk4YTk0ZDhmNzliMzU1MGEyNzkyOC4uNjgyMGE1MjkzMjIx
NTViNjcwOWFlN2JkMDVjN2M3MTBhMmI1ZTRmZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDQtMDYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViIEFuaW1hdGlvbnNdIE1vdmUgRG9jdW1lbnQuZ2V0
QW5pbWF0aW9ucygpIHRvIERvY3VtZW50T3JTaGFkb3dSb290CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIxOTIKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzU1Njk3Nzc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVwZGFlIHRoZSB0ZXN0IHJlbGV2YW50IHRvIERvY3VtZW50T3JTaGFkb3dSb290Lmdl
dEFuaW1hdGlvbnMoKSBmcm9tIHVwc3RyZWFtIGFuZCByZWNvcmQgdGhyZWUgbmV3IFBBU1MgcmVz
dWx0cyBpbiBpdC4gV2UgYWxzbyBnZXQgdHdvIG5ldyBQQVNTIGZyb20gYSBoYXJuZXNzIHRlc3Qu
CisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvaWRsaGFybmVz
cy53aW5kb3ctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWIt
YW5pbWF0aW9ucy9pbnRlcmZhY2VzL0RvY3VtZW50T3JTaGFkb3dSb290L2dldEFuaW1hdGlvbnMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9u
cy9pbnRlcmZhY2VzL0RvY3VtZW50T3JTaGFkb3dSb290L2dldEFuaW1hdGlvbnMuaHRtbDoKKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvdGVzdGNvbW1vbi5qczoK
KyAgICAgICAgKGFzeW5jIGluc2VydEZyYW1lQW5kQXdhaXRMb2FkKToKKwogMjAyMC0wNC0wNSAg
TWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBDb21w
dXRlZCBzdHlsZSBmb3IgIm91dGxpbmUtb2Zmc2V0IiBpcyB3cm9uZyB3aGVuICJvdXRsaW5lLXN0
eWxlIiBpcyAibm9uZSIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvaWRsaGFybmVzcy53aW5kb3ctZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5p
bWF0aW9ucy9pZGxoYXJuZXNzLndpbmRvdy1leHBlY3RlZC50eHQKaW5kZXggZGY0Y2RhMzI5MDIw
NDg4NTNjNjA2ZTliMmM0ZjBkNzA4ODY4NGZkNi4uY2VmMjI1NTBjMTVmYzA1NDAxNDliZDhlMzI4
ZjA4ZTYxMmI2YTc1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pZGxoYXJuZXNzLndpbmRvdy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWIt
YW5pbWF0aW9ucy9pZGxoYXJuZXNzLndpbmRvdy1leHBlY3RlZC50eHQKQEAgLTE0MCw4ICsxNDAs
OCBAQCBQQVNTIERvY3VtZW50IGludGVyZmFjZTogYXR0cmlidXRlIHRpbWVsaW5lCiBQQVNTIERv
Y3VtZW50IGludGVyZmFjZTogb3BlcmF0aW9uIGdldEFuaW1hdGlvbnMoKSAKIFBBU1MgRG9jdW1l
bnQgaW50ZXJmYWNlOiBkb2N1bWVudCBtdXN0IGluaGVyaXQgcHJvcGVydHkgInRpbWVsaW5lIiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSAKIFBBU1MgRG9jdW1lbnQgaW50ZXJmYWNlOiBkb2N1bWVudCBt
dXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFuaW1hdGlvbnMoKSIgd2l0aCB0aGUgcHJvcGVyIHR5
cGUgCi1GQUlMIFNoYWRvd1Jvb3QgaW50ZXJmYWNlOiBvcGVyYXRpb24gZ2V0QW5pbWF0aW9ucygp
IGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Npbmcg
bm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgImdldEFuaW1hdGlvbnMiIG1p
c3NpbmcKLUZBSUwgU2hhZG93Um9vdCBpbnRlcmZhY2U6IHNoYWRvd1Jvb3QgbXVzdCBpbmhlcml0
IHByb3BlcnR5ICJnZXRBbmltYXRpb25zKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9p
bmhlcml0czogcHJvcGVydHkgImdldEFuaW1hdGlvbnMiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUg
Y2hhaW4KK1BBU1MgU2hhZG93Um9vdCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBnZXRBbmltYXRpb25z
KCkgCitQQVNTIFNoYWRvd1Jvb3QgaW50ZXJmYWNlOiBzaGFkb3dSb290IG11c3QgaW5oZXJpdCBw
cm9wZXJ0eSAiZ2V0QW5pbWF0aW9ucygpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKIFBBU1MgRWxl
bWVudCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBhbmltYXRlKG9iamVjdCwgW29iamVjdCBPYmplY3Rd
LFtvYmplY3QgT2JqZWN0XSkgCiBQQVNTIEVsZW1lbnQgaW50ZXJmYWNlOiBvcGVyYXRpb24gZ2V0
QW5pbWF0aW9ucyhHZXRBbmltYXRpb25zT3B0aW9ucykgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvaW50ZXJm
YWNlcy9Eb2N1bWVudE9yU2hhZG93Um9vdC9nZXRBbmltYXRpb25zLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMv
aW50ZXJmYWNlcy9Eb2N1bWVudE9yU2hhZG93Um9vdC9nZXRBbmltYXRpb25zLWV4cGVjdGVkLnR4
dAppbmRleCA4YjIzYThkNmYwY2Q3MTBkN2ZhMDc1OTFlZTlkOWZlZDc2MDBhY2YxLi4yNmE2NTg0
NjI4NmJmNTVhOWNhNWFiNDk3YjZhMjRjNGZjZjE1YjI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1hbmltYXRpb25zL2ludGVyZmFj
ZXMvRG9jdW1lbnRPclNoYWRvd1Jvb3QvZ2V0QW5pbWF0aW9ucy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9u
cy9pbnRlcmZhY2VzL0RvY3VtZW50T3JTaGFkb3dSb290L2dldEFuaW1hdGlvbnMtZXhwZWN0ZWQu
dHh0CkBAIC01LDcgKzUsOSBAQCBQQVNTIERvY3VtZW50LmdldEFuaW1hdGlvbnMoKSByZXR1cm5z
IHNjcmlwdC1nZW5lcmF0ZWQgYW5pbWF0aW9ucyBpbiB0aGUgb3JkZXIgdAogUEFTUyBEb2N1bWVu
dC5nZXRBbmltYXRpb25zKCkgZG9lcyBub3QgcmV0dXJuIGEgZGlzY29ubmVjdGVkIG5vZGUgCiBQ
QVNTIERvY3VtZW50LmdldEFuaW1hdGlvbnMoKSBkb2VzIG5vdCByZXR1cm4gYW4gYW5pbWF0aW9u
IHdpdGggYSBudWxsIHRhcmdldCAKIEZBSUwgRG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpIHJldHVy
bnMgYW5pbWF0aW9ucyBvbiBlbGVtZW50cyBpbnNpZGUgc2FtZS1vcmlnaW4gaWZyYW1lcyBhc3Nl
cnRfZXF1YWxzOiBleHBlY3RlZCAxIGJ1dCBnb3QgMAotRkFJTCBTaGFkb3dSb290LmdldEFuaW1h
dGlvbnMoKSByZXR1cm4gYWxsIGFuaW1hdGlvbnMgaW4gdGhlIHNoYWRvdyB0cmVlIGRpdi5zaGFk
b3dSb290LmdldEFuaW1hdGlvbnMgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZGl2LnNoYWRvd1Jv
b3QuZ2V0QW5pbWF0aW9ucygpJywgJ2Rpdi5zaGFkb3dSb290LmdldEFuaW1hdGlvbnMnIGlzIHVu
ZGVmaW5lZCkKLUZBSUwgRG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpIGRvZXMgTk9UIHJldHVybiBh
bmltYXRpb25zIGluIHNoYWRvdyB0cmVlcyBhc3NlcnRfYXJyYXlfZXF1YWxzOiBnZXRBbmltYXRp
b25zKCkgY2FsbGVkIG9uIERvY3VtZW50IGRvZXMgbm90IHJldHVybiBhbmltYXRpb25zIGZyb20g
c2hhZG93IHRyZWVzIGxlbmd0aHMgZGlmZmVyLCBleHBlY3RlZCAwIGdvdCAxCitGQUlMIGlmcmFt
ZS5jb250ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpIHJldHVybnMgYW5pbWF0aW9ucyBvbiBl
bGVtZW50cyBpbnNpZGUgc2FtZS1vcmlnaW4gRG9jdW1lbnQgYXNzZXJ0X2VxdWFsczogZXhwZWN0
ZWQgMSBidXQgZ290IDAKK1BBU1MgU2hhZG93Um9vdC5nZXRBbmltYXRpb25zKCkgcmV0dXJuIGFs
bCBhbmltYXRpb25zIGluIHRoZSBzaGFkb3cgdHJlZSAKK1BBU1MgRG9jdW1lbnQuZ2V0QW5pbWF0
aW9ucygpIGRvZXMgTk9UIHJldHVybiBhbmltYXRpb25zIGluIHNoYWRvdyB0cmVlcyAKK1BBU1Mg
U2hhZG93Um9vdC5nZXRBbmltYXRpb25zKCkgZG9lcyBOT1QgcmV0dXJuIGFuaW1hdGlvbnMgaW4g
cGFyZW50IGRvY3VtZW50IAogUEFTUyBEb2N1bWVudC5nZXRBbmltYXRpb25zKCkgdHJpZ2dlcnMg
YSBzdHlsZSBjaGFuZ2UgZXZlbnQgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvaW50ZXJmYWNlcy9Eb2N1bWVu
dE9yU2hhZG93Um9vdC9nZXRBbmltYXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1hbmltYXRpb25zL2ludGVyZmFjZXMvRG9jdW1lbnRP
clNoYWRvd1Jvb3QvZ2V0QW5pbWF0aW9ucy5odG1sCmluZGV4IDQ3MzBmMTg2YjM0YTQyNmI2ZGQ2
NTdiMTEzYjZlNDA4ZTBhMDhiNTUuLjliY2MwNDJhOGZlZDMxOGJlNDRkMDlmZDI0MzZjZDk3YmE5
YzQwODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvd2ViLWFuaW1hdGlvbnMvaW50ZXJmYWNlcy9Eb2N1bWVudE9yU2hhZG93Um9vdC9nZXRB
bmltYXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pbnRlcmZhY2VzL0RvY3VtZW50T3JTaGFkb3dSb290L2dl
dEFuaW1hdGlvbnMuaHRtbApAQCAtNjgsMTQgKzY4LDcgQEAgdGVzdCh0ID0+IHsKIAogcHJvbWlz
ZV90ZXN0KGFzeW5jIHQgPT4gewogICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpZnJhbWUnKTsKLQotICBjb25zdCBldmVudFdhdGNoZXIgPSBuZXcgRXZlbnRXYXRjaGVy
KHQsIGlmcmFtZSwgWydsb2FkJ10pOwotICBjb25zdCBldmVudF9wcm9taXNlID0gZXZlbnRXYXRj
aGVyLndhaXRfZm9yKCdsb2FkJyk7Ci0KLSAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJh
bWUpOwotICB0LmFkZF9jbGVhbnVwKCgpID0+IHsgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChp
ZnJhbWUpOyB9KTsKLQotICBhd2FpdCBldmVudF9wcm9taXNlOworICBhd2FpdCBpbnNlcnRGcmFt
ZUFuZEF3YWl0TG9hZCh0LCBpZnJhbWUsIGRvY3VtZW50KQogCiAgIGNvbnN0IGRpdiA9IGNyZWF0
ZURpdih0LCBpZnJhbWUuY29udGVudERvY3VtZW50KQogICBjb25zdCBlZmZlY3QgPSBuZXcgS2V5
ZnJhbWVFZmZlY3QoZGl2LCBudWxsLCAxMDAgKiBNU19QRVJfU0VDKTsKQEAgLTkxLDYgKzg0LDUy
IEBAIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsKIH0sICdEb2N1bWVudC5nZXRBbmltYXRpb25z
KCkgcmV0dXJucyBhbmltYXRpb25zIG9uIGVsZW1lbnRzIGluc2lkZSBzYW1lLW9yaWdpbicKICAg
ICsgJyBpZnJhbWVzJyk7CiAKK3Byb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAgY29uc3QgaWZy
YW1lMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICBjb25zdCBpZnJhbWUy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgYXdhaXQgaW5zZXJ0RnJh
bWVBbmRBd2FpdExvYWQodCwgaWZyYW1lMSwgZG9jdW1lbnQpOworICBhd2FpdCBpbnNlcnRGcmFt
ZUFuZEF3YWl0TG9hZCh0LCBpZnJhbWUyLCBkb2N1bWVudCk7CisKKyAgY29uc3QgZGl2X2ZyYW1l
MSA9IGNyZWF0ZURpdih0LCBpZnJhbWUxLmNvbnRlbnREb2N1bWVudCkKKyAgY29uc3QgZGl2X21h
aW5fZnJhbWUgPSBjcmVhdGVEaXYodCkKKyAgY29uc3QgZWZmZWN0MSA9IG5ldyBLZXlmcmFtZUVm
ZmVjdChkaXZfZnJhbWUxLCBudWxsLCAxMDAgKiBNU19QRVJfU0VDKTsKKyAgY29uc3QgYW5pbTEg
PSBuZXcgQW5pbWF0aW9uKGVmZmVjdDEsIGRvY3VtZW50LnRpbWVsaW5lKTsKKyAgYW5pbTEucGxh
eSgpOworICAvLyBBbmltYXRpb24gb2YgZGl2X2ZyYW1lMSBpcyBpbiBpZnJhbWUgd2l0aCBtYWlu
IHRpbWVsaW5lLgorICAvLyBUaGUgYW5pbWF0aW9uJ3MgdGltZWxpbmUgaXMgZnJvbSB0aGUgaWZy
YW1lLCBidXQgdGhlIGVmZmVjdCdzIHRhcmdldAorICAvLyBlbGVtZW50IGlzIHBhcnQgb2YgdGhl
IGlmcmFtZSdzIGRvY3VtZW50LgorICBhc3NlcnRfZXF1YWxzKGRvY3VtZW50LmdldEFuaW1hdGlv
bnMoKS5sZW5ndGgsIDApOworICBhc3NlcnRfZXF1YWxzKGlmcmFtZTEuY29udGVudERvY3VtZW50
LmdldEFuaW1hdGlvbnMoKS5sZW5ndGgsIDEpOworICBhbmltMS5maW5pc2goKTsKKworICAgLy8g
YW5pbWF0aW9uIG9mIGRpdl9mcmFtZTEgaW4gaWZyYW1lMSB3aXRoIGlmcmFtZSB0aW1lbGluZQor
ICBjb25zdCBlZmZlY3QyID0gbmV3IEtleWZyYW1lRWZmZWN0KGRpdl9mcmFtZTEsIG51bGwsIDEw
MCAqIE1TX1BFUl9TRUMpOworICBjb25zdCBhbmltMiA9IG5ldyBBbmltYXRpb24oZWZmZWN0Miwg
aWZyYW1lMS5jb250ZW50RG9jdW1lbnQudGltZWxpbmUpOworICBhbmltMi5wbGF5KCk7CisgIGFz
c2VydF9lcXVhbHMoZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmxlbmd0aCwgMCk7CisgIGFzc2Vy
dF9lcXVhbHMoaWZyYW1lMS5jb250ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmxlbmd0aCwg
MSk7CisgIGFuaW0yLmZpbmlzaCgpOworCisgIC8vYW5pbWF0aW9uIG9mIGRpdl9tYWluX2ZyYW1l
IGluIG1haW4gZnJhbWUgd2l0aCBpZnJhbWUgdGltZWxpbmUKKyAgY29uc3QgZWZmZWN0MyA9IG5l
dyBLZXlmcmFtZUVmZmVjdChkaXZfbWFpbl9mcmFtZSwgbnVsbCwgMTAwICogTVNfUEVSX1NFQyk7
CisgIGNvbnN0IGFuaW0zID0gbmV3IEFuaW1hdGlvbihlZmZlY3QzLCBpZnJhbWUxLmNvbnRlbnRE
b2N1bWVudC50aW1lbGluZSk7CisgIGFuaW0zLnBsYXkoKTsKKyAgYXNzZXJ0X2VxdWFscyhkb2N1
bWVudC5nZXRBbmltYXRpb25zKCkubGVuZ3RoLCAxKTsKKyAgYXNzZXJ0X2VxdWFscyhpZnJhbWUx
LmNvbnRlbnREb2N1bWVudC5nZXRBbmltYXRpb25zKCkubGVuZ3RoLCAwKTsKKyAgYW5pbTMuZmlu
aXNoKCk7CisKKyAgLy9hbmltYXRpb24gb2YgZGl2X2ZyYW1lMSBpbiBpZnJhbWUxIHdpdGggYW5v
dGhlciBpZnJhbWUncyB0aW1lbGluZQorICBjb25zdCBlZmZlY3Q0ID0gbmV3IEtleWZyYW1lRWZm
ZWN0KGRpdl9mcmFtZTEsIG51bGwsIDEwMCAqIE1TX1BFUl9TRUMpOworICBjb25zdCBhbmltNCA9
IG5ldyBBbmltYXRpb24oZWZmZWN0NCwgaWZyYW1lMi5jb250ZW50RG9jdW1lbnQudGltZWxpbmUp
OworICBhbmltNC5wbGF5KCk7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuZ2V0QW5pbWF0aW9u
cygpLmxlbmd0aCwgMCk7CisgIGFzc2VydF9lcXVhbHMoaWZyYW1lMS5jb250ZW50RG9jdW1lbnQu
Z2V0QW5pbWF0aW9ucygpLmxlbmd0aCwgMSk7CisgIGFzc2VydF9lcXVhbHMoaWZyYW1lMi5jb250
ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmxlbmd0aCwgMCk7CisgIGFuaW00LmZpbmlzaCgp
OworfSwgJ2lmcmFtZS5jb250ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpIHJldHVybnMgYW5p
bWF0aW9ucyBvbiBlbGVtZW50cyAnCisgICArICdpbnNpZGUgc2FtZS1vcmlnaW4gRG9jdW1lbnQn
KTsKKwogdGVzdCh0ID0+IHsKICAgY29uc3QgZGl2ID0gY3JlYXRlRGl2KHQpOwogICBjb25zdCBz
aGFkb3cgPSBkaXYuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pOwpAQCAtMTQ5LDYgKzE4
OCwyMCBAQCB0ZXN0KHQgPT4gewogICApOwogfSwgJ0RvY3VtZW50LmdldEFuaW1hdGlvbnMoKSBk
b2VzIE5PVCByZXR1cm4gYW5pbWF0aW9ucyBpbiBzaGFkb3cgdHJlZXMnKTsKIAordGVzdCh0ID0+
IHsKKyAgY29uc3QgZGl2ID0gY3JlYXRlRGl2KHQpOworICBjb25zdCBzaGFkb3cgPSBkaXYuYXR0
YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pOworCisgIGRpdi5hbmltYXRlKGdLZXlGcmFtZXMs
IDEwMCAqIE1TX1BFUl9TRUMpCisKKyAgYXNzZXJ0X2FycmF5X2VxdWFscygKKyAgICBkaXYuc2hh
ZG93Um9vdC5nZXRBbmltYXRpb25zKCksCisgICAgW10sCisgICAgJ2dldEFuaW1hdGlvbnMoKSBj
YWxsZWQgb24gU2hhZG93Um9vdCBkb2VzIG5vdCByZXR1cm4gYW5pbWF0aW9ucyBmcm9tJworICAg
ICsgJyBEb2N1bWVudCcKKyAgKTsKK30sICdTaGFkb3dSb290LmdldEFuaW1hdGlvbnMoKSBkb2Vz
IE5PVCByZXR1cm4gYW5pbWF0aW9ucyBpbiBwYXJlbnQgZG9jdW1lbnQnKTsKKwogcHJvbWlzZV90
ZXN0KGFzeW5jIHQgPT4gewogICBjb25zdCBkaXYgPSBjcmVhdGVEaXYodCk7CiAgIGNvbnN0IHdh
dGNoZXIgPSBFdmVudFdhdGNoZXIodCwgZGl2LCAndHJhbnNpdGlvbnJ1bicpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0
aW9ucy90ZXN0Y29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWItYW5pbWF0aW9ucy90ZXN0Y29tbW9uLmpzCmluZGV4IGY4OWNiYmFmOTM2MWIx
ZTUwYjE0NzNlOTNhZTYzYWFhMWFiYjM0YzcuLjFlYjI0ZjY1OGMyMzQ4MTcxYjM4NmYzNmRjYzFi
ODI0YWQyMzZmYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvdGVzdGNvbW1vbi5qcworKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1hbmltYXRpb25zL3Rlc3Rjb21t
b24uanMKQEAgLTE4MCw2ICsxODAsMTYgQEAgZnVuY3Rpb24gd2FpdEZvck5leHRGcmFtZSgpIHsK
ICAgfSk7CiB9CiAKK2FzeW5jIGZ1bmN0aW9uIGluc2VydEZyYW1lQW5kQXdhaXRMb2FkKHRlc3Qs
IGlmcmFtZSwgZG9jKSB7CisgIGNvbnN0IGV2ZW50V2F0Y2hlciA9IG5ldyBFdmVudFdhdGNoZXIo
dGVzdCwgaWZyYW1lLCBbJ2xvYWQnXSk7CisgIGNvbnN0IGV2ZW50X3Byb21pc2UgPSBldmVudFdh
dGNoZXIud2FpdF9mb3IoJ2xvYWQnKTsKKworICBkb2MuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUp
OworICB0ZXN0LmFkZF9jbGVhbnVwKCgpID0+IHsgZG9jLmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1l
KTsgfSk7CisKKyAgYXdhaXQgZXZlbnRfcHJvbWlzZTsKK30KKwogLy8gUmV0dXJucyAnbWF0cml4
KCknIG9yICdtYXRyaXgzZCgpJyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gYW4gYXJy
YXkuCiBmdW5jdGlvbiBjcmVhdGVNYXRyaXhGcm9tQXJyYXkoYXJyYXkpIHsKICAgcmV0dXJuIChh
cnJheS5sZW5ndGggPT0gMTYgPyAnbWF0cml4M2QnIDogJ21hdHJpeCcpICsgYCgke2FycmF5Lmpv
aW4oKX0pYDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395573</attachid>
            <date>2020-04-06 09:43:08 -0700</date>
            <delta_ts>2020-04-06 09:55:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202192-20200406184307.patch</filename>
            <type>text/plain</type>
            <size>17706</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY2MjFlZjIwMzkxZjUw
OWNkZjZlZTVkNmJjYmQ5ZTdiM2E3OTBjYi4uNjg2YzRmOGMwZDY3NjlkYmJmYmYxNjUwMDU0OTI4
MTNmMDliNTk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA0LTA2ICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBBbmltYXRpb25z
XSBNb3ZlIERvY3VtZW50LmdldEFuaW1hdGlvbnMoKSB0byBEb2N1bWVudE9yU2hhZG93Um9vdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyMTkyCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTY5Nzc3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSByZW1vdmUgdGhlIGdldEFuaW1hdGlvbnMoKSBk
ZWNsYXJhdGlvbiBmcm9tIHRoZSBEb2N1bWVudCBpbnRlcmZhY2UgYW5kIGluc3RlYWQgbW92ZSBp
dCBvbiB0aGUgRG9jdW1lbnRPclNoYWRvd1Jvb3QgaW50ZXJmYWNlLgorCisgICAgICAgIFdlIGFk
ZCB0aGUgbmV3IG1ldGhvZCBEb2N1bWVudDo6Z2V0TWF0Y2hpbmdBbmltYXRpb25zKCkgd2hpY2gg
dGFrZXMgYSBsYW1iZGEgdGhhdCBpcyBwcm92aWRlZCBhbiBhbmltYXRpb24ncyBlZmZlY3QncyB0
YXJnZXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKKyAgICAgICAgdGhhdCBhbmltYXRpb24gc2hvdWxk
IGJlIGZvdW5kIGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMuCisKKyAgICAgICAgSW4gdGhlIGNh
c2Ugb2YgRG9jdW1lbnQ6OmdldEFuaW1hdGlvbnMoKSwgd2UgZmlsdGVyIG91dCBhbmltYXRpb25z
IHRhcmdldGluZyBlbGVtZW50cyBob3N0ZWQgaW4gc2hhZG93IHJvb3RzLCB3aGlsZSBpbiBTaGFk
b3dSb290OmdldEFuaW1hdGlvbnMoKSwKKyAgICAgICAgd2UgZmlsdGVyIG91dCBhbmltYXRpb25z
IHRhcmdldGluZyBlbGVtZW50cyB0aGF0IGFyZSBub3QgaG9zdGVkIGluIHRoZSBzaGFkb3cgcm9v
dCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgb24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldEFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmdldE1hdGNoaW5nQW5pbWF0aW9ucyk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDoKKyAgICAgICAgKiBkb20v
RG9jdW1lbnRPclNoYWRvd1Jvb3QuaWRsOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEFuaW1hdGlvbnMpOgorICAgICAgICAqIGRvbS9T
aGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmdldEFuaW1hdGlv
bnMpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisKIDIwMjAtMDQtMDYgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuZHJhd0ltYWdlIHNob3VsZCBpZ25vcmUgdGhlIEVYSUYgb3JpZW50YXRp
b24gaWYgdGhlIGltYWdlLW9yaWVudGF0aW9uIGlzIG5vbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDNlZjk0NTkwMGJhOGYyNGUwMmY1ZWNmMjBkZWNmYzcwOGJmZDgyYTAuLmUyNDkyZWFj
YTNjY2VmZWE2OWZjZWU3YzZmN2I0MzlmMDVhMmNkZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtODEwMiwxNCArODEwMiwzMSBAQCBEb2N1bWVudFRpbWVsaW5lJiBEb2N1bWVudDo6dGlt
ZWxpbmUoKQogfQogCiBWZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+IERvY3VtZW50OjpnZXRB
bmltYXRpb25zKCkKK3sKKyAgICByZXR1cm4gZ2V0TWF0Y2hpbmdBbmltYXRpb25zKFtdIChFbGVt
ZW50JiB0YXJnZXQpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gIXRhcmdldC5jb250YWluaW5n
U2hhZG93Um9vdCgpOworICAgIH0pOworfQorCitWZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+
IERvY3VtZW50OjpnZXRNYXRjaGluZ0FuaW1hdGlvbnMoY29uc3QgV1RGOjpGdW5jdGlvbjxib29s
KEVsZW1lbnQmKT4mIGZ1bmN0aW9uKQogewogICAgIC8vIEZvciB0aGUgbGlzdCBvZiBhbmltYXRp
b25zIHRvIGJlIGN1cnJlbnQsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgYW55IHBlbmRpbmcgQ1NT
IGNoYW5nZXMsCiAgICAgLy8gc3VjaCBhcyB1cGRhdGVzIHRvIENTUyBBbmltYXRpb25zIGFuZCBD
U1MgVHJhbnNpdGlvbnMuCiAgICAgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCi0gICAgaWYgKG1f
dGltZWxpbmUpCi0gICAgICAgIHJldHVybiBtX3RpbWVsaW5lLT5nZXRBbmltYXRpb25zKCk7Ci0g
ICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoIW1fdGltZWxpbmUpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkFuaW1hdGlvbj4+IGFuaW1hdGlvbnM7CisgICAgZm9y
IChhdXRvJiBhbmltYXRpb24gOiBtX3RpbWVsaW5lLT5nZXRBbmltYXRpb25zKCkpIHsKKyAgICAg
ICAgYXV0byogZWZmZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKKyAgICAgICAgQVNTRVJUKGlz
PEtleWZyYW1lRWZmZWN0PihhbmltYXRpb24tPmVmZmVjdCgpKSk7CisgICAgICAgIGF1dG8qIHRh
cmdldCA9IGRvd25jYXN0PEtleWZyYW1lRWZmZWN0PigqZWZmZWN0KS50YXJnZXQoKTsKKyAgICAg
ICAgQVNTRVJUKHRhcmdldCk7CisgICAgICAgIGlmIChmdW5jdGlvbigqdGFyZ2V0KSkKKyAgICAg
ICAgICAgIGFuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgfQorICAgIHJldHVybiBh
bmltYXRpb25zOwogfQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggODM5YWZjZDU4YmFhMzFhNzJlOWZhNWYxZTY1NzkyNjNmODdmMmJjMS4u
ZTRkMTAxODRlZjk1ZTRkNjNkNmVlNDFmZjZhYzA4MGM1YTM1ZjMwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTE0ODUsNyArMTQ4NSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBE
b2N1bWVudFRpbWVsaW5lJiB0aW1lbGluZSgpOwogICAgIERvY3VtZW50VGltZWxpbmUqIGV4aXN0
aW5nVGltZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3RpbWVsaW5lLmdldCgpOyB9CiAgICAgVmVj
dG9yPFJlZlB0cjxXZWJBbmltYXRpb24+PiBnZXRBbmltYXRpb25zKCk7Ci0gICAgICAgIAorICAg
IFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gZ2V0TWF0Y2hpbmdBbmltYXRpb25zKGNvbnN0
IFdURjo6RnVuY3Rpb248Ym9vbChFbGVtZW50Jik+Jik7CisKICNpZiBFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIGRpZEluc2VydEF0dGFjaG1lbnRFbGVtZW50KEhUTUxBdHRhY2ht
ZW50RWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggY2UzZGVlMDlmNGQxN2I2
YmQ2OTkzYTg5NTU1MzM0YTBjYTUzYWJlYi4uN2JkMDU1YzcwZGZmMzdlNzdmMjczYjcxN2YzMzVh
NTUwYzdkZDcxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC0xOTAsNyArMTkwLDYgQEAg
dHlwZWRlZiAoCiAgICAgW1JlcGxhY2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEFsbENv
bGxlY3Rpb24gYWxsOyAvKiBbU2FtZU9iamVjdF0gKi8KIAogICAgIFtFbmFibGVkQXRSdW50aW1l
PVdlYkFuaW1hdGlvbnNdIHJlYWRvbmx5IGF0dHJpYnV0ZSBEb2N1bWVudFRpbWVsaW5lIHRpbWVs
aW5lOwotICAgIFtFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNdIHNlcXVlbmNlPFdlYkFu
aW1hdGlvbj4gZ2V0QW5pbWF0aW9ucygpOwogfTsKIAogZW51bSBEb2N1bWVudFJlYWR5U3RhdGUg
eyAibG9hZGluZyIsICJpbnRlcmFjdGl2ZSIsICJjb21wbGV0ZSIgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yU2hhZG93Um9vdC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRPclNoYWRvd1Jvb3QuaWRsCmluZGV4IGI5YjIzZjExY2E3ZDM1MTg5ZWZk
YTc1MTI3NTkxOWIwZTlkNWRhMzAuLjM4NjM2MmE5OGZmMzUyZGNmMzE0MThkYzgxZTJjZTZmMDQz
MTRmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yU2hhZG93Um9v
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JTaGFkb3dSb290LmlkbApA
QCAtNDMsNCArNDMsNyBAQAogCiAgICAgLy8gRXh0ZW5zaW9ucyBmcm9tIFBpY3R1cmUtaW4tUGlj
dHVyZSBBUEkgKGh0dHBzOi8vd2ljZy5naXRodWIuaW8vcGljdHVyZS1pbi1waWN0dXJlLyNkb2N1
bWVudG9yc2hhZG93cm9vdC1leHRlbnNpb24pCiAgICAgW0NvbmRpdGlvbmFsPVBJQ1RVUkVfSU5f
UElDVFVSRV9BUEksIEVuYWJsZWRCeVNldHRpbmc9UGljdHVyZUluUGljdHVyZUFQSV0gcmVhZG9u
bHkgYXR0cmlidXRlIEVsZW1lbnQ/IHBpY3R1cmVJblBpY3R1cmVFbGVtZW50OworCisgICAgLy8g
RXh0ZW5zaW9uIGZyb20gV2ViIEFuaW1hdGlvbnMgQVBJIChodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9ucy10by10aGUtZG9jdW1lbnRvcnNoYWRvd3Jv
b3QtaW50ZXJmYWNlLW1peGluKQorICAgIFtFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNd
IHNlcXVlbmNlPFdlYkFuaW1hdGlvbj4gZ2V0QW5pbWF0aW9ucygpOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCBhOGI0MDExOTI1NDE4ZDNmOGUyNDliMWY5MTVmZjZiMTJlYTZjYzcyLi4w
Zjk3ZmQ0ZjNiMzE0MGMzODBjMGViNDBmZTQzOTAzZmY4NTRkNmVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC00NTUwLDE5ICs0NTUwLDExIEBAIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9u
Pj4gRWxlbWVudDo6Z2V0QW5pbWF0aW9ucyhPcHRpb25hbDxHZXRBbmltYXRpb25zT3B0aW9uCiAg
ICAgLy8gYW5pbWF0aW9ucyB0YXJnZXRpbmcgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQgb24gdGhp
cyBlbGVtZW50LCBvbmUgb2YgaXRzIHBzZXVkbyBlbGVtZW50cyBvciBhIGNoaWxkJ3MKICAgICAv
LyBwc2V1ZG8gZWxlbWVudC4KICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5zdWJ0cmVlKSB7
Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8V2ViQW5pbWF0aW9uPj4gYW5pbWF0aW9uczsKLSAgICAg
ICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBkb2N1bWVudCgpLmdldEFuaW1hdGlvbnMoKSkgewot
ICAgICAgICAgICAgYXV0byogZWZmZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpczxLZXlmcmFtZUVmZmVjdD4oYW5pbWF0aW9uLT5lZmZlY3QoKSkpOwotICAg
ICAgICAgICAgYXV0byogdGFyZ2V0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCplZmZlY3Qp
LnRhcmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKHRhcmdldCk7Ci0gICAgICAgICAgICBpZiAo
aXM8UHNldWRvRWxlbWVudD4odGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIGlmIChjb250YWlu
cyhkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqdGFyZ2V0KS5ob3N0RWxlbWVudCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoY29udGFpbnModGFyZ2V0KSkKLSAgICAgICAgICAgICAgICBhbmltYXRpb25z
LmFwcGVuZChhbmltYXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhbmltYXRpb25z
OworICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS5nZXRNYXRjaGluZ0FuaW1hdGlvbnMoWyZdIChF
bGVtZW50JiB0YXJnZXQpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKGlzPFBzZXVkb0VsZW1l
bnQ+KHRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKGRvd25jYXN0PFBz
ZXVkb0VsZW1lbnQ+KHRhcmdldCkuaG9zdEVsZW1lbnQoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y29udGFpbnMoJnRhcmdldCk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIC8vIEZvciB0aGUg
bGlzdCBvZiBhbmltYXRpb25zIHRvIGJlIGN1cnJlbnQsIHdlIG5lZWQgdG8gYWNjb3VudCBmb3Ig
YW55IHBlbmRpbmcgQ1NTIGNoYW5nZXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXgg
NmY0ZjRjNDM2NzVlMzdiZmIxZTFjMjdkZjhlZmUzZWFmY2M4ZDYwOC4uZmQyN2M2NmQwMjIzZTcw
MTNkZWJjNDNjOTQ5N2QzNzEzZGEzMGZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApA
QCAtMzY3LDQgKzM2NywxMSBAQCBIVE1MVmlkZW9FbGVtZW50KiBTaGFkb3dSb290OjpwaWN0dXJl
SW5QaWN0dXJlRWxlbWVudCgpIGNvbnN0CiB9CiAjZW5kaWYKIAorVmVjdG9yPFJlZlB0cjxXZWJB
bmltYXRpb24+PiBTaGFkb3dSb290OjpnZXRBbmltYXRpb25zKCkKK3sKKyAgICByZXR1cm4gZG9j
dW1lbnQoKS5nZXRNYXRjaGluZ0FuaW1hdGlvbnMoWyZdIChFbGVtZW50JiB0YXJnZXQpIC0+IGJv
b2wgeworICAgICAgICByZXR1cm4gdGFyZ2V0LmNvbnRhaW5pbmdTaGFkb3dSb290KCkgPT0gdGhp
czsKKyAgICB9KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggYjBjOWRjMTIz
OGFmMzYwN2U1YzdmNjVmYmFiODNjOWI2NjgxNDU1YS4uZGFiZTI3ZjY0ZDhmNjAxNzZmYTUwYWIz
N2RiNjIwNmIwNDhjNmY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC00MCw2ICs0MCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxTbG90RWxlbWVudDsKIGNsYXNzIFNs
b3RBc3NpZ25tZW50OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CitjbGFzcyBXZWJBbmltYXRpb247
CiAKIGNsYXNzIFNoYWRvd1Jvb3QgZmluYWwgOiBwdWJsaWMgRG9jdW1lbnRGcmFnbWVudCwgcHVi
bGljIFRyZWVTY29wZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTaGFkb3dSb290KTsK
QEAgLTExMSw2ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAgSFRNTFZpZGVvRWxlbWVudCogcGljdHVy
ZUluUGljdHVyZUVsZW1lbnQoKSBjb25zdDsKICNlbmRpZgogCisgICAgVmVjdG9yPFJlZlB0cjxX
ZWJBbmltYXRpb24+PiBnZXRBbmltYXRpb25zKCk7CisKIHByaXZhdGU6CiAgICAgU2hhZG93Um9v
dChEb2N1bWVudCYsIFNoYWRvd1Jvb3RNb2RlLCBEZWxlZ2F0ZXNGb2N1cyk7CiAgICAgU2hhZG93
Um9vdChEb2N1bWVudCYsIHN0ZDo6dW5pcXVlX3B0cjxTbG90QXNzaWdubWVudD4mJik7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCBkYWMyNjlmMTEwYzNkODBiZTBkOThhOTRkOGY3
OWIzNTUwYTI3OTI4Li44MDk1MTUzY2JhM2QyOTg5MjgwNmM5OWJiMWFiMDFjMzAxOTRmYjQxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMC0wNC0w
NiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgorCisgICAgICAgIFtXZWIgQW5p
bWF0aW9uc10gTW92ZSBEb2N1bWVudC5nZXRBbmltYXRpb25zKCkgdG8gRG9jdW1lbnRPclNoYWRv
d1Jvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MjE5MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTU2OTc3NzU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0ZXN0IHJlbGV2YW50
IHRvIERvY3VtZW50T3JTaGFkb3dSb290LmdldEFuaW1hdGlvbnMoKSBmcm9tIHVwc3RyZWFtIGFu
ZCByZWNvcmQgdGhyZWUgbmV3IFBBU1MgcmVzdWx0cyBpbiBpdC4gV2UgYWxzbyBnZXQgdHdvIG5l
dyBQQVNTIGZyb20gYSBoYXJuZXNzIHRlc3QuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvd2ViLWFuaW1hdGlvbnMvaWRsaGFybmVzcy53aW5kb3ctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pbnRlcmZhY2VzL0RvY3VtZW50
T3JTaGFkb3dSb290L2dldEFuaW1hdGlvbnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pbnRlcmZhY2VzL0RvY3VtZW50T3JTaGFkb3dS
b290L2dldEFuaW1hdGlvbnMuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
LWFuaW1hdGlvbnMvdGVzdGNvbW1vbi5qczoKKyAgICAgICAgKGFzeW5jIGluc2VydEZyYW1lQW5k
QXdhaXRMb2FkKToKKwogMjAyMC0wNC0wNSAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAgPHJlZ29A
aWdhbGlhLmNvbT4KIAogICAgICAgICBDb21wdXRlZCBzdHlsZSBmb3IgIm91dGxpbmUtb2Zmc2V0
IiBpcyB3cm9uZyB3aGVuICJvdXRsaW5lLXN0eWxlIiBpcyAibm9uZSIKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMv
aWRsaGFybmVzcy53aW5kb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pZGxoYXJuZXNzLndpbmRvdy1leHBl
Y3RlZC50eHQKaW5kZXggZGY0Y2RhMzI5MDIwNDg4NTNjNjA2ZTliMmM0ZjBkNzA4ODY4NGZkNi4u
Y2VmMjI1NTBjMTVmYzA1NDAxNDliZDhlMzI4ZjA4ZTYxMmI2YTc1OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9p
ZGxoYXJuZXNzLndpbmRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pZGxoYXJuZXNzLndpbmRvdy1l
eHBlY3RlZC50eHQKQEAgLTE0MCw4ICsxNDAsOCBAQCBQQVNTIERvY3VtZW50IGludGVyZmFjZTog
YXR0cmlidXRlIHRpbWVsaW5lCiBQQVNTIERvY3VtZW50IGludGVyZmFjZTogb3BlcmF0aW9uIGdl
dEFuaW1hdGlvbnMoKSAKIFBBU1MgRG9jdW1lbnQgaW50ZXJmYWNlOiBkb2N1bWVudCBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgInRpbWVsaW5lIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKIFBBU1MgRG9j
dW1lbnQgaW50ZXJmYWNlOiBkb2N1bWVudCBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFuaW1h
dGlvbnMoKSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCi1GQUlMIFNoYWRvd1Jvb3QgaW50ZXJmYWNl
OiBvcGVyYXRpb24gZ2V0QW5pbWF0aW9ucygpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQg
cHJvcGVydHkgImdldEFuaW1hdGlvbnMiIG1pc3NpbmcKLUZBSUwgU2hhZG93Um9vdCBpbnRlcmZh
Y2U6IHNoYWRvd1Jvb3QgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRBbmltYXRpb25zKCkiIHdp
dGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldEFuaW1hdGlv
bnMiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KK1BBU1MgU2hhZG93Um9vdCBpbnRlcmZh
Y2U6IG9wZXJhdGlvbiBnZXRBbmltYXRpb25zKCkgCitQQVNTIFNoYWRvd1Jvb3QgaW50ZXJmYWNl
OiBzaGFkb3dSb290IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0QW5pbWF0aW9ucygpIiB3aXRo
IHRoZSBwcm9wZXIgdHlwZSAKIFBBU1MgRWxlbWVudCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBhbmlt
YXRlKG9iamVjdCwgW29iamVjdCBPYmplY3RdLFtvYmplY3QgT2JqZWN0XSkgCiBQQVNTIEVsZW1l
bnQgaW50ZXJmYWNlOiBvcGVyYXRpb24gZ2V0QW5pbWF0aW9ucyhHZXRBbmltYXRpb25zT3B0aW9u
cykgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvd2ViLWFuaW1hdGlvbnMvaW50ZXJmYWNlcy9Eb2N1bWVudE9yU2hhZG93Um9vdC9nZXRB
bmltYXRpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvaW50ZXJmYWNlcy9Eb2N1bWVudE9yU2hhZG93Um9v
dC9nZXRBbmltYXRpb25zLWV4cGVjdGVkLnR4dAppbmRleCA4YjIzYThkNmYwY2Q3MTBkN2ZhMDc1
OTFlZTlkOWZlZDc2MDBhY2YxLi4yNmE2NTg0NjI4NmJmNTVhOWNhNWFiNDk3YjZhMjRjNGZjZjE1
YjI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYi1hbmltYXRpb25zL2ludGVyZmFjZXMvRG9jdW1lbnRPclNoYWRvd1Jvb3QvZ2V0QW5p
bWF0aW9ucy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pbnRlcmZhY2VzL0RvY3VtZW50T3JTaGFkb3dS
b290L2dldEFuaW1hdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC01LDcgKzUsOSBAQCBQQVNTIERvY3Vt
ZW50LmdldEFuaW1hdGlvbnMoKSByZXR1cm5zIHNjcmlwdC1nZW5lcmF0ZWQgYW5pbWF0aW9ucyBp
biB0aGUgb3JkZXIgdAogUEFTUyBEb2N1bWVudC5nZXRBbmltYXRpb25zKCkgZG9lcyBub3QgcmV0
dXJuIGEgZGlzY29ubmVjdGVkIG5vZGUgCiBQQVNTIERvY3VtZW50LmdldEFuaW1hdGlvbnMoKSBk
b2VzIG5vdCByZXR1cm4gYW4gYW5pbWF0aW9uIHdpdGggYSBudWxsIHRhcmdldCAKIEZBSUwgRG9j
dW1lbnQuZ2V0QW5pbWF0aW9ucygpIHJldHVybnMgYW5pbWF0aW9ucyBvbiBlbGVtZW50cyBpbnNp
ZGUgc2FtZS1vcmlnaW4gaWZyYW1lcyBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCAxIGJ1dCBnb3Qg
MAotRkFJTCBTaGFkb3dSb290LmdldEFuaW1hdGlvbnMoKSByZXR1cm4gYWxsIGFuaW1hdGlvbnMg
aW4gdGhlIHNoYWRvdyB0cmVlIGRpdi5zaGFkb3dSb290LmdldEFuaW1hdGlvbnMgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnZGl2LnNoYWRvd1Jvb3QuZ2V0QW5pbWF0aW9ucygpJywgJ2Rpdi5zaGFk
b3dSb290LmdldEFuaW1hdGlvbnMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgRG9jdW1lbnQuZ2V0QW5p
bWF0aW9ucygpIGRvZXMgTk9UIHJldHVybiBhbmltYXRpb25zIGluIHNoYWRvdyB0cmVlcyBhc3Nl
cnRfYXJyYXlfZXF1YWxzOiBnZXRBbmltYXRpb25zKCkgY2FsbGVkIG9uIERvY3VtZW50IGRvZXMg
bm90IHJldHVybiBhbmltYXRpb25zIGZyb20gc2hhZG93IHRyZWVzIGxlbmd0aHMgZGlmZmVyLCBl
eHBlY3RlZCAwIGdvdCAxCitGQUlMIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9u
cygpIHJldHVybnMgYW5pbWF0aW9ucyBvbiBlbGVtZW50cyBpbnNpZGUgc2FtZS1vcmlnaW4gRG9j
dW1lbnQgYXNzZXJ0X2VxdWFsczogZXhwZWN0ZWQgMSBidXQgZ290IDAKK1BBU1MgU2hhZG93Um9v
dC5nZXRBbmltYXRpb25zKCkgcmV0dXJuIGFsbCBhbmltYXRpb25zIGluIHRoZSBzaGFkb3cgdHJl
ZSAKK1BBU1MgRG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpIGRvZXMgTk9UIHJldHVybiBhbmltYXRp
b25zIGluIHNoYWRvdyB0cmVlcyAKK1BBU1MgU2hhZG93Um9vdC5nZXRBbmltYXRpb25zKCkgZG9l
cyBOT1QgcmV0dXJuIGFuaW1hdGlvbnMgaW4gcGFyZW50IGRvY3VtZW50IAogUEFTUyBEb2N1bWVu
dC5nZXRBbmltYXRpb25zKCkgdHJpZ2dlcnMgYSBzdHlsZSBjaGFuZ2UgZXZlbnQgCiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFu
aW1hdGlvbnMvaW50ZXJmYWNlcy9Eb2N1bWVudE9yU2hhZG93Um9vdC9nZXRBbmltYXRpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1hbmlt
YXRpb25zL2ludGVyZmFjZXMvRG9jdW1lbnRPclNoYWRvd1Jvb3QvZ2V0QW5pbWF0aW9ucy5odG1s
CmluZGV4IDQ3MzBmMTg2YjM0YTQyNmI2ZGQ2NTdiMTEzYjZlNDA4ZTBhMDhiNTUuLjliY2MwNDJh
OGZlZDMxOGJlNDRkMDlmZDI0MzZjZDk3YmE5YzQwODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvaW50ZXJmYWNl
cy9Eb2N1bWVudE9yU2hhZG93Um9vdC9nZXRBbmltYXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy9pbnRlcmZh
Y2VzL0RvY3VtZW50T3JTaGFkb3dSb290L2dldEFuaW1hdGlvbnMuaHRtbApAQCAtNjgsMTQgKzY4
LDcgQEAgdGVzdCh0ID0+IHsKIAogcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4gewogICBjb25zdCBp
ZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKLQotICBjb25zdCBldmVu
dFdhdGNoZXIgPSBuZXcgRXZlbnRXYXRjaGVyKHQsIGlmcmFtZSwgWydsb2FkJ10pOwotICBjb25z
dCBldmVudF9wcm9taXNlID0gZXZlbnRXYXRjaGVyLndhaXRfZm9yKCdsb2FkJyk7Ci0KLSAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwotICB0LmFkZF9jbGVhbnVwKCgpID0+IHsg
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpZnJhbWUpOyB9KTsKLQotICBhd2FpdCBldmVudF9w
cm9taXNlOworICBhd2FpdCBpbnNlcnRGcmFtZUFuZEF3YWl0TG9hZCh0LCBpZnJhbWUsIGRvY3Vt
ZW50KQogCiAgIGNvbnN0IGRpdiA9IGNyZWF0ZURpdih0LCBpZnJhbWUuY29udGVudERvY3VtZW50
KQogICBjb25zdCBlZmZlY3QgPSBuZXcgS2V5ZnJhbWVFZmZlY3QoZGl2LCBudWxsLCAxMDAgKiBN
U19QRVJfU0VDKTsKQEAgLTkxLDYgKzg0LDUyIEBAIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsK
IH0sICdEb2N1bWVudC5nZXRBbmltYXRpb25zKCkgcmV0dXJucyBhbmltYXRpb25zIG9uIGVsZW1l
bnRzIGluc2lkZSBzYW1lLW9yaWdpbicKICAgICsgJyBpZnJhbWVzJyk7CiAKK3Byb21pc2VfdGVz
dChhc3luYyB0ID0+IHsKKyAgY29uc3QgaWZyYW1lMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2lmcmFtZScpOworICBjb25zdCBpZnJhbWUyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZy
YW1lJyk7CisKKyAgYXdhaXQgaW5zZXJ0RnJhbWVBbmRBd2FpdExvYWQodCwgaWZyYW1lMSwgZG9j
dW1lbnQpOworICBhd2FpdCBpbnNlcnRGcmFtZUFuZEF3YWl0TG9hZCh0LCBpZnJhbWUyLCBkb2N1
bWVudCk7CisKKyAgY29uc3QgZGl2X2ZyYW1lMSA9IGNyZWF0ZURpdih0LCBpZnJhbWUxLmNvbnRl
bnREb2N1bWVudCkKKyAgY29uc3QgZGl2X21haW5fZnJhbWUgPSBjcmVhdGVEaXYodCkKKyAgY29u
c3QgZWZmZWN0MSA9IG5ldyBLZXlmcmFtZUVmZmVjdChkaXZfZnJhbWUxLCBudWxsLCAxMDAgKiBN
U19QRVJfU0VDKTsKKyAgY29uc3QgYW5pbTEgPSBuZXcgQW5pbWF0aW9uKGVmZmVjdDEsIGRvY3Vt
ZW50LnRpbWVsaW5lKTsKKyAgYW5pbTEucGxheSgpOworICAvLyBBbmltYXRpb24gb2YgZGl2X2Zy
YW1lMSBpcyBpbiBpZnJhbWUgd2l0aCBtYWluIHRpbWVsaW5lLgorICAvLyBUaGUgYW5pbWF0aW9u
J3MgdGltZWxpbmUgaXMgZnJvbSB0aGUgaWZyYW1lLCBidXQgdGhlIGVmZmVjdCdzIHRhcmdldAor
ICAvLyBlbGVtZW50IGlzIHBhcnQgb2YgdGhlIGlmcmFtZSdzIGRvY3VtZW50LgorICBhc3NlcnRf
ZXF1YWxzKGRvY3VtZW50LmdldEFuaW1hdGlvbnMoKS5sZW5ndGgsIDApOworICBhc3NlcnRfZXF1
YWxzKGlmcmFtZTEuY29udGVudERvY3VtZW50LmdldEFuaW1hdGlvbnMoKS5sZW5ndGgsIDEpOwor
ICBhbmltMS5maW5pc2goKTsKKworICAgLy8gYW5pbWF0aW9uIG9mIGRpdl9mcmFtZTEgaW4gaWZy
YW1lMSB3aXRoIGlmcmFtZSB0aW1lbGluZQorICBjb25zdCBlZmZlY3QyID0gbmV3IEtleWZyYW1l
RWZmZWN0KGRpdl9mcmFtZTEsIG51bGwsIDEwMCAqIE1TX1BFUl9TRUMpOworICBjb25zdCBhbmlt
MiA9IG5ldyBBbmltYXRpb24oZWZmZWN0MiwgaWZyYW1lMS5jb250ZW50RG9jdW1lbnQudGltZWxp
bmUpOworICBhbmltMi5wbGF5KCk7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuZ2V0QW5pbWF0
aW9ucygpLmxlbmd0aCwgMCk7CisgIGFzc2VydF9lcXVhbHMoaWZyYW1lMS5jb250ZW50RG9jdW1l
bnQuZ2V0QW5pbWF0aW9ucygpLmxlbmd0aCwgMSk7CisgIGFuaW0yLmZpbmlzaCgpOworCisgIC8v
YW5pbWF0aW9uIG9mIGRpdl9tYWluX2ZyYW1lIGluIG1haW4gZnJhbWUgd2l0aCBpZnJhbWUgdGlt
ZWxpbmUKKyAgY29uc3QgZWZmZWN0MyA9IG5ldyBLZXlmcmFtZUVmZmVjdChkaXZfbWFpbl9mcmFt
ZSwgbnVsbCwgMTAwICogTVNfUEVSX1NFQyk7CisgIGNvbnN0IGFuaW0zID0gbmV3IEFuaW1hdGlv
bihlZmZlY3QzLCBpZnJhbWUxLmNvbnRlbnREb2N1bWVudC50aW1lbGluZSk7CisgIGFuaW0zLnBs
YXkoKTsKKyAgYXNzZXJ0X2VxdWFscyhkb2N1bWVudC5nZXRBbmltYXRpb25zKCkubGVuZ3RoLCAx
KTsKKyAgYXNzZXJ0X2VxdWFscyhpZnJhbWUxLmNvbnRlbnREb2N1bWVudC5nZXRBbmltYXRpb25z
KCkubGVuZ3RoLCAwKTsKKyAgYW5pbTMuZmluaXNoKCk7CisKKyAgLy9hbmltYXRpb24gb2YgZGl2
X2ZyYW1lMSBpbiBpZnJhbWUxIHdpdGggYW5vdGhlciBpZnJhbWUncyB0aW1lbGluZQorICBjb25z
dCBlZmZlY3Q0ID0gbmV3IEtleWZyYW1lRWZmZWN0KGRpdl9mcmFtZTEsIG51bGwsIDEwMCAqIE1T
X1BFUl9TRUMpOworICBjb25zdCBhbmltNCA9IG5ldyBBbmltYXRpb24oZWZmZWN0NCwgaWZyYW1l
Mi5jb250ZW50RG9jdW1lbnQudGltZWxpbmUpOworICBhbmltNC5wbGF5KCk7CisgIGFzc2VydF9l
cXVhbHMoZG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmxlbmd0aCwgMCk7CisgIGFzc2VydF9lcXVh
bHMoaWZyYW1lMS5jb250ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmxlbmd0aCwgMSk7Cisg
IGFzc2VydF9lcXVhbHMoaWZyYW1lMi5jb250ZW50RG9jdW1lbnQuZ2V0QW5pbWF0aW9ucygpLmxl
bmd0aCwgMCk7CisgIGFuaW00LmZpbmlzaCgpOworfSwgJ2lmcmFtZS5jb250ZW50RG9jdW1lbnQu
Z2V0QW5pbWF0aW9ucygpIHJldHVybnMgYW5pbWF0aW9ucyBvbiBlbGVtZW50cyAnCisgICArICdp
bnNpZGUgc2FtZS1vcmlnaW4gRG9jdW1lbnQnKTsKKwogdGVzdCh0ID0+IHsKICAgY29uc3QgZGl2
ID0gY3JlYXRlRGl2KHQpOwogICBjb25zdCBzaGFkb3cgPSBkaXYuYXR0YWNoU2hhZG93KHsgbW9k
ZTogJ29wZW4nIH0pOwpAQCAtMTQ5LDYgKzE4OCwyMCBAQCB0ZXN0KHQgPT4gewogICApOwogfSwg
J0RvY3VtZW50LmdldEFuaW1hdGlvbnMoKSBkb2VzIE5PVCByZXR1cm4gYW5pbWF0aW9ucyBpbiBz
aGFkb3cgdHJlZXMnKTsKIAordGVzdCh0ID0+IHsKKyAgY29uc3QgZGl2ID0gY3JlYXRlRGl2KHQp
OworICBjb25zdCBzaGFkb3cgPSBkaXYuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pOwor
CisgIGRpdi5hbmltYXRlKGdLZXlGcmFtZXMsIDEwMCAqIE1TX1BFUl9TRUMpCisKKyAgYXNzZXJ0
X2FycmF5X2VxdWFscygKKyAgICBkaXYuc2hhZG93Um9vdC5nZXRBbmltYXRpb25zKCksCisgICAg
W10sCisgICAgJ2dldEFuaW1hdGlvbnMoKSBjYWxsZWQgb24gU2hhZG93Um9vdCBkb2VzIG5vdCBy
ZXR1cm4gYW5pbWF0aW9ucyBmcm9tJworICAgICsgJyBEb2N1bWVudCcKKyAgKTsKK30sICdTaGFk
b3dSb290LmdldEFuaW1hdGlvbnMoKSBkb2VzIE5PVCByZXR1cm4gYW5pbWF0aW9ucyBpbiBwYXJl
bnQgZG9jdW1lbnQnKTsKKwogcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4gewogICBjb25zdCBkaXYg
PSBjcmVhdGVEaXYodCk7CiAgIGNvbnN0IHdhdGNoZXIgPSBFdmVudFdhdGNoZXIodCwgZGl2LCAn
dHJhbnNpdGlvbnJ1bicpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy90ZXN0Y29tbW9uLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItYW5pbWF0aW9ucy90ZXN0Y29t
bW9uLmpzCmluZGV4IGY4OWNiYmFmOTM2MWIxZTUwYjE0NzNlOTNhZTYzYWFhMWFiYjM0YzcuLjFl
YjI0ZjY1OGMyMzQ4MTcxYjM4NmYzNmRjYzFiODI0YWQyMzZmYmMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLWFuaW1hdGlvbnMvdGVz
dGNvbW1vbi5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYi1hbmltYXRpb25zL3Rlc3Rjb21tb24uanMKQEAgLTE4MCw2ICsxODAsMTYgQEAgZnVu
Y3Rpb24gd2FpdEZvck5leHRGcmFtZSgpIHsKICAgfSk7CiB9CiAKK2FzeW5jIGZ1bmN0aW9uIGlu
c2VydEZyYW1lQW5kQXdhaXRMb2FkKHRlc3QsIGlmcmFtZSwgZG9jKSB7CisgIGNvbnN0IGV2ZW50
V2F0Y2hlciA9IG5ldyBFdmVudFdhdGNoZXIodGVzdCwgaWZyYW1lLCBbJ2xvYWQnXSk7CisgIGNv
bnN0IGV2ZW50X3Byb21pc2UgPSBldmVudFdhdGNoZXIud2FpdF9mb3IoJ2xvYWQnKTsKKworICBk
b2MuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICB0ZXN0LmFkZF9jbGVhbnVwKCgpID0+IHsg
ZG9jLmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTsgfSk7CisKKyAgYXdhaXQgZXZlbnRfcHJvbWlz
ZTsKK30KKwogLy8gUmV0dXJucyAnbWF0cml4KCknIG9yICdtYXRyaXgzZCgpJyBmdW5jdGlvbiBz
dHJpbmcgZ2VuZXJhdGVkIGZyb20gYW4gYXJyYXkuCiBmdW5jdGlvbiBjcmVhdGVNYXRyaXhGcm9t
QXJyYXkoYXJyYXkpIHsKICAgcmV0dXJuIChhcnJheS5sZW5ndGggPT0gMTYgPyAnbWF0cml4M2Qn
IDogJ21hdHJpeCcpICsgYCgke2FycmF5LmpvaW4oKX0pYDsK
</data>
<flag name="review"
          id="410991"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>