<?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>24396</bug_id>
          
          <creation_ts>2009-03-05 11:35:30 -0800</creation_ts>
          <short_desc>Review use of ENABLE(3D_TRANSFORMS) macro</short_desc>
          <delta_ts>2009-03-17 12:25:01 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>112416</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-05 11:35:30 -0800</bug_when>
    <thetext>We need to clarify the use of ENABLE(3D_TRANSFORMS). Maybe it should be more like ENABLE(3D_RENDERING).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113436</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-12 11:48:56 -0700</bug_when>
    <thetext>Should fix along with 24165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113968</commentid>
    <comment_count>2</comment_count>
      <attachid>28674</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-16 18:14:20 -0700</bug_when>
    <thetext>Created attachment 28674
Patch, changelogs

The thrust of this patch is to change the 3d flag from &quot;has 3d transforms&quot; to &quot;has 3d rendering&quot;. &quot;has 3d transforms&quot; no longer makes sense, since we parse and keep 3d transforms in RenderStyles on all platforms. What we need to know, instead, is whether the platform supports 3d rendering, and if it does not, we need to flatten to affine for rendering and hit testing. We also need to make sure that the media query gives the correct answer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114034</commentid>
    <comment_count>3</comment_count>
      <attachid>28674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-17 09:28:55 -0700</bug_when>
    <thetext>Comment on attachment 28674
Patch, changelogs

Change looks great.

&gt; +#if ENABLE(3D_RENDERING)
&gt; +    if (value) {
&gt; +        float number;
&gt; +        return numberValue(value, number) &amp;&amp; compareValue(1, static_cast&lt;int&gt;(number), op);
&gt; +    }
&gt; +    return true;
&gt; +#else
&gt;      if (value) {
&gt;          float number;
&gt;          return numberValue(value, number) &amp;&amp; compareValue(0, static_cast&lt;int&gt;(number), op);
&gt;      }
&gt;      return false;
&gt; +#endif

I would have made a named constant for the one and 0 and the default value rather than copying the body of the function twice. Not your fault, but this code is surprisingly awkward and wordy.

&gt; +    // Throw away the non-affine parts of the matrix (lossy!)
&gt; +    TransformationMatrix&amp; makeAffine();

I think it&apos;s confusing to have these functions that both modify in place and return the value of an object. It&apos;s too easy to call one of these and not realize that it modifies &quot;this&quot;. This is not just a theoretical issue -- I&apos;ve had to fix many bugs during the lifetime of WebKit due to this sort of misunderstanding. Because of that, I&apos;d prefer to have this return void. Your thoughts?

&gt; +#if !ENABLE(3D_RENDERING)
&gt; +        m_transform-&gt;makeAffine();
&gt; +#endif

Should we perhaps have a function just for this purpose so we don&apos;t have to have the #if everywhere? It would just be an inline that does exactly this. I&apos;m not sure exactly what to call it, but something about removing the parts of the transform that we would be unable to render.

&gt; +// Accelerated compositing (also needs to be set in WebCore/config.h)
&gt; +#if !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD)
&gt; +#define WTF_USE_ACCELERATED_COMPOSITING 0
&gt; +#endif

I&apos;m worried about this. Why do we have to set this up both in config.h and in the prefix? This should be in exactly one place. It&apos;s OK to have that one place be included both by the prefix and config.h, but it&apos;s not OK to repeat things like this. I know this configuration stuff is a mess, but I would like to keep it from getting even worse. Maybe there&apos;s nothing you can easily improve here. We could talk about this in person at some point if you like.

Despite these 4 comments, I&apos;m going to say r=me as is. If you&apos;d like to clear the review flag and post a new patch for review withe improvements, that would be OK. Or landing this as-is also would be. I think the one I feel most strongly about is the return value from makeAffine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114045</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-17 10:14:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 28674 [review])
&gt; Change looks great.
&gt; 
&gt; &gt; +#if ENABLE(3D_RENDERING)
&gt; &gt; +    if (value) {
&gt; &gt; +        float number;
&gt; &gt; +        return numberValue(value, number) &amp;&amp; compareValue(1, static_cast&lt;int&gt;(number), op);
&gt; &gt; +    }
&gt; &gt; +    return true;
&gt; &gt; +#else
&gt; &gt;      if (value) {
&gt; &gt;          float number;
&gt; &gt;          return numberValue(value, number) &amp;&amp; compareValue(0, static_cast&lt;int&gt;(number), op);
&gt; &gt;      }
&gt; &gt;      return false;
&gt; &gt; +#endif
&gt; 
&gt; I would have made a named constant for the one and 0 and the default value
&gt; rather than copying the body of the function twice. Not your fault, but this
&gt; code is surprisingly awkward and wordy.

I did that in one version of the patch, but it means having another variable for the return value. I&apos;ll do it.

