<?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>191976</bug_id>
          
          <creation_ts>2018-11-26 12:21:13 -0800</creation_ts>
          <short_desc>[FreeType] Color emoji not properly supported</short_desc>
          <delta_ts>2019-03-27 05:45:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.mozilla.org/show_bug.cgi?id=1509988</see_also>
    
    <see_also>https://bugs.chromium.org/p/chromium/issues/detail?id=908541</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=177040</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>192852</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pacho Ramos">pachoramos1</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>akira</cc>
    
    <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1481626</commentid>
    <comment_count>0</comment_count>
    <who name="Pacho Ramos">pachoramos1</who>
    <bug_when>2018-11-26 12:21:13 -0800</bug_when>
    <thetext>This comes from https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/136

In summary, with Google Chrome, Firefox and Epiphany (using webkit-gtk), sometimes some emojis are shown with Noto Color Emoji while others are shown with the old B&amp;W style.

For example you can see many examples simply looking to the comments of many youtube videos as people seems to like to use a lot of emojis on them and you can see some use Noto Color Emoji while others not: https://www.youtube.com/watch?v=gAirINwjaxE https://www.youtube.com/watch?v=bDb5QMRTCPI https://www.youtube.com/watch?v=bbEoRnaOIbs (and many other random examples)

Looking to &quot;Inspect element&quot; Firefox tool, in &quot;Fonts&quot; section, I see that &quot;Dejavu Sans&quot; is being used to show emojis instead of Noto Color Emoji. I have seen that current default /etc/fonts/conf.avail/60-generic.conf only sets Noto Color Emoji for emoji while, probably, it should also be listed for other &quot;families&quot; to be used over ugly emoji fonts from other font sets.

I suggested that to fontconfig people, but they disagree and think that it&apos;s an issue in the application instead:
https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/136#note_82092

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481643</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-11-26 12:52:50 -0800</bug_when>
    <thetext>My understanding of the problem is that there is no magic by which to prefer an emoji font over other fonts for drawing emoji. So if you want to be sure that Noto Color Emoji to be preferred for drawing emoji, you have to uninstall other fonts that provide those emoji. After all, Deja Vu supports those emoji just fine, albeit without color....

It doesn&apos;t make much sense, of course. That can&apos;t be the desired behavior, surely. But that&apos;s just how fonts work on Linux. So I would bounce this back to the fontconfig maintainers to find some solution. Unfortunately, font-related bug reports really have to be filed by a font expert, because nobody here understands how fontconfing is supposed to work either, nor do we understand our font selection code. We&apos;re totally dependent on the font people to tell us what to do here. So if specific code changes are desired, we can try to implement them; otherwise, it&apos;s WONTFIX, sorry.

P.S. If we do fix this somehow, I&apos;ll await the bug reports that we no longer match the behavior of Chrome and Firefox. :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481847</commentid>
    <comment_count>2</comment_count>
    <who name="Akira TAGOH">akira</who>
    <bug_when>2018-11-27 01:03:53 -0800</bug_when>
    <thetext>I&apos;m not totally sure how webkit picks up fonts. as I told on the fontconfig bug reported above, looking up &quot;emoji&quot; would be preferrable way as Pango does and is quite simpler. fontconfig will returns Noto Color Emoji as long as they are installed.
But if the html rendering engine like webkit has own font management thing as they have own character classification, they need to be improved. that&apos;s why I said this is an application issue. they need to identify emoji and use the special font family for them instead of sans/serif/mono.

Doing the sort of this thing in the code:
$ fc-list :charset=0x1f600
/usr/share/fonts/dejavu/DejaVuSansCondensed-Oblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique
/usr/share/fonts/dejavu/DejaVuSansCondensed-Bold.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold
/usr/share/fonts/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/gdouros-symbola/Symbola.ttf: Symbola:style=Regular
/usr/share/fonts/dejavu/DejaVuSansCondensed.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book
/usr/share/fonts/dejavu/DejaVuSansCondensed-BoldOblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique
/usr/share/fonts/google-noto-emoji/NotoColorEmoji.ttf: Noto Color Emoji:style=Regular
/usr/share/fonts/dejavu/DejaVuSans-Oblique.ttf: DejaVu Sans:style=Oblique
/usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf: DejaVu Sans:style=Bold Oblique

behaves wrong and no surprise even if emoji is renderred as B&amp;W.
Hmm, so I was about to propose a workaround if you do something like the above. but I found a bug in fontconfig that something like this doesn&apos;t work:
$ fc-list :charset=0x1f600:color=true

and fixed this in https://gitlab.freedesktop.org/tagoh/fontconfig/commit/67dcfeb4f6e544ec2f380717e04b25e724669856

I don&apos;t know if this is really the case for this but maybe worth trying.
Anyway, after this fix, the result of the above command is:
$ fc-list :charset=0x1f600:color=true
/usr/share/fonts/google-noto-emoji/NotoColorEmoji.ttf: Noto Color Emoji:style=Regular

This looks not perfect to me since there are no way to change the behavior if someone prefers B&amp;W rather than colored. or you could make an option to use B&amp;W emoji perhaps.

Anyway, hope that helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481854</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-11-27 01:56:47 -0800</bug_when>
    <thetext>Thanks for joining, Akira!

If I understand you properly, your suggestion is to override the font specified by the website whenever displaying emoji characters, e.g. ignore the fonts requested by the website&apos;s CSS:

font-family: Arial, sans;

and instead ask fontconfig specifically for the emoji font (somehow), but only for the specific characters that are emoji. All emoji characters would need to be somehow split out by WebKit into separate font runs (not sure if I&apos;m using the correct terminology there). We could certainly try to do it....

The results would be unexpected if the website uses a custom emoji web font, though, since that font would then be ignored. That&apos;s not great. Maybe matching Chrome (so changing nothing) would be best.

I wonder how Apple handles this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481858</commentid>
    <comment_count>4</comment_count>
    <who name="Akira TAGOH">akira</who>
    <bug_when>2018-11-27 02:08:23 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Thanks for joining, Akira!
&gt; 
&gt; If I understand you properly, your suggestion is to override the font
&gt; specified by the website whenever displaying emoji characters, e.g. ignore
&gt; the fonts requested by the website&apos;s CSS:
&gt; 
&gt; font-family: Arial, sans;
&gt; 
&gt; and instead ask fontconfig specifically for the emoji font (somehow), but
&gt; only for the specific characters that are emoji. All emoji characters would
&gt; need to be somehow split out by WebKit into separate font runs (not sure if
&gt; I&apos;m using the correct terminology there). We could certainly try to do it....
&gt; 
&gt; The results would be unexpected if the website uses a custom emoji web font,
&gt; though, since that font would then be ignored. That&apos;s not great. Maybe
&gt; matching Chrome (so changing nothing) would be best.
&gt; 
&gt; I wonder how Apple handles this.

