<?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>102603</bug_id>
          
          <creation_ts>2012-11-17 17:32:31 -0800</creation_ts>
          <short_desc>Enable proper kerning and ligatures support for HarfBuzz-ng complex text path</short_desc>
          <delta_ts>2015-08-01 10:48:22 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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>100794</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eli Fidler">efidler</reporter>
          <assigned_to name="Eli Fidler">efidler</assigned_to>
          <cc>bashi</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mitz</cc>
    
    <cc>mrobinson</cc>
    
    <cc>roger_fong</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770040</commentid>
    <comment_count>0</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-17 17:32:31 -0800</bug_when>
    <thetext>Currently, the HarfBuzz-ng complex text path has a lot of bugs and missing functionality in kerning and ligature support. Here are some examples:

The HarfBuzz-ng complex text path automatically enables the OpenType GPOS &quot;kern&quot; feature. This means that the width of a run depends on whether we got sent to the complex path (which might have been because of a combining character). See Dan Bernstein&apos;s comment at https://bugs.webkit.org/show_bug.cgi?id=101009#c31 . I believe this is the issue blocking 100794. I think this is also causing bad results for 

TrueType &quot;kern&quot; table kerning is not supported at all.

-webkit-font-kerning does basically nothing.

-webkit-font-variant-ligatures does basically nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770041</commentid>
    <comment_count>1</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-17 17:36:08 -0800</bug_when>
    <thetext>That should have been &quot;...bad results for lots of layout tests&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770042</commentid>
    <comment_count>2</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-17 17:36:17 -0800</bug_when>
    <thetext>I have a patch to fix this on the BlackBerry port. We use HarfBuzz-ng, but with a backend that isn&apos;t upstreamed yet (HarfBuzzNGFaceIType.cpp). 

I&apos;ll need someone to help implement TrueType kerning support for the other HarfBuzzNGFace* implementations (Cairo, CoreText, Skia).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770050</commentid>
    <comment_count>3</comment_count>
      <attachid>174837</attachid>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-17 18:20:24 -0800</bug_when>
    <thetext>Created attachment 174837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770051</commentid>
    <comment_count>4</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-17 18:28:18 -0800</bug_when>
    <thetext>for Chromium folk, https://code.google.com/p/chromium/issues/detail?id=41990 also looks related</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771665</commentid>
    <comment_count>5</comment_count>
      <attachid>174837</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-11-20 01:31:34 -0800</bug_when>
    <thetext>Comment on attachment 174837
Patch

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

Looks interesting, thanks for the patch.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceCairo.cpp:124
&gt; +    // FIXME: get the TrueType &quot;kern&quot; table kerning adjustment

Could you show the Blackberry implementation of this function that you have, just to have some kind of template of what is needed here? 
Looking at harfbuzzGetGlyphExtents for example, you can see how we get from hbFont to cairo_scaled_font_t, and if needed, we can get to the underlying freetype font from there to get this kerning information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771792</commentid>
    <comment_count>6</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-20 06:02:28 -0800</bug_when>
    <thetext>static hb_position_t harfbuzzGetGlyphHorizontalKerning(hb_font_t *hbFont, void *fontData, hb_codepoint_t leftGlyph, hb_codepoint_t rightGlyph, void *userData)
{
    FS_STATE* font = reinterpret_cast&lt;FontPlatformData*&gt;(fontData)-&gt;font();

    FS_FIXED dx = 0, dy;
    if (FS_get_kerning(font, leftGlyph, rightGlyph, &amp;dx, &amp;dy) != SUCCESS)
        return dx;

    return dx;
}