&gt; &gt; +    // Throw away the non-affine parts of the matrix (lossy!)
&gt; &gt; +    TransformationMatrix&amp; makeAffine();
&gt; 
&gt; I think it&apos;s confusing to have these functions that both modify in place and
&gt; return the value of an object. It&apos;s too easy to call one of these and not
&gt; realize that it modifies &quot;this&quot;.  This is not just a theoretical issue -- I&apos;ve
&gt; had to fix many bugs during the lifetime of WebKit due to this sort of
&gt; misunderstanding. Because of that, I&apos;d prefer to have this return void. Your
&gt; thoughts?

Actually, most of the &quot;operations&quot; on TransformationMatrix modify |this|, like multiply(),
because it reduces the amount of copying, and TransformationMatrix is 128 bytes
(see bug 24395). They return a reference to this so you can chain them.

However, I&apos;m fine returning void to reduce the chance of confusion.

&gt; &gt; +#if !ENABLE(3D_RENDERING)
&gt; &gt; +        m_transform-&gt;makeAffine();
&gt; &gt; +#endif
&gt; 
&gt; Should we perhaps have a function just for this purpose so we don&apos;t have to
&gt; have the #if everywhere? It would just be an inline that does exactly this. I&apos;m
&gt; not sure exactly what to call it, but something about removing the parts of the
&gt; transform that we would be unable to render.

Yeah, but I&apos;d rather not put ENABLE(3D_RENDERING) in TransformationMatrix.
Maybe a static method on some rendering-related class, like:

static RenderObject::makeRenderableMatrix(TransformationMatrix&amp;) ?

&gt; &gt; +// Accelerated compositing (also needs to be set in WebCore/config.h)
&gt; &gt; +#if !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD)
&gt; &gt; +#define WTF_USE_ACCELERATED_COMPOSITING 0
&gt; &gt; +#endif
&gt; 
&gt; I&apos;m worried about this. Why do we have to set this up both in config.h and in
&gt; the prefix? This should be in exactly one place. It&apos;s OK to have that one place
&gt; be included both by the prefix and config.h, but it&apos;s not OK to repeat things
&gt; like this. I know this configuration stuff is a mess, but I would like to keep
&gt; it from getting even worse. Maybe there&apos;s nothing you can easily improve here.
&gt; We could talk about this in person at some point if you like.

Agreed. I asked Mark Rowe about this and he didn&apos;t have any suggestions. We need
a header that is included by all code in WebCore, WebKit and tools (DRT), and
gets preprocessed after the platform defines.

I think this should be done in a separate patch. I filed bug 24647.

&gt; Despite these 4 comments, I&apos;m going to say r=me as is. If you&apos;d like to clear
&gt; the review flag and post a new patch for review withe improvements, that would
&gt; be OK. Or landing this as-is also would be. I think the one I feel most
&gt; strongly about is the return value from makeAffine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114049</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-17 10:20:17 -0700</bug_when>
    <thetext>better name: makeMatrixRenderable() as a free function somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114050</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-17 10:21:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Actually, most of the &quot;operations&quot; on TransformationMatrix modify |this|, like
&gt; multiply(),
&gt; because it reduces the amount of copying, and TransformationMatrix is 128 bytes
&gt; (see bug 24395). They return a reference to this so you can chain them.

As we discussed on IRC, the &quot;return reference so you can chain&quot; idiom doesn&apos;t seem to work very well.

&gt; Yeah, but I&apos;d rather not put ENABLE(3D_RENDERING) in TransformationMatrix.

I agree.

&gt; Maybe a static method on some rendering-related class, like:
&gt; 
&gt; static RenderObject::makeRenderableMatrix(TransformationMatrix&amp;) ?

As we discussed on IRC, I like:

    void makeMatrixRenderable(TransformationMatrix&amp;);

And I think it would be fine to put it in RenderObject.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114067</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-17 11:04:47 -0700</bug_when>
    <thetext>I filed bug 24649 on the TransformationMatrix mutibility issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114074</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-17 12:25:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/41780</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28674</attachid>
            <date>2009-03-16 18:14:20 -0700</date>
            <delta_ts>2009-03-17 09:28:55 -0700</delta_ts>
            <desc>Patch, changelogs</desc>
            <filename>24396_patch.txt</filename>
            <type>text/plain</type>
            <size>17072</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzI2ZDBmYy4uZmY4ZGQ4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAwOS0wMy0xNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQzOTYKKworICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICBBZGQgV1RGX1VTRV9BQ0NF
