<?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>101949</bug_id>
          
          <creation_ts>2012-11-12 10:16:20 -0800</creation_ts>
          <short_desc>[Chromium] Refactor theme font lookup into a factory</short_desc>
          <delta_ts>2012-11-14 13:56:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>102177</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Scott Violet">sky</reporter>
          <assigned_to name="Scott Violet">sky</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>764542</commentid>
    <comment_count>0</comment_count>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-12 10:16:20 -0800</bug_when>
    <thetext>Long term we would like to allow RenderThemeChromiumLinux to run on both windows and linux. However the font lookup should remain platform specific. We need to refactor font code out of RenderThemeChromiumSkia into platform specific methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764551</commentid>
    <comment_count>1</comment_count>
      <attachid>173669</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-12 10:27:51 -0800</bug_when>
    <thetext>Created attachment 173669
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764552</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-12 10:30:34 -0800</bug_when>
    <thetext>Attachment 173669 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:50:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:56:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:75:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:101:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:102:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:147:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderThemeChromiumFontProvider.cpp:34:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 8 in 9 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>764797</commentid>
    <comment_count>3</comment_count>
      <attachid>173669</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-11-12 14:00:54 -0800</bug_when>
    <thetext>Comment on attachment 173669
Fix

R=me, but you need to fix up the style warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764889</commentid>
    <comment_count>4</comment_count>
      <attachid>173739</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-12 15:33:07 -0800</bug_when>
    <thetext>Created attachment 173739
Fixes style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766083</commentid>
    <comment_count>5</comment_count>
      <attachid>173739</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-13 14:50:23 -0800</bug_when>
    <thetext>Comment on attachment 173739
Fixes style issues

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

&gt; Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:51
&gt; +void RenderThemeChromiumFontProvider::getFont(int propId, FontDescription&amp; fontDescription)

Nit: It&apos;s not that common to prefix a method with &apos;get&apos; in WebKit. Something like initializeSystemFont might be more descriptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766105</commentid>
    <comment_count>6</comment_count>
      <attachid>174007</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-13 15:19:57 -0800</bug_when>
    <thetext>Created attachment 174007
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766106</commentid>
    <comment_count>7</comment_count>
      <attachid>174008</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-13 15:22:56 -0800</bug_when>
    <thetext>Created attachment 174008
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766340</commentid>
    <comment_count>8</comment_count>
      <attachid>174008</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-13 20:06:40 -0800</bug_when>
    <thetext>Comment on attachment 174008
Patch for landing

Clearing flags on attachment: 174008

Committed r134524: &lt;http://trac.webkit.org/changeset/134524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766341</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-13 20:06:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766429</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-13 22:13:49 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 102177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766438</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-13 22:19:03 -0800</bug_when>
    <thetext>It looks like this patch caused the following build error:

third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:37:24: error: declaration
      requires a global constructor [-Werror,-Wglobal-constructors]
static FontDescription smallSystemFont;
                       ^~~~~~~~~~~~~~~
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:37:24: error: declaration
      requires an exit-time destructor [-Werror,-Wexit-time-destructors]
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:37:24: error: declaration
      requires a global destructor [-Werror,-Wglobal-constructors]
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:38:24: error: declaration
      requires a global constructor [-Werror,-Wglobal-constructors]
static FontDescription menuFont;
                       ^~~~~~~~
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:38:24: error: declaration
      requires an exit-time destructor [-Werror,-Wexit-time-destructors]
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:38:24: error: declaration
      requires a global destructor [-Werror,-Wglobal-constructors]
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:39:24: error: declaration
      requires a global constructor [-Werror,-Wglobal-constructors]
static FontDescription labelFont;
                       ^~~~~~~~~
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:39:24: error: declaration
      requires an exit-time destructor [-Werror,-Wexit-time-destructors]
third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.cpp:39:24: error: declaration
      requires a global destructor [-Werror,-Wglobal-constructors]
9 errors generated.
make: *** [out/Release/obj.target/webcore_rendering/third_party/WebKit/Source/WebCore/rendering/RenderThemeChromiumFontProviderLinux.o] Error 1
make: *** Waiting for unfinished jobs....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766923</commentid>
    <comment_count>12</comment_count>
      <attachid>174165</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-14 08:26:10 -0800</bug_when>
    <thetext>Created attachment 174165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766976</commentid>
    <comment_count>13</comment_count>
      <attachid>174165</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-14 09:40:03 -0800</bug_when>
    <thetext>Comment on attachment 174165
Patch

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

&gt; Source/WebCore/rendering/RenderThemeChromiumFontProviderWin.cpp:47
&gt; +static FontDescription smallSystemFont;
&gt; +static FontDescription menuFont;
&gt; +static FontDescription labelFont;

These look like static initializers too, although MSVC won&apos;t complain about it.  Hmm, maybe make these pointers and initialize them lazily in systemFont()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766992</commentid>
    <comment_count>14</comment_count>
      <attachid>174184</attachid>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-14 09:58:49 -0800</bug_when>
    <thetext>Created attachment 174184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766993</commentid>
    <comment_count>15</comment_count>
    <who name="Scott Violet">sky</who>
    <bug_when>2012-11-14 09:59:41 -0800</bug_when>
    <thetext>I was worried about call order, so I went with DEFINE_STATIC_LOCAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767273</commentid>
    <comment_count>16</comment_count>
      <attachid>174184</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 13:56:41 -0800</bug_when>
    <thetext>Comment on attachment 174184
Patch

Clearing flags on attachment: 174184

Committed r134662: &lt;http://trac.webkit.org/changeset/134662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767274</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 13:56:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173669</attachid>
            <date>2012-11-12 10:27:51 -0800</date>
            <delta_ts>2012-11-12 15:33:07 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33136</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTExLTEyICBTY290dCBW
aW9sZXQgIDxza3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIFJlZmFjdG9yIHRo
ZW1lIGZvbnQgbG9va3VwIGludG8gYSBmYWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgdWx0aW1hdGVseSBhbGxvdyB1cyB0byB1
c2Ugd2hhdCBpcyBjdXJyZW50bHkgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IG9uIHdpbmRv
d3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBSZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAg
ICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXI6OmRlZmF1bHRHVUlGb250KTogTW92ZWQgaW50byBSZW5kZXJUaGVt
ZUZvbnRQcm92aWRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZv
bnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIpOiBUaGlzIGlzIHRoZSBm
b250IHJlbGF0ZWQgbWV0aG9kcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1
bHRGb250U2l6ZSk6IFdoYXQgd2FzIGluIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZh
dWx0Rm9udFNpemUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyOjpnZXRGb250KTogV2hhdCB3YXMgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5
c3RlbUZvbnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJv
dmlkZXJXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6cG9pbnRzVG9QaXhlbHMpOiBNb3ZlZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4uCisg
ICAgICAgIChXZWJDb3JlOjpnZXROb25DbGllbnRNZXRyaWNzKTogTW92ZWQgZnJvbSBSZW5kZXJU
aGVtZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udFNpemUpOiBNb3Zl
ZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpnZXRGb250KTogTW92ZWQgZnJvbSBSZW5kZXJUaGVt
ZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlcjo6c2V0RGVmYXVsdEZvbnRTaXplKTogTW92ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9t
aXVtV2luLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEpOiBNb3ZlZCBpbnRvIFJlbmRlclRoZW1lRm9udFByb3ZpZGVyLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOiBDYWxscyB0
byBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250U2l6ZSk6IENhbGxzIHRvIFJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmg6CisgICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6IE1v
dmVzIGRlZmF1bHRGb250U2l6ZSBpbnRvIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOiBNb3ZlcyBm
b250IGNvZGUgaW50byBSZW5kZXJUaGVtZUZvbnRQcm92aWRlcldpbi4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmg6IFJlbW92
ZWQgb3ZlcnJpZGVuIG1ldGhvZHMgbm93IGhhbmRsZWQgYnkgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuCisgICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtV2luKToKKwogMjAxMi0xMS0xMiAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XVtKU0NdIFNj
cmlwdFByb2ZpbGVOb2RlOjpjYWxsVUlEIG5lZWRzIG5vdCB0byBiZSBbQ3VzdG9tXQpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTM0MjQ2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNDU0LDYgKzM0NTQsMTAgQEAKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQuaCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHAnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyTGludXguY3BwJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldp
bi5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXgu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Lmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgnLApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDEzNDI0NikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTY2LDcgKzE5NjYsOCBAQAogICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0
byBzdG9yZSB0aGVzZSBwYXR0ZXJucyBpbiBhIHZhcmlhYmxlLgogICAgICAgICBbJ2V4Y2x1ZGUn
LCAnKGNhaXJvfGNhfGNmfGNnfGN1cmx8ZWZsfGZyZWV0eXBlfGdzdHJlYW1lcnxndGt8bGludXh8
bWFjfG9wZW5nbHxvcGVudmd8b3BlbnR5cGV8cGFuZ298cG9zaXh8cXR8c291cHxzdmd8c3ltYmlh
bnx0ZXhtYXB8aXBob25lfHdpbnx3aW5jZXx3eCkvJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICco
PzwhQ2hyb21pdW0pKENhaXJvfENGfENHfEN1cmx8R3RrfEpTQ3xMaW51eHxNYWN8T3BlblR5cGV8
UE9TSVh8UG9zaXh8UXR8U2FmYXJpfFNvdXB8U3ltYmlhbnxXaW58V2luQ0V8V3gpXFwuKGNwcHxt
bT8pJCddLAotCisgICAgICAgICMgUHJldmlvdXMgcnVsZSBleGNsdWRlcyB0aGluZ3MgbGlrZSBD
aHJvbWl1bUZvb1dpbiwgaW5jbHVkZSB0aG9zZS4KKyAgICAgICAgWydpbmNsdWRlJywgJ3JlbmRl
cmluZy8uKkNocm9taXVtLipcXC4oY3BwfG1tPykkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdB
bGxJbk9uZVxcLmNwcCQnXSwKICAgICAgIF0sCiAgICAgICAnY29uZGl0aW9ucyc6IFsKQEAgLTE5
ODQsNiArMTk4NSw5IEBACiAgICAgICAgICAgICAjIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIGlz
IG5vdCB1c2VkIG9uIG1hYyBzaW5jZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjCiAgICAgICAgICAg
ICAjIGRvZXMgbm90IHJlZmVyZW5jZSB0aGUgU2tpYSBjb2RlIHRoYXQgaXMgdXNlZCBieSBXaW5k
b3dzLCBMaW51eCBhbmQgQW5kcm9pZC4KICAgICAgICAgICAgIFsnZXhjbHVkZScsICdyZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWFcXC5jcHAkJ10sCisgICAgICAgICAgICAjIFJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIgaXMgdXNlZCBieSBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYS4KKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlclxcLmNwcCddLAorICAgICAgICAgICAgWydleGNsdWRlJywgJ3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyXFwuaCddLAogICAgICAgICAgIF0s
CiAgICAgICAgIH0seyAjIE9TIT0ibWFjIgogICAgICAgICAgICdzb3VyY2VzLyc6IFtbJ2V4Y2x1
ZGUnLCAnTWFjXFwuKGNwcHxtbT8pJCddXQpAQCAtMjAwOSw2ICsyMDEzLDcgQEAKICAgICAgICAg
fV0sCiAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKICAgICAgICAgICAnc291cmNlcy8nOiBb
CisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXJMaW51eFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdyZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4XFwuY3BwJCddLAogICAgICAgICAgIF0sCiAg
ICAgICAgIH0seyAjIE9TIT0iYW5kcm9pZCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUg
ZGVmYXVsdCB2YXJpYWJsZS13aWR0aCBmb250IHNpemUuICBXZSB1c2UgdGhpcyBhcyB0aGUgZGVm
YXVsdCBmb250CisvLyBzaXplIGZvciB0aGUgInN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBz
aXplICh3aGljaCB3ZSB0aGVuIHNocmluaykgZm9yCisvLyBmb3JtIGNvbnRyb2wgZm9udHMuCisv
LyBzdGF0aWMKK2Zsb2F0IFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNfZGVmYXVs
dEZvbnRTaXplID0gMTYuMDsKKworLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAtSUUg
dXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9y
IGZvcm0gY29udHJvbHMuCisvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNh
bGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJucyBN
UyBTaGVsbCBEbGcpCisvLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBGSVhN
RTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBB
TlNJIGVuY29kaW5ncy4KKy8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSBy
ZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFpbiBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVweCku
IFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFyaWFsLgorY29uc3QgU3RyaW5nJiBSZW5kZXJUaGVt
ZUNocm9taXVtRm9udFByb3ZpZGVyOjpkZWZhdWx0R1VJRm9udCgpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJBcmlhbCIpKSk7Cisg
ICAgcmV0dXJuIGZvbnRGYWNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExG
CgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250
UHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXJfaAorI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVy
X2gKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRm9udERlc2NyaXB0aW9uOworCitjbGFzcyBSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBnZXRGb250KGludCBw
cm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRGb250
U2l6ZShpbnQpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IFdURjo6U3RyaW5nJiBk
ZWZhdWx0R1VJRm9udCgpOworCisgICAgc3RhdGljIGZsb2F0IHNfZGVmYXVsdEZvbnRTaXplOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyTGludXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVy
TGludXguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgRm9udERlc2NyaXB0aW9uIHNtYWxsU3lzdGVtRm9udDsKK3N0
YXRpYyBGb250RGVzY3JpcHRpb24gbWVudUZvbnQ7CitzdGF0aWMgRm9udERlc2NyaXB0aW9uIGxh
YmVsRm9udDsKKworLy8gc3RhdGljCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlk
ZXI6OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNpemUpCit7CisgICAgc19kZWZhdWx0Rm9u
dFNpemUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZm9udFNpemUpOworCisgICAgLy8gUmVzZXQgY2Fj
aGVkIGZvbnRzLgorICAgIHNtYWxsU3lzdGVtRm9udCA9IG1lbnVGb250ID0gbGFiZWxGb250ID0g
Rm9udERlc2NyaXB0aW9uKCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyOjpnZXRGb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uKQoreworICAgIGZsb2F0IGZvbnRTaXplID0gc19kZWZhdWx0Rm9udFNpemU7
CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29u
dHJvbDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgorICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gQmVj
YXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKKyAgICAgICAgLy8gYXJl
IGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0aGF0IHdlIHVz
ZSBvbgorICAgICAgICAvLyBXaW5kb3dzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcG9p
bnRzUGVySW5jaCA9IDcyLjBmOworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcGl4ZWxzUGVy
SW5jaCA9IDk2LjBmOworICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBvaW50c1BlckluY2gp
ICogcGl4ZWxzUGVySW5jaDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KCkpOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
SXRhbGljKGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250
UHJvdmlkZXJMaW51eC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAq
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlk
ZXJXaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjZGVmaW5lIFNJWkVPRl9TVFJVQ1RfV0lUSF9T
UEVDSUZJRURfTEFTVF9NRU1CRVIoc3RydWN0TmFtZSwgbWVtYmVyKSBcCisgICAgb2Zmc2V0b2Yo
c3RydWN0TmFtZSwgbWVtYmVyKSArIFwKKyAgICAoc2l6ZW9mIHN0YXRpY19jYXN0PHN0cnVjdE5h
bWUqPigwKS0+bWVtYmVyKQorI2RlZmluZSBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RB
IFwKKyAgICBTSVpFT0ZfU1RSVUNUX1dJVEhfU1BFQ0lGSUVEX0xBU1RfTUVNQkVSKE5PTkNMSUVO
VE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IEZvbnREZXNjcmlwdGlvbiBzbWFsbFN5c3RlbUZvbnQ7CitzdGF0aWMgRm9udERlc2NyaXB0aW9u
IG1lbnVGb250Oworc3RhdGljIEZvbnREZXNjcmlwdGlvbiBsYWJlbEZvbnQ7CisKKy8vIENvbnZl
cnRzIHxwb2ludHN8IHRvIHBpeGVscy4gIE9uZSBwb2ludCBpcyAxLzcyIG9mIGFuIGluY2guCitz
dGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQgcG9pbnRzKQoreworICAgIHN0YXRpYyBm
bG9hdCBwaXhlbHNQZXJJbmNoID0gMC4wZjsKKyAgICBpZiAoIXBpeGVsc1BlckluY2gpIHsKKyAg
ICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBhYm91dCBwcmludGluZz8gSXMgdGhpcyB0aGUg
cmlnaHQgREM/CisgICAgICAgIGlmIChoZGMpIC8vIENhbiB0aGlzIGV2ZXIgYWN0dWFsbHkgYmUg
TlVMTD8KKyAgICAgICAgICAgIHBpeGVsc1BlckluY2ggPSBHZXREZXZpY2VDYXBzKGhkYywgTE9H
UElYRUxTWSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBpeGVsc1BlckluY2ggPSA5Ni4w
ZjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBm
OworICAgIHJldHVybiBwb2ludHMgLyBwb2ludHNQZXJJbmNoICogcGl4ZWxzUGVySW5jaDsKK30K
Kworc3RhdGljIHZvaWQgZ2V0Tm9uQ2xpZW50TWV0cmljcyhOT05DTElFTlRNRVRSSUNTKiBtZXRy
aWNzKQoreworICAgIHN0YXRpYyBVSU5UIHNpemUgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5k
b3dzVmlzdGEpID8KKyAgICAgICAgc2l6ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJRU5U
TUVUUklDU19TSVpFX1BSRV9WSVNUQTsKKyAgICBtZXRyaWNzLT5jYlNpemUgPSBzaXplOworICAg
IGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1F
VFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOworICAgIEFTU0VSVChzdWNjZXNzKTsKK30KKworLy8g
UmV0dXJuIHRoZSBoZWlnaHQgb2Ygc3lzdGVtIGZvbnQgfGZvbnR8IGluIHBpeGVscy4gIFdlIHVz
ZSB0aGlzIHNpemUgYnkKKy8vIGRlZmF1bHQgZm9yIHNvbWUgbm9uLWZvcm0tY29udHJvbCBlbGVt
ZW50cy4KK3N0YXRpYyBmbG9hdCBzeXN0ZW1Gb250U2l6ZShjb25zdCBMT0dGT05UJiBmb250KQor
eworICAgIGZsb2F0IHNpemUgPSAtZm9udC5sZkhlaWdodDsKKyAgICBpZiAoc2l6ZSA8IDApIHsK
KyAgICAgICAgSEZPTlQgaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJmZvbnQpOworICAgICAg
ICBpZiAoaEZvbnQpIHsKKyAgICAgICAgICAgIEhXbmREQyBoZGMoMCk7IC8vIFdoYXQgYWJvdXQg
cHJpbnRpbmc/IElzIHRoaXMgdGhlIHJpZ2h0IERDPworICAgICAgICAgICAgaWYgKGhkYykgewor
ICAgICAgICAgICAgICAgIEhHRElPQkogaE9iamVjdCA9IFNlbGVjdE9iamVjdChoZGMsIGhGb250
KTsKKyAgICAgICAgICAgICAgICBURVhUTUVUUklDIHRtOworICAgICAgICAgICAgICAgIEdldFRl
eHRNZXRyaWNzKGhkYywgJnRtKTsKKyAgICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBo
T2JqZWN0KTsKKyAgICAgICAgICAgICAgICBzaXplID0gdG0udG1Bc2NlbnQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBEZWxldGVPYmplY3QoaEZvbnQpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVGhlICJjb2RlcGFnZSA5MzYiIGJpdCBoZXJlIGlzIGZyb20gR2Vja287IGFwcGFy
ZW50bHkgdGhpcyBoZWxwcyBtYWtlCisgICAgLy8gZm9udHMgbW9yZSBsZWdpYmxlIGluIFNpbXBs
aWZpZWQgQ2hpbmVzZSB3aGVyZSB0aGUgZGVmYXVsdCBmb250IHNpemUgaXMKKyAgICAvLyB0b28g
c21hbGwuCisgICAgLy8KKyAgICAvLyBGSVhNRTogaHR0cDovL2IvMTExOTg4MyBTaW5jZSB0aGlz
IGlzIG9ubHkgdXNlZCBmb3IgInNtYWxsIGNhcHRpb24iLAorICAgIC8vICJtZW51IiwgYW5kICJz
dGF0dXMgYmFyIiBvYmplY3RzLCBJJ20gbm90IHN1cmUgaG93IG11Y2ggdGhpcyBldmVuCisgICAg
Ly8gbWF0dGVycy4gIFBsdXMgdGhlIEdlY2tvIHBhdGNoIHdlbnQgaW4gYmFjayBpbiAyMDAyLCBh
bmQgbWF5YmUgdGhpcworICAgIC8vIGlzbid0IGV2ZW4gcmVsZXZhbnQgYW55bW9yZS4gIFdlIHNo
b3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoaXMgc2hvdWxkCisgICAgLy8gYmUgcmVtb3ZlZCwg
b3IgcGVyaGFwcyBicm9hZGVuZWQgdG8gYmUgImFueSBDSksgbG9jYWxlIi4KKyAgICAvLworICAg
IHJldHVybiAoKHNpemUgPCAxMi4wZikgJiYgKEdldEFDUCgpID09IDkzNikpID8gMTIuMGYgOiBz
aXplOworfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRl
cjo6Z2V0Rm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikK
K3sKKyAgICAvLyBUaGlzIGxvZ2ljIG93ZXMgbXVjaCB0byBSZW5kZXJUaGVtZVNhZmFyaS5jcHAu
CisgICAgRm9udERlc2NyaXB0aW9uKiBjYWNoZWREZXNjID0gMDsKKyAgICBBdG9taWNTdHJpbmcg
ZmFjZU5hbWU7CisgICAgZmxvYXQgZm9udFNpemUgPSAwOworICAgIHN3aXRjaCAocHJvcElkKSB7
CisgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZz
bWFsbFN5c3RlbUZvbnQ7CisgICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250LmlzQWJzb2x1dGVT
aXplKCkpIHsKKyAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAgICAgICAg
ICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOworICAgICAgICAgICAgZmFjZU5hbWUg
PSBBdG9taWNTdHJpbmcobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSwgd2NzbGVu
KG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpKTsKKyAgICAgICAgICAgIGZvbnRT
aXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVNZW51OgorICAgICAgICBjYWNoZWRE
ZXNjID0gJm1lbnVGb250OworICAgICAgICBpZiAoIW1lbnVGb250LmlzQWJzb2x1dGVTaXplKCkp
IHsKKyAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAgICAgICAgICAgIGdl
dE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOworICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9t
aWNTdHJpbmcobWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxm
TWVudUZvbnQubGZGYWNlTmFtZSkpOworICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250
U2l6ZShtZXRyaWNzLmxmTWVudUZvbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6CisgICAgICAgIGNhY2hlZERlc2MgPSAmbGFiZWxGb250
OworICAgICAgICBpZiAoIWxhYmVsRm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7CisgICAgICAgICAg
ICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgICAgICAgICBnZXROb25DbGllbnRNZXRy
aWNzKCZtZXRyaWNzKTsKKyAgICAgICAgICAgIGZhY2VOYW1lID0gbWV0cmljcy5sZlN0YXR1c0Zv
bnQubGZGYWNlTmFtZTsKKyAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0
cmljcy5sZlN0YXR1c0ZvbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxD
b250cm9sOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICBmYWNlTmFt
ZSA9IGRlZmF1bHRHVUlGb250KCk7CisgICAgICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyAg
QmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLgorICAgICAgICBmb250U2l6ZSA9IHNfZGVm
YXVsdEZvbnRTaXplIC0gcG9pbnRzVG9QaXhlbHMoMik7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoKTsKKyAgICAgICAgZm9u
dFNpemUgPSBzX2RlZmF1bHRGb250U2l6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
aWYgKCFjYWNoZWREZXNjKQorICAgICAgICBjYWNoZWREZXNjID0gJmZvbnREZXNjcmlwdGlvbjsK
KworICAgIGlmIChmb250U2l6ZSkgeworICAgICAgICBjYWNoZWREZXNjLT5maXJzdEZhbWlseSgp
LnNldEZhbWlseShmYWNlTmFtZSk7CisgICAgICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVT
aXplKHRydWUpOworICAgICAgICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNj
cmlwdGlvbjo6Tm9GYW1pbHkpOworICAgICAgICBjYWNoZWREZXNjLT5zZXRTcGVjaWZpZWRTaXpl
KGZvbnRTaXplKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3Jt
YWwpOworICAgICAgICBjYWNoZWREZXNjLT5zZXRJdGFsaWMoZmFsc2UpOworICAgIH0KKyAgICBm
b250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKK30KKworLy8gc3RhdGljCit2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNp
emUpCit7CisgICAgc19kZWZhdWx0Rm9udFNpemUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZm9udFNp
emUpOworCisgICAgLy8gUmVzZXQgY2FjaGVkIGZvbnRzLgorICAgIHNtYWxsU3lzdGVtRm9udCA9
IG1lbnVGb250ID0gbGFiZWxGb250ID0gRm9udERlc2NyaXB0aW9uKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyV2luLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAJKHJldmlzaW9uIDEzNDI0
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRl
ci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaCIKICNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtNzAsMjMgKzcxLDYgQEAgc3RhdGljIGNvbnN0
IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0cwogc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CiBzdGF0aWMgY29uc3QgZmxvYXQgZGVm
YXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CiAKLS8vIFdlIGFpbSB0byBt
YXRjaCBJRSBoZXJlLgotLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBh
cyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgotLy8gLUdlY2tvIHVzZXMgTVMg
U2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05U
KSwKLS8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQotLy8gLVNhZmFyaSB1c2VzIEx1Y2lk
YSBHcmFuZGUuCi0vLwotLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2Uga25vdyB3ZSBk
b24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCi0vLyBJRSB1c2VzIE1TIFNoZWxs
IERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5IGF0IGNlcnRhaW4gcGl4ZWwK
LS8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVzZSBBcmlhbC4KLWNv
bnN0IFN0cmluZyYgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRHVUlGb250KCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZm9udEZhY2UsIChBU0NJSUxpdGVyYWwo
IkFyaWFsIikpKTsKLSAgICByZXR1cm4gZm9udEZhY2U7Ci19Ci0KLWZsb2F0IFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpkZWZhdWx0Rm9udFNpemUgPSAxNi4wOwotCiBSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEoKQogewogfQpAQCAtMTgzLDI3ICsxNjcs
NyBAQCBkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpCiAKIHZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0CiB7Ci0gICAgZmxvYXQgZm9udFNpemUgPSBkZWZh
dWx0Rm9udFNpemU7Ci0KLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRNaW5pQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgot
ICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgotICAgICAgICAvLyBXaHkgMiBwb2ludHMg
c21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKLSAg
ICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVs
dCB0aGF0IHdlIHVzZSBvbgotICAgICAgICAvLyBXaW5kb3dzLgotICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOwotICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOwotICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBv
aW50c1BlckluY2gpICogcGl4ZWxzUGVySW5jaDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250
KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyOjpnZXRGb250KHByb3BJZCwgZm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW50IFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKQEAgLTU3Myw3ICs1MzcsNyBAQCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBvcHVwSW50ZXJuCiAvLyBzdGF0aWMKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNl
dERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNpemUpCiB7Ci0gICAgZGVmYXVsdEZvbnRTaXplID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGZvbnRTaXplKTsKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtRm9u
dFByb3ZpZGVyOjpzZXREZWZhdWx0Rm9udFNpemUoZm9udFNpemUpOwogfQogCiBkb3VibGUgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtU2tpYS5oCShyZXZpc2lvbiAxMzQyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEzICsxNDUs
NiBAQCBjbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSA6IHB1YmxpYyBSCiAgICAgICAgIHN0
YXRpYyB2b2lkIHNldERlZmF1bHRGb250U2l6ZShpbnQpOwogCiAgICAgcHJvdGVjdGVkOgotICAg
ICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZhdWx0R1VJRm9udCgpOwotCi0gICAgICAgIC8v
IFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFzIHRo
ZSBkZWZhdWx0IGZvbnQKLSAgICAgICAgLy8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFu
ZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgotICAgICAgICAvLyBm
b3JtIGNvbnRyb2wgZm9udHMuCi0gICAgICAgIHN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9udFNpemU7
Ci0KICAgICAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBj
b25zdDsKIAogICAgICAgICB2aXJ0dWFsIGludCBtZW51TGlzdEFycm93UGFkZGluZygpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtV2luLmNwcAkocmV2aXNpb24gMTM0MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgog
I2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxl
bWVudHMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTQzLDYgKzQyLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2luY2x1ZGUg
IlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNp
bmNsdWRlICJUcmFuc3BhcmVuY3lXaW4uaCIKQEAgLTUyLDEyICs1Miw2IEBACiAvLyBGSVhNRTog
VGhpcyBkZXBlbmRlbmN5IHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCiAjaW5jbHVkZSA8
c2tpYS9leHQvc2tpYV91dGlsc193aW4uaD4KIAotI2RlZmluZSBTSVpFT0ZfU1RSVUNUX1dJVEhf
U1BFQ0lGSUVEX0xBU1RfTUVNQkVSKHN0cnVjdE5hbWUsIG1lbWJlcikgXAotICAgIG9mZnNldG9m
KHN0cnVjdE5hbWUsIG1lbWJlcikgKyBcCi0gICAgKHNpemVvZiBzdGF0aWNfY2FzdDxzdHJ1Y3RO
YW1lKj4oMCktPm1lbWJlcikKLSNkZWZpbmUgTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNU
QSBcCi0gICAgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihOT05DTElF
TlRNRVRSSUNTLCBsZk1lc3NhZ2VGb250KQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRo
ZSBzdGFuZGFyZCB3aWR0aCBmb3IgdGhlIG1lbnUgbGlzdCBkcm9wLWRvd24gYnV0dG9uIHdoZW4g
cnVuIHVuZGVyCkBAIC0xMzUsMTkgKzEyOSw2IEBAIGJvb2wgVGhlbWVQYWludGVyOjpzX2hhc0lu
c3RhbmNlID0gZmFsc2UKIAogfSAvLyBuYW1lc3BhY2UKIAotc3RhdGljIHZvaWQgZ2V0Tm9uQ2xp
ZW50TWV0cmljcyhOT05DTElFTlRNRVRSSUNTKiBtZXRyaWNzKQotewotICAgIHN0YXRpYyBVSU5U
IHNpemUgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpID8KLSAgICAgICAgc2l6
ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsK
LSAgICBtZXRyaWNzLT5jYlNpemUgPSBzaXplOwotICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVt
UGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDAp
OwotICAgIEFTU0VSVChzdWNjZXNzKTsKLX0KLQotc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFs
bFN5c3RlbUZvbnQ7Ci1zdGF0aWMgRm9udERlc2NyaXB0aW9uIG1lbnVGb250Owotc3RhdGljIEZv
bnREZXNjcmlwdGlvbiBsYWJlbEZvbnQ7Ci0KIC8vIEludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVu
Y3Rpb25zLiAgV2UgZG9uJ3QgcHV0IHRoZW0gaW4gYW4gYW5vbnltb3VzCiAvLyBuYW1lc3BhY2Ug
c28gdGhleSBoYXZlIGVhc2llciBhY2Nlc3MgdG8gdGhlIFdlYkNvcmUgbmFtZXNwYWNlLgogCkBA
IC0xNjYsNTUgKzE0Nyw2IEBAIHN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQg
YXAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIFJldHVybiB0aGUgaGVpZ2h0IG9mIHN5c3Rl
bSBmb250IHxmb250fCBpbiBwaXhlbHMuICBXZSB1c2UgdGhpcyBzaXplIGJ5Ci0vLyBkZWZhdWx0
IGZvciBzb21lIG5vbi1mb3JtLWNvbnRyb2wgZWxlbWVudHMuCi1zdGF0aWMgZmxvYXQgc3lzdGVt
Rm9udFNpemUoY29uc3QgTE9HRk9OVCYgZm9udCkKLXsKLSAgICBmbG9hdCBzaXplID0gLWZvbnQu
bGZIZWlnaHQ7Ci0gICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIEhGT05UIGhGb250ID0gQ3Jl
YXRlRm9udEluZGlyZWN0KCZmb250KTsKLSAgICAgICAgaWYgKGhGb250KSB7Ci0gICAgICAgICAg
ICBIV25kREMgaGRjKDApOyAvLyBXaGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdo
dCBEQz8KLSAgICAgICAgICAgIGlmIChoZGMpIHsKLSAgICAgICAgICAgICAgICBIR0RJT0JKIGhP
YmplY3QgPSBTZWxlY3RPYmplY3QoaGRjLCBoRm9udCk7Ci0gICAgICAgICAgICAgICAgVEVYVE1F
VFJJQyB0bTsKLSAgICAgICAgICAgICAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0bSk7Ci0gICAg
ICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgaE9iamVjdCk7Ci0gICAgICAgICAgICAgICAg
c2l6ZSA9IHRtLnRtQXNjZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRGVsZXRlT2Jq
ZWN0KGhGb250KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSAiY29kZXBhZ2UgOTM2
IiBiaXQgaGVyZSBpcyBmcm9tIEdlY2tvOyBhcHBhcmVudGx5IHRoaXMgaGVscHMgbWFrZQotICAg
IC8vIGZvbnRzIG1vcmUgbGVnaWJsZSBpbiBTaW1wbGlmaWVkIENoaW5lc2Ugd2hlcmUgdGhlIGRl
ZmF1bHQgZm9udCBzaXplIGlzCi0gICAgLy8gdG9vIHNtYWxsLgotICAgIC8vCi0gICAgLy8gRklY
TUU6IGh0dHA6Ly9iLzExMTk4ODMgU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yICJzbWFsbCBj
YXB0aW9uIiwKLSAgICAvLyAibWVudSIsIGFuZCAic3RhdHVzIGJhciIgb2JqZWN0cywgSSdtIG5v
dCBzdXJlIGhvdyBtdWNoIHRoaXMgZXZlbgotICAgIC8vIG1hdHRlcnMuICBQbHVzIHRoZSBHZWNr
byBwYXRjaCB3ZW50IGluIGJhY2sgaW4gMjAwMiwgYW5kIG1heWJlIHRoaXMKLSAgICAvLyBpc24n
dCBldmVuIHJlbGV2YW50IGFueW1vcmUuICBXZSBzaG91bGQgaW52ZXN0aWdhdGUgd2hldGhlciB0
aGlzIHNob3VsZAotICAgIC8vIGJlIHJlbW92ZWQsIG9yIHBlcmhhcHMgYnJvYWRlbmVkIHRvIGJl
ICJhbnkgQ0pLIGxvY2FsZSIuCi0gICAgLy8KLSAgICByZXR1cm4gKChzaXplIDwgMTIuMGYpICYm
IChHZXRBQ1AoKSA9PSA5MzYpKSA/IDEyLjBmIDogc2l6ZTsKLX0KLQotLy8gQ29udmVydHMgfHBv
aW50c3wgdG8gcGl4ZWxzLiAgT25lIHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaC4KLXN0YXRpYyBm
bG9hdCBwb2ludHNUb1BpeGVscyhmbG9hdCBwb2ludHMpCi17Ci0gICAgc3RhdGljIGZsb2F0IHBp
eGVsc1BlckluY2ggPSAwLjBmOwotICAgIGlmICghcGl4ZWxzUGVySW5jaCkgewotICAgICAgICBI
V25kREMgaGRjKDApOyAvLyBXaGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBE
Qz8KLSAgICAgICAgaWYgKGhkYykgLy8gQ2FuIHRoaXMgZXZlciBhY3R1YWxseSBiZSBOVUxMPwot
ICAgICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IEdldERldmljZUNhcHMoaGRjLCBMT0dQSVhFTFNZ
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOwotICAg
IH0KLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAg
cmV0dXJuIHBvaW50cyAvIHBvaW50c1BlckluY2ggKiBwaXhlbHNQZXJJbmNoOwotfQotCiBzdGF0
aWMgZG91YmxlIHF1ZXJ5U3lzdGVtQmxpbmtJbnRlcnZhbChkb3VibGUgZGVmYXVsdEludGVydmFs
KQogewogICAgIFVJTlQgYmxpbmtUaW1lID0gR2V0Q2FyZXRCbGlua1RpbWUoKTsKQEAgLTI4NSw2
NyArMjE3LDYgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbgogICAg
IHJldHVybiBDb2xvcigweGZmLCAweGZmLCAweDk2KTsgLy8gWWVsbG93LgogfQogCi12b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBsb2dpYyBvd2VzIG11
Y2ggdG8gUmVuZGVyVGhlbWVTYWZhcmkuY3BwLgotICAgIEZvbnREZXNjcmlwdGlvbiogY2FjaGVk
RGVzYyA9IDA7Ci0gICAgQXRvbWljU3RyaW5nIGZhY2VOYW1lOwotICAgIGZsb2F0IGZvbnRTaXpl
ID0gMDsKLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHRp
b246Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmc21hbGxTeXN0ZW1Gb250OwotICAgICAgICBpZiAo
IXNtYWxsU3lzdGVtRm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7Ci0gICAgICAgICAgICBOT05DTElF
TlRNRVRSSUNTIG1ldHJpY3M7Ci0gICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRy
aWNzKTsKLSAgICAgICAgICAgIGZhY2VOYW1lID0gQXRvbWljU3RyaW5nKG1ldHJpY3MubGZTbUNh
cHRpb25Gb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZh
Y2VOYW1lKSk7Ci0gICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3Mu
bGZTbUNhcHRpb25Gb250KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1ZhbHVlTWVudToKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZtZW51Rm9udDsKLSAgICAgICAgaWYg
KCFtZW51Rm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7Ci0gICAgICAgICAgICBOT05DTElFTlRNRVRS
SUNTIG1ldHJpY3M7Ci0gICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNzKTsK
LSAgICAgICAgICAgIGZhY2VOYW1lID0gQXRvbWljU3RyaW5nKG1ldHJpY3MubGZNZW51Rm9udC5s
ZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUpKTsKLSAgICAg
ICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZk1lbnVGb250KTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgotICAg
ICAgICBjYWNoZWREZXNjID0gJmxhYmVsRm9udDsKLSAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNB
YnNvbHV0ZVNpemUoKSkgewotICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwot
ICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBm
YWNlTmFtZSA9IG1ldHJpY3MubGZTdGF0dXNGb250LmxmRmFjZU5hbWU7Ci0gICAgICAgICAgICBm
b250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3MubGZTdGF0dXNGb250KTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWluaUNvbnRyb2w6Ci0g
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0Q29udHJvbDoKLSAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0R1VJRm9udCgpOwotICAgICAg
ICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gIEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9l
cy4KLSAgICAgICAgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemUgLSBwb2ludHNUb1BpeGVscygy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZmFjZU5hbWUgPSBkZWZh
dWx0R1VJRm9udCgpOwotICAgICAgICBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFjYWNoZWREZXNjKQotICAgICAgICBjYWNoZWRE
ZXNjID0gJmZvbnREZXNjcmlwdGlvbjsKLQotICAgIGlmIChmb250U2l6ZSkgewotICAgICAgICBj
YWNoZWREZXNjLT5maXJzdEZhbWlseSgpLnNldEZhbWlseShmYWNlTmFtZSk7Ci0gICAgICAgIGNh
Y2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRydWUpOwotICAgICAgICBjYWNoZWREZXNjLT5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICBjYWNo
ZWREZXNjLT5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKLSAgICAgICAgY2FjaGVkRGVzYy0+
c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJdGFs
aWMoZmFsc2UpOwotICAgIH0KLSAgICBmb250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKLX0K
LQogLy8gTWFwIGEgQ1NTVmFsdWUqIHN5c3RlbSBjb2xvciB0byBhbiBpbmRleCB1bmRlcnN0b29k
IGJ5IEdldFN5c0NvbG9yKCkuCiBzdGF0aWMgaW50IGNzc1ZhbHVlSWRUb1N5c0NvbG9ySW5kZXgo
aW50IGNzc1ZhbHVlSWQpCiB7CkBAIC01MzYsMTUgKzQwNyw2IEBAIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6cGFpbnRNZW51TGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIHN0YXRp
Ywotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZv
bnRTaXplKQotewotICAgIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNp
emUoZm9udFNpemUpOwotCi0gICAgLy8gUmVzZXQgY2FjaGVkIGZvbnRzLgotICAgIHNtYWxsU3lz
dGVtRm9udCA9IG1lbnVGb250ID0gbGFiZWxGb250ID0gRm9udERlc2NyaXB0aW9uKCk7Ci19Ci0K
IGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5h
bCgpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBpbnZvbHZlcyBhIHN5c3RlbSBjYWxsLCBzbyB3ZSBj
YWNoZSB0aGUgcmVzdWx0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1XaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCShyZXZpc2lvbiAxMzQyNDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw4ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdDsKIAotICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdDsKIAogI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQpAQCAtODYsMTAgKzg0LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBlbnRpcmUgbWVudWxpc3QuCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKIAotICAgICAgICAvLyBPdmVycmlkZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSdz
IHNldERlZmF1bHRGb250U2l6ZSBtZXRob2QgdG8gYWxzbyByZXNldCB0aGUgbG9jYWwgZm9udCBw
cm9wZXJ0eSBjYWNoZXMuCi0gICAgICAgIC8vIFNlZSBjb21tZW50IGluIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUoKSByZWdhcmRpbmcgdWdsaW5lc3Mgb2YgdGhp
cyBoYWNrLgotICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKLQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCg==
</data>
<flag name="review"
          id="188440"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="188508"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173739</attachid>
            <date>2012-11-12 15:33:07 -0800</date>
            <delta_ts>2012-11-13 15:19:54 -0800</delta_ts>
            <desc>Fixes style issues</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33096</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTExLTEyICBTY290dCBW
