<?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>63456</bug_id>
          
          <creation_ts>2011-06-27 08:11:55 -0700</creation_ts>
          <short_desc>SVGAnimatedType should support SVGPreserveAspectRatio animation</short_desc>
          <delta_ts>2011-06-27 10:35:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427944</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-06-27 08:11:55 -0700</bug_when>
    <thetext>SVGAnimatedType should support SVGPreserveAspectRatio animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427952</commentid>
    <comment_count>1</comment_count>
      <attachid>98730</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-06-27 08:26:11 -0700</bug_when>
    <thetext>Created attachment 98730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427963</commentid>
    <comment_count>2</comment_count>
      <attachid>98730</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-27 08:38:52 -0700</bug_when>
    <thetext>Comment on attachment 98730
Patch

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

Looks great, please fix up some thing and make sure it actually builds. If you prefer, you can also upload a new one.

&gt; Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp:57
&gt; +    // Not specified what to do on &apos;by&apos;-animations with SVGPreserveAspectRatio. Fallback to &apos;to&apos;-animation right now. 
&gt; +    from = constructFromString(fromString);
&gt; +    to = constructFromString(byString);

I used ASSERT_NOT_REACHED here for in SVGAnimatedPathAnimator, and made sure AnimatedPath is not added to the switch() which calls calcFromAndByValues.
Isn&apos;t that better than to fail silently?

&gt; Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp:77
&gt; +    // No paced animations for SVGPreserveAspectRatio.

Add the other FIXME?

&gt; Source/WebCore/svg/SVGAnimatedType.h:77
&gt; +    // Used for parsing a String to a SVGPreserveAspectRatio object.
&gt; +    void setPreserveAspectRatioBaseValue(const SVGPreserveAspectRatio&amp;);

Hm, you are not using this method anywhere?

&gt; Source/WebCore/svg/SVGAnimatedType.h:-84
&gt; -        // FIXME: More SVG primitive types need to be added step by step.

Are we done? bool* and ushort* is still missing, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427991</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-06-27 09:07:30 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 98730 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98730&amp;action=review
&gt; 
&gt; Looks great, please fix up some thing and make sure it actually builds. If you prefer, you can also upload a new one.
&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp:57
&gt; &gt; +    // Not specified what to do on &apos;by&apos;-animations with SVGPreserveAspectRatio. Fallback to &apos;to&apos;-animation right now. 
&gt; &gt; +    from = constructFromString(fromString);
&gt; &gt; +    to = constructFromString(byString);
&gt; 
&gt; I used ASSERT_NOT_REACHED here for in SVGAnimatedPathAnimator, and made sure AnimatedPath is not added to the switch() which calls calcFromAndByValues.
&gt; Isn&apos;t that better than to fail silently?
You did not make sure that you never reached &apos;by&apos;-animation for path. And of course it&apos;s not enough to just add an ASSERT_NOT_REACHED. Path is a special case and I gave r+ to your patch, because calculateFromAndByValues() is never called from SVGAnimationElement. This is not the case for PreserveAspectRatio. We even don&apos;t know that we animate PreserveAspectRatio in SVGAnimationElement. Opera is also using &apos;to&apos; animations in that case.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp:77
&gt; &gt; +    // No paced animations for SVGPreserveAspectRatio.
&gt; 
&gt; Add the other FIXME?
How do you want to interpolate these &apos;string&apos; values? You can&apos;t. Thats why it is not an FIXME. Same for String, Enum, Boolean.

And to both calls. I don&apos;t think we should prevent the calls, this would need special logic in SVGAnimateElement, and I&apos;d like to remove all switch and if conditions in the context of AnimatedType. This makes it easier to concentrate the basic logic in SVGAnimationElement for all kind of animations later.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimatedType.h:77
&gt; &gt; +    // Used for parsing a String to a SVGPreserveAspectRatio object.
&gt; &gt; +    void setPreserveAspectRatioBaseValue(const SVGPreserveAspectRatio&amp;);
&gt; 
&gt; Hm, you are not using this method anywhere?
I am. See SVGPreserveAspectRatio::parsePreserveAspectRatio(), it takes a consumer as argument and calls setPreserveAspectRatioBaseValue on the consumer. I take the SVGAnimatedType as consumer.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimatedType.h:-84
&gt; &gt; -        // FIXME: More SVG primitive types need to be added step by step.
&gt; 
&gt; Are we done? bool* and ushort* is still missing, no?

Well, I can re-add this line, but at this point we can remove it IMHO. &apos;Done&apos; is relative, we might want to add a TransformationList and I am not sure what we need for AnimateMotion. The main types how ever are converted already. But you are right, I plan to add enum and bool support as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427999</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-27 09:26:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; 
&gt; &gt; I used ASSERT_NOT_REACHED here for in SVGAnimatedPathAnimator, and made sure AnimatedPath is not added to the switch() which calls calcFromAndByValues.
&gt; &gt; Isn&apos;t that better than to fail silently?
&gt; You did not make sure that you never reached &apos;by&apos;-animation for path. And of course it&apos;s not enough to just add an ASSERT_NOT_REACHED. Path is a special case and I gave r+ to your patch, because calculateFromAndByValues() is never called from SVGAnimationElement.
This is exactly what I meant with &quot;and made sure AnimatedPath is not added to the switch() which calls calcFromAndByValues.&quot;

&gt; This is not the case for PreserveAspectRatio.
As I said, when you want to add assert_not_reached for by anims, then you have to make sure you&apos;re not calling calcFromAndByValues from SVAnimationElement.

&gt;We even don&apos;t know that we animate PreserveAspectRatio in SVGAnimationElement. Opera is also using &apos;to&apos; animations in that case.
Well, now that makes sense, for compatibility. Of course a by animation in the context of aspect ratio is useless, so this behaviour might make sense to some degree.


