<?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>23321</bug_id>
          
          <creation_ts>2009-01-14 10:07:45 -0800</creation_ts>
          <short_desc>Upstream more of platform/graphics/chromium</short_desc>
          <delta_ts>2009-01-14 11:40:40 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105698</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 10:07:45 -0800</bug_when>
    <thetext>FontPlatform-related files in a batch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105699</commentid>
    <comment_count>1</comment_count>
      <attachid>26713</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 10:08:53 -0800</bug_when>
    <thetext>Created attachment 26713
upstream more bits of graphics/chromium

 WebCore/ChangeLog                                  |   50 +++
 .../chromium/FontPlatformDataChromiumWin.cpp       |  156 +++++++++
 .../chromium/FontPlatformDataChromiumWin.h         |  130 ++++++++
 .../graphics/chromium/FontPlatformDataLinux.cpp    |  139 ++++++++
 .../graphics/chromium/FontPlatformDataLinux.h      |  112 +++++++
 .../graphics/chromium/FontUtilsChromiumWin.cpp     |  350 ++++++++++++++++++++
 .../graphics/chromium/FontUtilsChromiumWin.h       |   93 ++++++
 7 files changed, 1030 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105745</commentid>
    <comment_count>2</comment_count>
      <attachid>26713</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-14 11:13:02 -0800</bug_when>
    <thetext>Comment on attachment 26713
upstream more bits of graphics/chromium

