<?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>27265</bug_id>
          
          <creation_ts>2009-07-14 09:46:12 -0700</creation_ts>
          <short_desc>[Qt] font cache reworking</short_desc>
          <delta_ts>2009-07-20 06:36:54 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>hausmann</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131596</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-07-14 09:46:12 -0700</bug_when>
    <thetext>We have already done some work in #24551 but I am not fully happy with the code yet.
We created a cache for FontPlatformData objects in FontCacheQt.cpp. The problem is that
this cache never been purged. FontCache has a tricky semantic: the elements of
the FontPlatformDataCache are removed when a SimpleFontData, which has the same
FontPlatformData is being removed from the FontDataCache (the two FontPlatformData objects are
not the same, they are just equal). I think we should uniforming our FontCache implementation
with the shared one for adapting this semantic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131847</commentid>
    <comment_count>1</comment_count>
      <attachid>32777</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-07-15 04:28:06 -0700</bug_when>
    <thetext>Created attachment 32777
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131849</commentid>
    <comment_count>2</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-07-15 04:31:21 -0700</bug_when>
    <thetext>I used WTF containers rather than Qt ones because as I know it is a policy in WebKit. The extremely low values for cTargeInactiveFontData and cMaxInactiveFontData are just for my testings - i forgot to change it for the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131880</commentid>
    <comment_count>3</comment_count>
      <attachid>32777</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-15 07:15:23 -0700</bug_when>
    <thetext>Comment on attachment 32777
proposed patch

In general this looks good, but after running the layout tests with your patch applied I&apos;m getting a bunch of crashes:

fast/css/font-face-multiple-families.html
fast/loader/font-face-empty.html
fast/loader/goto-anchor-infinite-layout.html
svg/custom/createImageElement2.xhtml
svg/custom/font-platformDestroy-crash.svg
svg/dom/altGlyph-dom.xhtml

r- because of that, sorry :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132577</commentid>
    <comment_count>4</comment_count>
      <attachid>32941</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-07-17 08:05:35 -0700</bug_when>
    <thetext>Created attachment 32941
proposed patch

Layouttest problems are fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133084</commentid>
    <comment_count>5</comment_count>
      <attachid>32941</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-20 01:16:12 -0700</bug_when>
    <thetext>Comment on attachment 32941
proposed patch


Most of the patch looks good to me! I have a few small comments below. r- because of those comments and a missing ChangeLog elaborating the changes.

One thing I&apos;ve noticed is that the use of std::pair&lt;const FontData*, bool&gt; doesn&apos;t help very much to create readable code. Code like

    if (!item.second)
        return item.first;

is very very hard to read. This isn&apos;t your fault of course :-), but one thing that would be nice is a comment explaining what happens there, to make it easier to read the code three months later :-)

&gt; -typedef QHash&lt;FontDescription, FontPlatformData*&gt; FontPlatformDataCache;
&gt; +// This type must be consistent with FontPlatformData&apos;s ctor - the one which
&gt; +// gets FontDescription as it&apos;s parameter.
&gt; +class FontPlatformDataCacheKey {
&gt; +public:
&gt; +    FontPlatformDataCacheKey(const FontDescription&amp; description)
&gt; +        : m_familyName()
&gt; +        , m_bold(false)
&gt; +        , m_size(qRound(description.computedPixelSize()))

Why do you use qRound here? computedPixelSize() appears to return an int.


&gt; +void FontCache::purgeInactiveFontData(int count)
&gt; +{
&gt; +    static bool isPurging;  // Guard against reentry when e.g. a deleted FontData releases its small caps FontData.
&gt; +    if (isPurging)
&gt; +        return;
&gt; +
&gt; +    isPurging = true;

From what I can see a chunk of this patch comes from FontCache.cpp. I believe your patch should include the addition of the copyright holders of that file to FontCacheQt.cpp.


&gt; -    const FontData* result = new SimpleFontData(FontPlatformData(description), _font-&gt;wordSpacing(), _font-&gt;letterSpacing());
&gt; -    m_fontList.append(pair&lt;const FontData*, bool&gt;(result, result-&gt;isCustomFont()));
&gt; +    const FontData* result = new SimpleFontData(FontPlatformData(description, _font-&gt;wordSpacing(), _font-&gt;letterSpacing()), true);
&gt; +    m_fontList.append(pair&lt;const FontData*, bool&gt;(result, true));

I may be confusing the code here (sorry if that&apos;s the case), but shouldn&apos;t this be &quot;false&quot; instead of &quot;true&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133115</commentid>
    <comment_count>6</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-07-20 05:42:39 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 32941 [details])
&gt; 
&gt; Most of the patch looks good to me! I have a few small comments below. r-
&gt; because of those comments and a missing ChangeLog elaborating the changes.
&gt; 
&gt; One thing I&apos;ve noticed is that the use of std::pair&lt;const FontData*, bool&gt;
&gt; doesn&apos;t help very much to create readable code. Code like
&gt; 
&gt;     if (!item.second)
&gt;         return item.first;
&gt; 
&gt; is very very hard to read. This isn&apos;t your fault of course :-), but one thing
&gt; that would be nice is a comment explaining what happens there, to make it
&gt; easier to read the code three months later :-)

I will add some comments.

&gt; 
&gt; &gt; -typedef QHash&lt;FontDescription, FontPlatformData*&gt; FontPlatformDataCache;
&gt; &gt; +// This type must be consistent with FontPlatformData&apos;s ctor - the one which
&gt; &gt; +// gets FontDescription as it&apos;s parameter.
&gt; &gt; +class FontPlatformDataCacheKey {
&gt; &gt; +public:
&gt; &gt; +    FontPlatformDataCacheKey(const FontDescription&amp; description)
&gt; &gt; +        : m_familyName()
&gt; &gt; +        , m_bold(false)
&gt; &gt; +        , m_size(qRound(description.computedPixelSize()))
&gt; 
&gt; Why do you use qRound here? computedPixelSize() appears to return an int.
&gt; 

I used it accidentally :) .