aW9sZXQgIDxza3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIFJlZmFjdG9yIHRo
ZW1lIGZvbnQgbG9va3VwIGludG8gYSBmYWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdpbGwgdWx0aW1hdGVseSBhbGxvdyB1cyB0byB1
c2Ugd2hhdCBpcyBjdXJyZW50bHkgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4IG9uIHdpbmRv
d3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBSZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAg
ICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXI6OmRlZmF1bHRHVUlGb250KTogTW92ZWQgaW50byBSZW5kZXJUaGVt
ZUZvbnRQcm92aWRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZv
bnRQcm92aWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIpOiBUaGlzIGlzIHRoZSBm
b250IHJlbGF0ZWQgbWV0aG9kcy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1
bHRGb250U2l6ZSk6IFdoYXQgd2FzIGluIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZh
dWx0Rm9udFNpemUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyOjpnZXRGb250KTogV2hhdCB3YXMgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5
c3RlbUZvbnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJv
dmlkZXJXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6cG9pbnRzVG9QaXhlbHMpOiBNb3ZlZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4uCisg
ICAgICAgIChXZWJDb3JlOjpnZXROb25DbGllbnRNZXRyaWNzKTogTW92ZWQgZnJvbSBSZW5kZXJU
aGVtZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtRm9udFNpemUpOiBNb3Zl
ZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1XaW4uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpnZXRGb250KTogTW92ZWQgZnJvbSBSZW5kZXJUaGVt
ZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlcjo6c2V0RGVmYXVsdEZvbnRTaXplKTogTW92ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9t
aXVtV2luLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVD
aHJvbWl1bVNraWEpOiBNb3ZlZCBpbnRvIFJlbmRlclRoZW1lRm9udFByb3ZpZGVyLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3RlbUZvbnQpOiBDYWxscyB0
byBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250U2l6ZSk6IENhbGxzIHRvIFJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmg6CisgICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtU2tpYSk6IE1v
dmVzIGRlZmF1bHRGb250U2l6ZSBpbnRvIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOiBNb3ZlcyBm
b250IGNvZGUgaW50byBSZW5kZXJUaGVtZUZvbnRQcm92aWRlcldpbi4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmg6IFJlbW92
ZWQgb3ZlcnJpZGVuIG1ldGhvZHMgbm93IGhhbmRsZWQgYnkgUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuCisgICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtV2luKToKKwogMjAxMi0xMS0xMiAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XVtKU0NdIFNj
cmlwdFByb2ZpbGVOb2RlOjpjYWxsVUlEIG5lZWRzIG5vdCB0byBiZSBbQ3VzdG9tXQpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTM0MjQ2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNDU0LDYgKzM0NTQsMTAgQEAKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUFuZHJvaWQuaCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHAnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyTGludXguY3BwJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldp
bi5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXgu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Lmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgnLApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDEzNDI0NikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTY2LDcgKzE5NjYsOCBAQAogICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0
byBzdG9yZSB0aGVzZSBwYXR0ZXJucyBpbiBhIHZhcmlhYmxlLgogICAgICAgICBbJ2V4Y2x1ZGUn
LCAnKGNhaXJvfGNhfGNmfGNnfGN1cmx8ZWZsfGZyZWV0eXBlfGdzdHJlYW1lcnxndGt8bGludXh8
bWFjfG9wZW5nbHxvcGVudmd8b3BlbnR5cGV8cGFuZ298cG9zaXh8cXR8c291cHxzdmd8c3ltYmlh
bnx0ZXhtYXB8aXBob25lfHdpbnx3aW5jZXx3eCkvJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICco
PzwhQ2hyb21pdW0pKENhaXJvfENGfENHfEN1cmx8R3RrfEpTQ3xMaW51eHxNYWN8T3BlblR5cGV8
UE9TSVh8UG9zaXh8UXR8U2FmYXJpfFNvdXB8U3ltYmlhbnxXaW58V2luQ0V8V3gpXFwuKGNwcHxt
bT8pJCddLAotCisgICAgICAgICMgUHJldmlvdXMgcnVsZSBleGNsdWRlcyB0aGluZ3MgbGlrZSBD
aHJvbWl1bUZvb1dpbiwgaW5jbHVkZSB0aG9zZS4KKyAgICAgICAgWydpbmNsdWRlJywgJ3JlbmRl
cmluZy8uKkNocm9taXVtLipcXC4oY3BwfG1tPykkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdB
bGxJbk9uZVxcLmNwcCQnXSwKICAgICAgIF0sCiAgICAgICAnY29uZGl0aW9ucyc6IFsKQEAgLTE5
ODQsNiArMTk4NSw5IEBACiAgICAgICAgICAgICAjIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIGlz
IG5vdCB1c2VkIG9uIG1hYyBzaW5jZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjCiAgICAgICAgICAg
ICAjIGRvZXMgbm90IHJlZmVyZW5jZSB0aGUgU2tpYSBjb2RlIHRoYXQgaXMgdXNlZCBieSBXaW5k
b3dzLCBMaW51eCBhbmQgQW5kcm9pZC4KICAgICAgICAgICAgIFsnZXhjbHVkZScsICdyZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWFcXC5jcHAkJ10sCisgICAgICAgICAgICAjIFJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIgaXMgdXNlZCBieSBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYS4KKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlclxcLmNwcCddLAorICAgICAgICAgICAgWydleGNsdWRlJywgJ3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyXFwuaCddLAogICAgICAgICAgIF0s
CiAgICAgICAgIH0seyAjIE9TIT0ibWFjIgogICAgICAgICAgICdzb3VyY2VzLyc6IFtbJ2V4Y2x1
ZGUnLCAnTWFjXFwuKGNwcHxtbT8pJCddXQpAQCAtMjAwOSw2ICsyMDEzLDcgQEAKICAgICAgICAg
fV0sCiAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKICAgICAgICAgICAnc291cmNlcy8nOiBb
CisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXJMaW51eFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdyZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4XFwuY3BwJCddLAogICAgICAgICAgIF0sCiAg
ICAgICAgIH0seyAjIE9TIT0iYW5kcm9pZCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUg
ZGVmYXVsdCB2YXJpYWJsZS13aWR0aCBmb250IHNpemUuIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZh
dWx0IGZvbnQKKy8vIHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNp
emUgKHdoaWNoIHdlIHRoZW4gc2hyaW5rKSBmb3IKKy8vIGZvcm0gY29udHJvbCBmb250cy4KKy8v
IHN0YXRpYworZmxvYXQgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c19kZWZhdWx0
Rm9udFNpemUgPSAxNi4wOworCisvLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KKy8vIC1JRSB1
c2VzIGEgZm9udCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3Ig
Zm9ybSBjb250cm9scy4KKy8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2Fs
bHMgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCisvLyB3aGljaCByZXR1cm5zIE1T
IFNoZWxsIERsZykKKy8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgorLy8KKy8vIEZJWE1F
OiBUaGUgb25seSBjYXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFO
U0kgZW5jb2RpbmdzLgorLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJl
bmRlciBpbmNvcnJlY3RseSBhdCBjZXJ0YWluIHBpeGVsCisvLyBzaXplcyAoZS5nLiAxNXB4KS4g
U28sIGZvciBub3cgd2UganVzdCB1c2UgQXJpYWwuCitjb25zdCBTdHJpbmcmIFJlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXI6OmRlZmF1bHRHVUlGb250KCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgZm9udEZhY2UsIChBU0NJSUxpdGVyYWwoIkFyaWFsIikpKTsKKyAg
ICByZXR1cm4gZm9udEZhY2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlcl9oCisjZGVmaW5lIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJf
aAorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGb250RGVzY3JpcHRpb247CisKK2NsYXNzIFJlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGdldEZvbnQoaW50IHBy
b3BJZCwgRm9udERlc2NyaXB0aW9uJik7CisgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRT
aXplKGludCk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgV1RGOjpTdHJpbmcmIGRl
ZmF1bHRHVUlGb250KCk7CisKKyAgICBzdGF0aWMgZmxvYXQgc19kZWZhdWx0Rm9udFNpemU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJM
aW51eC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oIgorCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jk
cy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBGb250RGVzY3JpcHRpb24gc21hbGxTeXN0ZW1Gb250Oworc3Rh
dGljIEZvbnREZXNjcmlwdGlvbiBtZW51Rm9udDsKK3N0YXRpYyBGb250RGVzY3JpcHRpb24gbGFi
ZWxGb250OworCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRl
cjo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKK3sKKyAgICBzX2RlZmF1bHRGb250
U2l6ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihmb250U2l6ZSk7CisKKyAgICAvLyBSZXNldCBjYWNo
ZWQgZm9udHMuCisgICAgc21hbGxTeXN0ZW1Gb250ID0gbWVudUZvbnQgPSBsYWJlbEZvbnQgPSBG
b250RGVzY3JpcHRpb24oKTsKK30KKworLy8gc3RhdGljCit2b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXI6OmdldEZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pCit7CisgICAgZmxvYXQgZm9udFNpemUgPSBzX2RlZmF1bHRGb250U2l6ZTsK
KworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250
cm9sOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6CisgICAgY2FzZSBDU1NW
YWx1ZVdlYmtpdENvbnRyb2w6CisgICAgICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyBCZWNh
dXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuIE5vdGUgdGhhdCB3ZQorICAgICAgICAvLyBhcmUg
YXNzdW1pbmcgYSA5NmRwaSBzY3JlZW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHRoYXQgd2UgdXNl
IG9uCisgICAgICAgIC8vIFdpbmRvd3MuCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2lu
dHNQZXJJbmNoID0gNzIuMGY7CisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwaXhlbHNQZXJJ
bmNoID0gOTYuMGY7CisgICAgICAgIGZvbnRTaXplIC09ICgyLjBmIC8gcG9pbnRzUGVySW5jaCkg
KiBwaXhlbHNQZXJJbmNoOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZGVmYXVsdEdVSUZvbnQoKSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJ
dGFsaWMoZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlckxpbnV4LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJXaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJXaW4u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oIgor
CisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKKworI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2Rl
ZmluZSBTSVpFT0ZfU1RSVUNUX1dJVEhfU1BFQ0lGSUVEX0xBU1RfTUVNQkVSKHN0cnVjdE5hbWUs
IG1lbWJlcikgXAorICAgIG9mZnNldG9mKHN0cnVjdE5hbWUsIG1lbWJlcikgKyBcCisgICAgKHNp
emVvZiBzdGF0aWNfY2FzdDxzdHJ1Y3ROYW1lKj4oMCktPm1lbWJlcikKKyNkZWZpbmUgTk9OQ0xJ
RU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQSBcCisgICAgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJ
RklFRF9MQVNUX01FTUJFUihOT05DTElFTlRNRVRSSUNTLCBsZk1lc3NhZ2VGb250KQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBGb250RGVzY3JpcHRpb24gc21hbGxTeXN0ZW1Gb250
Oworc3RhdGljIEZvbnREZXNjcmlwdGlvbiBtZW51Rm9udDsKK3N0YXRpYyBGb250RGVzY3JpcHRp
b24gbGFiZWxGb250OworCisvLyBDb252ZXJ0cyB8cG9pbnRzfCB0byBwaXhlbHMuIE9uZSBwb2lu
dCBpcyAxLzcyIG9mIGFuIGluY2guCitzdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQg
cG9pbnRzKQoreworICAgIHN0YXRpYyBmbG9hdCBwaXhlbHNQZXJJbmNoID0gMC4wZjsKKyAgICBp
ZiAoIXBpeGVsc1BlckluY2gpIHsKKyAgICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBhYm91
dCBwcmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/CisgICAgICAgIGlmIChoZGMpIC8vIENh
biB0aGlzIGV2ZXIgYWN0dWFsbHkgYmUgMD8KKyAgICAgICAgICAgIHBpeGVsc1BlckluY2ggPSBH
ZXREZXZpY2VDYXBzKGhkYywgTE9HUElYRUxTWSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQg
cG9pbnRzUGVySW5jaCA9IDcyLjBmOworICAgIHJldHVybiBwb2ludHMgLyBwb2ludHNQZXJJbmNo
ICogcGl4ZWxzUGVySW5jaDsKK30KKworc3RhdGljIHZvaWQgZ2V0Tm9uQ2xpZW50TWV0cmljcyhO
T05DTElFTlRNRVRSSUNTKiBtZXRyaWNzKQoreworICAgIHN0YXRpYyBVSU5UIHNpemUgPSAod2lu
ZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpID8KKyAgICAgICAgc2l6ZW9mKE5PTkNMSUVO
VE1FVFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsKKyAgICBtZXRyaWNz
LT5jYlNpemUgPSBzaXplOworICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOworICAgIEFTU0VS
VChzdWNjZXNzKTsKK30KKworLy8gUmV0dXJuIHRoZSBoZWlnaHQgb2Ygc3lzdGVtIGZvbnQgfGZv
bnR8IGluIHBpeGVscy4gV2UgdXNlIHRoaXMgc2l6ZSBieQorLy8gZGVmYXVsdCBmb3Igc29tZSBu
b24tZm9ybS1jb250cm9sIGVsZW1lbnRzLgorc3RhdGljIGZsb2F0IHN5c3RlbUZvbnRTaXplKGNv
bnN0IExPR0ZPTlQmIGZvbnQpCit7CisgICAgZmxvYXQgc2l6ZSA9IC1mb250LmxmSGVpZ2h0Owor
ICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBIRk9OVCBoRm9udCA9IENyZWF0ZUZvbnRJbmRp
cmVjdCgmZm9udCk7CisgICAgICAgIGlmIChoRm9udCkgeworICAgICAgICAgICAgSFduZERDIGhk
YygwKTsgLy8gV2hhdCBhYm91dCBwcmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/CisgICAg
ICAgICAgICBpZiAoaGRjKSB7CisgICAgICAgICAgICAgICAgSEdESU9CSiBoT2JqZWN0ID0gU2Vs
ZWN0T2JqZWN0KGhkYywgaEZvbnQpOworICAgICAgICAgICAgICAgIFRFWFRNRVRSSUMgdG07Cisg
ICAgICAgICAgICAgICAgR2V0VGV4dE1ldHJpY3MoaGRjLCAmdG0pOworICAgICAgICAgICAgICAg
IFNlbGVjdE9iamVjdChoZGMsIGhPYmplY3QpOworICAgICAgICAgICAgICAgIHNpemUgPSB0bS50
bUFzY2VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERlbGV0ZU9iamVjdChoRm9udCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgImNvZGVwYWdlIDkzNiIgYml0IGhlcmUg
aXMgZnJvbSBHZWNrbzsgYXBwYXJlbnRseSB0aGlzIGhlbHBzIG1ha2UKKyAgICAvLyBmb250cyBt
b3JlIGxlZ2libGUgaW4gU2ltcGxpZmllZCBDaGluZXNlIHdoZXJlIHRoZSBkZWZhdWx0IGZvbnQg
c2l6ZSBpcworICAgIC8vIHRvbyBzbWFsbC4KKyAgICAvLworICAgIC8vIEZJWE1FOiBodHRwOi8v
Yi8xMTE5ODgzIFNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGZvciAic21hbGwgY2FwdGlvbiIsCisg
ICAgLy8gIm1lbnUiLCBhbmQgInN0YXR1cyBiYXIiIG9iamVjdHMsIEknbSBub3Qgc3VyZSBob3cg
bXVjaCB0aGlzIGV2ZW4KKyAgICAvLyBtYXR0ZXJzLiBQbHVzIHRoZSBHZWNrbyBwYXRjaCB3ZW50
IGluIGJhY2sgaW4gMjAwMiwgYW5kIG1heWJlIHRoaXMKKyAgICAvLyBpc24ndCBldmVuIHJlbGV2
YW50IGFueW1vcmUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHRoaXMgc2hvdWxkCisg
ICAgLy8gYmUgcmVtb3ZlZCwgb3IgcGVyaGFwcyBicm9hZGVuZWQgdG8gYmUgImFueSBDSksgbG9j
YWxlIi4KKyAgICAvLworICAgIHJldHVybiAoKHNpemUgPCAxMi4wZikgJiYgKEdldEFDUCgpID09
IDkzNikpID8gMTIuMGYgOiBzaXplOworfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bUZvbnRQcm92aWRlcjo6Z2V0Rm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICAvLyBUaGlzIGxvZ2ljIG93ZXMgbXVjaCB0byBSZW5k
ZXJUaGVtZVNhZmFyaS5jcHAuCisgICAgRm9udERlc2NyaXB0aW9uKiBjYWNoZWREZXNjID0gMDsK
KyAgICBBdG9taWNTdHJpbmcgZmFjZU5hbWU7CisgICAgZmxvYXQgZm9udFNpemUgPSAwOworICAg
IHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKKyAgICAg
ICAgY2FjaGVkRGVzYyA9ICZzbWFsbFN5c3RlbUZvbnQ7CisgICAgICAgIGlmICghc21hbGxTeXN0
ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpIHsKKyAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1Mg
bWV0cmljczsKKyAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOworICAg
ICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQu
bGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUpKTsK
KyAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZlNtQ2FwdGlv
bkZvbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVNZW51
OgorICAgICAgICBjYWNoZWREZXNjID0gJm1lbnVGb250OworICAgICAgICBpZiAoIW1lbnVGb250
LmlzQWJzb2x1dGVTaXplKCkpIHsKKyAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmlj
czsKKyAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOworICAgICAgICAg
ICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUs
IHdjc2xlbihtZXRyaWNzLmxmTWVudUZvbnQubGZGYWNlTmFtZSkpOworICAgICAgICAgICAgZm9u
dFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmTWVudUZvbnQpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6CisgICAgICAgIGNhY2hl
ZERlc2MgPSAmbGFiZWxGb250OworICAgICAgICBpZiAoIWxhYmVsRm9udC5pc0Fic29sdXRlU2l6
ZSgpKSB7CisgICAgICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgICAgICAg
ICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNzKTsKKyAgICAgICAgICAgIGZhY2VOYW1lID0g
bWV0cmljcy5sZlN0YXR1c0ZvbnQubGZGYWNlTmFtZTsKKyAgICAgICAgICAgIGZvbnRTaXplID0g
c3lzdGVtRm9udFNpemUobWV0cmljcy5sZlN0YXR1c0ZvbnQpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENT
U1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9s
OgorICAgICAgICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250KCk7CisgICAgICAgIC8vIFdoeSAy
IHBvaW50cyBzbWFsbGVyPyBCZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuCisgICAgICAg
IGZvbnRTaXplID0gc19kZWZhdWx0Rm9udFNpemUgLSBwb2ludHNUb1BpeGVscygyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0R1VJRm9u
dCgpOworICAgICAgICBmb250U2l6ZSA9IHNfZGVmYXVsdEZvbnRTaXplOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBpZiAoIWNhY2hlZERlc2MpCisgICAgICAgIGNhY2hlZERlc2MgPSAm
Zm9udERlc2NyaXB0aW9uOworCisgICAgaWYgKGZvbnRTaXplKSB7CisgICAgICAgIGNhY2hlZERl
c2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGZhY2VOYW1lKTsKKyAgICAgICAgY2FjaGVkRGVz
Yy0+c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisgICAgICAgIGNhY2hlZERlc2MtPnNldEdlbmVy
aWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgICAgIGNhY2hlZERlc2Mt
PnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOworICAgICAgICBjYWNoZWREZXNjLT5zZXRXZWln
aHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgICAgIGNhY2hlZERlc2MtPnNldEl0YWxpYyhmYWxz
ZSk7CisgICAgfQorICAgIGZvbnREZXNjcmlwdGlvbiA9ICpjYWNoZWREZXNjOworfQorCisvLyBz
dGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c2V0RGVmYXVsdEZv
bnRTaXplKGludCBmb250U2l6ZSkKK3sKKyAgICBzX2RlZmF1bHRGb250U2l6ZSA9IHN0YXRpY19j
YXN0PGZsb2F0Pihmb250U2l6ZSk7CisKKyAgICAvLyBSZXNldCBjYWNoZWQgZm9udHMuCisgICAg
c21hbGxTeXN0ZW1Gb250ID0gbWVudUZvbnQgPSBsYWJlbEZvbnQgPSBGb250RGVzY3JpcHRpb24o
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJXaW4u
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNw
cAkocmV2aXNpb24gMTM0MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVGltZVJh
bmdlcy5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC03MCwyMyArNzEs
NiBAQCBzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzCiBzdGF0aWMgY29u
c3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKIHN0YXRp
YyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsK
IAotLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCi0vLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQg
b24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCi0v
LyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0
KERFRkFVTFRfR1VJX0ZPTlQpLAotLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCi0vLyAt
U2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KLS8vCi0vLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3
aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KLS8v
IElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkg
YXQgY2VydGFpbiBwaXhlbAotLy8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1
c3QgdXNlIEFyaWFsLgotY29uc3QgU3RyaW5nJiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZGVm
YXVsdEdVSUZvbnQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBmb250RmFj
ZSwgKEFTQ0lJTGl0ZXJhbCgiQXJpYWwiKSkpOwotICAgIHJldHVybiBmb250RmFjZTsKLX0KLQot
ZmxvYXQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmRlZmF1bHRGb250U2l6ZSA9IDE2LjA7Ci0K
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpCiB7CiB9
CkBAIC0xODMsMjcgKzE2Nyw3IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2Fy
ZXRCbGkKIAogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3lzdGVtRm9udChpbnQgcHJv
cElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKLSAgICBmbG9h
dCBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKLQotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRTbWFsbENvbnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAg
IC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyBCZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMu
IE5vdGUgdGhhdCB3ZQotICAgICAgICAvLyBhcmUgYXNzdW1pbmcgYSA5NmRwaSBzY3JlZW4sIHdo
aWNoIGlzIHRoZSBkZWZhdWx0IHRoYXQgd2UgdXNlIG9uCi0gICAgICAgIC8vIFdpbmRvd3MuCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBwaXhlbHNQZXJJbmNoID0gOTYuMGY7Ci0gICAgICAgIGZvbnRT
aXplIC09ICgyLjBmIC8gcG9pbnRzUGVySW5jaCkgKiBwaXhlbHNQZXJJbmNoOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1p
bHkoZGVmYXVsdEdVSUZvbnQoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoZm9udFNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVl
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
Ok5vRmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3Jt
YWwpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOworICAgIFJlbmRlclRo
ZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OmdldEZvbnQocHJvcElkLCBmb250RGVzY3JpcHRpb24p
OwogfQogCiBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlzdFNpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdApAQCAtNTczLDcgKzUzNyw3IEBAIGludCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cG9wdXBJbnRlcm4KIC8vIHN0YXRpYwogdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKIHsKLSAgICBk
ZWZhdWx0Rm9udFNpemUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZm9udFNpemUpOworICAgIFJlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZShmb250U2l6ZSk7
CiB9CiAKIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFs
SW50ZXJuYWwoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJKHJldmlzaW9uIDEzNDI0NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDUsMTMgKzE0NSw2IEBAIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIDogcHVi
bGljIFIKICAgICAgICAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCk7CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRHVUlGb250
KCk7Ci0KLSAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiAg
V2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAotICAgICAgICAvLyBzaXplIGZvciB0aGUg
InN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVuIHNocmluaykg
Zm9yCi0gICAgICAgIC8vIGZvcm0gY29udHJvbCBmb250cy4KLSAgICAgICAgc3RhdGljIGZsb2F0
IGRlZmF1bHRGb250U2l6ZTsKLQogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50
ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgaW50IG1lbnVMaXN0QXJy
b3dQYWRkaW5nKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiAxMzQyNDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNDMs
NiArNDIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dy
ZXNzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAi
U3lzdGVtSW5mby5oIgogI2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgpAQCAtNTIsMTIgKzUy
LDYgQEAKIC8vIEZJWE1FOiBUaGlzIGRlcGVuZGVuY3kgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVt
b3ZlZC4KICNpbmNsdWRlIDxza2lhL2V4dC9za2lhX3V0aWxzX3dpbi5oPgogCi0jZGVmaW5lIFNJ
WkVPRl9TVFJVQ1RfV0lUSF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoc3RydWN0TmFtZSwgbWVtYmVy
KSBcCi0gICAgb2Zmc2V0b2Yoc3RydWN0TmFtZSwgbWVtYmVyKSArIFwKLSAgICAoc2l6ZW9mIHN0
YXRpY19jYXN0PHN0cnVjdE5hbWUqPigwKS0+bWVtYmVyKQotI2RlZmluZSBOT05DTElFTlRNRVRS
SUNTX1NJWkVfUFJFX1ZJU1RBIFwKLSAgICBTSVpFT0ZfU1RSVUNUX1dJVEhfU1BFQ0lGSUVEX0xB
U1RfTUVNQkVSKE5PTkNMSUVOVE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQpCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gVGhlIHN0YW5kYXJkIHdpZHRoIGZvciB0aGUgbWVudSBsaXN0IGRyb3At
ZG93biBidXR0b24gd2hlbiBydW4gdW5kZXIKQEAgLTEzNSwxOSArMTI5LDYgQEAgYm9vbCBUaGVt
ZVBhaW50ZXI6OnNfaGFzSW5zdGFuY2UgPSBmYWxzZQogCiB9IC8vIG5hbWVzcGFjZQogCi1zdGF0
aWMgdm9pZCBnZXROb25DbGllbnRNZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpCi17
Ci0gICAgc3RhdGljIFVJTlQgc2l6ZSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0
YSkgPwotICAgICAgICBzaXplb2YoTk9OQ0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNT
X1NJWkVfUFJFX1ZJU1RBOwotICAgIG1ldHJpY3MtPmNiU2l6ZSA9IHNpemU7Ci0gICAgYm9vbCBz
dWNjZXNzID0gISFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywg
c2l6ZSwgbWV0cmljcywgMCk7Ci0gICAgQVNTRVJUKHN1Y2Nlc3MpOwotfQotCi1zdGF0aWMgRm9u
dERlc2NyaXB0aW9uIHNtYWxsU3lzdGVtRm9udDsKLXN0YXRpYyBGb250RGVzY3JpcHRpb24gbWVu
dUZvbnQ7Ci1zdGF0aWMgRm9udERlc2NyaXB0aW9uIGxhYmVsRm9udDsKLQogLy8gSW50ZXJuYWwg
c3RhdGljIGhlbHBlciBmdW5jdGlvbnMuICBXZSBkb24ndCBwdXQgdGhlbSBpbiBhbiBhbm9ueW1v
dXMKIC8vIG5hbWVzcGFjZSBzbyB0aGV5IGhhdmUgZWFzaWVyIGFjY2VzcyB0byB0aGUgV2ViQ29y
ZSBuYW1lc3BhY2UuCiAKQEAgLTE2Niw1NSArMTQ3LDYgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNG
b2N1cyhDb250cm9sUGFydCBhcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gUmV0dXJuIHRo
ZSBoZWlnaHQgb2Ygc3lzdGVtIGZvbnQgfGZvbnR8IGluIHBpeGVscy4gIFdlIHVzZSB0aGlzIHNp
emUgYnkKLS8vIGRlZmF1bHQgZm9yIHNvbWUgbm9uLWZvcm0tY29udHJvbCBlbGVtZW50cy4KLXN0
YXRpYyBmbG9hdCBzeXN0ZW1Gb250U2l6ZShjb25zdCBMT0dGT05UJiBmb250KQotewotICAgIGZs
b2F0IHNpemUgPSAtZm9udC5sZkhlaWdodDsKLSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAg
SEZPTlQgaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJmZvbnQpOwotICAgICAgICBpZiAoaEZv
bnQpIHsKLSAgICAgICAgICAgIEhXbmREQyBoZGMoMCk7IC8vIFdoYXQgYWJvdXQgcHJpbnRpbmc/
IElzIHRoaXMgdGhlIHJpZ2h0IERDPwotICAgICAgICAgICAgaWYgKGhkYykgewotICAgICAgICAg
ICAgICAgIEhHRElPQkogaE9iamVjdCA9IFNlbGVjdE9iamVjdChoZGMsIGhGb250KTsKLSAgICAg
ICAgICAgICAgICBURVhUTUVUUklDIHRtOwotICAgICAgICAgICAgICAgIEdldFRleHRNZXRyaWNz
KGhkYywgJnRtKTsKLSAgICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBoT2JqZWN0KTsK
LSAgICAgICAgICAgICAgICBzaXplID0gdG0udG1Bc2NlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBEZWxldGVPYmplY3QoaEZvbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
VGhlICJjb2RlcGFnZSA5MzYiIGJpdCBoZXJlIGlzIGZyb20gR2Vja287IGFwcGFyZW50bHkgdGhp
cyBoZWxwcyBtYWtlCi0gICAgLy8gZm9udHMgbW9yZSBsZWdpYmxlIGluIFNpbXBsaWZpZWQgQ2hp
bmVzZSB3aGVyZSB0aGUgZGVmYXVsdCBmb250IHNpemUgaXMKLSAgICAvLyB0b28gc21hbGwuCi0g
ICAgLy8KLSAgICAvLyBGSVhNRTogaHR0cDovL2IvMTExOTg4MyBTaW5jZSB0aGlzIGlzIG9ubHkg
dXNlZCBmb3IgInNtYWxsIGNhcHRpb24iLAotICAgIC8vICJtZW51IiwgYW5kICJzdGF0dXMgYmFy
IiBvYmplY3RzLCBJJ20gbm90IHN1cmUgaG93IG11Y2ggdGhpcyBldmVuCi0gICAgLy8gbWF0dGVy
cy4gIFBsdXMgdGhlIEdlY2tvIHBhdGNoIHdlbnQgaW4gYmFjayBpbiAyMDAyLCBhbmQgbWF5YmUg
dGhpcwotICAgIC8vIGlzbid0IGV2ZW4gcmVsZXZhbnQgYW55bW9yZS4gIFdlIHNob3VsZCBpbnZl
c3RpZ2F0ZSB3aGV0aGVyIHRoaXMgc2hvdWxkCi0gICAgLy8gYmUgcmVtb3ZlZCwgb3IgcGVyaGFw
cyBicm9hZGVuZWQgdG8gYmUgImFueSBDSksgbG9jYWxlIi4KLSAgICAvLwotICAgIHJldHVybiAo
KHNpemUgPCAxMi4wZikgJiYgKEdldEFDUCgpID09IDkzNikpID8gMTIuMGYgOiBzaXplOwotfQot
Ci0vLyBDb252ZXJ0cyB8cG9pbnRzfCB0byBwaXhlbHMuICBPbmUgcG9pbnQgaXMgMS83MiBvZiBh
biBpbmNoLgotc3RhdGljIGZsb2F0IHBvaW50c1RvUGl4ZWxzKGZsb2F0IHBvaW50cykKLXsKLSAg
ICBzdGF0aWMgZmxvYXQgcGl4ZWxzUGVySW5jaCA9IDAuMGY7Ci0gICAgaWYgKCFwaXhlbHNQZXJJ
bmNoKSB7Ci0gICAgICAgIEhXbmREQyBoZGMoMCk7IC8vIFdoYXQgYWJvdXQgcHJpbnRpbmc/IElz
IHRoaXMgdGhlIHJpZ2h0IERDPwotICAgICAgICBpZiAoaGRjKSAvLyBDYW4gdGhpcyBldmVyIGFj
dHVhbGx5IGJlIE5VTEw/Ci0gICAgICAgICAgICBwaXhlbHNQZXJJbmNoID0gR2V0RGV2aWNlQ2Fw
cyhoZGMsIExPR1BJWEVMU1kpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwaXhlbHNQZXJJ
bmNoID0gOTYuMGY7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHBvaW50c1Blcklu
Y2ggPSA3Mi4wZjsKLSAgICByZXR1cm4gcG9pbnRzIC8gcG9pbnRzUGVySW5jaCAqIHBpeGVsc1Bl
ckluY2g7Ci19Ci0KIHN0YXRpYyBkb3VibGUgcXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKGRvdWJs
ZSBkZWZhdWx0SW50ZXJ2YWwpCiB7CiAgICAgVUlOVCBibGlua1RpbWUgPSBHZXRDYXJldEJsaW5r
VGltZSgpOwpAQCAtMjg1LDY3ICsyMTcsNiBAQCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpwbGF0Zm9ybUluCiAgICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOyAvLyBZZWxs
b3cuCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJv
cElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICAvLyBU
aGlzIGxvZ2ljIG93ZXMgbXVjaCB0byBSZW5kZXJUaGVtZVNhZmFyaS5jcHAuCi0gICAgRm9udERl
c2NyaXB0aW9uKiBjYWNoZWREZXNjID0gMDsKLSAgICBBdG9taWNTdHJpbmcgZmFjZU5hbWU7Ci0g
ICAgZmxvYXQgZm9udFNpemUgPSAwOwotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBD
U1NWYWx1ZVNtYWxsQ2FwdGlvbjoKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZzbWFsbFN5c3RlbUZv
bnQ7Ci0gICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpIHsKLSAg
ICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNs
aWVudE1ldHJpY3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJp
bmcobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZT
bUNhcHRpb25Gb250LmxmRmFjZU5hbWUpKTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVt
Rm9udFNpemUobWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51OgotICAgICAgICBjYWNoZWREZXNjID0gJm1lbnVG
b250OwotICAgICAgICBpZiAoIW1lbnVGb250LmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAg
ICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1l
dHJpY3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0
cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmTWVudUZvbnQubGZG
YWNlTmFtZSkpOwotICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNz
LmxmTWVudUZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFs
dWVTdGF0dXNCYXI6Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmbGFiZWxGb250OwotICAgICAgICBp
ZiAoIWxhYmVsRm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7Ci0gICAgICAgICAgICBOT05DTElFTlRN
RVRSSUNTIG1ldHJpY3M7Ci0gICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNz
KTsKLSAgICAgICAgICAgIGZhY2VOYW1lID0gbWV0cmljcy5sZlN0YXR1c0ZvbnQubGZGYWNlTmFt
ZTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZlN0YXR1
c0ZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRNaW5pQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgotICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgotICAgICAgICBmYWNlTmFtZSA9IGRlZmF1bHRH
VUlGb250KCk7Ci0gICAgICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyAgQmVjYXVzZSB0aGF0
J3Mgd2hhdCBHZWNrbyBkb2VzLgotICAgICAgICBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZSAt
IHBvaW50c1RvUGl4ZWxzKDIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250KCk7Ci0gICAgICAgIGZvbnRTaXplID0gZGVmYXVs
dEZvbnRTaXplOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWNhY2hlZERlc2Mp
Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmZm9udERlc2NyaXB0aW9uOwotCi0gICAgaWYgKGZvbnRT
aXplKSB7Ci0gICAgICAgIGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGZhY2VO
YW1lKTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAg
ICAgIGNhY2hlZERlc2MtPnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWls
eSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwotICAg
ICAgICBjYWNoZWREZXNjLT5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgICAgIGNh
Y2hlZERlc2MtPnNldEl0YWxpYyhmYWxzZSk7Ci0gICAgfQotICAgIGZvbnREZXNjcmlwdGlvbiA9
ICpjYWNoZWREZXNjOwotfQotCiAvLyBNYXAgYSBDU1NWYWx1ZSogc3lzdGVtIGNvbG9yIHRvIGFu
IGluZGV4IHVuZGVyc3Rvb2QgYnkgR2V0U3lzQ29sb3IoKS4KIHN0YXRpYyBpbnQgY3NzVmFsdWVJ
ZFRvU3lzQ29sb3JJbmRleChpbnQgY3NzVmFsdWVJZCkKIHsKQEAgLTUzNiwxNSArNDA3LDYgQEAg
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludE1lbnVMaQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotLy8gc3RhdGljCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldERlZmF1
bHRGb250U2l6ZShpbnQgZm9udFNpemUpCi17Ci0gICAgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnNldERlZmF1bHRGb250U2l6ZShmb250U2l6ZSk7Ci0KLSAgICAvLyBSZXNldCBjYWNoZWQgZm9u
dHMuCi0gICAgc21hbGxTeXN0ZW1Gb250ID0gbWVudUZvbnQgPSBsYWJlbEZvbnQgPSBGb250RGVz
Y3JpcHRpb24oKTsKLX0KLQogZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmNhcmV0Qmxp
bmtJbnRlcnZhbEludGVybmFsKCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGludm9sdmVzIGEgc3lz
dGVtIGNhbGwsIHNvIHdlIGNhY2hlIHRoZSByZXN1bHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgJKHJldmlzaW9uIDEzNDI0
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwogCi0gICAgICAgIC8vIFN5c3RlbSBmb250cy4KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9u
JikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVl
SWQpIGNvbnN0OwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC04NiwxMCArODQs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGVudGlyZSBtZW51bGlzdC4KICAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIC8vIE92ZXJyaWRlIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhJ3Mgc2V0RGVmYXVsdEZvbnRTaXplIG1ldGhvZCB0byBhbHNvIHJlc2V0
IHRoZSBsb2NhbCBmb250IHByb3BlcnR5IGNhY2hlcy4KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQg
aW4gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250U2l6ZSgpIHJlZ2FyZGlu
ZyB1Z2xpbmVzcyBvZiB0aGlzIGhhY2suCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRG
b250U2l6ZShpbnQpOwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174007</attachid>
            <date>2012-11-13 15:19:57 -0800</date>
            <delta_ts>2012-11-13 15:26:48 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-101949-20121113151757.patch</filename>
            <type>text/plain</type>
            <size>33110</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTExLTEyICBTY290dCBW
