<?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>59817</bug_id>
          
          <creation_ts>2011-04-29 11:34:44 -0700</creation_ts>
          <short_desc>skia: replace path-drawing-of-glyphs with standard drawText</short_desc>
          <delta_ts>2011-07-13 13:02:30 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>64368</dup_id>
          
          <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="Mike Reed">reed</reporter>
          <assigned_to name="Mike Reed">reed</assigned_to>
          <cc>brettw</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>pkasting</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>395390</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-04-29 11:34:44 -0700</bug_when>
    <thetext>skia: replace path-drawing-of-glyphs with standard drawText</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395394</commentid>
    <comment_count>1</comment_count>
      <attachid>91711</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-04-29 11:35:55 -0700</bug_when>
    <thetext>Created attachment 91711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395397</commentid>
    <comment_count>2</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-04-29 11:38:50 -0700</bug_when>
    <thetext>Am (trying to) run DRT locally on my windows machine, to identify which images will require rebaselining (and therefore which will need to be added to test_expectations.txt temporarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395398</commentid>
    <comment_count>3</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-04-29 11:39:19 -0700</bug_when>
    <thetext>... therefore I would like to start the code-review, but will not request a commit until the test_expectations.txt is added to the CL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395400</commentid>
    <comment_count>4</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-29 11:53:43 -0700</bug_when>
    <thetext>Adding jamesr since he&apos;s done some work in the advances stuff recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395415</commentid>
    <comment_count>5</comment_count>
      <attachid>91711</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-29 12:05:32 -0700</bug_when>
    <thetext>Comment on attachment 91711
Patch

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

I haven&apos;t looked at the path cache code much before, so I defer to someone with greater experience here.

&gt; Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp:114
&gt; +    SkAutoSTArray&lt;kLocalGlyphMax, SkPoint&gt; posStorage(numGlyphs);

In WebKit, when the size is known up front, we usually use WTF::OwnArrayPtr.  If you think the stack allocation is a crucial feature, you could stick with SkAutoSTArray, but usually we try to use WTF types in WebKit code.

&gt; Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp:121
&gt; +        x += SkIntToScalar(advances[i]);

Kind of OT, but I&apos;m wondering if we want to convert these advances to float at some point.  I think they start at floats over in drawGlyphsWin() and are cast to ints before this call, and then appear to be cast back to SkScalar (float) here.  Of course, if this codepath is always used with ClearType-style LCD subpixel AA enabled, maybe it makes no difference since we want to snap to pixels anyway.  If not, we might be able to get subpixel positioning with that change.  jamesr might have some insight here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395948</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-01 10:42:09 -0700</bug_when>
    <thetext>I like deleting code... but what are the performance changes from this change?

Are the new image results better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396333</commentid>
    <comment_count>7</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-05-02 05:09:43 -0700</bug_when>
    <thetext>The general performance diff between paths and text is about 9x (faster for text). The quality will be slightly different, as we are now using GDI to rasterize the individual glyphs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397246</commentid>
    <comment_count>8</comment_count>
      <attachid>91711</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 12:07:24 -0700</bug_when>
    <thetext>Comment on attachment 91711
Patch

I&apos;m happy to rubber-stamp this.  If you need a more detailed review, you&apos;ll need to track down brettw or pkasting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397268</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-05-03 12:38:23 -0700</bug_when>
    <thetext>working on the test_expectations part now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436614</commentid>
    <comment_count>10</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-07-13 13:02:30 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 64368 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91711</attachid>
            <date>2011-04-29 11:35:55 -0700</date>
            <delta_ts>2011-05-03 12:07:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59817-20110429143552.patch</filename>
            <type>text/plain</type>
            <size>16199</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzQxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDQtMjkgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBza2lhOiByZXBsYWNlIHBhdGgtZHJhd2luZy1vZi1nbHlwaHMgd2l0aCBz
dGFuZGFyZCBkcmF3VGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTk4MTcKKworICAgICAgICBObyBuZXcgdGVzdHMuIGV4aXN0aW5nIHRlc3RzIGlu
IGZhc3QvIGFuZCBzdmcvIGV4ZXJjaXNlIHRoaXMuCisgICAgICAgIHdpbGwgcmVxdWlyZSByZWJh
c2VsaW5pbmcgaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIRk9OVDo6flJlZkNvdW50ZWRIRk9OVCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpza2lhRHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa2lhVGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oOgorCiAyMDExLTA0
LTI5ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFD
aHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDg1MzQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw2IEBAIEZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxh
dGZvcm1EYXRhKCkKIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIRk9OVDo6flJlZkNvdW50
ZWRIRk9OVCgpCiB7CiAgICAgaWYgKG1faGZvbnQgIT0gcmVpbnRlcnByZXRfY2FzdDxIRk9OVD4o
LTEpKSB7Ci0gICAgICAgIFNraWFXaW5PdXRsaW5lQ2FjaGU6OnJlbW92ZVBhdGhzRm9yRm9udCht
X2hmb250KTsKICAgICAgICAgRGVsZXRlT2JqZWN0KG1faGZvbnQpOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZv
bnRXaW4uY3BwCShyZXZpc2lvbiA4NTM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxODIgKzQ2
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQ2FjaGVkT3V0bGluZUtleSB7
Ci0gICAgQ2FjaGVkT3V0bGluZUtleSgpIDogZm9udCgwKSwgZ2x5cGgoMCksIHBhdGgoMCkge30K
LSAgICBDYWNoZWRPdXRsaW5lS2V5KEhGT05UIGYsIFdPUkQgZykgOiBmb250KGYpLCBnbHlwaChn
KSwgcGF0aCgwKSB7fQotCi0gICAgSEZPTlQgZm9udDsKLSAgICBXT1JEIGdseXBoOwotCi0gICAg
Ly8gVGhlIGxpZmV0aW1lIG9mIHRoaXMgcG9pbnRlciBpcyBtYW5hZ2VkIGV4dGVybmFsbHkgdG8g
dGhpcyBjbGFzcy4gQmUgc3VyZQotICAgIC8vIHRvIGNhbGwgRGVsZXRlT3V0bGluZSB0byByZW1v
dmUgaXRlbXMuCi0gICAgU2tQYXRoKiBwYXRoOwotfTsKLQotY29uc3QgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhY2hlZE91dGxpbmVLZXkmIGEsIGNvbnN0IENhY2hlZE91dGxpbmVLZXkmIGIpCi17
Ci0gICAgcmV0dXJuIGEuZm9udCA9PSBiLmZvbnQgJiYgYS5nbHlwaCA9PSBiLmdseXBoOwotfQot
Ci1zdHJ1Y3QgQ2FjaGVkT3V0bGluZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IENhY2hlZE91dGxpbmVLZXkmIGtleSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGtl
eUJ5dGVzOwotICAgICAgICBtZW1jcHkoJmtleUJ5dGVzLCAma2V5LmZvbnQsIHNpemVvZih1bnNp
Z25lZCkpOwotICAgICAgICByZXR1cm4ga2V5Qnl0ZXMgKyBrZXkuZ2x5cGg7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHVuc2lnbmVkIGVxdWFsKGNvbnN0IENhY2hlZE91dGxpbmVLZXkmIGEsIGNvbnN0
IENhY2hlZE91dGxpbmVLZXkmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYS5mb250ID09IGIu
Zm9udCAmJiBhLmdseXBoID09IGIuZ2x5cGg7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotLy8gVGhlIGds
b2JhbCBudW1iZXIgb2YgZ2x5cGggb3V0bGluZXMgd2UnbGwgY2FjaGUuCi1zdGF0aWMgY29uc3Qg
aW50IG91dGxpbmVDYWNoZVNpemUgPSAyNTY7Ci0KLXR5cGVkZWYgTGlzdEhhc2hTZXQ8Q2FjaGVk
T3V0bGluZUtleSwgb3V0bGluZUNhY2hlU2l6ZSsxLCBDYWNoZWRPdXRsaW5lS2V5SGFzaD4gT3V0
bGluZUNhY2hlOwotCi0vLyBGSVhNRTogQ29udmVydCBmcm9tIHN0YXRpYyBjb25zdHJ1Y3RvciB0
byBhY2Nlc3NvciBmdW5jdGlvbi4gV2ViQ29yZSB0cmllcyB0bwotLy8gYXZvaWQgZ2xvYmFsIGNv
bnN0cnVjdG9ycyB0byBzYXZlIG9uIHN0YXJ0LXVwIHRpbWUuCi1zdGF0aWMgT3V0bGluZUNhY2hl
IG91dGxpbmVDYWNoZTsKLQotc3RhdGljIFNrU2NhbGFyIEZJWEVEVG9Ta1NjYWxhcihGSVhFRCBm
aXhlZCkKLXsKLSAgICBTa0ZpeGVkIHNrRml4ZWQ7Ci0gICAgbWVtY3B5KCZza0ZpeGVkLCAmZml4
ZWQsIHNpemVvZihTa0ZpeGVkKSk7Ci0gICAgcmV0dXJuIFNrRml4ZWRUb1NjYWxhcihza0ZpeGVk
KTsKLX0KLQotLy8gUmVtb3ZlcyB0aGUgZ2l2ZW4ga2V5IGZyb20gdGhlIGNhY2hlZCBvdXRsaW5l
cywgYWxzbyBkZWxldGluZyB0aGUgcGF0aC4KLXN0YXRpYyB2b2lkIGRlbGV0ZU91dGxpbmUoT3V0
bGluZUNhY2hlOjppdGVyYXRvciBkZWxldGVNZSkKLXsKLSAgICBkZWxldGUgZGVsZXRlTWUtPnBh
dGg7Ci0gICAgb3V0bGluZUNhY2hlLnJlbW92ZShkZWxldGVNZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGFkZFBvbHlDdXJ2ZVRvUGF0aChjb25zdCBUVFBPTFlDVVJWRSogcG9seUN1cnZlLCBTa1BhdGgq
IHBhdGgpCi17Ci0gICAgc3dpdGNoIChwb2x5Q3VydmUtPndUeXBlKSB7Ci0gICAgY2FzZSBUVF9Q
UklNX0xJTkU6Ci0gICAgICAgIGZvciAoV09SRCBpID0gMDsgaSA8IHBvbHlDdXJ2ZS0+Y3BmeDsg
aSsrKSB7Ci0gICAgICAgICAgcGF0aC0+bGluZVRvKEZJWEVEVG9Ta1NjYWxhcihwb2x5Q3VydmUt
PmFwZnhbaV0ueCksIC1GSVhFRFRvU2tTY2FsYXIocG9seUN1cnZlLT5hcGZ4W2ldLnkpKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgVFRfUFJJTV9RU1BMSU5FOgotICAg
ICAgICAvLyBGSVhNRTogZG9lc24ndCB0aGlzIGR1cGxpY2F0ZSBwb2ludHMgaWYgd2UgZG8gdGhl
IGxvb3AgPiBvbmNlPwotICAgICAgICBmb3IgKFdPUkQgaSA9IDA7IGkgPCBwb2x5Q3VydmUtPmNw
ZnggLSAxOyBpKyspIHsKLSAgICAgICAgICAgIFNrU2NhbGFyIGJ4ID0gRklYRURUb1NrU2NhbGFy
KHBvbHlDdXJ2ZS0+YXBmeFtpXS54KTsKLSAgICAgICAgICAgIFNrU2NhbGFyIGJ5ID0gRklYRURU
b1NrU2NhbGFyKHBvbHlDdXJ2ZS0+YXBmeFtpXS55KTsKLQotICAgICAgICAgICAgU2tTY2FsYXIg
Y3ggPSBGSVhFRFRvU2tTY2FsYXIocG9seUN1cnZlLT5hcGZ4W2kgKyAxXS54KTsKLSAgICAgICAg
ICAgIFNrU2NhbGFyIGN5ID0gRklYRURUb1NrU2NhbGFyKHBvbHlDdXJ2ZS0+YXBmeFtpICsgMV0u
eSk7Ci0gICAgICAgICAgICBpZiAoaSA8IHBvbHlDdXJ2ZS0+Y3BmeCAtIDIpIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSdyZSBub3QgdGhlIGxhc3QgcG9pbnQsIGNvbXB1dGUgQy4KLSAgICAgICAg
ICAgICAgICBjeCA9IFNrU2NhbGFyQXZlKGJ4LCBjeCk7Ci0gICAgICAgICAgICAgICAgY3kgPSBT
a1NjYWxhckF2ZShieSwgY3kpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOZWVk
IHRvIGZsaXAgdGhlIHkgY29vcmRpbmF0ZXMgc2luY2UgdGhlIGZvbnQncyBjb29yZGluYXRlIHN5
c3RlbSBpcwotICAgICAgICAgICAgLy8gZmxpcHBlZCBmcm9tIG91cnMgdmVydGljYWxseS4KLSAg
ICAgICAgICAgIHBhdGgtPnF1YWRUbyhieCwgLWJ5LCBjeCwgLWN5KTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgVFRfUFJJTV9DU1BMSU5FOgotICAgICAgICAvLyBGSVhN
RQotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8vIFRoZSBzaXplIG9mIHRoZSBnbHlwaCBw
YXRoIGJ1ZmZlci4KLXN0YXRpYyBjb25zdCBpbnQgZ2x5cGhQYXRoQnVmZmVyU2l6ZSA9IDQwOTY7
Ci0KLS8vIEZpbGxzIHRoZSBnaXZlbiBTa1BhdGggd2l0aCB0aGUgb3V0bGluZSBmb3IgdGhlIGdp
dmVuIGdseXBoIGluZGV4LiBUaGUgZm9udAotLy8gY3VycmVudGx5IHNlbGVjdGVkIGludG8gdGhl
IGdpdmVuIERDIGlzIHVzZWQuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgotc3RhdGljIGJvb2wg
Z2V0UGF0aEZvckdseXBoKEhEQyBkYywgV09SRCBnbHlwaCwgU2tQYXRoKiBwYXRoKQotewotICAg
IGNoYXIgYnVmZmVyW2dseXBoUGF0aEJ1ZmZlclNpemVdOwotICAgIEdMWVBITUVUUklDUyBnbTsK
LSAgICBNQVQyIG1hdCA9IHt7MCwgMX0sIHswLCAwfSwgezAsIDB9LCB7MCwgMX19OyAgLy8gRWFj
aCBvbmUgaXMgKGZyYWN0LHZhbHVlKS4KLQotICAgIERXT1JEIHRvdGFsU2l6ZSA9IEdldEdseXBo
T3V0bGluZVcoZGMsIGdseXBoLCBHR09fR0xZUEhfSU5ERVggfCBHR09fTkFUSVZFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdtLCBnbHlwaFBhdGhCdWZmZXJTaXpl
LCBidWZmZXIsICZtYXQpOwotICAgIGlmICh0b3RhbFNpemUgPT0gR0RJX0VSUk9SKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBjaGFyKiBjdXJHbHlwaCA9IGJ1ZmZlcjsKLSAg
ICBjb25zdCBjaGFyKiBlbmRHbHlwaCA9ICZidWZmZXJbdG90YWxTaXplXTsKLSAgICB3aGlsZSAo
Y3VyR2x5cGggPCBlbmRHbHlwaCkgewotICAgICAgICBjb25zdCBUVFBPTFlHT05IRUFERVIqIHBv
bHlIZWFkZXIgPQotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUVFBPTFlHT05I
RUFERVIqPihjdXJHbHlwaCk7Ci0gICAgICAgIHBhdGgtPm1vdmVUbyhGSVhFRFRvU2tTY2FsYXIo
cG9seUhlYWRlci0+cGZ4U3RhcnQueCksCi0gICAgICAgICAgICAgICAgICAgICAtRklYRURUb1Nr
U2NhbGFyKHBvbHlIZWFkZXItPnBmeFN0YXJ0LnkpKTsKLQotICAgICAgICBjb25zdCBjaGFyKiBj
dXJQb2x5ID0gY3VyR2x5cGggKyBzaXplb2YoVFRQT0xZR09OSEVBREVSKTsKLSAgICAgICAgY29u
c3QgY2hhciogZW5kUG9seSA9IGN1ckdseXBoICsgcG9seUhlYWRlci0+Y2I7Ci0gICAgICAgIHdo
aWxlIChjdXJQb2x5IDwgZW5kUG9seSkgewotICAgICAgICAgICAgY29uc3QgVFRQT0xZQ1VSVkUq
IHBvbHlDdXJ2ZSA9Ci0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUVFBP
TFlDVVJWRSo+KGN1clBvbHkpOwotICAgICAgICAgICAgYWRkUG9seUN1cnZlVG9QYXRoKHBvbHlD
dXJ2ZSwgcGF0aCk7Ci0gICAgICAgICAgICBjdXJQb2x5ICs9IHNpemVvZihXT1JEKSAqIDIgKyBz
aXplb2YoUE9JTlRGWCkgKiBwb2x5Q3VydmUtPmNwZng7Ci0gICAgICAgIH0KLSAgICAgICAgcGF0
aC0+Y2xvc2UoKTsKLSAgICAgICAgY3VyR2x5cGggKz0gcG9seUhlYWRlci0+Y2I7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgYSBTa1BhdGggY29ycmVzcG9uZGlu
ZyB0byB0aGUgZ2l2ZSBnbHlwaCBpbiB0aGUgZ2l2ZW4gZm9udC4gVGhlIGZvbnQKLS8vIHNob3Vs
ZCBiZSBzZWxlY3RlZCBpbnRvIHRoZSBnaXZlbiBEQy4gVGhlIHJldHVybmVkIHBhdGggaXMgb3du
ZWQgYnkgdGhlCi0vLyBoYXNodGFibGUuIFJldHVybnMgMCBvbiBlcnJvci4KLWNvbnN0IFNrUGF0
aCogU2tpYVdpbk91dGxpbmVDYWNoZTo6bG9va3VwT3JDcmVhdGVQYXRoRm9yR2x5cGgoSERDIGhk
YywgSEZPTlQgZm9udCwgV09SRCBnbHlwaCkKLXsKLSAgICBDYWNoZWRPdXRsaW5lS2V5IGtleShm
b250LCBnbHlwaCk7Ci0gICAgT3V0bGluZUNhY2hlOjppdGVyYXRvciBmb3VuZCA9IG91dGxpbmVD
YWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGZvdW5kICE9IG91dGxpbmVDYWNoZS5lbmQoKSkgewot
ICAgICAgICAvLyBLZWVwIGluIE1SVSBvcmRlciBieSByZW1vdmluZyAmIHJlaW5zZXJ0aW5nIHRo
ZSB2YWx1ZS4KLSAgICAgICAga2V5ID0gKmZvdW5kOwotICAgICAgICBvdXRsaW5lQ2FjaGUucmVt
b3ZlKGZvdW5kKTsKLSAgICAgICAgb3V0bGluZUNhY2hlLmFkZChrZXkpOwotICAgICAgICByZXR1
cm4ga2V5LnBhdGg7Ci0gICAgfQotCi0gICAga2V5LnBhdGggPSBuZXcgU2tQYXRoOwotICAgIGlm
ICghZ2V0UGF0aEZvckdseXBoKGhkYywgZ2x5cGgsIGtleS5wYXRoKSkKLSAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKG91dGxpbmVDYWNoZS5zaXplKCkgPiBvdXRsaW5lQ2FjaGVTaXplKQotICAg
ICAgICAvLyBUaGUgY2FjaGUgaXMgdG9vIGJpZywgZmluZCB0aGUgb2xkZXN0IHZhbHVlIChmaXJz
dCBpbiB0aGUgbGlzdCkuCi0gICAgICAgIGRlbGV0ZU91dGxpbmUob3V0bGluZUNhY2hlLmJlZ2lu
KCkpOwotCi0gICAgb3V0bGluZUNhY2hlLmFkZChrZXkpOwotICAgIHJldHVybiBrZXkucGF0aDsK
LX0KLQotCi12b2lkIFNraWFXaW5PdXRsaW5lQ2FjaGU6OnJlbW92ZVBhdGhzRm9yRm9udChIRk9O
VCBoZm9udCkKLXsKLSAgICAvLyBMaXN0SGFzaFNldCBpc24ndCB0aGUgZ3JlYXRlc3Qgc3RydWN0
dXJlIGZvciBkZWxldGluZyBzdHVmZiBvdXQgb2YsIGJ1dAotICAgIC8vIHJlbW92aW5nIGVudHJp
ZXMgd2lsbCBiZSByZWxhdGl2ZWx5IHJhcmUgKHdlIGRvbid0IHJlbW92ZSBmb250cyBtdWNoLCBu
b3IKLSAgICAvLyBkbyB3ZSBkcmF3IG91dCBvd24gZ2x5cGhzIHVzaW5nIHRoZXNlIHJvdXRpbmVz
IG11Y2ggZWl0aGVyKS4KLSAgICAvLwotICAgIC8vIFdlIGtlZXAgYSBsaXN0IG9mIGFsbCBnbHlw
aHMgd2UncmUgcmVtb3Zpbmcgd2hpY2ggd2UgZG8gaW4gYSBzZXBhcmF0ZQotICAgIC8vIHBhc3Mu
Ci0gICAgVmVjdG9yPENhY2hlZE91dGxpbmVLZXk+IG91dGxpbmVzVG9EZWxldGU7Ci0gICAgZm9y
IChPdXRsaW5lQ2FjaGU6Oml0ZXJhdG9yIGkgPSBvdXRsaW5lQ2FjaGUuYmVnaW4oKTsKLSAgICAg
ICAgIGkgIT0gb3V0bGluZUNhY2hlLmVuZCgpOyArK2kpCi0gICAgICAgIG91dGxpbmVzVG9EZWxl
dGUuYXBwZW5kKCppKTsKLQotICAgIGZvciAoVmVjdG9yPENhY2hlZE91dGxpbmVLZXk+OjppdGVy
YXRvciBpID0gb3V0bGluZXNUb0RlbGV0ZS5iZWdpbigpOwotICAgICAgICAgaSAhPSBvdXRsaW5l
c1RvRGVsZXRlLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZU91dGxpbmUob3V0bGluZUNhY2hl
LmZpbmQoKmkpKTsKLX0KLQogYm9vbCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3Jh
cGhpY3NDb250ZXh0ICpjb250ZXh0KQogewogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CkBA
IC0yNzQsMTEgKzk4LDcgQEAgYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0
UwogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBEcmF3cyB0aGUgZ2l2ZW4gdGV4dCBzdHJpbmcg
dXNpbmcgc2tpYS4gIE5vdGUgdGhhdCBncmFkaWVudCBvcgotLy8gcGF0dGVybiBtYXkgYmUgTlVM
TCwgaW4gd2hpY2ggY2FzZSBhIHNvbGlkIGNvbG91ciBpcyB1c2VkLgotc3RhdGljIGJvb2wgc2tp
YURyYXdUZXh0KEhGT05UIGhmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgIEhEQyBkYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNv
bnRleHQsCitzdGF0aWMgdm9pZCBza2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBTa1BhaW50KiBwYWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXT1JEKiBnbHlwaHMsCkBAIC0yODYsNjQgKzEwNiwyMSBAQCBzdGF0aWMgYm9vbCBza2lhRHJh
d1RleHQoSEZPTlQgaGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR09GRlNF
VCogb2Zmc2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzKQogewot
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwotICAgIGlm
ICghcGxhdGZvcm1Db250ZXh0LT5pc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkpIHsKLSAg
ICAgICAgU2tBU1NFUlQoc2l6ZW9mKFdPUkQpID09IHNpemVvZih1aW50MTZfdCkpOwotCi0gICAg
ICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIDY0IGdseXBocyBvbiB0aGUgc3RhY2suIElmIG51bUds
eXBocyBpcyBsYXJnZXIsIHRoZSBhcnJheQotICAgICAgICAvLyB3aWxsIGR5bmFtaWNhbGx5IGFs
bG9jYXRlIGl0IHNwYWNlIGZvciBudW1HbHlwaCBnbHlwaHMuCi0gICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qga0xvY2FsR2x5cGhNYXggPSA2NDsKLSAgICAgICAgU2tBdXRvU1RBcnJheTxrTG9j
YWxHbHlwaE1heCwgU2tQb2ludD4gcG9zU3RvcmFnZShudW1HbHlwaHMpOwotICAgICAgICBTa1Bv
aW50KiBwb3MgPSBwb3NTdG9yYWdlLmdldCgpOwotICAgICAgICBTa1NjYWxhciB4ID0gcG9pbnQu
Zlg7Ci0gICAgICAgIFNrU2NhbGFyIHkgPSBwb2ludC5mWTsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICAgICAgcG9zW2ldLnNldCh4ICsgKG9m
ZnNldHMgPyBvZmZzZXRzW2ldLmR1IDogMCksCi0gICAgICAgICAgICAgICAgICAgICAgIHkgKyAo
b2Zmc2V0cyA/IG9mZnNldHNbaV0uZHYgOiAwKSk7Ci0gICAgICAgICAgICB4ICs9IFNrSW50VG9T
Y2FsYXIoYWR2YW5jZXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1Rl
eHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsICpwYWludCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgeCA9IHBvaW50LmZYLCB5ID0gcG9pbnQuZlk7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICAg
ICAgY29uc3QgU2tQYXRoKiBwYXRoID0gU2tpYVdpbk91dGxpbmVDYWNoZTo6bG9va3VwT3JDcmVh
dGVQYXRoRm9yR2x5cGgoZGMsIGhmb250LCBnbHlwaHNbaV0pOwotICAgICAgICAgICAgaWYgKCFw
YXRoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgZmxvYXQg
b2Zmc2V0WCA9IDAuMGYsIG9mZnNldFkgPSAwLjBmOwotICAgICAgICAgICAgaWYgKG9mZnNldHMg
JiYgKG9mZnNldHNbaV0uZHUgfHwgb2Zmc2V0c1tpXS5kdikpIHsKLSAgICAgICAgICAgICAgICBv
ZmZzZXRYID0gb2Zmc2V0c1tpXS5kdTsKLSAgICAgICAgICAgICAgICBvZmZzZXRZID0gb2Zmc2V0
c1tpXS5kdjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU2tQYXRoIG5ld1BhdGg7Ci0g
ICAgICAgICAgICBuZXdQYXRoLmFkZFBhdGgoKnBhdGgsIHggKyBvZmZzZXRYLCB5ICsgb2Zmc2V0
WSk7Ci0gICAgICAgICAgICBjYW52YXMtPmRyYXdQYXRoKG5ld1BhdGgsICpwYWludCk7CisgICAg
U2tBU1NFUlQoc2l6ZW9mKFdPUkQpID09IHNpemVvZih1aW50MTZfdCkpOwogCi0gICAgICAgICAg
ICB4ICs9IGFkdmFuY2VzW2ldOwotICAgICAgICB9CisgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3Ig
NjQgZ2x5cGhzIG9uIHRoZSBzdGFjay4gSWYgbnVtR2x5cGhzIGlzIGxhcmdlciwgdGhlIGFycmF5
CisgICAgLy8gd2lsbCBkeW5hbWljYWxseSBhbGxvY2F0ZSBpdCBzcGFjZSBmb3IgbnVtR2x5cGgg
Z2x5cGhzLgorICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga0xvY2FsR2x5cGhNYXggPSAxMjg7Cisg
ICAgU2tBdXRvU1RBcnJheTxrTG9jYWxHbHlwaE1heCwgU2tQb2ludD4gcG9zU3RvcmFnZShudW1H
bHlwaHMpOworICAgIFNrUG9pbnQqIHBvcyA9IHBvc1N0b3JhZ2UuZ2V0KCk7CisgICAgU2tTY2Fs
YXIgeCA9IHBvaW50LmZYOworICAgIFNrU2NhbGFyIHkgPSBwb2ludC5mWTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIHBvc1tpXS5zZXQoeCArIChv
ZmZzZXRzID8gb2Zmc2V0c1tpXS5kdSA6IDApLAorICAgICAgICAgICAgICAgICAgIHkgKyAob2Zm
c2V0cyA/IG9mZnNldHNbaV0uZHYgOiAwKSk7CisgICAgICAgIHggKz0gU2tJbnRUb1NjYWxhcihh
ZHZhbmNlc1tpXSk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBz
ZXR1cFBhaW50Rm9yRm9udChIRk9OVCBoZm9udCwgU2tQYWludCogcGFpbnQpCi17Ci0gICAgLy8g
IEZJWE1FOgotICAgIC8vICBNdWNoIG9mIHRoaXMgbG9naWMgY291bGQgYWxzbyBoYXBwZW4gaW4K
LSAgICAvLyAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSBhbmQgYmUg
Y2FjaGVkLAotICAgIC8vICBhbGxvd2luZyB1cyB0byBhdm9pZCB0YWxraW5nIHRvIEdESSBhdCB0
aGlzIHBvaW50LgotICAgIC8vCi0gICAgTE9HRk9OVCBpbmZvOwotICAgIEdldE9iamVjdChoZm9u
dCwgc2l6ZW9mKGluZm8pLCAmaW5mbyk7Ci0gICAgaW50IHNpemUgPSBpbmZvLmxmSGVpZ2h0Owot
ICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgc2l6ZSA9IC1zaXplOyAvLyBXZSBkb24ndCBsZXQg
R0RJIGRwaS1zY2FsZSB1cyAoc2VlIFNrRm9udEhvc3Rfd2luLmNwcCkuCi0gICAgcGFpbnQtPnNl
dFRleHRTaXplKFNrSW50VG9TY2FsYXIoc2l6ZSkpOwotCi0gICAgU2tUeXBlZmFjZSogZmFjZSA9
IFNrQ3JlYXRlVHlwZWZhY2VGcm9tTE9HRk9OVChpbmZvKTsKLSAgICBwYWludC0+c2V0VHlwZWZh
Y2UoZmFjZSk7Ci0gICAgU2tTYWZlVW5yZWYoZmFjZSk7CisgICAgY2FudmFzLT5kcmF3UG9zVGV4
dChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHBvcywgKnBhaW50KTsKIH0K
IAogYm9vbCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKQEAgLTM1Nywy
MyArMTM0LDM2IEBAIGJvb2wgcGFpbnRTa2lhVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnQKICAg
ICBIREMgZGMgPSBHZXREQygwKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3Qo
ZGMsIGhmb250KTsKIAorICAgIC8vICBGSVhNRToKKyAgICAvLyAgV2hlbiB3ZSB1c2Ugc2tpYSBm
b3IgYWxsIHRleHQsIHRleHRTaXplIGFuZCB0eXBlZmFjZSBzaG91bGQgYmUgY29tcHV0ZWQKKyAg
ICAvLyAgaW4gRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSBhbmQgYmUg
Y2FjaGVkLAorICAgIC8vICBhbGxvd2luZyB1cyB0byBhdm9pZCB0YWxraW5nIHRvIEdESSBhdCB0
aGlzIHBvaW50LgorICAgIC8vCisgICAgTE9HRk9OVCBpbmZvOworICAgIEdldE9iamVjdChoZm9u
dCwgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CisgICAgU2tTY2FsYXIgdGV4dFNpemUgPSBTa0ludFRv
U2NhbGFyKGluZm8ubGZIZWlnaHQpOworICAgIGlmICh0ZXh0U2l6ZSA8IDApCisgICAgICAgIHRl
eHRTaXplID0gLXRleHRTaXplOyAvLyBXZSBkb24ndCBsZXQgR0RJIGRwaS1zY2FsZSB1cyAoc2Vl
IFNrRm9udEhvc3Rfd2luLmNwcCkuCisKKyAgICBTa1R5cGVmYWNlKiB0eXBlZmFjZSA9IFNrQ3Jl
YXRlVHlwZWZhY2VGcm9tTE9HRk9OVChpbmZvKTsKKyAgICBTa0F1dG9VbnJlZiBhdXIodHlwZWZh
Y2UpOworCiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29u
dGV4dC0+Y2FudmFzKCk7CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBwbGF0
Zm9ybUNvbnRleHQtPmdldFRleHREcmF3aW5nTW9kZSgpOwogCiAgICAgLy8gRmlsbGluZyAoaWYg
bmVjZXNzYXJ5KS4gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuCiAgICAgU2tQYWludCBwYWludDsK
ICAgICBwbGF0Zm9ybUNvbnRleHQtPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAg
cGFpbnQuc2V0RmxhZ3MoU2tQYWludDo6a0FudGlBbGlhc19GbGFnKTsKLSAgICBpZiAoIXBsYXRm
b3JtQ29udGV4dC0+aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpKSB7Ci0gICAgICAgIHBh
aW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotICAg
ICAgICBzZXR1cFBhaW50Rm9yRm9udChoZm9udCwgJnBhaW50KTsKLSAgICB9CisgICAgcGFpbnQu
c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgcGFp
bnQuc2V0VGV4dFNpemUodGV4dFNpemUpOworICAgIHBhaW50LnNldFR5cGVmYWNlKHR5cGVmYWNl
KTsKKwogICAgIGJvb2wgZGlkRmlsbCA9IGZhbHNlOwogCiAgICAgaWYgKCh0ZXh0TW9kZSAmIFRl
eHRNb2RlRmlsbCkgJiYgKFNrQ29sb3JHZXRBKHBhaW50LmdldENvbG9yKCkpIHx8IHBhaW50Lmdl
dExvb3BlcigpKSkgewotICAgICAgICBpZiAoIXNraWFEcmF3VGV4dChoZm9udCwgZGMsIHBsYXRm
b3JtQ29udGV4dCwgKm9yaWdpbiwgJnBhaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAm
Z2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sICZvZmZzZXRzWzBdLCBudW1HbHlwaHMpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBza2lhRHJhd1RleHQoY2FudmFzLCAqb3JpZ2lu
LCAmcGFpbnQsICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgJm9mZnNldHNbMF0sIG51bUdseXBo
cyk7CiAgICAgICAgIGRpZEZpbGwgPSB0cnVlOwogICAgIH0KIApAQCAtMzg1LDEwICsxNzUsOSBA
QCBib29sIHBhaW50U2tpYVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250CiAgICAgICAgIHBhaW50
LnJlc2V0KCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+c2V0dXBQYWludEZvclN0cm9raW5n
KCZwYWludCwgMCwgMCk7CiAgICAgICAgIHBhaW50LnNldEZsYWdzKFNrUGFpbnQ6OmtBbnRpQWxp
YXNfRmxhZyk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1Db250ZXh0LT5pc05hdGl2ZUZvbnRSZW5k
ZXJpbmdBbGxvd2VkKCkpIHsKLSAgICAgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1Bh
aW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotICAgICAgICAgICAgc2V0dXBQYWludEZvckZv
bnQoaGZvbnQsICZwYWludCk7Ci0gICAgICAgIH0KKyAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgICAgIHBhaW50LnNldFRl
eHRTaXplKHRleHRTaXplKTsKKyAgICAgICAgcGFpbnQuc2V0VHlwZWZhY2UodHlwZWZhY2UpOwog
CiAgICAgICAgIGlmIChkaWRGaWxsKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHNo
YWRvdyBhbmQgd2UgZmlsbGVkIGFib3ZlLCB0aGVyZSB3aWxsIGFscmVhZHkgYmUKQEAgLTQwMywx
NCArMTkyLDExIEBAIGJvb2wgcGFpbnRTa2lhVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnQKICAg
ICAgICAgICAgIHBhaW50LnNldExvb3BlcigwKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgh
c2tpYURyYXdUZXh0KGhmb250LCBkYywgcGxhdGZvcm1Db250ZXh0LCAqb3JpZ2luLCAmcGFpbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgJm9m
ZnNldHNbMF0sIG51bUdseXBocykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHNraWFEcmF3VGV4dChjYW52YXMsICpvcmlnaW4sICZwYWludCwgJmdseXBoc1swXSwgJmFkdmFu
Y2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsKICAgICB9CiAKICAgICBTZWxlY3RPYmpl
Y3QoZGMsIG9sZEZvbnQpOwogICAgIFJlbGVhc2VEQygwLCBkYyk7Ci0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lh
Rm9udFdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvU2tpYUZvbnRXaW4uaAkocmV2aXNpb24gODUzNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDYgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8dXNwMTAuaD4KIAot
Y2xhc3MgU2tQYXRoOwogY2xhc3MgU2tQb2ludDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDIsMTggKzQxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYTsKIAotLy8gRklYTUU6IFJlbmFtZSBmaWxlIHRv
IFNraWFXaW5PdXRsaW5lQ2FjaGUKLWNsYXNzIFNraWFXaW5PdXRsaW5lQ2FjaGUgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdCBTa1BhdGgqIGxvb2t1cE9yQ3JlYXRlUGF0aEZvckdseXBoKEhE
QywgSEZPTlQsIFdPUkQpOwotICAgIC8vIFJlbW92ZXMgYW55IGNhY2hlZCBnbHlwaHMgZnJvbSB0
aGUgb3V0bGluZSBjYWNoZSBjb3JyZXNwb25kaW5nIHRvIHRoZQotICAgIC8vIGdpdmVuIGZvbnQg
aGFuZGxlLgotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBhdGhzRm9yRm9udChIRk9OVCk7Ci0KLXBy
aXZhdGU6Ci0gICAgU2tpYVdpbk91dGxpbmVDYWNoZSgpOwotfTsKLQogLy8gVGhlIGZ1bmN0aW9u
cyBiZWxvdyBhcmUgdXNlZCBmb3IgbW9yZSBjb21wbGV4IGZvbnQgZHJhd2luZyAoZWZmZWN0cyBz
dWNoIGFzCiAvLyBzdHJva2luZyBhbmQgbW9yZSBjb21wbGV4IHRyYW5zZm9ybXMpIHRoYW4gV2lu
ZG93cyBzdXBwb3J0cyBkaXJlY3RseS4gIFNpbmNlIAogLy8gV2luZG93cyBkcmF3aW5nIGlzIGZh
c3RlciB5b3Ugc2hvdWxkIHVzZSB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcgZmlyc3QgdG8g
CkBAIC02MSwxMSArNDgsNiBAQCBwcml2YXRlOgogLy8gTm90ZSB0aGF0IHRoZSB0ZXh0IHdpbGwg
bG9vayBkaWZmZXJlbnQgKG5vIENsZWFyVHlwZSkgc28gdGhpcyBzaG91bGQgb25seSBiZQogLy8g
dXNlZCB3aGVuIG5lY2Vzc2FyeS4KIC8vCi0vLyBXaGVuIHlvdSBjYWxsIGEgU2tpYSogdGV4dCBk
cmF3aW5nIGZ1bmN0aW9uLCB2YXJpb3VzIGdseXBoIG91dGxpbmVzIHdpbGwgYmUKLS8vIGNhY2hl
ZC4gQXMgYSByZXN1bHQsIHlvdSBzaG91bGQgY2FsbCBTa2lhV2luT3V0bGluZUNhY2hlOjpyZW1v
dmVQYXRoc0ZvckZvbnQKLS8vIHdoZW4gdGhlIGZvbnQgaXMgZGVzdHJveWVkIHNvIHRoYXQgdGhl
IGNhY2hlIGRvZXMgbm90IG91dGxpdmUgdGhlIGZvbnQgKHNpbmNlCi0vLyB0aGUgSEZPTlRzIGFy
ZSByZWN5Y2xlZCkuCi0vLwogLy8gUmVtZW1iZXIgdGhhdCBTa2lhJ3MgdGV4dCBkcmF3aW5nIG9y
aWdpbiBpcyB0aGUgYmFzZWxpbmUsIGxpa2UgV2ViS2l0LCBub3QKIC8vIHRoZSB0b3AsIGxpa2Ug
V2luZG93cy4KIAo=
</data>
<flag name="review"
          id="84582"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>