TEVSQVRFRF9DT01QT1NJVElORywgZGVmaW5lZCB0byAwIGZvciBub3csIGFuZCBhZGQgc29tZQor
ICAgICAgICBjb21tZW50cyB0byBtYWtlIHRoZSAjaWZkZWZzIG1vcmUgcmVhZGFibGUuCisKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVkVHJhbnNmb3JtKToKKyAgICAgICAgQWRkIGEgY29tbWVudCB0byBtZW50
aW9uIHRoYXQgd2UgZG9uJ3QgZmxhdHRlbiB0aGUgbWF0cml4LgorICAgICAgICAKKyAgICAgICAg
KiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zv
cm1fM2RNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgSGF2ZSB0aGUgJ3RyYW5zZm9ybS0zZCcg
bWVkaWEgcXVlcnkgZXZhbHVhdGUgdG8gJ3RydWUnIGlmIDNkLXJlbmRlcmluZworICAgICAgICBp
cyBzdXBwb3J0ZWQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0xheWVyQ0EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmFu
aW1hdGVUcmFuc2Zvcm0pOgorICAgICAgICBObyBuZWVkIGZvciB0aGUgI2lmZGVmIGhlcmUuIElm
IHdlIGRvbid0IHN1cHBvcnQgM2QsIHdlIHdpbGwgaGF2ZSBhbHJlYWR5IGZsYXR0ZW5lZAorICAg
ICAgICB0aGUgbWF0cml4LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4OjptYWtlQWZmaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAgIE5ldyBtZXRo
b2QgdG8gY29udmVydCB0aGUgbWF0cml4IHRvIGFuIGFmZmluZSBtYXRyaXggYnkgdGhyb3dpbmcg
YSB3YXkgdGhlIG5vbi1hZmZpbmUKKyAgICAgICAgcGFydHMuCisgICAgICAgIAorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXBkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJy
ZW50VHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlTGF5ZXJUcmFu
c2Zvcm0pOgorICAgICAgICBJZiAzZCByZW5kZXJpbmcgaXMgbm90IHN1cHBvcnRlZCwgY29udmVy
dCB0aGUgbWF0cml4IHRvIGFuIGFmZmluZSBtYXRyaXgKKyAgICAgICAgd2hpY2ggY2FuIGJlIHJl
bmRlcmVkLCBhbmQgdXNlZCBmb3IgaGl0IHRlc3RpbmcuCisgICAgICAgIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICBDaGFuZ2UgdGhlIG5h
bWUgb2YgdGhlIGV4cG9ydGVkIHN5bWJvbCB0aGF0IHdlYmtpdGRpcnMucG0gdXNlcyB0byBrbm93
IGlmCisgICAgICAgIDNkIHJlbmRlcmluZyBpcyBzdXBwb3J0ZWQuIFRoZXJlIGlzIG5vIG90aGVy
IDNkLXJlbmRlcmluZy1zcGVjaWZpYyBzeW1ib2wgd2UgY2FuIHNuaWZmLgorICAgICAgICAKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6dHJhbnNmb3JtRnJvbUNvbnRhaW5lcik6CisgICAgICAgIE9ubHkgdGFrZSBw
ZXJzcGVjdGl2ZSBpbnRvIGFjY291bnQgaWYgM2QgcmVuZGVyaW5nIGlzIHN1cHBvcnRlZC4KKwog
MjAwOS0wMy0xNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2NvbmZpZy5oIGIv
V2ViQ29yZS9jb25maWcuaAppbmRleCA5ZTNkY2RmLi4xMzQxZDE2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2NvbmZpZy5oCisrKyBiL1dlYkNvcmUvY29uZmlnLmgKQEAgLTEwMCw2ICsxMDAsNyBAQAog
I2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisvLyBBVFNVSSB2cy4gQ29yZVRleHQKICNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkKICNkZWZpbmUgV1RGX1VTRV9BVFNVSSAwCiAjZGVmaW5lIFdURl9VU0VfQ09SRV9URVhUIDEK
QEAgLTEwNyw4ICsxMDgsMTUgQEAKICNkZWZpbmUgV1RGX1VTRV9BVFNVSSAxCiAjZGVmaW5lIFdU
Rl9VU0VfQ09SRV9URVhUIDAKICNlbmRpZgorCisvLyBOZXcgdGhlbWUKICNkZWZpbmUgV1RGX1VT
RV9ORVdfVEhFTUUgMQorCisvLyBBY2NlbGVyYXRlZCBjb21wb3NpdGluZworI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorI2Rl
ZmluZSBXVEZfVVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HIDAKICNlbmRpZgorI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRGT1JNKFNZTUJJQU4pCiAjdW5kZWYgV0lOMzIKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDEwYzM2N2Qu
LjQ2Mzg4OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cApAQCAtNDIyLDYgKzQyMiw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRl
ZFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kCiAKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRy
YW5zZm9ybSwgYm94LnNpemUoKSwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4p
OworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGZsYXR0ZW4gdG8gYW4gYWZmaW5lIHRy
YW5zZm9ybSBpZiBFTkFCTEUoM0RfUkVOREVSSU5HKSBpcyBvZmYsIGJ5IGRlc2lnbi4KIAogICAg
IFJlZlB0cjxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4gdHJhbnNmb3JtVmFsOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBiL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IGZhNWEzZTkuLmJmNzRjOTggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwCkBAIC00MTcsMTEgKzQxNywxOSBAQCBzdGF0aWMgYm9vbCB0
cmFuc2Zvcm1fMmRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUq
LCBGcmFtZSosCiAKIHN0YXRpYyBib29sIHRyYW5zZm9ybV8zZE1lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9w
KQogeworI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
IGZsb2F0IG51bWJlcjsKKyAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIp
ICYmIGNvbXBhcmVWYWx1ZSgxLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7CisjZWxzZQogICAgIGlmICh2YWx1ZSkgewogICAgICAgICBmbG9h
dCBudW1iZXI7CiAgICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBj
b21wYXJlVmFsdWUoMCwgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBjcmVhdGVGdW5jdGlvbk1h
cCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xh
eWVyQ0EubW0gYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0Eu
bW0KaW5kZXggYjg5NzY2OC4uZjNmMmQ3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQpAQCAtOTQ2LDEyICs5NDYsNyBAQCBib29sIEdy
YXBoaWNzTGF5ZXJDQTo6YW5pbWF0ZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1WYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgY29ucwogICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KGZ1bmN0aW9uTGlzdC5zaXplKCkpICYmICFpc01hdHJpeEFuaW1hdGlvbikKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBvcFR5cGUgPSAKLSNpZiBFTkFCTEUoM0RfVFJBTlNGT1JNUykKLSAgICAg
ICAgICAgIGlzTWF0cml4QW5pbWF0aW9uID8gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Qg
OiBmdW5jdGlvbkxpc3RbZnVuY3Rpb25JbmRleF07Ci0jZWxzZQotICAgICAgICAgICAgaXNNYXRy
aXhBbmltYXRpb24gPyBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWCA6IGZ1bmN0aW9uTGlzdFtm
dW5jdGlvbkluZGV4XTsKLSNlbmRpZiAgICAgICAgCisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSBvcFR5cGUgPSBpc01hdHJpeEFuaW1hdGlvbiA/IFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYXzNEIDogZnVuY3Rpb25MaXN0W2Z1bmN0aW9uSW5kZXhdOwogCiAgICAg
ICAgIGlmIChpc0tleWZyYW1lKSB7CiAgICAgICAgICAgICBOU011dGFibGVBcnJheSogdGltZXNB
cnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eC5jcHAKaW5kZXggNWI2OTRlOC4uODkwZTlkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3Bw
CkBAIC05NTAsNiArOTUwLDI1IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9u
TWF0cml4OjppbnZlcnNlKCkgY29uc3QKICAgICByZXR1cm4gaW52TWF0OwogfQogCitUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1ha2VBZmZpbmUoKQoreworICAg
IG1fbWF0cml4WzBdWzJdID0gMDsKKyAgICBtX21hdHJpeFswXVszXSA9IDA7CisgICAgCisgICAg
bV9tYXRyaXhbMV1bMl0gPSAwOworICAgIG1fbWF0cml4WzFdWzNdID0gMDsKKyAgICAKKyAgICBt
X21hdHJpeFsyXVswXSA9IDA7CisgICAgbV9tYXRyaXhbMl1bMV0gPSAwOworICAgIG1fbWF0cml4
WzJdWzJdID0gMTsKKyAgICBtX21hdHJpeFsyXVszXSA9IDA7CisgICAgCisgICAgbV9tYXRyaXhb
M11bMl0gPSAwOworICAgIG1fbWF0cml4WzNdWzNdID0gMTsKKworICAgIHJldHVybiAqdGhpczsK
K30KKwogc3RhdGljIGlubGluZSB2b2lkIGJsZW5kRmxvYXQoZG91YmxlJiBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKIHsKICAgICBpZiAoZnJvbSAhPSB0bykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9u
TWF0cml4LmgKaW5kZXggMjkzMTY4ZC4uNmQ0YWU5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgK
QEAgLTI0OCw2ICsyNDgsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbTMxKCkgPT0gMCAm
JiBtMzIoKSA9PSAwICYmIG0zMygpID09IDEgJiYgbTM0KCkgPT0gMCAmJiBtNDMoKSA9PSAwICYm
IG00NCgpID09IDEpOwogICAgIH0KIAorICAgIC8vIFRocm93IGF3YXkgdGhlIG5vbi1hZmZpbmUg
cGFydHMgb2YgdGhlIG1hdHJpeCAobG9zc3khKQorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YWtlQWZmaW5lKCk7CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG0yKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChtX21hdHJpeFswXVswXSA9
PSBtMi5tX21hdHJpeFswXVswXSAmJgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGM1
NmQ4ZjUuLmU3NjVmM2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyOSw2ICsz
MjksOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgICAgICBBU1NF
UlQoYm94KTsKICAgICAgICAgbV90cmFuc2Zvcm0tPm1ha2VJZGVudGl0eSgpOwogICAgICAgICBi
b3gtPnN0eWxlKCktPmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgYm94LT5ib3JkZXJCb3hS
ZWN0KCkuc2l6ZSgpLCBSZW5kZXJTdHlsZTo6SW5jbHVkZVRyYW5zZm9ybU9yaWdpbik7CisjaWYg
IUVOQUJMRSgzRF9SRU5ERVJJTkcpCisgICAgICAgIG1fdHJhbnNmb3JtLT5tYWtlQWZmaW5lKCk7
CisjZW5kaWYKICAgICB9CiAKICAgICBpZiAoaGFkM0RUcmFuc2Zvcm0gIT0gaGFzM0RUcmFuc2Zv
cm0oKSkKQEAgLTM0NSw2ICszNDgsOSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXll
cjo6Y3VycmVudFRyYW5zZm9ybSgpIGNvbnN0CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGN1cnJUcmFuc2Zvcm07CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5k
ZXJlcigpLT5hbmltYXRpb24oKS0+Z2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVy
KCkpOwogICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcmVuZGVy
Qm94KCktPmJvcmRlckJveFJlY3QoKS5zaXplKCksIFJlbmRlclN0eWxlOjpJbmNsdWRlVHJhbnNm
b3JtT3JpZ2luKTsKKyNpZiAhRU5BQkxFKDNEX1JFTkRFUklORykKKyAgICAgICAgY3VyclRyYW5z
Zm9ybS5tYWtlQWZmaW5lKCk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIGN1cnJUcmFuc2Zvcm07
CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApp
bmRleCBhM2M1YmI4Li45NmM1ZmRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKQEAgLTExMyw4ICsxMTMsMTIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUxheWVyVHJhbnNmb3JtKCkKICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCB1c2UgbV9vd25p
bmdMYXllci0+dHJhbnNmb3JtKCksIGJ1dCB0aGF0IGN1cnJlbnRseSBoYXMgdHJhbnNmb3JtLW9y
aWdpbgogICAgIC8vIGJha2VkIGludG8gaXQsIGFuZCB3ZSBkb24ndCB3YW50IHRoYXQuCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdDsKLSAgICBpZiAobV9vd25pbmdMYXllci0+aGFzVHJhbnNm
b3JtKCkpCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc1RyYW5zZm9ybSgpKSB7CiAgICAgICAg
IHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0LCB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVy
Qm94UmVjdCgpLnNpemUoKSwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwor
I2lmICFFTkFCTEUoM0RfUkVOREVSSU5HKQorICAgICAgICB0Lm1ha2VBZmZpbmUoKTsKKyNlbmRp
ZgorICAgIH0KICAgICAKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFRyYW5zZm9ybSh0KTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDA4NDg2
ZTEuLmMxYmM2ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcApAQCAtNDksOSArNDksOSBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNl
bmRpZgogCi0jaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpCi0vLyBUaGlzIHN5bWJvbCBpcyB1c2Vk
IHRvIGRldGVybWluZSBmcm9tIGEgc2NyaXB0IHdoZXRoZXIgM0QgdHJhbnNmb3JtcyBhcmUgZW5h
YmxlZCAodmlhICdubScpLgotYm9vbCBXZWJDb3JlSGFzM0RUcmFuc2Zvcm1zID0gdHJ1ZTsKKyNp
ZiBFTkFCTEUoM0RfUkVOREVSSU5HKQorLy8gVGhpcyBzeW1ib2wgaXMgdXNlZCB0byBkZXRlcm1p
bmUgZnJvbSBhIHNjcmlwdCB3aGV0aGVyIDNEIHJlbmRlcmluZyBpcyBlbmFibGVkICh2aWEgJ25t
JykuCitib29sIFdlYkNvcmVIYXMzRFJlbmRlcmluZyA9IHRydWU7CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZjg2M2NlNC4u
NjdlYzAwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNjg3LDYgKzE2ODcs
NyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJPYmplY3Q6OnRyYW5zZm9ybUZyb21Db250
YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjbwogICAgIGlmIChoYXNMYXllcigpICYmIChsYXll
ciA9IHRvUmVuZGVyQm94KHRoaXMpLT5sYXllcigpKSAmJiBsYXllci0+dHJhbnNmb3JtKCkpCiAg
ICAgICAgIGNvbnRhaW5lclRyYW5zZm9ybS5tdWx0TGVmdChsYXllci0+Y3VycmVudFRyYW5zZm9y
bSgpKTsKICAgICAKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQogICAgIGlmIChjb250YWluZXJP
YmplY3QgJiYgY29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLT5oYXNQZXJzcGVjdGl2ZSgpKSB7CiAg
ICAgICAgIC8vIFBlcnBzZWN0aXZlIG9uIHRoZSBjb250YWluZXIgYWZmZWN0cyB1cywgc28gd2Ug
aGF2ZSB0byBmYWN0b3IgaXQgaW4gaGVyZS4KICAgICAgICAgQVNTRVJUKGNvbnRhaW5lck9iamVj
dC0+aGFzTGF5ZXIoKSk7CkBAIC0xNjk5LDYgKzE3MDAsOSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBSZW5kZXJPYmplY3Q6OnRyYW5zZm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiBjbwogICAgICAgICBjb250YWluZXJUcmFuc2Zvcm0ubXVsdGlwbHkocGVyc3BlY3RpdmVNYXRy
aXgpOwogICAgICAgICBjb250YWluZXJUcmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQzZChwZXJzcGVj
dGl2ZU9yaWdpbi54KCksIHBlcnNwZWN0aXZlT3JpZ2luLnkoKSwgMCk7CiAgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY29udGFpbmVyT2JqZWN0KTsKKyNlbmRpZgogCiAgICAgcmV0dXJu
IGNvbnRhaW5lclRyYW5zZm9ybTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9n
IGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZDRjOTNjZC4uMzQ1ZTQxZSAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAwOS0wMy0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQzOTYKKyAgICAgICAgCisg
ICAgICAgIEFkZCBXVEZfVVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HLCBkZWZpbmVkIHRvIDAg
Zm9yIG5vdy4KKworICAgICAgICAqIFdlYktpdFByZWZpeC5oOgorCiAyMDA5LTAzLTE2ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJLaXRQcmVmaXguaCBiL1dlYktpdC9t
YWMvV2ViS2l0UHJlZml4LmgKaW5kZXggM2UyNmFiNC4uYmM4NDkzYSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L21hYy9XZWJLaXRQcmVmaXguaAorKysgYi9XZWJLaXQvbWFjL1dlYktpdFByZWZpeC5oCkBA
IC04MSw2ICs4MSwxMSBAQCB0eXBlZGVmIGZsb2F0IENHRmxvYXQ7CiAjZGVmaW5lIFdURl9VU0Vf
UExVR0lOX0hPU1RfUFJPQ0VTUyAxCiAjZW5kaWYKIAorLy8gQWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcgKGFsc28gbmVlZHMgdG8gYmUgc2V0IGluIFdlYkNvcmUvY29uZmlnLmgpCisjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisj
ZGVmaW5lIFdURl9VU0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgMAorI2VuZGlmCisKICNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogLyogV2ViS2l0IGhhcyBubyB3YXkgdG8gcHVsbCBzZXR0
aW5ncyBmcm9tIFdlYkNvcmUvY29uZmlnLmggZm9yIG5vdyAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM0ZTQzNmYuLmFi
ZjA3MDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wMy0xNiAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQzOTYKKworICAgICAgICBDaGFuZ2UgdGhlIHRlcm1pbm9sb2d5IGZyb20gJzNEIHRyYW5zZm9y
bXMnIHRvICczRCByZW5kZXJpbmcnLgorCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6
CisgICAgICAgICogU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0ZGlycy5wbToKKwogMjAwOS0wMy0xNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCBKb2huIFN1
bGxpdmFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBiMWEwNGNmLi5iYWIwYzU2IDEw
MDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtNjEsNyArNjEsNyBAQCBteSAkd29ya2Vyc1N1
cHBvcnQgPSAoaXNBcHBsZVdlYktpdCgpIHx8IGlzR3RrKCkpOyAjIEVuYWJsZSBieSBkZWZhdWx0
IGZvciBBcHBsZQogbXkgJGdlb2xvY2F0aW9uU3VwcG9ydCA9IChpc0FwcGxlTWFjV2ViS2l0KCkg
JiYgIWlzVGlnZXIoKSAmJiAhaXNMZW9wYXJkKCkpOwogbXkgJHNob3dIZWxwID0gMDsKIG15ICRj
bGVhbiA9IDA7Ci1teSAkdGhyZWVEVHJhbnNmb3Jtc1N1cHBvcnQgPSAwOworbXkgJHRocmVlRFJl
bmRlcmluZ1N1cHBvcnQgPSAwOwogCiBteSAkcHJvZ3JhbU5hbWUgPSBiYXNlbmFtZSgkMCk7CiBt
eSAkdXNhZ2UgPSA8PEVPRjsKQEAgLTcxLDcgKzcxLDcgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBb
b3B0aW9uc10gW29wdGlvbnMgdG8gcGFzcyB0byBidWlsZCBzeXN0ZW1dCiAgIC0tY2hyb21pdW0g
ICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBDaHJvbWl1bSBwb3J0IG9uIE1hYy9XaW4vTGlu
dXgKICAgLS1jbGVhbiAgICAgICAgICAgICAgICAgICAgICAgQ2xlYW51cCB0aGUgYnVpbGQgZGly
ZWN0b3J5CiAgIC0tZ3RrICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBHVEsrIHBv
cnQKLSAgLS1bbm8tXTNkLXRyYW5zZm9ybXMgICAgICAgICAgVG9nZ2xlIDNEIFRyYW5zZm9ybXMg
c3VwcG9ydCAoZGVmYXVsdDogJHRocmVlRFRyYW5zZm9ybXNTdXBwb3J0KQorICAtLVtuby1dM2Qt
cmVuZGVyaW5nICAgICAgICAgICBUb2dnbGUgM0QgcmVuZGVyaW5nIHN1cHBvcnQgKGRlZmF1bHQ6
ICR0aHJlZURSZW5kZXJpbmdTdXBwb3J0KQogICAtLVtuby1dY2hhbm5lbC1tZXNzYWdpbmcgICAg
ICAgICAgVG9nZ2xlIE1lc3NhZ2VDaGFubmVsIGFuZCBNZXNzYWdlUG9ydCBzdXBwb3J0IChkZWZh
dWx0OiAkY2hhbm5lbE1lc3NhZ2luZ1N1cHBvcnQpCiAgIC0tW25vLV1vZmZsaW5lLXdlYi1hcHBs
aWNhdGlvbnMgICBUb2dnbGUgT2ZmbGluZSBXZWIgQXBwbGljYXRpb24gU3VwcG9ydCAoZGVmYXVs
dCA6ICRvZmZsaW5lV2ViQXBwbGljYXRpb25TdXBwb3J0KQogICAtLVtuby1dZGF0YWJhc2UgICAg
ICAgICAgICAgICBUb2dnbGUgRGF0YWJhc2UgU3VwcG9ydCAoZGVmYXVsdDogJGRhdGFiYXNlU3Vw
cG9ydCkKQEAgLTk1LDcgKzk1LDcgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29w
dGlvbnMgdG8gcGFzcyB0byBidWlsZCBzeXN0ZW1dCiBFT0YKIAogR2V0T3B0aW9ucygKLSAgICAg
ICAgICAgJzNkLXRyYW5zZm9ybXMhJyA9PiBcJHRocmVlRFRyYW5zZm9ybXNTdXBwb3J0LAorICAg
ICAgICAgICAnM2QtcmVuZGVyaW5nIScgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0LAogICAg
ICAgICAgICAnY2hhbm5lbC1tZXNzYWdpbmchJyA9PiBcJGNoYW5uZWxNZXNzYWdpbmdTdXBwb3J0
LAogICAgICAgICAgICAnZGF0YWJhc2UhJyA9PiBcJGRhdGFiYXNlU3VwcG9ydCwKICAgICAgICAg
ICAgJ2RvbS1zdG9yYWdlIScgPT4gXCRkb21TdG9yYWdlU3VwcG9ydCwKQEAgLTE0Nyw3ICsxNDcs
NyBAQCBteSBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbiA9ICgpOwogIyBUaGlzIG5lZWRz
IHRvIGJlIGtlcHQgc29ydGVkLCBhbmQgaW4gc3luYyB3aXRoIEZFQVRVUkVfREVGSU5FUyBpbiBK
YXZhU2NyaXB0Q29yZS54Y2NvbmZpZywgV2ViQ29yZS54Y2NvbmZpZwogIyBhbmQgV2ViS2l0Lnhj
Y29uZmlnIHRvIHByZXZlbnQgbmVlZGxlc3MgcmVidWlsZGluZyB3aGVuIHVzaW5nIGJvdGggWGNv
ZGUgYW5kIGJ1aWxkLXdlYmtpdC4KIAotcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlv
biwgIkVOQUJMRV8zRF9UUkFOU0ZPUk1TIiBpZiAkdGhyZWVEVHJhbnNmb3Jtc1N1cHBvcnQ7Citw
dXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0aW9uLCAiRU5BQkxFXzNEX1JFTkRFUklORyIg
aWYgJHRocmVlRFJlbmRlcmluZ1N1cHBvcnQ7CiBwdXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVz
T3B0aW9uLCAiRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HIiBpZiAkY2hhbm5lbE1lc3NhZ2luZ1N1
cHBvcnQ7CiBwdXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0aW9uLCAiRU5BQkxFX0RBVEFC
QVNFIiBpZiAkZGF0YWJhc2VTdXBwb3J0OwogcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09w
dGlvbiwgIkVOQUJMRV9ET01fU1RPUkFHRSIgaWYgJGRvbVN0b3JhZ2VTdXBwb3J0OwpAQCAtMTkx
LDcgKzE5MSw3IEBAIGlmIChpc0d0aygpKSB7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xz
RmxhZygkZ25vbWVLZXlyaW5nU3VwcG9ydCwgImdub21la2V5cmluZyIpOwogICAgIHB1c2ggQG9w
dGlvbnMsIGF1dG90b29sc0ZsYWcoJGljb25EYXRhYmFzZVN1cHBvcnQsICJpY29uLWRhdGFiYXNl
Iik7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkb2ZmbGluZVdlYkFwcGxpY2F0
aW9uU3VwcG9ydCwgIm9mZmxpbmUtd2ViLWFwcGxpY2F0aW9ucyIpOwotICAgIHB1c2ggQG9wdGlv
bnMsIGF1dG90b29sc0ZsYWcoJHRocmVlRFRyYW5zZm9ybXNTdXBwb3J0LCAiM0QtdHJhbnNmb3Jt
cyIpOworICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHRocmVlRFJlbmRlcmluZ1N1
cHBvcnQsICIzRC1yZW5kZXJpbmciKTsKICAgICBwdXNoIEBvcHRpb25zLCBhdXRvdG9vbHNGbGFn
KCRjaGFubmVsTWVzc2FnaW5nU3VwcG9ydCwgImNoYW5uZWwtbWVzc2FnaW5nIik7CiAgICAgcHVz
aCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkc3ZnU3VwcG9ydCwgInN2ZyIpOwogICAgIHB1c2gg
QG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHN2Z0FuaW1hdGlvblN1cHBvcnQsICJzdmctYW5pbWF0
aW9uIik7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMKaW5kZXggMjZhZTI3Ny4uY2Uw
ZGFmZiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzCisr
KyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cwpAQCAtMzY1LDcgKzM2NSw3
IEBAIGlmICghY2hlY2tXZWJDb3JlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cHBvcnQoMCkpIHsK
ICAgICAkaWdub3JlZERpcmVjdG9yaWVzeydjb21wb3NpdGluZyd9ID0gMTsKIH0KIAotaWYgKCFj
aGVja1dlYkNvcmUzRFRyYW5zZm9ybXNTdXBwb3J0KDApKSB7CitpZiAoIWNoZWNrV2ViQ29yZTNE
UmVuZGVyaW5nU3VwcG9ydCgwKSkgewogICAgICRpZ25vcmVkRGlyZWN0b3JpZXN7J2FuaW1hdGlv
bnMvM2QnfSA9IDE7CiAgICAgJGlnbm9yZWREaXJlY3Rvcmllc3sndHJhbnNmb3Jtcy8zZCd9ID0g
MTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbSBiL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCAwNjk0OWM4Li41M2RhNTk3IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC01NjksMzMgKzU2OSwzMyBAQCBzdWIgY2hl
Y2tXZWJDb3JlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N1cHBvcnQKICAgICByZXR1cm4gJGhhc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmc7CiB9CiAKLXN1YiBoYXMzRFRyYW5zZm9ybXNTdXBwb3J0Citz
dWIgaGFzM0RSZW5kZXJpbmdTdXBwb3J0CiB7CiAgICAgcmV0dXJuIDAgaWYgaXNDeWd3aW4oKSB8
fCBpc1F0KCk7CiAKICAgICBteSAkcGF0aCA9IHNoaWZ0OwogCi0gICAgbXkgJGhhczNEVHJhbnNm
b3Jtc1N1cHBvcnQgPSAwOworICAgIG15ICRoYXMzRFJlbmRlcmluZ1N1cHBvcnQgPSAwOwogICAg
IGlmICgtZSAkcGF0aCkgewogICAgICAgICBvcGVuIE5NLCAiLXwiLCAibm0iLCAkcGF0aCBvciBk
aWU7CiAgICAgICAgIHdoaWxlICg8Tk0+KSB7Ci0gICAgICAgICAgICAkaGFzM0RUcmFuc2Zvcm1z
U3VwcG9ydCA9IDEgaWYgL1dlYkNvcmVIYXMzRFRyYW5zZm9ybXMvOworICAgICAgICAgICAgJGhh
czNEUmVuZGVyaW5nU3VwcG9ydCA9IDEgaWYgL1dlYkNvcmVIYXMzRFJlbmRlcmluZy87CiAgICAg
ICAgIH0KICAgICAgICAgY2xvc2UgTk07CiAgICAgfQotICAgIHJldHVybiAkaGFzM0RUcmFuc2Zv
cm1zU3VwcG9ydDsKKyAgICByZXR1cm4gJGhhczNEUmVuZGVyaW5nU3VwcG9ydDsKIH0KIAotc3Vi
IGNoZWNrV2ViQ29yZTNEVHJhbnNmb3Jtc1N1cHBvcnQKK3N1YiBjaGVja1dlYkNvcmUzRFJlbmRl
cmluZ1N1cHBvcnQKIHsKICAgICBteSAkcmVxdWlyZWQgPSBzaGlmdDsKICAgICBteSAkZnJhbWV3
b3JrID0gIldlYkNvcmUiOwogICAgIG15ICRwYXRoID0gYnVpbHREeWxpYlBhdGhGb3JOYW1lKCRm
cmFtZXdvcmspOwotICAgIG15ICRoYXMzRFRyYW5zZm9ybXMgPSBoYXMzRFRyYW5zZm9ybXNTdXBw
b3J0KCRwYXRoKTsKLSAgICBpZiAoJHJlcXVpcmVkICYmICEkaGFzM0RUcmFuc2Zvcm1zKSB7Ci0g
ICAgICAgIGRpZSAiJGZyYW1ld29yayBhdCBcIiRwYXRoXCIgZG9lcyBub3QgaW5jbHVkZSAzRCBU
cmFuc2Zvcm1zIFN1cHBvcnQsIHBsZWFzZSBydW4gYnVpbGQtd2Via2l0IC0tM2QtdHJhbnNmb3Jt
c1xuIjsKKyAgICBteSAkaGFzM0RSZW5kZXJpbmcgPSBoYXMzRFJlbmRlcmluZ1N1cHBvcnQoJHBh
dGgpOworICAgIGlmICgkcmVxdWlyZWQgJiYgISRoYXMzRFJlbmRlcmluZykgeworICAgICAgICBk
aWUgIiRmcmFtZXdvcmsgYXQgXCIkcGF0aFwiIGRvZXMgbm90IGluY2x1ZGUgM0QgcmVuZGVyaW5n
IFN1cHBvcnQsIHBsZWFzZSBydW4gYnVpbGQtd2Via2l0IC0tM2QtcmVuZGVyaW5nXG4iOwogICAg
IH0KLSAgICByZXR1cm4gJGhhczNEVHJhbnNmb3JtczsKKyAgICByZXR1cm4gJGhhczNEUmVuZGVy
aW5nOwogfQogCiBzdWIgaGFzV01MU3VwcG9ydAo=
</data>
<flag name="review"
          id="14119"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>