aW9sZXQgIDxza3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIFJlZmFjdG9yIHRo
ZW1lIGZvbnQgbG9va3VwIGludG8gYSBmYWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBUb255
IENoYW5nLgorCisgICAgICAgIFRoaXMgd2lsbCB1bHRpbWF0ZWx5IGFsbG93IHVzIHRvIHVzZSB3
aGF0IGlzIGN1cnJlbnRseSBpbiBSZW5kZXJUaGVtZUNocm9taXVtTGludXggb24gd2luZG93cy4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlcjo6ZGVmYXVsdEdVSUZvbnQpOiBNb3ZlZCBpbnRvIFJlbmRlclRoZW1lRm9u
dFByb3ZpZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcik6IFRoaXMgaXMgdGhlIGZvbnQg
cmVsYXRlZCBtZXRob2RzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyTGludXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c2V0RGVmYXVsdEZv
bnRTaXplKTogV2hhdCB3YXMgaW4gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRG
b250U2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlk
ZXI6OnN5c3RlbUZvbnQpOiBXaGF0IHdhcyBpbiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3lz
dGVtRm9udC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlcldpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpwb2ludHNUb1BpeGVscyk6IE1vdmVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi4KKyAg
ICAgICAgKFdlYkNvcmU6OmdldE5vbkNsaWVudE1ldHJpY3MpOiBNb3ZlZCBmcm9tIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW4uCisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1Gb250U2l6ZSk6IE1vdmVk
IGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnN5c3RlbUZvbnQpOiBNb3ZlZCBmcm9tIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW4uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtRm9u
dFByb3ZpZGVyOjpzZXREZWZhdWx0Rm9udFNpemUpOiBNb3ZlZCBmcm9tIFJlbmRlclRoZW1lQ2hy
b21pdW1XaW4uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYSk6IE1vdmVkIGludG8gUmVuZGVyVGhlbWVGb250UHJvdmlkZXIuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c3lzdGVtRm9udCk6IENhbGxz
IHRvIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRTaXplKTogQ2FsbHMgdG8gUmVu
ZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuaDoKKyAgICAgICAgKFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhKTog
TW92ZXMgZGVmYXVsdEZvbnRTaXplIGludG8gUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRl
ci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6IE1vdmVz
IGZvbnQgY29kZSBpbnRvIFJlbmRlclRoZW1lRm9udFByb3ZpZGVyV2luLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaDogUmVt
b3ZlZCBvdmVycmlkZW4gbWV0aG9kcyBub3cgaGFuZGxlZCBieSBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYS4KKyAgICAgICAgKFJlbmRlclRoZW1lQ2hyb21pdW1XaW4pOgorCiAyMDEyLTExLTEyICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdW0pTQ10g
U2NyaXB0UHJvZmlsZU5vZGU6OmNhbGxVSUQgbmVlZHMgbm90IHRvIGJlIFtDdXN0b21dCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMzQyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0NTQsNiArMzQ1NCwxMCBAQAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQW5kcm9pZC5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5jcHAnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaCcsCisgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVy
V2luLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51
eC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXgu
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gMTM0MjQ2
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NjYsNyArMTk2Niw4IEBACiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93
IHRvIHN0b3JlIHRoZXNlIHBhdHRlcm5zIGluIGEgdmFyaWFibGUuCiAgICAgICAgIFsnZXhjbHVk
ZScsICcoY2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51
eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1i
aWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywg
Jyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8Q3VybHxHdGt8SlNDfExpbnV4fE1hY3xPcGVuVHlw
ZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8U291cHxTeW1iaWFufFdpbnxXaW5DRXxXeClcXC4oY3Bw
fG1tPykkJ10sCi0KKyAgICAgICAgIyBQcmV2aW91cyBydWxlIGV4Y2x1ZGVzIHRoaW5ncyBsaWtl
IENocm9taXVtRm9vV2luLCBpbmNsdWRlIHRob3NlLgorICAgICAgICBbJ2luY2x1ZGUnLCAncmVu
ZGVyaW5nLy4qQ2hyb21pdW0uKlxcLihjcHB8bW0/KSQnXSwKICAgICAgICAgWydleGNsdWRlJywg
J0FsbEluT25lXFwuY3BwJCddLAogICAgICAgXSwKICAgICAgICdjb25kaXRpb25zJzogWwpAQCAt
MTk4NCw2ICsxOTg1LDkgQEAKICAgICAgICAgICAgICMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEg
aXMgbm90IHVzZWQgb24gbWFjIHNpbmNlIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMKICAgICAgICAg
ICAgICMgZG9lcyBub3QgcmVmZXJlbmNlIHRoZSBTa2lhIGNvZGUgdGhhdCBpcyB1c2VkIGJ5IFdp
bmRvd3MsIExpbnV4IGFuZCBBbmRyb2lkLgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAgICMgUmVu
ZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlciBpcyB1c2VkIGJ5IFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLgorICAgICAgICAgICAgWydleGNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtRm9udFByb3ZpZGVyXFwuY3BwJ10sCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJcXC5oJ10sCiAgICAgICAgICAg
XSwKICAgICAgICAgfSx7ICMgT1MhPSJtYWMiCiAgICAgICAgICAgJ3NvdXJjZXMvJzogW1snZXhj
bHVkZScsICdNYWNcXC4oY3BwfG1tPykkJ11dCkBAIC0yMDA5LDYgKzIwMTMsNyBAQAogICAgICAg
ICB9XSwKICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewogICAgICAgICAgICdzb3VyY2VzLyc6
IFsKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlckxpbnV4XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgXSwK
ICAgICAgICAgfSx7ICMgT1MhPSJhbmRyb2lkIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtRm9udFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlci5oIgorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRo
ZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRoIGZvbnQgc2l6ZS4gV2UgdXNlIHRoaXMgYXMgdGhlIGRl
ZmF1bHQgZm9udAorLy8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ug
c2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJpbmspIGZvcgorLy8gZm9ybSBjb250cm9sIGZvbnRzLgor
Ly8gc3RhdGljCitmbG9hdCBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzX2RlZmF1
bHRGb250U2l6ZSA9IDE2LjA7CisKKy8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgorLy8gLUlF
IHVzZXMgYSBmb250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZv
ciBmb3JtIGNvbnRyb2xzLgorLy8gLUdlY2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBj
YWxscyBHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSwKKy8vIHdoaWNoIHJldHVybnMg
TVMgU2hlbGwgRGxnKQorLy8gLVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFuZGUuCisvLworLy8gRklY
TUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgd2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3Ig
QU5TSSBlbmNvZGluZ3MuCisvLyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2Ug
cmVuZGVyIGluY29ycmVjdGx5IGF0IGNlcnRhaW4gcGl4ZWwKKy8vIHNpemVzIChlLmcuIDE1cHgp
LiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVzZSBBcmlhbC4KK2NvbnN0IFN0cmluZyYgUmVuZGVyVGhl
bWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6ZGVmYXVsdEdVSUZvbnQoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBmb250RmFjZSwgKEFTQ0lJTGl0ZXJhbCgiQXJpYWwiKSkpOwor
ICAgIHJldHVybiBmb250RmFjZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9u
dFByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRl
cl9oCisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKKworY2xhc3MgUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc3lzdGVtRm9udChp
bnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0
Rm9udFNpemUoaW50KTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCBXVEY6OlN0cmlu
ZyYgZGVmYXVsdEdVSUZvbnQoKTsKKworICAgIHN0YXRpYyBmbG9hdCBzX2RlZmF1bHRGb250U2l6
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlckxpbnV4LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyTGludXguY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFsbFN5c3RlbUZvbnQ7
CitzdGF0aWMgRm9udERlc2NyaXB0aW9uIG1lbnVGb250Oworc3RhdGljIEZvbnREZXNjcmlwdGlv
biBsYWJlbEZvbnQ7CisKKy8vIHN0YXRpYwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQoreworICAgIHNfZGVmYXVs
dEZvbnRTaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZvbnRTaXplKTsKKworICAgIC8vIFJlc2V0
IGNhY2hlZCBmb250cy4KKyAgICBzbWFsbFN5c3RlbUZvbnQgPSBtZW51Rm9udCA9IGxhYmVsRm9u
dCA9IEZvbnREZXNjcmlwdGlvbigpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICBmbG9hdCBmb250U2l6ZSA9IHNfZGVmYXVsdEZv
bnRTaXplOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0
TWluaUNvbnRyb2w6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICBj
YXNlIENTU1ZhbHVlV2Via2l0Q29udHJvbDoKKyAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxs
ZXI/IEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9lcy4gTm90ZSB0aGF0IHdlCisgICAgICAg
IC8vIGFyZSBhc3N1bWluZyBhIDk2ZHBpIHNjcmVlbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGhh
dCB3ZSB1c2Ugb24KKyAgICAgICAgLy8gV2luZG93cy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBp
eGVsc1BlckluY2ggPSA5Ni4wZjsKKyAgICAgICAgZm9udFNpemUgLT0gKDIuMGYgLyBwb2ludHNQ
ZXJJbmNoKSAqIHBpeGVsc1BlckluY2g7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9udCgpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldEl0YWxpYyhmYWxzZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyTGludXguY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldpbi5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlcldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3Zp
ZGVyLmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiSFduZERDLmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5o
IgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjZGVmaW5lIFNJWkVPRl9TVFJVQ1RfV0lUSF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoc3Ry
dWN0TmFtZSwgbWVtYmVyKSBcCisgICAgb2Zmc2V0b2Yoc3RydWN0TmFtZSwgbWVtYmVyKSArIFwK
KyAgICAoc2l6ZW9mIHN0YXRpY19jYXN0PHN0cnVjdE5hbWUqPigwKS0+bWVtYmVyKQorI2RlZmlu
ZSBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBIFwKKyAgICBTSVpFT0ZfU1RSVUNUX1dJ
VEhfU1BFQ0lGSUVEX0xBU1RfTUVNQkVSKE5PTkNMSUVOVE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFsbFN5
c3RlbUZvbnQ7CitzdGF0aWMgRm9udERlc2NyaXB0aW9uIG1lbnVGb250Oworc3RhdGljIEZvbnRE
ZXNjcmlwdGlvbiBsYWJlbEZvbnQ7CisKKy8vIENvbnZlcnRzIHxwb2ludHN8IHRvIHBpeGVscy4g
T25lIHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaC4KK3N0YXRpYyBmbG9hdCBwb2ludHNUb1BpeGVs
cyhmbG9hdCBwb2ludHMpCit7CisgICAgc3RhdGljIGZsb2F0IHBpeGVsc1BlckluY2ggPSAwLjBm
OworICAgIGlmICghcGl4ZWxzUGVySW5jaCkgeworICAgICAgICBIV25kREMgaGRjKDApOyAvLyBX
aGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBEQz8KKyAgICAgICAgaWYgKGhk
YykgLy8gQ2FuIHRoaXMgZXZlciBhY3R1YWxseSBiZSAwPworICAgICAgICAgICAgcGl4ZWxzUGVy
SW5jaCA9IEdldERldmljZUNhcHMoaGRjLCBMT0dQSVhFTFNZKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7CisgICAgcmV0dXJuIHBvaW50cyAvIHBvaW50
c1BlckluY2ggKiBwaXhlbHNQZXJJbmNoOworfQorCitzdGF0aWMgdm9pZCBnZXROb25DbGllbnRN
ZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpCit7CisgICAgc3RhdGljIFVJTlQgc2l6
ZSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkgPworICAgICAgICBzaXplb2Yo
Tk9OQ0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBOworICAg
IG1ldHJpY3MtPmNiU2l6ZSA9IHNpemU7CisgICAgYm9vbCBzdWNjZXNzID0gISFTeXN0ZW1QYXJh
bWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZSwgbWV0cmljcywgMCk7Cisg
ICAgQVNTRVJUKHN1Y2Nlc3MpOworfQorCisvLyBSZXR1cm4gdGhlIGhlaWdodCBvZiBzeXN0ZW0g
Zm9udCB8Zm9udHwgaW4gcGl4ZWxzLiBXZSB1c2UgdGhpcyBzaXplIGJ5CisvLyBkZWZhdWx0IGZv
ciBzb21lIG5vbi1mb3JtLWNvbnRyb2wgZWxlbWVudHMuCitzdGF0aWMgZmxvYXQgc3lzdGVtRm9u
dFNpemUoY29uc3QgTE9HRk9OVCYgZm9udCkKK3sKKyAgICBmbG9hdCBzaXplID0gLWZvbnQubGZI
ZWlnaHQ7CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIEhGT05UIGhGb250ID0gQ3JlYXRl
Rm9udEluZGlyZWN0KCZmb250KTsKKyAgICAgICAgaWYgKGhGb250KSB7CisgICAgICAgICAgICBI
V25kREMgaGRjKDApOyAvLyBXaGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBE
Qz8KKyAgICAgICAgICAgIGlmIChoZGMpIHsKKyAgICAgICAgICAgICAgICBIR0RJT0JKIGhPYmpl
Y3QgPSBTZWxlY3RPYmplY3QoaGRjLCBoRm9udCk7CisgICAgICAgICAgICAgICAgVEVYVE1FVFJJ
QyB0bTsKKyAgICAgICAgICAgICAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0bSk7CisgICAgICAg
ICAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgaE9iamVjdCk7CisgICAgICAgICAgICAgICAgc2l6
ZSA9IHRtLnRtQXNjZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVsZXRlT2JqZWN0
KGhGb250KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSAiY29kZXBhZ2UgOTM2IiBi
aXQgaGVyZSBpcyBmcm9tIEdlY2tvOyBhcHBhcmVudGx5IHRoaXMgaGVscHMgbWFrZQorICAgIC8v
IGZvbnRzIG1vcmUgbGVnaWJsZSBpbiBTaW1wbGlmaWVkIENoaW5lc2Ugd2hlcmUgdGhlIGRlZmF1
bHQgZm9udCBzaXplIGlzCisgICAgLy8gdG9vIHNtYWxsLgorICAgIC8vCisgICAgLy8gRklYTUU6
IGh0dHA6Ly9iLzExMTk4ODMgU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yICJzbWFsbCBjYXB0
aW9uIiwKKyAgICAvLyAibWVudSIsIGFuZCAic3RhdHVzIGJhciIgb2JqZWN0cywgSSdtIG5vdCBz
dXJlIGhvdyBtdWNoIHRoaXMgZXZlbgorICAgIC8vIG1hdHRlcnMuIFBsdXMgdGhlIEdlY2tvIHBh
dGNoIHdlbnQgaW4gYmFjayBpbiAyMDAyLCBhbmQgbWF5YmUgdGhpcworICAgIC8vIGlzbid0IGV2
ZW4gcmVsZXZhbnQgYW55bW9yZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBz
aG91bGQKKyAgICAvLyBiZSByZW1vdmVkLCBvciBwZXJoYXBzIGJyb2FkZW5lZCB0byBiZSAiYW55
IENKSyBsb2NhbGUiLgorICAgIC8vCisgICAgcmV0dXJuICgoc2l6ZSA8IDEyLjBmKSAmJiAoR2V0
QUNQKCkgPT0gOTM2KSkgPyAxMi4wZiA6IHNpemU7Cit9CisKKy8vIHN0YXRpYwordm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQoreworICAgIC8vIFRoaXMgbG9naWMgb3dlcyBt
dWNoIHRvIFJlbmRlclRoZW1lU2FmYXJpLmNwcC4KKyAgICBGb250RGVzY3JpcHRpb24qIGNhY2hl
ZERlc2MgPSAwOworICAgIEF0b21pY1N0cmluZyBmYWNlTmFtZTsKKyAgICBmbG9hdCBmb250U2l6
ZSA9IDA7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0
aW9uOgorICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxsU3lzdGVtRm9udDsKKyAgICAgICAgaWYg
KCFzbWFsbFN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAgTk9OQ0xJ
RU5UTUVUUklDUyBtZXRyaWNzOworICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0
cmljcyk7CisgICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmU21D
YXB0aW9uRm9udC5sZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZG
YWNlTmFtZSkpOworICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNz
LmxmU21DYXB0aW9uRm9udCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NWYWx1ZU1lbnU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmbWVudUZvbnQ7CisgICAgICAgIGlm
ICghbWVudUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAgTk9OQ0xJRU5UTUVU
UklDUyBtZXRyaWNzOworICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7
CisgICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmTWVudUZvbnQu
bGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZNZW51Rm9udC5sZkZhY2VOYW1lKSk7CisgICAg
ICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3MubGZNZW51Rm9udCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVN0YXR1c0JhcjoKKyAg
ICAgICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZvbnQ7CisgICAgICAgIGlmICghbGFiZWxGb250Lmlz
QWJzb2x1dGVTaXplKCkpIHsKKyAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsK
KyAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOworICAgICAgICAgICAg
ZmFjZU5hbWUgPSBtZXRyaWNzLmxmU3RhdHVzRm9udC5sZkZhY2VOYW1lOworICAgICAgICAgICAg
Zm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmU3RhdHVzRm9udCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgor
ICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6CisgICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdENvbnRyb2w6CisgICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoKTsKKyAgICAg
ICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/IEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9l
cy4KKyAgICAgICAgZm9udFNpemUgPSBzX2RlZmF1bHRGb250U2l6ZSAtIHBvaW50c1RvUGl4ZWxz
KDIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmYWNlTmFtZSA9IGRl
ZmF1bHRHVUlGb250KCk7CisgICAgICAgIGZvbnRTaXplID0gc19kZWZhdWx0Rm9udFNpemU7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghY2FjaGVkRGVzYykKKyAgICAgICAgY2Fj
aGVkRGVzYyA9ICZmb250RGVzY3JpcHRpb247CisKKyAgICBpZiAoZm9udFNpemUpIHsKKyAgICAg
ICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZmFjZU5hbWUpOworICAgICAg
ICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICAgICAgY2FjaGVkRGVz
Yy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICAgICAg
Y2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CisgICAgICAgIGNhY2hlZERl
c2MtPnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0
SXRhbGljKGZhbHNlKTsKKyAgICB9CisgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7
Cit9CisKKy8vIHN0YXRpYwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpz
ZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQoreworICAgIHNfZGVmYXVsdEZvbnRTaXpl
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZvbnRTaXplKTsKKworICAgIC8vIFJlc2V0IGNhY2hlZCBm
b250cy4KKyAgICBzbWFsbFN5c3RlbUZvbnQgPSBtZW51Rm9udCA9IGxhYmVsRm9udCA9IEZvbnRE
ZXNjcmlwdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQ
cm92aWRlcldpbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwCShyZXZpc2lvbiAxMzQyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jl
c3MuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNo
cm9taXVtRm9udFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNs
dWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAg
LTcwLDIzICs3MSw2IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHMK
IHN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9
IDMwOwogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25X
aWR0aCA9IDE4OwogCi0vLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KLS8vIC1JRSB1c2VzIGEg
Zm9udCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3IgZm9ybSBj
b250cm9scy4KLS8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0
U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCi0vLyB3aGljaCByZXR1cm5zIE1TIFNoZWxs
IERsZykKLS8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgotLy8KLS8vIEZJWE1FOiBUaGUg
b25seSBjYXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFOU0kgZW5j
b2RpbmdzLgotLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJlbmRlciBp
bmNvcnJlY3RseSBhdCBjZXJ0YWluIHBpeGVsCi0vLyBzaXplcyAoZS5nLiAxNXB4KS4gU28sIGZv
ciBub3cgd2UganVzdCB1c2UgQXJpYWwuCi1jb25zdCBTdHJpbmcmIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJBcmlhbCIpKSk7Ci0gICAgcmV0dXJuIGZvbnRG
YWNlOwotfQotCi1mbG9hdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZGVmYXVsdEZvbnRTaXpl
ID0gMTYuMDsKLQogUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhKCkKIHsKIH0KQEAgLTE4MywyNyArMTY3LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpjYXJldEJsaQogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1G
b250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAog
ewotICAgIGZsb2F0IGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotCi0gICAgc3dpdGNoIChw
cm9wSWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWluaUNvbnRyb2w6Ci0gICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q29udHJv
bDoKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/IEJlY2F1c2UgdGhhdCdzIHdoYXQg
R2Vja28gZG9lcy4gTm90ZSB0aGF0IHdlCi0gICAgICAgIC8vIGFyZSBhc3N1bWluZyBhIDk2ZHBp
IHNjcmVlbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGhhdCB3ZSB1c2Ugb24KLSAgICAgICAgLy8g
V2luZG93cy4KLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBvaW50c1BlckluY2ggPSA3Mi4w
ZjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKLSAg
ICAgICAgZm9udFNpemUgLT0gKDIuMGYgLyBwb2ludHNQZXJJbmNoKSAqIHBpeGVsc1BlckluY2g7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWls
eSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9udCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1
dGVTaXplKHRydWUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnRE
ZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9u
dFdlaWdodE5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7Cisg
ICAgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udChwcm9wSWQsIGZv
bnREZXNjcmlwdGlvbik7CiB9CiAKIGludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWluaW11
bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CkBAIC01NzMsNyArNTM3LDcg
QEAgaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybgogLy8gc3RhdGljCiB2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRT
aXplKQogewotICAgIGRlZmF1bHRGb250U2l6ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihmb250U2l6
ZSk7CisgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c2V0RGVmYXVsdEZvbnRT
aXplKGZvbnRTaXplKTsKIH0KIAogZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJl
dEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAkocmV2aXNpb24gMTM0MjQ2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMyArMTQ1LDYgQEAgY2xhc3MgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEgOiBwdWJsaWMgUgogICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNp
emUoaW50KTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYg
ZGVmYXVsdEdVSUZvbnQoKTsKLQotICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YXJpYWJsZS13aWR0
aCBmb250IHNpemUuICBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBmb250Ci0gICAgICAgIC8v
IHNpemUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdoaWNoIHdl
IHRoZW4gc2hyaW5rKSBmb3IKLSAgICAgICAgLy8gZm9ybSBjb250cm9sIGZvbnRzLgotICAgICAg
ICBzdGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOwotCiAgICAgICAgIHZpcnR1YWwgZG91Ymxl
IGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBp
bnQgbWVudUxpc3RBcnJvd1BhZGRpbmcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEz
NDI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9y
dC5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFpbnRJ
bmZvLmgiCkBAIC00Myw2ICs0Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5V2luLmgi
CkBAIC01MiwxMiArNTIsNiBAQAogLy8gRklYTUU6IFRoaXMgZGVwZW5kZW5jeSBzaG91bGQgZXZl
bnR1YWxseSBiZSByZW1vdmVkLgogI2luY2x1ZGUgPHNraWEvZXh0L3NraWFfdXRpbHNfd2luLmg+
CiAKLSNkZWZpbmUgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihzdHJ1
Y3ROYW1lLCBtZW1iZXIpIFwKLSAgICBvZmZzZXRvZihzdHJ1Y3ROYW1lLCBtZW1iZXIpICsgXAot
ICAgIChzaXplb2Ygc3RhdGljX2Nhc3Q8c3RydWN0TmFtZSo+KDApLT5tZW1iZXIpCi0jZGVmaW5l
IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEEgXAotICAgIFNJWkVPRl9TVFJVQ1RfV0lU
SF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoTk9OQ0xJRU5UTUVUUklDUywgbGZNZXNzYWdlRm9udCkK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGUgc3RhbmRhcmQgd2lkdGggZm9yIHRoZSBt
ZW51IGxpc3QgZHJvcC1kb3duIGJ1dHRvbiB3aGVuIHJ1biB1bmRlcgpAQCAtMTM1LDE5ICsxMjks
NiBAQCBib29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0YW5jZSA9IGZhbHNlCiAKIH0gLy8gbmFt
ZXNwYWNlCiAKLXN0YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklD
UyogbWV0cmljcykKLXsKLSAgICBzdGF0aWMgVUlOVCBzaXplID0gKHdpbmRvd3NWZXJzaW9uKCkg
Pj0gV2luZG93c1Zpc3RhKSA/Ci0gICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6IE5P
TkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7Ci0gICAgbWV0cmljcy0+Y2JTaXplID0gc2l6
ZTsKLSAgICBib29sIHN1Y2Nlc3MgPSAhIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05D
TElFTlRNRVRSSUNTLCBzaXplLCBtZXRyaWNzLCAwKTsKLSAgICBBU1NFUlQoc3VjY2Vzcyk7Ci19
Ci0KLXN0YXRpYyBGb250RGVzY3JpcHRpb24gc21hbGxTeXN0ZW1Gb250Owotc3RhdGljIEZvbnRE
ZXNjcmlwdGlvbiBtZW51Rm9udDsKLXN0YXRpYyBGb250RGVzY3JpcHRpb24gbGFiZWxGb250Owot
CiAvLyBJbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gIFdlIGRvbid0IHB1dCB0aGVt
IGluIGFuIGFub255bW91cwogLy8gbmFtZXNwYWNlIHNvIHRoZXkgaGF2ZSBlYXNpZXIgYWNjZXNz
IHRvIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4KIApAQCAtMTY2LDU1ICsxNDcsNiBAQCBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci0vLyBSZXR1cm4gdGhlIGhlaWdodCBvZiBzeXN0ZW0gZm9udCB8Zm9udHwgaW4gcGl4ZWxzLiAg
V2UgdXNlIHRoaXMgc2l6ZSBieQotLy8gZGVmYXVsdCBmb3Igc29tZSBub24tZm9ybS1jb250cm9s
IGVsZW1lbnRzLgotc3RhdGljIGZsb2F0IHN5c3RlbUZvbnRTaXplKGNvbnN0IExPR0ZPTlQmIGZv
bnQpCi17Ci0gICAgZmxvYXQgc2l6ZSA9IC1mb250LmxmSGVpZ2h0OwotICAgIGlmIChzaXplIDwg
MCkgewotICAgICAgICBIRk9OVCBoRm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmZm9udCk7Ci0g
ICAgICAgIGlmIChoRm9udCkgewotICAgICAgICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBh
Ym91dCBwcmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/Ci0gICAgICAgICAgICBpZiAoaGRj
KSB7Ci0gICAgICAgICAgICAgICAgSEdESU9CSiBoT2JqZWN0ID0gU2VsZWN0T2JqZWN0KGhkYywg
aEZvbnQpOwotICAgICAgICAgICAgICAgIFRFWFRNRVRSSUMgdG07Ci0gICAgICAgICAgICAgICAg
R2V0VGV4dE1ldHJpY3MoaGRjLCAmdG0pOwotICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdCho
ZGMsIGhPYmplY3QpOwotICAgICAgICAgICAgICAgIHNpemUgPSB0bS50bUFzY2VudDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIERlbGV0ZU9iamVjdChoRm9udCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBUaGUgImNvZGVwYWdlIDkzNiIgYml0IGhlcmUgaXMgZnJvbSBHZWNrbzsg
YXBwYXJlbnRseSB0aGlzIGhlbHBzIG1ha2UKLSAgICAvLyBmb250cyBtb3JlIGxlZ2libGUgaW4g
U2ltcGxpZmllZCBDaGluZXNlIHdoZXJlIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpcwotICAgIC8v
IHRvbyBzbWFsbC4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBodHRwOi8vYi8xMTE5ODgzIFNpbmNl
IHRoaXMgaXMgb25seSB1c2VkIGZvciAic21hbGwgY2FwdGlvbiIsCi0gICAgLy8gIm1lbnUiLCBh
bmQgInN0YXR1cyBiYXIiIG9iamVjdHMsIEknbSBub3Qgc3VyZSBob3cgbXVjaCB0aGlzIGV2ZW4K
LSAgICAvLyBtYXR0ZXJzLiAgUGx1cyB0aGUgR2Vja28gcGF0Y2ggd2VudCBpbiBiYWNrIGluIDIw
MDIsIGFuZCBtYXliZSB0aGlzCi0gICAgLy8gaXNuJ3QgZXZlbiByZWxldmFudCBhbnltb3JlLiAg
V2Ugc2hvdWxkIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBzaG91bGQKLSAgICAvLyBiZSByZW1v
dmVkLCBvciBwZXJoYXBzIGJyb2FkZW5lZCB0byBiZSAiYW55IENKSyBsb2NhbGUiLgotICAgIC8v
Ci0gICAgcmV0dXJuICgoc2l6ZSA8IDEyLjBmKSAmJiAoR2V0QUNQKCkgPT0gOTM2KSkgPyAxMi4w
ZiA6IHNpemU7Ci19Ci0KLS8vIENvbnZlcnRzIHxwb2ludHN8IHRvIHBpeGVscy4gIE9uZSBwb2lu
dCBpcyAxLzcyIG9mIGFuIGluY2guCi1zdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQg
cG9pbnRzKQotewotICAgIHN0YXRpYyBmbG9hdCBwaXhlbHNQZXJJbmNoID0gMC4wZjsKLSAgICBp
ZiAoIXBpeGVsc1BlckluY2gpIHsKLSAgICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBhYm91
dCBwcmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/Ci0gICAgICAgIGlmIChoZGMpIC8vIENh
biB0aGlzIGV2ZXIgYWN0dWFsbHkgYmUgTlVMTD8KLSAgICAgICAgICAgIHBpeGVsc1BlckluY2gg
PSBHZXREZXZpY2VDYXBzKGhkYywgTE9HUElYRUxTWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgZmxv
YXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOwotICAgIHJldHVybiBwb2ludHMgLyBwb2ludHNQZXJJ
bmNoICogcGl4ZWxzUGVySW5jaDsKLX0KLQogc3RhdGljIGRvdWJsZSBxdWVyeVN5c3RlbUJsaW5r
SW50ZXJ2YWwoZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkKIHsKICAgICBVSU5UIGJsaW5rVGltZSA9
IEdldENhcmV0QmxpbmtUaW1lKCk7CkBAIC0yODUsNjcgKzIxNyw2IEBAIENvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtSW4KICAgICByZXR1cm4gQ29sb3IoMHhmZiwgMHhmZiwg
MHg5Nik7IC8vIFllbGxvdy4KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0
ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAotewotICAgIC8vIFRoaXMgbG9naWMgb3dlcyBtdWNoIHRvIFJlbmRlclRoZW1lU2FmYXJpLmNw
cC4KLSAgICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERlc2MgPSAwOwotICAgIEF0b21pY1N0cmlu
ZyBmYWNlTmFtZTsKLSAgICBmbG9hdCBmb250U2l6ZSA9IDA7Ci0gICAgc3dpdGNoIChwcm9wSWQp
IHsKLSAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0aW9uOgotICAgICAgICBjYWNoZWREZXNjID0g
JnNtYWxsU3lzdGVtRm9udDsKLSAgICAgICAgaWYgKCFzbWFsbFN5c3RlbUZvbnQuaXNBYnNvbHV0
ZVNpemUoKSkgewotICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwotICAgICAg
ICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFt
ZSA9IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lLCB3Y3Ns
ZW4obWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSkpOwotICAgICAgICAgICAgZm9u
dFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmU21DYXB0aW9uRm9udCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZU1lbnU6Ci0gICAgICAgIGNhY2hl
ZERlc2MgPSAmbWVudUZvbnQ7Ci0gICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNvbHV0ZVNpemUo
KSkgewotICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwotICAgICAgICAgICAg
Z2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9IEF0
b21pY1N0cmluZyhtZXRyaWNzLmxmTWVudUZvbnQubGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3Mu
bGZNZW51Rm9udC5sZkZhY2VOYW1lKSk7Ci0gICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZv
bnRTaXplKG1ldHJpY3MubGZNZW51Rm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVN0YXR1c0JhcjoKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZv
bnQ7Ci0gICAgICAgIGlmICghbGFiZWxGb250LmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAg
ICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1l
dHJpY3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUgPSBtZXRyaWNzLmxmU3RhdHVz
Rm9udC5sZkZhY2VOYW1lOwotICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZSht
ZXRyaWNzLmxmU3RhdHVzRm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFs
bENvbnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIGZhY2VO
YW1lID0gZGVmYXVsdEdVSUZvbnQoKTsKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/
ICBCZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuCi0gICAgICAgIGZvbnRTaXplID0gZGVm
YXVsdEZvbnRTaXplIC0gcG9pbnRzVG9QaXhlbHMoMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoKTsKLSAgICAgICAgZm9u
dFNpemUgPSBkZWZhdWx0Rm9udFNpemU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlm
ICghY2FjaGVkRGVzYykKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZmb250RGVzY3JpcHRpb247Ci0K
LSAgICBpZiAoZm9udFNpemUpIHsKLSAgICAgICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5z
ZXRGYW1pbHkoZmFjZU5hbWUpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246Ok5vRmFtaWx5KTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShm
b250U2l6ZSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFs
KTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRhbGljKGZhbHNlKTsKLSAgICB9Ci0gICAgZm9u
dERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7Ci19Ci0KIC8vIE1hcCBhIENTU1ZhbHVlKiBzeXN0
ZW0gY29sb3IgdG8gYW4gaW5kZXggdW5kZXJzdG9vZCBieSBHZXRTeXNDb2xvcigpLgogc3RhdGlj
IGludCBjc3NWYWx1ZUlkVG9TeXNDb2xvckluZGV4KGludCBjc3NWYWx1ZUlkKQogewpAQCAtNTM2
LDE1ICs0MDcsNiBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50TWVudUxpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBzdGF0aWMKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKLXsKLSAgICBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRTaXplKGZvbnRTaXplKTsKLQotICAgIC8vIFJl
c2V0IGNhY2hlZCBmb250cy4KLSAgICBzbWFsbFN5c3RlbUZvbnQgPSBtZW51Rm9udCA9IGxhYmVs
Rm9udCA9IEZvbnREZXNjcmlwdGlvbigpOwotfQotCiBkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdAogewogICAgIC8vIFRoaXMg
aW52b2x2ZXMgYSBzeXN0ZW0gY2FsbCwgc28gd2UgY2FjaGUgdGhlIHJlc3VsdC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAko
cmV2aXNpb24gMTM0MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1XaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNo
SGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CiAKLSAgICAgICAgLy8gU3lz
dGVtIGZvbnRzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBG
b250RGVzY3JpcHRpb24mKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xv
cihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkK
QEAgLTg2LDEwICs4NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZW50aXJl
IG1lbnVsaXN0LgogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgLy8gT3Zl
cnJpZGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEncyBzZXREZWZhdWx0Rm9udFNpemUgbWV0aG9k
IHRvIGFsc28gcmVzZXQgdGhlIGxvY2FsIGZvbnQgcHJvcGVydHkgY2FjaGVzLgotICAgICAgICAv
LyBTZWUgY29tbWVudCBpbiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRT
aXplKCkgcmVnYXJkaW5nIHVnbGluZXNzIG9mIHRoaXMgaGFjay4KLSAgICAgICAgc3RhdGljIHZv
aWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174008</attachid>
            <date>2012-11-13 15:22:56 -0800</date>
            <delta_ts>2012-11-14 08:26:07 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-101949-20121113152056.patch</filename>
            <type>text/plain</type>
            <size>33112</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTExLTEyICBTY290dCBW