class FontPlatformData
 50 {
{ should be on same line.

 338 int getStyleFromLogfont(const LOGFONT* logfont) {

{ should be on its own line. :)

Sigh.  WebKit is very anti *utils files.  I wonder if we can find a happier home for FontUtils functions.  We probably add a FIXME to the top of that file to the effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105757</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 11:40:40 -0800</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/39902</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26713</attachid>
            <date>2009-01-14 10:08:53 -0800</date>
            <delta_ts>2009-01-14 11:13:02 -0800</delta_ts>
            <desc>upstream more bits of graphics/chromium</desc>
            <filename>upstream-more-bits-of-graphics-chromium.patch</filename>
            <type>text/plain</type>
            <size>41629</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">YTg0N2Q4NDQ5YTQ1MDU5OGMxZjczNDA1NmI1MDdiMTk4MmEyMTU1OQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkODJkNTI5Li41ODRlMDBl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUzIEBACisyMDA5LTAxLTE0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMyMQorICAgICAg
ICAKKyAgICAgICAgVXBzdHJlYW0gbW9yZSBiaXRzIG9mIGdyYXBoaWNzL2Nocm9taXVtLgorICAg
ICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhQ2hyb21pdW1XaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6On5G
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OlJl
ZkNvdW50ZWRIRk9OVDo6flJlZkNvdW50ZWRIRk9OVCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNjcmlwdEZvbnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoZm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1E
YXRhOjpzY3JpcHRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpS
ZWZDb3VudGVkSEZPTlQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1E
YXRhOjpSZWZDb3VudGVkSEZPTlQ6Omhmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OlJlZkNvdW50ZWRIRk9OVDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpSZWZDb3VudGVkSEZPTlQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6UmVmQ291bnRlZEhGT05UOjpSZWZDb3VudGVkSEZPTlQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjp+Rm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVy
YXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0dXBQYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpGb250TWFwOjpnZXRB
c2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udE1hcDo6Rm9udERhdGE6OkZvbnREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldEZvbnRGYW1pbHlGb3JTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0RmFsbGJhY2tGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVyaXZlZEZv
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0eWxlRnJvbUxvZ2ZvbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRVdGlsc0Nocm9taXVtV2luLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKwogMjAwOS0wMS0xNCAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0
Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzY3ZmU3NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcApAQCAt
MCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8
b2JqaWRsLmg+CisjaW5jbHVkZSA8bWxhbmcuaD4KKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCisjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICA6IG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkpCisgICAg
LCBtX3NpemUoLTEpCisgICAgLCBtX3NjcmlwdENhY2hlKDApCisgICAgLCBtX3NjcmlwdEZvbnRQ
cm9wZXJ0aWVzKDApCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
KQorICAgIDogbV9mb250KDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fc2NyaXB0Q2FjaGUo
MCkKKyAgICAsIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMoMCkKK3sKK30KKworRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBmbG9hdCBzaXplKQorICAgIDogbV9m
b250KFJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRlKGZvbnQpKQorICAgICwgbV9zaXplKHNpemUpCisg
ICAgLCBtX3NjcmlwdENhY2hlKDApCisgICAgLCBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKDApCit7
Cit9CisKKy8vIEZJWE1FOiB0aGlzIGNvbnN0cnVjdG9yIGlzIG5lZWRlZCBmb3IgU1ZHIGZvbnRz
IGJ1dCBkb2Vzbid0IHNlZW0gdG8gZG8gbXVjaAorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKKyAgICA6IG1fZm9u
dCgwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3NjcmlwdENhY2hlKDApCisgICAgLCBt
X3NjcmlwdEZvbnRQcm9wZXJ0aWVzKDApCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZGF0YSkKKyAgICA6IG1fZm9udChk
YXRhLm1fZm9udCkKKyAgICAsIG1fc2l6ZShkYXRhLm1fc2l6ZSkKKyAgICAsIG1fc2NyaXB0Q2Fj
aGUoMCkKKyAgICAsIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMoMCkKK3sKK30KKworRm9udFBsYXRm
b3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIGRhdGEpCit7CisgICAgaWYgKHRoaXMgIT0gJmRhdGEpIHsKKyAgICAgICAgbV9mb250ID0g
ZGF0YS5tX2ZvbnQ7CisgICAgICAgIG1fc2l6ZSA9IGRhdGEubV9zaXplOworCisgICAgICAgIC8v
IFRoZSBmb2xsb3dpbmcgZmllbGRzIHdpbGwgZ2V0IHJlLWNvbXB1dGVkIGlmIG5lY2Vzc2FyeS4K
KyAgICAgICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKKyAgICAgICAgbV9zY3Jp
cHRDYWNoZSA9IDA7CisKKyAgICAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7Cisg
ICAgICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOworICAgIH0gCisgICAgcmV0dXJuICp0
aGlzOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAg
U2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKKyAgICBtX3NjcmlwdENhY2hlID0gMDsK
KworICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOworICAgIG1fc2NyaXB0Rm9udFBy
b3BlcnRpZXMgPSAwOworfQorCitGb250UGxhdGZvcm1EYXRhOjpSZWZDb3VudGVkSEZPTlQ6On5S
ZWZDb3VudGVkSEZPTlQoKQoreworICAgIGlmIChtX2hmb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
SEZPTlQ+KC0xKSkgeworICAgICAgICBTa2lhV2luT3V0bGluZUNhY2hlOjpyZW1vdmVQYXRoc0Zv
ckZvbnQobV9oZm9udCk7CisgICAgICAgIERlbGV0ZU9iamVjdChtX2hmb250KTsKKyAgICB9Cit9
CisKK0ZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIRk9OVCogRm9udFBsYXRmb3JtRGF0YTo6
aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpCit7CisgICAgc3RhdGljIFJlZlB0cjxSZWZDb3Vu
dGVkSEZPTlQ+IGRlbGV0ZWRWYWx1ZSA9CisgICAgICAgIFJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8SEZPTlQ+KC0xKSk7CisgICAgcmV0dXJuIGRlbGV0ZWRWYWx1ZS5n
ZXQoKTsKK30KKworU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBGb250UGxhdGZvcm1EYXRhOjpzY3Jp
cHRGb250UHJvcGVydGllcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NjcmlwdEZvbnRQcm9wZXJ0
aWVzKSB7CisgICAgICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSBuZXcgU0NSSVBUX0ZPTlRQ
Uk9QRVJUSUVTOworICAgICAgICBtZW1zZXQobV9zY3JpcHRGb250UHJvcGVydGllcywgMCwgc2l6
ZW9mKFNDUklQVF9GT05UUFJPUEVSVElFUykpOworICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0
aWVzLT5jQnl0ZXMgPSBzaXplb2YoU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKTsKKyAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBTY3JpcHRHZXRGb250UHJvcGVydGllcygwLCBzY3JpcHRDYWNoZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0
Rm9udFByb3BlcnRpZXMpOworICAgICAgICBpZiAocmVzdWx0ID09IEVfUEVORElORykgeworICAg
ICAgICAgICAgSERDIGRjID0gR2V0REMoMCk7CisgICAgICAgICAgICBIR0RJT0JKIG9sZEZvbnQg
PSBTZWxlY3RPYmplY3QoZGMsIGhmb250KCkpOworICAgICAgICAgICAgSFJFU1VMVCBociA9IFNj
cmlwdEdldEZvbnRQcm9wZXJ0aWVzKGRjLCBzY3JpcHRDYWNoZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMp
OworICAgICAgICAgICAgaWYgKFNfT0sgIT0gaHIpIHsKKyAgICAgICAgICAgICAgICBpZiAoQ2hy
b21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IEhhbmRsZSBncmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwg
YWxzbyBmYWlscy4KKyAgICAgICAgICAgICAgICAgICAgaHIgPSBTY3JpcHRHZXRGb250UHJvcGVy
dGllcyhkYywgc2NyaXB0Q2FjaGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKFNfT0sgIT0gaHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwor
ICAgICAgICAgICAgUmVsZWFzZURDKDAsIGRjKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gbV9zY3JpcHRGb250UHJvcGVydGllczsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9t
aXVtV2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4M2ExZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBs
YXRmb3JtRGF0YUNocm9taXVtV2luLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoYykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFXaW5faAorI2RlZmluZSBGb250UGxhdGZvcm1EYXRhV2lu
X2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
I2luY2x1ZGUgPHVzcDEwLmg+CisKK3R5cGVkZWYgc3RydWN0IEhGT05UX18gKkhGT05UOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnREZXNjcmlwdGlvbjsKKworY2xhc3MgRm9u
dFBsYXRmb3JtRGF0YQoreworcHVibGljOgorICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVz
IGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuIFRoZSBoYXNoIHRhYmxlCisgICAgLy8g
d2lsbCBjcmVhdGUgdXMgd2l0aCB0aGlzIHN0cnVjdHVyZSwgYW5kIGl0IHdpbGwgY29tcGFyZSBv
dGhlciB2YWx1ZXMKKyAgICAvLyB0byB0aGlzICJEZWxldGVkIiBvbmUuIEl0IGV4cGVjdHMgdGhl
IERlbGV0ZWQgb25lIHRvIGJlIGRpZmZlcmVudGlhYmxlCisgICAgLy8gZnJvbSB0aGUgTlVMTCBv
bmUgKGNyZWF0ZWQgd2l0aCB0aGUgZW1wdHkgY29uc3RydWN0b3IpLCBzbyB3ZSBjYW4ndCBqdXN0
CisgICAgLy8gc2V0IGV2ZXJ5dGhpbmcgdG8gTlVMTC4KKyAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSgpOwor
ICAgIEZvbnRQbGF0Zm9ybURhdGEoSEZPTlQsIGZsb2F0IHNpemUpOworICAgIEZvbnRQbGF0Zm9y
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOworICAgIEZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworCisgICAgRm9udFBsYXRmb3JtRGF0
YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQgPT0gaGFzaFRhYmxlRGVs
ZXRlZEZvbnRWYWx1ZSgpOyB9CisKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgSEZP
TlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmhmb250KCkgOiAwOyB9
CisgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeyAKKyAgICAgICAgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+
aGFzaCgpIDogTlVMTDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CisgICAgeyAKKyAgICAgICAgcmV0dXJuIG1fZm9udCA9
PSBvdGhlci5tX2ZvbnQgJiYgbV9zaXplID09IG90aGVyLm1fc2l6ZTsKKyAgICB9CisKKyAgICBT
Q1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAg
U0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hl
OyB9CisKK3ByaXZhdGU6CisgICAgLy8gV2UgcmVmY291bnQgdGhlIGludGVybmFsIEhGT05UIHNv
IHRoYXQgRm9udFBsYXRmb3JtRGF0YSBjYW4gYmUKKyAgICAvLyBlZmZpY2llbnRseSBjb3BpZWQu
IFdlYktpdCBkZXBlbmRzIG9uIGJlaW5nIGFibGUgdG8gY29weSBpdCwgYW5kIHdlCisgICAgLy8g
ZG9uJ3QgcmVhbGx5IHdhbnQgdG8gcmUtY3JlYXRlIHRoZSBIRk9OVC4KKyAgICBjbGFzcyBSZWZD
b3VudGVkSEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gY3JlYXRl
KEhGT05UIGhmb250KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFJlZkNvdW50ZWRIRk9OVChoZm9udCkpOworICAgICAgICB9CisKKyAgICAgICAgflJlZkNvdW50
ZWRIRk9OVCgpOworCisgICAgICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9oZm9u
dDsgfQorICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPigmbV9oZm9udCksIHNpemVvZihIRk9OVCkgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkSEZPTlQmIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9oZm9udCA9PSBvdGhl
ci5tX2hmb250OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBUaGUgY3Jl
YXRlKCkgZnVuY3Rpb24gYXNzdW1lcyB0aGVyZSBpcyBhbHJlYWR5IGEgcmVmY291bnQgb2Ygb25l
IAorICAgICAgICAvLyBzbyBpdCBjYW4gZG8gYWRvcHRSZWYuCisgICAgICAgIFJlZkNvdW50ZWRI
Rk9OVChIRk9OVCBoZm9udCkgOiBtX2hmb250KGhmb250KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBIRk9OVCBtX2hmb250OworICAgIH07CisKKyAgICBzdGF0aWMgUmVmQ291bnRl
ZEhGT05UKiBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCk7CisKKyAgICBSZWZQdHI8UmVmQ291
bnRlZEhGT05UPiBtX2ZvbnQ7CisgICAgZmxvYXQgbV9zaXplOyAgLy8gUG9pbnQgc2l6ZSBvZiB0
aGUgZm9udCBpbiBwaXhlbHMuCisKKyAgICBtdXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENh
Y2hlOworICAgIG11dGFibGUgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9w
ZXJ0aWVzOworfTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBGb250UGxhdGZvcm1EYXRh
V2luX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUxpbnV4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44NmY5NmVlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCkBAIC0wLDAgKzEsMTM5IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCisKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKworI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCisgICAgOiBtX3R5cGVmYWNlKHNyYy5t
X3R5cGVmYWNlKQorICAgICwgbV90ZXh0U2l6ZShzcmMubV90ZXh0U2l6ZSkKKyAgICAsIG1fZmFr
ZUJvbGQoc3JjLm1fZmFrZUJvbGQpCisgICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxp
YykKK3sKKyAgICBtX3R5cGVmYWNlLT5zYWZlUmVmKCk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSogdGYsIGZsb2F0IHRleHRTaXplLCBib29sIGZh
a2VCb2xkLCBib29sIGZha2VJdGFsaWMpCisgICAgOiBtX3R5cGVmYWNlKHRmKQorICAgICwgbV90
ZXh0U2l6ZSh0ZXh0U2l6ZSkKKyAgICAsIG1fZmFrZUJvbGQoZmFrZUJvbGQpCisgICAgLCBtX2Zh
a2VJdGFsaWMoZmFrZUl0YWxpYykKK3sKKyAgICBtX3R5cGVmYWNlLT5zYWZlUmVmKCk7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgc3JjLCBmbG9hdCB0ZXh0U2l6ZSkKKyAgICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlwZWZhY2Up
CisgICAgLCBtX3RleHRTaXplKHRleHRTaXplKQorICAgICwgbV9mYWtlQm9sZChzcmMubV9mYWtl
Qm9sZCkKKyAgICAsIG1fZmFrZUl0YWxpYyhzcmMubV9mYWtlSXRhbGljKQoreworICAgIG1fdHlw
ZWZhY2UtPnNhZmVSZWYoKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQoreworICAgIG1fdHlwZWZhY2UtPnNhZmVVbnJlZigpOworfQorCitGb250UGxhdGZvcm1E
YXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
c3JjKQoreworICAgIFNrUmVmQ250X1NhZmVBc3NpZ24obV90eXBlZmFjZSwgc3JjLm1fdHlwZWZh
Y2UpOworCisgICAgbV90ZXh0U2l6ZSA9IHNyYy5tX3RleHRTaXplOworICAgIG1fZmFrZUJvbGQg
PSBzcmMubV9mYWtlQm9sZDsKKyAgICBtX2Zha2VJdGFsaWMgPSBzcmMubV9mYWtlSXRhbGljOwor
CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldHVwUGFp
bnQoU2tQYWludCogcGFpbnQpIGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQgdHMgPSBtX3RleHRT
aXplID4gMCA/IG1fdGV4dFNpemUgOiAxMjsKKworICAgIHBhaW50LT5zZXRBbnRpQWxpYXMoZmFs
c2UpOworICAgIHBhaW50LT5zZXRTdWJwaXhlbFRleHQoZmFsc2UpOworICAgIHBhaW50LT5zZXRU
ZXh0U2l6ZShTa0Zsb2F0VG9TY2FsYXIodHMpKTsKKyAgICBwYWludC0+c2V0VHlwZWZhY2UobV90
eXBlZmFjZSk7CisgICAgcGFpbnQtPnNldEZha2VCb2xkVGV4dChtX2Zha2VCb2xkKTsKKyAgICBw
YWludC0+c2V0VGV4dFNrZXdYKG1fZmFrZUl0YWxpYyA/IC1TS19TY2FsYXIxIC8gNCA6IDApOwor
ICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7
Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBhKSBjb25zdAoreworICAgIC8vIElmIGVpdGhlciBvZiB0aGUgdHlwZWZhY2UgcG9p
bnRlcnMgYXJlIGludmFsaWQgKGVpdGhlciBOVUxMIG9yIHRoZQorICAgIC8vIHNwZWNpYWwgZGVs
ZXRlZCB2YWx1ZSkgdGhlbiB3ZSB0ZXN0IGZvciBwb2ludGVyIGVxdWFsaXR5LiBPdGhlcndpc2Us
IHdlCisgICAgLy8gY2FsbCBTa1R5cGVmYWNlOjpFcXVhbCBvbiB0aGUgdmFsaWQgcG9pbnRlcnMu
CisgICAgYm9vbCB0eXBlZmFjZXNFcXVhbDsKKyAgICBpZiAobV90eXBlZmFjZSA9PSBoYXNoVGFi
bGVEZWxldGVkRm9udFZhbHVlKCkKKyAgICAgICAgfHwgYS5tX3R5cGVmYWNlID09IGhhc2hUYWJs
ZURlbGV0ZWRGb250VmFsdWUoKQorICAgICAgICB8fCAhbV90eXBlZmFjZQorICAgICAgICB8fCAh
YS5tX3R5cGVmYWNlKQorICAgICAgICB0eXBlZmFjZXNFcXVhbCA9IG1fdHlwZWZhY2UgPT0gYS5t
X3R5cGVmYWNlOworICAgIGVsc2UKKyAgICAgICAgdHlwZWZhY2VzRXF1YWwgPSBTa1R5cGVmYWNl
OjpFcXVhbChtX3R5cGVmYWNlLCBhLm1fdHlwZWZhY2UpOworCisgICAgcmV0dXJuIHR5cGVmYWNl
c0VxdWFsIAorICAgICAgICAmJiBtX3RleHRTaXplID09IGEubV90ZXh0U2l6ZQorICAgICAgICAm
JiBtX2Zha2VCb2xkID09IGEubV9mYWtlQm9sZAorICAgICAgICAmJiBtX2Zha2VJdGFsaWMgPT0g
YS5tX2Zha2VJdGFsaWM7Cit9CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBj
b25zdAoreworICAgIHVuc2lnbmVkIGggPSBTa1R5cGVmYWNlOjpVbmlxdWVJRChtX3R5cGVmYWNl
KTsKKyAgICBoIF49IDB4MDEwMTAxMDEgKiAoKHN0YXRpY19jYXN0PGludD4obV9mYWtlQm9sZCkg
PDwgMSkgfCBzdGF0aWNfY2FzdDxpbnQ+KG1fZmFrZUl0YWxpYykpOworCisgICAgLy8gVGhpcyBt
ZW1jcHkgaXMgdG8gYXZvaWQgYSByZWludGVycHJldF9jYXN0IHRoYXQgYnJlYWtzIHN0cmljdC1h
bGlhc2luZworICAgIC8vIHJ1bGVzLiBNZW1jcHkgaXMgZ2VuZXJhbGx5IG9wdGltaXplZCBlbm91
Z2ggc28gdGhhdCBwZXJmb3JtYW5jZSBkb2Vzbid0CisgICAgLy8gbWF0dGVyIGhlcmUuCisgICAg
dWludDMyX3QgdGV4dFNpemVCeXRlczsKKyAgICBtZW1jcHkoJnRleHRTaXplQnl0ZXMsICZtX3Rl
eHRTaXplLCBzaXplb2YodWludDMyX3QpKTsKKyAgICBoIF49IHRleHRTaXplQnl0ZXM7CisKKyAg
ICByZXR1cm4gaDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3ZDgzNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKQEAgLTAs
MCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhTGludXhf
aAorI2RlZmluZSBGb250UGxhdGZvcm1EYXRhTGludXhfaAorCisjaW5jbHVkZSAiU3RyaW5nSW1w
bC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworY2xhc3MgU2tQYWludDsKK2NsYXNzIFNr
VHlwZWZhY2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udERlc2NyaXB0aW9u
OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0aGUg
aGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKKy8vIGlz
IHRoZSB0dXBsZSBvZiAoZm9udCwgc2l6ZSwgLi4uZXRjKS4gSGVyZSB3ZSBhcmUganVzdCB3cmFw
cGluZyBhIFNraWEKKy8vIFNrVHlwZWZhY2UgcG9pbnRlciBhbmQgZGVhbGluZyB3aXRoIHRoZSBy
ZWZlcmVuY2UgY291bnRpbmcgZXRjLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIEZv
bnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVz
IGluIHRoZSBmb250IGNhY2hlJ3MgaGFzaCB0YWJsZXMuIFRoZSBoYXNoIHRhYmxlCisgICAgLy8g
d2lsbCBjcmVhdGUgdXMgd2l0aCB0aGlzIHN0cnVjdHVyZSwgYW5kIGl0IHdpbGwgY29tcGFyZSBv
dGhlciB2YWx1ZXMKKyAgICAvLyB0byB0aGlzICJEZWxldGVkIiBvbmUuIEl0IGV4cGVjdHMgdGhl
IERlbGV0ZWQgb25lIHRvIGJlIGRpZmZlcmVudGlhYmxlCisgICAgLy8gZnJvbSB0aGUgTlVMTCBv
bmUgKGNyZWF0ZWQgd2l0aCB0aGUgZW1wdHkgY29uc3RydWN0b3IpLCBzbyB3ZSBjYW4ndCBqdXN0
CisgICAgLy8gc2V0IGV2ZXJ5dGhpbmcgdG8gTlVMTC4KKyAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3R5cGVmYWNlKGhhc2hU
YWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAgLCBtX3RleHRTaXplKDApCisgICAgICAg
ICwgbV9mYWtlQm9sZChmYWxzZSkKKyAgICAgICAgLCBtX2Zha2VJdGFsaWMoZmFsc2UpCisgICAg
ICAgIHsgfQorCisgICAgRm9udFBsYXRmb3JtRGF0YSgpCisgICAgICAgIDogbV90eXBlZmFjZSgw
KQorICAgICAgICAsIG1fdGV4dFNpemUoMCkKKyAgICAgICAgLCBtX2Zha2VCb2xkKGZhbHNlKQor
ICAgICAgICAsIG1fZmFrZUl0YWxpYyhmYWxzZSkKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxh
dGZvcm1EYXRhKGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFsaWMp
CisgICAgICAgIDogbV90eXBlZmFjZSgwKQorICAgICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUp
CisgICAgICAgICwgbV9mYWtlQm9sZChmYWtlQm9sZCkKKyAgICAgICAgLCBtX2Zha2VJdGFsaWMo
ZmFrZUl0YWxpYykKKyAgICAgICAgeyB9CisKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqLCBmbG9h
dCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKTsKKyAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYywgZmxvYXQgdGV4dFNpemUpOwor
ICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
Ly8gUmV0dXJuIHRydWUgaWZmIHRoaXMgZm9udCBpcyBtb25vc3BhY2VkIChpLmUuIGV2ZXJ5IGds
eXBoIGhhcyBhbiBlcXVhbCB4CisgICAgLy8gYWR2YW5jZSkKKyAgICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKworICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBTZXR1cCBhIFNraWEgcGFpbnRpbmcgY29udGV4dCB0byB1c2UgdGhpcyBm
b250LgorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2b2lkIHNldHVwUGFpbnQoU2tQYWlu
dCopIGNvbnN0OworCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgIGZsb2F0IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3RleHRTaXplOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0OworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJh
dG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZWZhY2UgPT0gaGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgLy8gRklYTUU6IENvdWxkIFNrQXV0b1VucmVm
IGJlIHVzZWQgaGVyZT8KKyAgICBTa1R5cGVmYWNlKiBtX3R5cGVmYWNlOworICAgIGZsb2F0IG1f
dGV4dFNpemU7CisgICAgYm9vbCBtX2Zha2VCb2xkOworICAgIGJvb2wgbV9mYWtlSXRhbGljOwor
CisgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+KC0xKTsgfQorfTsKKworfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBpZmRlZiBGb250UGxhdGZvcm1EYXRhX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hy
b21pdW1XaW4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZh
MjVhNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFV0aWxzQ2hyb21pdW1XaW4uY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250VXRpbHNDaHJvbWl1bVdpbi5o
IgorCisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVyLmgiCisjaW5j
bHVkZSA8dW5pY29kZS9sb2NpZC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7
CisKKy8vIEEgc2ltcGxlIG1hcHBpbmcgZnJvbSBVU2NyaXB0Q29kZSB0byBmYW1pbHkgbmFtZS4g
IFRoaXMgaXMgYSBzcGFyc2UgYXJyYXksCisvLyB3aGljaCB3b3JrcyB3ZWxsIHNpbmNlIHRoZSBy
YW5nZSBvZiBVU2NyaXB0Q29kZSB2YWx1ZXMgaXMgc21hbGwuCit0eXBlZGVmIGNvbnN0IFVDaGFy
KiBTY3JpcHRUb0ZvbnRNYXBbVVNDUklQVF9DT0RFX0xJTUlUXTsKKwordm9pZCBpbml0aWFsaXpl
U2NyaXB0Rm9udE1hcChTY3JpcHRUb0ZvbnRNYXAmIHNjcmlwdEZvbnRNYXApCit7CisgICAgc3Ry
dWN0IEZvbnRNYXAgeworICAgICAgICBVU2NyaXB0Q29kZSBzY3JpcHQ7CisgICAgICAgIGNvbnN0
IFVDaGFyKiBmYW1pbHk7CisgICAgfTsKKworICAgIGNvbnN0IHN0YXRpYyBGb250TWFwIGZvbnRN
YXBbXSA9IHsKKyAgICAgICAge1VTQ1JJUFRfTEFUSU4sIEwidGltZXMgbmV3IHJvbWFuIn0sCisg
ICAgICAgIHtVU0NSSVBUX0dSRUVLLCBMInRpbWVzIG5ldyByb21hbiJ9LAorICAgICAgICB7VVND
UklQVF9DWVJJTExJQywgTCJ0aW1lcyBuZXcgcm9tYW4ifSwKKyAgICAgICAge1VTQ1JJUFRfU0lN
UExJRklFRF9IQU4sIEwic2ltc3VuIn0sCisgICAgICAgIHtVU0NSSVBUX0hJUkFHQU5BLCBMIm1z
IHBnb3RoaWMifSwKKyAgICAgICAge1VTQ1JJUFRfS0FUQUtBTkEsIEwibXMgcGdvdGhpYyJ9LAor
ICAgICAgICB7VVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSwgTCJtcyBwZ290aGljIn0sCisg
ICAgICAgIHtVU0NSSVBUX0hBTkdVTCwgTCJndWxpbSJ9LAorICAgICAgICB7VVNDUklQVF9USEFJ
LCBMInRhaG9tYSJ9LAorICAgICAgICB7VVNDUklQVF9IRUJSRVcsIEwiZGF2aWQifSwKKyAgICAg
ICAge1VTQ1JJUFRfQVJBQklDLCBMInRhaG9tYSJ9LAorICAgICAgICB7VVNDUklQVF9ERVZBTkFH
QVJJLCBMIm1hbmdhbCJ9LAorICAgICAgICB7VVNDUklQVF9CRU5HQUxJLCBMInZyaW5kYSJ9LAor
ICAgICAgICB7VVNDUklQVF9HVVJNVUtISSwgTCJyYWF2aSJ9LAorICAgICAgICB7VVNDUklQVF9H
VUpBUkFUSSwgTCJzaHJ1dGkifSwKKyAgICAgICAge1VTQ1JJUFRfT1JJWUEsIEwia2FsaW5nYSJ9
LAorICAgICAgICB7VVNDUklQVF9UQU1JTCwgTCJsYXRoYSJ9LAorICAgICAgICB7VVNDUklQVF9U
RUxVR1UsIEwiZ2F1dGFtaSJ9LAorICAgICAgICB7VVNDUklQVF9LQU5OQURBLCBMInR1bmdhIn0s
CisgICAgICAgIHtVU0NSSVBUX01BTEFZQUxBTSwgTCJrYXJ0aWthIn0sCisgICAgICAgIHtVU0NS
SVBUX0xBTywgTCJkb2tjaGFtcGEifSwKKyAgICAgICAge1VTQ1JJUFRfVElCRVRBTiwgTCJtaWNy
b3NvZnQgaGltYWxheWEifSwKKyAgICAgICAge1VTQ1JJUFRfR0VPUkdJQU4sIEwic3lsZmFlbiJ9
LAorICAgICAgICB7VVNDUklQVF9BUk1FTklBTiwgTCJzeWxmYWVuIn0sCisgICAgICAgIHtVU0NS
SVBUX0VUSElPUElDLCBMIm55YWxhIn0sCisgICAgICAgIHtVU0NSSVBUX0NBTkFESUFOX0FCT1JJ
R0lOQUwsIEwiZXVwaGVtaWEifSwKKyAgICAgICAge1VTQ1JJUFRfQ0hFUk9LRUUsIEwicGxhbnRh
Z2VuZXQgY2hlcm9rZWUifSwKKyAgICAgICAge1VTQ1JJUFRfWUksIEwibWljcm9zb2Z0IHlpIGJh
bHRpIn0sCisgICAgICAgIHtVU0NSSVBUX1NJTkhBTEEsIEwiaXNrb29sYSBwb3RhIn0sCisgICAg
ICAgIHtVU0NSSVBUX1NZUklBQywgTCJlc3RyYW5nZWxvIGVkZXNzYSJ9LAorICAgICAgICB7VVND
UklQVF9LSE1FUiwgTCJkYXVucGVuaCJ9LAorICAgICAgICB7VVNDUklQVF9USEFBTkEsIEwibXYg
Ym9saSJ9LAorICAgICAgICB7VVNDUklQVF9NT05HT0xJQU4sIEwibW9uZ29saWFuIGJhbHRpIn0s
CisgICAgICAgIHtVU0NSSVBUX01ZQU5NQVIsIEwicGFkYXVrIn0sCisgICAgICAgIC8vIEZvciBV
U0NSSVBUX0NPTU1PTiwgd2UgbWFwIGJsb2NrcyB0byBzY3JpcHRzIHdoZW4KKyAgICAgICAgLy8g
dGhhdCBtYWtlcyBzZW5zZS4KKyAgICB9OworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZW9mKGZvbnRNYXApIC8gc2l6ZW9mKGZvbnRNYXBbMF0pOyArK2kpCisgICAgICAgIHNjcmlw
dEZvbnRNYXBbZm9udE1hcFtpXS5zY3JpcHRdID0gZm9udE1hcFtpXS5mYW1pbHk7CisKKyAgICAv
LyBJbml0aWFsaXplIHRoZSBsb2NhbGUtZGVwZW5kZW50IG1hcHBpbmcuCisgICAgLy8gU2luY2Ug
Q2hyb21lIHN5bmNocm9uaXplcyB0aGUgSUNVIGRlZmF1bHQgbG9jYWxlIHdpdGggaXRzIFVJIGxv
Y2FsZSwKKyAgICAvLyB0aGlzIElDVSBsb2NhbGUgdGVsbHMgdGhlIGN1cnJlbnQgVUkgbG9jYWxl
IG9mIENocm9tZS4KKyAgICBMb2NhbGUgbG9jYWxlID0gTG9jYWxlOjpnZXREZWZhdWx0KCk7Cisg
ICAgY29uc3QgVUNoYXIqIGxvY2FsZUZhbWlseSA9IDA7CisgICAgaWYgKGxvY2FsZSA9PSBMb2Nh
bGU6OmdldEphcGFuZXNlKCkpCisgICAgICAgIGxvY2FsZUZhbWlseSA9IHNjcmlwdEZvbnRNYXBb
VVNDUklQVF9ISVJBR0FOQV07CisgICAgZWxzZSBpZiAobG9jYWxlID09IExvY2FsZTo6Z2V0S29y
ZWFuKCkpCisgICAgICAgIGxvY2FsZUZhbWlseSA9IHNjcmlwdEZvbnRNYXBbVVNDUklQVF9IQU5H
VUxdOworICAgIGVsc2UgeworICAgICAgICAvLyBVc2UgU2ltcGxpZmllZCBDaGluZXNlIGZvbnQg
Zm9yIGFsbCBvdGhlciBsb2NhbGVzIGluY2x1ZGluZworICAgICAgICAvLyBUcmFkaXRpb25hbCBD
aGluZXNlIGJlY2F1c2UgU2ltc3VuIChTQyBmb250KSBoYXMgYSB3aWRlcgorICAgICAgICAvLyBj
b3ZlcmFnZSAoY292ZXJpbmcgYm90aCBTQyBhbmQgVEMpIHRoYW4gUE1pbmdMaXUgKFRDIGZvbnQp
LgorICAgICAgICAvLyBOb3RlIHRoYXQgfGZvbnRNYXB8IGRvZXMgbm90IGhhdmUgYSBzZXBhcmF0
ZSBlbnRyeSBmb3IKKyAgICAgICAgLy8gVVNDUklQVF9UUkFESVRJT05BTF9IQU4gZm9yIHRoYXQg
cmVhc29uLgorICAgICAgICAvLyBUaGlzIGFsc28gc3BlZWRzIHVwIHRoZSBUQyB2ZXJzaW9uIG9m
IENocm9tZSB3aGVuIHJlbmRlcmluZyBTQworICAgICAgICAvLyBwYWdlcy4KKyAgICAgICAgbG9j
YWxlRmFtaWx5ID0gc2NyaXB0Rm9udE1hcFtVU0NSSVBUX1NJTVBMSUZJRURfSEFOXTsKKyAgICB9
CisgICAgaWYgKGxvY2FsZUZhbWlseSkKKyAgICAgICAgc2NyaXB0Rm9udE1hcFtVU0NSSVBUX0hB
Tl0gPSBsb2NhbGVGYW1pbHk7Cit9CisKK2NvbnN0IGludCBrVW5kZWZpbmVkQXNjZW50ID0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKworLy8gR2l2ZW4gYW4gSEZPTlQsIHJldHVy
biB0aGUgYXNjZW50LiBJZiBHZXRUZXh0TWV0cmljcyBmYWlscywKKy8vIGtVbmRlZmluZWRBc2Nl
bnQgaXMgcmV0dXJuZWQsIGluc3RlYWQuCitpbnQgZ2V0QXNjZW50KEhGT05UIGhmb250KQorewor
ICAgIEhEQyBkYyA9IEdldERDKDApOworICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVj
dChkYywgaGZvbnQpOworICAgIFRFWFRNRVRSSUMgdG07CisgICAgQk9PTCBnb3RNZXRyaWNzID0g
R2V0VGV4dE1ldHJpY3MoZGMsICZ0bSk7CisgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsK
KyAgICBSZWxlYXNlREMoMCwgZGMpOworICAgIHJldHVybiBnb3RNZXRyaWNzID8gdG0udG1Bc2Nl
bnQgOiBrVW5kZWZpbmVkQXNjZW50OworfQorCitzdHJ1Y3QgRm9udERhdGEgeworICAgIEZvbnRE
YXRhKCkKKyAgICAgICAgOiBoZm9udCgwKQorICAgICAgICAsIGFzY2VudChrVW5kZWZpbmVkQXNj
ZW50KQorICAgICAgICAsIHNjcmlwdENhY2hlKDApCisgICAgeworICAgIH0KKworICAgIEhGT05U
IGhmb250OworICAgIGludCBhc2NlbnQ7CisgICAgbXV0YWJsZSBTQ1JJUFRfQ0FDSEUgc2NyaXB0
Q2FjaGU7Cit9OworCisvLyBBZ2FpbiwgdXNpbmcgaGFzaF9tYXAgZG9lcyBub3QgZWFybiB1cyBt
dWNoIGhlcmUuICBwYWdlX2N5Y2xlcl90ZXN0IGludGwyCisvLyBnYXZlIHVzIGEgJ2JldHRlcicg
cmVzdWx0IHdpdGggbWFwIHRoYW4gd2l0aCBoYXNoX21hcCBldmVuIHRob3VnaCB0aGV5J3JlCisv
LyB3ZWxsLXdpdGhpbiAxLXNpZ21hIG9mIGVhY2ggb3RoZXIgc28gdGhhdCB0aGUgZGlmZmVyZW5j
ZSBpcyBub3Qgc2lnbmlmaWNhbnQuCisvLyBPbiB0aGUgb3RoZXIgaGFuZCwgc29tZSBwYWdlcyBp
biBpbnRsMiBzZWVtIHRvIHRha2UgbG9uZ2VyIHRvIGxvYWQgd2l0aCBtYXAKKy8vIGluIHRoZSAx
c3QgcGFzcy4gTmVlZCB0byBleHBlcmltZW50IGZ1cnRoZXIuCit0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBGb250RGF0YT4gRm9udERhdGFDYWNoZTsKKworfSAgLy8gbmFtZXNwYWNlCisKKy8vIEZJ
WE1FOiB0aGlzIGlzIGZvbnQgZmFsbGJhY2sgY29kZSB2ZXJzaW9uIDAuMQorLy8gIC0gQ292ZXIg
YWxsIHRoZSBzY3JpcHRzCisvLyAgLSBHZXQgdGhlIGRlZmF1bHQgZm9udCBmb3IgZWFjaCBzY3Jp
cHQvZ2VuZXJpYyBmYW1pbHkgZnJvbSB0aGUKKy8vICAgIHByZWZlcmVuY2UgaW5zdGVhZCBvZiBo
YXJkY29kaW5nIGluIHRoZSBzb3VyY2UuCisvLyAgICAoYXQgbGVhc3QsIHJlYWQgdmFsdWVzIGZy
b20gdGhlIHJlZ2lzdHJ5IGZvciBJRSBmb250IHNldHRpbmdzKS4KKy8vICAtIFN1cHBvcnQgZ2Vu
ZXJpYyBmYW1pbGllcyAoZnJvbSBGb250RGVzY3JpcHRpb24pCisvLyAgLSBJZiB0aGUgZGVmYXVs
dCBmb250IGZvciBhIHNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLAorLy8gICAgdHJ5IHNvbWUgbW9y
ZSBmb250cyBrbm93biB0byBzdXBwb3J0IGl0LiBGaW5hbGx5LCB3ZSBjYW4KKy8vICAgIHVzZSBF
bnVtRm9udEZhbWlsaWVzIG9yIHNpbWlsYXIgQVBJcyB0byBjb21lIHVwIHdpdGggYSBsaXN0IG9m
CisvLyAgICBmb250cyBzdXBwb3J0aW5nIHRoZSBzY3JpcHQgYW5kIGNhY2hlIHRoZSByZXN1bHQu
CisvLyAgLSBDb25zaWRlciB1c2luZyBVbmljb2RlU2V0IChvciBVbmljb2RlTWFwKSBjb252ZXJ0
ZWQgZnJvbQorLy8gICAgR0xZUEhTRVQgKEJNUCkgb3IgZGlyZWN0bHkgcmVhZCBmcm9tIHRydWV0
eXBlIGNtYXAgdGFibGVzIHRvCisvLyAgICBrZWVwIHRyYWNrIG9mIHdoaWNoIGNoYXJhY3RlciBp
cyBzdXBwb3J0ZWQgYnkgd2hpY2ggZm9udAorLy8gIC0gVXBkYXRlIHNjcmlwdF9mb250X2NhY2hl
IGluIHJlc3BvbnNlIHRvIFdNX0ZPTlRDSEFOR0UKKworY29uc3QgVUNoYXIqIGdldEZvbnRGYW1p
bHlGb3JTY3JpcHQoVVNjcmlwdENvZGUgc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSBnZW5lcmljKQor
eworICAgIHN0YXRpYyBTY3JpcHRUb0ZvbnRNYXAgc2NyaXB0Rm9udE1hcDsKKyAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAg
ICAgaW5pdGlhbGl6ZVNjcmlwdEZvbnRNYXAoc2NyaXB0Rm9udE1hcCk7CisgICAgICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHNjcmlwdCA9PSBVU0NSSVBUX0lOVkFMSURf
Q09ERSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHNjcmlwdCA8IFVTQ1JJUFRfQ09E
RV9MSU1JVCk7CisgICAgcmV0dXJuIHNjcmlwdEZvbnRNYXBbc2NyaXB0XTsKK30KKworLy8gRklY
TUU6CisvLyAgLSBIYW5kbGUgJ0luaGVyaXRlZCcsICdDb21tb24nIGFuZCAnVW5rbm93bicKKy8v
ICAgIChzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMjQvI1VzYWdlX01vZGVs
ICkKKy8vICAgIEZvciAnSW5oZXJpdGVkJyBhbmQgJ0NvbW1vbicsIHBlcmhhcHMgd2UgbmVlZCB0
bworLy8gICAgYWNjZXB0IGFub3RoZXIgcGFyYW1ldGVyIGluZGljYXRpbmcgdGhlIHByZXZpb3Vz
IGZhbWlseQorLy8gICAgYW5kIGp1c3QgcmV0dXJuIGl0LgorLy8gIC0gQWxsIHRoZSBjaGFyYWN0
ZXJzIChvciBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBwb2ludCBhIHNpbmdsZQorLy8gICAgZm9udCBj
YW4gY292ZXIpIG5lZWQgdG8gYmUgdGFrZW4gaW50byBhY2NvdW50Citjb25zdCBVQ2hhciogZ2V0
RmFsbGJhY2tGYW1pbHkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBlIGdlbmVyaWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiogY2hhckNoZWNrZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVNjcmlwdENvZGUqIHNjcmlwdENoZWNrZWQpCit7CisgICAgQVNT
RVJUKGNoYXJhY3RlcnMgJiYgY2hhcmFjdGVyc1swXSAmJiBsZW5ndGggPiAwKTsKKyAgICBVU2Ny
aXB0Q29kZSBzY3JpcHQgPSBVU0NSSVBUX0NPTU1PTjsKKworICAgIC8vIFNvbWV0aW1lcyBjaGFy
YWN0ZXJzIGNvbW1vbiB0byBzY3JpcHQgKGUuZy4gc3BhY2UpIGlzIGF0CisgICAgLy8gdGhlIGJl
Z2lubmluZyBvZiBhIHN0cmluZyBzbyB0aGF0IHdlIG5lZWQgdG8gc2tpcCB0aGVtCisgICAgLy8g
dG8gZ2V0IGEgZm9udCByZXF1aXJlZCB0byByZW5kZXIgdGhlIHN0cmluZy4KKyAgICBpbnQgaSA9
IDA7CisgICAgVUNoYXIzMiB1Y3M0ID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBzY3Jp
cHQgPT0gVVNDUklQVF9DT01NT04gfHwgc2NyaXB0ID09IFVTQ1JJUFRfSU5WQUxJRF9DT0RFKSB7
CisgICAgICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGksIGxlbmd0aCwgdWNzNCk7CisgICAgICAg
IFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOworICAgICAgICBzY3JpcHQgPSB1c2NyaXB0
X2dldFNjcmlwdCh1Y3M0LCAmZXJyKTsKKyAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlIHRoZSBl
cnJvcgorICAgIH0KKworICAgIC8vIEZvciB0aGUgZnVsbC13aWR0aCBBU0NJSSBjaGFyYWN0ZXJz
IChVK0ZGMDAgLSBVK0ZGNUUpLCB1c2UgdGhlIGZvbnQgZm9yCisgICAgLy8gSGFuIChkZXRlcm1p
bmVkIGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXkgYWJvdmUpLiBGdWxsLXdpZHRoIEFTQ0lJCisg
ICAgLy8gY2hhcmFjdGVycyBhcmUgcmF0aGVyIHdpZGVseSB1c2VkIGluIEphcGFuZXNlIGFuZCBD
aGluZXNlIGRvY3VtZW50cyBhbmQKKyAgICAvLyB0aGV5J3JlIGZ1bGx5IGNvdmVyZWQgYnkgQ2hp
bmVzZSwgSmFwYW5lc2UgYW5kIEtvcmVhbiBmb250cy4KKyAgICBpZiAoMHhGRjAwIDwgdWNzNCAm
JiB1Y3M0IDwgMHhGRjVGKQorICAgICAgICBzY3JpcHQgPSBVU0NSSVBUX0hBTjsKKworICAgIC8v
IFRoZXJlIGFyZSBhIGxvdCBvZiBjaGFyYWN0ZXJzIGluIFVTQ1JJUFRfQ09NTU9OIHRoYXQgY2Fu
IGJlIGNvdmVyZWQKKyAgICAvLyBieSBmb250cyBmb3Igc2NyaXB0cyBjbG9zZWx5IHJlbGF0ZWQg
dG8gdGhlbS4gU2VlCisgICAgLy8gaHR0cDovL3VuaWNvZGUub3JnL2NsZHIvdXRpbGl0eS9saXN0
LXVuaWNvZGVzZXQuanNwP2E9WzpTY3JpcHQ9Q29tbW9uOl0KKyAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIG1vcmUgZWZmaWNpZW50IHdpdGggYSB3aWRlciBjb3ZlcmFnZQorICAgIGlmIChzY3JpcHQg
PT0gVVNDUklQVF9DT01NT04gfHwgc2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEKSB7CisgICAg
ICAgIFVCbG9ja0NvZGUgYmxvY2sgPSB1YmxvY2tfZ2V0Q29kZSh1Y3M0KTsKKyAgICAgICAgc3dp
dGNoIChibG9jaykgeworICAgICAgICBjYXNlIFVCTE9DS19CQVNJQ19MQVRJTjoKKyAgICAgICAg
ICAgIHNjcmlwdCA9IFVTQ1JJUFRfTEFUSU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVQkxPQ0tfQ0pLX1NZTUJPTFNfQU5EX1BVTkNUVUFUSU9OOgorICAgICAgICAgICAgc2Ny
aXB0ID0gVVNDUklQVF9IQU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQkxP
Q0tfSElSQUdBTkE6CisgICAgICAgIGNhc2UgVUJMT0NLX0tBVEFLQU5BOgorICAgICAgICAgICAg
c2NyaXB0ID0gVVNDUklQVF9ISVJBR0FOQTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVCTE9DS19BUkFCSUM6CisgICAgICAgICAgICBzY3JpcHQgPSBVU0NSSVBUX0FSQUJJQzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVCTE9DS19HUkVFSzoKKyAgICAgICAg
ICAgIHNjcmlwdCA9IFVTQ1JJUFRfR1JFRUs7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBVQkxPQ0tfREVWQU5BR0FSSToKKyAgICAgICAgICAgIC8vIEZvciBEYW5kYSBhbmQgRG91
YmxlIERhbmRhIChVKzA5NjQsIFUrMDk2NSksIHVzZSBhIERldmFuYWdhcmkKKyAgICAgICAgICAg
IC8vIGZvbnQgZm9yIG5vdyBhbHRob3VnaCB0aGV5J3JlIHVzZWQgYnkgb3RoZXIgc2NyaXB0cyBh
cyB3ZWxsLgorICAgICAgICAgICAgLy8gV2l0aG91dCBhIGNvbnRleHQsIHdlIGNhbid0IGRvIGFu
eSBiZXR0ZXIuCisgICAgICAgICAgICBzY3JpcHQgPSBVU0NSSVBUX0RFVkFOQUdBUkk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVQkxPQ0tfQVJNRU5JQU46CisgICAgICAgICAg
ICBzY3JpcHQgPSBVU0NSSVBUX0FSTUVOSUFOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVUJMT0NLX0dFT1JHSUFOOgorICAgICAgICAgICAgc2NyaXB0ID0gVVNDUklQVF9HRU9S
R0lBTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVCTE9DS19LQU5OQURBOgor
ICAgICAgICAgICAgc2NyaXB0ID0gVVNDUklQVF9LQU5OQURBOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbm90aGVyIGxhbWUgd29yay1hcm91bmQgdG8g
Y292ZXIgbm9uLUJNUCBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IFVDaGFyKiBmYW1pbHkgPSBnZXRG
b250RmFtaWx5Rm9yU2NyaXB0KHNjcmlwdCwgZ2VuZXJpYyk7CisgICAgaWYgKCFmYW1pbHkpIHsK
KyAgICAgICAgaW50IHBsYW5lID0gdWNzNCA+PiAxNjsKKyAgICAgICAgc3dpdGNoIChwbGFuZSkg
eworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBmYW1pbHkgPSBMImNvZGUyMDAxIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBmYW1pbHkgPSBM
InNpbXN1bi1leHRiIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgZmFtaWx5ID0gTCJsdWNpZGEgc2FucyB1bmljb2RlIjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChjaGFyQ2hlY2tlZCkKKyAgICAgICAgKmNoYXJDaGVja2VkID0gdWNzNDsK
KyAgICBpZiAoc2NyaXB0Q2hlY2tlZCkKKyAgICAgICAgKnNjcmlwdENoZWNrZWQgPSBzY3JpcHQ7
CisgICAgcmV0dXJuIGZhbWlseTsKK30KKworLy8gQmUgYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCB0
aHJlYWQtc2FmZS4KK2Jvb2wgZ2V0RGVyaXZlZEZvbnREYXRhKGNvbnN0IFVDaGFyKiBmYW1pbHks
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3R5bGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBMT0dGT05UKiBsb2dmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBhc2Nl
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBIRk9OVCogaGZvbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqKiBzY3JpcHRDYWNoZSkgeworICAgIEFTU0VSVChsb2dm
b250KTsKKyAgICBBU1NFUlQoZmFtaWx5KTsKKyAgICBBU1NFUlQoKmZhbWlseSk7CisKKyAgICAv
LyBJdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdCB3ZSBsZWFrIGZvbnQgZGF0YSB3aGVuIHdlIGV4aXQu
CisgICAgc3RhdGljIEZvbnREYXRhQ2FjaGUgZm9udERhdGFDYWNoZTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIGNvbWVzIHVwIHByZXR0eSBoaWdoIGluIHRoZSBwcm9maWxlIHNvIHRoYXQKKyAgICAv
LyB3ZSBuZWVkIHRvIG1lYXN1cmUgd2hldGhlciB1c2luZyBTSEEyNTYgKGFmdGVyIGNvZXJjaW5n
IGFsbCB0aGUKKyAgICAvLyBmaWVsZHMgdG8gY2hhciopIGlzIGZhc3RlciB0aGFuIFN0cmluZzo6
Zm9ybWF0LgorICAgIFN0cmluZyBmb250S2V5ID0gU3RyaW5nOjpmb3JtYXQoIiUxZDolZDolbHMi
LCBzdHlsZSwgbG9nZm9udC0+bGZIZWlnaHQsIGZhbWlseSk7CisgICAgRm9udERhdGFDYWNoZTo6
aXRlcmF0b3IgaXRlciA9IGZvbnREYXRhQ2FjaGUuZmluZChmb250S2V5KTsKKyAgICBGb250RGF0
YSogZGVyaXZlZDsKKyAgICBpZiAoaXRlciA9PSBmb250RGF0YUNhY2hlLmVuZCgpKSB7CisgICAg
ICAgIEFTU0VSVCh3Y3NsZW4oZmFtaWx5KSA8IExGX0ZBQ0VTSVpFKTsKKyAgICAgICAgd2NzY3B5
X3MobG9nZm9udC0+bGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUsIGZhbWlseSk7CisgICAgICAgIC8v
IEZJWE1FOiBDcmVhdGVGb250SW5kaXJlY3QgYWx3YXlzIGNvbWVzIHVwIHdpdGgKKyAgICAgICAg
Ly8gYSBmb250IGV2ZW4gaWYgdGhlcmUncyBubyBmb250IG1hdGNoaW5nIHRoZSBuYW1lLiBOZWVk
IHRvCisgICAgICAgIC8vIGNoZWNrIGl0IGFnYWluc3Qgd2hhdCB3ZSBhY3R1YWxseSB3YW50IChh
cyBpcyBkb25lIGluCisgICAgICAgIC8vIEZvbnRDYWNoZVdpbi5jcHApCisgICAgICAgIHBhaXI8
Rm9udERhdGFDYWNoZTo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gZm9udERhdGFDYWNoZS5hZGQo
Zm9udEtleSwgRm9udERhdGEoKSk7CisgICAgICAgIGRlcml2ZWQgPSAmZW50cnkuZmlyc3QtPnNl
Y29uZDsKKyAgICAgICAgZGVyaXZlZC0+aGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QobG9nZm9u
dCk7CisgICAgICAgIC8vIEdldEFzY2VudCBtYXkgcmV0dXJuIGtVbmRlZmluZWRBc2NlbnQsIGJ1
dCB3ZSBzdGlsbCB3YW50IHRvCisgICAgICAgIC8vIGNhY2hlIGl0IHNvIHRoYXQgd2Ugd29uJ3Qg
aGF2ZSB0byBjYWxsIENyZWF0ZUZvbnRJbmRpcmVjdCBvbmNlCisgICAgICAgIC8vIG1vcmUgZm9y
IEhGT05UIG5leHQgdGltZS4KKyAgICAgICAgZGVyaXZlZC0+YXNjZW50ID0gZ2V0QXNjZW50KGRl
cml2ZWQtPmhmb250KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXJpdmVkID0gJml0ZXItPnNl
Y29uZDsKKyAgICAgICAgLy8gTGFzdCB0aW1lLCBHZXRBc2NlbnQgZmFpbGVkIHNvIHRoYXQgb25s
eSBIRk9OVCB3YXMKKyAgICAgICAgLy8gY2FjaGVkLiBUcnkgb25jZSBtb3JlIGFzc3VtaW5nIHRo
YXQgVHJ5UHJlbG9hZEZvbnQKKyAgICAgICAgLy8gd2FzIGNhbGxlZCBieSBhIGNhbGxlciBiZXR3
ZWVuIGNhbGxzLgorICAgICAgICBpZiAoa1VuZGVmaW5lZEFzY2VudCA9PSBkZXJpdmVkLT5hc2Nl
bnQpCisgICAgICAgICAgICBkZXJpdmVkLT5hc2NlbnQgPSBnZXRBc2NlbnQoZGVyaXZlZC0+aGZv
bnQpOworICAgIH0KKyAgICAqaGZvbnQgPSBkZXJpdmVkLT5oZm9udDsKKyAgICAqYXNjZW50ID0g
ZGVyaXZlZC0+YXNjZW50OworICAgICpzY3JpcHRDYWNoZSA9ICYoZGVyaXZlZC0+c2NyaXB0Q2Fj
aGUpOworICAgIHJldHVybiAqYXNjZW50ICE9IGtVbmRlZmluZWRBc2NlbnQ7Cit9CisKK2ludCBn
ZXRTdHlsZUZyb21Mb2dmb250KGNvbnN0IExPR0ZPTlQqIGxvZ2ZvbnQpIHsKKyAgICAvLyBGSVhN
RTogY29uc2lkZXIgZGVmaW5pbmcgVU5ERUZJTkVEIG9yIElOVkFMSUQgZm9yIHN0eWxlIGFuZAor
ICAgIC8vICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGl0IHdoZW4gbG9nZm9udCBpcyAwCisg
ICAgaWYgKCFsb2dmb250KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gRm9udFN0eWxlTm9ybWFsOworICAgIH0KKyAgICByZXR1cm4gKGxvZ2ZvbnQtPmxm
SXRhbGljID8gRm9udFN0eWxlSXRhbGljIDogRm9udFN0eWxlTm9ybWFsKSB8CisgICAgICAgICAg
IChsb2dmb250LT5sZlVuZGVybGluZSA/IEZvbnRTdHlsZVVuZGVybGluZWQgOiBGb250U3R5bGVO
b3JtYWwpIHwKKyAgICAgICAgICAgKGxvZ2ZvbnQtPmxmV2VpZ2h0ID49IDcwMCA/IEZvbnRTdHls
ZUJvbGQgOiBGb250U3R5bGVOb3JtYWwpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHND
aHJvbWl1bVdpbi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRp
bHNDaHJvbWl1bVdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYTk2
NGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRVdGlsc0Nocm9taXVtV2luLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAwNiwgMjAwNywgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBBIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBmb250IGhhbmRsaW5nLgorCisjaWZuZGVm
IEZvbnRVdGlsc1dpbl9oCisjZGVmaW5lIEZvbnRVdGlsc1dpbl9oCisKKyNpbmNsdWRlIDx1c3Ax
MC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUmV0dXJuIGEgZm9udCBmYW1pbHkgdGhhdCBzdXBwb3J0
cyBhIHNjcmlwdCBhbmQgYmVsb25ncyB0byB8Z2VuZXJpY3wgZm9udAorLy8gZmFtaWx5LiAgSXQg
Y2FuIHJldHVybiBOVUxMIGFuZCBhIGNhbGxlciBoYXMgdG8gaW1wbGVtZW50IGl0cyBvd24gZmFs
bGJhY2suCitjb25zdCBVQ2hhciogZ2V0Rm9udEZhbWlseUZvclNjcmlwdChVU2NyaXB0Q29kZSwg
Rm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSk7CisKKy8vIFJldHVybiBhIGZvbnQg
ZmFtaWx5IHRoYXQgY2FuIHJlbmRlciB8Y2hhcmFjdGVyc3wgYmFzZWQgb24KKy8vIHdoYXQgc2Ny
aXB0IGNoYXJhY3RlcnMgYmVsb25nIHRvLiBXaGVuIGNoYXJfY2hlY2tlZCBpcyBub24tTlVMTCwK
Ky8vIGl0J3MgZmlsbGVkIHdpdGggdGhlIGNoYXJhY3RlciB1c2VkIHRvIGRldGVybWluZSB0aGUg
c2NyaXB0LgorLy8gV2hlbiBzY3JpcHRfY2hlY2tlZCBpcyBub24tTlVMTCwgdGhlIHNjcmlwdCB1
c2VkIHRvIGRldGVybWluZQorLy8gdGhlIGZhbWlseSBpcyByZXR1cm5lZC4KKy8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIG5lZWRzIGEgdG90YWwgb3ZlcmhhdWwuCitjb25zdCBVQ2hhciogZ2V0RmFs
bGJhY2tGYW1pbHkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyKiBjaGFyQ2hlY2tlZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU2NyaXB0Q29kZSogc2NyaXB0Q2hlY2tl
ZCk7CisKKy8vIERlcml2ZSBhIG5ldyBIRk9OVCBieSByZXBsYWNpbmcgbGZGYWNlTmFtZSBvZiBM
T0dGT05UIHdpdGggfGZhbWlseXwsCisvLyBjYWxjdWxhdGUgdGhlIGFzY2VudCBmb3IgdGhlIGRl
cml2ZWQgSEZPTlQsIGFuZCBpbml0aWFsaXplIFNDUklQVF9DQUNIRQorLy8gaW4gRm9udERhdGEu
CisvLyB8c3R5bGV8IGlzIG9ubHkgdXNlZCBmb3IgY2FjaGUga2V5IGdlbmVyYXRpb24uIHxzdHls
ZXwgaXMKKy8vIGJpdC13aXNlIE9SIG9mIEJPTEQoMSksIFVOREVSTElORUQoMikgYW5kIElUQUxJ
Qyg0KSBhbmQKKy8vIHNob3VsZCBtYXRjaCB3aGF0J3MgY29udGFpbmVkIGluIExPR0ZPTlQuIEl0
IHNob3VsZCBiZSBjYWxjdWxhdGVkCisvLyBieSBjYWxsaW5nIEdldFN0eWxlRnJvbUxvZ0ZvbnQu
CisvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBmb250IGlzIG5vdCBhY2Nlc3NpYmxlLCBpbiB3aGlj
aCBjYXNlIHxhc2NlbnR8IGZpZWxkCisvLyBvZiB8Zm9udGRhdGF8IGlzIHNldCB0byBrVW5kZWZp
bmVkQXNjZW50LgorLy8gQmUgYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCB0aHJlYWQtc2FmZS4KKy8v
IEZJWE1FOiBJbnN0ZWFkIG9mIGhhdmluZyB0aHJlZSBvdXQgcGFyYW1zLCB3ZSdkIGJldHRlciBo
YXZlIG9uZQorLy8gKHwqRm9udERhdGF8KSwgYnV0IHNvbWVob3cgaXQgbXlzdGVyaW91c2x5IG1l
c3NlcyB1cCB0aGUgbGF5b3V0IGZvcgorLy8gY2VydGFpbiBjb21wbGV4IHNjcmlwdCBwYWdlcyAo
ZS5nLiBoaS53aWtpcGVkaWEub3JnKSBhbmQgYWxzbyBjcmFzaGVzCisvLyBhdCB0aGUgc3RhcnQt
dXAgaWYgcmVjZW50bHkgdmlzaXRlZCBwYWdlIGxpc3QgaW5jbHVkZXMgcGFnZXMgd2l0aCBjb21w
bGV4CisvLyBzY3JpcHRzIGluIHRoZWlyIHRpdGxlLiBNb3Jlb3Zlciwgc29tZWhvdyB0aGUgdmVy
eSBmaXJzdC1wYXNzIG9mCisvLyBpbnRsMiBwYWdlLWN5Y2xlciB0ZXN0IGlzIG5vdGljZWFibHkg
c2xvd2VyIHdpdGggb25lIG91dCBwYXJhbSB0aGFuCisvLyB0aGUgY3VycmVudCB2ZXJzaW9uIGFs
dGhvdWdoIHRoZSBzdWJzZXF1ZW50IDkgcGFzc2VzIHRha2UgYWJvdXQgdGhlCisvLyBzYW1lIHRp
bWUuCitib29sIGdldERlcml2ZWRGb250RGF0YShjb25zdCBVQ2hhciogZmFtaWx5LCBpbnQgc3R5
bGUsIExPR0ZPTlQqLCBpbnQqIGFzY2VudCwgSEZPTlQqLCBTQ1JJUFRfQ0FDSEUqKik7CisKK2Vu
dW0geworICAgIEZvbnRTdHlsZU5vcm1hbCA9IDAsCisgICAgRm9udFN0eWxlQm9sZCA9IDEsCisg
ICAgRm9udFN0eWxlSXRhbGljID0gMiwKKyAgICBGb250U3R5bGVVbmRlcmxpbmVkID0gNAorfTsK
KworLy8gRGVyaXZlIHN0eWxlIChiaXQtd2lzZSBPUiBvZiBGT05UX1NUWUxFX0JPTEQsIEZPTlRf
U1RZTEVfVU5ERVJMSU5FRCwgYW5kCisvLyBGT05UX1NUWUxFX0lUQUxJQykgZnJvbSBMT0dGT05U
LiBSZXR1cm5zIDAgaWYgfCpsb2dmb250fCBpcyBOVUxMLgoraW50IGdldFN0eWxlRnJvbUxvZ2Zv
bnQoY29uc3QgTE9HRk9OVCopOworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
IC8vIEZvbnRVdGlsc1dpbl9oCg==
</data>
<flag name="review"
          id="12728"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>