<?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>41779</bug_id>
          
          <creation_ts>2010-07-07 11:13:12 -0700</creation_ts>
          <short_desc>[GTK] Implement ImageDiff and add it to the build system</short_desc>
          <delta_ts>2010-07-08 12:32:04 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>31518</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>247647</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-07 11:13:12 -0700</bug_when>
    <thetext>The ImageDiff program is an essential component for pixel tests. It takes two PNG images via stdin and compares their pixels reporting the percentage difference and a PNG image showing the difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247682</commentid>
    <comment_count>1</comment_count>
      <attachid>60764</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-07 12:31:30 -0700</bug_when>
    <thetext>Created attachment 60764
ImageDiff implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247684</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-07 12:34:35 -0700</bug_when>
    <thetext>Attachment 60764 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/DumpRenderTree/gtk/ImageDiff.cpp:30:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248221</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-08 08:35:24 -0700</bug_when>
    <thetext>This is a stand-alone utility, therefore I think it shouldn&apos;t need config.h. Once it&apos;s in the tree I&apos;ll post a patch for this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248330</commentid>
    <comment_count>4</comment_count>
      <attachid>60764</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-07-08 10:49:07 -0700</bug_when>
    <thetext>Comment on attachment 60764
ImageDiff implementation

 102     void* diffBuffer = malloc(width * height);
[...]
 110     unsigned char* diff = static_cast&lt;unsigned char*&gt;(diffBuffer);
[...]
143         *differenceImage = differenceImageFromDifferenceBuffer(static_cast&lt;unsigned char*&gt;(diffBuffer), width, height);

Given that you never use the diffBuffer as a void*, I would prefer having the cast in the malloc call, it makes it a bit easier on the reader of the code.