aW9sZXQgIDxza3lAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVmYWN0b3Ig
dGhlbWUgZm9udCBsb29rdXAgaW50byBhIGZhY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTk0OQorCisgICAgICAgIFJldmlld2VkIGJ5IFRv
bnkgQ2hhbmcuCisKKyAgICAgICAgVGhpcyB3aWxsIHVsdGltYXRlbHkgYWxsb3cgdXMgdG8gdXNl
IHdoYXQgaXMgY3VycmVudGx5IGluIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCBvbiB3aW5kb3dz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUmVmYWN0b3Jpbmcgb25seS4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyOjpkZWZhdWx0R1VJRm9udCk6IE1vdmVkIGludG8gUmVuZGVyVGhlbWVG
b250UHJvdmlkZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250
UHJvdmlkZXIuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyKTogVGhpcyBpcyB0aGUgZm9u
dCByZWxhdGVkIG1ldGhvZHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXJMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzZXREZWZhdWx0
Rm9udFNpemUpOiBXaGF0IHdhcyBpbiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0RGVmYXVs
dEZvbnRTaXplLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlcjo6c3lzdGVtRm9udCk6IFdoYXQgd2FzIGluIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpz
eXN0ZW1Gb250LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50c1RvUGl4ZWxzKTogTW92ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtV2luLgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xpZW50TWV0cmljcyk6IE1vdmVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnRTaXplKTogTW92
ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udCk6IE1vdmVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZSk6IE1vdmVkIGZyb20gUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhKTogTW92ZWQgaW50byBSZW5kZXJUaGVtZUZvbnRQcm92aWRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250KTogQ2Fs
bHMgdG8gUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUpOiBDYWxscyB0byBS
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5oOgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEp
OiBNb3ZlcyBkZWZhdWx0Rm9udFNpemUgaW50byBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3Zp
ZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDogTW92
ZXMgZm9udCBjb2RlIGludG8gUmVuZGVyVGhlbWVGb250UHJvdmlkZXJXaW4uCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oOiBS
ZW1vdmVkIG92ZXJyaWRlbiBtZXRob2RzIG5vdyBoYW5kbGVkIGJ5IFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bVdpbik6CisKIDIwMTItMTEtMTIg
IEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF1bSlND
XSBTY3JpcHRQcm9maWxlTm9kZTo6Y2FsbFVJRCBuZWVkcyBub3QgdG8gYmUgW0N1c3RvbV0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzNDI0NikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ1NCw2ICszNDU0LDEwIEBACiAgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1BbmRyb2lkLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuY3BwJywKKyAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNw
cCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlk
ZXJXaW4uY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51
eC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oJywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMzQy
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBj
b3B5KQpAQCAtMTk2Niw3ICsxOTY2LDggQEAKICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91dCBo
b3cgdG8gc3RvcmUgdGhlc2UgcGF0dGVybnMgaW4gYSB2YXJpYWJsZS4KICAgICAgICAgWydleGNs
dWRlJywgJyhjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGxp
bnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5
bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUn
LCAnKD88IUNocm9taXVtKShDYWlyb3xDRnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5U
eXBlfFBPU0lYfFBvc2l4fFF0fFNhZmFyaXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihj
cHB8bW0/KSQnXSwKLQorICAgICAgICAjIFByZXZpb3VzIHJ1bGUgZXhjbHVkZXMgdGhpbmdzIGxp
a2UgQ2hyb21pdW1Gb29XaW4sIGluY2x1ZGUgdGhvc2UuCisgICAgICAgIFsnaW5jbHVkZScsICdy
ZW5kZXJpbmcvLipDaHJvbWl1bS4qXFwuKGNwcHxtbT8pJCddLAogICAgICAgICBbJ2V4Y2x1ZGUn
LCAnQWxsSW5PbmVcXC5jcHAkJ10sCiAgICAgICBdLAogICAgICAgJ2NvbmRpdGlvbnMnOiBbCkBA
IC0xOTg0LDYgKzE5ODUsOSBAQAogICAgICAgICAgICAgIyBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YSBpcyBub3QgdXNlZCBvbiBtYWMgc2luY2UgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYwogICAgICAg
ICAgICAgIyBkb2VzIG5vdCByZWZlcmVuY2UgdGhlIFNraWEgY29kZSB0aGF0IGlzIHVzZWQgYnkg
V2luZG93cywgTGludXggYW5kIEFuZHJvaWQuCiAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhXFwuY3BwJCddLAorICAgICAgICAgICAgIyBS
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyIGlzIHVzZWQgYnkgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXJcXC5jcHAnXSwKKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlclxcLmgnXSwKICAgICAgICAg
ICBdLAogICAgICAgICB9LHsgIyBPUyE9Im1hYyIKICAgICAgICAgICAnc291cmNlcy8nOiBbWydl
eGNsdWRlJywgJ01hY1xcLihjcHB8bW0/KSQnXV0KQEAgLTIwMDksNiArMjAxMyw3IEBACiAgICAg
ICAgIH1dLAogICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CiAgICAgICAgICAgJ3NvdXJjZXMv
JzogWworICAgICAgICAgICAgWydpbmNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eFxcLmNwcCQnXSwKICAgICAgICAgICBd
LAogICAgICAgICB9LHsgIyBPUyE9ImFuZHJvaWQiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiBXZSB1c2UgdGhpcyBhcyB0aGUg
ZGVmYXVsdCBmb250CisvLyBzaXplIGZvciB0aGUgInN5c3RlbSBmb250IiwgYW5kIGFzIGEgYmFz
ZSBzaXplICh3aGljaCB3ZSB0aGVuIHNocmluaykgZm9yCisvLyBmb3JtIGNvbnRyb2wgZm9udHMu
CisvLyBzdGF0aWMKK2Zsb2F0IFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNfZGVm
YXVsdEZvbnRTaXplID0gMTYuMDsKKworLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCisvLyAt
SUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQg
Zm9yIGZvcm0gY29udHJvbHMuCisvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5
IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpLAorLy8gd2hpY2ggcmV0dXJu
cyBNUyBTaGVsbCBEbGcpCisvLyAtU2FmYXJpIHVzZXMgTHVjaWRhIEdyYW5kZS4KKy8vCisvLyBG
SVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRvbid0IG1hdGNoIElFIGlzIGZv
ciBBTlNJIGVuY29kaW5ncy4KKy8vIElFIHVzZXMgTVMgU2hlbGwgRGxnIHRoZXJlLCB3aGljaCB3
ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFpbiBwaXhlbAorLy8gc2l6ZXMgKGUuZy4gMTVw
eCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFyaWFsLgorY29uc3QgU3RyaW5nJiBSZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpkZWZhdWx0R1VJRm9udCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJBcmlhbCIpKSk7
CisgICAgcmV0dXJuIGZvbnRGYWNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXJfaAorI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3Zp
ZGVyX2gKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRm9udERlc2NyaXB0aW9uOworCitjbGFzcyBSZW5kZXJUaGVtZUNo
cm9taXVtRm9udFByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzeXN0ZW1Gb250
KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIHNldERlZmF1
bHRGb250U2l6ZShpbnQpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IFdURjo6U3Ry
aW5nJiBkZWZhdWx0R1VJRm9udCgpOworCisgICAgc3RhdGljIGZsb2F0IHNfZGVmYXVsdEZvbnRT
aXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGhl
bWVDaHJvbWl1bUZvbnRQcm92aWRlcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyTGludXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyTGludXguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuaCIKKworI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgRm9udERlc2NyaXB0aW9uIHNtYWxsU3lzdGVtRm9u
dDsKK3N0YXRpYyBGb250RGVzY3JpcHRpb24gbWVudUZvbnQ7CitzdGF0aWMgRm9udERlc2NyaXB0
aW9uIGxhYmVsRm9udDsKKworLy8gc3RhdGljCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250
UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNpemUpCit7CisgICAgc19kZWZh
dWx0Rm9udFNpemUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZm9udFNpemUpOworCisgICAgLy8gUmVz
ZXQgY2FjaGVkIGZvbnRzLgorICAgIHNtYWxsU3lzdGVtRm9udCA9IG1lbnVGb250ID0gbGFiZWxG
b250ID0gRm9udERlc2NyaXB0aW9uKCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtRm9udFByb3ZpZGVyOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQoreworICAgIGZsb2F0IGZvbnRTaXplID0gc19kZWZhdWx0
Rm9udFNpemU7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgorICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAvLyBXaHkgMiBwb2ludHMgc21h
bGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKKyAgICAg
ICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZkcGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0
aGF0IHdlIHVzZSBvbgorICAgICAgICAvLyBXaW5kb3dzLgorICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOworICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQg
cGl4ZWxzUGVySW5jaCA9IDk2LjBmOworICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBvaW50
c1BlckluY2gpICogcGl4ZWxzUGVySW5jaDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Zm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KCkp
OworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXRhbGljKGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Gb250UHJvdmlkZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyV2luLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyV2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJv
dmlkZXIuaCIKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJIV25kREMuaCIKKyNpbmNsdWRlICJTeXN0ZW1JbmZv
LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKyNkZWZpbmUgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihz
dHJ1Y3ROYW1lLCBtZW1iZXIpIFwKKyAgICBvZmZzZXRvZihzdHJ1Y3ROYW1lLCBtZW1iZXIpICsg
XAorICAgIChzaXplb2Ygc3RhdGljX2Nhc3Q8c3RydWN0TmFtZSo+KDApLT5tZW1iZXIpCisjZGVm
aW5lIE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEEgXAorICAgIFNJWkVPRl9TVFJVQ1Rf
V0lUSF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoTk9OQ0xJRU5UTUVUUklDUywgbGZNZXNzYWdlRm9u
dCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgRm9udERlc2NyaXB0aW9uIHNtYWxs
U3lzdGVtRm9udDsKK3N0YXRpYyBGb250RGVzY3JpcHRpb24gbWVudUZvbnQ7CitzdGF0aWMgRm9u
dERlc2NyaXB0aW9uIGxhYmVsRm9udDsKKworLy8gQ29udmVydHMgfHBvaW50c3wgdG8gcGl4ZWxz
LiBPbmUgcG9pbnQgaXMgMS83MiBvZiBhbiBpbmNoLgorc3RhdGljIGZsb2F0IHBvaW50c1RvUGl4
ZWxzKGZsb2F0IHBvaW50cykKK3sKKyAgICBzdGF0aWMgZmxvYXQgcGl4ZWxzUGVySW5jaCA9IDAu
MGY7CisgICAgaWYgKCFwaXhlbHNQZXJJbmNoKSB7CisgICAgICAgIEhXbmREQyBoZGMoMCk7IC8v
IFdoYXQgYWJvdXQgcHJpbnRpbmc/IElzIHRoaXMgdGhlIHJpZ2h0IERDPworICAgICAgICBpZiAo
aGRjKSAvLyBDYW4gdGhpcyBldmVyIGFjdHVhbGx5IGJlIDA/CisgICAgICAgICAgICBwaXhlbHNQ
ZXJJbmNoID0gR2V0RGV2aWNlQ2FwcyhoZGMsIExPR1BJWEVMU1kpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwaXhlbHNQZXJJbmNoID0gOTYuMGY7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0IGZsb2F0IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKKyAgICByZXR1cm4gcG9pbnRzIC8gcG9p
bnRzUGVySW5jaCAqIHBpeGVsc1BlckluY2g7Cit9CisKK3N0YXRpYyB2b2lkIGdldE5vbkNsaWVu
dE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklDUyogbWV0cmljcykKK3sKKyAgICBzdGF0aWMgVUlOVCBz
aXplID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0gV2luZG93c1Zpc3RhKSA/CisgICAgICAgIHNpemVv
ZihOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7Cisg
ICAgbWV0cmljcy0+Y2JTaXplID0gc2l6ZTsKKyAgICBib29sIHN1Y2Nlc3MgPSAhIVN5c3RlbVBh
cmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplLCBtZXRyaWNzLCAwKTsK
KyAgICBBU1NFUlQoc3VjY2Vzcyk7Cit9CisKKy8vIFJldHVybiB0aGUgaGVpZ2h0IG9mIHN5c3Rl
bSBmb250IHxmb250fCBpbiBwaXhlbHMuIFdlIHVzZSB0aGlzIHNpemUgYnkKKy8vIGRlZmF1bHQg
Zm9yIHNvbWUgbm9uLWZvcm0tY29udHJvbCBlbGVtZW50cy4KK3N0YXRpYyBmbG9hdCBzeXN0ZW1G
b250U2l6ZShjb25zdCBMT0dGT05UJiBmb250KQoreworICAgIGZsb2F0IHNpemUgPSAtZm9udC5s
ZkhlaWdodDsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgSEZPTlQgaEZvbnQgPSBDcmVh
dGVGb250SW5kaXJlY3QoJmZvbnQpOworICAgICAgICBpZiAoaEZvbnQpIHsKKyAgICAgICAgICAg
IEhXbmREQyBoZGMoMCk7IC8vIFdoYXQgYWJvdXQgcHJpbnRpbmc/IElzIHRoaXMgdGhlIHJpZ2h0
IERDPworICAgICAgICAgICAgaWYgKGhkYykgeworICAgICAgICAgICAgICAgIEhHRElPQkogaE9i
amVjdCA9IFNlbGVjdE9iamVjdChoZGMsIGhGb250KTsKKyAgICAgICAgICAgICAgICBURVhUTUVU
UklDIHRtOworICAgICAgICAgICAgICAgIEdldFRleHRNZXRyaWNzKGhkYywgJnRtKTsKKyAgICAg
ICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBoT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBz
aXplID0gdG0udG1Bc2NlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWxldGVPYmpl
Y3QoaEZvbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlICJjb2RlcGFnZSA5MzYi
IGJpdCBoZXJlIGlzIGZyb20gR2Vja287IGFwcGFyZW50bHkgdGhpcyBoZWxwcyBtYWtlCisgICAg
Ly8gZm9udHMgbW9yZSBsZWdpYmxlIGluIFNpbXBsaWZpZWQgQ2hpbmVzZSB3aGVyZSB0aGUgZGVm
YXVsdCBmb250IHNpemUgaXMKKyAgICAvLyB0b28gc21hbGwuCisgICAgLy8KKyAgICAvLyBGSVhN
RTogaHR0cDovL2IvMTExOTg4MyBTaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgInNtYWxsIGNh
cHRpb24iLAorICAgIC8vICJtZW51IiwgYW5kICJzdGF0dXMgYmFyIiBvYmplY3RzLCBJJ20gbm90
IHN1cmUgaG93IG11Y2ggdGhpcyBldmVuCisgICAgLy8gbWF0dGVycy4gUGx1cyB0aGUgR2Vja28g
cGF0Y2ggd2VudCBpbiBiYWNrIGluIDIwMDIsIGFuZCBtYXliZSB0aGlzCisgICAgLy8gaXNuJ3Qg
ZXZlbiByZWxldmFudCBhbnltb3JlLiBXZSBzaG91bGQgaW52ZXN0aWdhdGUgd2hldGhlciB0aGlz
IHNob3VsZAorICAgIC8vIGJlIHJlbW92ZWQsIG9yIHBlcmhhcHMgYnJvYWRlbmVkIHRvIGJlICJh
bnkgQ0pLIGxvY2FsZSIuCisgICAgLy8KKyAgICByZXR1cm4gKChzaXplIDwgMTIuMGYpICYmIChH
ZXRBQ1AoKSA9PSA5MzYpKSA/IDEyLjBmIDogc2l6ZTsKK30KKworLy8gc3RhdGljCit2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCit7CisgICAgLy8gVGhpcyBsb2dpYyBvd2Vz
IG11Y2ggdG8gUmVuZGVyVGhlbWVTYWZhcmkuY3BwLgorICAgIEZvbnREZXNjcmlwdGlvbiogY2Fj
aGVkRGVzYyA9IDA7CisgICAgQXRvbWljU3RyaW5nIGZhY2VOYW1lOworICAgIGZsb2F0IGZvbnRT
aXplID0gMDsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENh
cHRpb246CisgICAgICAgIGNhY2hlZERlc2MgPSAmc21hbGxTeXN0ZW1Gb250OworICAgICAgICBp
ZiAoIXNtYWxsU3lzdGVtRm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7CisgICAgICAgICAgICBOT05D
TElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZt
ZXRyaWNzKTsKKyAgICAgICAgICAgIGZhY2VOYW1lID0gQXRvbWljU3RyaW5nKG1ldHJpY3MubGZT
bUNhcHRpb25Gb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5s
ZkZhY2VOYW1lKSk7CisgICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJp
Y3MubGZTbUNhcHRpb25Gb250KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1ZhbHVlTWVudToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZtZW51Rm9udDsKKyAgICAgICAg
aWYgKCFtZW51Rm9udC5pc0Fic29sdXRlU2l6ZSgpKSB7CisgICAgICAgICAgICBOT05DTElFTlRN
RVRSSUNTIG1ldHJpY3M7CisgICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNz
KTsKKyAgICAgICAgICAgIGZhY2VOYW1lID0gQXRvbWljU3RyaW5nKG1ldHJpY3MubGZNZW51Rm9u
dC5sZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmljcy5sZk1lbnVGb250LmxmRmFjZU5hbWUpKTsKKyAg
ICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZk1lbnVGb250KTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgor
ICAgICAgICBjYWNoZWREZXNjID0gJmxhYmVsRm9udDsKKyAgICAgICAgaWYgKCFsYWJlbEZvbnQu
aXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNz
OworICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7CisgICAgICAgICAg
ICBmYWNlTmFtZSA9IG1ldHJpY3MubGZTdGF0dXNGb250LmxmRmFjZU5hbWU7CisgICAgICAgICAg
ICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3MubGZTdGF0dXNGb250KTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWluaUNvbnRyb2w6
CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVl
V2Via2l0Q29udHJvbDoKKyAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0R1VJRm9udCgpOworICAg
ICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBk
b2VzLgorICAgICAgICBmb250U2l6ZSA9IHNfZGVmYXVsdEZvbnRTaXplIC0gcG9pbnRzVG9QaXhl
bHMoMik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZhY2VOYW1lID0g
ZGVmYXVsdEdVSUZvbnQoKTsKKyAgICAgICAgZm9udFNpemUgPSBzX2RlZmF1bHRGb250U2l6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFjYWNoZWREZXNjKQorICAgICAgICBj
YWNoZWREZXNjID0gJmZvbnREZXNjcmlwdGlvbjsKKworICAgIGlmIChmb250U2l6ZSkgeworICAg
ICAgICBjYWNoZWREZXNjLT5maXJzdEZhbWlseSgpLnNldEZhbWlseShmYWNlTmFtZSk7CisgICAg
ICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgICAgICBjYWNoZWRE
ZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgICAg
ICBjYWNoZWREZXNjLT5zZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKKyAgICAgICAgY2FjaGVk
RGVzYy0+c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOworICAgICAgICBjYWNoZWREZXNjLT5z
ZXRJdGFsaWMoZmFsc2UpOworICAgIH0KKyAgICBmb250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVz
YzsKK30KKworLy8gc3RhdGljCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6
OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udFNpemUpCit7CisgICAgc19kZWZhdWx0Rm9udFNp
emUgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZm9udFNpemUpOworCisgICAgLy8gUmVzZXQgY2FjaGVk
IGZvbnRzLgorICAgIHNtYWxsU3lzdGVtRm9udCA9IG1lbnVGb250ID0gbGFiZWxGb250ID0gRm9u
dERlc2NyaXB0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9u
dFByb3ZpZGVyV2luLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5jcHAJKHJldmlzaW9uIDEzNDI0NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJQcm9n
cmVzcy5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2lu
Y2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpA
QCAtNzAsMjMgKzcxLDYgQEAgc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0
cwogc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXpl
ID0gMzA7CiBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
bldpZHRoID0gMTg7CiAKLS8vIFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgotLy8gLUlFIHVzZXMg
YSBmb250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3Jt
IGNvbnRyb2xzLgotLy8gLUdlY2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBH
ZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSwKLS8vIHdoaWNoIHJldHVybnMgTVMgU2hl
bGwgRGxnKQotLy8gLVNhZmFyaSB1c2VzIEx1Y2lkYSBHcmFuZGUuCi0vLwotLy8gRklYTUU6IFRo
ZSBvbmx5IGNhc2Ugd2hlcmUgd2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBl
bmNvZGluZ3MuCi0vLyBJRSB1c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVy
IGluY29ycmVjdGx5IGF0IGNlcnRhaW4gcGl4ZWwKLS8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywg
Zm9yIG5vdyB3ZSBqdXN0IHVzZSBBcmlhbC4KLWNvbnN0IFN0cmluZyYgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmRlZmF1bHRHVUlGb250KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgZm9udEZhY2UsIChBU0NJSUxpdGVyYWwoIkFyaWFsIikpKTsKLSAgICByZXR1cm4gZm9u
dEZhY2U7Ci19Ci0KLWZsb2F0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpkZWZhdWx0Rm9udFNp
emUgPSAxNi4wOwotCiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEoKQogewogfQpAQCAtMTgzLDI3ICsxNjcsNyBAQCBkb3VibGUgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OmNhcmV0QmxpCiAKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnN5c3Rl
bUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0
CiB7Ci0gICAgZmxvYXQgZm9udFNpemUgPSBkZWZhdWx0Rm9udFNpemU7Ci0KLSAgICBzd2l0Y2gg
KHByb3BJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKLSAgICBjYXNl
IENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250
cm9sOgotICAgICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxlcj8gQmVjYXVzZSB0aGF0J3Mgd2hh
dCBHZWNrbyBkb2VzLiBOb3RlIHRoYXQgd2UKLSAgICAgICAgLy8gYXJlIGFzc3VtaW5nIGEgOTZk
cGkgc2NyZWVuLCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0aGF0IHdlIHVzZSBvbgotICAgICAgICAv
LyBXaW5kb3dzLgotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcy
LjBmOwotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOwot
ICAgICAgICBmb250U2l6ZSAtPSAoMi4wZiAvIHBvaW50c1BlckluY2gpICogcGl4ZWxzUGVySW5j
aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFt
aWx5KCkuc2V0RmFtaWx5KGRlZmF1bHRHVUlGb250KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKGZvbnRTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNv
bHV0ZVNpemUodHJ1ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9u
dERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChG
b250V2VpZ2h0Tm9ybWFsKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsK
KyAgICBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzeXN0ZW1Gb250KHByb3BJZCwg
Zm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjptaW5p
bXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKQEAgLTU3Myw3ICs1Mzcs
NyBAQCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBvcHVwSW50ZXJuCiAvLyBzdGF0aWMK
IHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250U2l6ZShpbnQgZm9u
dFNpemUpCiB7Ci0gICAgZGVmYXVsdEZvbnRTaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZvbnRT
aXplKTsKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzZXREZWZhdWx0Rm9u
dFNpemUoZm9udFNpemUpOwogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNh
cmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCShyZXZpc2lvbiAxMzQy
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDEzICsxNDUsNiBAQCBjbGFzcyBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYSA6IHB1YmxpYyBSCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRGb250
U2l6ZShpbnQpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgU3RyaW5n
JiBkZWZhdWx0R1VJRm9udCgpOwotCi0gICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdp
ZHRoIGZvbnQgc2l6ZS4gIFdlIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IGZvbnQKLSAgICAgICAg
Ly8gc2l6ZSBmb3IgdGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2gg
d2UgdGhlbiBzaHJpbmspIGZvcgotICAgICAgICAvLyBmb3JtIGNvbnRyb2wgZm9udHMuCi0gICAg
ICAgIHN0YXRpYyBmbG9hdCBkZWZhdWx0Rm9udFNpemU7Ci0KICAgICAgICAgdmlydHVhbCBkb3Vi
bGUgY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFs
IGludCBtZW51TGlzdEFycm93UGFkZGluZygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24g
MTM0MjQ2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RTdXBw
b3J0LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKQEAgLTQzLDYgKzQyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lQ2hyb21pdW1Db21tb24uaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNpbmNsdWRlICJUcmFuc3BhcmVuY3lXaW4u
aCIKQEAgLTUyLDEyICs1Miw2IEBACiAvLyBGSVhNRTogVGhpcyBkZXBlbmRlbmN5IHNob3VsZCBl
dmVudHVhbGx5IGJlIHJlbW92ZWQuCiAjaW5jbHVkZSA8c2tpYS9leHQvc2tpYV91dGlsc193aW4u
aD4KIAotI2RlZmluZSBTSVpFT0ZfU1RSVUNUX1dJVEhfU1BFQ0lGSUVEX0xBU1RfTUVNQkVSKHN0
cnVjdE5hbWUsIG1lbWJlcikgXAotICAgIG9mZnNldG9mKHN0cnVjdE5hbWUsIG1lbWJlcikgKyBc
Ci0gICAgKHNpemVvZiBzdGF0aWNfY2FzdDxzdHJ1Y3ROYW1lKj4oMCktPm1lbWJlcikKLSNkZWZp
bmUgTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQSBcCi0gICAgU0laRU9GX1NUUlVDVF9X
SVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihOT05DTElFTlRNRVRSSUNTLCBsZk1lc3NhZ2VGb250
KQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoZSBzdGFuZGFyZCB3aWR0aCBmb3IgdGhl
IG1lbnUgbGlzdCBkcm9wLWRvd24gYnV0dG9uIHdoZW4gcnVuIHVuZGVyCkBAIC0xMzUsMTkgKzEy
OSw2IEBAIGJvb2wgVGhlbWVQYWludGVyOjpzX2hhc0luc3RhbmNlID0gZmFsc2UKIAogfSAvLyBu
YW1lc3BhY2UKIAotc3RhdGljIHZvaWQgZ2V0Tm9uQ2xpZW50TWV0cmljcyhOT05DTElFTlRNRVRS
SUNTKiBtZXRyaWNzKQotewotICAgIHN0YXRpYyBVSU5UIHNpemUgPSAod2luZG93c1ZlcnNpb24o
KSA+PSBXaW5kb3dzVmlzdGEpID8KLSAgICAgICAgc2l6ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpIDog
Tk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9WSVNUQTsKLSAgICBtZXRyaWNzLT5jYlNpemUgPSBz
aXplOwotICAgIGJvb2wgc3VjY2VzcyA9ICEhU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5P
TkNMSUVOVE1FVFJJQ1MsIHNpemUsIG1ldHJpY3MsIDApOwotICAgIEFTU0VSVChzdWNjZXNzKTsK
LX0KLQotc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFsbFN5c3RlbUZvbnQ7Ci1zdGF0aWMgRm9u
dERlc2NyaXB0aW9uIG1lbnVGb250Owotc3RhdGljIEZvbnREZXNjcmlwdGlvbiBsYWJlbEZvbnQ7
Ci0KIC8vIEludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiAgV2UgZG9uJ3QgcHV0IHRo
ZW0gaW4gYW4gYW5vbnltb3VzCiAvLyBuYW1lc3BhY2Ugc28gdGhleSBoYXZlIGVhc2llciBhY2Nl
c3MgdG8gdGhlIFdlYkNvcmUgbmFtZXNwYWNlLgogCkBAIC0xNjYsNTUgKzE0Nyw2IEBAIHN0YXRp
YyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLS8vIFJldHVybiB0aGUgaGVpZ2h0IG9mIHN5c3RlbSBmb250IHxmb250fCBpbiBwaXhlbHMu
ICBXZSB1c2UgdGhpcyBzaXplIGJ5Ci0vLyBkZWZhdWx0IGZvciBzb21lIG5vbi1mb3JtLWNvbnRy
b2wgZWxlbWVudHMuCi1zdGF0aWMgZmxvYXQgc3lzdGVtRm9udFNpemUoY29uc3QgTE9HRk9OVCYg
Zm9udCkKLXsKLSAgICBmbG9hdCBzaXplID0gLWZvbnQubGZIZWlnaHQ7Ci0gICAgaWYgKHNpemUg
PCAwKSB7Ci0gICAgICAgIEhGT05UIGhGb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZmb250KTsK
LSAgICAgICAgaWYgKGhGb250KSB7Ci0gICAgICAgICAgICBIV25kREMgaGRjKDApOyAvLyBXaGF0
IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBEQz8KLSAgICAgICAgICAgIGlmICho
ZGMpIHsKLSAgICAgICAgICAgICAgICBIR0RJT0JKIGhPYmplY3QgPSBTZWxlY3RPYmplY3QoaGRj
LCBoRm9udCk7Ci0gICAgICAgICAgICAgICAgVEVYVE1FVFJJQyB0bTsKLSAgICAgICAgICAgICAg
ICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0bSk7Ci0gICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0
KGhkYywgaE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHRtLnRtQXNjZW50OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgRGVsZXRlT2JqZWN0KGhGb250KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFRoZSAiY29kZXBhZ2UgOTM2IiBiaXQgaGVyZSBpcyBmcm9tIEdlY2tv
OyBhcHBhcmVudGx5IHRoaXMgaGVscHMgbWFrZQotICAgIC8vIGZvbnRzIG1vcmUgbGVnaWJsZSBp
biBTaW1wbGlmaWVkIENoaW5lc2Ugd2hlcmUgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlzCi0gICAg
Ly8gdG9vIHNtYWxsLgotICAgIC8vCi0gICAgLy8gRklYTUU6IGh0dHA6Ly9iLzExMTk4ODMgU2lu
Y2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yICJzbWFsbCBjYXB0aW9uIiwKLSAgICAvLyAibWVudSIs
IGFuZCAic3RhdHVzIGJhciIgb2JqZWN0cywgSSdtIG5vdCBzdXJlIGhvdyBtdWNoIHRoaXMgZXZl
bgotICAgIC8vIG1hdHRlcnMuICBQbHVzIHRoZSBHZWNrbyBwYXRjaCB3ZW50IGluIGJhY2sgaW4g
MjAwMiwgYW5kIG1heWJlIHRoaXMKLSAgICAvLyBpc24ndCBldmVuIHJlbGV2YW50IGFueW1vcmUu
ICBXZSBzaG91bGQgaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIHNob3VsZAotICAgIC8vIGJlIHJl
bW92ZWQsIG9yIHBlcmhhcHMgYnJvYWRlbmVkIHRvIGJlICJhbnkgQ0pLIGxvY2FsZSIuCi0gICAg
Ly8KLSAgICByZXR1cm4gKChzaXplIDwgMTIuMGYpICYmIChHZXRBQ1AoKSA9PSA5MzYpKSA/IDEy
LjBmIDogc2l6ZTsKLX0KLQotLy8gQ29udmVydHMgfHBvaW50c3wgdG8gcGl4ZWxzLiAgT25lIHBv
aW50IGlzIDEvNzIgb2YgYW4gaW5jaC4KLXN0YXRpYyBmbG9hdCBwb2ludHNUb1BpeGVscyhmbG9h
dCBwb2ludHMpCi17Ci0gICAgc3RhdGljIGZsb2F0IHBpeGVsc1BlckluY2ggPSAwLjBmOwotICAg
IGlmICghcGl4ZWxzUGVySW5jaCkgewotICAgICAgICBIV25kREMgaGRjKDApOyAvLyBXaGF0IGFi
b3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBEQz8KLSAgICAgICAgaWYgKGhkYykgLy8g
Q2FuIHRoaXMgZXZlciBhY3R1YWxseSBiZSBOVUxMPwotICAgICAgICAgICAgcGl4ZWxzUGVySW5j
aCA9IEdldERldmljZUNhcHMoaGRjLCBMT0dQSVhFTFNZKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgcmV0dXJuIHBvaW50cyAvIHBvaW50c1Bl
ckluY2ggKiBwaXhlbHNQZXJJbmNoOwotfQotCiBzdGF0aWMgZG91YmxlIHF1ZXJ5U3lzdGVtQmxp
bmtJbnRlcnZhbChkb3VibGUgZGVmYXVsdEludGVydmFsKQogewogICAgIFVJTlQgYmxpbmtUaW1l
ID0gR2V0Q2FyZXRCbGlua1RpbWUoKTsKQEAgLTI4NSw2NyArMjE3LDYgQEAgQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbgogICAgIHJldHVybiBDb2xvcigweGZmLCAweGZm
LCAweDk2KTsgLy8gWWVsbG93LgogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5
c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNv
bnN0Ci17Ci0gICAgLy8gVGhpcyBsb2dpYyBvd2VzIG11Y2ggdG8gUmVuZGVyVGhlbWVTYWZhcmku
Y3BwLgotICAgIEZvbnREZXNjcmlwdGlvbiogY2FjaGVkRGVzYyA9IDA7Ci0gICAgQXRvbWljU3Ry
aW5nIGZhY2VOYW1lOwotICAgIGZsb2F0IGZvbnRTaXplID0gMDsKLSAgICBzd2l0Y2ggKHByb3BJ
ZCkgewotICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHRpb246Ci0gICAgICAgIGNhY2hlZERlc2Mg
PSAmc21hbGxTeXN0ZW1Gb250OwotICAgICAgICBpZiAoIXNtYWxsU3lzdGVtRm9udC5pc0Fic29s
dXRlU2l6ZSgpKSB7Ci0gICAgICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7Ci0gICAg
ICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNzKTsKLSAgICAgICAgICAgIGZhY2VO
YW1lID0gQXRvbWljU3RyaW5nKG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUsIHdj
c2xlbihtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lKSk7Ci0gICAgICAgICAgICBm
b250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3MubGZTbUNhcHRpb25Gb250KTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWVudToKLSAgICAgICAgY2Fj
aGVkRGVzYyA9ICZtZW51Rm9udDsKLSAgICAgICAgaWYgKCFtZW51Rm9udC5pc0Fic29sdXRlU2l6
ZSgpKSB7Ci0gICAgICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7Ci0gICAgICAgICAg
ICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNzKTsKLSAgICAgICAgICAgIGZhY2VOYW1lID0g
QXRvbWljU3RyaW5nKG1ldHJpY3MubGZNZW51Rm9udC5sZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmlj
cy5sZk1lbnVGb250LmxmRmFjZU5hbWUpKTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVt
Rm9udFNpemUobWV0cmljcy5sZk1lbnVGb250KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgotICAgICAgICBjYWNoZWREZXNjID0gJmxhYmVs
Rm9udDsKLSAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgewotICAgICAg
ICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwotICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50
TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9IG1ldHJpY3MubGZTdGF0
dXNGb250LmxmRmFjZU5hbWU7Ci0gICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXpl
KG1ldHJpY3MubGZTdGF0dXNGb250KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1ZhbHVlV2Via2l0TWluaUNvbnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNt
YWxsQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q29udHJvbDoKLSAgICAgICAgZmFj
ZU5hbWUgPSBkZWZhdWx0R1VJRm9udCgpOwotICAgICAgICAvLyBXaHkgMiBwb2ludHMgc21hbGxl
cj8gIEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9lcy4KLSAgICAgICAgZm9udFNpemUgPSBk
ZWZhdWx0Rm9udFNpemUgLSBwb2ludHNUb1BpeGVscygyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0R1VJRm9udCgpOwotICAgICAgICBm
b250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKCFjYWNoZWREZXNjKQotICAgICAgICBjYWNoZWREZXNjID0gJmZvbnREZXNjcmlwdGlvbjsK
LQotICAgIGlmIChmb250U2l6ZSkgewotICAgICAgICBjYWNoZWREZXNjLT5maXJzdEZhbWlseSgp
LnNldEZhbWlseShmYWNlTmFtZSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVT
aXplKHRydWUpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNj
cmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRTcGVjaWZpZWRTaXpl
KGZvbnRTaXplKTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0V2VpZ2h0KEZvbnRXZWlnaHROb3Jt
YWwpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJdGFsaWMoZmFsc2UpOwotICAgIH0KLSAgICBm
b250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKLX0KLQogLy8gTWFwIGEgQ1NTVmFsdWUqIHN5
c3RlbSBjb2xvciB0byBhbiBpbmRleCB1bmRlcnN0b29kIGJ5IEdldFN5c0NvbG9yKCkuCiBzdGF0
aWMgaW50IGNzc1ZhbHVlSWRUb1N5c0NvbG9ySW5kZXgoaW50IGNzc1ZhbHVlSWQpCiB7CkBAIC01
MzYsMTUgKzQwNyw2IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZW51TGkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIHN0YXRpYwotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQotewotICAgIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUoZm9udFNpemUpOwotCi0gICAgLy8g
UmVzZXQgY2FjaGVkIGZvbnRzLgotICAgIHNtYWxsU3lzdGVtRm9udCA9IG1lbnVGb250ID0gbGFi
ZWxGb250ID0gRm9udERlc2NyaXB0aW9uKCk7Ci19Ci0KIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0CiB7CiAgICAgLy8gVGhp
cyBpbnZvbHZlcyBhIHN5c3RlbSBjYWxsLCBzbyB3ZSBjYWNoZSB0aGUgcmVzdWx0LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5o
CShyZXZpc2lvbiAxMzQyNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
SW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKIAotICAgICAgICAvLyBT
eXN0ZW0gZm9udHMuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQs
IEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNv
bG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdDsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5U
KQpAQCAtODYsMTAgKzg0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBlbnRp
cmUgbWVudWxpc3QuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICAvLyBP
dmVycmlkZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYSdzIHNldERlZmF1bHRGb250U2l6ZSBtZXRo
b2QgdG8gYWxzbyByZXNldCB0aGUgbG9jYWwgZm9udCBwcm9wZXJ0eSBjYWNoZXMuCi0gICAgICAg
IC8vIFNlZSBjb21tZW50IGluIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9u
dFNpemUoKSByZWdhcmRpbmcgdWdsaW5lc3Mgb2YgdGhpcyBoYWNrLgotICAgICAgICBzdGF0aWMg
dm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174165</attachid>
            <date>2012-11-14 08:26:10 -0800</date>
            <delta_ts>2012-11-14 09:58:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101949-20121114082409.patch</filename>
            <type>text/plain</type>
            <size>32936</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTExLTE0ICBTY290dCBW