&gt; 
&gt; &gt; +void FontCache::purgeInactiveFontData(int count)
&gt; &gt; +{
&gt; &gt; +    static bool isPurging;  // Guard against reentry when e.g. a deleted FontData releases its small caps FontData.
&gt; &gt; +    if (isPurging)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    isPurging = true;
&gt; 
&gt; From what I can see a chunk of this patch comes from FontCache.cpp. I believe
&gt; your patch should include the addition of the copyright holders of that file to
&gt; FontCacheQt.cpp.

Agree.

&gt; 
&gt; 
&gt; &gt; -    const FontData* result = new SimpleFontData(FontPlatformData(description), _font-&gt;wordSpacing(), _font-&gt;letterSpacing());
&gt; &gt; -    m_fontList.append(pair&lt;const FontData*, bool&gt;(result, result-&gt;isCustomFont()));
&gt; &gt; +    const FontData* result = new SimpleFontData(FontPlatformData(description, _font-&gt;wordSpacing(), _font-&gt;letterSpacing()), true);
&gt; &gt; +    m_fontList.append(pair&lt;const FontData*, bool&gt;(result, true));
&gt; 
&gt; I may be confusing the code here (sorry if that&apos;s the case), but shouldn&apos;t this
&gt; be &quot;false&quot; instead of &quot;true&quot;?

No. I use the bool in the meaning of the object was created locally or not (when we got it from m_fontSelector). In the first case we can delete these in releaseFontData while in the latter we should call FontCache::releaseFontData. I do not exactly know what &quot;custom&quot; fonts means but this bools was very useful to me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133116</commentid>
    <comment_count>7</comment_count>
      <attachid>33080</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2009-07-20 05:44:18 -0700</bug_when>
    <thetext>Created attachment 33080
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133121</commentid>
    <comment_count>8</comment_count>
      <attachid>33080</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-20 06:34:45 -0700</bug_when>
    <thetext>Comment on attachment 33080
proposed patch

r=me. Noticed a small coding style glitch (missing space after if), but I&apos;ll fix it when landing. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133124</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-20 06:36:54 -0700</bug_when>
    <thetext>Landed in r46124</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32777</attachid>
            <date>2009-07-15 04:28:06 -0700</date>
            <delta_ts>2009-07-17 08:05:35 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>font-cache-uniform-fast.patch</filename>
            <type>text/plain</type>
            <size>13675</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggNjY4
OTEyZS4uMTNjNTkyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250Q2FjaGVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2Fj
aGVRdC5jcHAKQEAgLTI2LDEwICsyNiwxMyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKLSNpbmNsdWRlIDxRSGFzaD4KK3VzaW5nIG5hbWVzcGFjZSBXVEY7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsMzYgKzUwLDE3MyBAQCB2b2lkIEZvbnRD
YWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBW
ZWN0b3I8dW5zaWduZQogewogfQogCi10eXBlZGVmIFFIYXNoPEZvbnREZXNjcmlwdGlvbiwgRm9u
dFBsYXRmb3JtRGF0YSo+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKKy8vIFRoaXMgdHlwZSBtdXN0
IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBvbmUgd2hp
Y2gKKy8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgorY2xhc3MgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICAgICAgOiBtX2Zh
bWlseU5hbWUoKQorICAgICAgICAsIG1fYm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3NpemUocVJv
dW5kKGRlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpKQorICAgICAgICAsIG1faXRhbGlj
KGRlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICAsIG1fc21hbGxDYXBzKGRlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gUUZvbnQgd2VpZ2h0cyBpbiBGb250UGxh
dGZvcm1EYXRhJ3MgY3RvciBhbmQgZm9sbG93IGl0IGhlcmUKKyAgICAgICAgaWYgKGRlc2NyaXB0
aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisgICAgICAgICAgICBtX2JvbGQgPSB0cnVl
OwogCi0vLyB1c2luZyBRX0dMT0JBTF9TVEFUSUMgbGVhZHMgdG8gY3Jhc2guIFRPRE8gaW52ZXN0
aWdhdGUgdGhlIHdheSB0byBmaXggdGhpcy4KLXN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUq
IGdGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisgICAgICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWls
eSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKKyAgICAgICAgd2hpbGUgKGZhbWlseSkgeworICAg
ICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsKKyAgICAgICAg
ICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOworICAgICAgICAgICAgaWYgKGZhbWlseSkKKyAg
ICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcsJyk7CisgICAgICAgIH0KIAotdWlu
dCBxSGFzaChjb25zdCBGb250RGVzY3JpcHRpb24mIGtleSkKLXsKLSAgICB1aW50IHZhbHVlID0g
Q2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgdmFsdWUg
Xj0ga2V5LmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgdmFsdWUgXj0gc3RhdGljX2Nhc3Q8aW50
PihrZXkud2VpZ2h0KCkpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KKyAgICAgICAgY29tcHV0ZUhh
c2goKTsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEpCisgICAgICAgIDogbV9mYW1pbHlOYW1lKHN0YXRpY19jYXN0
PFN0cmluZz4oZm9udERhdGEuZmFtaWx5KCkpKQorICAgICAgICAsIG1fc2l6ZShmb250RGF0YS5w
aXhlbFNpemUoKSkKKyAgICAgICAgLCBtX2JvbGQoZm9udERhdGEuYm9sZCgpKQorICAgICAgICAs
IG1faXRhbGljKGZvbnREYXRhLml0YWxpYygpKQorICAgICAgICAsIG1fc21hbGxDYXBzKGZvbnRE
YXRhLnNtYWxsQ2FwcygpKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsKKyAgICAgICAgY29t
cHV0ZUhhc2goKTsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3NpemUoaGFzaFRhYmxlRGVsZXRlZFNpemUoKSkgeyB9
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZSA9PSBoYXNoVGFibGVEZWxldGVkU2l6ZSgpOyB9CisKKyAgICBlbnVtIEhhc2hUYWJsZUVtcHR5
VmFsdWVUeXBlIHsgSGFzaFRhYmxlRW1wdHlWYWx1ZSB9OworCisgICAgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5KEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQorICAgICAgICA6IG1fZmFtaWx5TmFt
ZSgpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9ib2xkKGZhbHNlKQorICAgICAg
ICAsIG1faXRhbGljKGZhbHNlKQorICAgICAgICAsIG1fc21hbGxDYXBzKGZhbHNlKQorICAgICAg
ICAsIG1faGFzaCgwKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2hhc2ggIT0gb3RoZXIubV9oYXNoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtX2ZhbWlseU5hbWUsIG90aGVyLm1fZmFt
aWx5TmFtZSkgJiYgbV9zaXplID09IG90aGVyLm1fc2l6ZSAmJgorICAgICAgICAgICAgbV9ib2xk
ID09IG90aGVyLm1fYm9sZCAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYyAmJiBtX3NtYWxs
Q2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwczsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hhc2g7CisgICAgfQorCisgICAgdm9pZCBj
b21wdXRlSGFzaCgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKKyAg
ICAgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaChtX2ZhbWlseU5hbWUpLAorICAgICAgICAg
ICAgbV9zaXplIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYm9sZCA8PCBzaXplb2YodW5zaWdu
ZWQpICogOCAtIDEpCisgICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9p
dGFsaWMpIDw8IHNpemVvZih1bnNpZ25lZCkgKjggLSAyCisgICAgICAgICAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9zbWFsbENhcHMpIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0g
MworICAgICAgICB9OworICAgICAgICBtX2hhc2ggPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChy
ZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBz
aXplb2YoVUNoYXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fZmFtaWx5TmFt
ZTsKKyAgICBpbnQgbV9zaXplOworICAgIGJvb2wgbV9ib2xkOworICAgIGJvb2wgbV9pdGFsaWM7
CisgICAgYm9vbCBtX3NtYWxsQ2FwczsKKyAgICB1bnNpZ25lZCBtX2hhc2g7CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVsZXRlZFNpemUoKSB7IHJldHVybiAweEZGRkZGRkZGVTsg
fQorfTsKKworc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CisKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6
OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4geworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIGtleSwgKEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRhYmxlRW1wdHlWYWx1ZSkpOworICAgICAgICByZXR1cm4g
a2V5OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBs
YXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQorICAgIHsKKyAgICAgICAgbmV3ICgmc2xvdCkgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsKKyAgICB9Cit9OworCit0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5LCBGb250UGxhdGZvcm1EYXRhKiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisK
Ky8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJQyBsZWFkcyB0byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0
ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgorc3RhdGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSogZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUpCiB7CiAgICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQogICAgICAgICBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKIAotICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIGZvbnREYXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+dmFsdWUoZGVz
Y3JpcHRpb24sIDApOwotICAgIGlmICghZm9udERhdGEpIHsKLSAgICAgICAgZm9udERhdGEgPSAg
bmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24pOwotICAgICAgICBnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlLT5pbnNlcnQoZGVzY3JpcHRpb24sIGZvbnREYXRhKTsKKyAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBw
bGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5nZXQoa2V5KTsKKyAgICBpZiAo
IXBsYXRmb3JtRGF0YSkgeworICAgICAgICBwbGF0Zm9ybURhdGEgPSBuZXcgRm9udFBsYXRmb3Jt
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmFkZChr
ZXksIHBsYXRmb3JtRGF0YSk7CiAgICAgfQotCi0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJl
dHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENh
Y2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqKQordHlwZWRlZiBIYXNoTWFwPEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWdu
ZWQ+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7CisKK3N0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERh
dGFDYWNoZSA9IDA7CisKK3N0YXRpYyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAx
MDsKK3N0YXRpYyBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSA1OworCitzdGF0
aWMgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZ0luYWN0aXZlRm9udERhdGFT
ZXQgPSAwOworCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhKQogewotICAgIHJldHVybiAw
OworICAgIGlmICghZ0ZvbnREYXRhQ2FjaGUpIHsKKyAgICAgICAgZ0ZvbnREYXRhQ2FjaGUgPSBu
ZXcgRm9udERhdGFDYWNoZTsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQgPSBuZXcgTGlz
dEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjsKKyAgICB9CisKKyAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5KCpmb250UGxhdGZvcm1EYXRhKTsKKyAgICBGb250RGF0YUNhY2hl
OjppdGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKGtleSk7CisgICAgaWYgKGl0ID09
IGdGb250RGF0YUNhY2hlLT5lbmQoKSkgeworICAgICAgICBTaW1wbGVGb250RGF0YSogZm9udERh
dGEgPSBuZXcgU2ltcGxlRm9udERhdGEoKmZvbnRQbGF0Zm9ybURhdGEpOworICAgICAgICBnRm9u
dERhdGFDYWNoZS0+YWRkKGtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+
KGZvbnREYXRhLCAxKSk7CisgICAgICAgIHJldHVybiBmb250RGF0YTsKKyAgICB9CisgICAgaWYo
IWl0LT5zZWNvbmQuc2Vjb25kKyspIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRh
U2V0LT5jb250YWlucyhpdC0+c2Vjb25kLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhU2V0LT5yZW1vdmUoaXQtPnNlY29uZC5maXJzdCk7CisgICAgfQorICAgIHJldHVybiBpdC0+
c2Vjb25kLmZpcnN0OwogfQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKQEAgLTg0LDggKzIyNCw1
MiBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250
Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBXZWJDb3JlOjpTaW1wbGVGb250RGF0YSopCit2
b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSkKIHsKKyAgICBBU1NFUlQoZ0ZvbnREYXRhQ2FjaGUpOworICAgIEFTU0VS
VCghZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSBrZXkoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKKyAgICBGb250RGF0YUNhY2hlOjpp
dGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKGtleSk7CisgICAgQVNTRVJUKGl0ICE9
IGdGb250RGF0YUNhY2hlLT5lbmQoKSk7CisgICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKSB7
CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5hZGQoaXQtPnNlY29uZC5maXJzdCk7Cisg
ICAgICAgIGlmIChnSW5hY3RpdmVGb250RGF0YVNldC0+c2l6ZSgpID4gY01heEluYWN0aXZlRm9u
dERhdGEpCisgICAgICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERh
dGFTZXQtPnNpemUoKSAtIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhKTsKKyAgICB9Cit9CisKK3Zv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQoreworICAgIHN0
YXRpYyBib29sIGlzUHVyZ2luZzsgIC8vIEd1YXJkIGFnYWluc3QgcmVlbnRyeSB3aGVuIGUuZy4g
YSBkZWxldGVkIEZvbnREYXRhIHJlbGVhc2VzIGl0cyBzbWFsbCBjYXBzIEZvbnREYXRhLgorICAg
IGlmIChpc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlzUHVyZ2luZyA9IHRydWU7
CisKKyAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBpdCA9
IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpOworICAgIExpc3RIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5lbmQo
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICYmIGl0ICE9IGVuZDsgKytpLCArK2l0
KSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgPSAoKml0KS0+cGxhdGZv
cm1EYXRhKCk7CisgICAgICAgIHBhaXI8U2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZD4gZm9udERh
dGFQYWlyID0gZ0ZvbnREYXRhQ2FjaGUtPnRha2Uoa2V5KTsKKyAgICAgICAgQVNTRVJUKGZvbnRE
YXRhUGFpci5maXJzdCAhPSAwKTsKKyAgICAgICAgQVNTRVJUKCFmb250RGF0YVBhaXIuc2Vjb25k
KTsKKyAgICAgICAgZGVsZXRlIGZvbnREYXRhUGFpci5maXJzdDsKKworICAgICAgICBGb250UGxh
dGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT50YWtlKGtl
eSk7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEpCisgICAgICAgICAgICBkZWxldGUgcGxhdGZv
cm1EYXRhOworICAgIH0KKworICAgIGlmIChpdCA9PSBlbmQpIHsKKyAgICAgICAgLy8gUmVtb3Zl
ZCBldmVyeXRoaW5nCisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5jbGVhcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5yZW1vdmUoZ0luYWN0aXZlRm9udERhdGFTZXQt
PmJlZ2luKCkpOworICAgIH0KKworICAgIGlzUHVyZ2luZyA9IGZhbHNlOwogfQogCiB2b2lkIEZv
bnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciopCkBAIC05OCwxMCArMjgyLDEwIEBAIHZv
aWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yKikKIAogdm9pZCBGb250Q2Fj
aGU6OmludmFsaWRhdGUoKQogewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkKKyAg
ICBpZiAoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUgfHwgIWdGb250RGF0YUNhY2hlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5jbGVhcigpOworICAgIHB1
cmdlSW5hY3RpdmVGb250RGF0YSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAK
aW5kZXggMjllNzcxOC4uNmIwZGIyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1
ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKIAogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKICNpbmNsdWRlICJTZWdtZW50ZWRGb250RGF0YS5oIgogCiAjaW5jbHVkZSA8
UURlYnVnPgpAQCAtNTgsOCArNTksMTUgQEAgdm9pZCBGb250RmFsbGJhY2tMaXN0OjppbnZhbGlk
YXRlKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGb250U2VsZWN0b3I+IGZvbnRTZWwKIAogdm9p
ZCBGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEoKQogewotICAgIGlmIChtX2ZvbnRM
aXN0LnNpemUoKSkKLSAgICAgICAgZGVsZXRlIG1fZm9udExpc3RbMF0uZmlyc3Q7CisgICAgdW5z
aWduZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRm9udHM7ICsraSkgeworICAgICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNv
bmQpCisgICAgICAgICAgICBkZWxldGUgbV9mb250TGlzdFtpXS5maXJzdDsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVk
KCkpOworICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2Fz
dDxjb25zdCBTaW1wbGVGb250RGF0YSo+KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKKyAgICAgICAg
fQorICAgIH0KICAgICBtX2ZvbnRMaXN0LmNsZWFyKCk7CiB9CiAKQEAgLTgzLDYgKzkxLDEzIEBA
IGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNv
cmU6OkZvbnQqIF9mb250LCB1bnNpZ25lCiAgICAgaWYgKGluZGV4ICE9IDApCiAgICAgICAgIHJl
dHVybiAwOwogCisgICAgLy8gU2VhcmNoIGZvciB0aGUgV2ViQ29yZSBmb250IHRoYXQgaXMgYWxy
ZWFkeSBpbiB0aGUgbGlzdAorICAgIGZvciAoaW50IGkgPSBtX2ZvbnRMaXN0LnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPiBpdGVt
ID0gbV9mb250TGlzdFtpXTsKKyAgICAgICAgaWYgKCFpdGVtLnNlY29uZCkKKyAgICAgICAgICAg
IHJldHVybiBpdGVtLmZpcnN0OworICAgIH0KKwogICAgIC8vIFVzZSB0aGUgRm9udFNlbGVjdG9y
IHRvIGdldCBhIFdlYkNvcmUgZm9udCBhbmQgdGhlbiBmYWxsYmFjayB0byBRdAogICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBfZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7
CiAgICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgpOwpA
QCAtOTIsNiArMTA3LDggQEAgY29uc3QgRm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZvbnRE
YXRhQXQoY29uc3QgV2ViQ29yZTo6Rm9udCogX2ZvbnQsIHVuc2lnbmUKICAgICAgICAgICAgIGlm
IChkYXRhKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmlzTG9hZGluZygpKQogICAgICAg
ICAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFkYXRhLT5pc0N1c3RvbUZvbnQoKSk7CisgICAgICAgICAgICAgICAgbV9mb250
TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+KGRhdGEsIGZhbHNlKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTEwMSw4ICsxMTgsOCBAQCBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERh
dGFBdChjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udCwgdW5zaWduZQogICAgIGlmIChtX2ZvbnRM
aXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbMF0uZmlyc3Q7CiAKLSAgICBj
b25zdCBGb250RGF0YSogcmVzdWx0ID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURh
dGEoZGVzY3JpcHRpb24pLCBfZm9udC0+d29yZFNwYWNpbmcoKSwgX2ZvbnQtPmxldHRlclNwYWNp
bmcoKSk7Ci0gICAgbV9mb250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+
KHJlc3VsdCwgcmVzdWx0LT5pc0N1c3RvbUZvbnQoKSkpOworICAgIGNvbnN0IEZvbnREYXRhKiBy
ZXN1bHQgPSBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwg
X2ZvbnQtPndvcmRTcGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFjaW5nKCkpLCB0cnVlKTsKKyAg
ICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4ocmVzdWx0LCB0
cnVlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA1ZTk3Njc4Li5hMGUyNDhjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAt
NDEsNiArNDEsMTEgQEAgcHVibGljOgogCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udDsgfQogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mYW1pbHkoKTsgfQorICAg
IGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAgIGJvb2wgaXRhbGljKCkg
Y29uc3QgeyByZXR1cm4gbV9mb250Lml0YWxpYygpOyB9CisgICAgYm9vbCBzbWFsbENhcHMoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnQuY2FwaXRhbGl6YXRpb24oKSA9PSBRRm9udDo6U21hbGxDYXBz
OyB9CisgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5waXhlbFNpemUo
KTsgfQogCiAgICAgZmxvYXQgbV9zaXplOwogICAgIGJvb2wgbV9ib2xkOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCmluZGV4IGYw
ZGQzZWEuLjJmMzcwZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFBsYXRmb3JtRGF0YVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKQEAgLTQxLDkgKzQxLDEwIEBAIEZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
aW50IHdvcmRTCiAgICAgbV9mb250LnNldFBpeGVsU2l6ZShxUm91bmQoZGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCkpKTsKICAgICBtX2ZvbnQuc2V0SXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygp
KTsKICAgICAvLyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBRRm9udCB3ZWln
aHRzLgotICAgIGlmIChkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAwKQorICAg
IGlmIChkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAwKSB7CiAgICAgICAgIG1f
Zm9udC5zZXRXZWlnaHQoUUZvbnQ6OkJvbGQpOwotICAgIGVsc2UKKyAgICAgICAgbV9ib2xkID0g
dHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgbV9mb250LnNldFdlaWdodChRRm9udDo6Tm9ybWFs
KTsKIAogICAgIGJvb2wgc21hbGxDYXBzID0gZGVzY3JpcHRpb24uc21hbGxDYXBzKCk7Cg==
</data>
<flag name="review"
          id="17148"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32941</attachid>
            <date>2009-07-17 08:05:35 -0700</date>
            <delta_ts>2009-07-20 05:44:18 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>fcuf.patch</filename>
            <type>text/plain</type>
            <size>13747</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggNjY4
OTEyZS4uMTNjNTkyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250Q2FjaGVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2Fj
aGVRdC5jcHAKQEAgLTI2LDEwICsyNiwxMyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKLSNpbmNsdWRlIDxRSGFzaD4KK3VzaW5nIG5hbWVzcGFjZSBXVEY7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDcsMzYgKzUwLDE3MyBAQCB2b2lkIEZvbnRD
YWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBW
ZWN0b3I8dW5zaWduZQogewogfQogCi10eXBlZGVmIFFIYXNoPEZvbnREZXNjcmlwdGlvbiwgRm9u
dFBsYXRmb3JtRGF0YSo+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKKy8vIFRoaXMgdHlwZSBtdXN0
IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBvbmUgd2hp
Y2gKKy8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgorY2xhc3MgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICAgICAgOiBtX2Zh
bWlseU5hbWUoKQorICAgICAgICAsIG1fYm9sZChmYWxzZSkKKyAgICAgICAgLCBtX3NpemUocVJv
dW5kKGRlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpKQorICAgICAgICAsIG1faXRhbGlj
KGRlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICAsIG1fc21hbGxDYXBzKGRlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gUUZvbnQgd2VpZ2h0cyBpbiBGb250UGxh
dGZvcm1EYXRhJ3MgY3RvciBhbmQgZm9sbG93IGl0IGhlcmUKKyAgICAgICAgaWYgKGRlc2NyaXB0
aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisgICAgICAgICAgICBtX2JvbGQgPSB0cnVl
OwogCi0vLyB1c2luZyBRX0dMT0JBTF9TVEFUSUMgbGVhZHMgdG8gY3Jhc2guIFRPRE8gaW52ZXN0
aWdhdGUgdGhlIHdheSB0byBmaXggdGhpcy4KLXN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUq
IGdGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisgICAgICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWls
eSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKKyAgICAgICAgd2hpbGUgKGZhbWlseSkgeworICAg
ICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsKKyAgICAgICAg
ICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOworICAgICAgICAgICAgaWYgKGZhbWlseSkKKyAg
ICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcsJyk7CisgICAgICAgIH0KIAotdWlu
dCBxSGFzaChjb25zdCBGb250RGVzY3JpcHRpb24mIGtleSkKLXsKLSAgICB1aW50IHZhbHVlID0g
Q2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbHkoKS5mYW1pbHkoKSk7Ci0gICAgdmFsdWUg
Xj0ga2V5LmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgdmFsdWUgXj0gc3RhdGljX2Nhc3Q8aW50
PihrZXkud2VpZ2h0KCkpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KKyAgICAgICAgY29tcHV0ZUhh
c2goKTsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgZm9udERhdGEpCisgICAgICAgIDogbV9mYW1pbHlOYW1lKHN0YXRpY19jYXN0
PFN0cmluZz4oZm9udERhdGEuZmFtaWx5KCkpKQorICAgICAgICAsIG1fc2l6ZShmb250RGF0YS5w
aXhlbFNpemUoKSkKKyAgICAgICAgLCBtX2JvbGQoZm9udERhdGEuYm9sZCgpKQorICAgICAgICAs
IG1faXRhbGljKGZvbnREYXRhLml0YWxpYygpKQorICAgICAgICAsIG1fc21hbGxDYXBzKGZvbnRE
YXRhLnNtYWxsQ2FwcygpKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsKKyAgICAgICAgY29t
cHV0ZUhhc2goKTsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3NpemUoaGFzaFRhYmxlRGVsZXRlZFNpemUoKSkgeyB9
CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZSA9PSBoYXNoVGFibGVEZWxldGVkU2l6ZSgpOyB9CisKKyAgICBlbnVtIEhhc2hUYWJsZUVtcHR5
VmFsdWVUeXBlIHsgSGFzaFRhYmxlRW1wdHlWYWx1ZSB9OworCisgICAgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5KEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQorICAgICAgICA6IG1fZmFtaWx5TmFt
ZSgpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9ib2xkKGZhbHNlKQorICAgICAg
ICAsIG1faXRhbGljKGZhbHNlKQorICAgICAgICAsIG1fc21hbGxDYXBzKGZhbHNlKQorICAgICAg
ICAsIG1faGFzaCgwKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2hhc2ggIT0gb3RoZXIubV9oYXNoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShtX2ZhbWlseU5hbWUsIG90aGVyLm1fZmFt
aWx5TmFtZSkgJiYgbV9zaXplID09IG90aGVyLm1fc2l6ZSAmJgorICAgICAgICAgICAgbV9ib2xk
ID09IG90aGVyLm1fYm9sZCAmJiBtX2l0YWxpYyA9PSBvdGhlci5tX2l0YWxpYyAmJiBtX3NtYWxs
Q2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwczsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hhc2g7CisgICAgfQorCisgICAgdm9pZCBj
b21wdXRlSGFzaCgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKKyAg
ICAgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaChtX2ZhbWlseU5hbWUpLAorICAgICAgICAg
ICAgbV9zaXplIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYm9sZCA8PCBzaXplb2YodW5zaWdu
ZWQpICogOCAtIDEpCisgICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9p
dGFsaWMpIDw8IHNpemVvZih1bnNpZ25lZCkgKjggLSAyCisgICAgICAgICAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9zbWFsbENhcHMpIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0g
MworICAgICAgICB9OworICAgICAgICBtX2hhc2ggPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChy
ZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBz
aXplb2YoVUNoYXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fZmFtaWx5TmFt
ZTsKKyAgICBpbnQgbV9zaXplOworICAgIGJvb2wgbV9ib2xkOworICAgIGJvb2wgbV9pdGFsaWM7
CisgICAgYm9vbCBtX3NtYWxsQ2FwczsKKyAgICB1bnNpZ25lZCBtX2hhc2g7CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVsZXRlZFNpemUoKSB7IHJldHVybiAweEZGRkZGRkZGVTsg
fQorfTsKKworc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CisKK3N0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6
OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4geworICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIGtleSwgKEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRhYmxlRW1wdHlWYWx1ZSkpOworICAgICAgICByZXR1cm4g
a2V5OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBs
YXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQorICAgIHsKKyAgICAgICAgbmV3ICgmc2xvdCkgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsKKyAgICB9Cit9OworCit0eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5LCBGb250UGxhdGZvcm1EYXRhKiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisK
Ky8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJQyBsZWFkcyB0byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0
ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgorc3RhdGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSogZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUpCiB7CiAgICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQogICAgICAgICBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKIAotICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIGZvbnREYXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+dmFsdWUoZGVz
Y3JpcHRpb24sIDApOwotICAgIGlmICghZm9udERhdGEpIHsKLSAgICAgICAgZm9udERhdGEgPSAg
bmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24pOwotICAgICAgICBnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlLT5pbnNlcnQoZGVzY3JpcHRpb24sIGZvbnREYXRhKTsKKyAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBw
bGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5nZXQoa2V5KTsKKyAgICBpZiAo
IXBsYXRmb3JtRGF0YSkgeworICAgICAgICBwbGF0Zm9ybURhdGEgPSBuZXcgRm9udFBsYXRmb3Jt
RGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmFkZChr
ZXksIHBsYXRmb3JtRGF0YSk7CiAgICAgfQotCi0gICAgcmV0dXJuIGZvbnREYXRhOworICAgIHJl
dHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLVNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldENh
Y2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqKQordHlwZWRlZiBIYXNoTWFwPEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWdu
ZWQ+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7CisKK3N0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERh
dGFDYWNoZSA9IDA7CisKK3N0YXRpYyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAx
MDsKK3N0YXRpYyBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSA1OworCitzdGF0
aWMgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZ0luYWN0aXZlRm9udERhdGFT
ZXQgPSAwOworCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250RGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhKQogewotICAgIHJldHVybiAw
OworICAgIGlmICghZ0ZvbnREYXRhQ2FjaGUpIHsKKyAgICAgICAgZ0ZvbnREYXRhQ2FjaGUgPSBu
ZXcgRm9udERhdGFDYWNoZTsKKyAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQgPSBuZXcgTGlz
dEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjsKKyAgICB9CisKKyAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5KCpmb250UGxhdGZvcm1EYXRhKTsKKyAgICBGb250RGF0YUNhY2hl
OjppdGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKGtleSk7CisgICAgaWYgKGl0ID09
IGdGb250RGF0YUNhY2hlLT5lbmQoKSkgeworICAgICAgICBTaW1wbGVGb250RGF0YSogZm9udERh
dGEgPSBuZXcgU2ltcGxlRm9udERhdGEoKmZvbnRQbGF0Zm9ybURhdGEpOworICAgICAgICBnRm9u
dERhdGFDYWNoZS0+YWRkKGtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+
KGZvbnREYXRhLCAxKSk7CisgICAgICAgIHJldHVybiBmb250RGF0YTsKKyAgICB9CisgICAgaWYo
IWl0LT5zZWNvbmQuc2Vjb25kKyspIHsKKyAgICAgICAgQVNTRVJUKGdJbmFjdGl2ZUZvbnREYXRh
U2V0LT5jb250YWlucyhpdC0+c2Vjb25kLmZpcnN0KSk7CisgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhU2V0LT5yZW1vdmUoaXQtPnNlY29uZC5maXJzdCk7CisgICAgfQorICAgIHJldHVybiBpdC0+
c2Vjb25kLmZpcnN0OwogfQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKQEAgLTg0LDggKzIyNCw1
MiBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250
Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBXZWJDb3JlOjpTaW1wbGVGb250RGF0YSopCit2
b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSkKIHsKKyAgICBBU1NFUlQoZ0ZvbnREYXRhQ2FjaGUpOworICAgIEFTU0VS
VCghZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSBrZXkoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKKyAgICBGb250RGF0YUNhY2hlOjpp
dGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5maW5kKGtleSk7CisgICAgQVNTRVJUKGl0ICE9
IGdGb250RGF0YUNhY2hlLT5lbmQoKSk7CisgICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKSB7
CisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5hZGQoaXQtPnNlY29uZC5maXJzdCk7Cisg
ICAgICAgIGlmIChnSW5hY3RpdmVGb250RGF0YVNldC0+c2l6ZSgpID4gY01heEluYWN0aXZlRm9u
dERhdGEpCisgICAgICAgICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERh
dGFTZXQtPnNpemUoKSAtIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhKTsKKyAgICB9Cit9CisKK3Zv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IGNvdW50KQoreworICAgIHN0
YXRpYyBib29sIGlzUHVyZ2luZzsgIC8vIEd1YXJkIGFnYWluc3QgcmVlbnRyeSB3aGVuIGUuZy4g
YSBkZWxldGVkIEZvbnREYXRhIHJlbGVhc2VzIGl0cyBzbWFsbCBjYXBzIEZvbnREYXRhLgorICAg
IGlmIChpc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlzUHVyZ2luZyA9IHRydWU7
CisKKyAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBpdCA9
IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpOworICAgIExpc3RIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5lbmQo
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50ICYmIGl0ICE9IGVuZDsgKytpLCArK2l0
KSB7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkgPSAoKml0KS0+cGxhdGZv
cm1EYXRhKCk7CisgICAgICAgIHBhaXI8U2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZD4gZm9udERh
dGFQYWlyID0gZ0ZvbnREYXRhQ2FjaGUtPnRha2Uoa2V5KTsKKyAgICAgICAgQVNTRVJUKGZvbnRE
YXRhUGFpci5maXJzdCAhPSAwKTsKKyAgICAgICAgQVNTRVJUKCFmb250RGF0YVBhaXIuc2Vjb25k
KTsKKyAgICAgICAgZGVsZXRlIGZvbnREYXRhUGFpci5maXJzdDsKKworICAgICAgICBGb250UGxh
dGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT50YWtlKGtl
eSk7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEpCisgICAgICAgICAgICBkZWxldGUgcGxhdGZv
cm1EYXRhOworICAgIH0KKworICAgIGlmIChpdCA9PSBlbmQpIHsKKyAgICAgICAgLy8gUmVtb3Zl
ZCBldmVyeXRoaW5nCisgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5jbGVhcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAg
ICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5yZW1vdmUoZ0luYWN0aXZlRm9udERhdGFTZXQt
PmJlZ2luKCkpOworICAgIH0KKworICAgIGlzUHVyZ2luZyA9IGZhbHNlOwogfQogCiB2b2lkIEZv
bnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciopCkBAIC05OCwxMCArMjgyLDEwIEBAIHZv
aWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yKikKIAogdm9pZCBGb250Q2Fj
aGU6OmludmFsaWRhdGUoKQogewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkKKyAg
ICBpZiAoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUgfHwgIWdGb250RGF0YUNhY2hlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5jbGVhcigpOworICAgIHB1
cmdlSW5hY3RpdmVGb250RGF0YSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAK
aW5kZXggMjllNzcxOC4uMTkxNWM2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1
ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKIAogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKICNpbmNsdWRlICJTZWdtZW50ZWRGb250RGF0YS5oIgogCiAjaW5jbHVkZSA8
UURlYnVnPgpAQCAtNTgsOSArNTksMTUgQEAgdm9pZCBGb250RmFsbGJhY2tMaXN0OjppbnZhbGlk
YXRlKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGb250U2VsZWN0b3I+IGZvbnRTZWwKIAogdm9p
ZCBGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEoKQogewotICAgIGlmIChtX2ZvbnRM
aXN0LnNpemUoKSkKLSAgICAgICAgZGVsZXRlIG1fZm9udExpc3RbMF0uZmlyc3Q7Ci0gICAgbV9m
b250TGlzdC5jbGVhcigpOworICAgIHVuc2lnbmVkIG51bUZvbnRzID0gbV9mb250TGlzdC5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fZm9udExpc3RbaV0uc2Vjb25kKQorICAgICAgICAgICAgZGVsZXRlIG1fZm9udExp
c3RbaV0uZmlyc3Q7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRM
aXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRlZCgpKTsKKyAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5y
ZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRM
aXN0W2ldLmZpcnN0KSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgRm9udEZhbGxiYWNr
TGlzdDo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgV2ViQ29yZTo6Rm9udCogZm9udCkgY29uc3QKQEAg
LTgzLDYgKzkwLDEzIEBAIGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0
YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250LCB1bnNpZ25lCiAgICAgaWYgKGluZGV4ICE9
IDApCiAgICAgICAgIHJldHVybiAwOwogCisgICAgLy8gU2VhcmNoIGZvciB0aGUgV2ViQ29yZSBm
b250IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdAorICAgIGZvciAoaW50IGkgPSBtX2ZvbnRM
aXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHBhaXI8Y29uc3QgRm9udERh
dGEqLCBib29sPiBpdGVtID0gbV9mb250TGlzdFtpXTsKKyAgICAgICAgaWYgKCFpdGVtLnNlY29u
ZCkKKyAgICAgICAgICAgIHJldHVybiBpdGVtLmZpcnN0OworICAgIH0KKwogICAgIC8vIFVzZSB0
aGUgRm9udFNlbGVjdG9yIHRvIGdldCBhIFdlYkNvcmUgZm9udCBhbmQgdGhlbiBmYWxsYmFjayB0
byBRdAogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBfZm9udC0+Zm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0
aW9uLmZhbWlseSgpOwpAQCAtOTIsNiArMTA2LDggQEAgY29uc3QgRm9udERhdGEqIEZvbnRGYWxs
YmFja0xpc3Q6OmZvbnREYXRhQXQoY29uc3QgV2ViQ29yZTo6Rm9udCogX2ZvbnQsIHVuc2lnbmUK
ICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmlzTG9h
ZGluZygpKQogICAgICAgICAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IHRydWU7
CisgICAgICAgICAgICAgICAgaWYgKCFkYXRhLT5pc0N1c3RvbUZvbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9mb250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+KGRh
dGEsIGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTEwMSw4ICsxMTcsOCBAQCBjb25zdCBGb250RGF0YSogRm9udEZhbGxi
YWNrTGlzdDo6Zm9udERhdGFBdChjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udCwgdW5zaWduZQog
ICAgIGlmIChtX2ZvbnRMaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbMF0u
Zmlyc3Q7CiAKLSAgICBjb25zdCBGb250RGF0YSogcmVzdWx0ID0gbmV3IFNpbXBsZUZvbnREYXRh
KEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24pLCBfZm9udC0+d29yZFNwYWNpbmcoKSwgX2Zv
bnQtPmxldHRlclNwYWNpbmcoKSk7Ci0gICAgbV9mb250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBG
b250RGF0YSosIGJvb2w+KHJlc3VsdCwgcmVzdWx0LT5pc0N1c3RvbUZvbnQoKSkpOworICAgIGNv
bnN0IEZvbnREYXRhKiByZXN1bHQgPSBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0
YShkZXNjcmlwdGlvbiwgX2ZvbnQtPndvcmRTcGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFjaW5n
KCkpLCB0cnVlKTsKKyAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRhKiwg
Ym9vbD4ocmVzdWx0LCB0cnVlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA1ZTk3Njc4
Li5hMGUyNDhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQ
bGF0Zm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaApAQCAtNDEsNiArNDEsMTEgQEAgcHVibGljOgogCiAgICAgUUZvbnQgZm9udCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKyAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5m
YW1pbHkoKTsgfQorICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAg
IGJvb2wgaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250Lml0YWxpYygpOyB9CisgICAgYm9v
bCBzbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuY2FwaXRhbGl6YXRpb24oKSA9PSBR
Rm9udDo6U21hbGxDYXBzOyB9CisgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udC5waXhlbFNpemUoKTsgfQogCiAgICAgZmxvYXQgbV9zaXplOwogICAgIGJvb2wgbV9ib2xk
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1E
YXRhUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
UXQuY3BwCmluZGV4IGYwZGQzZWEuLjJmMzcwZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKQEAgLTQxLDkgKzQxLDEwIEBA
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgaW50IHdvcmRTCiAgICAgbV9mb250LnNldFBpeGVsU2l6ZShxUm91bmQo
ZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpKTsKICAgICBtX2ZvbnQuc2V0SXRhbGljKGRlc2Ny
aXB0aW9uLml0YWxpYygpKTsKICAgICAvLyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVl
cyB0byBRRm9udCB3ZWlnaHRzLgotICAgIGlmIChkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250
V2VpZ2h0NjAwKQorICAgIGlmIChkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAw
KSB7CiAgICAgICAgIG1fZm9udC5zZXRXZWlnaHQoUUZvbnQ6OkJvbGQpOwotICAgIGVsc2UKKyAg
ICAgICAgbV9ib2xkID0gdHJ1ZTsKKyAgICB9IGVsc2UKICAgICAgICAgbV9mb250LnNldFdlaWdo
dChRRm9udDo6Tm9ybWFsKTsKIAogICAgIGJvb2wgc21hbGxDYXBzID0gZGVzY3JpcHRpb24uc21h
bGxDYXBzKCk7Cg==
</data>
<flag name="review"
          id="17285"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33080</attachid>
            <date>2009-07-20 05:44:18 -0700</date>
            <delta_ts>2009-07-20 06:34:45 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>fcuf.patch</filename>
            <type>text/plain</type>
            <size>17482</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2IxOGNhYi4uMDI3MWE1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAwOS0wNy0yMCAgQmFsYXpzIEtlbGVt
ZW4gIDxrZWxlbWVuLmJhbGF6cy4zQHN0dWQudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBmb250IGNhY2hlIHJld29ya2lu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcyNjUK
KworICAgICAgICBSZWltcGxlbWVudGVkIFF0J3MgRm9udENhY2hlIGluIGEgd2F5IHRoYXQgZm9s
bG93cyB0aGUgc2hhcmVkIG9uZS4KKyAgICAgICAgTm93IHdlIGNhbiByZWxlYXNlIGl0cyBlbGVt
ZW50cyB3aGVuIHRob3NlIGJlY2FtZSBpbmFjdGl2ZS4KKyAgICAgICAgRm9udEZhbGxiYWNrTGlz
dCBoYWQgYmVlbiBjaGFuZ2VkIHRvIGJlIGFibGUgdG8gaG9sZCBXZWJDb3JlIGZvbnRzIGluIGl0
cyBsaXN0IGFuZCB0byBiZSBhYmxlIHRvIHJlbGVhc2UgYSBGb250RGF0YSB3aGF0IGlzIGluIHRo
ZSBjYWNoZS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIHNvIG5vIHRlc3RzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5OjpGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5Ojppc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXk6Oik6IEtleSB0eXBlIGZvciB0aGUgY2FjaGUgb2YgRm9udFBsYXRmb3JtRGF0YSBv
YmplY3RzLgorICAgICAgICBJdCBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBhIEZvbnRQbGF0Zm9y
bURhdGEgb3IgZnJvbSBhIEZvbnREZXNjcmlwdGlvbi4gVGhlIGtleXMgaGF2ZSB0byBiZSBjb25z
aXN0ZW50CisgICAgICAgIHdpdGggRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mKSAtIGlmIHdlIGNyZWF0ZSB0aGUgc2FtZQorICAgICAgICBG
b250UGxhdGZvcm1EYXRhIGZyb20gdHdvIEZvbnREZXNjcmlwdGlvbiB0aGVuIHdlIGhhdmUgdG8g
Y3JlYXRlIHRoZSBzYW1lIGtleSBmcm9tIHRoZW0sIGFuZCB2aWNhIHZlcnNhLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6aGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk6OmNvbXB1dGVIYXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6aGFzaFRhYmxlRGVsZXRlZFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaDo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoOjplcXVhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM6OmVtcHR5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzOjpj
b25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOiBHZXQgYSBGb250RGVzY3JpcHRpb24g
YW5kIHJldHVybnMgYSBGb250UGxhdGZvcm1EYXRhLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZXRDYWNoZWRGb250RGF0YSk6IEdldCBhIEZvbnRQbGF0Zm9ybURhdGEgYW5kIHJldHVy
bnMgYSBTaW1wbGVGb250RGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cmVsZWFz
ZUZvbnREYXRhKTogR2V0IGEgU2ltcGxlRm9udERhdGEgYW5kIHJlbGVhc2VzIGl0IGZyb20gdGhl
IGNhY2hlLiBBbHNvIHJlbGVhc2VzIHRoZSBhcHByb3ByaWF0ZSBGb250UGxhdGZvcm1EYXRhLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOiBGcmVl
cyBpbmFjdGl2ZSBlbGVtZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxp
ZGF0ZSk6IEZyZWVzIGFsbCBpbmFjdGl2ZSBlbGVtZW50cyAoY2FsbCBwdXJnZUluYWN0aXZlRm9u
dERhdGEgd2l0aCBkZWZhdWx0IGFyZ3VtZW50KQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFsbGJh
Y2tMaXN0OjpyZWxlYXNlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhbGxiYWNr
TGlzdDo6Zm9udERhdGFBdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBs
YXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5
KTogR2V0dGVyLiBJdCBpcyBuZWVkZWQgZm9yIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmJvbGQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Oml0YWxpYyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c21hbGxDYXBzKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpwaXhlbFNpemUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6IFNldCBtX2JvbGQuCisKIDIw
MDktMDctMTUgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggNjY4OTEyZS4uZTkyYmVmMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKQEAgLTEsNiArMSw4IEBACiAv
KgogICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwNyBOaWNob2xhcyBTaGFua3MgPHdl
YmtpdEBuaWNrc2hhbmtzLmNvbT4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMTAgKzI4LDEz
IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2luY2x1
ZGUgPFFIYXNoPgordXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00NywzNiArNTIsMTczIEBAIHZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rvcjx1bnNpZ25lCiB7CiB9CiAKLXR5
cGVkZWYgUUhhc2g8Rm9udERlc2NyaXB0aW9uLCBGb250UGxhdGZvcm1EYXRhKj4gRm9udFBsYXRm
b3JtRGF0YUNhY2hlOworLy8gVGhpcyB0eXBlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIEZvbnRQ
bGF0Zm9ybURhdGEncyBjdG9yIC0gdGhlIG9uZSB3aGljaAorLy8gZ2V0cyBGb250RGVzY3JpcHRp
b24gYXMgaXQncyBwYXJhbWV0ZXIuCitjbGFzcyBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewor
cHVibGljOgorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQorICAgICAgICA6IG1fZmFtaWx5TmFtZSgpCisgICAgICAgICwgbV9i
b2xkKGZhbHNlKQorICAgICAgICAsIG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6
ZSgpKQorICAgICAgICAsIG1faXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICAs
IG1fc21hbGxDYXBzKGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQorICAgICAgICAsIG1faGFzaCgw
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8g
UUZvbnQgd2VpZ2h0cyBpbiBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciBhbmQgZm9sbG93IGl0IGhl
cmUKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHQ2MDApCisg
ICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwogCi0vLyB1c2luZyBRX0dMT0JBTF9TVEFUSUMgbGVh
ZHMgdG8gY3Jhc2guIFRPRE8gaW52ZXN0aWdhdGUgdGhlIHdheSB0byBmaXggdGhpcy4KLXN0YXRp
YyBGb250UGxhdGZvcm1EYXRhQ2FjaGUqIGdGb250UGxhdGZvcm1EYXRhQ2FjaGU7CisgICAgICAg
IGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKKyAgICAg
ICAgd2hpbGUgKGZhbWlseSkgeworICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1p
bHktPmZhbWlseSgpKTsKKyAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOworICAg
ICAgICAgICAgaWYgKGZhbWlseSkKKyAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5k
KCcsJyk7CisgICAgICAgIH0KIAotdWludCBxSGFzaChjb25zdCBGb250RGVzY3JpcHRpb24mIGtl
eSkKLXsKLSAgICB1aW50IHZhbHVlID0gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKGtleS5mYW1pbHko
KS5mYW1pbHkoKSk7Ci0gICAgdmFsdWUgXj0ga2V5LmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAg
dmFsdWUgXj0gc3RhdGljX2Nhc3Q8aW50PihrZXkud2VpZ2h0KCkpOwotICAgIHJldHVybiB2YWx1
ZTsKLX0KKyAgICAgICAgY29tcHV0ZUhhc2goKTsKKyAgICB9CisKKyAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCisgICAgICAgIDog
bV9mYW1pbHlOYW1lKHN0YXRpY19jYXN0PFN0cmluZz4oZm9udERhdGEuZmFtaWx5KCkpKQorICAg
ICAgICAsIG1fc2l6ZShmb250RGF0YS5waXhlbFNpemUoKSkKKyAgICAgICAgLCBtX2JvbGQoZm9u
dERhdGEuYm9sZCgpKQorICAgICAgICAsIG1faXRhbGljKGZvbnREYXRhLml0YWxpYygpKQorICAg
ICAgICAsIG1fc21hbGxDYXBzKGZvbnREYXRhLnNtYWxsQ2FwcygpKQorICAgICAgICAsIG1faGFz
aCgwKQorICAgIHsKKyAgICAgICAgY29tcHV0ZUhhc2goKTsKKyAgICB9CisKKyAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3NpemUoaGFz
aFRhYmxlRGVsZXRlZFNpemUoKSkgeyB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBoYXNoVGFibGVEZWxldGVkU2l6ZSgpOyB9CisK
KyAgICBlbnVtIEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlIHsgSGFzaFRhYmxlRW1wdHlWYWx1ZSB9
OworCisgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBl
KQorICAgICAgICA6IG1fZmFtaWx5TmFtZSgpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAg
ICwgbV9ib2xkKGZhbHNlKQorICAgICAgICAsIG1faXRhbGljKGZhbHNlKQorICAgICAgICAsIG1f
c21hbGxDYXBzKGZhbHNlKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2hhc2ggIT0gb3RoZXIubV9oYXNoKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSht
X2ZhbWlseU5hbWUsIG90aGVyLm1fZmFtaWx5TmFtZSkgJiYgbV9zaXplID09IG90aGVyLm1fc2l6
ZSAmJgorICAgICAgICAgICAgbV9ib2xkID09IG90aGVyLm1fYm9sZCAmJiBtX2l0YWxpYyA9PSBv
dGhlci5tX2l0YWxpYyAmJiBtX3NtYWxsQ2FwcyA9PSBvdGhlci5tX3NtYWxsQ2FwczsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hh
c2g7CisgICAgfQorCisgICAgdm9pZCBjb21wdXRlSGFzaCgpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBoYXNoQ29kZXNbXSA9IHsKKyAgICAgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaCht
X2ZhbWlseU5hbWUpLAorICAgICAgICAgICAgbV9zaXplIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fYm9sZCA8PCBzaXplb2YodW5zaWduZWQpICogOCAtIDEpCisgICAgICAgICAgICAgICAgfCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9pdGFsaWMpIDw8IHNpemVvZih1bnNpZ25lZCkgKjggLSAy
CisgICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zbWFsbENhcHMpIDw8
IHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMworICAgICAgICB9OworICAgICAgICBtX2hhc2ggPSBT
dHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVz
KSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fZmFtaWx5TmFtZTsKKyAgICBpbnQgbV9zaXplOworICAgIGJvb2wgbV9i
b2xkOworICAgIGJvb2wgbV9pdGFsaWM7CisgICAgYm9vbCBtX3NtYWxsQ2FwczsKKyAgICB1bnNp
Z25lZCBtX2hhc2g7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVsZXRlZFNpemUo
KSB7IHJldHVybiAweEZGRkZGRkZGVTsgfQorfTsKKworc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSYga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpCisgICAgeworICAgICAg
ICByZXR1cm4gYSA9PSBiOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3N0cnVjdCBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGVtcHR5VmFs
dWUoKQorICAgIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXksIGtleSwgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRhYmxlRW1wdHlW
YWx1ZSkpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQorICAgIHsK
KyAgICAgICAgbmV3ICgmc2xvdCkgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9Cit9OworCit0eXBlZGVmIEhh
c2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBGb250UGxhdGZvcm1EYXRhKiwgRm9udFBs
YXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBG
b250UGxhdGZvcm1EYXRhQ2FjaGU7CisKKy8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJQyBsZWFkcyB0
byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgorc3RhdGljIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZSogZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7CiAKIEZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
Ym9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CiAgICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0
YUNhY2hlKQogICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZTsKIAotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnREYXRhID0gZ0ZvbnRQbGF0
Zm9ybURhdGFDYWNoZS0+dmFsdWUoZGVzY3JpcHRpb24sIDApOwotICAgIGlmICghZm9udERhdGEp
IHsKLSAgICAgICAgZm9udERhdGEgPSAgbmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24p
OwotICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5pbnNlcnQoZGVzY3JpcHRpb24sIGZv
bnREYXRhKTsKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsK
KyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlLT5nZXQoa2V5KTsKKyAgICBpZiAoIXBsYXRmb3JtRGF0YSkgeworICAgICAgICBwbGF0Zm9y
bURhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbik7CisgICAgICAgIGdGb250
UGxhdGZvcm1EYXRhQ2FjaGUtPmFkZChrZXksIHBsYXRmb3JtRGF0YSk7CiAgICAgfQotCi0gICAg
cmV0dXJuIGZvbnREYXRhOworICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLVNpbXBsZUZv
bnREYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEqKQordHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjpwYWly
PFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNo
LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7CisKK3N0YXRp
YyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7CisKK3N0YXRpYyBjb25zdCBpbnQg
Y01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKK3N0YXRpYyBjb25zdCBpbnQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAzMjsKKworc3RhdGljIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKKworU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRm
b3JtRGF0YSkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7Cisg
ICAgICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7CisgICAgICAgIGdJbmFj
dGl2ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47
CisgICAgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRmb3Jt
RGF0YSk7CisgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+
ZmluZChrZXkpOworICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKKyAgICAg
ICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxh
dGZvcm1EYXRhKTsKKyAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFpcjxT
aW1wbGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOworICAgICAgICByZXR1cm4g
Zm9udERhdGE7CisgICAgfQorICAgIGlmKCFpdC0+c2Vjb25kLnNlY29uZCsrKSB7CisgICAgICAg
IEFTU0VSVChnSW5hY3RpdmVGb250RGF0YVNldC0+Y29udGFpbnMoaXQtPnNlY29uZC5maXJzdCkp
OworICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+cmVtb3ZlKGl0LT5zZWNvbmQuZmlyc3Qp
OworICAgIH0KKyAgICByZXR1cm4gaXQtPnNlY29uZC5maXJzdDsKIH0KIAogRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYpCkBAIC04NCw4ICsyMjYsNTIgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGEqKQordm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShj
b25zdCBXZWJDb3JlOjpTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiB7CisgICAgQVNTRVJUKGdG
b250RGF0YUNhY2hlKTsKKyAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7CisK
KyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KSk7CisgICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+Zmlu
ZChrZXkpOworICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOworICAgIGlm
ICghLS1pdC0+c2Vjb25kLnNlY29uZCkgeworICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+
YWRkKGl0LT5zZWNvbmQuZmlyc3QpOworICAgICAgICBpZiAoZ0luYWN0aXZlRm9udERhdGFTZXQt
PnNpemUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQorICAgICAgICAgICAgcHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBjVGFyZ2V0SW5hY3RpdmVG
b250RGF0YSk7CisgICAgfQorfQorCit2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGludCBjb3VudCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7ICAvLyBHdWFyZCBh
Z2FpbnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSByZWxlYXNlcyBpdHMg
c21hbGwgY2FwcyBGb250RGF0YS4KKyAgICBpZiAoaXNQdXJnaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBpc1B1cmdpbmcgPSB0cnVlOworCisgICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+YmVnaW4oKTsK
KyAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBlbmQgPSBn
SW5hY3RpdmVGb250RGF0YVNldC0+ZW5kKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dCAmJiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgeworICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOworICAgICAgICBwYWlyPFNpbXBsZUZv
bnREYXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0YUNhY2hlLT50YWtlKGtl
eSk7CisgICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0gMCk7CisgICAgICAgIEFT
U0VSVCghZm9udERhdGFQYWlyLnNlY29uZCk7CisgICAgICAgIGRlbGV0ZSBmb250RGF0YVBhaXIu
Zmlyc3Q7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOworICAgICAgICBpZiAocGxhdGZvcm1EYXRhKQor
ICAgICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKKyAgICB9CisKKyAgICBpZiAoaXQgPT0g
ZW5kKSB7CisgICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZworICAgICAgICBnSW5hY3RpdmVG
b250RGF0YVNldC0+Y2xlYXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+cmVt
b3ZlKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKKyAgICB9CisKKyAgICBpc1B1cmdp
bmcgPSBmYWxzZTsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3Iq
KQpAQCAtOTgsMTAgKzI4NCwxMCBAQCB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRT
ZWxlY3RvciopCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKLSAgICBpZiAoIWdG
b250UGxhdGZvcm1EYXRhQ2FjaGUpCisgICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlIHx8
ICFnRm9udERhdGFDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ0ZvbnRQbGF0Zm9ybURh
dGFDYWNoZS0+Y2xlYXIoKTsKKyAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCmluZGV4IDI5ZTc3MTguLmMyOWZkNTYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAK
QEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAKICNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVk
Rm9udERhdGEuaCIKIAogI2luY2x1ZGUgPFFEZWJ1Zz4KQEAgLTU4LDkgKzU5LDE1IEBAIHZvaWQg
Rm9udEZhbGxiYWNrTGlzdDo6aW52YWxpZGF0ZShXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9u
dFNlbGVjdG9yPiBmb250U2VsCiAKIHZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVsZWFzZUZvbnRE
YXRhKCkKIHsKLSAgICBpZiAobV9mb250TGlzdC5zaXplKCkpCi0gICAgICAgIGRlbGV0ZSBtX2Zv
bnRMaXN0WzBdLmZpcnN0OwotICAgIG1fZm9udExpc3QuY2xlYXIoKTsKKyAgICB1bnNpZ25lZCBu
dW1Gb250cyA9IG1fZm9udExpc3Quc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1Gb250czsgKytpKSB7CisgICAgICAgIGlmIChtX2ZvbnRMaXN0W2ldLnNlY29uZCkKKyAg
ICAgICAgICAgIGRlbGV0ZSBtX2ZvbnRMaXN0W2ldLmZpcnN0OworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9mb250TGlzdFtpXS5maXJzdC0+aXNTZWdtZW50ZWQoKSk7Cisg
ICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5maXJzdCkpOworICAgICAgICB9CisgICAg
fQogfQogCiB2b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBpdGNoKGNvbnN0IFdlYkNv
cmU6OkZvbnQqIGZvbnQpIGNvbnN0CkBAIC04Myw2ICs5MCwxNCBAQCBjb25zdCBGb250RGF0YSog
Rm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udCwg
dW5zaWduZQogICAgIGlmIChpbmRleCAhPSAwKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIC8v
IFNlYXJjaCBmb3IgdGhlIFdlYkNvcmUgZm9udCB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGxpc3QK
KyAgICBmb3IgKGludCBpID0gbV9mb250TGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4gaXRlbSA9IG1fZm9udExpc3RbaV07
CisgICAgICAgIC8vIGl0ZW0uc2Vjb25kIG1lYW5zIHRoYXQgdGhlIGl0ZW0gd2FzIGNyZWF0ZWQg
bG9jYWxseSBvciBub3QKKyAgICAgICAgaWYgKCFpdGVtLnNlY29uZCkKKyAgICAgICAgICAgIHJl
dHVybiBpdGVtLmZpcnN0OworICAgIH0KKwogICAgIC8vIFVzZSB0aGUgRm9udFNlbGVjdG9yIHRv
IGdldCBhIFdlYkNvcmUgZm9udCBhbmQgdGhlbiBmYWxsYmFjayB0byBRdAogICAgIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBfZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgpOwpAQCAt
OTIsNiArMTA3LDEwIEBAIGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0
YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250LCB1bnNpZ25lCiAgICAgICAgICAgICBpZiAo
ZGF0YSkgewogICAgICAgICAgICAgICAgIGlmIChkYXRhLT5pc0xvYWRpbmcoKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOworICAgICAgICAgICAgICAg
IGlmICghZGF0YS0+aXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3Vz
dG9tIGZvbnRzIGNhbiBiZSBmcmVlZCBhbnl0aW1lIHNvIHdlIG11c3Qgbm90IGhvbGQgdGhlbQor
ICAgICAgICAgICAgICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4oZGF0YSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwMSw4ICsxMjAs
OCBAQCBjb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChjb25zdCBX
ZWJDb3JlOjpGb250KiBfZm9udCwgdW5zaWduZQogICAgIGlmIChtX2ZvbnRMaXN0LnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbMF0uZmlyc3Q7CiAKLSAgICBjb25zdCBGb250RGF0
YSogcmVzdWx0ID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRp
b24pLCBfZm9udC0+d29yZFNwYWNpbmcoKSwgX2ZvbnQtPmxldHRlclNwYWNpbmcoKSk7Ci0gICAg
bV9mb250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+KHJlc3VsdCwgcmVz
dWx0LT5pc0N1c3RvbUZvbnQoKSkpOworICAgIGNvbnN0IEZvbnREYXRhKiByZXN1bHQgPSBuZXcg
U2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgX2ZvbnQtPndvcmRT
cGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFjaW5nKCkpLCB0cnVlKTsKKyAgICBtX2ZvbnRMaXN0
LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4ocmVzdWx0LCB0cnVlKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRQbGF0Zm9ybURhdGEuaAppbmRleCA1ZTk3Njc4Li5hMGUyNDhjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtNDEsNiArNDEsMTEg
QEAgcHVibGljOgogCiAgICAgUUZvbnQgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQog
ICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBRU3RyaW5nIGZh
bWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mYW1pbHkoKTsgfQorICAgIGJvb2wgYm9sZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAgIGJvb2wgaXRhbGljKCkgY29uc3QgeyByZXR1
cm4gbV9mb250Lml0YWxpYygpOyB9CisgICAgYm9vbCBzbWFsbENhcHMoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQuY2FwaXRhbGl6YXRpb24oKSA9PSBRRm9udDo6U21hbGxDYXBzOyB9CisgICAgaW50
IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5waXhlbFNpemUoKTsgfQogCiAgICAg
ZmxvYXQgbV9zaXplOwogICAgIGJvb2wgbV9ib2xkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCmluZGV4IGYwZGQzZWEuLjJmMzcw
ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9y
bURhdGFRdC5jcHAKQEAgLTQxLDkgKzQxLDEwIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgaW50IHdvcmRTCiAg
ICAgbV9mb250LnNldFBpeGVsU2l6ZShxUm91bmQoZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkp
KTsKICAgICBtX2ZvbnQuc2V0SXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKTsKICAgICAvLyBG
SVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBRRm9udCB3ZWlnaHRzLgotICAgIGlm
IChkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAwKQorICAgIGlmIChkZXNjcmlw
dGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0NjAwKSB7CiAgICAgICAgIG1fZm9udC5zZXRXZWln
aHQoUUZvbnQ6OkJvbGQpOwotICAgIGVsc2UKKyAgICAgICAgbV9ib2xkID0gdHJ1ZTsKKyAgICB9
IGVsc2UKICAgICAgICAgbV9mb250LnNldFdlaWdodChRRm9udDo6Tm9ybWFsKTsKIAogICAgIGJv
b2wgc21hbGxDYXBzID0gZGVzY3JpcHRpb24uc21hbGxDYXBzKCk7Cg==
</data>
<flag name="review"
          id="17410"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>