W3C is about to define &quot;emoji&quot; generic family in CSS Fonts 4 (https://www.w3.org/TR/css-fonts-4/). I guess the web browsers may be sonner or later going to support them. I guess after that, the logic of fonts selection in the html rendering engine might becomes to be more complicated. or it could be a css bug in a content perhaps as if the order of fonts is important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482308</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-27 18:19:16 -0800</bug_when>
    <thetext>font-family: Arial, sans; should still work with combining emoji.

When performing font fallback, the first step is to chop the text up into clusters (advanceByCombiningCharacterSequence()). Each cluster performs font fallback independently. The first font is chosen which supports every code point in the cluster (FontCascade::fontForCombiningCharacterSequence() and Font::canRenderCombiningCharacterSequence()).

Neither Arial nor sans (Helvetica) support emoji characters, so the cluster should end up causing FontCache::systemFallbackForCharacters() to be called. That&apos;s your opportunity to select the emoji font.

When investigating this, I would see which of those functions listed above is returning the wrong thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482350</commentid>
    <comment_count>6</comment_count>
    <who name="Akira TAGOH">akira</who>
    <bug_when>2018-11-27 20:58:35 -0800</bug_when>
    <thetext>There are nothing wrong. but it just needs to take care of emoji forthermore.

As the original reporter says and also I demonstrated at comment#2, DejaVu has emoji now. when DejaVu is picked up for a cluster by performing a fallback of &quot;sans&quot;, it will be used as is unless they didn&apos;t classifiy emoji separately and look up a font for emoji instead of &quot;sans&quot; and so on.

I think the colored emoji should be used by default though, someone might prefers B&amp;W. so browsers may needs to know which one they like:

int
is_color_enabled(void)
{
    FcPattern *pat = FcPatternCreate();
    FcBool b;

    FcPatternAddString (pat, FC_FAMILY, (const FcChar8 *)&quot;emoji&quot;);
    FcConfigSubstitute (NULL, pat, FcMatchPattern);
    FcDefaultSubstitute (pat);
    if (FcPatternGetBool (pat, FC_COLOR, 0, &amp;b) == FcResultMatch)
        return 0;
    return b;
}

if none of colored fonts is available on the list of fonts in CSS, then you can perform another fallback with &quot;emoji&quot;. does it make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482584</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-11-28 12:33:07 -0800</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #5)
&gt; Neither Arial nor sans (Helvetica) support emoji characters, so the cluster
&gt; should end up causing FontCache::systemFallbackForCharacters() to be called.
&gt; That&apos;s your opportunity to select the emoji font.
&gt; 
&gt; When investigating this, I would see which of those functions listed above
&gt; is returning the wrong thing.

I think Akira is right, sans (usually DejaVu on Linux) does support emoji (that&apos;s the problem) and I don&apos;t think any function is necessarily returning the wrong thing. It&apos;s just not designed to work.

(In reply to Akira TAGOH from comment #6)
&gt; if none of colored fonts is available on the list of fonts in CSS, then you
&gt; can perform another fallback with &quot;emoji&quot;. does it make sense?

No, I still don&apos;t understand. Your example shows how to detect if the emoji font supports color, but I&apos;m not sure what you suggest doing with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482843</commentid>
    <comment_count>8</comment_count>
    <who name="Akira TAGOH">akira</who>
    <bug_when>2018-11-28 21:34:34 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #7)
&gt; No, I still don&apos;t understand. Your example shows how to detect if the emoji
&gt; font supports color, but I&apos;m not sure what you suggest doing with that.

Assuming that you have the sort of fonts list with FcPattern (or FcFontSet) from fontconfig by any way and font-family in CSS is set to Arial, sans. they all should have FC_COLOR property in FcPattern. if the target cluster has emoji, you would filter fonts out according to the result of the above function say. then if no fonts available there, which may means no colored emoji fonts is available in sans/serif/mono, you could get a fallback by querying with &quot;emoji&quot; to fontconfig. if people prefers B&amp;W, then you can do choose a font as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482846</commentid>
    <comment_count>9</comment_count>
      <attachid>355977</attachid>
    <who name="Akira TAGOH">akira</who>
    <bug_when>2018-11-28 21:37:36 -0800</bug_when>
    <thetext>Created attachment 355977
example code

The attached code demonstrates how application can fallback against charset. although this doesn&apos;t work as expected because FcFontSort returns Noto * Emoji fonts in the result but you can replace it with what you have. the point is that how you can detect charset what you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488869</commentid>
    <comment_count>10</comment_count>
      <attachid>357567</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-18 06:57:21 -0800</bug_when>
    <thetext>Created attachment 357567
WIP

This seems to work. Myles, what do you think about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488870</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-18 06:58:54 -0800</bug_when>
    <thetext>Attachment 357567 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:83:  Tab found; better to use spaces  [whitespace/tab] [1]
ERROR: Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489301</commentid>
    <comment_count>12</comment_count>
      <attachid>357679</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-19 07:30:15 -0800</bug_when>
    <thetext>Created attachment 357679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489378</commentid>
    <comment_count>13</comment_count>
      <attachid>357679</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2018-12-19 11:29:08 -0800</bug_when>
    <thetext>Comment on attachment 357679
Patch

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

Informal review: A couple of nits, patch looks good overall but I am not an expert
in fonts so it would be good to have an r+ by someone who knows better, like Myles :)

&gt; Source/WebCore/ChangeLog:18
&gt; +        (WebCore::characterSequenceIsEmoji): Checke whether the character sequence is an emoji.

Typo: Checke → Check

&gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:67
&gt; +        if (nextCharacter == 0xFE0F) {

Maybe it would be good to give a name to this constant instead of leaving
magic numbers around in the middle of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490926</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-12-28 02:15:47 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490935</commentid>
    <comment_count>15</comment_count>
      <attachid>357679</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-12-28 09:28:31 -0800</bug_when>
    <thetext>Comment on attachment 357679
Patch

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

Myles might want to review the cross-platform changes after the holidays, but they look relatively straightforward so I don&apos;t think we need to delay.

&gt; Source/WTF/wtf/unicode/CharacterNames.h:103
&gt; +const UChar combiningEnclosingKeycap = 0x20E3;

This should be alphabetized, like the rest of the list.

&gt; Source/WTF/wtf/unicode/CharacterNames.h:170
&gt; +using WTF::Unicode::combiningEnclosingKeycap;

Ditto.

&gt;&gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:67
&gt;&gt; +        if (nextCharacter == 0xFE0F) {
&gt; 
&gt; Maybe it would be good to give a name to this constant instead of leaving
&gt; magic numbers around in the middle of the function.

I think it&apos;s fine; it&apos;s not used anywhere else, and there&apos;s a comment to explain it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491268</commentid>
    <comment_count>16</comment_count>
      <attachid>357679</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-02 14:50:01 -0800</bug_when>
    <thetext>Comment on attachment 357679
Patch

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

I think this is the wrong direction.

&gt; Source/WebCore/platform/graphics/Font.cpp:569
&gt; +        return FontCache::singleton().systemFallbackForCharacters(description, this, isForPlatformFont, false, &amp;codeUnit, 1);

We usually use 2-value enums so it&apos;s clear at the calling site what the meaning of &quot;false&quot; is.

&gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:49
&gt; +static bool characterSequenceIsEmoji(const Vector&lt;UChar, 4&gt;&amp; normalizedCharacters, int32_t normalizedLength)

This logic shouldn&apos;t be necessary; WebKit shouldn&apos;t be in the business of iterating through strings codepoint-by-codepoint.

&gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:136
&gt; +    if (auto systemFallback = FontCache::singleton().systemFallbackForCharacters(m_fontDescription, baseFont, false, isEmoji, characters, length)) {

There are color fonts that don&apos;t support emoji, and it&apos;s conceptually possible to have an emoji font that isn&apos;t color. It isn&apos;t right to pass &quot;isEmoji&quot; to &quot;bool coloredFont&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491389</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-02 23:57:36 -0800</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #16)
&gt; Comment on attachment 357679 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=357679&amp;action=review
&gt; 
&gt; I think this is the wrong direction.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Font.cpp:569
&gt; &gt; +        return FontCache::singleton().systemFallbackForCharacters(description, this, isForPlatformFont, false, &amp;codeUnit, 1);
&gt; 
&gt; We usually use 2-value enums so it&apos;s clear at the calling site what the
&gt; meaning of &quot;false&quot; is.

I thought about it, but I saw the other bool parameter in the function and decided to keep a bool. I can change both, though. 

&gt; &gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:49
&gt; &gt; +static bool characterSequenceIsEmoji(const Vector&lt;UChar, 4&gt;&amp; normalizedCharacters, int32_t normalizedLength)
&gt; 
&gt; This logic shouldn&apos;t be necessary; WebKit shouldn&apos;t be in the business of
&gt; iterating through strings codepoint-by-codepoint.

But I need to know if the sequence is an emoji, the point is to prefer a colored font when falling back to system fonts only when rendering emojis.

&gt; &gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:136
&gt; &gt; +    if (auto systemFallback = FontCache::singleton().systemFallbackForCharacters(m_fontDescription, baseFont, false, isEmoji, characters, length)) {
&gt; 
&gt; There are color fonts that don&apos;t support emoji, and it&apos;s conceptually
&gt; possible to have an emoji font that isn&apos;t color. It isn&apos;t right to pass
&gt; &quot;isEmoji&quot; to &quot;bool coloredFont&quot;

I think so, what we want here is to prefer a colored font when rendering emojis. We are also passing the characters, so we will fallback to a font that supports those codepoints and it&apos;s colored (if it exists, for course). I know what we want is an emji font, but I wanted to avoid heuristics using the font name, because there might be emojis fonts without the emoji word in the name. What we really want here is a colored version of the emoji, so a colored font supporting the sequence should be enough and it will probably be an emoji font anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491408</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-01-03 05:59:50 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #17)
&gt; I thought about it, but I saw the other bool parameter in the function and
&gt; decided to keep a bool. I can change both, though. 

FWIW I noticed that during my review and would have complained if not for the other bool parameter already right next to it.

&gt; &gt; &gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:136
&gt; &gt; &gt; +    if (auto systemFallback = FontCache::singleton().systemFallbackForCharacters(m_fontDescription, baseFont, false, isEmoji, characters, length)) {
&gt; &gt; 
&gt; &gt; There are color fonts that don&apos;t support emoji, and it&apos;s conceptually
&gt; &gt; possible to have an emoji font that isn&apos;t color. It isn&apos;t right to pass
&gt; &gt; &quot;isEmoji&quot; to &quot;bool coloredFont&quot;
&gt; 
&gt; I think so, what we want here is to prefer a colored font when rendering
&gt; emojis.

It&apos;s too confusing: someone looking at this is likely to think it&apos;s a bug upon discovering the parameter is named coloredFont and not isEmoji. Converting the code to use enums or a flags parameter would help make this more explicit, since then you&apos;d need to write out something like isEmoji ? Colored : NotColored. So that tips the balance in favor of doing that conversion in this patch IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492580</commentid>
    <comment_count>19</comment_count>
      <attachid>358583</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-08 03:59:57 -0800</bug_when>
    <thetext>Created attachment 358583
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493241</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-10 02:04:00 -0800</bug_when>
    <thetext>Committed r239822: &lt;https://trac.webkit.org/changeset/239822&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498902</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-01-27 13:46:33 -0800</bug_when>
    <thetext>Good job, it seems we&apos;re now the only Linux browser where color emoji actually work properly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498950</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-28 00:19:36 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #21)
&gt; Good job, it seems we&apos;re now the only Linux browser where color emoji
&gt; actually work properly!

Chromium was also using colored emojis in my tests here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499028</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-01-28 08:10:55 -0800</bug_when>
    <thetext>I&apos;ve verified that Chrome and Firefox are both drawing black and white emojis on the YouTube examples in the first comment, because they don&apos;t have any way to prefer color emoji to the black and white ones from DejaVu, like we now do. That&apos;s https://bugzilla.mozilla.org/show_bug.cgi?id=1509988 and https://bugs.chromium.org/p/chromium/issues/detail?id=908541.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521665</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-03-27 05:44:15 -0700</bug_when>
    <thetext>Test to see if your browser supports color emoji properly: 🐄</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521666</commentid>
    <comment_count>25</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-03-27 05:45:58 -0700</bug_when>
    <thetext>😎</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>355977</attachid>
            <date>2018-11-28 21:37:36 -0800</date>
            <delta_ts>2018-11-28 21:37:36 -0800</delta_ts>
            <desc>example code</desc>
            <filename>emoji.c</filename>
            <type>text/x-csrc</type>
            <size>2386</size>
            <attacher name="Akira TAGOH">akira</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGZvbnRjb25m
aWcvZm9udGNvbmZpZy5oPgoKRmNCb29sCmlzX2NvbG9yX2VuYWJsZWQodm9pZCkKewogICAgRmNQ
YXR0ZXJuICpwYXQgPSBGY1BhdHRlcm5DcmVhdGUgKCk7CiAgICBGY0Jvb2wgYjsKCiAgICBGY1Bh
dHRlcm5BZGRTdHJpbmcgKHBhdCwgRkNfRkFNSUxZLCAoY29uc3QgRmNDaGFyOCAqKSJlbW9qaSIp
OwogICAgRmNDb25maWdTdWJzdGl0dXRlIChOVUxMLCBwYXQsIEZjTWF0Y2hQYXR0ZXJuKTsKICAg
IEZjRGVmYXVsdFN1YnN0aXR1dGUgKHBhdCk7CiAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbCAocGF0
LCBGQ19DT0xPUiwgMCwgJmIpICE9IEZjUmVzdWx0TWF0Y2gpCgliID0gRmNGYWxzZTsKICAgIEZj
UGF0dGVybkRlc3Ryb3kgKHBhdCk7CgogICAgcmV0dXJuIGI7Cn0KCmludAptYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKewogICAgRmNQYXR0ZXJuICpwYXQsICpwOwogICAgRmNGb250U2V0ICpm
cywgKmZzc29ydDsKICAgIEZjUmVzdWx0IHJlc3VsdDsKICAgIGludCBpOwogICAgRmNPYmplY3RT
ZXQgKm9zOwoKICAgIGlmIChhcmd2WzFdKQoJcGF0ID0gRmNOYW1lUGFyc2UgKChGY0NoYXI4ICop
IGFyZ3ZbMV0pOwogICAgZWxzZQoJcGF0ID0gRmNQYXR0ZXJuQ3JlYXRlICgpOwoKICAgIEZjQ29u
ZmlnU3Vic3RpdHV0ZSAoTlVMTCwgcGF0LCBGY01hdGNoUGF0dGVybik7CiAgICBGY0RlZmF1bHRT
dWJzdGl0dXRlIChwYXQpOwoKICAgIG9zID0gRmNPYmplY3RTZXRDcmVhdGUgKCk7CiAgICBGY09i
amVjdFNldEFkZCAob3MsIEZDX0ZBTUlMWSk7CiAgICBmc3NvcnQgPSBGY0ZvbnRTb3J0IChOVUxM
LCBwYXQsIEZjVHJ1ZSwgTlVMTCwgJnJlc3VsdCk7CiAgICBpZiAoIWZzc29ydCB8fCBmc3NvcnQt
Pm5mb250ID09IDApCiAgICB7CiAgICBub19lbW9qaToKCXByaW50ZiAoIk5vIGVtb2ppIGZvbnRz
IGZvdW5kOlxuIik7CglGY1BhdHRlcm5QcmludCAocGF0KTsKCXByaW50ZiAoIlBlcmZvcm1pbmcg
YSBmYWxsYmFjayBmb3IgZW1vamlcbiIpOwoJRmNQYXR0ZXJuRGVzdHJveSAocGF0KTsKCXBhdCA9
IEZjUGF0dGVybkNyZWF0ZSAoKTsKCUZjUGF0dGVybkFkZFN0cmluZyAocGF0LCBGQ19GQU1JTFks
IChjb25zdCBGY0NoYXI4ICopImVtb2ppIik7CglGY0NvbmZpZ1N1YnN0aXR1dGUgKE5VTEwsIHBh
dCwgRmNNYXRjaFBhdHRlcm4pOwoJRmNEZWZhdWx0U3Vic3RpdHV0ZSAocGF0KTsKCXAgPSBGY0Zv
bnRNYXRjaCAoTlVMTCwgcGF0LCAmcmVzdWx0KTsKCWlmIChwKQoJICAgIEZjRm9udFNldEFkZCAo
ZnMsIHApOwogICAgfQogICAgZWxzZQogICAgewoJRmNCb29sIGVtb2ppX3R5cGUgPSBpc19jb2xv
cl9lbmFibGVkICgpOwoJY29uc3QgRmNDaGFyU2V0ICpjY3MgPSBGY0xhbmdHZXRDaGFyU2V0ICgo
Y29uc3QgRmNDaGFyOCAqKSAidW5kLXpzeWUiKTsKCglwcmludGYgKCJBc2tpbmcgZm9yICVzIGVt
b2ppXG4iLCBlbW9qaV90eXBlID8gImNvbG9yIiA6ICJCJlciKTsKCWZzID0gRmNGb250U2V0Q3Jl
YXRlICgpOwoJZm9yIChpID0gMDsgaSA8IGZzc29ydC0+bmZvbnQ7IGkrKykKCXsKCSAgICBwID0g
RmNGb250UmVuZGVyUHJlcGFyZSAoTlVMTCwgcGF0LCBmc3NvcnQtPmZvbnRzW2ldKTsKCSAgICBp
ZiAocCkKCSAgICB7CgkJRmNCb29sIGI7CgkJRmNDaGFyU2V0ICpjczsKCQlGY0NoYXI4ICpzOwoK
CQlGY1BhdHRlcm5HZXRTdHJpbmcgKHAsIEZDX0ZBTUlMWSwgMCwgJnMpOwoJCUZjUGF0dGVybkdl
dENoYXJTZXQgKHAsIEZDX0NIQVJTRVQsIDAsICZjcyk7CgkJaWYgKEZjQ2hhclNldElzU3Vic2V0
IChjY3MsIGNzKSkKCQl7CgkJICAgIEZjUGF0dGVybkdldEJvb2wgKHAsIEZDX0NPTE9SLCAwLCAm
Yik7CgkJICAgIGlmIChiID09IGVtb2ppX3R5cGUgfHwgYiA+PSBGY0RvbnRDYXJlKQoJCQlGY0Zv
bnRTZXRBZGQgKGZzLCBwKTsKCQkgICAgZWxzZQoJCQlwcmludGYgKCJlbW9qaSBmb250IGZvdW5k
IGJ1dCBkaWZmZXJlbnQgY29sb3JuZXNzOiAlcyAoY29sb3I6ICVkKVxuIiwgcywgYik7CgkJfQoJ
ICAgIH0KCX0KCUZjRm9udFNldERlc3Ryb3kgKGZzc29ydCk7CglpZiAoZnMtPm5mb250ID09IDAp
CgkgICAgZ290byBub19lbW9qaTsKICAgIH0KICAgIGlmIChmcykKICAgIHsKCWZvciAoaSA9IDA7
IGkgPCBmcy0+bmZvbnQ7IGkrKykKCXsKCSAgICBGY1BhdHRlcm4gKmY7CgoJICAgIGYgPSBGY1Bh
dHRlcm5GaWx0ZXIgKGZzLT5mb250c1tpXSwgb3MpOwoJICAgIEZjUGF0dGVyblByaW50IChmKTsK
CSAgICBGY1BhdHRlcm5EZXN0cm95IChmKTsKCX0KCUZjRm9udFNldERlc3Ryb3kgKGZzKTsKICAg
IH0KICAgIEZjT2JqZWN0U2V0RGVzdHJveSAob3MpOwoKICAgIHJldHVybiAwOwp9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357567</attachid>
            <date>2018-12-18 06:57:21 -0800</date>
            <delta_ts>2018-12-19 07:30:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>wk-color-emoji.diff</filename>
            <type>text/plain</type>
            <size>14827</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaCBiL1Nv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAppbmRleCA2OTY2NjAzNzBlNC4u
OTY3MjExYzgxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgKQEAg
LTEwMCw2ICsxMDAsNyBAQCBjb25zdCBVQ2hhciB6ZXJvV2lkdGhKb2luZXIgPSAweDIwMEQ7CiBj
b25zdCBVQ2hhciB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgPSAweEZFRkY7CiBjb25zdCBVQ2hhciB6
ZXJvV2lkdGhOb25Kb2luZXIgPSAweDIwMEM7CiBjb25zdCBVQ2hhciB6ZXJvV2lkdGhTcGFjZSA9
IDB4MjAwQjsKK2NvbnN0IFVDaGFyIGNvbWJpbmluZ0VuY2xvc2luZ0tleWNhcCA9IDB4MjBFMzsK
IAogfSAvLyBuYW1lc3BhY2UgVW5pY29kZQogfSAvLyBuYW1lc3BhY2UgV1RGCkBAIC0xNjYsMyAr
MTY3LDQgQEAgdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhKb2luZXI7CiB1c2luZyBXVEY6
OlVuaWNvZGU6Onplcm9XaWR0aE5vQnJlYWtTcGFjZTsKIHVzaW5nIFdURjo6VW5pY29kZTo6emVy
b1dpZHRoTm9uSm9pbmVyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhTcGFjZTsKK3Vz
aW5nIFdURjo6VW5pY29kZTo6Y29tYmluaW5nRW5jbG9zaW5nS2V5Y2FwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKaW5kZXggZTA3YTcyZDg2NDguLmY5MzhiNzM2MjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAKQEAgLTI4Niw2ICsyODYsNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQnlDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciomIGl0ZXJhdG9yLCBjb25zdCBVQwogICAgIC8vIENv
bnN1bWUgbWFya3MuCiAgICAgYm9vbCBzYXdFbW9qaUdyb3VwQ2FuZGlkYXRlID0gaXNFbW9qaUdy
b3VwQ2FuZGlkYXRlKGJhc2VDaGFyYWN0ZXIpOwogICAgIGJvb2wgc2F3Sm9pbmVyID0gZmFsc2U7
CisgICAgYm9vbCBzYXdSZWdpb25hbEluZGljYXRvciA9IGlzRW1vamlSZWdpb25hbEluZGljYXRv
cihiYXNlQ2hhcmFjdGVyKTsKICAgICB3aGlsZSAoaXRlcmF0b3IgPCBlbmQpIHsKICAgICAgICAg
VUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwogICAgICAgICB1bnNpZ25lZCBtYXJrTGVuZ3RoID0gMDsK
QEAgLTI5Niw2ICsyOTcsMTEgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUJ5Q29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqJiBpdGVyYXRvciwgY29uc3QgVUMKICAgICAgICAgaWYg
KGlzVmFyaWF0aW9uU2VsZWN0b3IobmV4dENoYXJhY3RlcikgfHwgaXNFbW9qaUZpdHpwYXRyaWNr
TW9kaWZpZXIobmV4dENoYXJhY3RlcikpCiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRy
dWU7CiAKKyAgICAgICAgaWYgKHNhd1JlZ2lvbmFsSW5kaWNhdG9yICYmIGlzRW1vamlSZWdpb25h
bEluZGljYXRvcihuZXh0Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgc2hvdWxkQ29udGludWUg
PSB0cnVlOworICAgICAgICAgICAgc2F3UmVnaW9uYWxJbmRpY2F0b3IgPSBmYWxzZTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChzYXdKb2luZXIgJiYgaXNFbW9qaUdyb3VwQ2FuZGlkYXRlKG5l
eHRDaGFyYWN0ZXIpKQogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDJkZGM3OWM2ZDZkLi4y
MGIyMzk4ZDI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAK
QEAgLTU2Niw3ICs1NjYsNyBAQCBSZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RAogCiAgICAgaWYgKCFj
aGFyYWN0ZXIpIHsKICAgICAgICAgVUNoYXIgY29kZVVuaXQgPSAwOwotICAgICAgICByZXR1cm4g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3Jp
cHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCAmY29kZVVuaXQsIDEpOworICAgICAgICBy
ZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMo
ZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBmYWxzZSwgJmNvZGVVbml0LCAx
KTsKICAgICB9CiAKICAgICBhdXRvIGtleSA9IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5KGRlc2Ny
aXB0aW9uLmxvY2FsZSgpLCBjaGFyYWN0ZXIsIGlzRm9yUGxhdGZvcm1Gb250KTsKQEAgLTU4Niw3
ICs1ODYsNyBAQCBSZWZQdHI8Rm9udD4gRm9udDo6c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFj
dGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250RAogICAgICAgICAgICAgY29kZVVuaXRz
TGVuZ3RoID0gMjsKICAgICAgICAgfQogCi0gICAgICAgIGZhbGxiYWNrRm9udCA9IEZvbnRDYWNo
ZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9uLCB0
aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgp
OworICAgICAgICBmYWxsYmFja0ZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQs
IGZhbHNlLCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7CiAgICAgICAgIGlmIChm
YWxsYmFja0ZvbnQpCiAgICAgICAgICAgICBmYWxsYmFja0ZvbnQtPm1faXNVc2VkSW5TeXN0ZW1G
YWxsYmFja0NhY2hlID0gdHJ1ZTsKICAgICB9CkBAIC02MTIsNyArNjEyLDcgQEAgdm9pZCBGb250
OjpyZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpCiAgICAgfQogfQogCi0jaWYgIVBMQVRG
T1JNKENPQ09BKQorI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShGUkVFVFlQRSkKIGJvb2wg
Rm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFu
dENhcHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyKSBjb25zdAogewogICAgIHN3aXRjaCAoZm9u
dFZhcmlhbnRDYXBzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IDM5NjAzNmExZmVlLi41MjMyMzFiMTk5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZvbnRDYWNoZSYgc2luZ2xldG9uKCk7CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0g
ICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1G
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBSZWZQ
dHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGJv
b2wgY29sb3JlZEZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
OwogICAgIFZlY3RvcjxTdHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIHZvaWQgcGxh
dGZvcm1Jbml0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggOWVmZTZmNTg3
YzcuLjRjNzU4MWZkMWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMjksNiAr
MjksNyBAQAogCiAjaWYgVVNFKENBSVJPKQogCisjaW5jbHVkZSAiQ2hhcmFjdGVyUHJvcGVydGll
cy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgPHVuaWNvZGUvbm9ybWx6ci5oPgpAQCAtNDUsNiAr
NDYsNjAgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29t
cGxleFRleHQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGJvb2wgY2hhcmFjdGVy
U2VxdWVuY2VJc0Vtb2ppKGNvbnN0IFZlY3RvcjxVQ2hhciwgND4mIG5vcm1hbGl6ZWRDaGFyYWN0
ZXJzLCBpbnQzMl90IG5vcm1hbGl6ZWRMZW5ndGgpCit7CisgICAgVUNoYXIzMiBjaGFyYWN0ZXI7
CisgICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7CisgICAgU3Vycm9nYXRlUGFpckF3YXJl
VGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKG5vcm1hbGl6ZWRDaGFyYWN0ZXJzLmRhdGEoKSwgMCwgbm9y
bWFsaXplZExlbmd0aCwgbm9ybWFsaXplZExlbmd0aCk7CisgICAgaWYgKCFpdGVyYXRvci5jb25z
dW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChpc0Vtb2ppS2V5Y2FwQmFzZShjaGFyYWN0ZXIpKSB7CisgICAgICAgIGl0ZXJhdG9y
LmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7CisgICAgICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlcjsK
KyAgICAgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKG5leHRDaGFyYWN0ZXIsIGNsdXN0ZXJMZW5n
dGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChuZXh0Q2hhcmFj
dGVyID09IGNvbWJpbmluZ0VuY2xvc2luZ0tleWNhcCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIC8vIFZhcmlhdGlvbiBzZWxlY3RvciAxNi4KKyAgICAgICAgaWYgKG5leHRD
aGFyYWN0ZXIgPT0gMHhGRTBGKSB7CisgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKGNsdXN0
ZXJMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKG5leHRDaGFyYWN0
ZXIsIGNsdXN0ZXJMZW5ndGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgaWYgKG5leHRDaGFyYWN0ZXIgPT0gY29tYmluaW5nRW5jbG9zaW5nS2V5Y2FwKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIFJlZ2lvbmFsIGluZGljYXRvci4KKyAgICBpZiAoaXNF
bW9qaVJlZ2lvbmFsSW5kaWNhdG9yKGNoYXJhY3RlcikpIHsKKyAgICAgICAgaXRlcmF0b3IuYWR2
YW5jZShjbHVzdGVyTGVuZ3RoKTsKKyAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOworCWlm
ICghaXRlcmF0b3IuY29uc3VtZShuZXh0Q2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaXNFbW9qaVJlZ2lvbmFsSW5kaWNh
dG9yKG5leHRDaGFyYWN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjaGFyYWN0ZXIgPT0gY29tYmluaW5nRW5j
bG9zaW5nS2V5Y2FwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0Vtb2ppV2l0
aFByZXNlbnRhdGlvbkJ5RGVmYXVsdChjaGFyYWN0ZXIpCisgICAgICAgIHx8IGlzRW1vamlNb2Rp
ZmllckJhc2UoY2hhcmFjdGVyKQorICAgICAgICB8fCBpc0Vtb2ppRml0enBhdHJpY2tNb2RpZmll
cihjaGFyYWN0ZXIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsK
ICAgICBVRXJyb3JDb2RlIGVycm9yID0gVV9aRVJPX0VSUk9SOwpAQCAtNjEsOCArMTE2LDEyIEBA
IGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlCiAgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJh
Y3RlciwgY2x1c3Rlckxlbmd0aCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYm9v
bCBpc0Vtb2ppID0gY2hhcmFjdGVyU2VxdWVuY2VJc0Vtb2ppKG5vcm1hbGl6ZWRDaGFyYWN0ZXJz
LCBub3JtYWxpemVkTGVuZ3RoKTsKKwogICAgIGNvbnN0IEZvbnQqIGJhc2VGb250ID0gZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UsIE5vcm1hbFZhcmlhbnQpLmZvbnQ7Ci0g
ICAgaWYgKGJhc2VGb250ICYmIChzdGF0aWNfY2FzdDxpbnQzMl90PihjbHVzdGVyTGVuZ3RoKSA9
PSBub3JtYWxpemVkTGVuZ3RoIHx8IGJhc2VGb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKSkKKyAgICBpZiAoYmFzZUZvbnQKKyAgICAg
ICAgJiYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGNsdXN0ZXJMZW5ndGgpID09IG5vcm1hbGl6ZWRM
ZW5ndGggfHwgYmFzZUZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNo
YXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgICYmICghaXNFbW9qaSB8fCBiYXNlRm9udC0+cGxh
dGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgIHJldHVybiBiYXNlRm9u
dDsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVs
bCgpOyArK2kpIHsKQEAgLTcwLDEyICsxMjksMTIgQEAgY29uc3QgRm9udCogRm9udENhc2NhZGU6
OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGUK
ICAgICAgICAgaWYgKCFmYWxsYmFja0ZvbnQgfHwgZmFsbGJhY2tGb250ID09IGJhc2VGb250KQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGZhbGxiYWNrRm9udC0+Y2FuUmVu
ZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAg
ICAgaWYgKGZhbGxiYWNrRm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y2hhcmFjdGVycywgbGVuZ3RoKSAmJiAoIWlzRW1vamkgfHwgZmFsbGJhY2tGb250LT5wbGF0Zm9y
bURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFj
a0ZvbnQ7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gc3lzdGVtRmFsbGJhY2sgPSBGb250Q2FjaGU6
OnNpbmdsZXRvbigpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhtX2ZvbnREZXNjcmlwdGlv
biwgYmFzZUZvbnQsIGZhbHNlLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7Ci0gICAgICAgIGlmIChz
eXN0ZW1GYWxsYmFjay0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFj
dGVycywgbGVuZ3RoKSkKKyAgICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9IEZvbnRDYWNoZTo6
c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9udERlc2NyaXB0aW9u
LCBiYXNlRm9udCwgZmFsc2UsIGlzRW1vamksIGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKKyAgICAg
ICAgaWYgKHN5c3RlbUZhbGxiYWNrLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpICYmICghaXNFbW9qaSB8fCBzeXN0ZW1GYWxsYmFjay0+cGxh
dGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3lz
dGVtRmFsbGJhY2suZ2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXgg
MzAyNDRjZjY1ODIuLmFkZThiNjE0NWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0x
MzU0LDcgKzEzNTQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gbG9va3VwRmFsbGJh
Y2tGb250KENURm9udFJlZiBmb250LCBGb250U2VsZWN0aW9uVmFsdQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmln
aW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJh
Y2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0
IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGJvb2wsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBpZiAobGVuZ3RoICYmIHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KCpj
aGFyYWN0ZXJzKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGM0NDZlZGI1
MTA3Li43MjJhZTFmMDVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMTE4
LDcgKzExOCw3IEBAIHN0YXRpYyB2b2lkIGdldEZvbnRQcm9wZXJ0aWVzRnJvbVBhdHRlcm4oRmNQ
YXR0ZXJuKiBwYXR0ZXJuLCBjb25zdCBGb250RGVzY3JpcHRpCiAgICAgfQogfQogCi1SZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCosIGJvb2wsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgRm9udCosIGJvb2wsIGJvb2wgY29sb3JlZEZvbnQsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgRmNVbmlxdWVQdHI8RmNDaGFyU2V0PiBm
b250Q29uZmlnQ2hhclNldChGY0NoYXJTZXRDcmVhdGUoKSk7CiAgICAgVVRGMTZVQ2hhcjMySXRl
cmF0b3IgaXRlcmF0b3IoY2hhcmFjdGVycywgbGVuZ3RoKTsKQEAgLTEzMiw2ICsxMzIsOCBAQCBS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIEZjUGF0dGVybkFkZENoYXJTZXQocGF0dGVybi5n
ZXQoKSwgRkNfQ0hBUlNFVCwgZm9udENvbmZpZ0NoYXJTZXQuZ2V0KCkpOwogCiAgICAgRmNQYXR0
ZXJuQWRkQm9vbChwYXR0ZXJuLmdldCgpLCBGQ19TQ0FMQUJMRSwgRmNUcnVlKTsKKyAgICBpZiAo
Y29sb3JlZEZvbnQpCisgICAgICAgIEZjUGF0dGVybkFkZEJvb2wocGF0dGVybi5nZXQoKSwgRkNf
Q09MT1IsIEZjVHJ1ZSk7CiAKICAgICBpZiAoIWNvbmZpZ3VyZVBhdHRlcm5Gb3JGb250RGVzY3Jp
cHRpb24ocGF0dGVybi5nZXQoKSwgZGVzY3JpcHRpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCmluZGV4IDY0NWNk
MTczNTI4Li5lN2ZmN2Q5OWYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJl
ZVR5cGUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNpbmNs
dWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KICNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2lu
Y2x1ZGUgRlRfRlJFRVRZUEVfSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKICNpbmNs
dWRlIDxoYi1mdC5oPgogI2luY2x1ZGUgPGhiLW90Lmg+CkBAIC0xMTcsNiArMTE4LDEyIEBAIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRG
YWNlLCBGY1BhdHRlcm4qIHBhdHRlCiAgICAgbV9maXhlZFdpZHRoID0gZml4ZWRXaWR0aDsKIAog
ICAgIGJ1aWxkU2NhbGVkRm9udChmb250RmFjZSk7CisKKyNpZmRlZiBGVF9IQVNfQ09MT1IKKyAg
ICBDYWlyb0Z0RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihtX3NjYWxlZEZvbnQuZ2V0KCkp
OworICAgIGlmIChGVF9GYWNlIGZ0RmFjZSA9IGNhaXJvRnRGYWNlTG9ja2VyLmZ0RmFjZSgpKQor
ICAgICAgICBtX2lzQ29sb3JCaXRtYXBGb250ID0gRlRfSEFTX0NPTE9SKGZ0RmFjZSk7CisjZW5k
aWYKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAK
aW5kZXggNGJmZjdjYzgzZDAuLmQxMzc4NDVjNzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcApAQCAtMTg4LDQgKzE4OCwyNyBAQCBmbG9hdCBGb250OjpwbGF0Zm9y
bVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgcmV0dXJuIHdpZHRoID8gd2lk
dGggOiBtX3NwYWNlV2lkdGg7CiB9CiAKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0No
YXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hh
cjMyKSBjb25zdAoreworICAgIHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7CisgICAgY2FzZSBG
b250VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6
CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAgIGNhc2UgRm9udFZhcmlh
bnRDYXBzOjpBbGxQZXRpdGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVl
cyBsaXN0ZWQgYWJvdmUuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBG
b250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAor
eworICAgIENhaXJvRnRGYWNlTG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKG1fcGxhdGZvcm1EYXRh
LnNjYWxlZEZvbnQoKSk7CisgICAgaWYgKEZUX0ZhY2UgZmFjZSA9IGNhaXJvRnRGYWNlTG9ja2Vy
LmZ0RmFjZSgpKQorICAgICAgICByZXR1cm4gISFGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGNo
YXJhY3Rlcik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXggZjJk
NjYwZGE5ZmIuLjdmNzU3MTQzNjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHN0
YXRpYyBIRk9OVCBjcmVhdGVNTGFuZ0ZvbnQoSU1MYW5nRm9udExpbmtUeXBlKiBsYW5nRm9udExp
bmssIEhEQyBoZGMsIERXT1JEIGNvCiAgICAgcmV0dXJuIGhmb250OwogfQogCi1SZWZQdHI8Rm9u
dD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1JlZlB0cjxGb250PiBG
b250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBib29s
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFVDaGFy
IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07CiAgICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRhOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0
aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3BlcnRpZXMu
aAppbmRleCBjNjUzMGE0OGFjYS4uZTIwZDY4MDEzN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oCkBAIC03Niw0ICs3NiwzNCBA
QCBpbmxpbmUgYm9vbCBpc1ZhcmlhdGlvblNlbGVjdG9yKFVDaGFyMzIgY2hhcmFjdGVyKQogICAg
IHJldHVybiBjaGFyYWN0ZXIgPj0gMHhGRTAwICYmIGNoYXJhY3RlciA8PSAweEZFMEY7CiB9CiAK
K2lubGluZSBib29sIGlzRW1vamlLZXljYXBCYXNlKFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAg
IHJldHVybiAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzknKSB8fCBjaGFyYWN0
ZXIgPT0gJyMnIHx8IGNoYXJhY3RlciA9PSAnKic7Cit9CisKK2lubGluZSBib29sIGlzRW1vamlS
ZWdpb25hbEluZGljYXRvcihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFj
dGVyID49IDB4MUYxRTYgJiYgY2hhcmFjdGVyIDw9IDB4MUYxRkY7Cit9CisKK2lubGluZSBib29s
IGlzRW1vamlXaXRoUHJlc2VudGF0aW9uQnlEZWZhdWx0KFVDaGFyMzIgY2hhcmFjdGVyKQorewor
I2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID49IDU3CisgICAgcmV0dXJuIHVfaGFzQmluYXJ5
UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSV9QUkVTRU5UQVRJT04pOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oY2hhcmFjdGVyKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
KworaW5saW5lIGJvb2wgaXNFbW9qaU1vZGlmaWVyQmFzZShVQ2hhcjMyIGNoYXJhY3RlcikKK3sK
KyNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1NworICAgIHJldHVybiB1X2hhc0JpbmFy
eVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfRU1PSklfTU9ESUZJRVJfQkFTRSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357679</attachid>
            <date>2018-12-19 07:30:15 -0800</date>
            <delta_ts>2019-01-08 03:59:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-colored-emojis.diff</filename>
            <type>text/plain</type>
            <size>19332</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyOGQ0NDVhN2UyOS4uOTU5ZGExN2ZlNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOC0xMi0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0ZyZWVUeXBlXSBDb2xvciBlbW9qaSBub3QgcHJvcGVybHkgc3VwcG9ydGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE5NzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbmV3IHRl
c3QgdG8gZW5zdXJlIHdlIGZhbGxiYWNrIHRvIG5vdG8gY29sb3IgZW1vamkgZm9yIGVtb2ppcy4K
KworICAgICAgICAqIHBsYXRmb3JtL2d0ay9mb250cy9mb250LWVtb2ppLXN5c3RlbS1mYWxsYmFj
ay1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZm9udHMvZm9u
dC1lbW9qaS1zeXN0ZW0tZmFsbGJhY2suaHRtbDogQWRkZWQuCisKIDIwMTgtMTItMTUgIFlvdWVu
biBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgUlRDUnRwU2VuZGVy
LnNldFBhcmFtZXRlcnMgdG8gYWN0aXZhdGUgc3BlY2lmaWMgZW5jb2RpbmdzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZm9udHMvZm9udC1lbW9qaS1zeXN0ZW0tZmFsbGJh
Y2stZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mb250cy9mb250LWVt
b2ppLXN5c3RlbS1mYWxsYmFjay1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5jYjBjOTZhYjJjZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9mb250cy9mb250LWVtb2ppLXN5c3RlbS1mYWxsYmFjay1leHBlY3Rl
ZC5odG1sCkBAIC0wLDAgKzEsMiBAQAorPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnTm90byBD
b2xvciBFbW9qaSc7Ij4mI3gxRjYwMTwvc3Bhbj4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL2ZvbnRzL2ZvbnQtZW1vamktc3lzdGVtLWZhbGxiYWNrLmh0bWwgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvZm9udHMvZm9udC1lbW9qaS1zeXN0ZW0tZmFsbGJhY2suaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjllZDBkOTExNWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZm9udHMvZm9udC1lbW9q
aS1zeXN0ZW0tZmFsbGJhY2suaHRtbApAQCAtMCwwICsxIEBACismI3gxRjYwMQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBjYTBl
ODU2Y2QyMy4uM2QxMmVkMmFiZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTgtMTItMTkgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtGcmVl
VHlwZV0gQ29sb3IgZW1vamkgbm90IHByb3Blcmx5IHN1cHBvcnRlZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxOTc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmFtZSBmb3IgY29tYmluaW5n
IGVuY2xvc2luZyBrZXljYXAgY2hhcmFjdGVyLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ2hh
cmFjdGVyTmFtZXMuaDoKKwogMjAxOC0xMi0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgVXNlIHdhcm5pbmctaWdub3JpbmcgbWFjcm9zIG1vcmUgY29uc2lzdGVu
dGx5IGFuZCBzaW1wbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAppbmRl
eCA2OTY2NjAzNzBlNC4uOTY3MjExYzgxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vu
aWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjb25zdCBVQ2hhciB6ZXJvV2lkdGhKb2lu
ZXIgPSAweDIwMEQ7CiBjb25zdCBVQ2hhciB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgPSAweEZFRkY7
CiBjb25zdCBVQ2hhciB6ZXJvV2lkdGhOb25Kb2luZXIgPSAweDIwMEM7CiBjb25zdCBVQ2hhciB6
ZXJvV2lkdGhTcGFjZSA9IDB4MjAwQjsKK2NvbnN0IFVDaGFyIGNvbWJpbmluZ0VuY2xvc2luZ0tl
eWNhcCA9IDB4MjBFMzsKIAogfSAvLyBuYW1lc3BhY2UgVW5pY29kZQogfSAvLyBuYW1lc3BhY2Ug
V1RGCkBAIC0xNjYsMyArMTY3LDQgQEAgdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJvV2lkdGhKb2lu
ZXI7CiB1c2luZyBXVEY6OlVuaWNvZGU6Onplcm9XaWR0aE5vQnJlYWtTcGFjZTsKIHVzaW5nIFdU
Rjo6VW5pY29kZTo6emVyb1dpZHRoTm9uSm9pbmVyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp6ZXJv
V2lkdGhTcGFjZTsKK3VzaW5nIFdURjo6VW5pY29kZTo6Y29tYmluaW5nRW5jbG9zaW5nS2V5Y2Fw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDA1OTQ5YmUyNGI2Li5iY2NhYjI2MWQzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQxIEBACisyMDE4LTEyLTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbRnJlZVR5cGVdIENvbG9yIGVtb2ppIG5vdCBwcm9wZXJs
eSBzdXBwb3J0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5MTk3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFsd2F5cyB0cnkgdG8gZmFsbGJhY2sgdG8gYSBjb2xvcmVkIGZvbnQgZm9yIGVtb2ppcy4K
KworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9ndGsvZm9udHMvZm9udC1lbW9qaS1zeXN0ZW0tZmFs
bGJhY2suaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKTogR3JvdXAgcmVnaW9uYWwgaW5kaWNhdG9ycyBpbiBwYWlycy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5
c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBjb25zdCk6IFBhc3MgZmFsc2UgdG8gY29sb3Jl
ZEZvbnQgcGFyYW1ldGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyU2VxdWVuY2VJc0Vtb2ppKTogQ2hlY2tl
IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBpcyBhbiBlbW9qaS4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29u
c3QpOiBJbiBjYXNlIG9mIGVtb2ppcyB0cnkgdG8gZmFsbGJhY2sgdG8gYSBjb2xvcmVkCisgICAg
ICAgIGZvbnQgZXZlbiBpZiBiYXNlIGZvbnQgY2FuIHJlbmRlciB0aGUgZW1vamkgaW4gYmxhY2sg
YW5kIHdoaXRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKTogQWRkIGNvbG9yZWRGb250IHBhcmFtZXRlciB0aGF0IGlzIGlnbm9yZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMpOiBBZGQgY29sb3JlZEZvbnQgcGFyYW1ldGVyIHVzZWQgdG8gcHJlZmVyIGNvbG9yZWQg
Zm9udHMgd2hlbgorICAgICAgICBpdCdzIHRydWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBJbml0aWFsaXplIG1faXND
b2xvckJpdG1hcEZvbnQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp2YXJpYW50
Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzIGNvbnN0KTogTW92ZWQgZnJvbSBjcm9z
cy1wbGF0Zm9ybSBmaWxlLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1TdXBwb3J0
c0NvZGVQb2ludCBjb25zdCk6IEFkZCBmcmVldHlwZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKTogQWRkIGNvbG9yZWRG
b250IHBhcmFtZXRlciB0aGF0IGlzIGlnbm9yZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9D
aGFyYWN0ZXJQcm9wZXJ0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc0Vtb2ppS2V5Y2FwQmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjppc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNFbW9qaVdpdGhQcmVzZW50YXRpb25CeURlZmF1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6aXNFbW9qaU1vZGlmaWVyQmFzZSk6CisKIDIwMTgtMTItMTUgIFl1c3VrZSBTdXp1
a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4KIAogICAgICAgICBOdWxsIHBvaW50ZXIg
ZGVyZWZlcmVuY2UgaW4gSlNDOjpXcml0ZUJhcnJpZXJCYXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
CmluZGV4IGUwN2E3MmQ4NjQ4Li5mOTM4YjczNjI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBA
IC0yODYsNiArMjg2LDcgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUJ5Q29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqJiBpdGVyYXRvciwgY29uc3QgVUMKICAgICAvLyBDb25zdW1l
IG1hcmtzLgogICAgIGJvb2wgc2F3RW1vamlHcm91cENhbmRpZGF0ZSA9IGlzRW1vamlHcm91cENh
bmRpZGF0ZShiYXNlQ2hhcmFjdGVyKTsKICAgICBib29sIHNhd0pvaW5lciA9IGZhbHNlOworICAg
IGJvb2wgc2F3UmVnaW9uYWxJbmRpY2F0b3IgPSBpc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IoYmFz
ZUNoYXJhY3Rlcik7CiAgICAgd2hpbGUgKGl0ZXJhdG9yIDwgZW5kKSB7CiAgICAgICAgIFVDaGFy
MzIgbmV4dENoYXJhY3RlcjsKICAgICAgICAgdW5zaWduZWQgbWFya0xlbmd0aCA9IDA7CkBAIC0y
OTYsNiArMjk3LDExIEBAIHN0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDCiAgICAgICAgIGlmIChpc1Zh
cmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IGlzRW1vamlGaXR6cGF0cmlja01vZGlm
aWVyKG5leHRDaGFyYWN0ZXIpKQogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwog
CisgICAgICAgIGlmIChzYXdSZWdpb25hbEluZGljYXRvciAmJiBpc0Vtb2ppUmVnaW9uYWxJbmRp
Y2F0b3IobmV4dENoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHNhd1JlZ2lvbmFsSW5kaWNhdG9yID0gZmFsc2U7CisgICAgICAgIH0K
KwogICAgICAgICBpZiAoc2F3Sm9pbmVyICYmIGlzRW1vamlHcm91cENhbmRpZGF0ZShuZXh0Q2hh
cmFjdGVyKSkKICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCAyZGRjNzljNmQ2ZC4uMjBiMjM5
OGQyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01
NjYsNyArNTY2LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNo
YXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udEQKIAogICAgIGlmICghY2hhcmFj
dGVyKSB7CiAgICAgICAgIFVDaGFyIGNvZGVVbml0ID0gMDsKLSAgICAgICAgcmV0dXJuIEZvbnRD
YWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2NyaXB0aW9u
LCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgJmNvZGVVbml0LCAxKTsKKyAgICAgICAgcmV0dXJu
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGRlc2Ny
aXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgZmFsc2UsICZjb2RlVW5pdCwgMSk7CiAg
ICAgfQogCiAgICAgYXV0byBrZXkgPSBDaGFyYWN0ZXJGYWxsYmFja01hcEtleShkZXNjcmlwdGlv
bi5sb2NhbGUoKSwgY2hhcmFjdGVyLCBpc0ZvclBsYXRmb3JtRm9udCk7CkBAIC01ODYsNyArNTg2
LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihV
Q2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udEQKICAgICAgICAgICAgIGNvZGVVbml0c0xlbmd0
aCA9IDI7CiAgICAgICAgIH0KIAotICAgICAgICBmYWxsYmFja0ZvbnQgPSBGb250Q2FjaGU6OnNp
bmdsZXRvbigpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywg
aXNGb3JQbGF0Zm9ybUZvbnQsIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKKyAg
ICAgICAgZmFsbGJhY2tGb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxsYmFj
a0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1Gb250LCBmYWxz
ZSwgY29kZVVuaXRzLCBjb2RlVW5pdHNMZW5ndGgpLmdldCgpOwogICAgICAgICBpZiAoZmFsbGJh
Y2tGb250KQogICAgICAgICAgICAgZmFsbGJhY2tGb250LT5tX2lzVXNlZEluU3lzdGVtRmFsbGJh
Y2tDYWNoZSA9IHRydWU7CiAgICAgfQpAQCAtNjEyLDcgKzYxMiw3IEBAIHZvaWQgRm9udDo6cmVt
b3ZlRnJvbVN5c3RlbUZhbGxiYWNrQ2FjaGUoKQogICAgIH0KIH0KIAotI2lmICFQTEFURk9STShD
T0NPQSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCiBib29sIEZvbnQ6
OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBz
IGZvbnRWYXJpYW50Q2FwcywgVUNoYXIzMikgY29uc3QKIHsKICAgICBzd2l0Y2ggKGZvbnRWYXJp
YW50Q2FwcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aAppbmRleCAzOTYwMzZhMWZlZS4uNTIzMjMxYjE5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xOTAsNyArMTkwLDcgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBGb250Q2FjaGUmIHNpbmdsZXRvbigpOwogCiAgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgotICAgIFJl
ZlB0cjxGb250PiBzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgUmVmUHRyPEZv
bnQ+IHN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBib29sIGNv
bG9yZWRGb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKICAg
ICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICB2b2lkIHBsYXRmb3Jt
SW5pdCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCmluZGV4IDllZmU2ZjU4N2M3Li5i
OTczNjM1ODMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2lmIFVTRShDQUlSTykKIAorI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KQEAgLTQ1LDYgKzQ2LDYw
IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhU
ZXh0KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBib29sIGNoYXJhY3RlclNlcXVl
bmNlSXNFbW9qaShjb25zdCBWZWN0b3I8VUNoYXIsIDQ+JiBub3JtYWxpemVkQ2hhcmFjdGVycywg
aW50MzJfdCBub3JtYWxpemVkTGVuZ3RoKQoreworICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAg
IHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvciBpdGVyYXRvcihub3JtYWxpemVkQ2hhcmFjdGVycy5kYXRhKCksIDAsIG5vcm1hbGl6
ZWRMZW5ndGgsIG5vcm1hbGl6ZWRMZW5ndGgpOworICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShj
aGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoaXNFbW9qaUtleWNhcEJhc2UoY2hhcmFjdGVyKSkgeworICAgICAgICBpdGVyYXRvci5hZHZh
bmNlKGNsdXN0ZXJMZW5ndGgpOworICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXI7CisgICAg
ICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShuZXh0Q2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAobmV4dENoYXJhY3RlciA9
PSBjb21iaW5pbmdFbmNsb3NpbmdLZXljYXApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICAvLyBWYXJpYXRpb24gc2VsZWN0b3IgMTYuCisgICAgICAgIGlmIChuZXh0Q2hhcmFj
dGVyID09IDB4RkUwRikgeworICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVu
Z3RoKTsKKyAgICAgICAgICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShuZXh0Q2hhcmFjdGVyLCBj
bHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgIGlmIChuZXh0Q2hhcmFjdGVyID09IGNvbWJpbmluZ0VuY2xvc2luZ0tleWNhcCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBSZWdpb25hbCBpbmRpY2F0b3IuCisgICAgaWYgKGlzRW1vamlS
ZWdpb25hbEluZGljYXRvcihjaGFyYWN0ZXIpKSB7CisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2Uo
Y2x1c3Rlckxlbmd0aCk7CisgICAgICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlcjsKKyAgICAgICAg
aWYgKCFpdGVyYXRvci5jb25zdW1lKG5leHRDaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpc0Vtb2ppUmVnaW9uYWxJbmRp
Y2F0b3IobmV4dENoYXJhY3RlcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNoYXJhY3RlciA9PSBjb21iaW5pbmdF
bmNsb3NpbmdLZXljYXApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzRW1vamlX
aXRoUHJlc2VudGF0aW9uQnlEZWZhdWx0KGNoYXJhY3RlcikKKyAgICAgICAgfHwgaXNFbW9qaU1v
ZGlmaWVyQmFzZShjaGFyYWN0ZXIpCisgICAgICAgIHx8IGlzRW1vamlGaXR6cGF0cmlja01vZGlm
aWVyKGNoYXJhY3RlcikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCiBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAog
ewogICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CkBAIC02MSw4ICsxMTYsMTIg
QEAgY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGUKICAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hh
cmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBi
b29sIGlzRW1vamkgPSBjaGFyYWN0ZXJTZXF1ZW5jZUlzRW1vamkobm9ybWFsaXplZENoYXJhY3Rl
cnMsIG5vcm1hbGl6ZWRMZW5ndGgpOworCiAgICAgY29uc3QgRm9udCogYmFzZUZvbnQgPSBnbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCkuZm9udDsK
LSAgICBpZiAoYmFzZUZvbnQgJiYgKHN0YXRpY19jYXN0PGludDMyX3Q+KGNsdXN0ZXJMZW5ndGgp
ID09IG5vcm1hbGl6ZWRMZW5ndGggfHwgYmFzZUZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpKQorICAgIGlmIChiYXNlRm9udAorICAg
ICAgICAmJiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2x1c3Rlckxlbmd0aCkgPT0gbm9ybWFsaXpl
ZExlbmd0aCB8fCBiYXNlRm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgJiYgKCFpc0Vtb2ppIHx8IGJhc2VGb250LT5w
bGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgcmV0dXJuIGJhc2VG
b250OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNO
dWxsKCk7ICsraSkgewpAQCAtNzAsMTIgKzEyOSwxMiBAQCBjb25zdCBGb250KiBGb250Q2FzY2Fk
ZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZQogICAgICAgICBpZiAoIWZhbGxiYWNrRm9udCB8fCBmYWxsYmFja0ZvbnQgPT0gYmFzZUZvbnQp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoZmFsbGJhY2tGb250LT5jYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAg
ICAgICBpZiAoZmFsbGJhY2tGb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpICYmICghaXNFbW9qaSB8fCBmYWxsYmFja0ZvbnQtPnBsYXRm
b3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxi
YWNrRm9udDsKICAgICB9CiAKLSAgICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9IEZvbnRDYWNo
ZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9udERlc2NyaXB0
aW9uLCBiYXNlRm9udCwgZmFsc2UsIGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgaWYg
KHN5c3RlbUZhbGxiYWNrLT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQorICAgIGlmIChhdXRvIHN5c3RlbUZhbGxiYWNrID0gRm9udENhY2hl
OjpzaW5nbGV0b24oKS5zeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMobV9mb250RGVzY3JpcHRp
b24sIGJhc2VGb250LCBmYWxzZSwgaXNFbW9qaSwgY2hhcmFjdGVycywgbGVuZ3RoKSkgeworICAg
ICAgICBpZiAoc3lzdGVtRmFsbGJhY2stPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkgJiYgKCFpc0Vtb2ppIHx8IHN5c3RlbUZhbGxiYWNrLT5w
bGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgICAgIHJldHVybiBz
eXN0ZW1GYWxsYmFjay5nZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRl
eCAzMDI0NGNmNjU4Mi4uYWRlOGI2MTQ1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAg
LTEzNTQsNyArMTM1NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBsb29rdXBGYWxs
YmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRTZWxlY3Rpb25WYWx1CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9y
aWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29u
c3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgYm9vbCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIGlmIChsZW5ndGggJiYgcmVxdWlyZXNDdXN0b21GYWxsYmFja0ZvbnQo
KmNoYXJhY3RlcnMpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggYzQ0NmVk
YjUxMDcuLjcyMmFlMWYwNWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0x
MTgsNyArMTE4LDcgQEAgc3RhdGljIHZvaWQgZ2V0Rm9udFByb3BlcnRpZXNGcm9tUGF0dGVybihG
Y1BhdHRlcm4qIHBhdHRlcm4sIGNvbnN0IEZvbnREZXNjcmlwdGkKICAgICB9CiB9CiAKLVJlZlB0
cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiwgYm9vbCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBjb25zdCBGb250KiwgYm9vbCwgYm9vbCBjb2xvcmVkRm9udCwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBGY1VuaXF1ZVB0cjxGY0NoYXJTZXQ+
IGZvbnRDb25maWdDaGFyU2V0KEZjQ2hhclNldENyZWF0ZSgpKTsKICAgICBVVEYxNlVDaGFyMzJJ
dGVyYXRvciBpdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOwpAQCAtMTMyLDYgKzEzMiw4IEBA
IFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgRmNQYXR0ZXJuQWRkQ2hhclNldChwYXR0ZXJu
LmdldCgpLCBGQ19DSEFSU0VULCBmb250Q29uZmlnQ2hhclNldC5nZXQoKSk7CiAKICAgICBGY1Bh
dHRlcm5BZGRCb29sKHBhdHRlcm4uZ2V0KCksIEZDX1NDQUxBQkxFLCBGY1RydWUpOworICAgIGlm
IChjb2xvcmVkRm9udCkKKyAgICAgICAgRmNQYXR0ZXJuQWRkQm9vbChwYXR0ZXJuLmdldCgpLCBG
Q19DT0xPUiwgRmNUcnVlKTsKIAogICAgIGlmICghY29uZmlndXJlUGF0dGVybkZvckZvbnREZXNj
cmlwdGlvbihwYXR0ZXJuLmdldCgpLCBkZXNjcmlwdGlvbikpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKaW5kZXggNjQ1
Y2QxNzM1MjguLmU3ZmY3ZDk5ZjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFG
cmVlVHlwZS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxjYWlyby1mdC5oPgogI2lu
Y2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Cisj
aW5jbHVkZSBGVF9GUkVFVFlQRV9ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSAogI2lu
Y2x1ZGUgPGhiLWZ0Lmg+CiAjaW5jbHVkZSA8aGItb3QuaD4KQEAgLTExNyw2ICsxMTgsMTIgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9u
dEZhY2UsIEZjUGF0dGVybiogcGF0dGUKICAgICBtX2ZpeGVkV2lkdGggPSBmaXhlZFdpZHRoOwog
CiAgICAgYnVpbGRTY2FsZWRGb250KGZvbnRGYWNlKTsKKworI2lmZGVmIEZUX0hBU19DT0xPUgor
ICAgIENhaXJvRnRGYWNlTG9ja2VyIGNhaXJvRnRGYWNlTG9ja2VyKG1fc2NhbGVkRm9udC5nZXQo
KSk7CisgICAgaWYgKEZUX0ZhY2UgZnRGYWNlID0gY2Fpcm9GdEZhY2VMb2NrZXIuZnRGYWNlKCkp
CisgICAgICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBGVF9IQVNfQ09MT1IoZnRGYWNlKTsKKyNl
bmRpZgogfQogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNw
cAppbmRleCA0YmZmN2NjODNkMC4uZDEzNzg0NWM3ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZv
bnREYXRhRnJlZVR5cGUuY3BwCkBAIC0xODgsNCArMTg4LDI3IEBAIGZsb2F0IEZvbnQ6OnBsYXRm
b3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gd2lkdGggPyB3
aWR0aCA6IG1fc3BhY2VXaWR0aDsKIH0KIAorYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRz
Q2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVD
aGFyMzIpIGNvbnN0Cit7CisgICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKKyAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0
ZToKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBGb250VmFy
aWFudENhcHM6OkFsbFBldGl0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFs
dWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29s
IEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0
Cit7CisgICAgQ2Fpcm9GdEZhY2VMb2NrZXIgY2Fpcm9GdEZhY2VMb2NrZXIobV9wbGF0Zm9ybURh
dGEuc2NhbGVkRm9udCgpKTsKKyAgICBpZiAoRlRfRmFjZSBmYWNlID0gY2Fpcm9GdEZhY2VMb2Nr
ZXIuZnRGYWNlKCkpCisgICAgICAgIHJldHVybiAhIUZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwg
Y2hhcmFjdGVyKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCBm
MmQ2NjBkYTlmYi4uN2Y3NTcxNDM2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0yMTEsNyArMjExLDcgQEAg
c3RhdGljIEhGT05UIGNyZWF0ZU1MYW5nRm9udChJTUxhbmdGb250TGlua1R5cGUqIGxhbmdGb250
TGluaywgSERDIGhkYywgRFdPUkQgY28KICAgICByZXR1cm4gaGZvbnQ7CiB9CiAKLVJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBib29s
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGJv
b2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVUNo
YXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1swXTsKICAgICBSZWZQdHI8Rm9udD4gZm9udERhdGE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3Bl
cnRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGll
cy5oCmluZGV4IGM2NTMwYTQ4YWNhLi5lMjBkNjgwMTM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9DaGFyYWN0ZXJQcm9wZXJ0aWVzLmgKQEAgLTc2LDQgKzc2LDM0
IEBAIGlubGluZSBib29sIGlzVmFyaWF0aW9uU2VsZWN0b3IoVUNoYXIzMiBjaGFyYWN0ZXIpCiAg
ICAgcmV0dXJuIGNoYXJhY3RlciA+PSAweEZFMDAgJiYgY2hhcmFjdGVyIDw9IDB4RkUwRjsKIH0K
IAoraW5saW5lIGJvb2wgaXNFbW9qaUtleWNhcEJhc2UoVUNoYXIzMiBjaGFyYWN0ZXIpCit7Cisg
ICAgcmV0dXJuIChjaGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnOScpIHx8IGNoYXJh
Y3RlciA9PSAnIycgfHwgY2hhcmFjdGVyID09ICcqJzsKK30KKworaW5saW5lIGJvb2wgaXNFbW9q
aVJlZ2lvbmFsSW5kaWNhdG9yKFVDaGFyMzIgY2hhcmFjdGVyKQoreworICAgIHJldHVybiBjaGFy
YWN0ZXIgPj0gMHgxRjFFNiAmJiBjaGFyYWN0ZXIgPD0gMHgxRjFGRjsKK30KKworaW5saW5lIGJv
b2wgaXNFbW9qaVdpdGhQcmVzZW50YXRpb25CeURlZmF1bHQoVUNoYXIzMiBjaGFyYWN0ZXIpCit7
CisjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTcKKyAgICByZXR1cm4gdV9oYXNCaW5h
cnlQcm9wZXJ0eShjaGFyYWN0ZXIsIFVDSEFSX0VNT0pJX1BSRVNFTlRBVElPTik7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCitpbmxpbmUgYm9vbCBpc0Vtb2ppTW9kaWZpZXJCYXNlKFVDaGFyMzIgY2hhcmFjdGVyKQor
eworI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID49IDU3CisgICAgcmV0dXJuIHVfaGFzQmlu
YXJ5UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSV9NT0RJRklFUl9CQVNFKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKIH0K
</data>
<flag name="review"
          id="374562"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358583</attachid>
            <date>2019-01-08 03:59:57 -0800</date>
            <delta_ts>2019-01-08 03:59:57 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wc-ft-colored-emojis.diff</filename>
            <type>text/plain</type>
            <size>23674</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NjNlYTM2YmM5OC4uZjljZjc5ZmI4ZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOS0wMS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0ZyZWVUeXBlXSBDb2xvciBlbW9qaSBub3QgcHJvcGVybHkgc3VwcG9ydGVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE5NzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBBZGQgbmV3
IHRlc3QgdG8gZW5zdXJlIHdlIGZhbGxiYWNrIHRvIG5vdG8gY29sb3IgZW1vamkgZm9yIGVtb2pp
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9mb250cy9mb250LWVtb2ppLXN5c3RlbS1mYWxs
YmFjay1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZm9udHMv
Zm9udC1lbW9qaS1zeXN0ZW0tZmFsbGJhY2suaHRtbDogQWRkZWQuCisKIDIwMTktMDEtMDcgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIExheW91dFRlc3RzL2h0
dHAvd3B0L2ZldGNoL2NzcC1yZXBvcnRzLWJ5cGFzcy1jc3AtY2hlY2tzLmh0bWwgaXMgZmxha3kK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mb250cy9mb250LWVtb2ppLXN5
c3RlbS1mYWxsYmFjay1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zv
bnRzL2ZvbnQtZW1vamktc3lzdGVtLWZhbGxiYWNrLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiMGM5NmFiMmNlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2ZvbnRzL2ZvbnQtZW1vamktc3lzdGVtLWZhbGxi
YWNrLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwyIEBACis8c3BhbiBzdHlsZT0iZm9udC1mYW1p
bHk6ICdOb3RvIENvbG9yIEVtb2ppJzsiPiYjeDFGNjAxPC9zcGFuPgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZm9udHMvZm9udC1lbW9qaS1zeXN0ZW0tZmFsbGJhY2su
aHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mb250cy9mb250LWVtb2ppLXN5c3RlbS1m
YWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iOWVk
MGQ5MTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mb250
cy9mb250LWVtb2ppLXN5c3RlbS1mYWxsYmFjay5odG1sCkBAIC0wLDAgKzEgQEAKKyYjeDFGNjAx
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CmluZGV4IGY4YTg3YjA5YmNmLi5kYjk2OGYyM2I5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAx
OS0wMS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0ZyZWVUeXBlXSBDb2xvciBlbW9qaSBub3QgcHJvcGVybHkgc3VwcG9ydGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE5NzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIENhdGFuemFyby4KKworICAgICAgICBBZGQgYSBuYW1l
IGZvciBjb21iaW5pbmcgZW5jbG9zaW5nIGtleWNhcCBjaGFyYWN0ZXIuCisKKyAgICAgICAgKiB3
dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oOgorCiAyMDE5LTAxLTA3ICBEYXZpZCBLaWx6ZXIg
IDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgUHJlZmVyIFJldGFpblB0cjxOU09iamVj
dD4gdG8gUmV0YWluUHRyPE5TT2JqZWN0ICo+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
bmljb2RlL0NoYXJhY3Rlck5hbWVzLmggYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmgKaW5kZXggNjk2NjYwMzcwZTQuLmQ5YjNmZWVmZDc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgKKysrIGIvU291cmNlL1dURi93dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oCkBAIC00Niw2ICs0Niw3IEBAIGNvbnN0IFVDaGFyIGJs
YWNrVXBQb2ludGluZ1RyaWFuZ2xlID0gMHgyNUIyOwogY29uc3QgVUNoYXIgYnVsbGV0ID0gMHgy
MDIyOwogY29uc3QgVUNoYXIgYnVsbHNleWUgPSAweDI1Q0U7CiBjb25zdCBVQ2hhciBjYXJyaWFn
ZVJldHVybiA9IDB4MDAwRDsKK2NvbnN0IFVDaGFyIGNvbWJpbmluZ0VuY2xvc2luZ0tleWNhcCA9
IDB4MjBFMzsKIGNvbnN0IFVDaGFyIGV0aGlvcGljUHJlZmFjZUNvbG9uID0gMHgxMzY2OwogY29u
c3QgVUNoYXIgZXRoaW9waWNXb3Jkc3BhY2UgPSAweDEzNjE7CiBjb25zdCBVQ2hhciBmaXJzdFN0
cm9uZ0lzb2xhdGUgPSAweDIwNjg7CkBAIC0xMTQsNiArMTE1LDcgQEAgdXNpbmcgV1RGOjpVbmlj
b2RlOjpibGFja1VwUG9pbnRpbmdUcmlhbmdsZTsKIHVzaW5nIFdURjo6VW5pY29kZTo6YnVsbGV0
OwogdXNpbmcgV1RGOjpVbmljb2RlOjpidWxsc2V5ZTsKIHVzaW5nIFdURjo6VW5pY29kZTo6Y2Fy
cmlhZ2VSZXR1cm47Cit1c2luZyBXVEY6OlVuaWNvZGU6OmNvbWJpbmluZ0VuY2xvc2luZ0tleWNh
cDsKIHVzaW5nIFdURjo6VW5pY29kZTo6ZXRoaW9waWNQcmVmYWNlQ29sb247CiB1c2luZyBXVEY6
OlVuaWNvZGU6OmV0aGlvcGljV29yZHNwYWNlOwogdXNpbmcgV1RGOjpVbmljb2RlOjpmaXJzdFN0
cm9uZ0lzb2xhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiYzUxZDg0OGEuLmMwZThhY2Y4MjcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTktMDEtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtGcmVlVHlwZV0gQ29sb3IgZW1vamkg
bm90IHByb3Blcmx5IHN1cHBvcnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkxOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRh
bnphcm8uCisKKyAgICAgICAgQWx3YXlzIHRyeSB0byBmYWxsYmFjayB0byBhIGNvbG9yZWQgZm9u
dCBmb3IgZW1vamlzLgorCisgICAgICAgIFRlc3Q6IHBsYXRmb3JtL2d0ay9mb250cy9mb250LWVt
b2ppLXN5c3RlbS1mYWxsYmFjay5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUJ5Q29t
YmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UpOiBHcm91cCByZWdpb25hbCBpbmRpY2F0b3JzIGluIHBh
aXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXk6OkNoYXJhY3RlckZhbGxiYWNrTWFwS2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlciBj
b25zdCk6IFBhc3MgUHJlZmVyQ29sb3JlZEZvbnQ6Ok5vIHRvIEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
QWRkIElzRm9yUGxhdGZvcm1Gb250IGVudW0gdG8gcmVwbGFjZSB0aGUgYm9vbCBwYXJhbWV0ZXIg
aW4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpnbHlw
aERhdGFGb3JTeXN0ZW1GYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJT
ZXF1ZW5jZUlzRW1vamkpOiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMg
YW4gZW1vamkuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KTogSW4gY2FzZSBvZiBlbW9qaXMgdHJ5IHRvIGZhbGxi
YWNrIHRvIGEgY29sb3JlZAorICAgICAgICBmb250IGV2ZW4gaWYgYmFzZSBmb250IGNhbiByZW5k
ZXIgdGhlIGVtb2ppIGluIGJsYWNrIGFuZCB3aGl0ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6IEFkZCBQcmVmZXJDb2xvcmVkRm9u
dCBwYXJhbWV0ZXIgdGhhdCBpcyBpZ25vcmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKTogQWRkIFByZWZlckNvbG9yZWRGb250
IHBhcmFtZXRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxh
dGZvcm1EYXRhRnJlZVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6IEluaXRpYWxpemUgbV9pc0NvbG9yQml0bWFwRm9udC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0
ZXJGb3JTeW50aGVzaXMgY29uc3QpOiBNb3ZlZCBmcm9tIGNyb3NzLXBsYXRmb3JtIGZpbGUuCisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50IGNvbnN0KTog
QWRkIGZyZWV0eXBlIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMpOiBBZGQgUHJlZmVyQ29sb3JlZEZvbnQgcGFyYW1ldGVy
IHRoYXQgaXMgaWdub3JlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0NoYXJhY3RlclByb3Bl
cnRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW1vamlLZXljYXBCYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzRW1vamlSZWdpb25hbEluZGljYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpp
c0Vtb2ppV2l0aFByZXNlbnRhdGlvbkJ5RGVmYXVsdCk6CisgICAgICAgIChXZWJDb3JlOjppc0Vt
b2ppTW9kaWZpZXJCYXNlKToKKwogMjAxOS0wMS0wNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gU1dTZXJ2ZXI6OkNvbm5lY3Rpb246OnJlc29s
dmVSZWdpc3RyYXRpb25SZWFkeVJlcXVlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCA5YTlj
OTc2ODYxMi4uY2JlMzJiOTRiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMjg2LDYgKzI4
Niw3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDCiAgICAgLy8gQ29uc3VtZSBtYXJrcy4KICAg
ICBib29sIHNhd0Vtb2ppR3JvdXBDYW5kaWRhdGUgPSBpc0Vtb2ppR3JvdXBDYW5kaWRhdGUoYmFz
ZUNoYXJhY3Rlcik7CiAgICAgYm9vbCBzYXdKb2luZXIgPSBmYWxzZTsKKyAgICBib29sIHNhd1Jl
Z2lvbmFsSW5kaWNhdG9yID0gaXNFbW9qaVJlZ2lvbmFsSW5kaWNhdG9yKGJhc2VDaGFyYWN0ZXIp
OwogICAgIHdoaWxlIChpdGVyYXRvciA8IGVuZCkgewogICAgICAgICBVQ2hhcjMyIG5leHRDaGFy
YWN0ZXI7CiAgICAgICAgIHVuc2lnbmVkIG1hcmtMZW5ndGggPSAwOwpAQCAtMjk2LDYgKzI5Nywx
MSBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQnlDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25z
dCBVQ2hhciomIGl0ZXJhdG9yLCBjb25zdCBVQwogICAgICAgICBpZiAoaXNWYXJpYXRpb25TZWxl
Y3RvcihuZXh0Q2hhcmFjdGVyKSB8fCBpc0Vtb2ppRml0enBhdHJpY2tNb2RpZmllcihuZXh0Q2hh
cmFjdGVyKSkKICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKIAorICAgICAgICBp
ZiAoc2F3UmVnaW9uYWxJbmRpY2F0b3IgJiYgaXNFbW9qaVJlZ2lvbmFsSW5kaWNhdG9yKG5leHRD
aGFyYWN0ZXIpKSB7CisgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRydWU7CisgICAgICAg
ICAgICBzYXdSZWdpb25hbEluZGljYXRvciA9IGZhbHNlOworICAgICAgICB9CisKICAgICAgICAg
aWYgKHNhd0pvaW5lciAmJiBpc0Vtb2ppR3JvdXBDYW5kaWRhdGUobmV4dENoYXJhY3RlcikpCiAg
ICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggOWZhYmFhMDdjMGMuLmQwM2MyNWY2MmY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTAyLDEwICs1MDIs
MTAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgaXNG
b3JQbGF0Zm9ybUZvbnQpCisgICAgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGUsIFVDaGFyMzIgY2hhcmFjdGVyLCBJc0ZvclBsYXRmb3JtRm9udCBpc0Zv
clBsYXRmb3JtRm9udCkKICAgICAgICAgOiBsb2NhbGUobG9jYWxlKQogICAgICAgICAsIGNoYXJh
Y3RlcihjaGFyYWN0ZXIpCi0gICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9y
bUZvbnQpCisgICAgICAgICwgaXNGb3JQbGF0Zm9ybUZvbnQoaXNGb3JQbGF0Zm9ybUZvbnQgPT0g
SXNGb3JQbGF0Zm9ybUZvbnQ6OlllcykKICAgICB7CiAgICAgfQogCkBAIC01NjAsMTMgKzU2MCwx
MyBAQCBzdGF0aWMgU3lzdGVtRmFsbGJhY2tDYWNoZSYgc3lzdGVtRmFsbGJhY2tDYWNoZSgpCiAg
ICAgcmV0dXJuIG1hcC5nZXQoKTsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnQ6OnN5c3RlbUZhbGxi
YWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3QKK1JlZlB0cjxG
b250PiBGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0
ZXIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIElzRm9yUGxhdGZvcm1Gb250
IGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdAogewogICAgIGF1dG8gZm9udEFkZFJlc3VsdCA9IHN5
c3RlbUZhbGxiYWNrQ2FjaGUoKS5hZGQodGhpcywgQ2hhcmFjdGVyRmFsbGJhY2tNYXAoKSk7CiAK
ICAgICBpZiAoIWNoYXJhY3RlcikgewogICAgICAgICBVQ2hhciBjb2RlVW5pdCA9IDA7Ci0gICAg
ICAgIHJldHVybiBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsICZjb2RlVW5pdCwgMSk7
CisgICAgICAgIHJldHVybiBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhkZXNjcmlwdGlvbiwgdGhpcywgaXNGb3JQbGF0Zm9ybUZvbnQsIEZvbnRDYWNo
ZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCAmY29kZVVuaXQsIDEpOwogICAgIH0KIAogICAgIGF1
dG8ga2V5ID0gQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkoZGVzY3JpcHRpb24ubG9jYWxlKCksIGNo
YXJhY3RlciwgaXNGb3JQbGF0Zm9ybUZvbnQpOwpAQCAtNTg2LDcgKzU4Niw3IEBAIFJlZlB0cjxG
b250PiBGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0
ZXIsIGNvbnN0IEZvbnRECiAgICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwogICAgICAg
ICB9CiAKLSAgICAgICAgZmFsbGJhY2tGb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoZGVzY3JpcHRpb24sIHRoaXMsIGlzRm9yUGxhdGZvcm1G
b250LCBjb2RlVW5pdHMsIGNvZGVVbml0c0xlbmd0aCkuZ2V0KCk7CisgICAgICAgIGZhbGxiYWNr
Rm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJz
KGRlc2NyaXB0aW9uLCB0aGlzLCBpc0ZvclBsYXRmb3JtRm9udCwgRm9udENhY2hlOjpQcmVmZXJD
b2xvcmVkRm9udDo6Tm8sIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKS5nZXQoKTsKICAgICAg
ICAgaWYgKGZhbGxiYWNrRm9udCkKICAgICAgICAgICAgIGZhbGxiYWNrRm9udC0+bV9pc1VzZWRJ
blN5c3RlbUZhbGxiYWNrQ2FjaGUgPSB0cnVlOwogICAgIH0KQEAgLTYxMiw3ICs2MTIsNyBAQCB2
b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKICAgICB9CiB9CiAKLSNp
ZiAhUExBVEZPUk0oQ09DT0EpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBF
KQogYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZv
bnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVDaGFyMzIpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChmb250VmFyaWFudENhcHMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAppbmRleCBiZmZjYmI4NWJjYS4uMTFkZjFlNmI5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTY1LDYgKzY1LDcgQEAgc3RydWN0IFdpZHRoSXRlcmF0
b3I7CiAKIGVudW0gRm9udFZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21h
bGxDYXBzVmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCwgQnJva2VuSWRlb2dyYXBoVmFyaWFu
dCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRj
aCB9OworZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07
CiAKIGNsYXNzIEZvbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250PiB7CiBwdWJsaWM6CkBAIC0x
NzYsNyArMTc3LDcgQEAgcHVibGljOgogICAgIGJvb2wgc3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIz
MikgY29uc3Q7CiAgICAgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIpIGNv
bnN0OwogCi0gICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihV
Q2hhcjMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBj
b25zdDsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKFVD
aGFyMzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIElzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsK
IAogICAgIGNvbnN0IEdseXBoUGFnZSogZ2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpIGNv
bnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmlu
ZGV4IGI2MzVhMTNjYzQ4Li41YWE0MWRmOTUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgRm9udFBsYXRm
b3JtRGF0YTsKIGNsYXNzIEZvbnRTZWxlY3RvcjsKIGNsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRh
OwogY2xhc3MgRm9udDsKK2VudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90Owog
CiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKQEAgLTE5MCw3
ICsxOTEsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZvbnRDYWNoZSYg
c2luZ2xldG9uKCk7CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSB0
aGUgcGxhdGZvcm0uCi0gICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBi
b29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICBlbnVtIGNsYXNzIFByZWZlckNvbG9yZWRGb250IDogdWludDhfdCB7IE5vLCBZ
ZXMgfTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIElzRm9yUGxh
dGZvcm1Gb250LCBQcmVmZXJDb2xvcmVkRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCk7CiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzKCk7
CiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAppbmRleCAwNDIzOWJmMzZlNS4u
YTlmNDFlMTc3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlRm9udHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCkBAIC0zNDUsNyArMzQ1LDcgQEAgR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIgY2hhcmFj
dGVyLCBjb25zdAogICAgIGlmICghZm9udCkKICAgICAgICAgZm9udCA9ICZyZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKIAotICAgIGF1
dG8gc3lzdGVtRmFsbGJhY2tGb250ID0gZm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFj
dGVyKGNoYXJhY3RlciwgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQpOworICAgIGF1
dG8gc3lzdGVtRmFsbGJhY2tGb250ID0gZm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFj
dGVyKGNoYXJhY3RlciwgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQgPyBJc0ZvclBs
YXRmb3JtRm9udDo6WWVzIDogSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vKTsKICAgICBpZiAoIXN5c3Rl
bUZhbGxiYWNrRm9udCkKICAgICAgICAgcmV0dXJuIEdseXBoRGF0YSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6
ek5HLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCmluZGV4IDllZmU2ZjU4N2M3Li4xMDdkYzcxMzE3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIFVTRShDQUlSTykK
IAorI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRl
IDx1bmljb2RlL25vcm1senIuaD4KQEAgLTQ1LDYgKzQ2LDYwIEBAIGJvb2wgRm9udENhc2NhZGU6
OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3N0YXRpYyBib29sIGNoYXJhY3RlclNlcXVlbmNlSXNFbW9qaShjb25zdCBWZWN0
b3I8VUNoYXIsIDQ+JiBub3JtYWxpemVkQ2hhcmFjdGVycywgaW50MzJfdCBub3JtYWxpemVkTGVu
Z3RoKQoreworICAgIFVDaGFyMzIgY2hhcmFjdGVyOworICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5n
dGggPSAwOworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciBpdGVyYXRvcihub3Jt
YWxpemVkQ2hhcmFjdGVycy5kYXRhKCksIDAsIG5vcm1hbGl6ZWRMZW5ndGgsIG5vcm1hbGl6ZWRM
ZW5ndGgpOworICAgIGlmICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5n
dGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaXNFbW9qaUtleWNhcEJhc2Uo
Y2hhcmFjdGVyKSkgeworICAgICAgICBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOwor
ICAgICAgICBVQ2hhcjMyIG5leHRDaGFyYWN0ZXI7CisgICAgICAgIGlmICghaXRlcmF0b3IuY29u
c3VtZShuZXh0Q2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAobmV4dENoYXJhY3RlciA9PSBjb21iaW5pbmdFbmNsb3NpbmdL
ZXljYXApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBWYXJpYXRpb24g
c2VsZWN0b3IgMTYuCisgICAgICAgIGlmIChuZXh0Q2hhcmFjdGVyID09IDB4RkUwRikgeworICAg
ICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsKKyAgICAgICAgICAgIGlm
ICghaXRlcmF0b3IuY29uc3VtZShuZXh0Q2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChuZXh0Q2hhcmFjdGVy
ID09IGNvbWJpbmluZ0VuY2xvc2luZ0tleWNhcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBS
ZWdpb25hbCBpbmRpY2F0b3IuCisgICAgaWYgKGlzRW1vamlSZWdpb25hbEluZGljYXRvcihjaGFy
YWN0ZXIpKSB7CisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7CisgICAg
ICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlcjsKKyAgICAgICAgaWYgKCFpdGVyYXRvci5jb25zdW1l
KG5leHRDaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmIChpc0Vtb2ppUmVnaW9uYWxJbmRpY2F0b3IobmV4dENoYXJhY3Rlcikp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKGNoYXJhY3RlciA9PSBjb21iaW5pbmdFbmNsb3NpbmdLZXljYXApCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzRW1vamlXaXRoUHJlc2VudGF0aW9uQnlEZWZh
dWx0KGNoYXJhY3RlcikKKyAgICAgICAgfHwgaXNFbW9qaU1vZGlmaWVyQmFzZShjaGFyYWN0ZXIp
CisgICAgICAgIHx8IGlzRW1vamlGaXR6cGF0cmlja01vZGlmaWVyKGNoYXJhY3RlcikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBjb25zdCBGb250KiBG
b250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAogewogICAgIFVFcnJvckNvZGUgZXJy
b3IgPSBVX1pFUk9fRVJST1I7CkBAIC02MSw4ICsxMTYsMTIgQEAgY29uc3QgRm9udCogRm9udENh
c2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hh
cmFjdGUKICAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3Ro
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBib29sIGlzRW1vamkgPSBjaGFyYWN0
ZXJTZXF1ZW5jZUlzRW1vamkobm9ybWFsaXplZENoYXJhY3RlcnMsIG5vcm1hbGl6ZWRMZW5ndGgp
OworCiAgICAgY29uc3QgRm9udCogYmFzZUZvbnQgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hh
cmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCkuZm9udDsKLSAgICBpZiAoYmFzZUZvbnQgJiYg
KHN0YXRpY19jYXN0PGludDMyX3Q+KGNsdXN0ZXJMZW5ndGgpID09IG5vcm1hbGl6ZWRMZW5ndGgg
fHwgYmFzZUZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3Rl
cnMsIGxlbmd0aCkpKQorICAgIGlmIChiYXNlRm9udAorICAgICAgICAmJiAoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oY2x1c3Rlckxlbmd0aCkgPT0gbm9ybWFsaXplZExlbmd0aCB8fCBiYXNlRm9udC0+
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkK
KyAgICAgICAgJiYgKCFpc0Vtb2ppIHx8IGJhc2VGb250LT5wbGF0Zm9ybURhdGEoKS5pc0NvbG9y
Qml0bWFwRm9udCgpKSkKICAgICAgICAgcmV0dXJuIGJhc2VGb250OwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewpAQCAtNzAs
MTIgKzEyOSwxMiBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogICAgICAgICBpZiAoIWZhbGxi
YWNrRm9udCB8fCBmYWxsYmFja0ZvbnQgPT0gYmFzZUZvbnQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBpZiAoZmFsbGJhY2tGb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICBpZiAoZmFsbGJhY2tGb250
LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgp
ICYmICghaXNFbW9qaSB8fCBmYWxsYmFja0ZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRt
YXBGb250KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrRm9udDsKICAgICB9CiAKLSAg
ICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVt
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9udERlc2NyaXB0aW9uLCBiYXNlRm9udCwgZmFsc2Us
IGNoYXJhY3RlcnMsIGxlbmd0aCkpIHsKLSAgICAgICAgaWYgKHN5c3RlbUZhbGxiYWNrLT5jYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAg
IGlmIChhdXRvIHN5c3RlbUZhbGxiYWNrID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMobV9mb250RGVzY3JpcHRpb24sIGJhc2VGb250LCBJc0ZvclBs
YXRmb3JtRm9udDo6Tm8sIGlzRW1vamkgPyBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpZ
ZXMgOiBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpObywgY2hhcmFjdGVycywgbGVuZ3Ro
KSkgeworICAgICAgICBpZiAoc3lzdGVtRmFsbGJhY2stPmNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkgJiYgKCFpc0Vtb2ppIHx8IHN5c3RlbUZh
bGxiYWNrLT5wbGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgICAg
IHJldHVybiBzeXN0ZW1GYWxsYmFjay5nZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcAppbmRleCBlMjU4MTQxZTk5YS4uNTI4NTI4NDI1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5jcHAKQEAgLTEzNTQsNyArMTM1NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBs
b29rdXBGYWxsYmFja0ZvbnQoQ1RGb250UmVmIGZvbnQsIEZvbnRTZWxlY3Rpb25WYWx1CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJh
Y2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0
IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpz
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgSXNGb3JQbGF0Zm9ybUZvbnQgaXNG
b3JQbGF0Zm9ybUZvbnQsIFByZWZlckNvbG9yZWRGb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYg
KGxlbmd0aCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycykpIHsKQEAg
LTEzODMsNyArMTM4Myw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgQ1RGb250UmVm
IHN1YnN0aXR1dGVGb250ID0gZmFsbGJhY2tEZWR1cFNldCgpLmFkZChyZXN1bHQpLml0ZXJhdG9y
LT5nZXQoKTsKIAogICAgIGJvb2wgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZTsKLSAg
ICBzdGQ6OnRpZShzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlKSA9IGNvbXB1dGVOZWNl
c3NhcnlTeW50aGVzaXMoc3Vic3RpdHV0ZUZvbnQsIGRlc2NyaXB0aW9uLCBpc1BsYXRmb3JtRm9u
dCkuYm9sZE9ibGlxdWVQYWlyKCk7CisgICAgc3RkOjp0aWUoc3ludGhldGljQm9sZCwgc3ludGhl
dGljT2JsaXF1ZSkgPSBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKHN1YnN0aXR1dGVGb250LCBk
ZXNjcmlwdGlvbiwgaXNGb3JQbGF0Zm9ybUZvbnQgPT0gSXNGb3JQbGF0Zm9ybUZvbnQ6Olllcyku
Ym9sZE9ibGlxdWVQYWlyKCk7CiAKICAgICBGb250UGxhdGZvcm1EYXRhIGFsdGVybmF0ZUZvbnQo
c3Vic3RpdHV0ZUZvbnQsIHBsYXRmb3JtRGF0YS5zaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY09ibGlxdWUsIHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBwbGF0Zm9ybURhdGEud2lk
dGhWYXJpYW50KCksIHBsYXRmb3JtRGF0YS50ZXh0UmVuZGVyaW5nTW9kZSgpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hl
RnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGM0NDZlZGI1MTA3Li5kMzA5Nzc0MDk5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENh
Y2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyB2
b2lkIGdldEZvbnRQcm9wZXJ0aWVzRnJvbVBhdHRlcm4oRmNQYXR0ZXJuKiBwYXR0ZXJuLCBjb25z
dCBGb250RGVzY3JpcHRpCiAgICAgfQogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgRm9udCosIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3Rl
cnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCosIElzRm9y
UGxhdGZvcm1Gb250LCBQcmVmZXJDb2xvcmVkRm9udCBwcmVmZXJDb2xvcmVkRm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBGY1VuaXF1ZVB0cjxG
Y0NoYXJTZXQ+IGZvbnRDb25maWdDaGFyU2V0KEZjQ2hhclNldENyZWF0ZSgpKTsKICAgICBVVEYx
NlVDaGFyMzJJdGVyYXRvciBpdGVyYXRvcihjaGFyYWN0ZXJzLCBsZW5ndGgpOwpAQCAtMTMyLDYg
KzEzMiw4IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgRmNQYXR0ZXJuQWRkQ2hhclNl
dChwYXR0ZXJuLmdldCgpLCBGQ19DSEFSU0VULCBmb250Q29uZmlnQ2hhclNldC5nZXQoKSk7CiAK
ICAgICBGY1BhdHRlcm5BZGRCb29sKHBhdHRlcm4uZ2V0KCksIEZDX1NDQUxBQkxFLCBGY1RydWUp
OworICAgIGlmIChwcmVmZXJDb2xvcmVkRm9udCA9PSBQcmVmZXJDb2xvcmVkRm9udDo6WWVzKQor
ICAgICAgICBGY1BhdHRlcm5BZGRCb29sKHBhdHRlcm4uZ2V0KCksIEZDX0NPTE9SLCBGY1RydWUp
OwogCiAgICAgaWYgKCFjb25maWd1cmVQYXR0ZXJuRm9yRm9udERlc2NyaXB0aW9uKHBhdHRlcm4u
Z2V0KCksIGRlc2NyaXB0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1E
YXRhRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcAppbmRleCAwNDM3OTM0ODhjYS4uYmNmNjc1
NGM0YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CiAjaW5jbHVkZSA8Zm9udGNvbmZp
Zy9mY2ZyZWV0eXBlLmg+CiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVU
WVBFX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICiAjaW5jbHVkZSA8aGItZnQuaD4K
ICNpbmNsdWRlIDxoYi1vdC5oPgpAQCAtMTE3LDYgKzExOCwxMiBAQCBGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgRmNQYXR0ZXJu
KiBwYXR0ZQogICAgIG1fZml4ZWRXaWR0aCA9IGZpeGVkV2lkdGg7CiAKICAgICBidWlsZFNjYWxl
ZEZvbnQoZm9udEZhY2UpOworCisjaWZkZWYgRlRfSEFTX0NPTE9SCisgICAgQ2Fpcm9GdEZhY2VM
b2NrZXIgY2Fpcm9GdEZhY2VMb2NrZXIobV9zY2FsZWRGb250LmdldCgpKTsKKyAgICBpZiAoRlRf
RmFjZSBmdEZhY2UgPSBjYWlyb0Z0RmFjZUxvY2tlci5mdEZhY2UoKSkKKyAgICAgICAgbV9pc0Nv
bG9yQml0bWFwRm9udCA9IEZUX0hBU19DT0xPUihmdEZhY2UpOworI2VuZGlmCiB9CiAKIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCmluZGV4IGQ2MzYyMzNh
YmUyLi5mMWNhN2ViNjgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5j
cHAKQEAgLTE4OCw0ICsxODgsMjcgQEAgZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3aWR0aCA/IHdpZHRoIDogbV9zcGFjZVdp
ZHRoOwogfQogCitib29sIEZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50
aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50Q2FwcywgVUNoYXIzMikgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBz
OjpTbWFsbDoKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgorICAgIGNhc2UgRm9u
dFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0
aXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU3lu
dGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3Zl
LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgRm9udDo6cGxhdGZvcm1T
dXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBDYWlyb0Z0
RmFjZUxvY2tlciBjYWlyb0Z0RmFjZUxvY2tlcihtX3BsYXRmb3JtRGF0YS5zY2FsZWRGb250KCkp
OworICAgIGlmIChGVF9GYWNlIGZhY2UgPSBjYWlyb0Z0RmFjZUxvY2tlci5mdEZhY2UoKSkKKyAg
ICAgICAgcmV0dXJuICEhRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0ZXIpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IGYyZDY2MGRhOWZiLi4wNzk0
ODgxMzY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBzdGF0aWMgSEZPTlQgY3Jl
YXRlTUxhbmdGb250KElNTGFuZ0ZvbnRMaW5rVHlwZSogbGFuZ0ZvbnRMaW5rLCBIREMgaGRjLCBE
V09SRCBjbwogICAgIHJldHVybiBoZm9udDsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgSXNGb3JQbGF0Zm9ybUZvbnQsIFByZWZl
ckNvbG9yZWRGb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbMF07CiAgICAgUmVmUHRyPEZvbnQ+
IGZvbnREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9DaGFy
YWN0ZXJQcm9wZXJ0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NoYXJhY3Rl
clByb3BlcnRpZXMuaAppbmRleCBjNjUzMGE0OGFjYS4uZTIwZDY4MDEzN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQ2hhcmFjdGVyUHJvcGVydGllcy5oCkBAIC03
Niw0ICs3NiwzNCBAQCBpbmxpbmUgYm9vbCBpc1ZhcmlhdGlvblNlbGVjdG9yKFVDaGFyMzIgY2hh
cmFjdGVyKQogICAgIHJldHVybiBjaGFyYWN0ZXIgPj0gMHhGRTAwICYmIGNoYXJhY3RlciA8PSAw
eEZFMEY7CiB9CiAKK2lubGluZSBib29sIGlzRW1vamlLZXljYXBCYXNlKFVDaGFyMzIgY2hhcmFj
dGVyKQoreworICAgIHJldHVybiAoY2hhcmFjdGVyID49ICcwJyAmJiBjaGFyYWN0ZXIgPD0gJzkn
KSB8fCBjaGFyYWN0ZXIgPT0gJyMnIHx8IGNoYXJhY3RlciA9PSAnKic7Cit9CisKK2lubGluZSBi
b29sIGlzRW1vamlSZWdpb25hbEluZGljYXRvcihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyID49IDB4MUYxRTYgJiYgY2hhcmFjdGVyIDw9IDB4MUYxRkY7Cit9CisK
K2lubGluZSBib29sIGlzRW1vamlXaXRoUHJlc2VudGF0aW9uQnlEZWZhdWx0KFVDaGFyMzIgY2hh
cmFjdGVyKQoreworI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID49IDU3CisgICAgcmV0dXJu
IHVfaGFzQmluYXJ5UHJvcGVydHkoY2hhcmFjdGVyLCBVQ0hBUl9FTU9KSV9QUkVTRU5UQVRJT04p
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY2hhcmFjdGVyKTsKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgaXNFbW9qaU1vZGlmaWVyQmFzZShVQ2hhcjMyIGNo
YXJhY3RlcikKK3sKKyNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1NworICAgIHJldHVy
biB1X2hhc0JpbmFyeVByb3BlcnR5KGNoYXJhY3RlciwgVUNIQVJfRU1PSklfTU9ESUZJRVJfQkFT
RSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOworICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>