aW9sZXQgIDxza3lAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVmYWN0b3Ig
dGhlbWUgZm9udCBsb29rdXAgaW50byBhIGZhY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTk0OQorCisgICAgICAgIFJldmlld2VkIGJ5IFRv
bnkgQ2hhbmcuCisKKyAgICAgICAgVGhpcyB3aWxsIHVsdGltYXRlbHkgYWxsb3cgdXMgdG8gdXNl
IHdoYXQgaXMgY3VycmVudGx5IGluIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCBvbiB3aW5kb3dz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUmVmYWN0b3Jpbmcgb25seS4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyOjpkZWZhdWx0R1VJRm9udCk6IE1vdmVkIGludG8gUmVuZGVyVGhlbWVG
b250UHJvdmlkZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250
UHJvdmlkZXIuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyKTogVGhpcyBpcyB0aGUgZm9u
dCByZWxhdGVkIG1ldGhvZHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXJMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzZXREZWZhdWx0
Rm9udFNpemUpOiBXaGF0IHdhcyBpbiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0RGVmYXVs
dEZvbnRTaXplLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlcjo6c3lzdGVtRm9udCk6IFdoYXQgd2FzIGluIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpz
eXN0ZW1Gb250LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50c1RvUGl4ZWxzKTogTW92ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtV2luLgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xpZW50TWV0cmljcyk6IE1vdmVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnRTaXplKTogTW92
ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udCk6IE1vdmVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZSk6IE1vdmVkIGZyb20gUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhKTogTW92ZWQgaW50byBSZW5kZXJUaGVtZUZvbnRQcm92aWRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250KTogQ2Fs
bHMgdG8gUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUpOiBDYWxscyB0byBS
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5oOgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEp
OiBNb3ZlcyBkZWZhdWx0Rm9udFNpemUgaW50byBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3Zp
ZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDogTW92
ZXMgZm9udCBjb2RlIGludG8gUmVuZGVyVGhlbWVGb250UHJvdmlkZXJXaW4uCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oOiBS
ZW1vdmVkIG92ZXJyaWRlbiBtZXRob2RzIG5vdyBoYW5kbGVkIGJ5IFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bVdpbik6CisKIDIwMTItMTEtMTQg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogIlJldmVhbCBpbiBFbGVtZW50IFBhbmVsIiBkb2Vzbid0IHdvcmsgaWYgRWxlbWVu
dHMgcGFuZWwgaGFzbid0IGJlZW4gb3BlbmVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biAxMzQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTM0NTMsNiArMzQ1MywxMCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtQW5kcm9pZC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtQ29tbW9uLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyV2luLmNwcCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gMTM0NjA5KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjUsNyArMTk2NSw4IEBA
CiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0b3JlIHRoZXNlIHBhdHRlcm5z
IGluIGEgdmFyaWFibGUuCiAgICAgICAgIFsnZXhjbHVkZScsICcoY2Fpcm98Y2F8Y2Z8Y2d8Y3Vy
bHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVu
dHlwZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdp
bmNlfHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8
Q0d8Q3VybHxHdGt8SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8
U291cHxTeW1iaWFufFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykkJ10sCi0KKyAgICAgICAgIyBQ
cmV2aW91cyBydWxlIGV4Y2x1ZGVzIHRoaW5ncyBsaWtlIENocm9taXVtRm9vV2luLCBpbmNsdWRl
IHRob3NlLgorICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nLy4qQ2hyb21pdW0uKlxcLihj
cHB8bW0/KSQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwuY3BwJCddLAogICAg
ICAgXSwKICAgICAgICdjb25kaXRpb25zJzogWwpAQCAtMTk4Myw2ICsxOTg0LDkgQEAKICAgICAg
ICAgICAgICMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgaXMgbm90IHVzZWQgb24gbWFjIHNpbmNl
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWMKICAgICAgICAgICAgICMgZG9lcyBub3QgcmVmZXJlbmNl
IHRoZSBTa2lhIGNvZGUgdGhhdCBpcyB1c2VkIGJ5IFdpbmRvd3MsIExpbnV4IGFuZCBBbmRyb2lk
LgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAgICMgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlciBpcyB1c2VkIGJ5IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLgorICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyXFwuY3Bw
J10sCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXJcXC5oJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJt
YWMiCiAgICAgICAgICAgJ3NvdXJjZXMvJzogW1snZXhjbHVkZScsICdNYWNcXC4oY3BwfG1tPykk
J11dCkBAIC0yMDA4LDYgKzIwMTIsNyBAQAogICAgICAgICB9XSwKICAgICAgICAgWydPUz09ImFu
ZHJvaWQiJywgewogICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4XFwuY3Bw
JCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJhbmRy
b2lkIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oIgorCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRo
IGZvbnQgc2l6ZS4gV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAorLy8gc2l6ZSBmb3Ig
dGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJp
bmspIGZvcgorLy8gZm9ybSBjb250cm9sIGZvbnRzLgorLy8gc3RhdGljCitmbG9hdCBSZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzX2RlZmF1bHRGb250U2l6ZSA9IDE2LjA7CisKKy8v
IFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgorLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRo
ZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgorLy8gLUdl
Y2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZB
VUxUX0dVSV9GT05UKSwKKy8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQorLy8gLVNhZmFy
aSB1c2VzIEx1Y2lkYSBHcmFuZGUuCisvLworLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUg
d2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCisvLyBJRSB1
c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5IGF0IGNl
cnRhaW4gcGl4ZWwKKy8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVz
ZSBBcmlhbC4KK2NvbnN0IFN0cmluZyYgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6
ZGVmYXVsdEdVSUZvbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBmb250
RmFjZSwgKEFTQ0lJTGl0ZXJhbCgiQXJpYWwiKSkpOworICAgIHJldHVybiBmb250RmFjZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlk
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtRm9udFByb3ZpZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyX2gKKyNkZWZp
bmUgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcl9oCisKK25hbWVzcGFjZSBXVEYgewor
Y2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnREZXNj
cmlwdGlvbjsKKworY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mKTsKKyAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVsdEdVSUZvbnQoKTsKKwor
ICAgIHN0YXRpYyBmbG9hdCBzX2RlZmF1bHRGb250U2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJfaAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyTGludXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyLmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3Rh
dGljCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1bHRGb250
U2l6ZShpbnQgZm9udFNpemUpCit7CisgICAgc19kZWZhdWx0Rm9udFNpemUgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oZm9udFNpemUpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICBmbG9hdCBmb250U2l6ZSA9IHNfZGVmYXVsdEZvbnRT
aXplOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWlu
aUNvbnRyb2w6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICBjYXNl
IENTU1ZhbHVlV2Via2l0Q29udHJvbDoKKyAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/
IEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9lcy4gTm90ZSB0aGF0IHdlCisgICAgICAgIC8v
IGFyZSBhc3N1bWluZyBhIDk2ZHBpIHNjcmVlbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGhhdCB3
ZSB1c2Ugb24KKyAgICAgICAgLy8gV2luZG93cy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBpeGVs
c1BlckluY2ggPSA5Ni4wZjsKKyAgICAgICAgZm9udFNpemUgLT0gKDIuMGYgLyBwb2ludHNQZXJJ
bmNoKSAqIHBpeGVsc1BlckluY2g7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9udCgpKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldEl0YWxpYyhmYWxzZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyTGludXguY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRl
cldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVy
LmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCisjaW5jbHVkZSAiSFduZERDLmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgor
CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjZGVmaW5lIFNJWkVPRl9TVFJVQ1RfV0lUSF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoc3RydWN0
TmFtZSwgbWVtYmVyKSBcCisgICAgb2Zmc2V0b2Yoc3RydWN0TmFtZSwgbWVtYmVyKSArIFwKKyAg
ICAoc2l6ZW9mIHN0YXRpY19jYXN0PHN0cnVjdE5hbWUqPigwKS0+bWVtYmVyKQorI2RlZmluZSBO
T05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBIFwKKyAgICBTSVpFT0ZfU1RSVUNUX1dJVEhf
U1BFQ0lGSUVEX0xBU1RfTUVNQkVSKE5PTkNMSUVOVE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFsbFN5c3Rl
bUZvbnQ7CitzdGF0aWMgRm9udERlc2NyaXB0aW9uIG1lbnVGb250Oworc3RhdGljIEZvbnREZXNj
cmlwdGlvbiBsYWJlbEZvbnQ7CisKKy8vIENvbnZlcnRzIHxwb2ludHN8IHRvIHBpeGVscy4gT25l
IHBvaW50IGlzIDEvNzIgb2YgYW4gaW5jaC4KK3N0YXRpYyBmbG9hdCBwb2ludHNUb1BpeGVscyhm
bG9hdCBwb2ludHMpCit7CisgICAgc3RhdGljIGZsb2F0IHBpeGVsc1BlckluY2ggPSAwLjBmOwor
ICAgIGlmICghcGl4ZWxzUGVySW5jaCkgeworICAgICAgICBIV25kREMgaGRjKDApOyAvLyBXaGF0
IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBEQz8KKyAgICAgICAgaWYgKGhkYykg
Ly8gQ2FuIHRoaXMgZXZlciBhY3R1YWxseSBiZSAwPworICAgICAgICAgICAgcGl4ZWxzUGVySW5j
aCA9IEdldERldmljZUNhcHMoaGRjLCBMT0dQSVhFTFNZKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcGl4ZWxzUGVySW5jaCA9IDk2LjBmOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7CisgICAgcmV0dXJuIHBvaW50cyAvIHBvaW50c1Bl
ckluY2ggKiBwaXhlbHNQZXJJbmNoOworfQorCitzdGF0aWMgdm9pZCBnZXROb25DbGllbnRNZXRy
aWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpCit7CisgICAgc3RhdGljIFVJTlQgc2l6ZSA9
ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkgPworICAgICAgICBzaXplb2YoTk9O
Q0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBOworICAgIG1l
dHJpY3MtPmNiU2l6ZSA9IHNpemU7CisgICAgYm9vbCBzdWNjZXNzID0gISFTeXN0ZW1QYXJhbWV0
ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZSwgbWV0cmljcywgMCk7CisgICAg
QVNTRVJUKHN1Y2Nlc3MpOworfQorCisvLyBSZXR1cm4gdGhlIGhlaWdodCBvZiBzeXN0ZW0gZm9u
dCB8Zm9udHwgaW4gcGl4ZWxzLiBXZSB1c2UgdGhpcyBzaXplIGJ5CisvLyBkZWZhdWx0IGZvciBz
b21lIG5vbi1mb3JtLWNvbnRyb2wgZWxlbWVudHMuCitzdGF0aWMgZmxvYXQgc3lzdGVtRm9udFNp
emUoY29uc3QgTE9HRk9OVCYgZm9udCkKK3sKKyAgICBmbG9hdCBzaXplID0gLWZvbnQubGZIZWln
aHQ7CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIEhGT05UIGhGb250ID0gQ3JlYXRlRm9u
dEluZGlyZWN0KCZmb250KTsKKyAgICAgICAgaWYgKGhGb250KSB7CisgICAgICAgICAgICBIV25k
REMgaGRjKDApOyAvLyBXaGF0IGFib3V0IHByaW50aW5nPyBJcyB0aGlzIHRoZSByaWdodCBEQz8K
KyAgICAgICAgICAgIGlmIChoZGMpIHsKKyAgICAgICAgICAgICAgICBIR0RJT0JKIGhPYmplY3Qg
PSBTZWxlY3RPYmplY3QoaGRjLCBoRm9udCk7CisgICAgICAgICAgICAgICAgVEVYVE1FVFJJQyB0
bTsKKyAgICAgICAgICAgICAgICBHZXRUZXh0TWV0cmljcyhoZGMsICZ0bSk7CisgICAgICAgICAg
ICAgICAgU2VsZWN0T2JqZWN0KGhkYywgaE9iamVjdCk7CisgICAgICAgICAgICAgICAgc2l6ZSA9
IHRtLnRtQXNjZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVsZXRlT2JqZWN0KGhG
b250KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSAiY29kZXBhZ2UgOTM2IiBiaXQg
aGVyZSBpcyBmcm9tIEdlY2tvOyBhcHBhcmVudGx5IHRoaXMgaGVscHMgbWFrZQorICAgIC8vIGZv
bnRzIG1vcmUgbGVnaWJsZSBpbiBTaW1wbGlmaWVkIENoaW5lc2Ugd2hlcmUgdGhlIGRlZmF1bHQg
Zm9udCBzaXplIGlzCisgICAgLy8gdG9vIHNtYWxsLgorICAgIC8vCisgICAgLy8gRklYTUU6IGh0
dHA6Ly9iLzExMTk4ODMgU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yICJzbWFsbCBjYXB0aW9u
IiwKKyAgICAvLyAibWVudSIsIGFuZCAic3RhdHVzIGJhciIgb2JqZWN0cywgSSdtIG5vdCBzdXJl
IGhvdyBtdWNoIHRoaXMgZXZlbgorICAgIC8vIG1hdHRlcnMuIFBsdXMgdGhlIEdlY2tvIHBhdGNo
IHdlbnQgaW4gYmFjayBpbiAyMDAyLCBhbmQgbWF5YmUgdGhpcworICAgIC8vIGlzbid0IGV2ZW4g
cmVsZXZhbnQgYW55bW9yZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBzaG91
bGQKKyAgICAvLyBiZSByZW1vdmVkLCBvciBwZXJoYXBzIGJyb2FkZW5lZCB0byBiZSAiYW55IENK
SyBsb2NhbGUiLgorICAgIC8vCisgICAgcmV0dXJuICgoc2l6ZSA8IDEyLjBmKSAmJiAoR2V0QUNQ
KCkgPT0gOTM2KSkgPyAxMi4wZiA6IHNpemU7Cit9CisKKy8vIHN0YXRpYwordm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQoreworICAgIC8vIFRoaXMgbG9naWMgb3dlcyBtdWNo
IHRvIFJlbmRlclRoZW1lU2FmYXJpLmNwcC4KKyAgICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERl
c2MgPSAwOworICAgIEF0b21pY1N0cmluZyBmYWNlTmFtZTsKKyAgICBmbG9hdCBmb250U2l6ZSA9
IDA7CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0aW9u
OgorICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxsU3lzdGVtRm9udDsKKyAgICAgICAgaWYgKCFz
bWFsbFN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAgTk9OQ0xJRU5U
TUVUUklDUyBtZXRyaWNzOworICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmlj
cyk7CisgICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmU21DYXB0
aW9uRm9udC5sZkZhY2VOYW1lLCB3Y3NsZW4obWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNl
TmFtZSkpOworICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxm
U21DYXB0aW9uRm9udCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NW
YWx1ZU1lbnU6CisgICAgICAgIGNhY2hlZERlc2MgPSAmbWVudUZvbnQ7CisgICAgICAgIGlmICgh
bWVudUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklD
UyBtZXRyaWNzOworICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7Cisg
ICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmTWVudUZvbnQubGZG
YWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZNZW51Rm9udC5sZkZhY2VOYW1lKSk7CisgICAgICAg
ICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJpY3MubGZNZW51Rm9udCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVN0YXR1c0JhcjoKKyAgICAg
ICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZvbnQ7CisgICAgICAgIGlmICghbGFiZWxGb250LmlzQWJz
b2x1dGVTaXplKCkpIHsKKyAgICAgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKKyAg
ICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3MpOworICAgICAgICAgICAgZmFj
ZU5hbWUgPSBtZXRyaWNzLmxmU3RhdHVzRm9udC5sZkZhY2VOYW1lOworICAgICAgICAgICAgZm9u
dFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmU3RhdHVzRm9udCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgorICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dENvbnRyb2w6CisgICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoKTsKKyAgICAgICAg
Ly8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/IEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9lcy4K
KyAgICAgICAgZm9udFNpemUgPSBzX2RlZmF1bHRGb250U2l6ZSAtIHBvaW50c1RvUGl4ZWxzKDIp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmYWNlTmFtZSA9IGRlZmF1
bHRHVUlGb250KCk7CisgICAgICAgIGZvbnRTaXplID0gc19kZWZhdWx0Rm9udFNpemU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghY2FjaGVkRGVzYykKKyAgICAgICAgY2FjaGVk
RGVzYyA9ICZmb250RGVzY3JpcHRpb247CisKKyAgICBpZiAoZm9udFNpemUpIHsKKyAgICAgICAg
Y2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZmFjZU5hbWUpOworICAgICAgICBj
YWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+
c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICAgICAgY2Fj
aGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CisgICAgICAgIGNhY2hlZERlc2Mt
PnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRh
bGljKGZhbHNlKTsKKyAgICB9CisgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7Cit9
CisKKy8vIHN0YXRpYwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzZXRE
ZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXplKQoreworICAgIHNfZGVmYXVsdEZvbnRTaXplID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGZvbnRTaXplKTsKKworICAgIC8vIFJlc2V0IGNhY2hlZCBmb250
cy4KKyAgICBzbWFsbFN5c3RlbUZvbnQgPSBtZW51Rm9udCA9IGxhYmVsRm9udCA9IEZvbnREZXNj
cmlwdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlcldpbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEuY3BwCShyZXZpc2lvbiAxMzQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3Mu
aCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRl
ICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTcw
LDIzICs3MSw2IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHMKIHN0
YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMw
Owogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0
aCA9IDE4OwogCi0vLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KLS8vIC1JRSB1c2VzIGEgZm9u
dCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3IgZm9ybSBjb250
cm9scy4KLS8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0U3Rv
Y2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCi0vLyB3aGljaCByZXR1cm5zIE1TIFNoZWxsIERs
ZykKLS8vIC1TYWZhcmkgdXNlcyBMdWNpZGEgR3JhbmRlLgotLy8KLS8vIEZJWE1FOiBUaGUgb25s
eSBjYXNlIHdoZXJlIHdlIGtub3cgd2UgZG9uJ3QgbWF0Y2ggSUUgaXMgZm9yIEFOU0kgZW5jb2Rp
bmdzLgotLy8gSUUgdXNlcyBNUyBTaGVsbCBEbGcgdGhlcmUsIHdoaWNoIHdlIHJlbmRlciBpbmNv
cnJlY3RseSBhdCBjZXJ0YWluIHBpeGVsCi0vLyBzaXplcyAoZS5nLiAxNXB4KS4gU28sIGZvciBu
b3cgd2UganVzdCB1c2UgQXJpYWwuCi1jb25zdCBTdHJpbmcmIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpkZWZhdWx0R1VJRm9udCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IGZvbnRGYWNlLCAoQVNDSUlMaXRlcmFsKCJBcmlhbCIpKSk7Ci0gICAgcmV0dXJuIGZvbnRGYWNl
OwotfQotCi1mbG9hdCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZGVmYXVsdEZvbnRTaXplID0g
MTYuMDsKLQogUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
KCkKIHsKIH0KQEAgLTE4MywyNyArMTY3LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpjYXJldEJsaQogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250
KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewot
ICAgIGZsb2F0IGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotCi0gICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWluaUNvbnRyb2w6Ci0gICAgY2FzZSBDU1NW
YWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q29udHJvbDoK
LSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/IEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vj
a28gZG9lcy4gTm90ZSB0aGF0IHdlCi0gICAgICAgIC8vIGFyZSBhc3N1bWluZyBhIDk2ZHBpIHNj
cmVlbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGhhdCB3ZSB1c2Ugb24KLSAgICAgICAgLy8gV2lu
ZG93cy4KLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBvaW50c1BlckluY2ggPSA3Mi4wZjsK
LSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKLSAgICAg
ICAgZm9udFNpemUgLT0gKDIuMGYgLyBwb2ludHNQZXJJbmNoKSAqIHBpeGVsc1BlckluY2g7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgp
LnNldEZhbWlseShkZWZhdWx0R1VJRm9udCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3Bl
Y2lmaWVkU2l6ZShmb250U2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVT
aXplKHRydWUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNj
cmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdl
aWdodE5vcm1hbCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhmYWxzZSk7CisgICAg
UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udChwcm9wSWQsIGZvbnRE
ZXNjcmlwdGlvbik7CiB9CiAKIGludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6bWluaW11bU1l
bnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CkBAIC01NzMsNyArNTM3LDcgQEAg
aW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwb3B1cEludGVybgogLy8gc3RhdGljCiB2b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRTaXpl
KQogewotICAgIGRlZmF1bHRGb250U2l6ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihmb250U2l6ZSk7
CisgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c2V0RGVmYXVsdEZvbnRTaXpl
KGZvbnRTaXplKTsKIH0KIAogZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJldEJs
aW5rSW50ZXJ2YWxJbnRlcm5hbCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaAkocmV2aXNpb24gMTM0NjA5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NSwxMyArMTQ1LDYgQEAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEgOiBwdWJsaWMgUgogICAgICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUo
aW50KTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVm
YXVsdEdVSUZvbnQoKTsKLQotICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YXJpYWJsZS13aWR0aCBm
b250IHNpemUuICBXZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBmb250Ci0gICAgICAgIC8vIHNp
emUgZm9yIHRoZSAic3lzdGVtIGZvbnQiLCBhbmQgYXMgYSBiYXNlIHNpemUgKHdoaWNoIHdlIHRo
ZW4gc2hyaW5rKSBmb3IKLSAgICAgICAgLy8gZm9ybSBjb250cm9sIGZvbnRzLgotICAgICAgICBz
dGF0aWMgZmxvYXQgZGVmYXVsdEZvbnRTaXplOwotCiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGNh
cmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBpbnQg
bWVudUxpc3RBcnJvd1BhZGRpbmcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDEzNDYw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9ydC5o
IgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZv
LmgiCkBAIC00Myw2ICs0Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyUHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUaGVtZUNocm9taXVtQ29tbW9uLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
ICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5V2luLmgiCkBA
IC01MiwxMiArNTIsNiBAQAogLy8gRklYTUU6IFRoaXMgZGVwZW5kZW5jeSBzaG91bGQgZXZlbnR1
YWxseSBiZSByZW1vdmVkLgogI2luY2x1ZGUgPHNraWEvZXh0L3NraWFfdXRpbHNfd2luLmg+CiAK
LSNkZWZpbmUgU0laRU9GX1NUUlVDVF9XSVRIX1NQRUNJRklFRF9MQVNUX01FTUJFUihzdHJ1Y3RO
YW1lLCBtZW1iZXIpIFwKLSAgICBvZmZzZXRvZihzdHJ1Y3ROYW1lLCBtZW1iZXIpICsgXAotICAg
IChzaXplb2Ygc3RhdGljX2Nhc3Q8c3RydWN0TmFtZSo+KDApLT5tZW1iZXIpCi0jZGVmaW5lIE5P
TkNMSUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEEgXAotICAgIFNJWkVPRl9TVFJVQ1RfV0lUSF9T
UEVDSUZJRURfTEFTVF9NRU1CRVIoTk9OQ0xJRU5UTUVUUklDUywgbGZNZXNzYWdlRm9udCkKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGUgc3RhbmRhcmQgd2lkdGggZm9yIHRoZSBtZW51
IGxpc3QgZHJvcC1kb3duIGJ1dHRvbiB3aGVuIHJ1biB1bmRlcgpAQCAtMTM1LDE5ICsxMjksNiBA
QCBib29sIFRoZW1lUGFpbnRlcjo6c19oYXNJbnN0YW5jZSA9IGZhbHNlCiAKIH0gLy8gbmFtZXNw
YWNlCiAKLXN0YXRpYyB2b2lkIGdldE5vbkNsaWVudE1ldHJpY3MoTk9OQ0xJRU5UTUVUUklDUyog
bWV0cmljcykKLXsKLSAgICBzdGF0aWMgVUlOVCBzaXplID0gKHdpbmRvd3NWZXJzaW9uKCkgPj0g
V2luZG93c1Zpc3RhKSA/Ci0gICAgICAgIHNpemVvZihOT05DTElFTlRNRVRSSUNTKSA6IE5PTkNM
SUVOVE1FVFJJQ1NfU0laRV9QUkVfVklTVEE7Ci0gICAgbWV0cmljcy0+Y2JTaXplID0gc2l6ZTsK
LSAgICBib29sIHN1Y2Nlc3MgPSAhIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElF
TlRNRVRSSUNTLCBzaXplLCBtZXRyaWNzLCAwKTsKLSAgICBBU1NFUlQoc3VjY2Vzcyk7Ci19Ci0K
LXN0YXRpYyBGb250RGVzY3JpcHRpb24gc21hbGxTeXN0ZW1Gb250Owotc3RhdGljIEZvbnREZXNj
cmlwdGlvbiBtZW51Rm9udDsKLXN0YXRpYyBGb250RGVzY3JpcHRpb24gbGFiZWxGb250OwotCiAv
LyBJbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gIFdlIGRvbid0IHB1dCB0aGVtIGlu
IGFuIGFub255bW91cwogLy8gbmFtZXNwYWNlIHNvIHRoZXkgaGF2ZSBlYXNpZXIgYWNjZXNzIHRv
IHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4KIApAQCAtMTY2LDU1ICsxNDcsNiBAQCBzdGF0aWMgYm9v
bCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0v
LyBSZXR1cm4gdGhlIGhlaWdodCBvZiBzeXN0ZW0gZm9udCB8Zm9udHwgaW4gcGl4ZWxzLiAgV2Ug
dXNlIHRoaXMgc2l6ZSBieQotLy8gZGVmYXVsdCBmb3Igc29tZSBub24tZm9ybS1jb250cm9sIGVs
ZW1lbnRzLgotc3RhdGljIGZsb2F0IHN5c3RlbUZvbnRTaXplKGNvbnN0IExPR0ZPTlQmIGZvbnQp
Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IC1mb250LmxmSGVpZ2h0OwotICAgIGlmIChzaXplIDwgMCkg
ewotICAgICAgICBIRk9OVCBoRm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmZm9udCk7Ci0gICAg
ICAgIGlmIChoRm9udCkgewotICAgICAgICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBhYm91
dCBwcmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/Ci0gICAgICAgICAgICBpZiAoaGRjKSB7
Ci0gICAgICAgICAgICAgICAgSEdESU9CSiBoT2JqZWN0ID0gU2VsZWN0T2JqZWN0KGhkYywgaEZv
bnQpOwotICAgICAgICAgICAgICAgIFRFWFRNRVRSSUMgdG07Ci0gICAgICAgICAgICAgICAgR2V0
VGV4dE1ldHJpY3MoaGRjLCAmdG0pOwotICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdChoZGMs
IGhPYmplY3QpOwotICAgICAgICAgICAgICAgIHNpemUgPSB0bS50bUFzY2VudDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIERlbGV0ZU9iamVjdChoRm9udCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBUaGUgImNvZGVwYWdlIDkzNiIgYml0IGhlcmUgaXMgZnJvbSBHZWNrbzsgYXBw
YXJlbnRseSB0aGlzIGhlbHBzIG1ha2UKLSAgICAvLyBmb250cyBtb3JlIGxlZ2libGUgaW4gU2lt
cGxpZmllZCBDaGluZXNlIHdoZXJlIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpcwotICAgIC8vIHRv
byBzbWFsbC4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBodHRwOi8vYi8xMTE5ODgzIFNpbmNlIHRo
aXMgaXMgb25seSB1c2VkIGZvciAic21hbGwgY2FwdGlvbiIsCi0gICAgLy8gIm1lbnUiLCBhbmQg
InN0YXR1cyBiYXIiIG9iamVjdHMsIEknbSBub3Qgc3VyZSBob3cgbXVjaCB0aGlzIGV2ZW4KLSAg
ICAvLyBtYXR0ZXJzLiAgUGx1cyB0aGUgR2Vja28gcGF0Y2ggd2VudCBpbiBiYWNrIGluIDIwMDIs
IGFuZCBtYXliZSB0aGlzCi0gICAgLy8gaXNuJ3QgZXZlbiByZWxldmFudCBhbnltb3JlLiAgV2Ug
c2hvdWxkIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBzaG91bGQKLSAgICAvLyBiZSByZW1vdmVk
LCBvciBwZXJoYXBzIGJyb2FkZW5lZCB0byBiZSAiYW55IENKSyBsb2NhbGUiLgotICAgIC8vCi0g
ICAgcmV0dXJuICgoc2l6ZSA8IDEyLjBmKSAmJiAoR2V0QUNQKCkgPT0gOTM2KSkgPyAxMi4wZiA6
IHNpemU7Ci19Ci0KLS8vIENvbnZlcnRzIHxwb2ludHN8IHRvIHBpeGVscy4gIE9uZSBwb2ludCBp
cyAxLzcyIG9mIGFuIGluY2guCi1zdGF0aWMgZmxvYXQgcG9pbnRzVG9QaXhlbHMoZmxvYXQgcG9p
bnRzKQotewotICAgIHN0YXRpYyBmbG9hdCBwaXhlbHNQZXJJbmNoID0gMC4wZjsKLSAgICBpZiAo
IXBpeGVsc1BlckluY2gpIHsKLSAgICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBhYm91dCBw
cmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/Ci0gICAgICAgIGlmIChoZGMpIC8vIENhbiB0
aGlzIGV2ZXIgYWN0dWFsbHkgYmUgTlVMTD8KLSAgICAgICAgICAgIHBpeGVsc1BlckluY2ggPSBH
ZXREZXZpY2VDYXBzKGhkYywgTE9HUElYRUxTWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQg
cG9pbnRzUGVySW5jaCA9IDcyLjBmOwotICAgIHJldHVybiBwb2ludHMgLyBwb2ludHNQZXJJbmNo
ICogcGl4ZWxzUGVySW5jaDsKLX0KLQogc3RhdGljIGRvdWJsZSBxdWVyeVN5c3RlbUJsaW5rSW50
ZXJ2YWwoZG91YmxlIGRlZmF1bHRJbnRlcnZhbCkKIHsKICAgICBVSU5UIGJsaW5rVGltZSA9IEdl
dENhcmV0QmxpbmtUaW1lKCk7CkBAIC0yODUsNjcgKzIxNyw2IEBAIENvbG9yIFJlbmRlclRoZW1l
Q2hyb21pdW1XaW46OnBsYXRmb3JtSW4KICAgICByZXR1cm4gQ29sb3IoMHhmZiwgMHhmZiwgMHg5
Nik7IC8vIFllbGxvdy4KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1G
b250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAot
ewotICAgIC8vIFRoaXMgbG9naWMgb3dlcyBtdWNoIHRvIFJlbmRlclRoZW1lU2FmYXJpLmNwcC4K
LSAgICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERlc2MgPSAwOwotICAgIEF0b21pY1N0cmluZyBm
YWNlTmFtZTsKLSAgICBmbG9hdCBmb250U2l6ZSA9IDA7Ci0gICAgc3dpdGNoIChwcm9wSWQpIHsK
LSAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0aW9uOgotICAgICAgICBjYWNoZWREZXNjID0gJnNt
YWxsU3lzdGVtRm9udDsKLSAgICAgICAgaWYgKCFzbWFsbFN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNp
emUoKSkgewotICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwotICAgICAgICAg
ICAgZ2V0Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9
IEF0b21pY1N0cmluZyhtZXRyaWNzLmxmU21DYXB0aW9uRm9udC5sZkZhY2VOYW1lLCB3Y3NsZW4o
bWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQubGZGYWNlTmFtZSkpOwotICAgICAgICAgICAgZm9udFNp
emUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmU21DYXB0aW9uRm9udCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZU1lbnU6Ci0gICAgICAgIGNhY2hlZERl
c2MgPSAmbWVudUZvbnQ7Ci0gICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkg
ewotICAgICAgICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOwotICAgICAgICAgICAgZ2V0
Tm9uQ2xpZW50TWV0cmljcygmbWV0cmljcyk7Ci0gICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21p
Y1N0cmluZyhtZXRyaWNzLmxmTWVudUZvbnQubGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZN
ZW51Rm9udC5sZkZhY2VOYW1lKSk7Ci0gICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRT
aXplKG1ldHJpY3MubGZNZW51Rm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZVN0YXR1c0JhcjoKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZvbnQ7
Ci0gICAgICAgIGlmICghbGFiZWxGb250LmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAgICAg
IE5PTkNMSUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJp
Y3MoJm1ldHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUgPSBtZXRyaWNzLmxmU3RhdHVzRm9u
dC5sZkZhY2VOYW1lOwotICAgICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRy
aWNzLmxmU3RhdHVzRm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdE1pbmlDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENv
bnRyb2w6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIGZhY2VOYW1l
ID0gZGVmYXVsdEdVSUZvbnQoKTsKLSAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/ICBC
ZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuCi0gICAgICAgIGZvbnRTaXplID0gZGVmYXVs
dEZvbnRTaXplIC0gcG9pbnRzVG9QaXhlbHMoMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGZhY2VOYW1lID0gZGVmYXVsdEdVSUZvbnQoKTsKLSAgICAgICAgZm9udFNp
emUgPSBkZWZhdWx0Rm9udFNpemU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICgh
Y2FjaGVkRGVzYykKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZmb250RGVzY3JpcHRpb247Ci0KLSAg
ICBpZiAoZm9udFNpemUpIHsKLSAgICAgICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoZmFjZU5hbWUpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0
cnVlKTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRp
b246Ok5vRmFtaWx5KTsKLSAgICAgICAgY2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShmb250
U2l6ZSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsK
LSAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRhbGljKGZhbHNlKTsKLSAgICB9Ci0gICAgZm9udERl
c2NyaXB0aW9uID0gKmNhY2hlZERlc2M7Ci19Ci0KIC8vIE1hcCBhIENTU1ZhbHVlKiBzeXN0ZW0g
Y29sb3IgdG8gYW4gaW5kZXggdW5kZXJzdG9vZCBieSBHZXRTeXNDb2xvcigpLgogc3RhdGljIGlu
dCBjc3NWYWx1ZUlkVG9TeXNDb2xvckluZGV4KGludCBjc3NWYWx1ZUlkKQogewpAQCAtNTM2LDE1
ICs0MDcsNiBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50TWVudUxpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi0vLyBzdGF0aWMKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKLXsKLSAgICBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRTaXplKGZvbnRTaXplKTsKLQotICAgIC8vIFJlc2V0
IGNhY2hlZCBmb250cy4KLSAgICBzbWFsbFN5c3RlbUZvbnQgPSBtZW51Rm9udCA9IGxhYmVsRm9u
dCA9IEZvbnREZXNjcmlwdGlvbigpOwotfQotCiBkb3VibGUgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25zdAogewogICAgIC8vIFRoaXMgaW52
b2x2ZXMgYSBzeXN0ZW0gY2FsbCwgc28gd2UgY2FjaGUgdGhlIHJlc3VsdC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uaAkocmV2
aXNpb24gMTM0NjA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1XaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CiAKLSAgICAgICAgLy8gU3lzdGVt
IGZvbnRzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250
RGVzY3JpcHRpb24mKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihp
bnQgY3NzVmFsdWVJZCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKQEAg
LTg2LDEwICs4NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZW50aXJlIG1l
bnVsaXN0LgogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgLy8gT3ZlcnJp
ZGUgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEncyBzZXREZWZhdWx0Rm9udFNpemUgbWV0aG9kIHRv
IGFsc28gcmVzZXQgdGhlIGxvY2FsIGZvbnQgcHJvcGVydHkgY2FjaGVzLgotICAgICAgICAvLyBT
ZWUgY29tbWVudCBpbiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0RGVmYXVsdEZvbnRTaXpl
KCkgcmVnYXJkaW5nIHVnbGluZXNzIG9mIHRoaXMgaGFjay4KLSAgICAgICAgc3RhdGljIHZvaWQg
c2V0RGVmYXVsdEZvbnRTaXplKGludCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174184</attachid>
            <date>2012-11-14 09:58:49 -0800</date>
            <delta_ts>2012-11-14 13:56:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101949-20121114095648.patch</filename>
            <type>text/plain</type>
            <size>33195</size>
            <attacher name="Scott Violet">sky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTExLTE0ICBTY290dCBW