&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/svg/SVGAnimatedPreserveAspectRatio.cpp:77
&gt; &gt; &gt; +    // No paced animations for SVGPreserveAspectRatio.
&gt; &gt; 
&gt; &gt; Add the other FIXME?
&gt; How do you want to interpolate these &apos;string&apos; values? You can&apos;t. Thats why it is not an FIXME. Same for String, Enum, Boolean.
I&apos;m sorry, you&apos;re totally right. (I had viewBox in mind, not pAR)
&gt; 
&gt; And to both calls. I don&apos;t think we should prevent the calls, this would need special logic in SVGAnimateElement, and I&apos;d like to remove all switch and if conditions in the context of AnimatedType. This makes it easier to concentrate the basic logic in SVGAnimationElement for all kind of animations later.
That&apos;s a good argument as well, keep it as is.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/svg/SVGAnimatedType.h:77
&gt; &gt; &gt; +    // Used for parsing a String to a SVGPreserveAspectRatio object.
&gt; &gt; &gt; +    void setPreserveAspectRatioBaseValue(const SVGPreserveAspectRatio&amp;);
&gt; &gt; 
&gt; &gt; Hm, you are not using this method anywhere?
&gt; I am. See SVGPreserveAspectRatio::parsePreserveAspectRatio(), it takes a consumer as argument and calls setPreserveAspectRatioBaseValue on the consumer. I take the SVGAnimatedType as consumer.
Oh wow, that&apos;s hidden API ;-)
 
&gt; Well, I can re-add this line, but at this point we can remove it IMHO. &apos;Done&apos; is relative, we might want to add a TransformationList and I am not sure what we need for AnimateMotion. The main types how ever are converted already. But you are right, I plan to add enum and bool support as well.
Okay great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428074</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-06-27 10:35:17 -0700</bug_when>
    <thetext>Committed r89833: &lt;http://trac.webkit.org/changeset/89833&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98730</attachid>
            <date>2011-06-27 08:26:11 -0700</date>
            <delta_ts>2011-06-27 08:38:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63456-20110627172607.patch</filename>
            <type>text/plain</type>
            <size>30139</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5ODIxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDYtMjcgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTVkdBbmltYXRlZFR5cGUgc2hvdWxkIHN1cHBvcnQgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbyBhbmltYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzNDU2CisgICAgICAgIAorICAgICAgICBGb2xsb3cgdXAgb2YgIlNW