I find the mixed usage of g_print, fputs and fprintf unnecessary, though I do not oppose to it. I feel like you cal also make the ifs that are under the else ifs here be just one more condition of the else if:

 206             if (imageSize &gt; 0 &amp;&amp; !actualImage) {
 207                 if (!(actualImage = readPixbufFromStdin(imageSize))) {
 208                     fputs(&quot;Error, could not read actual image.\n&quot;, stdout);
 209                     return 1;
 210                 }
 211             } else if (imageSize &gt; 0 &amp;&amp; !baselineImage) {
 212                 if (!(baselineImage = readPixbufFromStdin(imageSize))) {
 213                     fputs(&quot;Error, could not read baseline image.\n&quot;, stdout);
 214                     return 1;
 215                 }

It will make it a bit easier to read, IMO. Other than the above comments, I think the code looks right, let&apos;s start getting some experience with how well pixel tests will work for us, I guess =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248360</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-08 11:24:09 -0700</bug_when>
    <thetext>(In reply to comment #4)

Thanks for the review!

&gt; Given that you never use the diffBuffer as a void*, I would prefer having
&gt; the cast in the malloc call, it makes it a bit easier on the reader of the
&gt; code.

Okay, will fix.

&gt; I find the mixed usage of g_print, fputs and fprintf unnecessary,
&gt; though I do not oppose to it. I feel like you cal also make the ifs
&gt; that are under the else ifs here be just one more condition of the else if:

Okay, I&apos;ll switch it to all (f)printf.

&gt; 
&gt;  206             if (imageSize &gt; 0 &amp;&amp; !actualImage) {
&gt;  207                 if (!(actualImage = readPixbufFromStdin(imageSize))) {
&gt;  208                     fputs(&quot;Error, could not read actual image.\n&quot;, stdout);
&gt;  209                     return 1;
&gt;  210                 }
&gt;  211             } else if (imageSize &gt; 0 &amp;&amp; !baselineImage) {
&gt;  212                 if (!(baselineImage = readPixbufFromStdin(imageSize))) {
&gt;  213                     fputs(&quot;Error, could not read baseline image.\n&quot;, stdout);
&gt;  214                     return 1;
&gt;  215                 }

I think this has to stay. I want to actually bail out if the image fails
to load, but I don&apos;t want to bail out if the first condition fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248435</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-08 12:32:04 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/62817 . Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60764</attachid>
            <date>2010-07-07 12:31:30 -0700</date>
            <delta_ts>2010-07-08 10:49:07 -0700</delta_ts>
            <desc>ImageDiff implementation</desc>
            <filename>bug-41779-20100707123129.patch</filename>
            <type>text/plain</type>
            <size>12044</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5NWY2MDEzNDE3OWVmM2M0NDBiZDUxMjJjYWU0ODNjNDExNDI2M2I1Li4wOWJmNmVh
ZWYwNThhNTQ4Zjc3NTIzOWUyOGUyMmQwY2JhMzc2YTdhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTAtMDctMDcgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBJbWFnZURpZmYgYW5kIGFkZCBpdCB0byB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTc3OQorCisgICAgICAgIEFk
ZCB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSW1hZ2VEaWZmIHRvb2wgZm9yIHRo
ZSBHVEsrCisgICAgICAgIHBvcnQuIFRoaXMgaXMgYW4gZXNzZW50aWFsIHRvb2wgZm9yIGRvaW5n
IHBpeGVsIHRlc3RzLiBUaGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaXMgYmFzZWQgb24gdGhl
IE1hYyBhbmQgQ2hyb21pdW0gcG9ydHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsv
SW1hZ2VEaWZmLmNwcDogQWRkZWQuCisgICAgICAgIChyZWFkUGl4YnVmRnJvbVN0ZGluKTogQWRk
ZWQuCisgICAgICAgIChkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZlcik6IERpdHRv
LgorICAgICAgICAoY2FsY3VsYXRlRGlmZmVyZW5jZSk6IERpdHRvLgorICAgICAgICAocHJpbnRJ
bWFnZSk6IERpdHRvLgorICAgICAgICAocHJpbnRJbWFnZURpZmZlcmVuY2VzKTogRGl0dG8uCisg
ICAgICAgIChtYWluKTogRGl0dG8uCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBJbWFn
ZURpZmYgdG8gdGhlIFdlYktpdFRvb2xzIGJ1aWxkIHNjcmlwdHMuCisKIDIwMTAtMDctMDcgIEFu
ZHJhcyBCZWNzaSAgPGFiZWNzaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgdHJp
dmlhbCBmaXguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvSW1h
Z2VEaWZmLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURpZmYuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ2MTI3NGY2MTlmZDhmNjFjZTY3YzQ4OGI2ZGE2ODBjNTA4ZDMxYjgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvSW1hZ2VEaWZm
LmNwcApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9i
ZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8
Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgZG91YmxlIHRvbGVyYW5jZSA9IDA7CitzdGF0aWMg
R09wdGlvbkVudHJ5IGNvbW1hbmRMaW5lT3B0aW9uRW50cmllc1tdID0gCit7CisgICAgeyAidG9s
ZXJhbmNlIiwgMCwgMCwgR19PUFRJT05fQVJHX0RPVUJMRSwgJnRvbGVyYW5jZSwgIlBlcmNlbnRh
Z2UgZGlmZmVyZW5jZSBiZXR3ZWVuIGltYWdlcyBiZWZvcmUgY29uc2lkZXJpbmcgdGhlbSBkaWZm
ZXJlbnQiLCAiVCIgfSwKKyAgICB7IDAsIDAsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAwLCAwLCAw
IH0sCit9OworCitHZGtQaXhidWYqIHJlYWRQaXhidWZGcm9tU3RkaW4obG9uZyBpbWFnZVNpemUp
Cit7CisgICAgdW5zaWduZWQgY2hhciBpbWFnZUJ1ZmZlclsyMDQ4XTsKKyAgICBHZGtQaXhidWZM
b2FkZXIqIGxvYWRlciA9IGdka19waXhidWZfbG9hZGVyX25ld193aXRoX3R5cGUoInBuZyIsIDAp
OworICAgIEdFcnJvciogZXJyb3IgPSAwOworCisgICAgd2hpbGUgKGltYWdlU2l6ZSA+IDApIHsK
KyAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWluPGludD4oaW1hZ2VTaXplLCAyMDQ4KTsK
KyAgICAgICAgc2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKGltYWdlQnVmZmVyLCAxLCBieXRlc1Rv
UmVhZCwgc3RkaW4pOworCisgICAgICAgIGlmICghZ2RrX3BpeGJ1Zl9sb2FkZXJfd3JpdGUobG9h
ZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KGltYWdlQnVmZmVyKSwgYnl0ZXNS
ZWFkLCAmZXJyb3IpKSB7CisgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAg
ICAgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UobG9hZGVyLCAwKTsKKyAgICAgICAgICAgIGdf
b2JqZWN0X3VucmVmKGxvYWRlcik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
CisgICAgICAgIGltYWdlU2l6ZSAtPSBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CisgICAg
fQorCisgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UobG9hZGVyLCAwKTsKKyAgICBHZGtQaXhi
dWYqIGRlY29kZWRJbWFnZSA9IGdka19waXhidWZfbG9hZGVyX2dldF9waXhidWYobG9hZGVyKTsK
KyAgICBnX29iamVjdF9yZWYoZGVjb2RlZEltYWdlKTsKKyAgICByZXR1cm4gZGVjb2RlZEltYWdl
OworfQorCitHZGtQaXhidWYqIGRpZmZlcmVuY2VJbWFnZUZyb21EaWZmZXJlbmNlQnVmZmVyKHVu
c2lnbmVkIGNoYXIqIGJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEdka1Bp
eGJ1ZiogaW1hZ2UgPSBnZGtfcGl4YnVmX25ldyhHREtfQ09MT1JTUEFDRV9SR0IsIEZBTFNFLCA4
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gaW1hZ2U7
CisKKyAgICBpbnQgcm93U3RyaWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGltYWdlKTsK
KyAgICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzKGlt
YWdlKTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciogZGlmZlBpeGVsID0gZGlmZlBpeGVscyArICh5ICogcm93U3RyaWRlKSArICh4ICogMyk7Cisg
ICAgICAgICAgICBkaWZmUGl4ZWxbMF0gPSBkaWZmUGl4ZWxbMV0gPSBkaWZmUGl4ZWxbMl0gPSAq
YnVmZmVyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK2Zs
b2F0IGNhbGN1bGF0ZURpZmZlcmVuY2UoR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlLCBHZGtQaXhi
dWYqIGFjdHVhbEltYWdlLCBHZGtQaXhidWYqKiBkaWZmZXJlbmNlSW1hZ2UpCit7CisgICAgaW50
IHdpZHRoID0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoYWN0dWFsSW1hZ2UpOworICAgIGludCBoZWln
aHQgPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpOworICAgIGludCBudW1iZXJP
ZkNoYW5uZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyhhY3R1YWxJbWFnZSk7CisgICAg
aWYgKCh3aWR0aCAhPSBnZGtfcGl4YnVmX2dldF93aWR0aChiYXNlbGluZUltYWdlKSkKKyAgICAg
ICAgfHwgKGhlaWdodCAhPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoYmFzZWxpbmVJbWFnZSkpCisg
ICAgICAgIHx8IChudW1iZXJPZkNoYW5uZWxzICE9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMo
YmFzZWxpbmVJbWFnZSkpCisgICAgICAgIHx8IChnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoYWN0
dWFsSW1hZ2UpICE9IGdka19waXhidWZfZ2V0X2hhc19hbHBoYShiYXNlbGluZUltYWdlKSkpIHsK
KyAgICAgICAgZnB1dHMoImVycm9yLCB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZm
ZXJlbnQgcHJvcGVydGllcy5cbiIsIHN0ZGVycik7CisgICAgICAgIHJldHVybiAxMDA7IC8vIENv
bXBsZXRlbHkgZGlmZmVyZW50LgorICAgIH0KKworICAgIHZvaWQqIGRpZmZCdWZmZXIgPSBtYWxs
b2Mod2lkdGggKiBoZWlnaHQpOworICAgIGZsb2F0IGNvdW50ID0gMDsKKyAgICBmbG9hdCBzdW0g
PSAwOworICAgIGZsb2F0IG1heERpc3RhbmNlID0gMDsKKyAgICBpbnQgYWN0dWFsUm93U3RyaWRl
ID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGFjdHVhbEltYWdlKTsKKyAgICBpbnQgYmFzZVJv
d1N0cmlkZSA9IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShiYXNlbGluZUltYWdlKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMoYWN0dWFs
SW1hZ2UpOworICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9w
aXhlbHMoYmFzZWxpbmVJbWFnZSk7CisgICAgdW5zaWduZWQgY2hhciogZGlmZiA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihkaWZmQnVmZmVyKTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykg
eworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYWN0dWFsUGl4ZWwgPSBhY3R1YWxQaXhlbHMg
KyAoeSAqIGFjdHVhbFJvd1N0cmlkZSkgKyAoeCAqIG51bWJlck9mQ2hhbm5lbHMpOworICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVsID0gYmFzZVBpeGVscyArICh5ICogYmFzZVJv
d1N0cmlkZSkgKyAoeCAqIG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgICAgICAgICBmbG9hdCBy
ZWQgPSAoYWN0dWFsUGl4ZWxbMF0gLSBiYXNlUGl4ZWxbMF0pIC8gbWF4PGZsb2F0PigyNTUgLSBi
YXNlUGl4ZWxbMF0sIGJhc2VQaXhlbFswXSk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IChh
Y3R1YWxQaXhlbFsxXSAtIGJhc2VQaXhlbFsxXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhl
bFsxXSwgYmFzZVBpeGVsWzFdKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSAoYWN0dWFsUGl4
ZWxbMl0gLSBiYXNlUGl4ZWxbMl0pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMl0sIGJh
c2VQaXhlbFsyXSk7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IChhY3R1YWxQaXhlbFszXSAt
IGJhc2VQaXhlbFszXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFszXSwgYmFzZVBpeGVs
WzNdKTsKKyAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0gc3FydGYocmVkICogcmVkICsgZ3Jl
ZW4gKiBncmVlbiArIGJsdWUgKiBibHVlICsgYWxwaGEgKiBhbHBoYSkgLyAyLjBmOworCisgICAg
ICAgICAgICAqZGlmZisrID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RhbmNlICogMjU1LjBmKTsKKwor
ICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IDEuMGYgLyAyNTUuMGYpIHsKKyAgICAgICAgICAg
ICAgICBjb3VudCArPSAxLjBmOworICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKKyAg
ICAgICAgICAgICAgICBtYXhEaXN0YW5jZSA9IG1heDxmbG9hdD4obWF4RGlzdGFuY2UsIGRpc3Rh
bmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENvbXB1dGUg
dGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJjZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIg
b2YKKyAgICAvLyBkaWZmZXJlbnQgcGl4ZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlIGFtb3VudCBp
LmUuIHRoZSBhdmVyYWdlIGRpc3RhbmNlCisgICAgLy8gb3ZlciB0aGUgZW50aXJlIGltYWdlCisg
ICAgZmxvYXQgZGlmZmVyZW5jZSA9IDA7CisgICAgaWYgKGNvdW50ID4gMC4wZikKKyAgICAgICAg
ZGlmZmVyZW5jZSA9IDEwMC4wZiAqIHN1bSAvIChoZWlnaHQgKiB3aWR0aCk7CisgICAgaWYgKGRp
ZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQorICAgICAgICBkaWZmZXJlbmNlID0gMDsKKyAgICBlbHNl
IHsKKyAgICAgICAgZGlmZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEw
MC4wZjsKKyAgICAgICAgZGlmZmVyZW5jZSA9IG1heChkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJv
dW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgKmRpZmZlcmVuY2VJbWFnZSA9IGRpZmZl
cmVuY2VJbWFnZUZyb21EaWZmZXJlbmNlQnVmZmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihkaWZmQnVmZmVyKSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisgICAgZnJlZShkaWZmQnVm
ZmVyKTsKKyAgICByZXR1cm4gZGlmZmVyZW5jZTsKK30KKwordm9pZCBwcmludEltYWdlKEdka1Bp
eGJ1ZiogaW1hZ2UpCit7CisgICAgY2hhciogYnVmZmVyOworICAgIGdzaXplIGJ1ZmZlclNpemU7
CisgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgaWYgKCFnZGtfcGl4YnVmX3NhdmVfdG9fYnVm
ZmVyKGltYWdlLCAmYnVmZmVyLCAmYnVmZmVyU2l6ZSwgInBuZyIsICZlcnJvciwgTlVMTCkpIHsK
KyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBi
YWlsIG91dCwgYXMgd2UgY2FuIHN0aWxsIHVzZSB0aGUgcGVyY2VudGFnZSBvdXRwdXQuCisgICAg
fQorCisgICAgZnByaW50ZihzdGRvdXQsICJDb250ZW50LUxlbmd0aDogJWx1XG4iLCBidWZmZXJT
aXplKTsKKyAgICBmd3JpdGUoYnVmZmVyLCAxLCBidWZmZXJTaXplLCBzdGRvdXQpOworfQorCit2
b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1Bp
eGJ1ZiogYWN0dWFsSW1hZ2UpCit7CisgICAgR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2UgPSAw
OworICAgIGZsb2F0IGRpZmZlcmVuY2UgPSBjYWxjdWxhdGVEaWZmZXJlbmNlKGJhc2VsaW5lSW1h
Z2UsIGFjdHVhbEltYWdlLCAmZGlmZmVyZW5jZUltYWdlKTsKKyAgICBpZiAoZGlmZmVyZW5jZSA+
IDAuMGYpIHsKKyAgICAgICAgaWYgKGRpZmZlcmVuY2VJbWFnZSkgeworICAgICAgICAgICAgcHJp
bnRJbWFnZShkaWZmZXJlbmNlSW1hZ2UpOworICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZGlm
ZmVyZW5jZUltYWdlKTsKKyAgICAgICAgfQorICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6
ICUwMS4yZiUlIGZhaWxlZFxuIiwgZGlmZmVyZW5jZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZnByaW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOwor
ICAgIH0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgICBnZGtf
aW5pdCgmYXJnYywgJmFyZ3YpOworCisgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgR09wdGlv
bkNvbnRleHQqIGNvbnRleHQgPSBnX29wdGlvbl9jb250ZXh0X25ldygiLSBjb21wYXJlIHR3byBp
bWFnZSBmaWxlcywgcHJpbnRpbmcgdGhlaXIgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGFuZCB0aGUg
ZGlmZmVyZW5jZSBpbWFnZSB0byBzdGRvdXQiKTsKKyAgICBnX29wdGlvbl9jb250ZXh0X2FkZF9t
YWluX2VudHJpZXMoY29udGV4dCwgY29tbWFuZExpbmVPcHRpb25FbnRyaWVzLCAwKTsKKyAgICBp
ZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UoY29udGV4dCwgJmFyZ2MsICZhcmd2LCAmZXJyb3Ip
KSB7CisgICAgICAgIGdfcHJpbnQoIk9wdGlvbiBwYXJzaW5nIGZhaWxlZDogJXNcbiIsIGVycm9y
LT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSA9IDA7CisgICAgR2RrUGl4
YnVmKiBiYXNlbGluZUltYWdlID0gMDsKKyAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKKyAgICB3aGls
ZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7CisgICAgICAgIC8vIENv
bnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28gdGhhdCBzdHJ0
b2sgZG9lc24ndCBwcm9kdWNlIGl0LgorICAgICAgICBjaGFyKiBuZXdMaW5lQ2hhcmFjdGVyID0g
c3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQorICAg
ICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisgICAgICAgIGlmICghc3RybmNt
cCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7CisgICAgICAgICAgICBjaGFyKiBj
b250ZXh0OworICAgICAgICAgICAgc3RydG9rX3IoYnVmZmVyLCAiICIsICZjb250ZXh0KTsKKyAg
ICAgICAgICAgIGxvbmcgaW1hZ2VTaXplID0gc3RydG9sKHN0cnRva19yKDAsICIgIiwgJmNvbnRl
eHQpLCAwLCAxMCk7CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPiAwICYmICFhY3R1YWxJ
bWFnZSkgeworICAgICAgICAgICAgICAgIGlmICghKGFjdHVhbEltYWdlID0gcmVhZFBpeGJ1ZkZy
b21TdGRpbihpbWFnZVNpemUpKSkgeworICAgICAgICAgICAgICAgICAgICBmcHV0cygiRXJyb3Is
IGNvdWxkIG5vdCByZWFkIGFjdHVhbCBpbWFnZS5cbiIsIHN0ZG91dCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaW1hZ2VTaXplID4gMCAmJiAhYmFzZWxpbmVJbWFnZSkgeworICAgICAgICAgICAgICAgIGlm
ICghKGJhc2VsaW5lSW1hZ2UgPSByZWFkUGl4YnVmRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZwdXRzKCJFcnJvciwgY291bGQgbm90IHJlYWQgYmFzZWxpbmUg
aW1hZ2UuXG4iLCBzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZwdXRz
KCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC4uXG4iLCBzdGRvdXQpOworICAg
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGFjdHVhbEltYWdlICYmIGJhc2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAgIHByaW50
SW1hZ2VEaWZmZXJlbmNlcyhiYXNlbGluZUltYWdlLCBhY3R1YWxJbWFnZSk7CisgICAgICAgICAg
ICBnX29iamVjdF91bnJlZihhY3R1YWxJbWFnZSk7CisgICAgICAgICAgICBnX29iamVjdF91bnJl
ZihiYXNlbGluZUltYWdlKTsKKyAgICAgICAgICAgIGFjdHVhbEltYWdlID0gMDsKKyAgICAgICAg
ICAgIGJhc2VsaW5lSW1hZ2UgPSAwOworICAgICAgICB9CisKKyAgICAgICAgZmZsdXNoKHN0ZG91
dCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9H
TlVtYWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQ3M2I1MTA2
YWE5NDU1YWI0YjlmYmQwYWE2OGU1ZmFjYzEwYjNkNGMuLjM1MTM5MmYyNjI3MWI5YWU5MWQ1MmM0
NjU0YjFjNTRiZDdkZThmYTYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDYgKzEsNyBAQAogbm9pbnN0
X1BST0dSQU1TICs9IFwKKwlQcm9ncmFtcy9EdW1wUmVuZGVyVHJlZSBcCiAJUHJvZ3JhbXMvR3Rr
TGF1bmNoZXIgXAotCVByb2dyYW1zL0R1bXBSZW5kZXJUcmVlCisJUHJvZ3JhbXMvSW1hZ2VEaWZm
CiAKICMgR3RrTGF1bmNoZXIKIFByb2dyYW1zX0d0a0xhdW5jaGVyX0NQUEZMQUdTID0gXApAQCAt
OTYsMTEgKzk3LDM1IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0xERkxBR1MgPSBcCiAJLW5v
LWZhc3QtaW5zdGFsbCBcCiAJLW5vLWluc3RhbGwKIAorIyBJbWFnZURpZmYKK1Byb2dyYW1zX0lt
YWdlRGlmZl9DUFBGTEFHUyA9ICQoZ2xvYmFsX2NwcGZsYWdzKQorCitQcm9ncmFtc19JbWFnZURp
ZmZfU09VUkNFUyA9IFwKKyAgIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURp
ZmYuY3BwCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9DWFhGTEFHUyA9IFwKKyAgICQoZ2xvYmFsX2N4
eGZsYWdzKSBcCisgICAkKGdsb2JhbF9jcHBmbGFncykgXAorICAgJChQcm9ncmFtc19JbWFnZURp
ZmZfQ0ZMQUdTKQorCitQcm9ncmFtc19JbWFnZURpZmZfQ0ZMQUdTID0gXAorICAgLWZuby1zdHJp
Y3QtYWxpYXNpbmcgXAorICAgJChnbG9iYWxfY2ZsYWdzKSBcCisgICAkKEdMT0JBTERFUFNfQ0ZM
QUdTKSBcCisgICAkKEdUS19DRkxBR1MpCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9MREFERCA9IFwK
KyAgICQoR1RLX0xJQlMpCisKK1Byb2dyYW1zX0ltYWdlRGlmZl9MREZMQUdTID0gXAorICAgLW5v
LWZhc3QtaW5zdGFsbCBcCisgICAtbm8taW5zdGFsbAorCiAjIGNsZWFuIHRhcmdldAogQ0xFQU5G
SUxFUyArPSBcCisJUHJvZ3JhbXMvRHVtcFJlbmRlclRyZWUgXAogCVByb2dyYW1zL0d0a0xhdW5j
aGVyIFwKLQlQcm9ncmFtcy9EdW1wUmVuZGVyVHJlZQotCisJUHJvZ3JhbXMvSW1hZ2VEaWZmCiAK
IGlmIFRBUkdFVF9YMTEKIAo=
</data>
<flag name="review"
          id="48509"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>