aW9sZXQgIDxza3lAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVmYWN0b3Ig
dGhlbWUgZm9udCBsb29rdXAgaW50byBhIGZhY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTk0OQorCisgICAgICAgIFJldmlld2VkIGJ5IFRv
bnkgQ2hhbmcuCisKKyAgICAgICAgVGhpcyB3aWxsIHVsdGltYXRlbHkgYWxsb3cgdXMgdG8gdXNl
IHdoYXQgaXMgY3VycmVudGx5IGluIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCBvbiB3aW5kb3dz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUmVmYWN0b3Jpbmcgb25seS4KKworICAgICAgICAq
IFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyOjpkZWZhdWx0R1VJRm9udCk6IE1vdmVkIGludG8gUmVuZGVyVGhlbWVG
b250UHJvdmlkZXIuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250
UHJvdmlkZXIuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyKTogVGhpcyBpcyB0aGUgZm9u
dCByZWxhdGVkIG1ldGhvZHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXJMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzZXREZWZhdWx0
Rm9udFNpemUpOiBXaGF0IHdhcyBpbiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2V0RGVmYXVs
dEZvbnRTaXplLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlcjo6c3lzdGVtRm9udCk6IFdoYXQgd2FzIGluIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpz
eXN0ZW1Gb250LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OnBvaW50c1RvUGl4ZWxzKTogTW92ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtV2luLgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Tm9uQ2xpZW50TWV0cmljcyk6IE1vdmVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUZvbnRTaXplKTogTW92
ZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtV2luLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udCk6IE1vdmVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZSk6IE1vdmVkIGZyb20gUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OlJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhKTogTW92ZWQgaW50byBSZW5kZXJUaGVtZUZvbnRQcm92aWRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzeXN0ZW1Gb250KTogQ2Fs
bHMgdG8gUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzZXREZWZhdWx0Rm9udFNpemUpOiBDYWxscyB0byBS
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5oOgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEp
OiBNb3ZlcyBkZWZhdWx0Rm9udFNpemUgaW50byBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3Zp
ZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcDogTW92
ZXMgZm9udCBjb2RlIGludG8gUmVuZGVyVGhlbWVGb250UHJvdmlkZXJXaW4uCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5oOiBS
ZW1vdmVkIG92ZXJyaWRlbiBtZXRob2RzIG5vdyBoYW5kbGVkIGJ5IFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLgorICAgICAgICAoUmVuZGVyVGhlbWVDaHJvbWl1bVdpbik6CisKIDIwMTItMTEtMTQg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogIlJldmVhbCBpbiBFbGVtZW50IFBhbmVsIiBkb2Vzbid0IHdvcmsgaWYgRWxlbWVu
dHMgcGFuZWwgaGFzbid0IGJlZW4gb3BlbmVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biAxMzQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTM0NTMsNiArMzQ1MywxMCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtQW5kcm9pZC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUNvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtQ29tbW9uLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtRm9udFByb3ZpZGVyLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJMaW51eC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyV2luLmNwcCcsCiAgICAgICAgICAgICAn
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gMTM0NjA5KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjUsNyArMTk2NSw4IEBA
CiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0b3JlIHRoZXNlIHBhdHRlcm5z
IGluIGEgdmFyaWFibGUuCiAgICAgICAgIFsnZXhjbHVkZScsICcoY2Fpcm98Y2F8Y2Z8Y2d8Y3Vy
bHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVu
dHlwZXxwYW5nb3xwb3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdp
bmNlfHd4KS8nXSwKICAgICAgICAgWydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8
Q0d8Q3VybHxHdGt8SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8
U291cHxTeW1iaWFufFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykkJ10sCi0KKyAgICAgICAgIyBQ
cmV2aW91cyBydWxlIGV4Y2x1ZGVzIHRoaW5ncyBsaWtlIENocm9taXVtRm9vV2luLCBpbmNsdWRl
IHRob3NlLgorICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nLy4qQ2hyb21pdW0uKlxcLihj
cHB8bW0/KSQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwuY3BwJCddLAogICAg
ICAgXSwKICAgICAgICdjb25kaXRpb25zJzogWwpAQCAtMTk4Myw2ICsxOTg0LDkgQEAKICAgICAg
ICAgICAgICMgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgaXMgbm90IHVzZWQgb24gbWFjIHNpbmNl
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWMKICAgICAgICAgICAgICMgZG9lcyBub3QgcmVmZXJlbmNl
IHRoZSBTa2lhIGNvZGUgdGhhdCBpcyB1c2VkIGJ5IFdpbmRvd3MsIExpbnV4IGFuZCBBbmRyb2lk
LgogICAgICAgICAgICAgWydleGNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
U2tpYVxcLmNwcCQnXSwKKyAgICAgICAgICAgICMgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92
aWRlciBpcyB1c2VkIGJ5IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLgorICAgICAgICAgICAgWydl
eGNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyXFwuY3Bw
J10sCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Gb250UHJvdmlkZXJcXC5oJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJt
YWMiCiAgICAgICAgICAgJ3NvdXJjZXMvJzogW1snZXhjbHVkZScsICdNYWNcXC4oY3BwfG1tPykk
J11dCkBAIC0yMDA4LDYgKzIwMTIsNyBAQAogICAgICAgICB9XSwKICAgICAgICAgWydPUz09ImFu
ZHJvaWQiJywgewogICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnaW5jbHVk
ZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4XFwuY3Bw
JCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJhbmRy
b2lkIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oIgorCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoZSBkZWZhdWx0IHZhcmlhYmxlLXdpZHRo
IGZvbnQgc2l6ZS4gV2UgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgZm9udAorLy8gc2l6ZSBmb3Ig
dGhlICJzeXN0ZW0gZm9udCIsIGFuZCBhcyBhIGJhc2Ugc2l6ZSAod2hpY2ggd2UgdGhlbiBzaHJp
bmspIGZvcgorLy8gZm9ybSBjb250cm9sIGZvbnRzLgorLy8gc3RhdGljCitmbG9hdCBSZW5kZXJU
aGVtZUNocm9taXVtRm9udFByb3ZpZGVyOjpzX2RlZmF1bHRGb250U2l6ZSA9IDE2LjA7CisKKy8v
IFdlIGFpbSB0byBtYXRjaCBJRSBoZXJlLgorLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRo
ZSBlbmNvZGluZyBhcyB0aGUgZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgorLy8gLUdl
Y2tvIHVzZXMgTVMgU2hlbGwgRGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZB
VUxUX0dVSV9GT05UKSwKKy8vIHdoaWNoIHJldHVybnMgTVMgU2hlbGwgRGxnKQorLy8gLVNhZmFy
aSB1c2VzIEx1Y2lkYSBHcmFuZGUuCisvLworLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUg
d2Uga25vdyB3ZSBkb24ndCBtYXRjaCBJRSBpcyBmb3IgQU5TSSBlbmNvZGluZ3MuCisvLyBJRSB1
c2VzIE1TIFNoZWxsIERsZyB0aGVyZSwgd2hpY2ggd2UgcmVuZGVyIGluY29ycmVjdGx5IGF0IGNl
cnRhaW4gcGl4ZWwKKy8vIHNpemVzIChlLmcuIDE1cHgpLiBTbywgZm9yIG5vdyB3ZSBqdXN0IHVz
ZSBBcmlhbC4KK2NvbnN0IFN0cmluZyYgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6
ZGVmYXVsdEdVSUZvbnQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBmb250
RmFjZSwgKEFTQ0lJTGl0ZXJhbCgiQXJpYWwiKSkpOworICAgIHJldHVybiBmb250RmFjZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlk
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtRm9udFByb3ZpZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVyX2gKKyNkZWZp
bmUgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcl9oCisKK25hbWVzcGFjZSBXVEYgewor
Y2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnREZXNj
cmlwdGlvbjsKKworY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mKTsKKyAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVsdEdVSUZvbnQoKTsKKwor
ICAgIHN0YXRpYyBmbG9hdCBzX2RlZmF1bHRGb250U2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJfaAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1Gb250UHJvdmlkZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAg
ICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUZvbnRQcm92aWRlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlckxpbnV4LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyTGludXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFBy
b3ZpZGVyLmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3Rh
dGljCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXI6OnNldERlZmF1bHRGb250
U2l6ZShpbnQgZm9udFNpemUpCit7CisgICAgc19kZWZhdWx0Rm9udFNpemUgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oZm9udFNpemUpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICBmbG9hdCBmb250U2l6ZSA9IHNfZGVmYXVsdEZvbnRT
aXplOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWlu
aUNvbnRyb2w6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICBjYXNl
IENTU1ZhbHVlV2Via2l0Q29udHJvbDoKKyAgICAgICAgLy8gV2h5IDIgcG9pbnRzIHNtYWxsZXI/
IEJlY2F1c2UgdGhhdCdzIHdoYXQgR2Vja28gZG9lcy4gTm90ZSB0aGF0IHdlCisgICAgICAgIC8v
IGFyZSBhc3N1bWluZyBhIDk2ZHBpIHNjcmVlbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgdGhhdCB3
ZSB1c2Ugb24KKyAgICAgICAgLy8gV2luZG93cy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHBpeGVs
c1BlckluY2ggPSA5Ni4wZjsKKyAgICAgICAgZm9udFNpemUgLT0gKDIuMGYgLyBwb2ludHNQZXJJ
bmNoKSAqIHBpeGVsc1BlckluY2g7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZvbnRE
ZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShkZWZhdWx0R1VJRm9udCgpKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldEl0YWxpYyhmYWxzZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyTGludXguY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAg
KyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
Rm9udFByb3ZpZGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcldpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRl
cldpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtRm9udFByb3ZpZGVy
LmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCisjaW5jbHVkZSAiSFduZERDLmgiCisjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgor
CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjZGVmaW5lIFNJWkVPRl9TVFJVQ1RfV0lUSF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoc3RydWN0
TmFtZSwgbWVtYmVyKSBcCisgICAgb2Zmc2V0b2Yoc3RydWN0TmFtZSwgbWVtYmVyKSArIFwKKyAg
ICAoc2l6ZW9mIHN0YXRpY19jYXN0PHN0cnVjdE5hbWUqPigwKS0+bWVtYmVyKQorI2RlZmluZSBO
T05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RBIFwKKyAgICBTSVpFT0ZfU1RSVUNUX1dJVEhf
U1BFQ0lGSUVEX0xBU1RfTUVNQkVSKE5PTkNMSUVOVE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEZvbnREZXNjcmlwdGlvbiYgc21hbGxTeXN0
ZW1Gb250KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgZm9u
dCwgKCkpOworICAgIHJldHVybiBmb250OworfQorCitzdGF0aWMgRm9udERlc2NyaXB0aW9uJiBt
ZW51Rm9udCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIGZv
bnQsICgpKTsKKyAgICByZXR1cm4gZm9udDsKK30KKworc3RhdGljIEZvbnREZXNjcmlwdGlvbiYg
bGFiZWxGb250KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwg
Zm9udCwgKCkpOworICAgIHJldHVybiBmb250OworfQorCisvLyBDb252ZXJ0cyB8cG9pbnRzfCB0
byBwaXhlbHMuIE9uZSBwb2ludCBpcyAxLzcyIG9mIGFuIGluY2guCitzdGF0aWMgZmxvYXQgcG9p
bnRzVG9QaXhlbHMoZmxvYXQgcG9pbnRzKQoreworICAgIHN0YXRpYyBmbG9hdCBwaXhlbHNQZXJJ
bmNoID0gMC4wZjsKKyAgICBpZiAoIXBpeGVsc1BlckluY2gpIHsKKyAgICAgICAgSFduZERDIGhk
YygwKTsgLy8gV2hhdCBhYm91dCBwcmludGluZz8gSXMgdGhpcyB0aGUgcmlnaHQgREM/CisgICAg
ICAgIGlmIChoZGMpIC8vIENhbiB0aGlzIGV2ZXIgYWN0dWFsbHkgYmUgMD8KKyAgICAgICAgICAg
IHBpeGVsc1BlckluY2ggPSBHZXREZXZpY2VDYXBzKGhkYywgTE9HUElYRUxTWSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBpeGVsc1BlckluY2ggPSA5Ni4wZjsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3QgZmxvYXQgcG9pbnRzUGVySW5jaCA9IDcyLjBmOworICAgIHJldHVybiBwb2lu
dHMgLyBwb2ludHNQZXJJbmNoICogcGl4ZWxzUGVySW5jaDsKK30KKworc3RhdGljIHZvaWQgZ2V0
Tm9uQ2xpZW50TWV0cmljcyhOT05DTElFTlRNRVRSSUNTKiBtZXRyaWNzKQoreworICAgIHN0YXRp
YyBVSU5UIHNpemUgPSAod2luZG93c1ZlcnNpb24oKSA+PSBXaW5kb3dzVmlzdGEpID8KKyAgICAg
ICAgc2l6ZW9mKE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BSRV9W
SVNUQTsKKyAgICBtZXRyaWNzLT5jYlNpemUgPSBzaXplOworICAgIGJvb2wgc3VjY2VzcyA9ICEh
U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemUsIG1ldHJp
Y3MsIDApOworICAgIEFTU0VSVChzdWNjZXNzKTsKK30KKworLy8gUmV0dXJuIHRoZSBoZWlnaHQg
b2Ygc3lzdGVtIGZvbnQgfGZvbnR8IGluIHBpeGVscy4gV2UgdXNlIHRoaXMgc2l6ZSBieQorLy8g
ZGVmYXVsdCBmb3Igc29tZSBub24tZm9ybS1jb250cm9sIGVsZW1lbnRzLgorc3RhdGljIGZsb2F0
IHN5c3RlbUZvbnRTaXplKGNvbnN0IExPR0ZPTlQmIGZvbnQpCit7CisgICAgZmxvYXQgc2l6ZSA9
IC1mb250LmxmSGVpZ2h0OworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBIRk9OVCBoRm9u
dCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmZm9udCk7CisgICAgICAgIGlmIChoRm9udCkgeworICAg
ICAgICAgICAgSFduZERDIGhkYygwKTsgLy8gV2hhdCBhYm91dCBwcmludGluZz8gSXMgdGhpcyB0
aGUgcmlnaHQgREM/CisgICAgICAgICAgICBpZiAoaGRjKSB7CisgICAgICAgICAgICAgICAgSEdE
SU9CSiBoT2JqZWN0ID0gU2VsZWN0T2JqZWN0KGhkYywgaEZvbnQpOworICAgICAgICAgICAgICAg
IFRFWFRNRVRSSUMgdG07CisgICAgICAgICAgICAgICAgR2V0VGV4dE1ldHJpY3MoaGRjLCAmdG0p
OworICAgICAgICAgICAgICAgIFNlbGVjdE9iamVjdChoZGMsIGhPYmplY3QpOworICAgICAgICAg
ICAgICAgIHNpemUgPSB0bS50bUFzY2VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERl
bGV0ZU9iamVjdChoRm9udCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgImNvZGVw
YWdlIDkzNiIgYml0IGhlcmUgaXMgZnJvbSBHZWNrbzsgYXBwYXJlbnRseSB0aGlzIGhlbHBzIG1h
a2UKKyAgICAvLyBmb250cyBtb3JlIGxlZ2libGUgaW4gU2ltcGxpZmllZCBDaGluZXNlIHdoZXJl
IHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpcworICAgIC8vIHRvbyBzbWFsbC4KKyAgICAvLworICAg
IC8vIEZJWE1FOiBodHRwOi8vYi8xMTE5ODgzIFNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGZvciAi
c21hbGwgY2FwdGlvbiIsCisgICAgLy8gIm1lbnUiLCBhbmQgInN0YXR1cyBiYXIiIG9iamVjdHMs
IEknbSBub3Qgc3VyZSBob3cgbXVjaCB0aGlzIGV2ZW4KKyAgICAvLyBtYXR0ZXJzLiBQbHVzIHRo
ZSBHZWNrbyBwYXRjaCB3ZW50IGluIGJhY2sgaW4gMjAwMiwgYW5kIG1heWJlIHRoaXMKKyAgICAv
LyBpc24ndCBldmVuIHJlbGV2YW50IGFueW1vcmUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0
aGVyIHRoaXMgc2hvdWxkCisgICAgLy8gYmUgcmVtb3ZlZCwgb3IgcGVyaGFwcyBicm9hZGVuZWQg
dG8gYmUgImFueSBDSksgbG9jYWxlIi4KKyAgICAvLworICAgIHJldHVybiAoKHNpemUgPCAxMi4w
ZikgJiYgKEdldEFDUCgpID09IDkzNikpID8gMTIuMGYgOiBzaXplOworfQorCisvLyBzdGF0aWMK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlcjo6c3lzdGVtRm9udChpbnQgcHJv
cElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICAvLyBUaGlzIGxv
Z2ljIG93ZXMgbXVjaCB0byBSZW5kZXJUaGVtZVNhZmFyaS5jcHAuCisgICAgRm9udERlc2NyaXB0
aW9uKiBjYWNoZWREZXNjID0gMDsKKyAgICBBdG9taWNTdHJpbmcgZmFjZU5hbWU7CisgICAgZmxv
YXQgZm9udFNpemUgPSAwOworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBDU1NWYWx1
ZVNtYWxsQ2FwdGlvbjoKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZzbWFsbFN5c3RlbUZvbnQoKTsK
KyAgICAgICAgaWYgKCFzbWFsbFN5c3RlbUZvbnQoKS5pc0Fic29sdXRlU2l6ZSgpKSB7CisgICAg
ICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgICAgICAgICBnZXROb25DbGll
bnRNZXRyaWNzKCZtZXRyaWNzKTsKKyAgICAgICAgICAgIGZhY2VOYW1lID0gQXRvbWljU3RyaW5n
KG1ldHJpY3MubGZTbUNhcHRpb25Gb250LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmU21D
YXB0aW9uRm9udC5sZkZhY2VOYW1lKSk7CisgICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZv
bnRTaXplKG1ldHJpY3MubGZTbUNhcHRpb25Gb250KTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIENTU1ZhbHVlTWVudToKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZtZW51Rm9u
dCgpOworICAgICAgICBpZiAoIW1lbnVGb250KCkuaXNBYnNvbHV0ZVNpemUoKSkgeworICAgICAg
ICAgICAgTk9OQ0xJRU5UTUVUUklDUyBtZXRyaWNzOworICAgICAgICAgICAgZ2V0Tm9uQ2xpZW50
TWV0cmljcygmbWV0cmljcyk7CisgICAgICAgICAgICBmYWNlTmFtZSA9IEF0b21pY1N0cmluZyht
ZXRyaWNzLmxmTWVudUZvbnQubGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZNZW51Rm9udC5s
ZkZhY2VOYW1lKSk7CisgICAgICAgICAgICBmb250U2l6ZSA9IHN5c3RlbUZvbnRTaXplKG1ldHJp
Y3MubGZNZW51Rm9udCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NW
YWx1ZVN0YXR1c0JhcjoKKyAgICAgICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZvbnQoKTsKKyAgICAg
ICAgaWYgKCFsYWJlbEZvbnQoKS5pc0Fic29sdXRlU2l6ZSgpKSB7CisgICAgICAgICAgICBOT05D
TElFTlRNRVRSSUNTIG1ldHJpY3M7CisgICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZt
ZXRyaWNzKTsKKyAgICAgICAgICAgIGZhY2VOYW1lID0gbWV0cmljcy5sZlN0YXR1c0ZvbnQubGZG
YWNlTmFtZTsKKyAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5s
ZlN0YXR1c0ZvbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9s
OgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICBmYWNlTmFtZSA9IGRl
ZmF1bHRHVUlGb250KCk7CisgICAgICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyBCZWNhdXNl
IHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuCisgICAgICAgIGZvbnRTaXplID0gc19kZWZhdWx0Rm9u
dFNpemUgLSBwb2ludHNUb1BpeGVscygyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgZmFjZU5hbWUgPSBkZWZhdWx0R1VJRm9udCgpOworICAgICAgICBmb250U2l6ZSA9
IHNfZGVmYXVsdEZvbnRTaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWNh
Y2hlZERlc2MpCisgICAgICAgIGNhY2hlZERlc2MgPSAmZm9udERlc2NyaXB0aW9uOworCisgICAg
aWYgKGZvbnRTaXplKSB7CisgICAgICAgIGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFt
aWx5KGZhY2VOYW1lKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXNBYnNvbHV0ZVNpemUodHJ1
ZSk7CisgICAgICAgIGNhY2hlZERlc2MtPnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpOb0ZhbWlseSk7CisgICAgICAgIGNhY2hlZERlc2MtPnNldFNwZWNpZmllZFNpemUoZm9udFNp
emUpOworICAgICAgICBjYWNoZWREZXNjLT5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Cisg
ICAgICAgIGNhY2hlZERlc2MtPnNldEl0YWxpYyhmYWxzZSk7CisgICAgfQorICAgIGZvbnREZXNj
cmlwdGlvbiA9ICpjYWNoZWREZXNjOworfQorCisvLyBzdGF0aWMKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bUZvbnRQcm92aWRlcjo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKK3sK
KyAgICBzX2RlZmF1bHRGb250U2l6ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihmb250U2l6ZSk7CisK
KyAgICAvLyBSZXNldCBjYWNoZWQgZm9udHMuCisgICAgc21hbGxTeXN0ZW1Gb250KCkgPSBtZW51
Rm9udCgpID0gbGFiZWxGb250KCkgPSBGb250RGVzY3JpcHRpb24oKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJvdmlkZXJXaW4uY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAkocmV2aXNpb24gMTM0NjA5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUZvbnRQcm92aWRlci5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC03MCwyMyArNzEsNiBAQCBzdGF0aWMgY29uc3Qg
ZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzCiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZh
dWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsKIAotLy8gV2UgYWltIHRvIG1h
dGNoIElFIGhlcmUuCi0vLyAtSUUgdXNlcyBhIGZvbnQgYmFzZWQgb24gdGhlIGVuY29kaW5nIGFz
IHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMuCi0vLyAtR2Vja28gdXNlcyBNUyBT
aGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQp
LAotLy8gd2hpY2ggcmV0dXJucyBNUyBTaGVsbCBEbGcpCi0vLyAtU2FmYXJpIHVzZXMgTHVjaWRh
IEdyYW5kZS4KLS8vCi0vLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBrbm93IHdlIGRv
bid0IG1hdGNoIElFIGlzIGZvciBBTlNJIGVuY29kaW5ncy4KLS8vIElFIHVzZXMgTVMgU2hlbGwg
RGxnIHRoZXJlLCB3aGljaCB3ZSByZW5kZXIgaW5jb3JyZWN0bHkgYXQgY2VydGFpbiBwaXhlbAot
Ly8gc2l6ZXMgKGUuZy4gMTVweCkuIFNvLCBmb3Igbm93IHdlIGp1c3QgdXNlIEFyaWFsLgotY29u
c3QgU3RyaW5nJiBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6ZGVmYXVsdEdVSUZvbnQoKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBmb250RmFjZSwgKEFTQ0lJTGl0ZXJhbCgi
QXJpYWwiKSkpOwotICAgIHJldHVybiBmb250RmFjZTsKLX0KLQotZmxvYXQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmRlZmF1bHRGb250U2l6ZSA9IDE2LjA7Ci0KIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYSgpCiB7CiB9CkBAIC0xODMsMjcgKzE2Nyw3
IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGkKIAogdm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKLSAgICBmbG9hdCBmb250U2l6ZSA9IGRlZmF1
bHRGb250U2l6ZTsKLQotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdE1pbmlDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0g
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIC8vIFdoeSAyIHBvaW50cyBz
bWFsbGVyPyBCZWNhdXNlIHRoYXQncyB3aGF0IEdlY2tvIGRvZXMuIE5vdGUgdGhhdCB3ZQotICAg
ICAgICAvLyBhcmUgYXNzdW1pbmcgYSA5NmRwaSBzY3JlZW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0
IHRoYXQgd2UgdXNlIG9uCi0gICAgICAgIC8vIFdpbmRvd3MuCi0gICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBwb2ludHNQZXJJbmNoID0gNzIuMGY7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBwaXhlbHNQZXJJbmNoID0gOTYuMGY7Ci0gICAgICAgIGZvbnRTaXplIC09ICgyLjBmIC8gcG9p
bnRzUGVySW5jaCkgKiBwaXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoZGVmYXVsdEdVSUZvbnQo
KSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KEZvbnRXZWlnaHROb3JtYWwpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJdGFsaWMoZmFsc2UpOworICAgIFJlbmRlclRoZW1lQ2hyb21pdW1Gb250UHJv
dmlkZXI6OnN5c3RlbUZvbnQocHJvcElkLCBmb250RGVzY3JpcHRpb24pOwogfQogCiBpbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdApAQCAtNTczLDcgKzUzNyw3IEBAIGludCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cG9wdXBJbnRlcm4KIC8vIHN0YXRpYwogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
c2V0RGVmYXVsdEZvbnRTaXplKGludCBmb250U2l6ZSkKIHsKLSAgICBkZWZhdWx0Rm9udFNpemUg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oZm9udFNpemUpOworICAgIFJlbmRlclRoZW1lQ2hyb21pdW1G
b250UHJvdmlkZXI6OnNldERlZmF1bHRGb250U2l6ZShmb250U2l6ZSk7CiB9CiAKIGRvdWJsZSBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmgJKHJldmlzaW9uIDEzNDYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTMgKzE0
NSw2IEBAIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIDogcHVibGljIFIKICAgICAgICAg
c3RhdGljIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRHVUlGb250KCk7Ci0KLSAgICAgICAg
Ly8gVGhlIGRlZmF1bHQgdmFyaWFibGUtd2lkdGggZm9udCBzaXplLiAgV2UgdXNlIHRoaXMgYXMg
dGhlIGRlZmF1bHQgZm9udAotICAgICAgICAvLyBzaXplIGZvciB0aGUgInN5c3RlbSBmb250Iiwg
YW5kIGFzIGEgYmFzZSBzaXplICh3aGljaCB3ZSB0aGVuIHNocmluaykgZm9yCi0gICAgICAgIC8v
IGZvcm0gY29udHJvbCBmb250cy4KLSAgICAgICAgc3RhdGljIGZsb2F0IGRlZmF1bHRGb250U2l6
ZTsKLQogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCgp
IGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgaW50IG1lbnVMaXN0QXJyb3dQYWRkaW5nKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiAxMzQ2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTWVk
aWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFduZERDLmgi
CiAjaW5jbHVkZSAiTGF5b3V0VGVzdFN1cHBvcnQuaCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xF
bGVtZW50cy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNDMsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bUNvbW1vbi5o
IgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU3lzdGVtSW5mby5oIgog
I2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgpAQCAtNTIsMTIgKzUyLDYgQEAKIC8vIEZJWE1F
OiBUaGlzIGRlcGVuZGVuY3kgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICNpbmNsdWRl
IDxza2lhL2V4dC9za2lhX3V0aWxzX3dpbi5oPgogCi0jZGVmaW5lIFNJWkVPRl9TVFJVQ1RfV0lU
SF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoc3RydWN0TmFtZSwgbWVtYmVyKSBcCi0gICAgb2Zmc2V0
b2Yoc3RydWN0TmFtZSwgbWVtYmVyKSArIFwKLSAgICAoc2l6ZW9mIHN0YXRpY19jYXN0PHN0cnVj
dE5hbWUqPigwKS0+bWVtYmVyKQotI2RlZmluZSBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJ
U1RBIFwKLSAgICBTSVpFT0ZfU1RSVUNUX1dJVEhfU1BFQ0lGSUVEX0xBU1RfTUVNQkVSKE5PTkNM
SUVOVE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQpCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8g
VGhlIHN0YW5kYXJkIHdpZHRoIGZvciB0aGUgbWVudSBsaXN0IGRyb3AtZG93biBidXR0b24gd2hl
biBydW4gdW5kZXIKQEAgLTEzNSwxOSArMTI5LDYgQEAgYm9vbCBUaGVtZVBhaW50ZXI6OnNfaGFz
SW5zdGFuY2UgPSBmYWxzZQogCiB9IC8vIG5hbWVzcGFjZQogCi1zdGF0aWMgdm9pZCBnZXROb25D
bGllbnRNZXRyaWNzKE5PTkNMSUVOVE1FVFJJQ1MqIG1ldHJpY3MpCi17Ci0gICAgc3RhdGljIFVJ
TlQgc2l6ZSA9ICh3aW5kb3dzVmVyc2lvbigpID49IFdpbmRvd3NWaXN0YSkgPwotICAgICAgICBz
aXplb2YoTk9OQ0xJRU5UTUVUUklDUykgOiBOT05DTElFTlRNRVRSSUNTX1NJWkVfUFJFX1ZJU1RB
OwotICAgIG1ldHJpY3MtPmNiU2l6ZSA9IHNpemU7Ci0gICAgYm9vbCBzdWNjZXNzID0gISFTeXN0
ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZSwgbWV0cmljcywg
MCk7Ci0gICAgQVNTRVJUKHN1Y2Nlc3MpOwotfQotCi1zdGF0aWMgRm9udERlc2NyaXB0aW9uIHNt
YWxsU3lzdGVtRm9udDsKLXN0YXRpYyBGb250RGVzY3JpcHRpb24gbWVudUZvbnQ7Ci1zdGF0aWMg
Rm9udERlc2NyaXB0aW9uIGxhYmVsRm9udDsKLQogLy8gSW50ZXJuYWwgc3RhdGljIGhlbHBlciBm
dW5jdGlvbnMuICBXZSBkb24ndCBwdXQgdGhlbSBpbiBhbiBhbm9ueW1vdXMKIC8vIG5hbWVzcGFj
ZSBzbyB0aGV5IGhhdmUgZWFzaWVyIGFjY2VzcyB0byB0aGUgV2ViQ29yZSBuYW1lc3BhY2UuCiAK
QEAgLTE2Niw1NSArMTQ3LDYgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFy
dCBhcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gUmV0dXJuIHRoZSBoZWlnaHQgb2Ygc3lz
dGVtIGZvbnQgfGZvbnR8IGluIHBpeGVscy4gIFdlIHVzZSB0aGlzIHNpemUgYnkKLS8vIGRlZmF1
bHQgZm9yIHNvbWUgbm9uLWZvcm0tY29udHJvbCBlbGVtZW50cy4KLXN0YXRpYyBmbG9hdCBzeXN0
ZW1Gb250U2l6ZShjb25zdCBMT0dGT05UJiBmb250KQotewotICAgIGZsb2F0IHNpemUgPSAtZm9u
dC5sZkhlaWdodDsKLSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgSEZPTlQgaEZvbnQgPSBD
cmVhdGVGb250SW5kaXJlY3QoJmZvbnQpOwotICAgICAgICBpZiAoaEZvbnQpIHsKLSAgICAgICAg
ICAgIEhXbmREQyBoZGMoMCk7IC8vIFdoYXQgYWJvdXQgcHJpbnRpbmc/IElzIHRoaXMgdGhlIHJp
Z2h0IERDPwotICAgICAgICAgICAgaWYgKGhkYykgewotICAgICAgICAgICAgICAgIEhHRElPQkog
aE9iamVjdCA9IFNlbGVjdE9iamVjdChoZGMsIGhGb250KTsKLSAgICAgICAgICAgICAgICBURVhU
TUVUUklDIHRtOwotICAgICAgICAgICAgICAgIEdldFRleHRNZXRyaWNzKGhkYywgJnRtKTsKLSAg
ICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBoT2JqZWN0KTsKLSAgICAgICAgICAgICAg
ICBzaXplID0gdG0udG1Bc2NlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEZWxldGVP
YmplY3QoaEZvbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlICJjb2RlcGFnZSA5
MzYiIGJpdCBoZXJlIGlzIGZyb20gR2Vja287IGFwcGFyZW50bHkgdGhpcyBoZWxwcyBtYWtlCi0g
ICAgLy8gZm9udHMgbW9yZSBsZWdpYmxlIGluIFNpbXBsaWZpZWQgQ2hpbmVzZSB3aGVyZSB0aGUg
ZGVmYXVsdCBmb250IHNpemUgaXMKLSAgICAvLyB0b28gc21hbGwuCi0gICAgLy8KLSAgICAvLyBG
SVhNRTogaHR0cDovL2IvMTExOTg4MyBTaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgInNtYWxs
IGNhcHRpb24iLAotICAgIC8vICJtZW51IiwgYW5kICJzdGF0dXMgYmFyIiBvYmplY3RzLCBJJ20g
bm90IHN1cmUgaG93IG11Y2ggdGhpcyBldmVuCi0gICAgLy8gbWF0dGVycy4gIFBsdXMgdGhlIEdl
Y2tvIHBhdGNoIHdlbnQgaW4gYmFjayBpbiAyMDAyLCBhbmQgbWF5YmUgdGhpcwotICAgIC8vIGlz
bid0IGV2ZW4gcmVsZXZhbnQgYW55bW9yZS4gIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGV0aGVy
IHRoaXMgc2hvdWxkCi0gICAgLy8gYmUgcmVtb3ZlZCwgb3IgcGVyaGFwcyBicm9hZGVuZWQgdG8g
YmUgImFueSBDSksgbG9jYWxlIi4KLSAgICAvLwotICAgIHJldHVybiAoKHNpemUgPCAxMi4wZikg
JiYgKEdldEFDUCgpID09IDkzNikpID8gMTIuMGYgOiBzaXplOwotfQotCi0vLyBDb252ZXJ0cyB8
cG9pbnRzfCB0byBwaXhlbHMuICBPbmUgcG9pbnQgaXMgMS83MiBvZiBhbiBpbmNoLgotc3RhdGlj
IGZsb2F0IHBvaW50c1RvUGl4ZWxzKGZsb2F0IHBvaW50cykKLXsKLSAgICBzdGF0aWMgZmxvYXQg
cGl4ZWxzUGVySW5jaCA9IDAuMGY7Ci0gICAgaWYgKCFwaXhlbHNQZXJJbmNoKSB7Ci0gICAgICAg
IEhXbmREQyBoZGMoMCk7IC8vIFdoYXQgYWJvdXQgcHJpbnRpbmc/IElzIHRoaXMgdGhlIHJpZ2h0
IERDPwotICAgICAgICBpZiAoaGRjKSAvLyBDYW4gdGhpcyBldmVyIGFjdHVhbGx5IGJlIE5VTEw/
Ci0gICAgICAgICAgICBwaXhlbHNQZXJJbmNoID0gR2V0RGV2aWNlQ2FwcyhoZGMsIExPR1BJWEVM
U1kpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwaXhlbHNQZXJJbmNoID0gOTYuMGY7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHBvaW50c1BlckluY2ggPSA3Mi4wZjsKLSAg
ICByZXR1cm4gcG9pbnRzIC8gcG9pbnRzUGVySW5jaCAqIHBpeGVsc1BlckluY2g7Ci19Ci0KIHN0
YXRpYyBkb3VibGUgcXVlcnlTeXN0ZW1CbGlua0ludGVydmFsKGRvdWJsZSBkZWZhdWx0SW50ZXJ2
YWwpCiB7CiAgICAgVUlOVCBibGlua1RpbWUgPSBHZXRDYXJldEJsaW5rVGltZSgpOwpAQCAtMjg1
LDY3ICsyMTcsNiBAQCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUluCiAg
ICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4ZmYsIDB4OTYpOyAvLyBZZWxsb3cuCiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICAvLyBUaGlzIGxvZ2ljIG93ZXMg
bXVjaCB0byBSZW5kZXJUaGVtZVNhZmFyaS5jcHAuCi0gICAgRm9udERlc2NyaXB0aW9uKiBjYWNo
ZWREZXNjID0gMDsKLSAgICBBdG9taWNTdHJpbmcgZmFjZU5hbWU7Ci0gICAgZmxvYXQgZm9udFNp
emUgPSAwOwotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2Fw
dGlvbjoKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZzbWFsbFN5c3RlbUZvbnQ7Ci0gICAgICAgIGlm
ICghc21hbGxTeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAgICAgIE5PTkNM
SUVOVE1FVFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1l
dHJpY3MpOwotICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0cmljcy5sZlNt
Q2FwdGlvbkZvbnQubGZGYWNlTmFtZSwgd2NzbGVuKG1ldHJpY3MubGZTbUNhcHRpb25Gb250Lmxm
RmFjZU5hbWUpKTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmlj
cy5sZlNtQ2FwdGlvbkZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTVmFsdWVNZW51OgotICAgICAgICBjYWNoZWREZXNjID0gJm1lbnVGb250OwotICAgICAgICBp
ZiAoIW1lbnVGb250LmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAgICAgIE5PTkNMSUVOVE1F
VFJJQ1MgbWV0cmljczsKLSAgICAgICAgICAgIGdldE5vbkNsaWVudE1ldHJpY3MoJm1ldHJpY3Mp
OwotICAgICAgICAgICAgZmFjZU5hbWUgPSBBdG9taWNTdHJpbmcobWV0cmljcy5sZk1lbnVGb250
LmxmRmFjZU5hbWUsIHdjc2xlbihtZXRyaWNzLmxmTWVudUZvbnQubGZGYWNlTmFtZSkpOwotICAg
ICAgICAgICAgZm9udFNpemUgPSBzeXN0ZW1Gb250U2l6ZShtZXRyaWNzLmxmTWVudUZvbnQpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6Ci0g
ICAgICAgIGNhY2hlZERlc2MgPSAmbGFiZWxGb250OwotICAgICAgICBpZiAoIWxhYmVsRm9udC5p
c0Fic29sdXRlU2l6ZSgpKSB7Ci0gICAgICAgICAgICBOT05DTElFTlRNRVRSSUNTIG1ldHJpY3M7
Ci0gICAgICAgICAgICBnZXROb25DbGllbnRNZXRyaWNzKCZtZXRyaWNzKTsKLSAgICAgICAgICAg
IGZhY2VOYW1lID0gbWV0cmljcy5sZlN0YXR1c0ZvbnQubGZGYWNlTmFtZTsKLSAgICAgICAgICAg
IGZvbnRTaXplID0gc3lzdGVtRm9udFNpemUobWV0cmljcy5sZlN0YXR1c0ZvbnQpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoK
LSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgotICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRDb250cm9sOgotICAgICAgICBmYWNlTmFtZSA9IGRlZmF1bHRHVUlGb250KCk7Ci0gICAg
ICAgIC8vIFdoeSAyIHBvaW50cyBzbWFsbGVyPyAgQmVjYXVzZSB0aGF0J3Mgd2hhdCBHZWNrbyBk
b2VzLgotICAgICAgICBmb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZSAtIHBvaW50c1RvUGl4ZWxz
KDIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBmYWNlTmFtZSA9IGRl
ZmF1bHRHVUlGb250KCk7Ci0gICAgICAgIGZvbnRTaXplID0gZGVmYXVsdEZvbnRTaXplOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIWNhY2hlZERlc2MpCi0gICAgICAgIGNhY2hl
ZERlc2MgPSAmZm9udERlc2NyaXB0aW9uOwotCi0gICAgaWYgKGZvbnRTaXplKSB7Ci0gICAgICAg
IGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KGZhY2VOYW1lKTsKLSAgICAgICAg
Y2FjaGVkRGVzYy0+c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgICAgIGNhY2hlZERlc2Mt
PnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7Ci0gICAgICAgIGNh
Y2hlZERlc2MtPnNldFNwZWNpZmllZFNpemUoZm9udFNpemUpOwotICAgICAgICBjYWNoZWREZXNj
LT5zZXRXZWlnaHQoRm9udFdlaWdodE5vcm1hbCk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldEl0
YWxpYyhmYWxzZSk7Ci0gICAgfQotICAgIGZvbnREZXNjcmlwdGlvbiA9ICpjYWNoZWREZXNjOwot
fQotCiAvLyBNYXAgYSBDU1NWYWx1ZSogc3lzdGVtIGNvbG9yIHRvIGFuIGluZGV4IHVuZGVyc3Rv
b2QgYnkgR2V0U3lzQ29sb3IoKS4KIHN0YXRpYyBpbnQgY3NzVmFsdWVJZFRvU3lzQ29sb3JJbmRl
eChpbnQgY3NzVmFsdWVJZCkKIHsKQEAgLTUzNiwxNSArNDA3LDYgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpwYWludE1lbnVMaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gc3Rh
dGljCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnNldERlZmF1bHRGb250U2l6ZShpbnQg
Zm9udFNpemUpCi17Ci0gICAgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250
U2l6ZShmb250U2l6ZSk7Ci0KLSAgICAvLyBSZXNldCBjYWNoZWQgZm9udHMuCi0gICAgc21hbGxT
eXN0ZW1Gb250ID0gbWVudUZvbnQgPSBsYWJlbEZvbnQgPSBGb250RGVzY3JpcHRpb24oKTsKLX0K
LQogZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OmNhcmV0QmxpbmtJbnRlcnZhbEludGVy
bmFsKCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGludm9sdmVzIGEgc3lzdGVtIGNhbGwsIHNvIHdl
IGNhY2hlIHRoZSByZXN1bHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgJKHJldmlzaW9uIDEzNDYwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDggKzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
cigpIGNvbnN0OwogCi0gICAgICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICAgICAgdmlydHVhbCB2
b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAgICAg
ICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0OwogCiAj
aWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCkBAIC04NiwxMCArODQsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIC8vIGVudGlyZSBtZW51bGlzdC4KICAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCi0gICAgICAgIC8vIE92ZXJyaWRlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
J3Mgc2V0RGVmYXVsdEZvbnRTaXplIG1ldGhvZCB0byBhbHNvIHJlc2V0IHRoZSBsb2NhbCBmb250
IHByb3BlcnR5IGNhY2hlcy4KLSAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnNldERlZmF1bHRGb250U2l6ZSgpIHJlZ2FyZGluZyB1Z2xpbmVzcyBvZiB0
aGlzIGhhY2suCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRGb250U2l6ZShpbnQpOwot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>