R0FuaW1hdGlvbiBzaG91bGQgdXNlIGRpcmVjdCB1bml0IGFuaW1hdGlvbiBmb3IgU1ZHTGVuZ3Ro
IjogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMzY4CisgICAgICAg
IFRoaXMgcGF0Y2ggY29udGludWVzIHRoZSBjb252ZXJzaW9uIHRvIHRoZSBuZXcgY29uY2VwdCBv
ZiBTVkdBbmltYXRvckZhY3Rvcnkgd2l0aCBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8u
CisgICAgICAgIAorICAgICAgICBUaGUgbmV3IGFuaW1hdG9yIGRvZXMgbm90IGFmZmVjdCBhbnkg
YmVoYXZpb3IsIHNpbmNlIGl0IHdhcyBhbmltYXRlZCB3aXRoIFNWR0FuaW1hdGVkU3RyaW5nIGJl
Zm9yZS4gVGhlIG5ldyBhbmltYXRvciBpcyBzdGlsbCBuZWVkZWQKKyAgICAgICAgdG8gc3VwcG9y
dCBhbmltVmFsIGFuZCBiYXNlVmFsIGxhdGVyLgorCisgICAgICAgIFRlc3Q6IHN2Zy9hbmltYXRp
b25zL3N2Z1ByZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0aW9uLTEuaHRtbAorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6IEFkZGVkIG5ldyBmaWxlLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogRGl0dG8uCisgICAgICAgICog
V2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0FsbEluT25lLmNwcDogRGl0dG8uCisg
ICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDogSGFuZGxlIEFuaW1hdGVkUHJlc2Vy
dmVBc3BlY3RSYXRpby4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpkZXRl
cm1pbmVBbmltYXRlZEF0dHJpYnV0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0
ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2UpOgor
ICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwOiBBZGRlZC4g
TmV3IGFuaW1hdG9yIGZvciBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uCisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6U1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0
b3I6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1h
dG9yOjpjYWxjdWxhdGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpjYWxjdWxhdGVEaXN0YW5jZSk6CisgICAg
ICAgICogc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6On5TVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVk
VHlwZS5jcHA6IFN1cHBvcnQgZm9yIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6On5TVkdBbmltYXRlZFR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQcmVzZXJ2ZUFzcGVjdFJhdGlvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6cHJlc2VydmVBc3BlY3RSYXRpbyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGU6OnZhbHVlQXNTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlOjpzZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkVHlwZTo6c2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSk6
CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHlwZS5oOgorICAgICAgICAqIHN2Zy9TVkdBbmlt
YXRvckZhY3RvcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdG9yRmFjdG9yeTo6Y3Jl
YXRlKToKKwogMjAxMS0wNi0yNyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiA4OTc4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjY1LDYgKzE2NjUsNyBAQCBJRiAoRU5BQkxFX1NWRykK
ICAgICAgICAgc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3BwCiAgICAgICAg
IHN2Zy9TVkdBbmltYXRlZFBhdGguY3BwCiAgICAgICAgIHN2Zy9TVkdBbmltYXRlZFBvaW50TGlz
dC5jcHAKKyAgICAgICAgc3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKICAg
ICAgICAgc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAKICAgICAgICAgc3ZnL1NWR0FuaW1hdGVkU3Ry
aW5nLmNwcAogICAgICAgICBzdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA4OTc4MykKKysrIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM0NDIsNiArMzQ0Miw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0aC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuaCBcCisJU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCBcCiAJU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZFJlY3QuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4OTc4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTcxOCw2ICs1NzE4LDcg
QEAKICAgICAgICAgICAgICdzdmcvU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAn
LAogICAgICAgICAgICAgJ3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwJywKICAgICAgICAgICAgICdz
dmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHQW5pbWF0
ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0FuaW1hdGVk
UmVjdC5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAnLAogICAg
ICAgICAgICAgJ3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA4OTc4MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzQ1LDYgKzMzNDUsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICAgICAgICAgICAgc3ZnL1NWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3Bw
IFwKICAgICAgICAgICAgICAgc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHAgXAogICAgICAgICAgICAg
ICBzdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwIFwKKyAgICAgICAgICAgICAgc3ZnL1NWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHQW5p
bWF0ZWRSZWN0LmNwcCBcCiAgICAgICAgICAgICAgIHN2Zy9TVkdBbmltYXRlZFN0cmluZy5jcHAg
XAogICAgICAgICAgICAgICBzdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA4OTc4MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTM0LDYgKzkzNCw3IEBACiAJCTQzMUEyRjlDMTNCNkYy
QjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzFBMkY5QTEzQjZGMkIwMDA3
NzkxRTQgLyogU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5oICovOyB9OwogCQk0MzFB
MkY5RDEzQjZGMkIwMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzFBMkY5
QjEzQjZGMkIwMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAg
Ki87IH07CiAJCTQzMUEyRkQ3MTNCNzcwN0EwMDc3OTFFNCAvKiBTVkdBbmltYXRlZExlbmd0aExp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDMx
QTJGRDYxM0I3NzA3QTAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAgKi87IH07
CisJCTQzMUEzMDIxMTNCODlEQ0MwMDc3OTFFNCAvKiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0
UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDMxQTMwMjAxM0I4OURDQzAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
by5jcHAgKi87IH07CiAJCTQzMzFBQzc4MTNCNjg3MDAwMEE5RTVBRSAvKiBTVkdBbmltYXRlZE51
bWJlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDMzMUFDNzcxM0I2ODcwMDAwQTlFNUFFIC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAg
Ki87IH07CiAJCTQzNThFODZBMTM2MEEyMTYwMEU0NzQ4QyAvKiBET01TVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MzU4RTg2NzEzNjBBMjE2MDBFNDc0OEMgLyogRE9NU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oICov
OyB9OwogCQk0MzU4RTg2QjEzNjBBMjE2MDBFNDc0OEMgLyogRE9NU1ZHRkVEcm9wU2hhZG93RWxl
bWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
NThFODY4MTM2MEEyMTYwMEU0NzQ4QyAvKiBET01TVkdGRURyb3BTaGFkb3dFbGVtZW50Lm1tICov
OyB9OwpAQCAtNzM5Nyw2ICs3Mzk4LDcgQEAKIAkJNDMxQTJGOUExM0I2RjJCMDAwNzc5MUU0IC8q
IFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzFBMkY5QjEzQjZGMkIwMDA3NzkxRTQgLyogU1ZHQW5pbWF0
ZWROdW1iZXJPcHRpb25hbE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDMxQTJGRDYxM0I3NzA3QTAwNzc5MUU0IC8qIFNWR0FuaW1hdGVk
TGVuZ3RoTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdB
bmltYXRlZExlbmd0aExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzFB
MzAyMDEzQjg5RENDMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJlc2Vy
dmVBc3BlY3RSYXRpby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzMzFBQzc3
MTNCNjg3MDAwMEE5RTVBRSAvKiBTVkdBbmltYXRlZE51bWJlckxpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM1OEU4NjcxMzYwQTIxNjAwRTQ3NDhDIC8qIERP
TVNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MzU4RTg2ODEzNjBBMjE2MDBFNDc0OEMgLyogRE9NU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVNWR0ZFRHJv
cFNoYWRvd0VsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzQyMyw2
ICsxNzQyNSw3IEBACiAJCQkJMDg2Mzk1MTQxM0I1RkU1NzAwQkIzNDREIC8qIFNWR0FuaW1hdGVk
UGF0aC5oICovLAogCQkJCTQzQjkzMzY3MTNCMjYxQjEwMDQ1ODRCRiAvKiBTVkdBbmltYXRlZFBv
aW50TGlzdC5oICovLAogCQkJCTQzQjkzMzY4MTNCMjYxQjEwMDQ1ODRCRiAvKiBTVkdBbmltYXRl
ZFBvaW50TGlzdC5jcHAgKi8sCisJCQkJNDMxQTMwMjAxM0I4OURDQzAwNzc5MUU0IC8qIFNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgKi8sCiAJCQkJMDhGRTBCQzQxMjdFMkFDMTAw
MEM0RkI1IC8qIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oICovLAogCQkJCUIyMjI3
N0Y0MEQwMEJGMUYwMDcxQjc4MiAvKiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaWRs
ICovLAogCQkJCTQzMTQyRTc5MTNCMUU5NzcwMEYxQzg3MSAvKiBTVkdBbmltYXRlZFJlY3QuY3Bw
ICovLApAQCAtMjU4NDMsNiArMjU4NDYsNyBAQAogCQkJCTQzMzFBQzc4MTNCNjg3MDAwMEE5RTVB
RSAvKiBTVkdBbmltYXRlZE51bWJlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDMxQTJG
OUQxM0I2RjJCMDAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkTnVtYmVyT3B0aW9uYWxOdW1iZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDMxQTJGRDcxM0I3NzA3QTAwNzc5MUU0IC8qIFNWR0FuaW1h
dGVkTGVuZ3RoTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzFBMzAyMTEzQjg5RENDMDA3
NzkxRTQgLyogU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA4OTc4MykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmNw
cCIKICNpbmNsdWRlICJTVkdBbmltYXRlZFBhdGguY3BwIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVk
UG9pbnRMaXN0LmNwcCIKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8u
Y3BwIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVjdC5jcHAiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRTdHJpbmcuY3BwIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZS5jcHAiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDg5NzgzKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA0LDE0ICsxMDQsMTIgQEAgQW5pbWF0ZWRBdHRyaWJ1dGVUeXBlIFNWR0FuaW1hdGVFbGVt
ZW50OgogICAgIGlmICh0eXBlID09IEFuaW1hdGVkVW5rbm93biB8fCAoaGFzVGFnTmFtZShTVkdO
YW1lczo6YW5pbWF0ZUNvbG9yVGFnKSAmJiB0eXBlICE9IEFuaW1hdGVkQ29sb3IpKQogICAgICAg
ICByZXR1cm4gQW5pbWF0ZWRVbmtub3duOwogCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdHlwZSBz
cGVjaWZpYyBhbmltYXRpb25zIGluIHRoZSBmdXR1cmUuIE1hbnkgYW5pbWF0aW9ucyBtYXJrZWQg
YXMgQW5pbWF0ZWRTdHJpbmcgdG9kYXkgd2lsbAotICAgIC8vIHN1cHBvcnQgY29udGludW91cyBh
bmltYXRpb25zLgorICAgIC8vIEZJWE1FOiBBbmltYXRvciBmb3IgQW5pbWF0ZWRCb29sZWFuIGFu
ZCBBbmltYXRlZEVudW1lcmF0aW9uIG1pc3NpbmcuCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
Y2FzZSBBbmltYXRlZEFuZ2xlOgogICAgICAgICByZXR1cm4gQW5pbWF0ZWRBbmdsZTsKICAgICBj
YXNlIEFuaW1hdGVkQm9vbGVhbjoKICAgICBjYXNlIEFuaW1hdGVkRW51bWVyYXRpb246Ci0gICAg
Y2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86CiAgICAgY2FzZSBBbmltYXRlZFN0cmlu
ZzoKICAgICAgICAgcmV0dXJuIEFuaW1hdGVkU3RyaW5nOwogICAgIGNhc2UgQW5pbWF0ZWRDb2xv
cjoKQEAgLTEzMSw2ICsxMjksOCBAQCBBbmltYXRlZEF0dHJpYnV0ZVR5cGUgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6CiAgICAgICAgIHJldHVybiBBbmltYXRlZFBhdGg7CiAgICAgY2FzZSBBbmltYXRlZFBv
aW50czoKICAgICAgICAgcmV0dXJuIEFuaW1hdGVkUG9pbnRzOworICAgIGNhc2UgQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOgorICAgICAgICByZXR1cm4gQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvOwogICAgIGNhc2UgQW5pbWF0ZWRSZWN0OgogICAgICAgICByZXR1cm4gQW5pbWF0ZWRS
ZWN0OwogICAgIGNhc2UgQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OgpAQCAtMTcxLDYgKzE3MSw3IEBA
IHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGUKICAgICBjYXNlIEFuaW1h
dGVkTnVtYmVyT3B0aW9uYWxOdW1iZXI6CiAgICAgY2FzZSBBbmltYXRlZFBhdGg6CiAgICAgY2Fz
ZSBBbmltYXRlZFBvaW50czoKKyAgICBjYXNlIEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzoK
ICAgICBjYXNlIEFuaW1hdGVkUmVjdDoKICAgICBjYXNlIEFuaW1hdGVkU3RyaW5nOiB7CiAgICAg
ICAgIEFTU0VSVChtX2FuaW1hdG9yKTsKQEAgLTIzOSw2ICsyNDAsNyBAQCBib29sIFNWR0FuaW1h
dGVFbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kCiAgICAgY2FzZSBBbmltYXRlZE51bWJlck9wdGlv
bmFsTnVtYmVyOgogICAgIGNhc2UgQW5pbWF0ZWRQYXRoOgogICAgIGNhc2UgQW5pbWF0ZWRQb2lu
dHM6CisgICAgY2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86CiAgICAgY2FzZSBBbmlt
YXRlZFJlY3Q6CiAgICAgY2FzZSBBbmltYXRlZFN0cmluZzoKICAgICAgICAgZW5zdXJlQW5pbWF0
b3IoKS0+Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKG1fZnJvbVR5cGUsIG1fdG9UeXBlLCBmcm9t
U3RyaW5nLCB0b1N0cmluZyk7CkBAIC0yNjcsNiArMjY5LDcgQEAgYm9vbCBTVkdBbmltYXRlRWxl
bWVudDo6Y2FsY3VsYXRlRnJvbUFuZAogICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJMaXN0OgogICAg
IGNhc2UgQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcjoKICAgICBjYXNlIEFuaW1hdGVkUG9p
bnRzOgorICAgIGNhc2UgQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgogICAgIGNhc2UgQW5p
bWF0ZWRSZWN0OgogICAgIGNhc2UgQW5pbWF0ZWRTdHJpbmc6CiAgICAgICAgIGVuc3VyZUFuaW1h
dG9yKCktPmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhtX2Zyb21UeXBlLCBtX3RvVHlwZSwgZnJv
bVN0cmluZywgYnlTdHJpbmcpOwpAQCAtMjk2LDYgKzI5OSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OnJlc2V0VG9CYXNlVmFsdWUKICAgICBjYXNlIEFuaW1hdGVkTnVtYmVyT3B0aW9uYWxO
dW1iZXI6CiAgICAgY2FzZSBBbmltYXRlZFBhdGg6CiAgICAgY2FzZSBBbmltYXRlZFBvaW50czoK
KyAgICBjYXNlIEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzoKICAgICBjYXNlIEFuaW1hdGVk
UmVjdDoKICAgICBjYXNlIEFuaW1hdGVkU3RyaW5nOiB7CiAgICAgICAgIGlmICghbV9hbmltYXRl
ZFR5cGUpCkBAIC0zMjMsNiArMzI3LDcgQEAgdm9pZCBTVkdBbmltYXRlRWxlbWVudDo6YXBwbHlS
ZXN1bHRzVG9UYQogICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlcjoKICAgICBj
YXNlIEFuaW1hdGVkUGF0aDoKICAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgorICAgIGNhc2UgQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgogICAgIGNhc2UgQW5pbWF0ZWRSZWN0OgogICAgIGNh
c2UgQW5pbWF0ZWRTdHJpbmc6CiAgICAgICAgIHZhbHVlVG9BcHBseSA9IG1fYW5pbWF0ZWRUeXBl
LT52YWx1ZUFzU3RyaW5nKCk7CkBAIC0zNTAsNiArMzU1LDcgQEAgZmxvYXQgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbgogICAgIGNhc2UgQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51
bWJlcjoKICAgICBjYXNlIEFuaW1hdGVkUGF0aDoKICAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgor
ICAgIGNhc2UgQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgogICAgIGNhc2UgQW5pbWF0ZWRS
ZWN0OgogICAgIGNhc2UgQW5pbWF0ZWRTdHJpbmc6CiAgICAgICAgIHJldHVybiBlbnN1cmVBbmlt
YXRvcigpLT5jYWxjdWxhdGVEaXN0YW5jZShmcm9tU3RyaW5nLCB0b1N0cmluZyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoU1ZHX0FOSU1BVElPTikKKyNpbmNsdWRlICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0
UmF0aW8uaCIKKworI2luY2x1ZGUgIlNWR0FuaW1hdGVFbGVtZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yOjpT
VkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcihTVkdBbmltYXRpb25FbGVtZW50
KiBhbmltYXRpb25FbGVtZW50LCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKKyAgICA6IFNW
R0FuaW1hdGVkVHlwZUFuaW1hdG9yKEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbywgYW5pbWF0
aW9uRWxlbWVudCwgY29udGV4dEVsZW1lbnQpCit7Cit9CisKK1Bhc3NPd25QdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y29uc3RydWN0
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBPd25QdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVByZXNlcnZlQXNw
ZWN0UmF0aW8obmV3IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW86OnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyhhbmltYXRlZFR5cGUuZ2V0KCksIHN0
cmluZyk7CisgICAgcmV0dXJuIGFuaW1hdGVkVHlwZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgU1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNhbGN1bGF0ZUZyb21BbmRUb1Zh
bHVlcyhPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiYgZnJvbSwgT3duUHRyPFNWR0FuaW1hdGVkVHlw
ZT4mIHRvLCBjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcp
Cit7CisgICAgQVNTRVJUKG1fY29udGV4dEVsZW1lbnQpOworICAgIEFTU0VSVChtX2FuaW1hdGlv
bkVsZW1lbnQpOworICAgIAorICAgIGZyb20gPSBjb25zdHJ1Y3RGcm9tU3RyaW5nKGZyb21TdHJp
bmcpOworICAgIHRvID0gY29uc3RydWN0RnJvbVN0cmluZyh0b1N0cmluZyk7Cit9CisKK3ZvaWQg
U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNhbGN1bGF0ZUZyb21BbmRC
eVZhbHVlcyhPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiYgZnJvbSwgT3duUHRyPFNWR0FuaW1hdGVk
VHlwZT4mIHRvLCBjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJp
bmcpCit7CisgICAgQVNTRVJUKG1fY29udGV4dEVsZW1lbnQpOworICAgIEFTU0VSVChtX2FuaW1h
dGlvbkVsZW1lbnQpOworICAgIAorICAgIC8vIE5vdCBzcGVjaWZpZWQgd2hhdCB0byBkbyBvbiAn
YnknLWFuaW1hdGlvbnMgd2l0aCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLiBGYWxsYmFjayB0byAn
dG8nLWFuaW1hdGlvbiByaWdodCBub3cuIAorICAgIGZyb20gPSBjb25zdHJ1Y3RGcm9tU3RyaW5n
KGZyb21TdHJpbmcpOworICAgIHRvID0gY29uc3RydWN0RnJvbVN0cmluZyhieVN0cmluZyk7Cit9
CisKK3ZvaWQgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvQW5pbWF0b3I6OmNhbGN1bGF0
ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPFNWR0FuaW1h
dGVkVHlwZT4mIGZyb20sIE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiB0bywgT3duUHRyPFNWR0Fu
aW1hdGVkVHlwZT4mIGFuaW1hdGVkKQoreworICAgIEFTU0VSVChtX2FuaW1hdGlvbkVsZW1lbnQp
OworICAgIEFTU0VSVChtX2NvbnRleHRFbGVtZW50KTsKKyAgICBTVkdBbmltYXRlRWxlbWVudCog
YW5pbWF0aW9uRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVFbGVtZW50Kj4obV9hbmlt
YXRpb25FbGVtZW50KTsKKyAgICAKKyAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1vZGUgPSBh
bmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCk7CisgICAgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbyYgYW5pbWF0ZVN0cmluZyA9IGFuaW1hdGVkLT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7Cisg
ICAgaWYgKChhbmltYXRpb25Nb2RlID09IEZyb21Ub0FuaW1hdGlvbiAmJiBwZXJjZW50YWdlID4g
MC41KSB8fCBhbmltYXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMSkK
KyAgICAgICAgYW5pbWF0ZVN0cmluZyA9IHRvLT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCk7CisgICAg
ZWxzZQorICAgICAgICBhbmltYXRlU3RyaW5nID0gZnJvbS0+cHJlc2VydmVBc3BlY3RSYXRpbygp
OworfQorCitmbG9hdCBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcjo6Y2Fs
Y3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBO
byBwYWNlZCBhbmltYXRpb25zIGZvciBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLgorICAgIHJldHVy
biAtMTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykgJiYgRU5BQkxFKFNWR19BTklN
QVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpby5oCShyZXZpc2lvbiA4OTc4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdBbmltYXRlZFByb3Bl
cnR5VGVhck9mZi5oIgorI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgiCiAjaW5j
bHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNSw2ICszNiwyNiBAQCBERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZKFNWR0FuaW1hdGVkUHJl
CiAjZGVmaW5lIERFRklORV9BTklNQVRFRF9QUkVTRVJWRUFTUEVDVFJBVElPKE93bmVyVHlwZSwg
RE9NQXR0cmlidXRlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCiBERUZJTkVfQU5J
TUFURURfUFJPUEVSVFkoT3duZXJUeXBlLCBET01BdHRyaWJ1dGUsIERPTUF0dHJpYnV0ZS5sb2Nh
bE5hbWUoKSwgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KQogCisgICAgCisjaWYgRU5BQkxF
KFNWR19BTklNQVRJT04pCitjbGFzcyBTVkdBbmltYXRpb25FbGVtZW50OworCitjbGFzcyBTVkdB
bmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvciA6IHB1YmxpYyBTVkdBbmltYXRlZFR5
cGVBbmltYXRvciB7CisgICAgCitwdWJsaWM6CisgICAgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvQW5pbWF0b3IoU1ZHQW5pbWF0aW9uRWxlbWVudCosIFNWR0VsZW1lbnQqKTsKKyAgICB2
aXJ0dWFsIH5TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW9BbmltYXRvcigpIHsgfQorICAg
IAorICAgIHZpcnR1YWwgUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IGNvbnN0cnVjdEZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUZy
b21BbmRUb1ZhbHVlcyhPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiYgZnJvbVZhbHVlLCBPd25QdHI8
U1ZHQW5pbWF0ZWRUeXBlPiYgdG9WYWx1ZSwgY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHRvU3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlRnJvbUFuZEJ5
VmFsdWVzKE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiBmcm9tVmFsdWUsIE93blB0cjxTVkdBbmlt
YXRlZFR5cGU+JiB0b1ZhbHVlLCBjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnlTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZs
b2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdENvdW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiBmcm9tVmFsdWUs
IE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiB0b1ZhbHVlLCBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBl
PiYgYW5pbWF0ZWRWYWx1ZSk7CisgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShj
b25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOworfTsKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHX0FOSU1BVElPTikKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZFR5cGUuY3BwCShyZXZpc2lvbiA4OTc4MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
U1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNlckZhY3RvcnkuaCIK
ICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTcxLDYgKzcyLDkgQEAgU1ZHQW5p
bWF0ZWRUeXBlOjp+U1ZHQW5pbWF0ZWRUeXBlKCkKICAgICBjYXNlIEFuaW1hdGVkUG9pbnRzOgog
ICAgICAgICBkZWxldGUgbV9kYXRhLnBvaW50TGlzdDsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86CisgICAgICAgIGRlbGV0ZSBtX2RhdGEucHJl
c2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbmltYXRlZFJlY3Q6
CiAgICAgICAgIGRlbGV0ZSBtX2RhdGEucmVjdDsKICAgICAgICAgYnJlYWs7CkBAIC0xNTUsNiAr
MTU5LDE0IEBAIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFQKICAgICBy
ZXR1cm4gYW5pbWF0ZWRUeXBlLnJlbGVhc2UoKTsKIH0KIAorUGFzc093blB0cjxTVkdBbmltYXRl
ZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvKiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQoreworICAgIEFTU0VSVChwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBhbmltYXRlZFR5
cGUgPSBhZG9wdFB0cihuZXcgU1ZHQW5pbWF0ZWRUeXBlKEFuaW1hdGVkUHJlc2VydmVBc3BlY3RS
YXRpbykpOworICAgIGFuaW1hdGVkVHlwZS0+bV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW8gPSBw
cmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIHJldHVybiBhbmltYXRlZFR5cGUucmVsZWFzZSgpOwor
fQorCiBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVS
ZWN0KEZsb2F0UmVjdCogcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdCk7CkBAIC0yMjUsNiArMjM3
LDEyIEBAIFNWR1BvaW50TGlzdCYgU1ZHQW5pbWF0ZWRUeXBlOjpwb2ludExpc3QKICAgICByZXR1
cm4gKm1fZGF0YS5wb2ludExpc3Q7CiB9CiAKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIFNWR0Fu
aW1hdGVkVHlwZTo6cHJlc2VydmVBc3BlY3RSYXRpbygpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9
PSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgIHJldHVybiAqbV9kYXRhLnByZXNl
cnZlQXNwZWN0UmF0aW87Cit9CisKIEZsb2F0UmVjdCYgU1ZHQW5pbWF0ZWRUeXBlOjpyZWN0KCkK
IHsKICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkUmVjdCk7CkBAIC0yNzAsNiArMjg4LDkg
QEAgU3RyaW5nIFNWR0FuaW1hdGVkVHlwZTo6dmFsdWVBc1N0cmluZygpCiAgICAgY2FzZSBBbmlt
YXRlZFBvaW50czoKICAgICAgICAgQVNTRVJUKG1fZGF0YS5wb2ludExpc3QpOwogICAgICAgICBy
ZXR1cm4gbV9kYXRhLnBvaW50TGlzdC0+dmFsdWVBc1N0cmluZygpOworICAgIGNhc2UgQW5pbWF0
ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOgorICAgICAgICBBU1NFUlQobV9kYXRhLnByZXNlcnZlQXNw
ZWN0UmF0aW8pOworICAgICAgICByZXR1cm4gbV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW8tPnZh
bHVlQXNTdHJpbmcoKTsKICAgICBjYXNlIEFuaW1hdGVkUmVjdDoKICAgICAgICAgQVNTRVJUKG1f
ZGF0YS5yZWN0KTsKICAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKG1fZGF0YS5yZWN0LT54
KCkpICsgJyAnICsgU3RyaW5nOjpudW1iZXIobV9kYXRhLnJlY3QtPnkoKSkgKyAnICcKQEAgLTMy
OSw2ICszNTAsMTAgQEAgYm9vbCBTVkdBbmltYXRlZFR5cGU6OnNldFZhbHVlQXNTdHJpbmcoYwog
ICAgICAgICBtX2RhdGEucG9pbnRMaXN0LT5jbGVhcigpOwogICAgICAgICBwb2ludHNMaXN0RnJv
bVNWR0RhdGEoKm1fZGF0YS5wb2ludExpc3QsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86CisgICAgICAgIEFTU0VSVChtX2RhdGEu
cHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnBh
cnNlUHJlc2VydmVBc3BlY3RSYXRpbyh0aGlzLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQW5pbWF0ZWRSZWN0OgogICAgICAgICBBU1NFUlQobV9kYXRhLnJlY3QpOwogICAgICAg
ICBwYXJzZVJlY3QodmFsdWUsICptX2RhdGEucmVjdCk7CkBAIC0zNDQsNiArMzY5LDEzIEBAIGJv
b2wgU1ZHQW5pbWF0ZWRUeXBlOjpzZXRWYWx1ZUFzU3RyaW5nKGMKICAgICByZXR1cm4gIWVjOwog
fQogCit2b2lkIFNWR0FuaW1hdGVkVHlwZTo6c2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1
ZShjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorewor
ICAgIEFTU0VSVChtX3R5cGUgPT0gQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAq
bV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW8gPSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOworfQorCisg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoU1ZHX0FOSU1BVElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBl
LmgJKHJldmlzaW9uIDg5NzgzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIFNWR0xlbmd0aExpc3Q7
CiBjbGFzcyBTVkdOdW1iZXJMaXN0OwogY2xhc3MgU1ZHUGF0aEJ5dGVTdHJlYW07CiBjbGFzcyBT
VkdQb2ludExpc3Q7CitjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwogCiBjbGFzcyBTVkdB
bmltYXRlZFR5cGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTAsNiArNTEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVh
dGVOdW1iZXJPcHRpb25hbE51bWJlcihwYWlyPGZsb2F0LCBmbG9hdD4qKTsKICAgICBzdGF0aWMg
UGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBhdGgoUGFzc093blB0cjxTVkdQYXRo
Qnl0ZVN0cmVhbT4pOwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3Jl
YXRlUG9pbnRMaXN0KFNWR1BvaW50TGlzdCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0Fu
aW1hdGVkVHlwZT4gY3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvKik7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVSZWN0
KEZsb2F0UmVjdCopOwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3Jl
YXRlU3RyaW5nKFN0cmluZyopOwogICAgIApAQCAtNjQsMTIgKzY2LDE2IEBAIHB1YmxpYzoKICAg
ICBwYWlyPGZsb2F0LCBmbG9hdD4mIG51bWJlck9wdGlvbmFsTnVtYmVyKCk7CiAgICAgU1ZHUGF0
aEJ5dGVTdHJlYW0qIHBhdGgoKTsKICAgICBTVkdQb2ludExpc3QmIHBvaW50TGlzdCgpOworICAg
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8oKTsKICAgICBGbG9h
dFJlY3QmIHJlY3QoKTsKICAgICBTdHJpbmcmIHN0cmluZygpOwogCiAgICAgU3RyaW5nIHZhbHVl
QXNTdHJpbmcoKTsKICAgICBib29sIHNldFZhbHVlQXNTdHJpbmcoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IFN0cmluZyYpOwogICAgIAorICAgIC8vIFVzZWQgZm9yIHBhcnNpbmcgYSBTdHJp
bmcgdG8gYSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG9iamVjdC4KKyAgICB2b2lkIHNldFByZXNl
cnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpOwor
ICAgIAogcHJpdmF0ZToKICAgICBTVkdBbmltYXRlZFR5cGUoQW5pbWF0ZWRBdHRyaWJ1dGVUeXBl
KTsKICAgICAKQEAgLTgxLDcgKzg3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogTW9yZSBTVkcgcHJpbWl0aXZlIHR5cGVzIG5l
ZWQgdG8gYmUgYWRkZWQgc3RlcCBieSBzdGVwLgogICAgICAgICBTVkdBbmdsZSogYW5nbGU7CiAg
ICAgICAgIENvbG9yKiBjb2xvcjsKICAgICAgICAgU1ZHTGVuZ3RoKiBsZW5ndGg7CkBAIC05MCw2
ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFNWR051bWJlckxpc3QqIG51bWJlckxpc3Q7CiAg
ICAgICAgIHBhaXI8ZmxvYXQsIGZsb2F0PiogbnVtYmVyT3B0aW9uYWxOdW1iZXI7CiAgICAgICAg
IFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRoOworICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
KiBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgICAgICBTVkdQb2ludExpc3QqIHBvaW50TGlzdDsK
ICAgICAgICAgRmxvYXRSZWN0KiByZWN0OwogICAgICAgICBTdHJpbmcqIHN0cmluZzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRvckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0b3JGYWN0b3J5LmgJKHJldmlzaW9uIDg5NzgzKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdG9yRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJPcHRpb25hbE51
bWJlci5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkUGF0aC5oIgogI2luY2x1ZGUgIlNWR0FuaW1h
dGVkUG9pbnRMaXN0LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRT
dHJpbmcuaCIKIApAQCAtNjQsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yKGFuaW1hdGlvbkVsZW1lbnQsIGNv
bnRleHRFbGVtZW50KSk7CiAgICAgICAgIGNhc2UgQW5pbWF0ZWRQb2ludHM6CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3IoYW5pbWF0
aW9uRWxlbWVudCwgY29udGV4dEVsZW1lbnQpKTsKKyAgICAgICAgY2FzZSBBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW86CisgICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpb0FuaW1hdG9yKGFuaW1hdGlvbkVsZW1lbnQsIGNvbnRleHRF
bGVtZW50KSk7CiAgICAgICAgIGNhc2UgQW5pbWF0ZWRSZWN0OgogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTVkdBbmltYXRlZFJlY3RBbmltYXRvcihhbmltYXRpb25FbGVtZW50LCBj
b250ZXh0RWxlbWVudCkpOwogICAgICAgICBjYXNlIEFuaW1hdGVkU3RyaW5nOgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gODk4MjEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMCBAQAorMjAxMS0wNi0yNyAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNW
R0FuaW1hdGVkVHlwZSBzaG91bGQgc3VwcG9ydCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIGFuaW1h
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM0
NTYKKyAgICAgICAgCisgICAgICAgIFRlc3QgZm9yIGFuaW1hdGlvbiBvZiBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z1By
ZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0aW9uLTEuanM6IEFkZGVkLgorICAgICAgICAoc2FtcGxl
MSk6CisgICAgICAgIChzYW1wbGUyKToKKyAgICAgICAgKHNhbXBsZTMpOgorICAgICAgICAoZXhl
Y3V0ZVRlc3QpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL3N2Z1ByZXNlcnZlQXNwZWN0UmF0
aW8tYW5pbWF0aW9uLTEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0
aW9ucy9zdmdQcmVzZXJ2ZUFzcGVjdFJhdGlvLWFuaW1hdGlvbi0xLmh0bWw6IEFkZGVkLgorCiAy
MDExLTA2LTI3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBOb3QgcmV2aWV3ZWQ6IHVwZGF0aW5nIGNocm9taXVtIGV4cGVjdGF0aW9ucy4KSW5kZXg6IExh
eW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3N2Z1ByZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0aW9u
LTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L3N2Z1ByZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0aW9uLTEtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnUHJlc2VydmVBc3BlY3RSYXRp
by1hbmltYXRpb24tMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAK
K1NWRyAxLjEgZHluYW1pYyBhbmltYXRpb24gdGVzdHMKKworVGVzdCAndG8nIGFuaW1hdGlvbiBv
ZiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyByb290U1ZHRWxlbWVudC5wcmVzZXJ2ZUFzcGVjdFJhdGlvLmFuaW1WYWwuYWxpZ24g
aXMgU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5TVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1J
TgorUEFTUyByb290U1ZHRWxlbWVudC5wcmVzZXJ2ZUFzcGVjdFJhdGlvLmFuaW1WYWwubWVldE9y
U2xpY2UgaXMgU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5TVkdfTUVFVE9SU0xJQ0VfTUVFVAorUEFT
UyByb290U1ZHRWxlbWVudC5wcmVzZXJ2ZUFzcGVjdFJhdGlvLmFuaW1WYWwuYWxpZ24gaXMgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5TVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1JTgorUEFT
UyByb290U1ZHRWxlbWVudC5wcmVzZXJ2ZUFzcGVjdFJhdGlvLmFuaW1WYWwubWVldE9yU2xpY2Ug
aXMgU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5TVkdfTUVFVE9SU0xJQ0VfTUVFVAorUEFTUyByb290
U1ZHRWxlbWVudC5wcmVzZXJ2ZUFzcGVjdFJhdGlvLmFuaW1WYWwuYWxpZ24gaXMgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpby5TVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUFYWU1JRAorUEFTUyByb290
U1ZHRWxlbWVudC5wcmVzZXJ2ZUFzcGVjdFJhdGlvLmFuaW1WYWwubWVldE9yU2xpY2UgaXMgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5TVkdfTUVFVE9SU0xJQ0VfU0xJQ0UKK1BBU1Mgcm9vdFNWR0Vs
ZW1lbnQucHJlc2VydmVBc3BlY3RSYXRpby5hbmltVmFsLmFsaWduIGlzIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8uU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU4KK1BBU1Mgcm9vdFNWR0Vs
ZW1lbnQucHJlc2VydmVBc3BlY3RSYXRpby5hbmltVmFsLm1lZXRPclNsaWNlIGlzIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8uU1ZHX01FRVRPUlNMSUNFX01FRVQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvYW5p
bWF0aW9ucy9zdmdQcmVzZXJ2ZUFzcGVjdFJhdGlvLWFuaW1hdGlvbi0xLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc3ZnUHJlc2VydmVBc3BlY3RSYXRpby1h
bmltYXRpb24tMS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc3ZnUHJlc2VydmVBc3BlY3RSYXRpby1hbmltYXRpb24tMS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL2R5bmFtaWMtdXBkYXRlcy9yZXNvdXJjZXMvU1ZHVGVzdENhc2UuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3Rz
PC9oMT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N2Z1ByZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0
aW9uLTEuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
c3ZnL2FuaW1hdGlvbnMvc2NyaXB0LXRlc3RzL3N2Z1ByZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0
aW9uLTEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvc2NyaXB0
LXRlc3RzL3N2Z1ByZXNlcnZlQXNwZWN0UmF0aW8tYW5pbWF0aW9uLTEuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9zY3JpcHQtdGVzdHMvc3ZnUHJlc2VydmVB
c3BlY3RSYXRpby1hbmltYXRpb24tMS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAor
ZGVzY3JpcHRpb24oIlRlc3QgJ3RvJyBhbmltYXRpb24gb2YgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by4iKTsKK2NyZWF0ZVNWR1Rlc3RDYXNlKCk7CisKKy8vIFNldHVwIHRlc3QgZG9jdW1lbnQKK3Jv
b3RTVkdFbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCAicm9vdCIpOworcm9vdFNWR0VsZW1lbnQu
c2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwgInhNYXhZTWluIG1lZXQiKTsKKwor
dmFyIHJlY3QgPSBjcmVhdGVTVkdFbGVtZW50KCJyZWN0Iik7CityZWN0LnNldEF0dHJpYnV0ZSgi
aWQiLCAicmVjdCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwgIjEwMCIpOworcmVjdC5z
ZXRBdHRyaWJ1dGUoImhlaWdodCIsICIxMDAiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJmaWxsIiwg
ImdyZWVuIik7CityZWN0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICJleGVjdXRlVGVzdCgpIik7
Cityb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChyZWN0KTsKKwordmFyIGFuaW1hdGUgPSBjcmVh
dGVTVkdFbGVtZW50KCJhbmltYXRlIik7CithbmltYXRlLnNldEF0dHJpYnV0ZSgiaWQiLCAiYW5p
bWF0aW9uIik7CithbmltYXRlLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRlTmFtZSIsICJwcmVzZXJ2
ZUFzcGVjdFJhdGlvIik7CithbmltYXRlLnNldEF0dHJpYnV0ZSgiYmVnaW4iLCAicmVjdC5jbGlj
ayIpOworYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoImR1ciIsICI0cyIpOworYW5pbWF0ZS5zZXRBdHRy
aWJ1dGUoImZyb20iLCAieE1pbllNaW4gbWVldCIpOworYW5pbWF0ZS5zZXRBdHRyaWJ1dGUoInRv
IiwgInhNYXhZTWlkIHNsaWNlIik7Cityb290U1ZHRWxlbWVudC5hcHBlbmRDaGlsZChhbmltYXRl
KTsKKworLy8gU2V0dXAgYW5pbWF0aW9uIHRlc3QKK2Z1bmN0aW9uIHNhbXBsZTEoKSB7CisJc2hv
dWxkQmUoInJvb3RTVkdFbGVtZW50LnByZXNlcnZlQXNwZWN0UmF0aW8uYW5pbVZhbC5hbGlnbiIs
ICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNQVhZTUlO
Iik7CisJc2hvdWxkQmUoInJvb3RTVkdFbGVtZW50LnByZXNlcnZlQXNwZWN0UmF0aW8uYW5pbVZh
bC5tZWV0T3JTbGljZSIsICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLlNWR19NRUVUT1JTTElDRV9N
RUVUIik7Cit9CisKK2Z1bmN0aW9uIHNhbXBsZTIoKSB7CisJc2hvdWxkQmUoInJvb3RTVkdFbGVt
ZW50LnByZXNlcnZlQXNwZWN0UmF0aW8uYW5pbVZhbC5hbGlnbiIsICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSU5ZTUlOIik7CisJc2hvdWxkQmUoInJv
b3RTVkdFbGVtZW50LnByZXNlcnZlQXNwZWN0UmF0aW8uYW5pbVZhbC5tZWV0T3JTbGljZSIsICJT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLlNWR19NRUVUT1JTTElDRV9NRUVUIik7Cit9CisKK2Z1bmN0
aW9uIHNhbXBsZTMoKSB7CisJc2hvdWxkQmUoInJvb3RTVkdFbGVtZW50LnByZXNlcnZlQXNwZWN0
UmF0aW8uYW5pbVZhbC5hbGlnbiIsICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLlNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1hNQVhZTUlEIik7CisJc2hvdWxkQmUoInJvb3RTVkdFbGVtZW50LnByZXNl
cnZlQXNwZWN0UmF0aW8uYW5pbVZhbC5tZWV0T3JTbGljZSIsICJTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLlNWR19NRUVUT1JTTElDRV9TTElDRSIpOworfQorCitmdW5jdGlvbiBleGVjdXRlVGVzdCgp
IHsKKyAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IFsKKyAgICAgICAgLy8gW2FuaW1hdGlvbklk
LCB0aW1lLCBlbGVtZW50SWQsIHNhbXBsZUNhbGxiYWNrXQorICAgICAgICBbImFuaW1hdGlvbiIs
IDAuMCwgICAgInJvb3QiLCBzYW1wbGUxXSwKKyAgICAgICAgWyJhbmltYXRpb24iLCAyLjAsICAg
ICJyb290Iiwgc2FtcGxlMl0sCisgICAgICAgIFsiYW5pbWF0aW9uIiwgMy45OTk5LCAicm9vdCIs
IHNhbXBsZTNdLAorICAgICAgICBbImFuaW1hdGlvbiIsIDQuMCAsICAgInJvb3QiLCBzYW1wbGUx
XQorICAgIF07CisKKyAgICBydW5BbmltYXRpb25UZXN0KGV4cGVjdGVkVmFsdWVzKTsKK30KKwor
Ly8gQmVnaW4gdGVzdCBhc3luYword2luZG93LnNldFRpbWVvdXQoInRyaWdnZXJVcGRhdGUoNTAs
IDUwKSIsIDApOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="93025"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>