static hb_position_t harfbuzzGetGlyphVerticalKerning(hb_font_t *hbFont, void *fontData, hb_codepoint_t topGlyph, hb_codepoint_t bottomGlyph, void *userData)
{
    FS_STATE* font = reinterpret_cast&lt;FontPlatformData*&gt;(fontData)-&gt;font();

    FS_FIXED dx, dy = 0;
    if (FS_get_kerning(font, topGlyph, bottomGlyph, &amp;dx, &amp;dy) != SUCCESS)
        return dy;

    return dy;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771803</commentid>
    <comment_count>7</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-11-20 06:16:42 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; static hb_position_t harfbuzzGetGlyphHorizontalKerning(hb_font_t *hbFont, void *fontData, hb_codepoint_t leftGlyph, hb_codepoint_t rightGlyph, void *userData)
&gt; [...]

Alright, I think these values can be retrieved quite easily using http://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT_Get_Kerning - I can look into it, but can&apos;t say when I get to it, yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773758</commentid>
    <comment_count>8</comment_count>
      <attachid>175630</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-11-22 02:18:26 -0800</bug_when>
    <thetext>Created attachment 175630
Backend Implementation for Cairo/Freetype

Eli, you may use this one on top of your patch. Attribution in the ChangeLog would be appreciated.
I quickly tried with font-kerning.html and some other tests in fast/text and it does something that looks expected. 
How can we verify the results more precisely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774622</commentid>
    <comment_count>9</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2012-11-23 09:41:24 -0800</bug_when>
    <thetext>Sorry Dominik, I haven&apos;t had a chance to try out your patch yet. I&apos;d expect that with out patches combined, you&apos;d see basic kerning working (like fast/text/font-kerning.html), GPOS kerning not enabled automatically (i.e. only when text-rendering:optimizelegibility or some explicit feature enable is specified),
and ligatures working. 

We don&apos;t really have a featureful font accessible to all DRT ports, so it&apos;s hard to layout test this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775241</commentid>
    <comment_count>10</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-11-26 01:20:35 -0800</bug_when>
    <thetext>(In reply to comment #9)

&gt; We don&apos;t really have a featureful font accessible to all DRT ports, so it&apos;s hard to layout test this.

Is there an open source one with a permissive open source license? For EFL &amp; GTK, a font pack is downloaded. We can add any fonts with a compatible license to that font pack and test with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775679</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-26 11:00:45 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; 
&gt; &gt; We don&apos;t really have a featureful font accessible to all DRT ports, so it&apos;s hard to layout test this.
&gt; 
&gt; Is there an open source one with a permissive open source license? For EFL &amp; GTK, a font pack is downloaded. We can add any fonts with a compatible license to that font pack and test with it.

In the past, bashi has created custom fonts to test features using shareware or open source font creation tools.  I&apos;m not sure how hard this is to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777402</commentid>
    <comment_count>12</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-11-27 17:18:55 -0800</bug_when>
    <thetext>Hi Eli, Dominik,

Thank you for the patch. Skia doesn&apos;t provide an API to retrieve kerning information so harfbuzzNGFaceSkia can&apos;t support this at this time (Maybe Skia doesn&apos;t want to add such API). Please just leave TODOs for harfbuzzNGFaceSkia.
 
(In reply to comment #11)
&gt; In the past, bashi has created custom fonts to test features using shareware or open source font creation tools.  I&apos;m not sure how hard this is to do.

I used fontforge, but creating a font isn&apos;t a trivial task.

I think we can use arial font. I confirmed that Mac&apos;s arial and Ubuntu&apos;s arial have kern table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777665</commentid>
    <comment_count>13</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-11-28 02:33:04 -0800</bug_when>
    <thetext>(In reply to comment #12)

&gt; Thank you for the patch. Skia doesn&apos;t provide an API to retrieve kerning information so harfbuzzNGFaceSkia can&apos;t support this at this time (Maybe Skia doesn&apos;t want to add such API). Please just leave TODOs for harfbuzzNGFaceSkia.

I don&apos;t know about this area, just out of curiosity, is there a way to access the underlying &quot;raw&quot; Freetype handle through Skia? In that case, we could retrieve this info..?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778610</commentid>
    <comment_count>14</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-11-28 19:24:02 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I don&apos;t know about this area, just out of curiosity, is there a way to access the underlying &quot;raw&quot; Freetype handle through Skia? In that case, we could retrieve this info..?

No. Skia doesn&apos;t expose FT_Face. I asked Skia guys to expose it, but they didn&apos;t want to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781587</commentid>
    <comment_count>15</comment_count>
      <attachid>174837</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-03 10:18:50 -0800</bug_when>
    <thetext>Comment on attachment 174837
Patch

Marking r- to kick out of the EWS queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814203</commentid>
    <comment_count>16</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-23 07:47:43 -0800</bug_when>
    <thetext>Eli, are you still working on this? If it&apos;s blocked for Skia right now - how about landing parts of this patch and enabling it on EFL &amp; GTK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815799</commentid>
    <comment_count>17</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2013-01-24 13:51:37 -0800</bug_when>
    <thetext>Sorry, I haven&apos;t had a chance to get back to this upstream. Hopefully I can split it out soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816520</commentid>
    <comment_count>18</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-01-25 05:39:04 -0800</bug_when>
    <thetext>Let me know if you could use any help with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832484</commentid>
    <comment_count>19</comment_count>
      <attachid>188214</attachid>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2013-02-13 16:21:34 -0800</bug_when>
    <thetext>Created attachment 188214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832486</commentid>
    <comment_count>20</comment_count>
    <who name="Eli Fidler">efidler</who>
    <bug_when>2013-02-13 16:24:07 -0800</bug_when>
    <thetext>ok, this patch is cleaned up and merges the Cairo backend. It&apos;s not ready for review yet, since fast/text/ipa-tone-letters.html is failing and I can&apos;t figure out why. I&apos;m worried that width calculation of complex text runs might be broken for all HarfBuzzNG ports (i.e. not calculated in the same way as simple text, or other complex text ports), but I haven&apos;t managed to track it down yet.

My EFL build seems flaky, so maybe I&apos;m doing something wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833933</commentid>
    <comment_count>21</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-02-15 05:48:50 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; ok, this patch is cleaned up and merges the Cairo backend. It&apos;s not ready for review yet, since fast/text/ipa-tone-letters.html is failing and I can&apos;t figure out why. I&apos;m worried that width calculation of complex text runs might be broken for all HarfBuzzNG ports (i.e. not calculated in the same way as simple text, or other complex text ports), but I haven&apos;t managed to track it down yet.

Do you have any other symptoms except this one failing? Any other pointers what to look for? I can add it to my list and try to take a look as well.

&gt; My EFL build seems flaky, so maybe I&apos;m doing something wrong.

Send me an email if you like - I can help getting it built. We use Ubuntu 12.04, and a command line like:
./Tools/Scripts/build-webkit --efl --cmakeargs=&quot;-DSHARED_CORE=ON&quot; --debug
should work fine on such a system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843008</commentid>
    <comment_count>22</comment_count>
      <attachid>188214</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 06:35:51 -0800</bug_when>
    <thetext>Comment on attachment 188214
Patch

Attachment 188214 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/16775835

New failing tests:
svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorStart.svg
html5lib/generated/run-tests16-data.html
svg/W3C-I18N/text-anchor-dirRTL-anchorMiddle.svg
svg/W3C-I18N/text-anchor-dirLTR-anchorEnd.svg
http/tests/cache/subresource-failover-to-network.html
svg/W3C-I18N/text-anchor-dirLTR-anchorMiddle.svg
svg/W3C-I18N/text-anchor-dirNone-anchorEnd.svg
svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorEnd.svg
svg/W3C-I18N/text-anchor-dirRTL-anchorStart.svg
inspector/audits/audits-panel-functional.html
fast/loader/text-document-wrapping.html
svg/W3C-I18N/text-anchor-no-markup.svg
svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorMiddle.svg
fast/layers/no-clipping-overflow-hidden-added-after-transition.html
svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorStart.svg
fast/forms/datalist/update-range-with-datalist.html
svg/W3C-I18N/text-anchor-dirNone-anchorMiddle.svg
svg/W3C-I18N/text-dirLTR-ubOverride.svg
svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorEnd.svg
svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorMiddle.svg
svg/W3C-I18N/tspan-dirLTR-ubOverride-in-default-context.svg
fast/layers/no-clipping-overflow-hidden-added-after-transform.html
fast/forms/month/month-appearance-l10n.html
svg/W3C-I18N/tspan-dirLTR-ubOverride-in-ltr-context.svg
svg/W3C-I18N/text-anchor-dirLTR-anchorStart.svg
fast/loader/javascript-url-in-object.html
svg/W3C-I18N/text-anchor-dirNone-anchorStart.svg
svg/W3C-I18N/text-anchor-dirRTL-anchorEnd.svg
fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html
fast/text/ipa-tone-letters.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174837</attachid>
            <date>2012-11-17 18:20:24 -0800</date>
            <delta_ts>2013-02-13 16:21:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102603-20121117211817.patch</filename>
            <type>text/plain</type>
            <size>17800</size>
            <attacher name="Eli Fidler">efidler</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTcwMWFjNmZhN2Y2NTQ5
ODcyMGVjOGIxMjFkZmFlY2M3MDgyZWFkZC4uMWM2Mjc0MTNhNWNhYjZlZjRkMWU0M2QzMDRkMTU2
ZDExNDVjYzE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTExLTE3ICBFbGkg
RmlkbGVyICA8ZWZpZGxlckByaW0uY29tPgorCisgICAgICAgIEVuYWJsZSBwcm9wZXIga2Vybmlu
ZyBhbmQgbGlnYXR1cmVzIHN1cHBvcnQgZm9yIEhhcmZCdXp6LW5nIGNvbXBsZXggdGV4dCBwYXRo
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNjAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEhh
cmZCdXp6LW5nIGNvbXBsZXggdGV4dCBwYXRoIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyB0aGUgT3Bl
blR5cGUKKyAgICAgICAgR1BPUyAia2VybiIgZmVhdHVyZS4gVGhpcyBtZWFucyB0aGF0IHRoZSB3
aWR0aCBvZiBhIHJ1biBkZXBlbmRzIG9uCisgICAgICAgIHdoZXRoZXIgd2UgZ290IHNlbnQgdG8g
dGhlIGNvbXBsZXggcGF0aCAod2hpY2ggbWlnaHQgaGF2ZSBiZWVuIGJlY2F1c2UKKyAgICAgICAg
b2YgYSBjb21iaW5pbmcgY2hhcmFjdGVyKS4gU2VlIERhbiBCZXJuc3RlaW4ncyBjb21tZW50IGF0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEwMDkj
YzMxCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgVHJ1ZVR5cGUg
Imtlcm4iIHRhYmxlIGtlcm5pbmcsCisgICAgICAgIC13ZWJraXQtZm9udC1rZXJuaW5nIGFuZCAt
d2Via2l0LWZvbnQtdmFyaWFudC1saWdhdHVyZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ek5HRmFjZS5oOgorICAgICAgICAoSGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxLZXJuaW5nKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpHZXRHbHlwaFZlcnRpY2FsS2Vybmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDb3JlVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRHbHlwaEhvcml6b250YWxLZXJuaW5nKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0R2x5cGhWZXJ0aWNhbEtlcm5pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcyk6CisgICAgICAg
IChXZWJDb3JlOjpIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsS2VybmluZyk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5cGhWZXJ0aWNhbEtlcm5p
bmcpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpTa2lhR2V0Rm9udEZ1bmNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGb250KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5z
KToKKwogMjAxMi0xMS0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIGFuIGludGVnZXIgaWRlbnRpZmllciBmaWVsZCB0byBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUJhc2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaAppbmRleCAzNjBkYWY5Y2YxMjIw
Zjk3Yjg2NzZjYTlmMmU3MzQ4NTM2ZTI4YjkwLi4wNzgyODc4OGExYjRmYjZmYTQ4ZjNkNDFjZTA1
NzhjNDljMWQ4NjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmgKQEAgLTMxLDYgKzMxLDgg
QEAKICNpZm5kZWYgSGFyZkJ1enpOR0ZhY2VfaAogI2RlZmluZSBIYXJmQnV6ek5HRmFjZV9oCiAK
KyNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCisKICNpbmNsdWRlIDxoYi5oPgogCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUzLDcgKzU1LDcgQEAgcHVibGljOgogICAgIH0K
ICAgICB+SGFyZkJ1enpOR0ZhY2UoKTsKIAotICAgIGhiX2ZvbnRfdCogY3JlYXRlRm9udCgpOwor
ICAgIGhiX2ZvbnRfdCogY3JlYXRlRm9udChjb25zdCBUeXBlc2V0dGluZ0ZlYXR1cmVzJik7CiAK
ICAgICB2b2lkIHNldFNjcmlwdEZvclZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb24oaGJfYnVmZmVy
X3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNhaXJvLmNwcAppbmRleCAyZGIz
ZDI3ODA0MWVhYTU4MWJkOTIwN2VhMzhkOGRmMmJmMjhkOWRmLi4xODU5YzMzMTc1NWFhOTEzNTBk
Zjg2YTRkMmYyMmZkNjg0Y2EwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNh
aXJvLmNwcApAQCAtMTE5LDYgKzExOSwxOCBAQCBzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmYnV6
ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdAogICAg
IHJldHVybiBhZHZhbmNlOwogfQogCitzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmYnV6ekdldEds
eXBoSG9yaXpvbnRhbEtlcm5pbmcoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBo
Yl9jb2RlcG9pbnRfdCBsZWZ0R2x5cGgsIGhiX2NvZGVwb2ludF90IHJpZ2h0R2x5cGgsIHZvaWQq
IHVzZXJEYXRhKQoreworICAgIC8vIEZJWE1FOiBnZXQgdGhlIFRydWVUeXBlICJrZXJuIiB0YWJs
ZSBrZXJuaW5nIGFkanVzdG1lbnQKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGhiX3Bvc2l0
aW9uX3QgaGFyZmJ1enpHZXRHbHlwaFZlcnRpY2FsS2VybmluZyhoYl9mb250X3QqIGhiRm9udCwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHRvcEdseXBoLCBoYl9jb2RlcG9pbnRfdCBi
b3R0b21HbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgLy8gRklYTUU6IGdldCB0aGUgVHJ1
ZVR5cGUgImtlcm4iIHRhYmxlIGtlcm5pbmcgYWRqdXN0bWVudAorICAgIHJldHVybiAwOworfQor
CiBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2Zv
bnRfdCosIHZvaWQqLCBoYl9jb2RlcG9pbnRfdCwgaGJfcG9zaXRpb25fdCosIGhiX3Bvc2l0aW9u
X3QqLCB2b2lkKikKIHsKICAgICAvLyBKdXN0IHJldHVybiB0cnVlLCBmb2xsb3dpbmcgdGhlIHdh
eSB0aGF0IEhhcmZidXp6LUZyZWVUeXBlCkBAIC0xMzYsOSArMTQ4LDI0IEBAIHN0YXRpYyBoYl9i
b29sX3QgaGFyZmJ1enpHZXRHbHlwaEV4dGVudHMoaGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEs
IGhiX2NvZGVwb2luCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBoYl9mb250X2Z1bmNz
X3QqIGhhcmZidXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKCkKK3N0YXRpYyBoYl9mb250X2Z1bmNz
X3QqIGhhcmZidXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKGNvbnN0IFR5cGVzZXR0aW5nRmVhdHVy
ZXMmIGZlYXR1cmVzKQogewogICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q2Fp
cm9Gb250RnVuY3MgPSAwOworICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q2Fp
cm9Gb250RnVuY3NXaXRoS2VybmluZyA9IDA7IC8vIGluY2x1ZGVzIFRydWVUeXBlICgia2VybiIg
dGFibGUpIGtlcm5pbmcKKworICAgIGlmIChmZWF0dXJlcyAmIEtlcm5pbmcpIHsKKyAgICAgICAg
aWYgKCFoYXJmYnV6ekNhaXJvRm9udEZ1bmNzV2l0aEtlcm5pbmcpIHsKKyAgICAgICAgICAgIGhh
cmZidXp6Q2Fpcm9Gb250RnVuY3NXaXRoS2VybmluZyA9IGhiX2ZvbnRfZnVuY3NfY3JlYXRlKCk7
CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9mdW5jKGhhcmZidXp6Q2Fpcm9G
b250RnVuY3NXaXRoS2VybmluZywgaGFyZmJ1enpHZXRHbHlwaCwgMCwgMCk7CisgICAgICAgICAg
ICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2FkdmFuY2VfZnVuYyhoYXJmYnV6ekNhaXJvRm9u
dEZ1bmNzV2l0aEtlcm5pbmcsIGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwg
MCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2tlcm5pbmdfZnVuYyho
YXJmYnV6ekNhaXJvRm9udEZ1bmNzV2l0aEtlcm5pbmcsIGhhcmZidXp6R2V0R2x5cGhIb3Jpem9u
dGFsS2VybmluZywgMCwgMCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9o
X29yaWdpbl9mdW5jKGhhcmZidXp6Q2Fpcm9Gb250RnVuY3NXaXRoS2VybmluZywgaGFyZmJ1enpH
ZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDApOworICAgICAgICAgICAgaGJfZm9udF9mdW5j
c19zZXRfZ2x5cGhfdl9rZXJuaW5nX2Z1bmMoaGFyZmJ1enpDYWlyb0ZvbnRGdW5jc1dpdGhLZXJu
aW5nLCBoYXJmYnV6ekdldEdseXBoVmVydGljYWxLZXJuaW5nLCAwLCAwKTsKKyAgICAgICAgICAg
IGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJmYnV6ekNhaXJvRm9udEZ1
bmNzV2l0aEtlcm5pbmcsIGhhcmZidXp6R2V0R2x5cGhFeHRlbnRzLCAwLCAwKTsKKyAgICAgICAg
ICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZmJ1enpDYWlyb0ZvbnRGdW5jc1dp
dGhLZXJuaW5nKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaGFyZmJ1enpDYWlyb0ZvbnRG
dW5jc1dpdGhLZXJuaW5nOworICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBm
dW5jdGlvbnMgd2hpY2ggd2UgY2FuJ3Qgc3VwcG9ydC4KICAgICAvLyBIYXJmYnV6eiB3aWxsIHVz
ZSB0aGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaWYgdGhleSBhcmVuJ3Qgc2V0LgpAQCAtMTg5
LDEwICsyMTYsMTAgQEAgaGJfZmFjZV90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRmFjZSgpCiAg
ICAgcmV0dXJuIGZhY2U7CiB9CiAKLWhiX2ZvbnRfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZv
bnQoKQoraGJfZm9udF90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRm9udChjb25zdCBUeXBlc2V0
dGluZ0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKICAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250
X2NyZWF0ZShtX2ZhY2UpOwotICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6Q2Fp
cm9UZXh0R2V0Rm9udEZ1bmNzKCksIG1fcGxhdGZvcm1EYXRhLCAwKTsKKyAgICBoYl9mb250X3Nl
dF9mdW5jcyhmb250LCBoYXJmYnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcyhmZWF0dXJlcyksIG1f
cGxhdGZvcm1EYXRhLCAwKTsKICAgICBjb25zdCBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEt
PnNpemUoKTsKICAgICBpZiAoZmxvb3JmKHNpemUpID09IHNpemUpCiAgICAgICAgIGhiX2ZvbnRf
c2V0X3BwZW0oZm9udCwgc2l6ZSwgc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZUNvcmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdG
YWNlQ29yZVRleHQuY3BwCmluZGV4IGU0YzY1Y2Q0MWUwZWMzMDQ0ZWI1OTliNWQ1NGUxNjc4NDU2
YzE0OTIuLjAxMjQzODNiZDVhOTg0NDZkODk2NDUyNWVlZWU4NzM0NjkwOGU3MzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
TkdGYWNlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ29yZVRleHQuY3BwCkBAIC02Niw2ICs2NiwxOCBA
QCBzdGF0aWMgaGJfcG9zaXRpb25fdCBnZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRf
dCogaGJGb250LCB2b2lkKiBmb250RGF0YQogICAgIHJldHVybiBmbG9hdFRvSGFyZkJ1enpQb3Np
dGlvbihhZHZhbmNlKTsKIH0KIAorc3RhdGljIGhiX3Bvc2l0aW9uX3QgZ2V0R2x5cGhIb3Jpem9u
dGFsS2VybmluZyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2lu
dF90IGxlZnRHbHlwaCwgaGJfY29kZXBvaW50X3QgcmlnaHRHbHlwaCwgdm9pZCogdXNlckRhdGEp
Cit7CisgICAgLy8gRklYTUU6IGdldCB0aGUgVHJ1ZVR5cGUgImtlcm4iIHRhYmxlIGtlcm5pbmcg
YWRqdXN0bWVudAorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaGJfcG9zaXRpb25fdCBnZXRH
bHlwaFZlcnRpY2FsS2VybmluZyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhi
X2NvZGVwb2ludF90IHRvcEdseXBoLCBoYl9jb2RlcG9pbnRfdCBib3R0b21HbHlwaCwgdm9pZCog
dXNlckRhdGEpCit7CisgICAgLy8gRklYTUU6IGdldCB0aGUgVHJ1ZVR5cGUgImtlcm4iIHRhYmxl
IGtlcm5pbmcgYWRqdXN0bWVudAorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaGJfYm9vbF90
IGdldEdseXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERh
dGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90
KiB5LCB2b2lkKiB1c2VyRGF0YSkKIHsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg1LDkgKzk3LDI0
IEBAIHN0YXRpYyBoYl9ib29sX3QgZ2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2
b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MoKQorc3RhdGlj
IGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcyhjb25zdCBUeXBl
c2V0dGluZ0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKICAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190
KiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzID0gMDsKKyAgICBzdGF0aWMgaGJfZm9udF9mdW5j
c190KiBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzV2l0aEtlcm5pbmcgPSAwOyAvLyBpbmNsdWRl
cyBUcnVlVHlwZSAoImtlcm4iIHRhYmxlKSBrZXJuaW5nCisKKyAgICBpZiAoZmVhdHVyZXMgJiBL
ZXJuaW5nKSB7CisgICAgICAgIGlmICghaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jc1dpdGhLZXJu
aW5nKSB7CisgICAgICAgICAgICBoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzV2l0aEtlcm5pbmcg
PSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOworICAgICAgICAgICAgaGJfZm9udF9mdW5jc19zZXRf
Z2x5cGhfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzV2l0aEtlcm5pbmcsIGdldEdseXBo
LCAwLCAwKTsKKyAgICAgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9m
dW5jKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3NXaXRoS2VybmluZywgZ2V0R2x5cGhIb3Jpem9u
dGFsQWR2YW5jZSwgMCwgMCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9o
X2tlcm5pbmdfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzV2l0aEtlcm5pbmcsIGdldEds
eXBoSG9yaXpvbnRhbEtlcm5pbmcsIDAsIDApOworICAgICAgICAgICAgaGJfZm9udF9mdW5jc19z
ZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNzV2l0aEtlcm5p
bmcsIGdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7CisgICAgICAgICAgICBoYl9mb250
X2Z1bmNzX3NldF9nbHlwaF92X2tlcm5pbmdfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9udEZ1bmNz
V2l0aEtlcm5pbmcsIGdldEdseXBoVmVydGljYWxLZXJuaW5nLCAwLCAwKTsKKyAgICAgICAgICAg
IGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVudHNfZnVuYyhoYXJmYnV6ekNvcmVUZXh0Rm9u
dEZ1bmNzV2l0aEtlcm5pbmcsIGdldEdseXBoRXh0ZW50cywgMCwgMCk7CisgICAgICAgICAgICBo
Yl9mb250X2Z1bmNzX21ha2VfaW1tdXRhYmxlKGhhcmZidXp6Q29yZVRleHRGb250RnVuY3NXaXRo
S2VybmluZyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhhcmZidXp6Q29yZVRleHRGb250
RnVuY3NXaXRoS2VybmluZzsKKyAgICB9CiAKICAgICBpZiAoIWhhcmZidXp6Q29yZVRleHRGb250
RnVuY3MpIHsKICAgICAgICAgaGFyZmJ1enpDb3JlVGV4dEZvbnRGdW5jcyA9IGhiX2ZvbnRfZnVu
Y3NfY3JlYXRlKCk7CkBAIC0xMjksMTAgKzE1NiwxMCBAQCBoYl9mYWNlX3QqIEhhcmZCdXp6TkdG
YWNlOjpjcmVhdGVGYWNlKCkKICAgICByZXR1cm4gZmFjZTsKIH0KIAotaGJfZm9udF90KiBIYXJm
QnV6ek5HRmFjZTo6Y3JlYXRlRm9udCgpCitoYl9mb250X3QqIEhhcmZCdXp6TkdGYWNlOjpjcmVh
dGVGb250KGNvbnN0IFR5cGVzZXR0aW5nRmVhdHVyZXMmIGZlYXR1cmVzKQogewogICAgIGhiX2Zv
bnRfdCogZm9udCA9IGhiX2ZvbnRfY3JlYXRlKG1fZmFjZSk7Ci0gICAgaGJfZm9udF9zZXRfZnVu
Y3MoZm9udCwgaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcygpLCBtX3BsYXRmb3JtRGF0YSwg
MCk7CisgICAgaGJfZm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpDb3JlVGV4dEdldEZvbnRG
dW5jcyhmZWF0dXJlcyksIG1fcGxhdGZvcm1EYXRhLCAwKTsKICAgICBjb25zdCBmbG9hdCBzaXpl
ID0gbV9wbGF0Zm9ybURhdGEtPm1fc2l6ZTsKICAgICBoYl9mb250X3NldF9wcGVtKGZvbnQsIHNp
emUsIHNpemUpOwogICAgIGNvbnN0IGludCBzY2FsZSA9ICgxIDw8IDE2KSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcAppbmRleCA1
ZDM5ZWZhNzM3MTNiOGRhNWM1ZmRkNjM1ZWFlMDg1ZjcyOTk2ZTYyLi45OTgxNDhiOTVkMTBkNThl
OWM4N2YxNTQ1NWI1ZGMzYWU5MGQ1ZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
U2tpYS5jcHAKQEAgLTExMCw2ICsxMTAsMTggQEAgc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1
enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKgogICAg
IHJldHVybiBhZHZhbmNlOwogfQogCitzdGF0aWMgaGJfcG9zaXRpb25fdCBoYXJmYnV6ekdldEds
eXBoSG9yaXpvbnRhbEtlcm5pbmcoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBo
Yl9jb2RlcG9pbnRfdCBsZWZ0R2x5cGgsIGhiX2NvZGVwb2ludF90IHJpZ2h0R2x5cGgsIHZvaWQq
IHVzZXJEYXRhKQoreworICAgIC8vIEZJWE1FOiBnZXQgdGhlIFRydWVUeXBlICJrZXJuIiB0YWJs
ZSBrZXJuaW5nIGFkanVzdG1lbnQKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGhiX3Bvc2l0
aW9uX3QgaGFyZmJ1enpHZXRHbHlwaFZlcnRpY2FsS2VybmluZyhoYl9mb250X3QqIGhiRm9udCwg
dm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHRvcEdseXBoLCBoYl9jb2RlcG9pbnRfdCBi
b3R0b21HbHlwaCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgLy8gRklYTUU6IGdldCB0aGUgVHJ1
ZVR5cGUgImtlcm4iIHRhYmxlIGtlcm5pbmcgYWRqdXN0bWVudAorICAgIHJldHVybiAwOworfQor
CiBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2Zv
bnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bv
c2l0aW9uX3QqIHgsIGhiX3Bvc2l0aW9uX3QqIHksIHZvaWQqIHVzZXJEYXRhKQogewogICAgIC8v
IEp1c3QgcmV0dXJuIHRydWUsIGZvbGxvd2luZyB0aGUgd2F5IHRoYXQgSGFyZmJ1enotRnJlZVR5
cGUKQEAgLTEyNSw5ICsxMzcsMjQgQEAgc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBo
RXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2MKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZmJ1enpTa2lhR2V0Rm9u
dEZ1bmNzKCkKK3N0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6U2tpYUdldEZvbnRGdW5j
cyhjb25zdCBUeXBlc2V0dGluZ0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKICAgICBzdGF0aWMgaGJf
Zm9udF9mdW5jc190KiBoYXJmYnV6elNraWFGb250RnVuY3MgPSAwOworICAgIHN0YXRpYyBoYl9m
b250X2Z1bmNzX3QqIGhhcmZidXp6U2tpYUZvbnRGdW5jc1dpdGhLZXJuaW5nID0gMDsgLy8gaW5j
bHVkZXMgVHJ1ZVR5cGUgKCJrZXJuIiB0YWJsZSkga2VybmluZworCisgICAgaWYgKGZlYXR1cmVz
ICYgS2VybmluZykgeworICAgICAgICBpZiAoIWhhcmZidXp6U2tpYUZvbnRGdW5jc1dpdGhLZXJu
aW5nKSB7CisgICAgICAgICAgICBoYXJmYnV6elNraWFGb250RnVuY3NXaXRoS2VybmluZyA9IGhi
X2ZvbnRfZnVuY3NfY3JlYXRlKCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlw
aF9mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5jc1dpdGhLZXJuaW5nLCBoYXJmYnV6ekdldEdseXBo
LCAwLCAwKTsKKyAgICAgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9m
dW5jKGhhcmZidXp6U2tpYUZvbnRGdW5jc1dpdGhLZXJuaW5nLCBoYXJmYnV6ekdldEdseXBoSG9y
aXpvbnRhbEFkdmFuY2UsIDAsIDApOworICAgICAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9rZXJuaW5nX2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzV2l0aEtlcm5pbmcsIGhhcmZi
dXp6R2V0R2x5cGhIb3Jpem9udGFsS2VybmluZywgMCwgMCk7CisgICAgICAgICAgICBoYl9mb250
X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5jc1dpdGhL
ZXJuaW5nLCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbiwgMCwgMCk7CisgICAgICAg
ICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF92X2tlcm5pbmdfZnVuYyhoYXJmYnV6elNraWFG
b250RnVuY3NXaXRoS2VybmluZywgaGFyZmJ1enpHZXRHbHlwaFZlcnRpY2FsS2VybmluZywgMCwg
MCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9leHRlbnRzX2Z1bmMoaGFy
ZmJ1enpTa2lhRm9udEZ1bmNzV2l0aEtlcm5pbmcsIGhhcmZidXp6R2V0R2x5cGhFeHRlbnRzLCAw
LCAwKTsKKyAgICAgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11dGFibGUoaGFyZmJ1enpT
a2lhRm9udEZ1bmNzV2l0aEtlcm5pbmcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBoYXJm
YnV6elNraWFGb250RnVuY3NXaXRoS2VybmluZzsKKyAgICB9CiAKICAgICAvLyBXZSBkb24ndCBz
ZXQgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIHdlIGNhbid0IHN1cHBvcnQuCiAgICAgLy8gSGFy
ZmJ1enogd2lsbCB1c2UgdGhlIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlmIHRoZXkgYXJlbid0
IHNldC4KQEAgLTE3NiwxMiArMjAzLDEyIEBAIGhiX2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNy
ZWF0ZUZhY2UoKQogICAgIHJldHVybiBmYWNlOwogfQogCi1oYl9mb250X3QqIEhhcmZCdXp6TkdG
YWNlOjpjcmVhdGVGb250KCkKK2hiX2ZvbnRfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZvbnQo
Y29uc3QgVHlwZXNldHRpbmdGZWF0dXJlcyYgZmVhdHVyZXMpCiB7CiAgICAgSGFyZkJ1enpGb250
RGF0YSogaGJGb250RGF0YSA9IG5ldyBIYXJmQnV6ekZvbnREYXRhKG1fZ2x5cGhDYWNoZUZvckZh
Y2VDYWNoZUVudHJ5KTsKICAgICBtX3BsYXRmb3JtRGF0YS0+c2V0dXBQYWludCgmaGJGb250RGF0
YS0+bV9wYWludCk7CiAgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUobV9mYWNl
KTsKLSAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6elNraWFHZXRGb250RnVuY3Mo
KSwgaGJGb250RGF0YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOworICAgIGhiX2ZvbnRfc2V0
X2Z1bmNzKGZvbnQsIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcyhmZWF0dXJlcyksIGhiRm9udERh
dGEsIGRlc3Ryb3lIYXJmQnV6ekZvbnREYXRhKTsKICAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9y
bURhdGEtPnNpemUoKTsKICAgICBpbnQgc2NhbGUgPSBTa2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0
aW9uKHNpemUpOwogICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxlLCBzY2FsZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKaW5kZXggOWQyMzg1ZmQ4MWNiMmU4MmQ1ZWFkOTRl
ZTg0MDIxOGEyMjE2ZTE3Mi4uNzlhYjRlYjRhZDc1MzBiNmZjODJlOWFjM2NjODZlMDE5ZjVkNWVl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
bmcvSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ0LDYg
KzQ1LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgaGJfdGFnX3QgY2xpZ1Rh
ZyA9IEhCX1RBRygnYycsICdsJywgJ2knLCAnZycpOworY29uc3QgaGJfdGFnX3QgZGxpZ1RhZyA9
IEhCX1RBRygnZCcsICdsJywgJ2knLCAnZycpOworY29uc3QgaGJfdGFnX3QgaGxpZ1RhZyA9IEhC
X1RBRygnaCcsICdsJywgJ2knLCAnZycpOworY29uc3QgaGJfdGFnX3Qga2VyblRhZyA9IEhCX1RB
RygnaycsICdlJywgJ3InLCAnbicpOworY29uc3QgaGJfdGFnX3QgbGlnYVRhZyA9IEhCX1RBRygn
bCcsICdpJywgJ2cnLCAnYScpOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgSGFyZkJ1
enpTY29wZWRQdHIgewogcHVibGljOgpAQCAtMjA5LDYgKzIxNiw3MSBAQCB2b2lkIEhhcmZCdXp6
U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQogICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZCh2cnQy
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgaGJfZmVhdHVyZV90IGtlcm4gPSB7IGtlcm5UYWcsIDEs
IDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkgfTsKKyAgICBzdGF0aWMgaGJfZmVhdHVyZV90
IG5vS2VybiA9IHsga2VyblRhZywgMCwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSB9Owor
ICAgIGlmICghKG1fZm9udC0+dHlwZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykpCisgICAg
ICAgIG1fZmVhdHVyZXMuYXBwZW5kKG5vS2Vybik7CisgICAgZWxzZSB7CisgICAgICAgIHN3aXRj
aCAoZGVzY3JpcHRpb24ua2VybmluZygpKSB7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpOb3JtYWxLZXJuaW5nOgorICAgICAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQoa2Vybik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vbmVLZXJu
aW5nOgorICAgICAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQobm9LZXJuKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6QXV0b0tlcm5pbmc6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBoYl9mZWF0dXJl
X3QgbGlnYSA9IHsgbGlnYVRhZywgMSwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSB9Owor
ICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qgbm9MaWdhID0geyBsaWdhVGFnLCAwLCAwLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCBjbGlnID0geyBj
bGlnVGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgc3RhdGljIGhi
X2ZlYXR1cmVfdCBub0NsaWcgPSB7IGNsaWdUYWcsIDAsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PigtMSkgfTsKKyAgICBzdGF0aWMgaGJfZmVhdHVyZV90IGRsaWcgPSB7IGRsaWdUYWcsIDEsIDAs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkgfTsKKyAgICBzdGF0aWMgaGJfZmVhdHVyZV90IG5v
RGxpZyA9IHsgZGxpZ1RhZywgMCwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSB9OworICAg
IHN0YXRpYyBoYl9mZWF0dXJlX3QgaGxpZyA9IHsgaGxpZ1RhZywgMSwgMCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KC0xKSB9OworICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qgbm9IbGlnID0geyBobGln
VGFnLCAwLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgaWYgKCEobV9mb250
LT50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBMaWdhdHVyZXMpKSB7CisgICAgICAgIG1fZmVhdHVy
ZXMuYXBwZW5kKG5vTGlnYSk7CisgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKG5vQ2xpZyk7Cisg
ICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKG5vRGxpZyk7CisgICAgICAgIG1fZmVhdHVyZXMuYXBw
ZW5kKG5vSGxpZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5j
b21tb25MaWdhdHVyZXNTdGF0ZSgpKSB7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpE
aXNhYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQobm9M
aWdhKTsKKyAgICAgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKG5vQ2xpZyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNT
dGF0ZToKKyAgICAgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKGxpZ2EpOworICAgICAgICAgICAg
bV9mZWF0dXJlcy5hcHBlbmQoY2xpZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5kaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RGlzYWJs
ZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKG5vRGxpZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkVuYWJs
ZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKGRsaWcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3
aXRjaCAoZGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpIHsKKyAgICAgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAg
ICBtX2ZlYXR1cmVzLmFwcGVuZChub0hsaWcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAg
ICBtX2ZlYXR1cmVzLmFwcGVuZChobGlnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MqIHNldHRp
bmdzID0gZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzQ5LDcgKzQyMSw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6
OnNoYXBlSGFyZkJ1enpSdW5zKGJvb2wgc2hvdWxkU2V0RGlyZWN0aW9uKQogICAgICAgICBpZiAo
bV9mb250LT5mb250RGVzY3JpcHRpb24oKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAg
ICAgICAgICAgZmFjZS0+c2V0U2NyaXB0Rm9yVmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbihoYXJm
YnV6ekJ1ZmZlci5nZXQoKSk7CiAKLSAgICAgICAgSGFyZkJ1enpTY29wZWRQdHI8aGJfZm9udF90
PiBoYXJmYnV6ekZvbnQoZmFjZS0+Y3JlYXRlRm9udCgpLCBoYl9mb250X2Rlc3Ryb3kpOworICAg
ICAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZidXp6Rm9udChmYWNlLT5jcmVh
dGVGb250KG1fZm9udC0+dHlwZXNldHRpbmdGZWF0dXJlcygpKSwgaGJfZm9udF9kZXN0cm95KTsK
IAogICAgICAgICBoYl9zaGFwZShoYXJmYnV6ekZvbnQuZ2V0KCksIGhhcmZidXp6QnVmZmVyLmdl
dCgpLCBtX2ZlYXR1cmVzLmlzRW1wdHkoKSA/IDAgOiBtX2ZlYXR1cmVzLmRhdGEoKSwgbV9mZWF0
dXJlcy5zaXplKCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175630</attachid>
            <date>2012-11-22 02:18:26 -0800</date>
            <delta_ts>2013-02-13 16:21:29 -0800</delta_ts>
            <desc>Backend Implementation for Cairo/Freetype</desc>
            <filename>CairoFreetype_GetKerning.patch</filename>
            <type>text/plain</type>
            <size>2903</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">Y29tbWl0IGNiOWJmMjUxNjc2NDNlZWRmNDZlMTU2MTk3YjFkM2NiNmZkZjhkZGUKQXV0aG9yOiBE
b21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm90dHNjaGVzQGludGVsLmNvbT4KRGF0ZTogICBU
aHUgTm92IDIyIDEyOjExOjU4IDIwMTIgKzAyMDAKCiAgICBDYWlyby9GcmVldHlwZSBJbXBsZW1l
bnRhdGlvbgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6TkdGYWNlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAKaW5kZXggMTg1
OWMzMy4uNTA3Mjc3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VDYWlyby5jcHAK
QEAgLTcxLDYgKzcxLDExIEBAIHN0YXRpYyBoYl9wb3NpdGlvbl90IGRvdWJsZVRvSGFyZkJ1enpQ
b3NpdGlvbihkb3VibGUgdmFsdWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGhiX3Bvc2l0aW9u
X3Q+KHZhbHVlICogKDEgPDwgMTYpKTsKIH0KIAorc3RhdGljIGhiX3Bvc2l0aW9uX3QgZnRQb3NU
b0hhcmZCdXp6UG9zaXRpb24oRlRfUG9zIHZhbHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxoYl9wb3NpdGlvbl90Pih2YWx1ZSA8PCAxMCk7Cit9CisKIHN0YXRpYyB2b2lkIENhaXJvR2V0
R2x5cGhXaWR0aEFuZEV4dGVudHMoY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwgaGJf
Y29kZXBvaW50X3QgY29kZXBvaW50LCBoYl9wb3NpdGlvbl90KiBhZHZhbmNlLCBoYl9nbHlwaF9l
eHRlbnRzX3QqIGV4dGVudHMpCiB7CiAgICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZ2x5cGhFeHRl
bnRzOwpAQCAtMTE5LDE2ICsxMjQsMzQgQEAgc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpH
ZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXQKICAgICBy
ZXR1cm4gYWR2YW5jZTsKIH0KIAotc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlw
aEhvcml6b250YWxLZXJuaW5nKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJf
Y29kZXBvaW50X3QgbGVmdEdseXBoLCBoYl9jb2RlcG9pbnRfdCByaWdodEdseXBoLCB2b2lkKiB1
c2VyRGF0YSkKK3N0YXRpYyB2b2lkIGZyZWVUeXBlR2V0S2VybmluZ1ZlY3Rvcih2b2lkKiBmb250
RGF0YSwgRlRfVmVjdG9yKiBrZXJuaW5nVmVjdG9yLCBGVF9VSW50IGxlZnRHbHlwaCwgRlRfVUlu
dCByaWdodEdseXBoKQogewotICAgIC8vIEZJWE1FOiBnZXQgdGhlIFRydWVUeXBlICJrZXJuIiB0
YWJsZSBrZXJuaW5nIGFkanVzdG1lbnQKLSAgICByZXR1cm4gMDsKKyAgICBGb250UGxhdGZvcm1E
YXRhKiBwbGF0Zm9ybURhdGEgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihm
b250RGF0YSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IHBsYXRmb3Jt
RGF0YS0+c2NhbGVkRm9udCgpOworICAgIGlmICghc2NhbGVkRm9udCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ2Fpcm9GdEZhY2VMb2NrZXIgY2Fpcm9GdEZhY2VMb2NrZXIoc2NhbGVkRm9udCk7
CisgICAgRlRfRmFjZSBmdEZvbnQgPSBjYWlyb0Z0RmFjZUxvY2tlci5sb2NrKCk7CisgICAgaWYg
KCFmdEZvbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEZUX0dldF9LZXJuaW5nKGZ0Rm9udCwg
bGVmdEdseXBoLCByaWdodEdseXBoLCBGVF9LRVJOSU5HX1VORklUVEVELCBrZXJuaW5nVmVjdG9y
KTsKK30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxL
ZXJuaW5nKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBsZWZ0R2x5
cGgsIGhiX2NvZGVwb2ludF90IHJpZ2h0R2x5cGgsIHZvaWQqKQoreworICAgIEZUX1ZlY3RvciBr
ZXJuaW5nVmVjdG9yID0geyAwLCAwIH07CisgICAgZnJlZVR5cGVHZXRLZXJuaW5nVmVjdG9yKGZv
bnREYXRhLCAma2VybmluZ1ZlY3RvciwgbGVmdEdseXBoLCByaWdodEdseXBoKTsKKyAgICByZXR1
cm4gZnRQb3NUb0hhcmZCdXp6UG9zaXRpb24oa2VybmluZ1ZlY3Rvci54KTsKIH0KIAotc3RhdGlj
IGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaFZlcnRpY2FsS2VybmluZyhoYl9mb250X3Qq
IGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHRvcEdseXBoLCBoYl9jb2Rl
cG9pbnRfdCBib3R0b21HbHlwaCwgdm9pZCogdXNlckRhdGEpCitzdGF0aWMgaGJfcG9zaXRpb25f
dCBoYXJmYnV6ekdldEdseXBoVmVydGljYWxLZXJuaW5nKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnRE
YXRhLCBoYl9jb2RlcG9pbnRfdCB0b3BHbHlwaCwgaGJfY29kZXBvaW50X3QgYm90dG9tR2x5cGgs
IHZvaWQqKQogewotICAgIC8vIEZJWE1FOiBnZXQgdGhlIFRydWVUeXBlICJrZXJuIiB0YWJsZSBr
ZXJuaW5nIGFkanVzdG1lbnQKICAgICByZXR1cm4gMDsKKyAgICBGVF9WZWN0b3Iga2VybmluZ1Zl
Y3RvciA9IHsgMCwgMCB9OworICAgIGZyZWVUeXBlR2V0S2VybmluZ1ZlY3Rvcihmb250RGF0YSwg
Jmtlcm5pbmdWZWN0b3IsIHRvcEdseXBoLCBib3R0b21HbHlwaCk7CisgICAgcmV0dXJuIGZ0UG9z
VG9IYXJmQnV6elBvc2l0aW9uKGtlcm5pbmdWZWN0b3IueSk7CiB9CiAKIHN0YXRpYyBoYl9ib29s
X3QgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4oaGJfZm9udF90Kiwgdm9pZCosIGhi
X2NvZGVwb2ludF90LCBoYl9wb3NpdGlvbl90KiwgaGJfcG9zaXRpb25fdCosIHZvaWQqKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188214</attachid>
            <date>2013-02-13 16:21:34 -0800</date>
            <delta_ts>2013-02-27 06:35:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102603-20130213191802.patch</filename>
            <type>text/plain</type>
            <size>14934</size>
            <attacher name="Eli Fidler">efidler</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkyNGJmNDMxOWQ1ODQx
YmYwMjM2N2Y5N2FiNmM1NTU4OTc0ZjhjNi4uOTgzZTQyYWJmNWJlMDk5YmEwMjVkMmYxYWM5NGFj
YTU5ODU2ODJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTAyLTAxICBFbGkg
RmlkbGVyICA8ZWZpZGxlckByaW0uY29tPgorICAgICAgICBFbmFibGUgcHJvcGVyIGtlcm5pbmcg
YW5kIGxpZ2F0dXJlcyBzdXBwb3J0IGZvciBIYXJmQnV6ei1uZyBjb21wbGV4IHRleHQgcGF0aC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjYwMwor
ICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBUaGUgSGFyZkJ1enotbmcgY29tcGxleCB0ZXh0IHBhdGggYXV0b21hdGljYWxseSBl
bmFibGVzIHRoZSBPcGVuVHlwZQorICAgICAgICBHUE9TICJrZXJuIiBmZWF0dXJlLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIHdpZHRoIG9mIGEgcnVuIGRlcGVuZHMgb24KKyAgICAgICAgd2hldGhlciB3
ZSBnb3Qgc2VudCB0byB0aGUgY29tcGxleCBwYXRoICh3aGljaCBtaWdodCBoYXZlIGJlZW4gYmVj
YXVzZQorICAgICAgICBvZiBhIGNvbWJpbmluZyBjaGFyYWN0ZXIpLiBTZWUgRGFuIEJlcm5zdGVp
bidzIGNvbW1lbnQgYXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMTAwOSNjMzEKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBhZGRz
IHN1cHBvcnQgZm9yIFRydWVUeXBlICJrZXJuIiB0YWJsZSBrZXJuaW5nLAorICAgICAgICAtd2Vi
a2l0LWZvbnQta2VybmluZyBhbmQgLXdlYmtpdC1mb250LXZhcmlhbnQtbGlnYXR1cmVzLgorICAg
ICAgICAKKyAgICAgICAgVGhlIENhaXJvIGltcGxlbWVudGF0aW9uIHdhcyBkb25lIGJ5IERvbWlu
aWsgUsO2dHRzY2hlcy4KKyAgICAgICAgU2tpYSBhbmQgQ29yZVRleHQgc3RpbGwgbmVlZCBpbXBs
ZW1lbnRhdGlvbnMuCisgICAgICAgIAorICAgICAgICBUZXN0ZWQgYnk6IGZhc3QvdGV4dC9mb250
LWtlcm5pbmcuaHRtbAorICAgICAgICAgICAgICAgICAgIGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFs
L2NvbWJpbmluZy1tYXJrcy1wb3NpdGlvbi5odG1sCisgICAgICAgIAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5oOgorICAgICAgICAoSGFyZkJ1enpG
YWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VD
YWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmdFBvc1RvSGFyZkJ1enpQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZyZWVUeXBlR2V0S2VybmluZ1Zl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekdldEdseXBoSG9yaXpvbnRhbEtlcm5p
bmcpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZkJ1enpHZXRHbHlwaFZlcnRpY2FsS2VybmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmQnV6ekNhaXJvVGV4dEdldEZvbnRGdW5jcyk6CisgICAg
ICAgIChXZWJDb3JlOjpIYXJmQnV6ekZhY2U6OmNyZWF0ZUZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmhhcmZidXp6Q29yZVRleHRHZXRGb250RnVuY3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpGYWNlOjpjcmVhdGVGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFyZmJ1enpTa2lhR2V0Rm9udEZ1bmNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2V0Rm9udEZlYXR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyk6CisKIDIwMTMtMDIt
MTIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBUaHJlYWRlZCBI
VE1MIHBhcnNlciBzaG91bGQgcGFzcyB0aGUgcmVtYWluaW5nIGZhc3QvdG9rZW5pemVyIHRlc3Rz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9I
YXJmQnV6ekZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6RmFjZS5oCmluZGV4IGIzNzc2ZGMwN2E3OGMwMDZmZWM5MDI3MWQ1ODI4NTljZGQw
OGMyYjIuLjJkMTA5M2Y1NjU4ODdkMmRhM2JhZjNlODA4NjQwYTBkYTliMmQ1OTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZC
dXp6RmFjZS5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIEhhcmZCdXp6RmFjZV9oCiAjZGVm
aW5lIEhhcmZCdXp6RmFjZV9oCiAKKyNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCisK
ICNpbmNsdWRlIDxoYi5oPgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUzLDcgKzU1
LDcgQEAgcHVibGljOgogICAgIH0KICAgICB+SGFyZkJ1enpGYWNlKCk7CiAKLSAgICBoYl9mb250
X3QqIGNyZWF0ZUZvbnQoKTsKKyAgICBoYl9mb250X3QqIGNyZWF0ZUZvbnQoY29uc3QgVHlwZXNl
dHRpbmdGZWF0dXJlcyYpOwogCiAgICAgdm9pZCBzZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vi
c3RpdHV0aW9uKGhiX2J1ZmZlcl90Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJvLmNwcApp
bmRleCA2MjQ5NWFjYTkyNjU3MjlkM2Q5NmRlYzM4N2QyOGZhNDMzOWY2NjkwLi5lMGM3ZTUyNDkw
NzY5OTk5Mjk1ZDgxMmJmZTc5YTI2MDRlMWI5MTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDYWlyby5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fp
cm8uY3BwCkBAIC04MCw2ICs4MCwxMSBAQCBzdGF0aWMgaGJfcG9zaXRpb25fdCBkb3VibGVUb0hh
cmZCdXp6UG9zaXRpb24oZG91YmxlIHZhbHVlKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxoYl9w
b3NpdGlvbl90Pih2YWx1ZSAqICgxIDw8IDE2KSk7CiB9CiAKK3N0YXRpYyBoYl9wb3NpdGlvbl90
IGZ0UG9zVG9IYXJmQnV6elBvc2l0aW9uKEZUX1BvcyB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aGJfcG9zaXRpb25fdD4odmFsdWUgPDwgMTApOworfQorCiBzdGF0aWMgdm9pZCBD
YWlyb0dldEdseXBoV2lkdGhBbmRFeHRlbnRzKGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZv
bnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludCwgaGJfcG9zaXRpb25fdCogYWR2YW5jZSwgaGJf
Z2x5cGhfZXh0ZW50c190KiBleHRlbnRzKQogewogICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGds
eXBoRXh0ZW50czsKQEAgLTEzMiw2ICsxMzcsMzUgQEAgc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFy
ZkJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCosIHZvaWQqIGZvbnREYXQK
ICAgICByZXR1cm4gYWR2YW5jZTsKIH0KIAorc3RhdGljIHZvaWQgZnJlZVR5cGVHZXRLZXJuaW5n
VmVjdG9yKHZvaWQqIGZvbnREYXRhLCBGVF9WZWN0b3IqIGtlcm5pbmdWZWN0b3IsIEZUX1VJbnQg
bGVmdEdseXBoLCBGVF9VSW50IHJpZ2h0R2x5cGgpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSog
cGxhdGZvcm1EYXRhID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERh
dGEpOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBwbGF0Zm9ybURhdGEt
PnNjYWxlZEZvbnQoKTsKKyAgICBpZiAoIXNjYWxlZEZvbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENhaXJvRnRGYWNlTG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKHNjYWxlZEZvbnQpOworICAg
IEZUX0ZhY2UgZnRGb250ID0gY2Fpcm9GdEZhY2VMb2NrZXIubG9jaygpOworICAgIGlmICghZnRG
b250KQorICAgICAgICByZXR1cm47CisKKyAgICBGVF9HZXRfS2VybmluZyhmdEZvbnQsIGxlZnRH
bHlwaCwgcmlnaHRHbHlwaCwgRlRfS0VSTklOR19VTkZJVFRFRCwga2VybmluZ1ZlY3Rvcik7Cit9
CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsS2Vybmlu
ZyhoYl9mb250X3QqLCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgbGVmdEdseXBoLCBo
Yl9jb2RlcG9pbnRfdCByaWdodEdseXBoLCB2b2lkKikKK3sKKyAgICBGVF9WZWN0b3Iga2Vybmlu
Z1ZlY3RvciA9IHsgMCwgMCB9OworICAgIGZyZWVUeXBlR2V0S2VybmluZ1ZlY3Rvcihmb250RGF0
YSwgJmtlcm5pbmdWZWN0b3IsIGxlZnRHbHlwaCwgcmlnaHRHbHlwaCk7CisgICAgcmV0dXJuIGZ0
UG9zVG9IYXJmQnV6elBvc2l0aW9uKGtlcm5pbmdWZWN0b3IueCk7Cit9CisKK3N0YXRpYyBoYl9w
b3NpdGlvbl90IGhhcmZCdXp6R2V0R2x5cGhWZXJ0aWNhbEtlcm5pbmcoaGJfZm9udF90Kiwgdm9p
ZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IHRvcEdseXBoLCBoYl9jb2RlcG9pbnRfdCBib3R0
b21HbHlwaCwgdm9pZCopCit7CisgICAgRlRfVmVjdG9yIGtlcm5pbmdWZWN0b3IgPSB7IDAsIDAg
fTsKKyAgICBmcmVlVHlwZUdldEtlcm5pbmdWZWN0b3IoZm9udERhdGEsICZrZXJuaW5nVmVjdG9y
LCB0b3BHbHlwaCwgYm90dG9tR2x5cGgpOworICAgIHJldHVybiBmdFBvc1RvSGFyZkJ1enpQb3Np
dGlvbihrZXJuaW5nVmVjdG9yLnkpOworfQorCiBzdGF0aWMgaGJfYm9vbF90IGhhcmZCdXp6R2V0
R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCosIHZvaWQqLCBoYl9jb2RlcG9pbnRfdCwg
aGJfcG9zaXRpb25fdCosIGhiX3Bvc2l0aW9uX3QqLCB2b2lkKikKIHsKICAgICAvLyBKdXN0IHJl
dHVybiB0cnVlLCBmb2xsb3dpbmcgdGhlIHdheSB0aGF0IEhhcmZidXp6LUZyZWVUeXBlCkBAIC0x
NDksOSArMTgzLDI0IEBAIHN0YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlwaEV4dGVudHMo
aGJfZm9udF90Kiwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2luCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1
bmNzKCkKK3N0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1
bmNzKGNvbnN0IFR5cGVzZXR0aW5nRmVhdHVyZXMmIGZlYXR1cmVzKQogewogICAgIHN0YXRpYyBo
Yl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3MgPSAwOworICAgIHN0YXRpYyBo
Yl9mb250X2Z1bmNzX3QqIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3NXaXRoS2VybmluZyA9IDA7IC8v
IGluY2x1ZGVzIFRydWVUeXBlICgia2VybiIgdGFibGUpIGtlcm5pbmcKKworICAgIGlmIChmZWF0
dXJlcyAmIEtlcm5pbmcpIHsKKyAgICAgICAgaWYgKCFoYXJmQnV6ekNhaXJvRm9udEZ1bmNzV2l0
aEtlcm5pbmcpIHsKKyAgICAgICAgICAgIGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3NXaXRoS2Vybmlu
ZyA9IGhiX2ZvbnRfZnVuY3NfY3JlYXRlKCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3Nl
dF9nbHlwaF9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250RnVuY3NXaXRoS2VybmluZywgaGFyZkJ1enpH
ZXRHbHlwaCwgMCwgMCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX2Fk
dmFuY2VfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzV2l0aEtlcm5pbmcsIGhhcmZCdXp6R2V0
R2x5cGhIb3Jpem9udGFsQWR2YW5jZSwgMCwgMCk7CisgICAgICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9oX2tlcm5pbmdfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzV2l0aEtlcm5p
bmcsIGhhcmZCdXp6R2V0R2x5cGhIb3Jpem9udGFsS2VybmluZywgMCwgMCk7CisgICAgICAgICAg
ICBoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9oX29yaWdpbl9mdW5jKGhhcmZCdXp6Q2Fpcm9Gb250
RnVuY3NXaXRoS2VybmluZywgaGFyZkJ1enpHZXRHbHlwaEhvcml6b250YWxPcmlnaW4sIDAsIDAp
OworICAgICAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfdl9rZXJuaW5nX2Z1bmMoaGFy
ZkJ1enpDYWlyb0ZvbnRGdW5jc1dpdGhLZXJuaW5nLCBoYXJmQnV6ekdldEdseXBoVmVydGljYWxL
ZXJuaW5nLCAwLCAwKTsKKyAgICAgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2V4dGVu
dHNfZnVuYyhoYXJmQnV6ekNhaXJvRm9udEZ1bmNzV2l0aEtlcm5pbmcsIGhhcmZCdXp6R2V0R2x5
cGhFeHRlbnRzLCAwLCAwKTsKKyAgICAgICAgICAgIGhiX2ZvbnRfZnVuY3NfbWFrZV9pbW11dGFi
bGUoaGFyZkJ1enpDYWlyb0ZvbnRGdW5jc1dpdGhLZXJuaW5nKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaGFyZkJ1enpDYWlyb0ZvbnRGdW5jc1dpdGhLZXJuaW5nOworICAgIH0KIAogICAg
IC8vIFdlIGRvbid0IHNldCBjYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggd2UgY2FuJ3Qgc3VwcG9y
dC4KICAgICAvLyBIYXJmYnV6eiB3aWxsIHVzZSB0aGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24g
aWYgdGhleSBhcmVuJ3Qgc2V0LgpAQCAtMjA4LDExICsyNTcsMTEgQEAgaGJfZmFjZV90KiBIYXJm
QnV6ekZhY2U6OmNyZWF0ZUZhY2UoKQogICAgIHJldHVybiBmYWNlOwogfQogCi1oYl9mb250X3Qq
IEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udCgpCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3Jl
YXRlRm9udChjb25zdCBUeXBlc2V0dGluZ0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKICAgICBoYl9m
b250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOwogICAgIEhhcmZCdXp6Rm9udERh
dGEqIGhiRm9udERhdGEgPSBuZXcgSGFyZkJ1enpGb250RGF0YShtX2dseXBoQ2FjaGVGb3JGYWNl
Q2FjaGVFbnRyeSwgbV9wbGF0Zm9ybURhdGEtPnNjYWxlZEZvbnQoKSk7Ci0gICAgaGJfZm9udF9z
ZXRfZnVuY3MoZm9udCwgaGFyZkJ1enpDYWlyb1RleHRHZXRGb250RnVuY3MoKSwgaGJGb250RGF0
YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOworICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQs
IGhhcmZCdXp6Q2Fpcm9UZXh0R2V0Rm9udEZ1bmNzKGZlYXR1cmVzKSwgaGJGb250RGF0YSwgZGVz
dHJveUhhcmZCdXp6Rm9udERhdGEpOwogICAgIGNvbnN0IGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS0+c2l6ZSgpOwogICAgIGlmIChmbG9vcmYoc2l6ZSkgPT0gc2l6ZSkKICAgICAgICAgaGJf
Zm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNvcmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNv
cmVUZXh0LmNwcAppbmRleCA1ZGQ4MTkwNDMwNDc4ZGQ1ODkxMGU3YWFkMjQyZjgwNjMwYTRkMTkz
Li5mZDYyMDZjNDVhMjgyZDk0MGQ2N2I0MmVlMzlhNWIzNzdhYjhiN2IzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VDb3Jl
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpGYWNlQ29yZVRleHQuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBoYl9ib29s
X3QgZ2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJf
Y29kZXBvaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBoYl9mb250X2Z1bmNzX3Qq
IGhhcmZCdXp6Q29yZVRleHRHZXRGb250RnVuY3MoKQorc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCog
aGFyZkJ1enpDb3JlVGV4dEdldEZvbnRGdW5jcyhjb25zdCBUeXBlc2V0dGluZ0ZlYXR1cmVzJikK
IHsKICAgICBzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmQnV6ekNvcmVUZXh0Rm9udEZ1bmNz
ID0gMDsKIApAQCAtMTI5LDEwICsxMjksMTAgQEAgaGJfZmFjZV90KiBIYXJmQnV6ekZhY2U6OmNy
ZWF0ZUZhY2UoKQogICAgIHJldHVybiBmYWNlOwogfQogCi1oYl9mb250X3QqIEhhcmZCdXp6RmFj
ZTo6Y3JlYXRlRm9udCgpCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udChjb25z
dCBUeXBlc2V0dGluZ0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKICAgICBoYl9mb250X3QqIGZvbnQg
PSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOwotICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhh
cmZCdXp6Q29yZVRleHRHZXRGb250RnVuY3MoKSwgbV9wbGF0Zm9ybURhdGEsIDApOworICAgIGhi
X2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZCdXp6Q29yZVRleHRHZXRGb250RnVuY3MoZmVhdHVy
ZXMpLCBtX3BsYXRmb3JtRGF0YSwgMCk7CiAgICAgY29uc3QgZmxvYXQgc2l6ZSA9IG1fcGxhdGZv
cm1EYXRhLT5tX3NpemU7CiAgICAgaGJfZm9udF9zZXRfcHBlbShmb250LCBzaXplLCBzaXplKTsK
ICAgICBjb25zdCBpbnQgc2NhbGUgPSAoMSA8PCAxNikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpGYWNlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcAppbmRleCA2MTA5MzBkNGUxNzg3MmU2MTYxNzkz
MzEzNGU4NzU5NDljYTBmMTMwLi5hYzdjMjY0ZjczZjUwYzIyNmRhZTMzMTQ4NGMxNzFlMWY3MzJh
YzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6ekZhY2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2VTa2lhLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIHN0
YXRpYyBoYl9ib29sX3QgaGFyZkJ1enpHZXRHbHlwaEV4dGVudHMoaGJfZm9udF90KiBoYkZvbnQs
IHZvaWQqIGZvbnREYXRhLCBoYl9jCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBoYl9m
b250X2Z1bmNzX3QqIGhhcmZCdXp6U2tpYUdldEZvbnRGdW5jcygpCitzdGF0aWMgaGJfZm9udF9m
dW5jc190KiBoYXJmQnV6elNraWFHZXRGb250RnVuY3MoY29uc3QgVHlwZXNldHRpbmdGZWF0dXJl
cyYpCiB7CiAgICAgc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCogaGFyZkJ1enpTa2lhRm9udEZ1bmNz
ID0gMDsKIApAQCAtMTc1LDEyICsxNzUsMTIgQEAgaGJfZmFjZV90KiBIYXJmQnV6ekZhY2U6OmNy
ZWF0ZUZhY2UoKQogICAgIHJldHVybiBmYWNlOwogfQogCi1oYl9mb250X3QqIEhhcmZCdXp6RmFj
ZTo6Y3JlYXRlRm9udCgpCitoYl9mb250X3QqIEhhcmZCdXp6RmFjZTo6Y3JlYXRlRm9udChjb25z
dCBUeXBlc2V0dGluZ0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKICAgICBIYXJmQnV6ekZvbnREYXRh
KiBoYkZvbnREYXRhID0gbmV3IEhhcmZCdXp6Rm9udERhdGEobV9nbHlwaENhY2hlRm9yRmFjZUNh
Y2hlRW50cnkpOwogICAgIG1fcGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KCZoYkZvbnREYXRhLT5t
X3BhaW50KTsKICAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOwot
ICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZCdXp6U2tpYUdldEZvbnRGdW5jcygpLCBo
YkZvbnREYXRhLCBkZXN0cm95SGFyZkJ1enpGb250RGF0YSk7CisgICAgaGJfZm9udF9zZXRfZnVu
Y3MoZm9udCwgaGFyZkJ1enpTa2lhR2V0Rm9udEZ1bmNzKGZlYXR1cmVzKSwgaGJGb250RGF0YSwg
ZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOwogICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0
YS0+c2l6ZSgpOwogICAgIGludCBzY2FsZSA9IFNraWFTY2FsYXJUb0hhcmZCdXp6UG9zaXRpb24o
c2l6ZSk7CiAgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmNwcAppbmRleCBhZjcwNmUzODAzYzQ5ZWU2Y2UxZDUyZTlhMGY5MTc4ZDk5
MGM4MzU2Li42MDUwMjMxMjJkNTcyNWRlZGIzOWE1MmIzYzY2NzExNzQzNjFhZThhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNo
YXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNDQsNiArNDUsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBoYl90YWdfdCBjbGlnVGFnID0gSEJfVEFHKCdjJywg
J2wnLCAnaScsICdnJyk7Citjb25zdCBoYl90YWdfdCBkbGlnVGFnID0gSEJfVEFHKCdkJywgJ2wn
LCAnaScsICdnJyk7Citjb25zdCBoYl90YWdfdCBobGlnVGFnID0gSEJfVEFHKCdoJywgJ2wnLCAn
aScsICdnJyk7Citjb25zdCBoYl90YWdfdCBrZXJuVGFnID0gSEJfVEFHKCdrJywgJ2UnLCAncics
ICduJyk7Citjb25zdCBoYl90YWdfdCBsaWdhVGFnID0gSEJfVEFHKCdsJywgJ2knLCAnZycsICdh
Jyk7CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBIYXJmQnV6elNjb3BlZFB0ciB7CiBw
dWJsaWM6CkBAIC0yMDksNiArMjE2LDcxIEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRG
ZWF0dXJlcygpCiAgICAgICAgIG1fZmVhdHVyZXMuYXBwZW5kKHZydDIpOwogICAgIH0KIAorICAg
IHN0YXRpYyBoYl9mZWF0dXJlX3Qga2VybiA9IHsga2VyblRhZywgMSwgMCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KC0xKSB9OworICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qgbm9LZXJuID0geyBrZXJu
VGFnLCAwLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgaWYgKCEobV9mb250
LT50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJuaW5nKSkKKyAgICAgICAgbV9mZWF0dXJlcy5h
cHBlbmQobm9LZXJuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbi5r
ZXJuaW5nKCkpIHsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1hbEtlcm5pbmc6
CisgICAgICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChrZXJuKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9uZUtlcm5pbmc6CisgICAgICAgICAg
ICBtX2ZlYXR1cmVzLmFwcGVuZChub0tlcm4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRm9udERlc2NyaXB0aW9uOjpBdXRvS2VybmluZzoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCBsaWdhID0geyBsaWdh
VGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgc3RhdGljIGhiX2Zl
YXR1cmVfdCBub0xpZ2EgPSB7IGxpZ2FUYWcsIDAsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigt
MSkgfTsKKyAgICBzdGF0aWMgaGJfZmVhdHVyZV90IGNsaWcgPSB7IGNsaWdUYWcsIDEsIDAsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigtMSkgfTsKKyAgICBzdGF0aWMgaGJfZmVhdHVyZV90IG5vQ2xp
ZyA9IHsgY2xpZ1RhZywgMCwgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSB9OworICAgIHN0
YXRpYyBoYl9mZWF0dXJlX3QgZGxpZyA9IHsgZGxpZ1RhZywgMSwgMCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KC0xKSB9OworICAgIHN0YXRpYyBoYl9mZWF0dXJlX3Qgbm9EbGlnID0geyBkbGlnVGFn
LCAwLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07CisgICAgc3RhdGljIGhiX2ZlYXR1
cmVfdCBobGlnID0geyBobGlnVGFnLCAxLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpIH07
CisgICAgc3RhdGljIGhiX2ZlYXR1cmVfdCBub0hsaWcgPSB7IGhsaWdUYWcsIDAsIDAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigtMSkgfTsKKyAgICBpZiAoIShtX2ZvbnQtPnR5cGVzZXR0aW5nRmVh
dHVyZXMoKSAmIExpZ2F0dXJlcykpIHsKKyAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQobm9MaWdh
KTsKKyAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQobm9DbGlnKTsKKyAgICAgICAgbV9mZWF0dXJl
cy5hcHBlbmQobm9EbGlnKTsKKyAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQobm9IbGlnKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0
YXRlKCkpIHsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVz
U3RhdGU6CisgICAgICAgICAgICBtX2ZlYXR1cmVzLmFwcGVuZChub0xpZ2EpOworICAgICAgICAg
ICAgbV9mZWF0dXJlcy5hcHBlbmQobm9DbGlnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOgorICAgICAgICAg
ICAgbV9mZWF0dXJlcy5hcHBlbmQobGlnYSk7CisgICAgICAgICAgICBtX2ZlYXR1cmVzLmFwcGVu
ZChjbGlnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgp
KSB7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRl
OgorICAgICAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQobm9EbGlnKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRl
OgorICAgICAgICAgICAgbV9mZWF0dXJlcy5hcHBlbmQoZGxpZyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChkZXNjcmlwdGlv
bi5oaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoKSkgeworICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIG1fZmVhdHVyZXMuYXBw
ZW5kKG5vSGxpZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3Jp
cHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIG1fZmVhdHVyZXMuYXBw
ZW5kKGhsaWcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyogc2V0dGluZ3MgPSBkZXNjcmlwdGlv
bi5mZWF0dXJlU2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzKQogICAgICAgICByZXR1cm47
CkBAIC0zNDksNyArNDIxLDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1
bnMoYm9vbCBzaG91bGRTZXREaXJlY3Rpb24pCiAgICAgICAgIGlmIChtX2ZvbnQtPmZvbnREZXNj
cmlwdGlvbigpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCiAgICAgICAgICAgICBmYWNlLT5z
ZXRTY3JpcHRGb3JWZXJ0aWNhbEdseXBoU3Vic3RpdHV0aW9uKGhhcmZCdXp6QnVmZmVyLmdldCgp
KTsKIAotICAgICAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9mb250X3Q+IGhhcmZCdXp6Rm9udChm
YWNlLT5jcmVhdGVGb250KCksIGhiX2ZvbnRfZGVzdHJveSk7CisgICAgICAgIEhhcmZCdXp6U2Nv
cGVkUHRyPGhiX2ZvbnRfdD4gaGFyZkJ1enpGb250KGZhY2UtPmNyZWF0ZUZvbnQobV9mb250LT50
eXBlc2V0dGluZ0ZlYXR1cmVzKCkpLCBoYl9mb250X2Rlc3Ryb3kpOwogCiAgICAgICAgIGhiX3No
YXBlKGhhcmZCdXp6Rm9udC5nZXQoKSwgaGFyZkJ1enpCdWZmZXIuZ2V0KCksIG1fZmVhdHVyZXMu
aXNFbXB0eSgpID8gMCA6IG1fZmVhdHVyZXMuZGF0YSgpLCBtX2ZlYXR1cmVzLnNpemUoKSk7CiAK
</data>
<flag name="commit-queue"
          id="211189"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>