<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>6151</bug_id>
          
          <creation_ts>2005-02-22 00:52:26 +0300</creation_ts>
          <short_desc>Патчи для улучшения визуального качества системы печати</short_desc>
          <delta_ts>2005-07-13 15:47:27 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>firefox</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>legion</cc>
    
    <cc>rauty</cc>
    
    <cc>sbolshakov</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>22188</commentid>
    <comment_count>0</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2005-02-22 00:52:26 +0300</bug_when>
    <thetext>По мотивам https://bugzilla.mozilla.org/show_bug.cgi?id=234035 и
https://bugzilla.mozilla.org/show_bug.cgi?id=190031 прикладываю 2 патчика,
исправляющие глюки системы печати mozilla - теперь предпросмотр и печать
нормально выглядят (т.е. буквы друг на друга не налазят).

Прикладывать их надо в след. порядке:
# see 190031                                                                   
                         
Patch98:        190031.patch.9.branch3.patch                                   
                         
# see 234035 for details                                                       
                         
Patch99:        234035.patch.4xftonly.patch

...

%patch98 -p0                                                                   
                         
%patch99 -p0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22189</commentid>
    <comment_count>1</comment_count>
      <attachid>752</attachid>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2005-02-22 00:55:20 +0300</bug_when>
    <thetext>Created attachment 752
see #190031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22190</commentid>
    <comment_count>2</comment_count>
      <attachid>753</attachid>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2005-02-22 00:57:11 +0300</bug_when>
    <thetext>Created attachment 753
see #234035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22823</commentid>
    <comment_count>3</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2005-03-29 00:16:58 +0400</bug_when>
    <thetext>Вроде помогло. Теперь печатает намного лучше :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22841</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2005-03-29 16:15:14 +0400</bug_when>
    <thetext>bug CLOSED ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22845</commentid>
    <comment_count>5</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2005-03-29 16:42:43 +0400</bug_when>
    <thetext>Для меня CLOSED.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>752</attachid>
            <date>2005-02-22 00:55:20 +0300</date>
            <delta_ts>2005-02-22 00:55:20 +0300</delta_ts>
            <desc>see #190031</desc>
            <filename>190031.patch.9.branch3</filename>
            <type>text/plain</type>
            <size>131446</size>
            <attacher name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvbmZpZ3VyZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9tb3ppbGxh
L2NvbmZpZ3VyZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzM1LjIuMTEKZGlmZiAtdSAt
NyAtcCAtcjEuMTMzNS4yLjExIGNvbmZpZ3VyZS5pbgotLS0gY29uZmlndXJlLmluCTEyIE9jdCAy
MDA0IDA0OjEzOjI5IC0wMDAwCTEuMTMzNS4yLjExCisrKyBjb25maWd1cmUuaW4JMTcgT2N0IDIw
MDQgMTE6MDk6NDYgLTAwMDAKQEAgLTM0MTksMTQgKzM0MTksMTggQEAgZG5sID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQogZG5sID0gWGZ0CiBkbmwgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIE1PWl9BUkdfRU5BQkxF
X0JPT0woeGZ0LAogWyAgLS1lbmFibGUteGZ0ICAgICAgICAgICAgRW5hYmxlIFhmdCBzdXBwb3J0
IF0sCiAgICAgTU9aX0VOQUJMRV9YRlQ9MSwKICAgICBNT1pfRU5BQkxFX1hGVD0gKQogCitpZiB0
ZXN0ICIkTU9aX0VOQUJMRV9YRlQiICYmIHRlc3QgIiRNT1pfRU5BQkxFX0ZSRUVUWVBFMiI7IHRo
ZW4KKyAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBlbmFibGUgWEZUIGFuZCBGUkVFVFlQRTIgYXQg
dGhlIHNhbWUgdGltZS5dKQorZmkKKwogaWYgdGVzdCAiJE1PWl9FTkFCTEVfWEZUIgogdGhlbgog
ICAgIEFDX0RFRklORShNT1pfRU5BQkxFX1hGVCkKICAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhNT1pf
WEZULCB4ZnQpCiAgICAgaWYgdGVzdCAiJE1PWl9FTkFCTEVfR1RLMiI7IHRoZW4KICAgICAgICAg
UEtHX0NIRUNLX01PRFVMRVMoX1BBTkdPQ0hLLCBwYW5nbyA+PSAxLjEuMCkKICAgICBmaQpJbmRl
eDogZ2Z4L2lkbC9NYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9tb3pp
bGxhL2dmeC9pZGwvTWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAt
dSAtNyAtcCAtcjEuMzAgTWFrZWZpbGUuaW4KLS0tIGdmeC9pZGwvTWFrZWZpbGUuaW4JMTQgSmFu
IDIwMDQgMTI6NTY6MzggLTAwMDAJMS4zMAorKysgZ2Z4L2lkbC9NYWtlZmlsZS5pbgkxNyBPY3Qg
MjAwNCAxMTowOTo0NiAtMDAwMApAQCAtMzUsMjIgKzM1LDI3IEBAIFhQSURMU1JDUwk9IFwKIAkJ
bnNJRm9udExpc3QuaWRsIFwKIAkJbnNJU2NyaXB0YWJsZVJlZ2lvbi5pZGwgXAogCQluc0lTY3Jl
ZW4uaWRsIFwKIAkJbnNJU2NyZWVuTWFuYWdlci5pZGwgXAogCQluc0lQcmludE9wdGlvbnMuaWRs
IFwKIAkJbnNJUHJpbnRTZXR0aW5ncy5pZGwgXAogCQluc0lQcmludFNldHRpbmdzU2VydmljZS5p
ZGwgXAotCQluc0lGb250Q2F0YWxvZ1NlcnZpY2UuaWRsIFwKLQkJbnNJRnJlZVR5cGUyLmlkbCBc
CiAJCW5zSVByaW50U2Vzc2lvbi5pZGwgXAogCQlnZnhJRm9ybWF0cy5pZGwgXAogCQlnZnhJSW1h
Z2VGcmFtZS5pZGwgXAogCQlnZnh0eXBlcy5pZGwgXAogCQkkKE5VTEwpCiAKK2lmZGVmIE1PWl9F
TkFCTEVfRlJFRVRZUEUyCitYUElETFNSQ1MJKz0gXAorCQluc0lGb250Q2F0YWxvZ1NlcnZpY2Uu
aWRsIFwKKwkJbnNJRnJlZVR5cGUyLmlkbCBcCisJCSQoTlVMTCkKK2VuZGlmCisKIGlmbmVxICgs
JChmaWx0ZXIgbWFjIGNvY29hLCQoTU9aX0dGWF9UT09MS0lUKSkpCiBYUElETFNSQ1MgKz0gbnNJ
UHJpbnRTZXR0aW5nc1guaWRsIFwKIAkJbnNJUHJpbnRTZXNzaW9uWC5pZGwgXAogCQkkKE5VTEwp
CiBlbmRpZgogCiBpZmVxICgkKE1PWl9HRlhfVE9PTEtJVCksd2luZG93cykKSW5kZXg6IGdmeC9z
cmMvZ3RrL01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L21vemlsbGEv
Z2Z4L3NyYy9ndGsvTWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA4CmRpZmYg
LXUgLTcgLXAgLXIxLjEwOCBNYWtlZmlsZS5pbgotLS0gZ2Z4L3NyYy9ndGsvTWFrZWZpbGUuaW4J
MTAgTm92IDIwMDMgMTI6MjQ6NTEgLTAwMDAJMS4xMDgKKysrIGdmeC9zcmMvZ3RrL01ha2VmaWxl
LmluCTE3IE9jdCAyMDA0IDExOjA5OjQ2IC0wMDAwCkBAIC02MiwyMSArNjIsMjYgQEAgZW5kaWYK
IE5BVElWRV9USEVNRV9TVVBQT1JUID0gMQogCiBDU1JDUwkJPSBuc1ByaW50ZEdUSy5jCiAKICMg
Q29kZSBzaGFyZWQgYmV0d2VlbiBHVEsrLCBYbGliIGFuZCBYcHJpbnQgZ2Z4IG1vZHVsZXMKIFgx
MVNIQVJFRF9MQ1BQU1JDUyA9IFwKIAkJbnNBbnRpQWxpYXNlZEdseXBoLmNwcCBcCi0JCW5zRm9u
dEZyZWVUeXBlLmNwcCBcCi0JCW5zRlQyRm9udE5vZGUuY3BwIFwKLQkJbnNGVDJGb250Q2F0YWxv
Zy5jcHAgXAogCQluc1gxMUFscGhhQmxlbmQuY3BwIFwKIAkJbnNYRm9udEFBU2NhbGVkQml0bWFw
LmNwcCBcCiAJCW5zWEZvbnROb3JtYWwuY3BwIFwKIAkJJChOVUxMKQorCitpZmRlZiBNT1pfRU5B
QkxFX0ZSRUVUWVBFMgorWDExU0hBUkVEX0xDUFBTUkNTICs9IFwKKwkJbnNGb250RnJlZVR5cGUu
Y3BwIFwKKwkJbnNGVDJGb250Tm9kZS5jcHAgXAorCQluc0ZUMkZvbnRDYXRhbG9nLmNwcCBcCisJ
CSQoTlVMTCkKK2VuZGlmCiAgICAgICAgICAgICAgICAgCiBDUFBTUkNTCQk9IFwKIAkJbnNEZXZp
Y2VDb250ZXh0R1RLLmNwcCBcCiAJCW5zRGV2aWNlQ29udGV4dFNwZWNGYWN0b3J5Ry5jcHAgXAog
CQluc0RldmljZUNvbnRleHRTcGVjRy5jcHAgXAogCQluc0RyYXdpbmdTdXJmYWNlR1RLLmNwcCBc
CiAJCW5zR2Z4RmFjdG9yeUdUSy5jcHAgXApAQCAtMjA0LDIxICsyMDksMjEgQEAgRVhUUkFfRFNP
X0xET1BUUyArPSBcCiBlbmRpZgogCiBMT0NBTF9JTkNMVURFUwk9IFwKIAkJLUkuLi8uLiBcCiAJ
CS1JJChzcmNkaXIpLy4gXAogCQktSSQoc3JjZGlyKS8uLiBcCiAJCS1JJChzcmNkaXIpLy4uL3No
YXJlZCBcCi0JCS1JJChzcmNkaXIpLy4uL2ZyZWV0eXBlIFwKIAkJLUkkKHNyY2RpcikvLi4veDEx
c2hhcmVkIFwKIAkJJChNT1pfWEZUX0NGTEFHUykgXAogCQkkKE5VTEwpCiAKIGlmZGVmIE1PWl9F
TkFCTEVfRlJFRVRZUEUyCiBJTkNMVURFUyAgICAgICAgKz0gJChGVDJfQ0ZMQUdTKQorTE9DQUxf
SU5DTFVERVMgICAgICAgICs9IC1JJChzcmNkaXIpLy4uL2ZyZWV0eXBlCiBlbmRpZgogCiBpZmRl
ZiBNT1pfRU5BQkxFX1hQUklOVAogZXhwb3J0OjogJChhZGRwcmVmaXggJChzcmNkaXIpLy4uL3hw
cmludC8sJChYUFVfTENTUkNTKSkgJChhZGRwcmVmaXggJChzcmNkaXIpLy4uL3gxMXNoYXJlZC8s
JChYMTFTSEFSRURfTENQUFNSQ1MpKQogCSQoSU5TVEFMTCkgJF4gLgogZWxzZQogZXhwb3J0Ojog
JChhZGRwcmVmaXggJChzcmNkaXIpLy4uL3gxMXNoYXJlZC8sJChYMTFTSEFSRURfTENQUFNSQ1Mp
KQpJbmRleDogZ2Z4L3NyYy9ndGsvbnNGb250TWV0cmljc0dUSy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL2d0ay9uc0ZvbnRNZXRyaWNzR1RLLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNjgKZGlmZiAtdSAtNyAtcCAtcjEuMjY4IG5zRm9udE1l
dHJpY3NHVEsuY3BwCi0tLSBnZngvc3JjL2d0ay9uc0ZvbnRNZXRyaWNzR1RLLmNwcAk5IE1hciAy
MDA0IDE0OjE0OjU0IC0wMDAwCTEuMjY4CisrKyBnZngvc3JjL2d0ay9uc0ZvbnRNZXRyaWNzR1RL
LmNwcAkxNyBPY3QgMjAwNCAxMToxMDowMCAtMDAwMApAQCAtNTgsMTYgKzU4LDE4IEBACiAjaW5j
bHVkZSAibnNQcmludGZDU3RyaW5nLmgiCiAjaW5jbHVkZSAibnNwci5oIgogI2luY2x1ZGUgIm5z
SGFzaHRhYmxlLmgiCiAjaW5jbHVkZSAibnNSZWFkYWJsZVV0aWxzLmgiCiAjaW5jbHVkZSAibnNB
U3RyaW5nLmgiCiAjaW5jbHVkZSAibnNYUElETFN0cmluZy5oIgogI2luY2x1ZGUgIm5zRm9udERl
YnVnLmgiCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKICNpbmNsdWRlICJuc0ZUMkZvbnRO
b2RlLmgiCiAjaW5jbHVkZSAibnNGb250RnJlZVR5cGUuaCIKKyNlbmRpZgogI2luY2x1ZGUgIm5z
WEZvbnROb3JtYWwuaCIKICNpbmNsdWRlICJuc1gxMUFscGhhQmxlbmQuaCIKICNpbmNsdWRlICJu
c1hGb250QUFTY2FsZWRCaXRtYXAuaCIKICNpbmNsdWRlICJuc1VuaWNoYXJVdGlscy5oIgogI2lm
ZGVmIEVOQUJMRV9YX0ZPTlRfQkFOTklORwogI2luY2x1ZGUgPHJlZ2V4Lmg+CiAjZW5kaWYgLyog
RU5BQkxFX1hfRk9OVF9CQU5OSU5HICovCkBAIC05OCwyOCArMTAwLDM0IEBAIHN0YXRpYyBQUkxv
Z01vZHVsZUluZm8gKiBGb250TWV0cmljc0dUS0wKIC8vIHRoaXMgZmFjdG9yIGxhcmdlciB0aGFu
IHRoZSBoZWlnaHQgb2YgdGhlIGRpc3BsYXksIGl0J3MgY2xhbXBlZCB0bwogLy8gdGhhdCB2YWx1
ZSBpbnN0ZWFkIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KICNkZWZpbmUgRk9OVF9NQVhfRk9OVF9T
Q0FMRSAyCiAKICN1bmRlZiBOT0lTWV9GT05UUwogI3VuZGVmIFJFQUxMWV9OT0lTWV9GT05UUwog
CisjaWZuZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUyCitzdGF0aWMgUFJVaW50MzIgZ0ZvbnREZWJ1
ZyA9IDAgfCBOU19GT05UX0RFQlVHX0ZPTlRfU0NBTjsKKyNlbmRpZgorCiBzdHJ1Y3QgbnNGb250
Q2hhclNldE1hcDsKIHN0cnVjdCBuc0ZvbnRGYW1pbHlOYW1lOwogc3RydWN0IG5zRm9udFByb3Bl
cnR5TmFtZTsKIHN0cnVjdCBuc0ZvbnRTdHlsZTsKIHN0cnVjdCBuc0ZvbnRXZWlnaHQ7CiBzdHJ1
Y3QgbnNGb250TGFuZ0dyb3VwOwogCiBzdHJ1Y3QgbnNGb250Q2hhclNldEluZm8KIHsKICAgY29u
c3QgY2hhciogICAgICAgICAgICBtQ2hhclNldDsKICAgbnNGb250Q2hhclNldENvbnZlcnRlciBD
b252ZXJ0OwogICBQUlVpbnQ4ICAgICAgICAgICAgICAgIG1TcGVjaWFsVW5kZXJsaW5lOworI2lm
ZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUyCiAgIFBSSW50MzIgICAgICAgICAgICAgICAgbUNvZGVS
YW5nZTFCaXRzOwogICBQUkludDMyICAgICAgICAgICAgICAgIG1Db2RlUmFuZ2UyQml0czsKKyNl
bmRpZgogICBQUlVpbnQxNiogICAgICAgICAgICAgIG1DQ01hcDsKICAgbnNJVW5pY29kZUVuY29k
ZXIqICAgICBtQ29udmVydGVyOwogICBuc0lBdG9tKiAgICAgICAgICAgICAgIG1MYW5nR3JvdXA7
CiAgIFBSQm9vbCAgICAgICAgICAgICAgICAgbUluaXRlZFNpemVJbmZvOwogICBQUkludDMyICAg
ICAgICAgICAgICAgIG1PdXRsaW5lU2NhbGVNaW47CiAgIFBSSW50MzIgICAgICAgICAgICAgICAg
bUFBQml0bWFwU2NhbGVNaW47CiAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbUFBQml0bWFwT3Zl
cnNpemU7CkBAIC0yMTYsMTQgKzIyNCwxNSBAQCBzdGF0aWMgZ2ludCBEb3VibGVCeXRlQ29udmVy
dChuc0ZvbnRDaGFyCiAgIGNvbnN0IFBSVW5pY2hhciogYVNyY0J1ZiwgUFJJbnQzMiBhU3JjTGVu
LCBjaGFyKiBhRGVzdEJ1ZiwgUFJJbnQzMiBhRGVzdExlbik7CiBzdGF0aWMgZ2ludCBJU08xMDY0
NkNvbnZlcnQobnNGb250Q2hhclNldEluZm8qIGFTZWxmLCBYRm9udFN0cnVjdCogYUZvbnQsCiAg
IGNvbnN0IFBSVW5pY2hhciogYVNyY0J1ZiwgUFJJbnQzMiBhU3JjTGVuLCBjaGFyKiBhRGVzdEJ1
ZiwgUFJJbnQzMiBhRGVzdExlbik7CiAKIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBVbmtub3du
ID0geyBuc251bGwgfTsKIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBTcGVjaWFsID0geyBuc251
bGwgfTsKIAorI2lmZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUyCiBzdGF0aWMgbnNGb250Q2hhclNl
dEluZm8gVVNBU0NJSSA9CiAgIHsgInVzLWFzY2lpIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAsCiAg
ICAgVFRfT1MyX0NQUjFfTEFUSU4xIHwgVFRfT1MyX0NQUjFfTUFDX1JPTUFOLAogICAgIFRUX09T
Ml9DUFIyX0NBX0ZSRU5DSCB8ICBUVF9PUzJfQ1BSMl9QT1JUVUdFU0UKICAgICB8IFRUX09TMl9D
UFIyX1dFX0xBVElOMSB8ICBUVF9PUzJfQ1BSMl9VUyB9Owogc3RhdGljIG5zRm9udENoYXJTZXRJ
bmZvIElTTzg4NTkxID0KICAgeyAiSVNPLTg4NTktMSIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwLApA
QCAtNDIxLDE1ICs0MzAsMTY4IEBAIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBNYXRoZW1hdGlj
YTIgPQogICAgeyAieC1tYXRoZW1hdGljYTIiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwgVFRfT1My
X0NQUjFfU1lNQk9MLCAwfTsKIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBNYXRoZW1hdGljYTMg
PQogICAgeyAieC1tYXRoZW1hdGljYTMiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwgVFRfT1MyX0NQ
UjFfU1lNQk9MLCAwfTsKIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBNYXRoZW1hdGljYTQgPQog
ICAgeyAieC1tYXRoZW1hdGljYTQiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwgVFRfT1MyX0NQUjFf
U1lNQk9MLCAwfTsKIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBNYXRoZW1hdGljYTUgPQogICAg
eyAieC1tYXRoZW1hdGljYTUiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwgVFRfT1MyX0NQUjFfU1lN
Qk9MLCAwfTsKLSNlbmRpZgorI2VuZGlmIC8qIE1BVEhNTCAqLworCisjZWxzZQorCitzdGF0aWMg
bnNGb250Q2hhclNldEluZm8gVVNBU0NJSSA9CisgIHsgInVzLWFzY2lpIiwgU2luZ2xlQnl0ZUNv
bnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBJU084ODU5MSA9CisgIHsgIklT
Ty04ODU5LTEiLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJ
bmZvIElTTzg4NTkyID0KKyAgeyAiSVNPLTg4NTktMiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07
CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1OTMgPQorICB7ICJJU08tODg1OS0zIiwg
U2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBJU084ODU5
NCA9CisgIHsgIklTTy04ODU5LTQiLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5z
Rm9udENoYXJTZXRJbmZvIElTTzg4NTk1ID0KKyAgeyAiSVNPLTg4NTktNSIsIFNpbmdsZUJ5dGVD
b252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1OTYgPQorICB7ICJJ
U08tODg1OS02IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0
SW5mbyBJU084ODU5Njh4ID0KKyAgeyAieC1pc28tODg1OS02LTgteCIsIFNpbmdsZUJ5dGVDb252
ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1OTYxNiA9CisgIHsgIngt
aXNvLTg4NTktNi0xNiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hh
clNldEluZm8gSUJNMTA0NiA9CisgIHsgIngtSUJNMTA0NiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAw
IH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1OTcgPQorICB7ICJJU08tODg1OS03
IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBJU084
ODU5OCA9CisgIHsgIklTTy04ODU5LTgiLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9OworLy8gY2hh
bmdlIGZyb20gIAorLy8geyAiSVNPLTg4NTktOCIsIFNpbmdsZUJ5dGVDb252ZXJ0UmV2ZXJzZSwg
MCwgMCwgMCB9OworLy8gdW50aWxsIHdlIGZpeCB0aGUgbGF5b3V0IGFuZCBlbnN1cmUgd2Ugb25s
eSBjYWxsIHRoaXMgd2l0aCBwdXJlIFJUTCB0ZXh0CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8g
SVNPODg1OTkgPQorICB7ICJJU08tODg1OS05IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKKy8v
IG5vIHN1cHBvcnQgZm9yIGlzby04ODU5LTEwIChOb3JkaWMvSWNlbGFuZGljKSBjdXJyZW50bHkK
Ky8vIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBJU084ODU5MTAgPQorLy8geyAiSVNPLTg4NTkt
MTAiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwKKy8vICAgMCwgVFRfT1MyX0NQUjJfTk9SRElDIHwg
VFRfT1MyX0NQUjJfSUNFTEFORElDIH07CisvLyBubyBzdXBwb3J0IGZvciBpc28tODg1OS0xMiAo
VmlldG5hbWVzZSkgY3VycmVudGx5CisvLyBzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1
OTEyID0KKy8vIHsgIklTTy04ODU5LTEyIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAsCisvLyAgIFRU
X09TMl9DUFIxX1ZJRVROQU1FU0UsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBJU084
ODU5MTMgPQorICB7ICJJU08tODg1OS0xMyIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0
aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1OTE1ID0KKyAgeyAiSVNPLTg4NTktMTUiLCBTaW5n
bGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIEpJU1gwMjAxID0K
KyAgeyAiamlzXzAyMDEiLCBTaW5nbGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENo
YXJTZXRJbmZvIEtPSThSID0KKyAgeyAiS09JOC1SIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsK
K3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBLT0k4VSA9CisgIHsgIktPSTgtVSIsIFNpbmdsZUJ5
dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gVElTNjIwMiA9CisvKiBB
ZGRlZCB0byBzdXBwb3J0IHRoYWkgY29udGV4dCBzZW5zaXRpdmUgc2hhcGluZyBpZgorICogQ1RM
IGV4dGVuc2lvbiBpcyBpcyBpbiBmb3JjZSAqLworI2lmZGVmIFNVTkNUTAorICB7ICJ0aXM2MjAt
MiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CisjZWxzZQorICB7ICJ3aW5kb3dzLTg3NCIsIFNp
bmdsZUJ5dGVDb252ZXJ0LCAwIH07CisjZW5kaWYgLyogU1VOQ1RMICovCitzdGF0aWMgbnNGb250
Q2hhclNldEluZm8gVElTNjIwID0KKyAgeyAiVElTLTYyMCIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAw
IH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSVNPODg1OTExID0KKyAgeyAiSVNPLTg4NTkt
MTEiLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIEJp
ZzUgPQorICB7ICJ4LXgtYmlnNSIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CisvLyBhIGtsdWRn
ZSB0byBkaXN0aW5ndWlzaCB6aC1UVyBvbmx5IGZvbnRzIGluIEJpZzUgKHN1Y2ggYXMgaHBiaWc1
LSkKKy8vIGZyb20gemgtVFcvemgtSEsgY29tbW9uIGZvbnRzIGluIEJpZzUgKHN1Y2ggYXMgYmln
NS0xKQorc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIEJpZzVUV0hLID0KKyAgeyAieC14LWJpZzUi
LCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIENOUzEx
NjQzMSA9CisgIHsgIngtY25zLTExNjQzLTEiLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3Rh
dGljIG5zRm9udENoYXJTZXRJbmZvIENOUzExNjQzMiA9CisgIHsgIngtY25zLTExNjQzLTIiLCBE
b3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIENOUzExNjQz
MyA9CisgIHsgIngtY25zLTExNjQzLTMiLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGlj
IG5zRm9udENoYXJTZXRJbmZvIENOUzExNjQzNCA9CisgIHsgIngtY25zLTExNjQzLTQiLCBEb3Vi
bGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIENOUzExNjQzNSA9
CisgIHsgIngtY25zLTExNjQzLTUiLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5z
Rm9udENoYXJTZXRJbmZvIENOUzExNjQzNiA9CisgIHsgIngtY25zLTExNjQzLTYiLCBEb3VibGVC
eXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIENOUzExNjQzNyA9Cisg
IHsgIngtY25zLTExNjQzLTciLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9u
dENoYXJTZXRJbmZvIEdCMjMxMiA9CisgIHsgImdiXzIzMTItODAiLCBEb3VibGVCeXRlQ29udmVy
dCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIEdCMTgwMzBfMCA9CisgIHsgImdiMTgw
MzAuMjAwMC0wIiwgRG91YmxlQnl0ZUNvbnZlcnQsIDEgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0
SW5mbyBHQjE4MDMwXzEgPQorICB7ICJnYjE4MDMwLjIwMDAtMSIsIERvdWJsZUJ5dGVDb252ZXJ0
LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gR0JLID0KKyAgeyAieC1nYmstbm9hc2Np
aSIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSEtT
Q1MgPQorICB7ICJoa3Njcy0xIiwgRG91YmxlQnl0ZUNvbnZlcnQsIDEgfTsKK3N0YXRpYyBuc0Zv
bnRDaGFyU2V0SW5mbyBKSVNYMDIwOCA9CisgIHsgImppc18wMjA4LTE5ODMiLCBEb3VibGVCeXRl
Q29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvIEpJU1gwMjEyID0KKyAgeyAi
amlzXzAyMTItMTk5MCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hh
clNldEluZm8gS1NDNTYwMSA9CisgIHsgImtzX2NfNTYwMS0xOTg3IiwgRG91YmxlQnl0ZUNvbnZl
cnQsIDEgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBYMTFKb2hhYiA9CisgIHsgIngteDEx
am9oYWIiLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZv
IEpvaGFiTm9Bc2NpaSA9CisgIHsgIngtam9oYWItbm9hc2NpaSIsIERvdWJsZUJ5dGVDb252ZXJ0
LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gSmFtb1RURiA9CisgIHsgIngta29yZWFu
amFtby0wIiwgRG91YmxlQnl0ZUNvbnZlcnQsIDEgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5m
byBUYW1pbFRURiA9CisgIHsgIngtdGFtaWx0dGYtMCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAwIH07
CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gQ1AxMjUwID0KKyAgeyAid2luZG93cy0xMjUwIiwg
U2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBDUDEyNTEg
PQorICB7ICJ3aW5kb3dzLTEyNTEiLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5z
Rm9udENoYXJTZXRJbmZvIENQMTI1MiA9CisgIHsgIndpbmRvd3MtMTI1MiIsIFNpbmdsZUJ5dGVD
b252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gQ1AxMjUzID0KKyAgeyAid2lu
ZG93cy0xMjUzIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0
SW5mbyBDUDEyNTcgPQorICB7ICJ3aW5kb3dzLTEyNTciLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9
OworCisjaWZkZWYgU1VOQ1RMCisvKiBIaW5kaSByYW5nZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQg
aW4gRlQyIHJhbmdlLiBDaGFuZ2UgVFQqIG9uY2Ugd2UgCisgICBhcnJpdmUgYXQgYSB3YXkgdG8g
aWRlbnRpZnkgaGluZGkgKi8KK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBTdW5JbmRpYyA9Cisg
IHsgIngtc3VuLXVuaWNvZGUtaW5kaWEtMCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAwIH07CisjZW5k
aWYgLyogU1VOQ1RMICovCisKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBJU08xMDY0NjEgPQor
ICB7IG5zbnVsbCwgSVNPMTA2NDZDb252ZXJ0LCAxfTsKKworc3RhdGljIG5zRm9udENoYXJTZXRJ
bmZvIEFkb2JlU3ltYm9sID0KKyAgIHsgIkFkb2JlLVN5bWJvbC1FbmNvZGluZyIsIFNpbmdsZUJ5
dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gQWRvYmVFdXJvID0KKyAg
eyAieC1hZG9iZS1ldXJvIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKKyAgICAgICAgIAorI2lm
ZGVmIE1PWl9NQVRITUwKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mbyBDTUNNRVggPQorICAgeyAi
eC10MS1jbWV4IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJ
bmZvIENNQ01TWSA9CisgICB7ICJ4LXQxLWNtc3kiLCBTaW5nbGVCeXRlQ29udmVydCwgMH07Citz
dGF0aWMgbnNGb250Q2hhclNldEluZm8gQ01DTVIgPQorICAgeyAieC10MS1jbXIiLCBTaW5nbGVC
eXRlQ29udmVydCwgMH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gQ01DTU1JID0KKyAgIHsg
IngtdDEtY21taSIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0
SW5mbyBNYXRoZW1hdGljYTEgPQorICAgeyAieC1tYXRoZW1hdGljYTEiLCBTaW5nbGVCeXRlQ29u
dmVydCwgMH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gTWF0aGVtYXRpY2EyID0KKyAgIHsg
IngtbWF0aGVtYXRpY2EyIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDB9OyAKK3N0YXRpYyBuc0ZvbnRD
aGFyU2V0SW5mbyBNYXRoZW1hdGljYTMgPQorICAgeyAieC1tYXRoZW1hdGljYTMiLCBTaW5nbGVC
eXRlQ29udmVydCwgMH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm8gTWF0aGVtYXRpY2E0ID0K
KyAgIHsgIngtbWF0aGVtYXRpY2E0IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDB9OyAKK3N0YXRpYyBu
c0ZvbnRDaGFyU2V0SW5mbyBNYXRoZW1hdGljYTUgPQorICAgeyAieC1tYXRoZW1hdGljYTUiLCBT
aW5nbGVCeXRlQ29udmVydCwgMH07CisjZW5kaWYgLyogTUFUSE1MICovCisjZW5kaWYgLyogRlJF
RVRZUEUyICovCiAKIHN0YXRpYyBuc0ZvbnRMYW5nR3JvdXAgRkxHX1dFU1RFUk4gPSB7ICJ4LXdl
c3Rlcm4iLCAgICAgbnNudWxsIH07CiBzdGF0aWMgbnNGb250TGFuZ0dyb3VwIEZMR19SVVNTSUFO
ID0geyAieC1jeXJpbGxpYyIsICAgIG5zbnVsbCB9Owogc3RhdGljIG5zRm9udExhbmdHcm91cCBG
TEdfQkFMVElDICA9IHsgIngtYmFsdGljIiwgICAgICBuc251bGwgfTsKIHN0YXRpYyBuc0ZvbnRM
YW5nR3JvdXAgRkxHX0NFICAgICAgPSB7ICJ4LWNlbnRyYWwtZXVybyIsbnNudWxsIH07CiBzdGF0
aWMgbnNGb250TGFuZ0dyb3VwIEZMR19HUkVFSyAgID0geyAiZWwiLCAgICAgICAgICAgIG5zbnVs
bCB9Owogc3RhdGljIG5zRm9udExhbmdHcm91cCBGTEdfVFVSS0lTSCA9IHsgInRyIiwgICAgICAg
ICAgICBuc251bGwgfTsKQEAgLTgxNywxNSArOTc5LDE3IEBAIEZyZWVOb2RlQXJyYXkobnNIYXNo
S2V5KiBhS2V5LCB2b2lkKiBhRGEKIHN0YXRpYyB2b2lkCiBGcmVlR2xvYmFscyh2b2lkKQogewog
ICAvLyBYWFggY29tcGxldGUgdGhpcwogCiAgIGdJbml0aWFsaXplZCA9IDA7CiAKKyNpZmRlZiBN
T1pfRU5BQkxFX0ZSRUVUWVBFMgogICBuc0ZUMkZvbnROb2RlOjpGcmVlR2xvYmFscygpOworI2Vu
ZGlmCiAKICNpZmRlZiBFTkFCTEVfWF9GT05UX0JBTk5JTkcKICAgaWYgKGdGb250UmVqZWN0UmVn
RXgpIHsKICAgICByZWdmcmVlKGdGb250UmVqZWN0UmVnRXgpOwogICAgIGRlbGV0ZSBnRm9udFJl
amVjdFJlZ0V4OwogICAgIGdGb250UmVqZWN0UmVnRXggPSBuc251bGw7CiAgIH0KQEAgLTEyMTcs
MTkgKzEzODEsMjEgQEAgSW5pdEdsb2JhbHMobnNJRGV2aWNlQ29udGV4dCAqYURldmljZSkKICAg
ICAgIAogICAgICAgRnJlZUdsb2JhbHMoKTsKICAgICAgIHJldHVybiBOU19FUlJPUl9JTlZBTElE
X0FSRzsKICAgICB9ICAgIAogICB9CiAjZW5kaWYgLyogRU5BQkxFX1hfRk9OVF9CQU5OSU5HICov
CiAKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogICBydiA9IG5zRlQyRm9udE5vZGU6Oklu
aXRHbG9iYWxzKCk7CiAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgRnJlZUdsb2JhbHMoKTsK
ICAgICByZXR1cm4gTlNfRVJST1JfT1VUX09GX01FTU9SWTsKICAgfQorI2VuZGlmCiAKICAgZ0lu
aXRpYWxpemVkID0gMTsKIAogICByZXR1cm4gTlNfT0s7CiB9CiAKIC8vIGRvIHRoZSA4IHRvIDE2
IGJpdCBjb252ZXJzaW9uIG9uIHRoZSBzdGFjawpAQCAtMTU1MywyMyArMTcxOSwyMyBAQCBOU19J
TUVUSE9ESU1QICBuc0ZvbnRNZXRyaWNzR1RLOjpEZXN0cm95CiB9CiAKIHZvaWQgbnNGb250TWV0
cmljc0dUSzo6UmVhbGl6ZUZvbnQoKQogewogICBmbG9hdCBmOwogICBmID0gbURldmljZUNvbnRl
eHQtPkRldlVuaXRzVG9BcHBVbml0cygpOwogCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIK
ICAgaWYgKG1XZXN0ZXJuRm9udC0+SXNGcmVlVHlwZUZvbnQoKSkgewogICAgIG5zRnJlZVR5cGVG
b250ICpmdCA9IChuc0ZyZWVUeXBlRm9udCAqKW1XZXN0ZXJuRm9udDsKICAgICBpZiAoIWZ0KQog
ICAgICAgcmV0dXJuOwogICAgIC8vIG5vdyB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBmb250IHR5
cGVzIChlZzogY29yZSBYIGZvbnRzCiAgICAgLy8gYW5kIFRydWVUeXBlIGZvbnRzKSB0aGVyZSBz
aG91bGQgYmUgYSBjb21tb24gc2V0IG9mIG1ldGhvZHMgCiAgICAgLy8gdG8gZ2V0IHRoZSBtZXRy
aWNzIGluZm8gZnJvbSB0aGUgZm9udCBvYmplY3QuIFRoZXNlIG1ldGhvZHMKICAgICAvLyBwcm9i
YWJseSBzaG91bGQgYmUgdmlydHVhbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBuc0ZvbnRHVEsuCi0j
aWYgKGRlZmluZWQoTU9aX0VOQUJMRV9GUkVFVFlQRTIpKQogICAgIGludCBsaW5lU3BhY2luZyA9
IGZ0LT5hc2NlbnQoKSArIGZ0LT5kZXNjZW50KCk7CiAgICAgaWYgKGxpbmVTcGFjaW5nID4gbVdl
c3Rlcm5Gb250LT5tU2l6ZSkgewogICAgICAgbUxlYWRpbmcgPSBuc2Nvb3JkKChsaW5lU3BhY2lu
ZyAtIG1XZXN0ZXJuRm9udC0+bVNpemUpICogZik7CiAgICAgfQogICAgIGVsc2UgewogICAgICAg
bUxlYWRpbmcgPSAwOwogICAgIH0KQEAgLTE2MzMsMTYgKzE3OTksMTYgQEAgdm9pZCBuc0ZvbnRN
ZXRyaWNzR1RLOjpSZWFsaXplRm9udCgpCiAgICAgfQogCiAgICAgLyogbmVlZCBiZXR0ZXIgd2F5
IHRvIGNhbGN1bGF0ZSB0aGlzICovCiAgICAgbVN0cmlrZW91dE9mZnNldCA9IE5TVG9Db29yZFJv
dW5kKG1YSGVpZ2h0IC8gMi4wKTsKICAgICBtU3RyaWtlb3V0U2l6ZSA9IG1VbmRlcmxpbmVTaXpl
OwogCiAgICAgcmV0dXJuOwotI2VuZGlmIC8qIChkZWZpbmVkKE1PWl9FTkFCTEVfRlJFRVRZUEUy
KSkgKi8KICAgfQorI2VuZGlmCiAgIG5zWEZvbnQgKnhGb250ID0gbVdlc3Rlcm5Gb250LT5HZXRY
Rm9udCgpOwogICBYRm9udFN0cnVjdCAqZm9udEluZm8gPSB4Rm9udC0+R2V0WEZvbnRTdHJ1Y3Qo
KTsKICAgZiA9IG1EZXZpY2VDb250ZXh0LT5EZXZVbml0c1RvQXBwVW5pdHMoKTsKIAogICBuc2Nv
b3JkIGxpbmVTcGFjaW5nID0gbnNjb29yZCgoZm9udEluZm8tPmFzY2VudCArIGZvbnRJbmZvLT5k
ZXNjZW50KSAqIGYpOwogICBtRW1IZWlnaHQgPSBQUl9NQVgoMSwgbnNjb29yZChtV2VzdGVybkZv
bnQtPm1TaXplICogZikpOwogICBpZiAobGluZVNwYWNpbmcgPiBtRW1IZWlnaHQpIHsKQEAgLTMy
NTEsMTQgKzM0MTcsMTYgQEAgbnNGb250TWV0cmljc0dUSzo6R2V0QUFTQkJhc2VGb250KG5zRm9u
dAogICByZXR1cm4gYmFzZV9hYWZvbnQ7CiB9CiAKIG5zRm9udEdUSyoKIG5zRm9udE1ldHJpY3NH
VEs6OlBpY2tBU2l6ZUFuZExvYWQobnNGb250U3RyZXRjaCogYVN0cmV0Y2gsCiAgIG5zRm9udENo
YXJTZXRJbmZvKiBhQ2hhclNldCwgUFJVaW50MzIgYUNoYXIsIGNvbnN0IGNoYXIgKmFOYW1lKQog
eworCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKICAgaWYgKGFTdHJldGNoLT5tRnJlZVR5
cGVGYWNlSUQpIHsKICAgICAvL0ZSRUVUWVBFX0ZPTlRfUFJJTlRGKCgibUZyZWVUeXBlRmFjZUlE
ID0gMHglcCIsIGFTdHJldGNoLT5tRnJlZVR5cGVGYWNlSUQpKTsKICAgICBuc0ZyZWVUeXBlRm9u
dCAqZnRmb250ID0gbnNGcmVlVHlwZUZvbnQ6Ok5ld0ZvbnQoYVN0cmV0Y2gtPm1GcmVlVHlwZUZh
Y2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVBpeGVsU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYU5hbWUpOwogICAgIGlmICghZnRmb250KSB7CiAgICAgICBGUkVFVFlQRV9G
T05UX1BSSU5URigoImZhaWxlZCB0byBjcmVhdGUgZm9udCIpKTsKQEAgLTMyODMsMTQgKzM0NTEs
MTUgQEAgbnNGb250TWV0cmljc0dUSzo6UGlja0FTaXplQW5kTG9hZChuc0ZvbgogICAgIHJldHVy
biBBZGRUb0xvYWRlZEZvbnRzTGlzdChmdGZvbnQpOwogICB9CiAKICAgaWYgKElTX1NVUlJPR0FU
RShhQ2hhcikpIHsKICAgICAvLyBTVVJST0dBVEUgaXMgb25seSBzdXBwb3J0ZWQgYnkgRnJlZVR5
cGUKICAgICByZXR1cm4gbnNudWxsOwogICB9CisjZW5kaWYKIAogICBQUkJvb2wgdXNlX3NjYWxl
ZF9mb250ID0gUFJfRkFMU0U7CiAgIFBSQm9vbCBoYXZlX25lYXJseV9yaWdodHNpemVkX2JpdG1h
cCA9IFBSX0ZBTFNFOwogICBuc0ZvbnRHVEsqIGJhc2VfYWFmb250ID0gbnNudWxsOwogCiAgIFBS
SW50MzIgYml0bWFwX3NpemUgPSBOT1RfRk9VTkRfRk9OVF9TSVpFOwogICBQUkludDMyIHNjYWxl
X3NpemUgPSBtUGl4ZWxTaXplOwpAQCAtNTE5MSwxNiArNTM2MCwxOCBAQCBHZXRGb250TmFtZXMo
Y29uc3QgY2hhciogYVBhdHRlcm4sIFBSQm9vCiB7CiAjaWZkZWYgTlNfRk9OVF9ERUJVR19DQUxM
X1RSQUNFCiAgIGlmIChnRm9udERlYnVnICYgTlNfRk9OVF9ERUJVR19DQUxMX1RSQUNFKSB7CiAg
ICAgcHJpbnRmKCJHZXRGb250TmFtZXMgJXNcbiIsIGFQYXR0ZXJuKTsKICAgfQogI2VuZGlmCiAK
KyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogICAvLyBnZXQgRnJlZVR5cGUgZm9udHMKICAg
bnNGVDJGb250Tm9kZTo6R2V0Rm9udE5hbWVzKGFQYXR0ZXJuLCBhTm9kZXMpOworI2VuZGlmCiAK
ICAgbnNDQXV0b1N0cmluZyBwcmV2aW91c05vZGVOYW1lOwogICBuc0hhc2h0YWJsZSogbm9kZV9o
YXNoOwogICBpZiAoYUFueUZvdW5kcnkpIHsKICAgICBOU19BU1NFUlRJT04oYVBhdHRlcm5bMV0g
PT0gJyonLCAiaW52YWxpZCAnYW55Rm91bmRyeScgcGF0dGVybiIpOwogICAgIG5vZGVfaGFzaCA9
IGdBRlJFTm9kZXM7CiAgIH0KQEAgLTY1NjUsMTggKzY3MzYsMjAgQEAgR2V0Q2hhclNldE1hcChj
b25zdCBjaGFyICphQ2hhclNldE5hbWUpCiAgICAgbnNGb250Q2hhclNldE1hcCogY2hhclNldE1h
cCA9CiAgICAgICAobnNGb250Q2hhclNldE1hcCopIGdDaGFyU2V0TWFwcy0+R2V0KCZjaGFyU2V0
S2V5KTsKICAgICBpZiAoIWNoYXJTZXRNYXApCiAgICAgICBjaGFyU2V0TWFwID0gZ05vbmVDaGFy
U2V0TWFwOwogICByZXR1cm4gY2hhclNldE1hcDsKIH0KIAorI2lmZGVmIE1PWl9FTkFCTEVfRlJF
RVRZUEUyCiB2b2lkCiBDaGFyU2V0TmFtZVRvQ29kZVJhbmdlQml0cyhjb25zdCBjaGFyICphQ2hh
cnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyICphQ29kZVJhbmdlMSwg
UFJVaW50MzIgKmFDb2RlUmFuZ2UyKQogewogICBuc0ZvbnRDaGFyU2V0TWFwICpjaGFyU2V0TWFw
ID0gR2V0Q2hhclNldE1hcChhQ2hhcnNldCk7CiAgIG5zRm9udENoYXJTZXRJbmZvKiBjaGFyU2V0
SW5mbyA9IGNoYXJTZXRNYXAtPm1JbmZvOwogCiAgICphQ29kZVJhbmdlMSA9IGNoYXJTZXRJbmZv
LT5tQ29kZVJhbmdlMUJpdHM7CiAgICphQ29kZVJhbmdlMiA9IGNoYXJTZXRJbmZvLT5tQ29kZVJh
bmdlMkJpdHM7CiB9CisjZW5kaWYKIApJbmRleDogZ2Z4L3NyYy9ndGsvbnNGb250TWV0cmljc0dU
Sy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L21vemlsbGEvZ2Z4L3NyYy9ndGsvbnNG
b250TWV0cmljc0dUSy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYgLXUgLTcgLXAg
LXIxLjYwIG5zRm9udE1ldHJpY3NHVEsuaAotLS0gZ2Z4L3NyYy9ndGsvbnNGb250TWV0cmljc0dU
Sy5oCTUgRmViIDIwMDQgMDE6NTc6MDMgLTAwMDAJMS42MAorKysgZ2Z4L3NyYy9ndGsvbnNGb250
TWV0cmljc0dUSy5oCTE3IE9jdCAyMDA0IDExOjEwOjA0IC0wMDAwCkBAIC00OCwxNSArNDgsMTcg
QEAKICNpbmNsdWRlICJuc0lEZXZpY2VDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDUlQuaCIKICNp
bmNsdWRlICJuc0NPTVB0ci5oIgogI2luY2x1ZGUgIm5zUmVuZGVyaW5nQ29udGV4dEdUSy5oIgog
I2luY2x1ZGUgIm5zSUNoYXJSZXByZXNlbnRhYmxlLmgiCiAjaW5jbHVkZSAibnNDb21wcmVzc2Vk
Q2hhck1hcC5oIgogI2luY2x1ZGUgIm5zSUZvbnRNZXRyaWNzR1RLLmgiCisjaWZkZWYgTU9aX0VO
QUJMRV9GUkVFVFlQRTIKICNpbmNsdWRlICJuc0lGb250Q2F0YWxvZ1NlcnZpY2UuaCIKKyNlbmRp
ZgogCiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+CiAKICN1bmRl
ZiBGT05UX0hBU19HTFlQSAogI2RlZmluZSBGT05UX0hBU19HTFlQSChtYXAsIGNoYXIpIElTX1JF
UFJFU0VOVEFCTEUobWFwLCBjaGFyKQogI2RlZmluZSBXRUlHSFRfSU5ERVgod2VpZ2h0KSAoKCh3
ZWlnaHQpIC8gMTAwKSAtIDEpCkBAIC04OCwxNSArOTAsMTcgQEAgc3RydWN0IG5zRm9udFN0cmV0
Y2gKICAgbnNGb250R1RLKiogICAgICAgIG1TaXplczsKICAgUFJVaW50MTYgICAgICAgICAgIG1T
aXplc0FsbG9jOwogICBQUlVpbnQxNiAgICAgICAgICAgbVNpemVzQ291bnQ7CiAKICAgY2hhciog
ICAgICAgICAgICAgIG1TY2FsYWJsZTsKICAgUFJCb29sICAgICAgICAgICAgIG1PdXRsaW5lU2Nh
bGVkOwogICBuc1ZvaWRBcnJheSAgICAgICAgbVNjYWxlZEZvbnRzOworI2lmZGVmIE1PWl9FTkFC
TEVfRlJFRVRZUEUyCiAgIG5zSVRydWVUeXBlRm9udENhdGFsb2dFbnRyeSogICBtRnJlZVR5cGVG
YWNlSUQ7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBuc0ZvbnRTdHlsZQogewogICBOU19ERUNMX0FO
RF9JTVBMX1pFUk9JTkdfT1BFUkFUT1JfTkVXCiAKICAgdm9pZCBGaWxsV2VpZ2h0SG9sZXModm9p
ZCk7CkBAIC00MDcsMTQgKzQxMSwxNiBAQCBwdWJsaWM6CiAgIE5TX0RFQ0xfSVNVUFBPUlRTCiAg
IE5TX0RFQ0xfTlNJRk9OVEVOVU1FUkFUT1IKIH07CiAKIGNsYXNzIG5zSGFzaEtleTsKIFBSQm9v
bCBGcmVlTm9kZShuc0hhc2hLZXkqIGFLZXksIHZvaWQqIGFEYXRhLCB2b2lkKiBhQ2xvc3VyZSk7
CiBuc0ZvbnRDaGFyU2V0SW5mbyAqR2V0Q2hhclNldEluZm8oY29uc3QgY2hhciAqYUNoYXJTZXRO
YW1lKTsKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogdm9pZCBDaGFyU2V0TmFtZVRvQ29k
ZVJhbmdlQml0cyhjb25zdCBjaGFyKiwgUFJVaW50MzIqLCBQUlVpbnQzMiopOworI2VuZGlmCiBu
c0ZvbnRDaGFyU2V0TWFwICpHZXRDaGFyU2V0TWFwKGNvbnN0IGNoYXIgKmFDaGFyU2V0TmFtZSk7
CiAKIAogCiAKICNlbmRpZgpJbmRleDogZ2Z4L3NyYy9ndGsvbnNGb250TWV0cmljc1hmdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL2d0ay9uc0ZvbnRN
ZXRyaWNzWGZ0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MS42LjIKZGlmZiAtdSAtNyAt
cCAtcjEuNTEuNi4yIG5zRm9udE1ldHJpY3NYZnQuY3BwCi0tLSBnZngvc3JjL2d0ay9uc0ZvbnRN
ZXRyaWNzWGZ0LmNwcAkxNCBPY3QgMjAwNCAyMDozNjoxNCAtMDAwMAkxLjUxLjYuMgorKysgZ2Z4
L3NyYy9ndGsvbnNGb250TWV0cmljc1hmdC5jcHAJMTcgT2N0IDIwMDQgMTE6MTA6MTEgLTAwMDAK
QEAgLTYwLDE0ICs2MCwxNSBAQAogI2luY2x1ZGUgIm5zSUNoYXJzZXRDb252ZXJ0ZXJNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAibnNJQ2hhclJlcHJlc2VudGFibGUuaCIKICNpbmNsdWRlICJuc0lQZXJz
aXN0ZW50UHJvcGVydGllczIuaCIKICNpbmNsdWRlICJuc0NvbXByZXNzZWRDaGFyTWFwLmgiCiAj
aW5jbHVkZSAibnNOZXRVdGlsLmgiCiAjaW5jbHVkZSAibnNDbGFzc0hhc2h0YWJsZS5oIgogI2lu
Y2x1ZGUgIm5zQXV0b0J1ZmZlci5oIgorI2luY2x1ZGUgIm5zRm9udENvbmZpZ1V0aWxzLmgiCiAK
ICNpbmNsdWRlIDxnZGsvZ2RreC5oPgogI2luY2x1ZGUgPGZyZWV0eXBlL3R0dGFibGVzLmg+CiAj
aW5jbHVkZSA8ZnJlZXR5cGUvZnJlZXR5cGUuaD4KIAogI2RlZmluZSBGT1JDRV9QUl9MT0cKICNp
bmNsdWRlICJwcmxvZy5oIgpAQCAtMTkwLDM0ICsxOTEsMTQgQEAgY2xhc3MgbnNGb250WGZ0SW5m
byB7CiAgICAgLy8gVW5pY29kZSwgQ3VzdG9tLCBDdXN0b21XaWRlCiAgICAgbnNYZnRGb250VHlw
ZSAgICAgICAgICAgICAgIG1Gb250VHlwZTsKICAgICAvLyBUcnVldHlwZSBjbWFwIHRvIHVzZSBm
b3IgZGlyZWN0IHJldHJpZXZhbCBvZiBHSURzIHdpdGggRlRfR2V0X0NoYXJfSW5kZXgKICAgICAv
LyBmb3IgJ25hcnJvdycgY3VzdG9tIGZvbnRzLgogICAgIEZUX0VuY29kaW5nICAgICAgICAgICAg
ICAgICBtRlRfRW5jb2Rpbmc7CiB9OwogCi1zdHJ1Y3QgTW96WGZ0TGFuZ0dyb3VwIHsKLSAgICBj
b25zdCBjaGFyICAgICptb3pMYW5nR3JvdXA7Ci0gICAgRmNDaGFyMzIgICAgICAgY2hhcmFjdGVy
OwotICAgIGNvbnN0IEZjQ2hhcjggKlhmdExhbmc7Ci19OwotCi1zdGF0aWMgY29uc3QgTW96WGZ0
TGFuZ0dyb3VwIE1velhmdExhbmdHcm91cHNbXSA9IHsKLSAgICB7ICJ4LXdlc3Rlcm4iLCAgICAg
IDB4MDA0MSwgKGNvbnN0IEZjQ2hhcjggKikiZW4iIH0sCi0gICAgeyAieC1jZW50cmFsLWV1cm8i
LCAweDAxMDAsIChjb25zdCBGY0NoYXI4ICopInBsIiB9LAotICAgIHsgIngtY3lyaWxsaWMiLCAg
ICAgMHgwNDExLCAoY29uc3QgRmNDaGFyOCAqKSJydSIgfSwKLSAgICB7ICJ4LWJhbHRpYyIsICAg
ICAgIDB4MDEwNCwgKGNvbnN0IEZjQ2hhcjggKikibHYiIH0sCi0gICAgeyAieC1kZXZhbmFnYXJp
IiwgICAweDA5MDUsIChjb25zdCBGY0NoYXI4ICopImhpIiB9LAotICAgIHsgIngtdGFtaWwiLCAg
ICAgICAgMHgwQjg1LCAoY29uc3QgRmNDaGFyOCAqKSJ0YSIgfSwKLSAgICB7ICJ4LXVuaWNvZGUi
LCAgICAgIDB4MDAwMCwgICAgICAgICAgICAgICAgICAwICAgIH0sCi0gICAgeyAieC11c2VyLWRl
ZiIsICAgICAweDAwMDAsICAgICAgICAgICAgICAgICAgMCAgICB9LAotfTsKLQotI2RlZmluZSBO
VU1fWEZUX0xBTkdfR1JPVVBTIChzaXplb2YgKE1velhmdExhbmdHcm91cHMpIC8gXAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKE1velhmdExhbmdHcm91cHNbMF0pKQotCiBz
dHJ1Y3QgRHJhd1N0cmluZ0RhdGEgewogICAgIG5zY29vcmQgICAgICAgICAgICAgICAgeDsKICAg
ICBuc2Nvb3JkICAgICAgICAgICAgICAgIHk7CiAgICAgY29uc3QgbnNjb29yZCAgICAgICAgICpz
cGFjaW5nOwogICAgIG5zY29vcmQgICAgICAgICAgICAgICAgeE9mZnNldDsKICAgICBuc1JlbmRl
cmluZ0NvbnRleHRHVEsgKmNvbnRleHQ7CiAgICAgWGZ0RHJhdyAgICAgICAgICAgICAgICpkcmF3
OwpAQCAtMjMyLDI5ICsyMTMsMTkgQEAgc3RydWN0IEJvdW5kaW5nTWV0cmljc0RhdGEgewogICAg
IFBSQm9vbCBmaXJzdFRpbWU7CiB9OwogI2VuZGlmIC8qIE1PWl9NQVRITUwgKi8KIAogI2RlZmlu
ZSBBVVRPX0JVRkZFUl9TSVpFIDMwMDAKIHR5cGVkZWYgbnNBdXRvQnVmZmVyPEZjQ2hhcjMyLCBB
VVRPX0JVRkZFUl9TSVpFPiBuc0F1dG9GY0NoYXIzMkJ1ZmZlcjsKIAotc3RhdGljIGludCAgICAg
IENhbGN1bGF0ZVNsYW50ICAgKFBSVWludDggIGFTdHlsZSk7Ci1zdGF0aWMgaW50ICAgICAgQ2Fs
Y3VsYXRlV2VpZ2h0ICAoUFJVaW50MTYgYVdlaWdodCk7Ci1zdGF0aWMgdm9pZCAgICAgQWRkTGFu
Z0dyb3VwICAgICAoRmNQYXR0ZXJuICphUGF0dGVybiwgbnNJQXRvbSAqYUxhbmdHcm91cCk7Ci1z
dGF0aWMgdm9pZCAgICAgQWRkRkZSRSAgICAgICAgICAoRmNQYXR0ZXJuICphUGF0dGVybiwgbnND
U3RyaW5nICphRmFtaWx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhV2Vhayk7Ci1zdGF0aWMgdm9pZCAgICAgRkZSRVRvRmFtaWx5ICAgICAobnNBQ1N0cmluZyAm
YUZGUkVOYW1lLCBuc0FDU3RyaW5nICZvRmFtaWx5KTsKLXN0YXRpYyBpbnQgICAgICBGRlJFQ291
bnRIeXBoZW5zIChuc0FDU3RyaW5nICZhRkZSRU5hbWUpOwogc3RhdGljIGludCAgICAgIENvbXBh
cmVGb250TmFtZXMgKGNvbnN0IHZvaWQqIGFBcmcxLCBjb25zdCB2b2lkKiBhQXJnMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhQ2xvc3VyZSk7Ci1zdGF0aWMgUFJC
b29sICAgSXNBU0NJSUZvbnROYW1lICAoY29uc3QgbnNTdHJpbmcmIGFOYW1lKTsKIHN0YXRpYyBu
c3Jlc3VsdCBFbnVtRm9udHNYZnQgICAgIChuc0lBdG9tKiBhTGFuZ0dyb3VwLCBjb25zdCBjaGFy
KiBhR2VuZXJpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiog
YUNvdW50LCBQUlVuaWNoYXIqKiogYVJlc3VsdCk7CiAKLXN0YXRpYyBjb25zdCBNb3pYZnRMYW5n
R3JvdXAqIEZpbmRGQ0xhbmdHcm91cCAobnNBQ1N0cmluZyAmYUxhbmdHcm91cCk7Ci0KIHN0YXRp
YyAgICAgICAgdm9pZCBDb252ZXJ0Q2hhclRvVUNTNCAgICAoY29uc3QgY2hhciAqYVN0cmluZywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxlbmd0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdXRvRmNDaGFy
MzJCdWZmZXIgJmFPdXRCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyICphT3V0TGVuKTsKIHN0YXRpYyAgICAgICAgdm9pZCBDb252ZXJ0VW5p
Y2hhclRvVUNTNCAoY29uc3QgUFJVbmljaGFyICphU3RyaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F1dG9GY0NoYXIzMkJ1ZmZlciAmYU91dEJ1ZmZl
ciwKQEAgLTEwMTgsMjEgKzk4OSwyMSBAQCBuc0ZvbnRNZXRyaWNzWGZ0OjpTZXR1cEZDUGF0dGVy
bih2b2lkKQogICAgIGZvciAoaW50IGk9MDsgaSA8IG1Gb250TGlzdC5Db3VudCgpOyArK2kpIHsK
ICAgICAgICAgLy8gaWYgdGhpcyB3YXMgYSBnZW5lcmljIG5hbWUsIGJyZWFrIG91dCBvZiB0aGUg
bG9vcCBzaW5jZSB3ZQogICAgICAgICAvLyBkb24ndCB3YW50IHRvIGFkZCBpdCB0byB0aGUgcGF0
dGVybiB5ZXQKICAgICAgICAgaWYgKG1Gb250SXNHZW5lcmljW2ldKQogICAgICAgICAgICAgYnJl
YWs7OwogCiAgICAgICAgIG5zQ1N0cmluZyAqZmFtaWx5TmFtZSA9IG1Gb250TGlzdC5DU3RyaW5n
QXQoaSk7Ci0gICAgICAgIEFkZEZGUkUobVBhdHRlcm4sIGZhbWlseU5hbWUsIFBSX0ZBTFNFKTsK
KyAgICAgICAgTlNfQWRkRkZSRShtUGF0dGVybiwgZmFtaWx5TmFtZSwgUFJfRkFMU0UpOwogICAg
IH0KIAogICAgIC8vIEFkZCB0aGUgbGFuZ3VhZ2UgZ3JvdXAuICBOb3RlIHRoYXQgd2UgZG8gdGhp
cyBiZWZvcmUgYWRkaW5nIGFueQogICAgIC8vIGdlbmVyaWNzLiAgVGhhdCdzIGJlY2F1c2UgdGhl
IGxhbmd1YWdlIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4KICAgICAvLyBhbnkgZ2VuZXJpYyBmb250
LgotICAgIEFkZExhbmdHcm91cCAobVBhdHRlcm4sIG1MYW5nR3JvdXApOworICAgIE5TX0FkZExh
bmdHcm91cCAobVBhdHRlcm4sIG1MYW5nR3JvdXApOwogCiAgICAgLy8gSWYgdGhlcmUncyBhIGdl
bmVyaWMgYWRkIGEgcHJlZiBmb3IgdGhlIGdlbmVyaWMgaWYgdGhlcmUncyBvbmUKICAgICAvLyBz
ZXQuCiAgICAgaWYgKG1HZW5lcmljRm9udCAmJiAhbUZvbnQtPnN5c3RlbUZvbnQpIHsKICAgICAg
ICAgbnNDU3RyaW5nIG5hbWU7CiAgICAgICAgIG5hbWUgKz0gImZvbnQubmFtZS4iOwogICAgICAg
ICBuYW1lICs9IG1HZW5lcmljRm9udC0+Z2V0KCk7CkBAIC0xMDQ4LDMxICsxMDE5LDMxIEBAIG5z
Rm9udE1ldHJpY3NYZnQ6OlNldHVwRkNQYXR0ZXJuKHZvaWQpCiAgICAgICAgIGlmIChwcmVmKSB7
CiAgICAgICAgICAgICBuc3Jlc3VsdCBydjsKICAgICAgICAgICAgIG5zWFBJRExDU3RyaW5nIHZh
bHVlOwogICAgICAgICAgICAgcnYgPSBwcmVmLT5HZXRDaGFyUHJlZihuYW1lLmdldCgpLCBnZXR0
ZXJfQ29waWVzKHZhbHVlKSk7CiAKICAgICAgICAgICAgIC8vIHdlIGlnbm9yZSBwcmVmcyB0aGF0
IGhhdmUgdGhyZWUgaHlwZW5zIHNpbmNlIHRoZXkgYXJlIFgKICAgICAgICAgICAgIC8vIHN0eWxl
IHByZWZzLgotICAgICAgICAgICAgaWYgKEZGUkVDb3VudEh5cGhlbnModmFsdWUpIDwgMykgewor
ICAgICAgICAgICAgaWYgKE5TX0ZGUkVDb3VudEh5cGhlbnModmFsdWUpIDwgMykgewogICAgICAg
ICAgICAgICAgIG5zQ1N0cmluZyB0bXBzdHI7CiAgICAgICAgICAgICAgICAgdG1wc3RyLkFwcGVu
ZCh2YWx1ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoUFJfTE9HX1RFU1QoZ1hmdEZvbnRMb2Fk
LCBQUl9MT0dfREVCVUcpKSB7CiAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHRhZGRpbmcg
Z2VuZXJpYyBmb250IGZyb20gcHJlZmVyZW5jZXM6ICVzXG4iLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG1wc3RyLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBBZGRGRlJFKG1QYXR0ZXJuLCAmdG1wc3RyLCBQUl9GQUxTRSk7CisgICAgICAgICAgICAg
ICAgTlNfQWRkRkZSRShtUGF0dGVybiwgJnRtcHN0ciwgUFJfRkFMU0UpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQWRkIHRoZSBnZW5lcmljIGlmIHRoZXJlIGlz
IG9uZS4KICAgICBpZiAobUdlbmVyaWNGb250ICYmICFtRm9udC0+c3lzdGVtRm9udCkKLSAgICAg
ICAgQWRkRkZSRShtUGF0dGVybiwgbUdlbmVyaWNGb250LCBQUl9GQUxTRSk7CisgICAgICAgIE5T
X0FkZEZGUkUobVBhdHRlcm4sIG1HZW5lcmljRm9udCwgUFJfRkFMU0UpOwogCiAgICAgaWYgKFBS
X0xPR19URVNUKGdYZnRGb250TG9hZCwgUFJfTE9HX0RFQlVHKSkgewogICAgICAgICAvLyBnZW5l
cmljIGZvbnQKICAgICAgICAgaWYgKG1HZW5lcmljRm9udCAmJiAhbUZvbnQtPnN5c3RlbUZvbnQp
IHsKICAgICAgICAgICAgIHByaW50ZigiXHRhZGRpbmcgZ2VuZXJpYyBmYW1pbHk6ICVzXG4iLCBt
R2VuZXJpY0ZvbnQtPmdldCgpKTsKICAgICAgICAgfQogCkBAIC0xMDkxLDMxICsxMDYyLDMxIEBA
IG5zRm9udE1ldHJpY3NYZnQ6OlNldHVwRkNQYXR0ZXJuKHZvaWQpCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBwcmludGYoInJvbWFuXG4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gd2VpZ2h0CiAgICAgICAgIHByaW50ZigiXHR3ZWlnaHQ6IChv
cmlnLGNhbGMpICVkLCVkXG4iLAotICAgICAgICAgICAgICAgbUZvbnQtPndlaWdodCwgQ2FsY3Vs
YXRlV2VpZ2h0KG1Gb250LT53ZWlnaHQpKTsKKyAgICAgICAgICAgICAgIG1Gb250LT53ZWlnaHQs
IE5TX0NhbGN1bGF0ZVdlaWdodChtRm9udC0+d2VpZ2h0KSk7CiAKICAgICB9ICAgICAgICAKIAog
ICAgIC8vIGFkZCB0aGUgcG9pbnQgc2l6ZQogICAgIC8vIFdlJ3ZlIGRvbmUgc29tZSByb3VuZC10
cmlwcGluZyBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzIHNvIHRoZXkKICAgICAvLyBtaWdodCBu
b3QgYmUgcXVpdGUgcmlnaHQuICBTaW5jZSBYZnQgcm91bmRzIGRvd24sIGFkZCBhIGxpdHRsZSwK
ICAgICAvLyBzbyB3ZSBkb24ndCBnbyBmcm9tIDkuMDAwMDAgdG8gOC45OTk5OSB0byA4LgogICAg
IEZjUGF0dGVybkFkZERvdWJsZShtUGF0dGVybiwgRkNfUElYRUxfU0laRSwgbVBpeGVsU2l6ZSAr
IDAuMDAwMDAxKTsKIAogICAgIC8vIEFkZCB0aGUgc2xhbnQgdHlwZQogICAgIEZjUGF0dGVybkFk
ZEludGVnZXIobVBhdHRlcm4sIEZDX1NMQU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgQ2Fs
Y3VsYXRlU2xhbnQobUZvbnQtPnN0eWxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBOU19D
YWxjdWxhdGVTbGFudChtRm9udC0+c3R5bGUpKTsKIAogICAgIC8vIEFkZCB0aGUgd2VpZ2h0CiAg
ICAgRmNQYXR0ZXJuQWRkSW50ZWdlcihtUGF0dGVybiwgRkNfV0VJR0hULAotICAgICAgICAgICAg
ICAgICAgICAgICAgQ2FsY3VsYXRlV2VpZ2h0KG1Gb250LT53ZWlnaHQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5TX0NhbGN1bGF0ZVdlaWdodChtRm9udC0+d2VpZ2h0KSk7CiAKICAgICAv
LyBTZXQgdXAgdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgdGhpcyBmb250CiAgICAgRmND
b25maWdTdWJzdGl0dXRlKDAsIG1QYXR0ZXJuLCBGY01hdGNoUGF0dGVybik7CiAgICAgWGZ0RGVm
YXVsdFN1YnN0aXR1dGUoR0RLX0RJU1BMQVkoKSwgRGVmYXVsdFNjcmVlbihHREtfRElTUExBWSgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtUGF0dGVybik7CiB9CiAKQEAgLTEyNzAsMTUg
KzEyNDEsMTUgQEAgbnNGb250TWV0cmljc1hmdDo6U2V0dXBNaW5pRm9udCh2b2lkKQogICAgICAg
ICBYZnRQYXR0ZXJuQWRkQm9vbChtUGF0dGVybiwgWEZUX1JFTkRFUiwgRmFsc2UpOwogCiAgICAg
RmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgKEZjQ2hhcjggKikibW9ub3Nw
YWNlIik7CiAKICAgICBGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4sIEZDX1BJWEVMX1NJWkUs
IGludCgwLjUgKiBtUGl4ZWxTaXplKSk7CiAKICAgICBGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRl
cm4sIEZDX1dFSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIENhbGN1bGF0ZVdlaWdodCht
Rm9udC0+d2VpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBOU19DYWxjdWxhdGVXZWln
aHQobUZvbnQtPndlaWdodCkpOwogCiAgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4s
IEZjTWF0Y2hQYXR0ZXJuKTsKICAgICBYZnREZWZhdWx0U3Vic3RpdHV0ZShHREtfRElTUExBWSgp
LCBEZWZhdWx0U2NyZWVuKEdES19ESVNQTEFZKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHBhdHRlcm4pOwogCiAgICAgRmNSZXN1bHQgcmVzOwogICAgIApAQCAtMTY4NiwxNSArMTY1Nywx
NSBAQCBuc0ZvbnRNZXRyaWNzWGZ0OjpCb3VuZGluZ01ldHJpY3NDYWxsYmFjCiAjZW5kaWYgLyog
TU9aX01BVEhNTCAqLwogCiAvKiBzdGF0aWMgKi8KIG5zcmVzdWx0CiBuc0ZvbnRNZXRyaWNzWGZ0
OjpGYW1pbHlFeGlzdHMobnNJRGV2aWNlQ29udGV4dCAqYURldmljZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc1N0cmluZyAmYU5hbWUpCiB7Ci0gICAgaWYgKCFJc0FT
Q0lJRm9udE5hbWUoYU5hbWUpKQorICAgIGlmICghTlNfSXNBU0NJSUZvbnROYW1lKGFOYW1lKSkK
ICAgICAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAKICAgICBOU19Db252ZXJ0VUNTMnRv
VVRGOCBuYW1lKGFOYW1lKTsKIAogICAgIEZjRm9udFNldCAqc2V0ID0gbnNudWxsOwogICAgIEZj
T2JqZWN0U2V0ICpvcyA9IG5zbnVsbDsKIApAQCAtMTc0NCwxNSArMTcxNSwxNSBAQCBuc0ZvbnRN
ZXRyaWNzWGZ0OjpGYW1pbHlFeGlzdHMobnNJRGV2aWNlCiAvKiBzdGF0aWMgKi8KIFBSQm9vbAog
bnNGb250TWV0cmljc1hmdDo6RW51bUZvbnRDYWxsYmFjayhjb25zdCBuc1N0cmluZyAmYUZhbWls
eSwgUFJCb29sIGFJc0dlbmVyaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKmFEYXRhKQogewogICAgIC8vIG1ha2Ugc3VyZSBpdCdzIGFuIGFzY2lpIG5hbWUsIGlm
IG5vdCB0aGVuIHJldHVybiBhbmQgY29udGludWUKICAgICAvLyBlbnVtZXJhdGluZwotICAgIGlm
ICghSXNBU0NJSUZvbnROYW1lKGFGYW1pbHkpKQorICAgIGlmICghTlNfSXNBU0NJSUZvbnROYW1l
KGFGYW1pbHkpKQogICAgICAgICByZXR1cm4gUFJfVFJVRTsKIAogICAgIG5zQ0F1dG9TdHJpbmcg
bmFtZTsKICAgICBuYW1lLkFzc2lnbldpdGhDb252ZXJzaW9uKGFGYW1pbHkuZ2V0KCkpOwogICAg
IFRvTG93ZXJDYXNlKG5hbWUpOwogICAgIG5zRm9udE1ldHJpY3NYZnQgKm1ldHJpY3MgPSAobnNG
b250TWV0cmljc1hmdCAqKWFEYXRhOwogICAgIG1ldHJpY3MtPm1Gb250TGlzdC5BcHBlbmRDU3Ry
aW5nKG5hbWUpOwpAQCAtMTg0MiwxNSArMTgxMywxNSBAQCBuc0ZvbnRFbnVtZXJhdG9yWGZ0OjpH
ZXREZWZhdWx0Rm9udChjb25zCiAgICAgbWF0Y2hfcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgp
OwogCiAgIGlmICghbWF0Y2hfcGF0dGVybikKICAgICByZXR1cm4gTlNfT0s7IC8vIG5vdCBmYXRh
bCwganVzdCByZXR1cm4gYW4gZW1wdHkgZGVmYXVsdCBuYW1lCiAKICAgaWYgKGFMYW5nR3JvdXAg
JiYgKmFMYW5nR3JvdXApIHsKICAgICBuc0NPTVB0cjxuc0lBdG9tPiBsYW5nR3JvdXAgPSBkb19H
ZXRBdG9tKGFMYW5nR3JvdXApOwotICAgIEFkZExhbmdHcm91cChtYXRjaF9wYXR0ZXJuLCBsYW5n
R3JvdXApOworICAgIE5TX0FkZExhbmdHcm91cChtYXRjaF9wYXR0ZXJuLCBsYW5nR3JvdXApOwog
ICB9CiAKICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIG1hdGNoX3BhdHRlcm4sIEZjTWF0Y2hQYXR0
ZXJuKTsgCiAgIEZjRGVmYXVsdFN1YnN0aXR1dGUobWF0Y2hfcGF0dGVybik7CiAgIEZjUGF0dGVy
biogcmVzdWx0X3BhdHRlcm4gPSBGY0ZvbnRNYXRjaCgwLCBtYXRjaF9wYXR0ZXJuLCAmcmVzKTsK
ICAgaWYgKHJlc3VsdF9wYXR0ZXJuKSB7CiAgICAgY2hhciAqZmFtaWx5OwpAQCAtMjIyNywxODIg
KzIxOTgsMjIgQEAgbnNBdXRvRHJhd1NwZWNCdWZmZXI6OkZsdXNoKCkKICAgICB9CiB9CiAKIC8v
IFN0YXRpYyBmdW5jdGlvbnMKIAogLyogc3RhdGljICovCiBpbnQKLUNhbGN1bGF0ZVNsYW50KFBS
VWludDggYVN0eWxlKQotewotICAgIGludCBmY1NsYW50OwotCi0gICAgc3dpdGNoKGFTdHlsZSkg
ewotICAgIGNhc2UgTlNfRk9OVF9TVFlMRV9JVEFMSUM6Ci0gICAgICAgIGZjU2xhbnQgPSBGQ19T
TEFOVF9JVEFMSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNfRk9OVF9TVFlMRV9PQkxJ
UVVFOgotICAgICAgICBmY1NsYW50ID0gRkNfU0xBTlRfT0JMSVFVRTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZmNTbGFudCA9IEZDX1NMQU5UX1JPTUFOOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmNTbGFudDsKLX0KLQotLyogc3RhdGljICov
Ci1pbnQKLUNhbGN1bGF0ZVdlaWdodCAoUFJVaW50MTYgYVdlaWdodCkKLXsKLSAgICAvKgotICAg
ICAqIHdlaWdodHMgY29tZSBpbiB0d28gcGFydHMgY3JhbW1lZCBpbnRvIG9uZQotICAgICAqIGlu
dGVnZXIgLS0gdGhlICJiYXNlIiB3ZWlnaHQgaXMgd2VpZ2h0IC8gMTAwLAotICAgICAqIHRoZSBy
ZXN0IG9mIHRoZSB2YWx1ZSBpcyB0aGUgIm9mZnNldCIgZnJvbSB0aGF0Ci0gICAgICogd2VpZ2h0
IC0tIHRoZSBudW1iZXIgb2Ygc3RlcHMgdG8gbW92ZSB0byBhZGp1c3QKLSAgICAgKiB0aGUgd2Vp
Z2h0IGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBmb250IHdlaWdodHMsCi0gICAgICogdGhpcyB2
YWx1ZSBjYW4gYmUgbmVnYXRpdmUgb3IgcG9zaXRpdmUuCi0gICAgICovCi0gICAgUFJJbnQzMiBi
YXNlV2VpZ2h0ID0gKGFXZWlnaHQgKyA1MCkgLyAxMDA7Ci0gICAgUFJJbnQzMiBvZmZzZXQgPSBh
V2VpZ2h0IC0gYmFzZVdlaWdodCAqIDEwMDsKLQotICAgIC8qIGNsaXAgd2VpZ2h0cyB0byByYW5n
ZSAwIHRvIDkgKi8KLSAgICBpZiAoYmFzZVdlaWdodCA8IDApCi0gICAgICAgIGJhc2VXZWlnaHQg
PSAwOwotICAgIGlmIChiYXNlV2VpZ2h0ID4gOSkKLSAgICAgICAgYmFzZVdlaWdodCA9IDk7Ci0K
LSAgICAvKiBNYXAgZnJvbSB3ZWlnaHQgdmFsdWUgdG8gZmNXZWlnaHRzIGluZGV4ICovCi0gICAg
c3RhdGljIGludCBmY1dlaWdodExvb2t1cFsxMF0gPSB7Ci0gICAgICAgIDAsIDAsIDAsIDAsIDEs
IDEsIDIsIDMsIDMsIDQsCi0gICAgfTsKLQotICAgIFBSSW50MzIgZmNXZWlnaHQgPSBmY1dlaWdo
dExvb2t1cFtiYXNlV2VpZ2h0XTsKLQotICAgIC8qCi0gICAgICogYWRqdXN0IGJ5IHRoZSBvZmZz
ZXQgdmFsdWUsIG1ha2Ugc3VyZSB3ZSBzdGF5IGluc2lkZSB0aGUgCi0gICAgICogZmNXZWlnaHRz
IHRhYmxlCi0gICAgICovCi0gICAgZmNXZWlnaHQgKz0gb2Zmc2V0OwotCi0gICAgaWYgKGZjV2Vp
Z2h0IDwgMCkKLSAgICAgICAgZmNXZWlnaHQgPSAwOwotICAgIGlmIChmY1dlaWdodCA+IDQpCi0g
ICAgICAgIGZjV2VpZ2h0ID0gNDsKLQotICAgIC8qIE1hcCB0byBmaW5hbCBGQ19XRUlHSFQgdmFs
dWUgKi8KLSAgICBzdGF0aWMgaW50IGZjV2VpZ2h0c1s1XSA9IHsKLSAgICAgICAgRkNfV0VJR0hU
X0xJR0hULCAgICAgIC8qIDAgKi8KLSAgICAgICAgRkNfV0VJR0hUX01FRElVTSwgICAgIC8qIDEg
Ki8KLSAgICAgICAgRkNfV0VJR0hUX0RFTUlCT0xELCAgIC8qIDIgKi8KLSAgICAgICAgRkNfV0VJ
R0hUX0JPTEQsICAgICAgIC8qIDMgKi8KLSAgICAgICAgRkNfV0VJR0hUX0JMQUNLLCAgICAgIC8q
IDQgKi8KLSAgICB9OwotCi0gICAgcmV0dXJuIGZjV2VpZ2h0c1tmY1dlaWdodF07Ci0KLX0KLQot
Lyogc3RhdGljICovCi12b2lkCi1BZGRMYW5nR3JvdXAoRmNQYXR0ZXJuICphUGF0dGVybiwgbnNJ
QXRvbSAqYUxhbmdHcm91cCkKLXsKLSAgICAvLyBGaW5kIHRoZSBGQyBsYW5nIGdyb3VwIGZvciB0
aGlzIGxhbmcgZ3JvdXAKLSAgICBuc0NBdXRvU3RyaW5nIGNuYW1lOwotICAgIGFMYW5nR3JvdXAt
PlRvVVRGOFN0cmluZyhjbmFtZSk7Ci0KLSAgICAvLyBzZWUgaWYgdGhlIGxhbmcgZ3JvdXAgbmVl
ZHMgdG8gYmUgdHJhbnNsYXRlZCBmcm9tIG1vemlsbGEncwotICAgIC8vIGludGVybmFsIG1hcHBp
bmcgaW50byBmb250Y29uZmlnJ3MKLSAgICBjb25zdCBzdHJ1Y3QgTW96WGZ0TGFuZ0dyb3VwICps
YW5nR3JvdXA7Ci0gICAgbGFuZ0dyb3VwID0gRmluZEZDTGFuZ0dyb3VwKGNuYW1lKTsKLQotICAg
IC8vIGlmIHRoZXJlJ3Mgbm8gbGFuZyBncm91cCwganVzdCB1c2UgdGhlIGxhbmcgZ3JvdXAgYXMg
aXQgd2FzCi0gICAgLy8gcGFzc2VkIHRvIHVzCi0gICAgLy8KLSAgICAvLyB3ZSdyZSBjYXN0aW5n
IGF3YXkgdGhlIGNvbnN0IGhlcmUgZm9yIHRoZSBzdHJpbmdzIC0gc2hvdWxkIGJlCi0gICAgLy8g
c2FmZS4KLSAgICBpZiAoIWxhbmdHcm91cCkKLSAgICAgICAgRmNQYXR0ZXJuQWRkU3RyaW5nKGFQ
YXR0ZXJuLCBGQ19MQU5HLCAoRmNDaGFyOCAqKWNuYW1lLmdldCgpKTsKLSAgICBlbHNlIGlmIChs
YW5nR3JvdXAtPlhmdExhbmcpIAotICAgICAgICBGY1BhdHRlcm5BZGRTdHJpbmcoYVBhdHRlcm4s
IEZDX0xBTkcsIChGY0NoYXI4ICopbGFuZ0dyb3VwLT5YZnRMYW5nKTsKLX0KLQotLyogc3RhdGlj
ICovCi12b2lkCi1BZGRGRlJFKEZjUGF0dGVybiAqYVBhdHRlcm4sIG5zQ1N0cmluZyAqYUZhbWls
eSwgUFJCb29sIGFXZWFrKQotewotICAgIG5zQ0F1dG9TdHJpbmcgZmFtaWx5OwotICAgIEZGUkVU
b0ZhbWlseSgqYUZhbWlseSwgZmFtaWx5KTsKLQotICAgIEZjVmFsdWUgdjsKLSAgICB2LnR5cGUg
PSBGY1R5cGVTdHJpbmc7Ci0gICAgLy8gY2FzdGluZyBhd2F5IHRoZSBjb25zdCBoZXJlLCBzaG91
bGQgYmUgc2FmZQotICAgIHYudS5zID0gKEZjQ2hhcjggKilmYW1pbHkuZ2V0KCk7Ci0KLSAgICBp
ZiAoYVdlYWspCi0gICAgICAgIEZjUGF0dGVybkFkZFdlYWsoYVBhdHRlcm4sIEZDX0ZBTUlMWSwg
diwgRmNUcnVlKTsKLSAgICBlbHNlCi0gICAgICAgIEZjUGF0dGVybkFkZChhUGF0dGVybiwgRkNf
RkFNSUxZLCB2LCBGY1RydWUpOwotfQotCi0vKiBzdGF0aWMgKi8KLXZvaWQKLUZGUkVUb0ZhbWls
eShuc0FDU3RyaW5nICZhRkZSRU5hbWUsIG5zQUNTdHJpbmcgJm9GYW1pbHkpCi17Ci0gIGlmIChG
RlJFQ291bnRIeXBoZW5zKGFGRlJFTmFtZSkgPT0gMykgewotICAgICAgUFJJbnQzMiBmYW1pbHlI
eXBoZW4gPSBhRkZSRU5hbWUuRmluZENoYXIoJy0nKSArIDE7Ci0gICAgICBQUkludDMyIHJlZ2lz
dHJ5SHlwaGVuID0gYUZGUkVOYW1lLkZpbmRDaGFyKCctJyxmYW1pbHlIeXBoZW4pOwotICAgICAg
b0ZhbWlseS5BcHBlbmQoU3Vic3RyaW5nKGFGRlJFTmFtZSwgZmFtaWx5SHlwaGVuLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5SHlwaGVuLWZhbWlseUh5cGhlbikpOwot
ICB9Ci0gIGVsc2UgewotICAgICAgb0ZhbWlseS5BcHBlbmQoYUZGUkVOYW1lKTsKLSAgfQotfQot
Ci0vKiBzdGF0aWMgKi8KLWludAotRkZSRUNvdW50SHlwaGVucyAobnNBQ1N0cmluZyAmYUZGUkVO
YW1lKQotewotICAgIGludCBoID0gMDsKLSAgICBQUkludDMyIGh5cGhlbiA9IDA7Ci0gICAgd2hp
bGUgKChoeXBoZW4gPSBhRkZSRU5hbWUuRmluZENoYXIoJy0nLCBoeXBoZW4pKSA+PSAwKSB7Ci0g
ICAgICAgICsraDsKLSAgICAgICAgKytoeXBoZW47Ci0gICAgfQotICAgIHJldHVybiBoOwotfQot
Ci0vKiBzdGF0aWMgKi8KLWludAogQ29tcGFyZUZvbnROYW1lcyAoY29uc3Qgdm9pZCogYUFyZzEs
IGNvbnN0IHZvaWQqIGFBcmcyLCB2b2lkKiBhQ2xvc3VyZSkKIHsKICAgICBjb25zdCBQUlVuaWNo
YXIqIHN0cjEgPSAqKChjb25zdCBQUlVuaWNoYXIqKikgYUFyZzEpOwogICAgIGNvbnN0IFBSVW5p
Y2hhciogc3RyMiA9ICooKGNvbnN0IFBSVW5pY2hhcioqKSBhQXJnMik7CiAKICAgICByZXR1cm4g
bnNDUlQ6OnN0cmNtcChzdHIxLCBzdHIyKTsKIH0KIAotUFJCb29sCi1Jc0FTQ0lJRm9udE5hbWUo
Y29uc3QgbnNTdHJpbmcmIGFOYW1lKQotewotICAgIFBSVWludDMyIGxlbiA9IGFOYW1lLkxlbmd0
aCgpOwotICAgIGNvbnN0IFBSVW5pY2hhciogc3RyID0gYU5hbWUuZ2V0KCk7Ci0gICAgZm9yIChQ
UlVpbnQzMiBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFgg
Zm9udCBuYW1lcyBhcmUgcHJpbnRhYmxlIEFTQ0lJLCBpZ25vcmUgb3RoZXJzIChmb3Igbm93KQot
ICAgICAgICAgKi8KLSAgICAgICAgaWYgKChzdHJbaV0gPCAweDIwKSB8fCAoc3RyW2ldID4gMHg3
RSkpIHsKLSAgICAgICAgICAgIHJldHVybiBQUl9GQUxTRTsKLSAgICAgICAgfQotICAgIH0KLSAg
Ci0gICAgcmV0dXJuIFBSX1RSVUU7Ci19Ci0KIC8qIHN0YXRpYyAqLwogbnNyZXN1bHQKIEVudW1G
b250c1hmdChuc0lBdG9tKiBhTGFuZ0dyb3VwLCBjb25zdCBjaGFyKiBhR2VuZXJpYywKICAgICAg
ICAgICAgICBQUlVpbnQzMiogYUNvdW50LCBQUlVuaWNoYXIqKiogYVJlc3VsdCkKIHsKICAgICBG
Y1BhdHRlcm4gICAqcGF0ID0gTlVMTDsKICAgICBGY09iamVjdFNldCAqb3MgID0gTlVMTDsKQEAg
LTI0MjIsMTUgKzIyMzMsMTUgQEAgRW51bUZvbnRzWGZ0KG5zSUF0b20qIGFMYW5nR3JvdXAsIGNv
bnN0IAogCiAgICAgb3MgPSBGY09iamVjdFNldEJ1aWxkKEZDX0ZBTUlMWSwgRkNfRk9VTkRSWSwg
MCk7CiAgICAgaWYgKCFvcykKICAgICAgICAgZ290byBlbmQ7CiAKICAgICAvLyB0YWtlIHRoZSBw
YXR0ZXJuIGFuZCBhZGQgdGhlIGxhbmcgZ3JvdXAgdG8gaXQKICAgICBpZiAoYUxhbmdHcm91cCkK
LSAgICAgICAgQWRkTGFuZ0dyb3VwKHBhdCwgYUxhbmdHcm91cCk7CisgICAgICAgIE5TX0FkZExh
bmdHcm91cChwYXQsIGFMYW5nR3JvdXApOwogCiAgICAgLy8gZ2V0IHRoZSBmb250IGxpc3QKICAg
ICBmcyA9IEZjRm9udExpc3QoMCwgcGF0LCBvcyk7CiAKICAgICBpZiAoIWZzKQogICAgICAgICBn
b3RvIGVuZDsKIApAQCAtMjUzMCwyOCArMjM0MSwxNCBAQCBFbnVtRm9udHNYZnQobnNJQXRvbSog
YUxhbmdHcm91cCwgY29uc3QgCiAgICAgaWYgKGZzKQogICAgICAgICBGY0ZvbnRTZXREZXN0cm95
KGZzKTsKIAogICAgIHJldHVybiBydjsKIH0KIAogLyogc3RhdGljICovCi1jb25zdCBNb3pYZnRM
YW5nR3JvdXAqCi1GaW5kRkNMYW5nR3JvdXAgKG5zQUNTdHJpbmcgJmFMYW5nR3JvdXApCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpIDwgTlVNX1hGVF9MQU5HX0dST1VQUzsgKytpKSB7
Ci0gICAgICAgIGlmIChhTGFuZ0dyb3VwLkVxdWFscyhNb3pYZnRMYW5nR3JvdXBzW2ldLm1vekxh
bmdHcm91cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ2FzZUluc2Vuc2l0aXZl
Q1N0cmluZ0NvbXBhcmF0b3IoKSkpIHsKLSAgICAgICAgICAgIHJldHVybiAmTW96WGZ0TGFuZ0dy
b3Vwc1tpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuc251bGw7Ci19Ci0KLS8q
IHN0YXRpYyAqLwogdm9pZAogQ29udmVydENoYXJUb1VDUzQoY29uc3QgY2hhciAqYVN0cmluZywg
UFJVaW50MzIgYUxlbmd0aCwgCiAgICAgICAgICAgICAgICAgICBuc0F1dG9GY0NoYXIzMkJ1ZmZl
ciAmYU91dEJ1ZmZlciwgUFJVaW50MzIgKmFPdXRMZW4pCiB7CiAgICAgKmFPdXRMZW4gPSAwOwog
ICAgIEZjQ2hhcjMyICpvdXRCdWZmZXI7CiAKSW5kZXg6IGdmeC9zcmMvZ3RrL25zR2Z4RmFjdG9y
eUdUSy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL2d0
ay9uc0dmeEZhY3RvcnlHVEsuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU4CmRpZmYgLXUg
LTcgLXAgLXIxLjU4IG5zR2Z4RmFjdG9yeUdUSy5jcHAKLS0tIGdmeC9zcmMvZ3RrL25zR2Z4RmFj
dG9yeUdUSy5jcHAJNyBTZXAgMjAwMyAyMjoyMDozOCAtMDAwMAkxLjU4CisrKyBnZngvc3JjL2d0
ay9uc0dmeEZhY3RvcnlHVEsuY3BwCTE3IE9jdCAyMDA0IDExOjEwOjExIC0wMDAwCkBAIC02Nywx
NiArNjcsMTggQEAKICNlbmRpZgogI2lmZGVmIE1PWl9FTkFCTEVfQ09SRVhGT05UUwogI2luY2x1
ZGUgIm5zRm9udE1ldHJpY3NHVEsuaCIKICNlbmRpZgogI2luY2x1ZGUgIm5zRm9udE1ldHJpY3NV
dGlscy5oIgogI2luY2x1ZGUgIm5zUHJpbnRTZXNzaW9uLmgiCiAjaW5jbHVkZSAiZ2Z4SW1hZ2VG
cmFtZS5oIgorI2lmZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUyCiAjaW5jbHVkZSAibnNGVDJGb250
Q2F0YWxvZy5oIgogI2luY2x1ZGUgIm5zRnJlZVR5cGUuaCIKKyNlbmRpZgogCiAvLyBvYmplY3Rz
IHRoYXQganVzdCByZXF1aXJlIGdlbmVyaWMgY29uc3RydWN0b3JzCiAKIE5TX0dFTkVSSUNfRkFD
VE9SWV9DT05TVFJVQ1RPUihuc0RldmljZUNvbnRleHRHVEspCiBOU19HRU5FUklDX0ZBQ1RPUllf
Q09OU1RSVUNUT1IobnNSZW5kZXJpbmdDb250ZXh0R1RLKQogTlNfR0VORVJJQ19GQUNUT1JZX0NP
TlNUUlVDVE9SKG5zSW1hZ2VHVEspCiBOU19HRU5FUklDX0ZBQ1RPUllfQ09OU1RSVUNUT1IobnNC
bGVuZGVyKQpAQCAtODgsMTYgKzkwLDE2IEBAIE5TX0dFTkVSSUNfRkFDVE9SWV9DT05TVFJVQ1RP
Uihuc1NjcmVlbk0KIE5TX0dFTkVSSUNfRkFDVE9SWV9DT05TVFJVQ1RPUihuc1ByaW50T3B0aW9u
c0dUSykKIE5TX0dFTkVSSUNfRkFDVE9SWV9DT05TVFJVQ1RPUihuc1ByaW50ZXJFbnVtZXJhdG9y
R1RLKQogI2lmZGVmIE5BVElWRV9USEVNRV9TVVBQT1JUCiBOU19HRU5FUklDX0ZBQ1RPUllfQ09O
U1RSVUNUT1IobnNOYXRpdmVUaGVtZUdUSykKICNlbmRpZgogTlNfR0VORVJJQ19GQUNUT1JZX0NP
TlNUUlVDVE9SX0lOSVQobnNQcmludFNlc3Npb24sIEluaXQpCiBOU19HRU5FUklDX0ZBQ1RPUllf
Q09OU1RSVUNUT1IoZ2Z4SW1hZ2VGcmFtZSkKLU5TX0dFTkVSSUNfRkFDVE9SWV9DT05TVFJVQ1RP
Uihuc0ZUMkZvbnRDYXRhbG9nKQogI2lmZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUyCitOU19HRU5F
UklDX0ZBQ1RPUllfQ09OU1RSVUNUT1IobnNGVDJGb250Q2F0YWxvZykKIE5TX0dFTkVSSUNfRkFD
VE9SWV9DT05TVFJVQ1RPUl9JTklUKG5zRnJlZVR5cGUyLCBJbml0KQogI2VuZGlmCiAKIC8vIG91
ciBjdXN0b20gY29uc3RydWN0b3JzCiAKIHN0YXRpYyBuc3Jlc3VsdAogbnNGb250TWV0cmljc0Nv
bnN0cnVjdG9yKG5zSVN1cHBvcnRzICphT3V0ZXIsIFJFRk5TSUlEIGFJSUQsIHZvaWQgKiphUmVz
dWx0KQpAQCAtMjg3LDE5ICsyODksMTkgQEAgc3RhdGljIGNvbnN0IG5zTW9kdWxlQ29tcG9uZW50
SW5mbyBjb21wbwogICAgIEdGWF9JTUFHRUZSQU1FX0NJRCwKICAgICAiQG1vemlsbGEub3JnL2dm
eC9pbWFnZS9mcmFtZTsyIiwKICAgICBnZnhJbWFnZUZyYW1lQ29uc3RydWN0b3IsIH0sCiAgIHsg
IlByaW50IFNlc3Npb24iLAogICAgIE5TX1BSSU5UU0VTU0lPTl9DSUQsCiAgICAgIkBtb3ppbGxh
Lm9yZy9nZngvcHJpbnRzZXNzaW9uOzEiLAogICAgIG5zUHJpbnRTZXNzaW9uQ29uc3RydWN0b3Ig
fSwKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogICB7ICJUcnVlVHlwZSBGb250IENhdGFs
b2cgU2VydmljZSIsCiAgICAgTlNfRk9OVENBVEFMT0dTRVJWSUNFX0NJRCwKICAgICAiQG1vemls
bGEub3JnL2dmeC94Zm9udGNhdGFsb2dzZXJ2aWNlOzEiLAogICAgIG5zRlQyRm9udENhdGFsb2dD
b25zdHJ1Y3RvciB9LAotI2lmZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUyCiAgIHsgIkZyZWVUeXBl
MiByb3V0aW5lcyIsCiAgICAgTlNfRlJFRVRZUEUyX0NJRCwKICAgICBOU19GUkVFVFlQRTJfQ09O
VFJBQ1RJRCwKICAgICBuc0ZyZWVUeXBlMkNvbnN0cnVjdG9yIH0sCiAjZW5kaWYKICNpZmRlZiBO
QVRJVkVfVEhFTUVfU1VQUE9SVAogICAgeyAiTmF0aXZlIFRoZW1lIFJlbmRlcmVyIiwKSW5kZXg6
IGdmeC9zcmMvcHMvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96
aWxsYS9nZngvc3JjL3BzL01ha2VmaWxlLmluLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRp
ZmYgLXUgLTcgLXAgLXIxLjUwIE1ha2VmaWxlLmluCi0tLSBnZngvc3JjL3BzL01ha2VmaWxlLmlu
CTExIE1hciAyMDA0IDIyOjA1OjMyIC0wMDAwCTEuNTAKKysrIGdmeC9zcmMvcHMvTWFrZWZpbGUu
aW4JMTcgT2N0IDIwMDQgMTE6MTA6MTQgLTAwMDAKQEAgLTczLDM1ICs3Myw0NiBAQCBFWFRSQV9E
U09fTERPUFRTID0gXAogCQktTCQoRElTVCkvbGliIFwKIAkJLWxnZnhzaGFyZWRfcyBcCiAJCSQo
RVhUUkFfRFNPX0xJQlMpIFwKIAkJJChNT1pfQ09NUE9ORU5UX0xJQlMpIFwKIAkJJChNT1pfVU5J
Q0hBUlVUSUxfTElCUykgXAogCQkkKE5VTEwpCiAKLWlmZGVmIE1PWl9FTkFCTEVfRlJFRVRZUEUy
CitpZmRlZiBNT1pfRU5BQkxFX1hGVAorRVhUUkFfRFNPX0xET1BUUyArPSBcCisJCSQoTU9aX1hG
VF9MSUJTKSBcCisJCSQoTlVMTCkKK2VuZGlmCisKK2lmbmVxICgsJChNT1pfRU5BQkxFX0ZSRUVU
WVBFMikkKE1PWl9FTkFCTEVfWEZUKSkKIENQUFNSQ1MJCSs9IFwKIAkJbnNDaWRNYXAuY3BwIFwK
IAkJbnNUeXBlMS5jcHAgXAogCQluc1R5cGU4LmNwcCBcCiAJCSQoTlVMTCkKIGVuZGlmCiAKIGlu
Y2x1ZGUgJCh0b3BzcmNkaXIpL2NvbmZpZy9ydWxlcy5tawogCi1pZmRlZiBNT1pfRU5BQkxFX0ZS
RUVUWVBFMgotSU5DTFVERVMgICAgICAgICs9ICQoRlQyX0NGTEFHUykKLWVuZGlmCi0KIENGTEFH
UwkJKz0gJChUS19DRkxBR1MpCiBDWFhGTEFHUwkrPSAkKFRLX0NGTEFHUykKIAogTE9DQUxfSU5D
TFVERVMgPSBcCiAJCS1JLi4vLi4gXAogCQktSSQoc3JjZGlyKS8uLiBcCiAgICAgICAgICAgICAg
ICAgICQoTlVMTCkKIAoraWZkZWYgTU9aX0VOQUJMRV9YRlQKK0lOQ0xVREVTCQkrPSAkKE1PWl9Y
RlRfQ0ZMQUdTKQorTE9DQUxfSU5DTFVERVMJKz0gLUkkKHNyY2RpcikvLi4vc2hhcmVkCitlbHNl
CitpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgorSU5DTFVERVMJKz0gJChGVDJfQ0ZMQUdTKQor
ZW5kaWYKK2VuZGlmCisKIGxpYnM6OgogCSQoSU5TVEFMTCkgJChFWFBPUlRfUkVTT1VSQ0UpICQo
RElTVCkvYmluL3JlcwogCiBpbnN0YWxsOjoKIAkkKFNZU0lOU1RBTEwpICQoSUZMQUdTMSkgJChF
WFBPUlRfUkVTT1VSQ0UpICQoREVTVERJUikkKG1vemFwcGRpcikvcmVzCiAKSW5kZXg6IGdmeC9z
cmMvcHMvbnNEZXZpY2VDb250ZXh0UFMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290
L21vemlsbGEvZ2Z4L3NyYy9wcy9uc0RldmljZUNvbnRleHRQUy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNjUKZGlmZiAtdSAtNyAtcCAtcjEuNjUgbnNEZXZpY2VDb250ZXh0UFMuY3BwCi0t
LSBnZngvc3JjL3BzL25zRGV2aWNlQ29udGV4dFBTLmNwcAkyMCBGZWIgMjAwNCAxNzoyOTozMSAt
MDAwMAkxLjY1CisrKyBnZngvc3JjL3BzL25zRGV2aWNlQ29udGV4dFBTLmNwcAkxNyBPY3QgMjAw
NCAxMToxMDoxNCAtMDAwMApAQCAtMjA5LDI0ICsyMDksMzUgQEAgbnNEZXZpY2VDb250ZXh0UFM6
OkluaXREZXZpY2VDb250ZXh0UFMobgogICBtUGFyZW50RGV2aWNlQ29udGV4dCA9IGFQYXJlbnRD
b250ZXh0OwogCiAgIG1QU0ZvbnRHZW5lcmF0b3JMaXN0ID0gbmV3IG5zSGFzaHRhYmxlKCk7CiAg
IE5TX0VOU1VSRV9UUlVFKG1QU0ZvbnRHZW5lcmF0b3JMaXN0LCBOU19FUlJPUl9PVVRfT0ZfTUVN
T1JZKTsKICAKICAgbnNyZXN1bHQgcnY7CiAgIG5zQ09NUHRyPG5zSVByZWY+IHByZWYoZG9fR2V0
U2VydmljZShOU19QUkVGX0NPTlRSQUNUSUQsICZydikpOworI2lmZGVmIE1PWl9FTkFCTEVfWEZU
CisgIGlmIChOU19TVUNDRUVERUQocnYpKSB7CisgICAgICBydiA9IHByZWYtPkdldEJvb2xQcmVm
KCJmb250LkZyZWVUeXBlMi5wcmludGluZyIsICZtRlRQRW5hYmxlKTsKKyAgICAgIGlmIChOU19G
QUlMRUQocnYpKQorICAgICAgICBtRlRQRW5hYmxlID0gUFJfRkFMU0U7CisgIH0KKyNlbHNlIAor
ICBtRlRQRW5hYmxlID0gUFJfRkFMU0U7CisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKICAg
aWYgKE5TX1NVQ0NFRURFRChydikpIHsKICAgICBydiA9IHByZWYtPkdldEJvb2xQcmVmKCJmb250
LkZyZWVUeXBlMi5lbmFibGUiLCAmbUZUUEVuYWJsZSk7CiAgICAgaWYgKE5TX0ZBSUxFRChydikp
CiAgICAgICBtRlRQRW5hYmxlID0gUFJfRkFMU0U7CiAgICAgaWYgKG1GVFBFbmFibGUpIHsKICAg
ICAgIHJ2ID0gcHJlZi0+R2V0Qm9vbFByZWYoImZvbnQuRnJlZVR5cGUyLnByaW50aW5nIiwgJm1G
VFBFbmFibGUpOwogICAgICAgaWYgKE5TX0ZBSUxFRChydikpCiAgICAgICAgIG1GVFBFbmFibGUg
PSBQUl9GQUxTRTsKICAgICB9CiAgIH0KKyNlbmRpZgorI2VuZGlmCiAgIAogICAvLyB0aGUgdXNl
cidzIGxvY2FsZQogICBuc0NPTVB0cjxuc0lMYW5ndWFnZUF0b21TZXJ2aWNlPiBsYW5nU2Vydmlj
ZTsKICAgbGFuZ1NlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX0xBTkdVQUdFQVRPTVNFUlZJQ0Vf
Q09OVFJBQ1RJRCk7CiAgIGlmIChsYW5nU2VydmljZSkgewogICAgIGxhbmdTZXJ2aWNlLT5HZXRM
b2NhbGVMYW5ndWFnZUdyb3VwKCZnVXNlcnNMb2NhbGUpOwogICB9CkBAIC00MzEsMTUgKzQ0Miwx
NSBAQCBHZW5lcmF0ZVBTRm9udENhbGxiYWNrKG5zSGFzaEtleSAqYUtleSwgCiAgKi8KIE5TX0lN
RVRIT0RJTVAgbnNEZXZpY2VDb250ZXh0UFM6OkVuZERvY3VtZW50KHZvaWQpCiB7CiAgIFBSX0xP
Ryhuc0RldmljZUNvbnRleHRQU0xNLCBQUl9MT0dfREVCVUcsICgibnNEZXZpY2VDb250ZXh0UFM6
OkVuZERvY3VtZW50KClcbiIpKTsKIAogICBOU19FTlNVUkVfVFJVRShtUFNPYmogIT0gbnNudWxs
LCBOU19FUlJPUl9OVUxMX1BPSU5URVIpOwogICAKLSNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBF
MgorI2lmIGRlZmluZWQoTU9aX0VOQUJMRV9GUkVFVFlQRTIpIHx8IGRlZmluZWQoTU9aX0VOQUJM
RV9YRlQpCiAgIC8vIEJlZm9yZSBvdXRwdXQgVHlwZTggZm9udCwgY2hlY2sgd2hldGhlciBwcmlu
dGVyIHN1cHBvcnQgQ0lEIGZvbnQKICAgaWYgKG1GVFBFbmFibGUgJiYgbVBTRm9udEdlbmVyYXRv
ckxpc3QpCiAgICAgaWYgKG1QU0ZvbnRHZW5lcmF0b3JMaXN0LT5Db3VudCgpID4gMCkKICAgICAg
IG1QU09iai0+YWRkX2NpZF9jaGVjaygpOwogI2VuZGlmCiAgCiAgIC8qIENvcmUgb2YgVHJ1ZVR5
cGUgcHJpbnRpbmc6CkluZGV4OiBnZngvc3JjL3BzL25zRm9udE1ldHJpY3NQUy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL3BzL25zRm9udE1ldHJpY3NQ
Uy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDIKZGlmZiAtdSAtNyAtcCAtcjEuNDIgbnNG
b250TWV0cmljc1BTLmNwcAotLS0gZ2Z4L3NyYy9wcy9uc0ZvbnRNZXRyaWNzUFMuY3BwCTUgRmVi
IDIwMDQgMDE6NTc6MDUgLTAwMDAJMS40MgorKysgZ2Z4L3NyYy9wcy9uc0ZvbnRNZXRyaWNzUFMu
Y3BwCTE3IE9jdCAyMDA0IDExOjEwOjE2IC0wMDAwCkBAIC0xNywxNCArMTcsMTcgQEAKICAqIFRo
ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyAKICAqIE5ldHNjYXBl
IENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAogICogdGhlIEluaXRpYWwg
RGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIENvbnRyaWJ1dG9yKHMpOgog
ICogICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nl
bi5kZT4KKyAqICAgRXJ2aW4gWWFuIDxFcnZpbi5ZYW5Ac3VuLmNvbT4KKyAqICAgQ2hyaXN0b3Bo
ZXIgQmxpenphcmQgPGJsaXp6YXJkQG1vemlsbGEub3JnPgorICogICBKdW5nc2hpayBTaGluIDxq
c2hpbkBpMThubDEwbi5jb20+CiAgKgogICoKICAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCiAgKiBlaXRoZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJH
UEwiKSwgb3IKICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAogICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKICAqIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5CkBAIC00MywzMCArNDYsMzkgQEAKICNpbmNsdWRlICJuc1JlbmRlcmlu
Z0NvbnRleHRQUy5oIgogI2luY2x1ZGUgIm5zSVNlcnZpY2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
bnNHZnhDSUlELmgiCiAKICNpbmNsdWRlICJuc0lQcmVmLmgiCiAjaW5jbHVkZSAibnNWb2lkQXJy
YXkuaCIKICNpbmNsdWRlICJuc1JlYWRhYmxlVXRpbHMuaCIKLSNpZmRlZiBNT1pfRU5BQkxFX0ZS
RUVUWVBFMgorI2lmIGRlZmluZWQoTU9aX0VOQUJMRV9GUkVFVFlQRTIpIHx8IGRlZmluZWQoTU9a
X0VOQUJMRV9YRlQpCiAjaW5jbHVkZSAibnNUeXBlOC5oIgogI2VuZGlmCiAjaW5jbHVkZSAicHJs
b2cuaCIKIAogI2luY2x1ZGUgIm5zQXJyYXkuaCIKIAogZXh0ZXJuIG5zSUF0b20gKmdVc2Vyc0xv
Y2FsZTsKICNkZWZpbmUgTlNfSVNfQk9MRCh3ZWlnaHQpICgod2VpZ2h0KSA+IDQwMCA/IDEgOiAw
KQogCisjaWZkZWYgTU9aX0VOQUJMRV9YRlQKKworI2luY2x1ZGUgIm5zRm9udENvbmZpZ1V0aWxz
LmgiCisKK3N0YXRpYyBuc0ZvbnRQUyogQ3JlYXRlRm9udFBTKG5zWGZ0RW50cnkqLCBjb25zdCBu
c0ZvbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250TWV0cmljc1BTKik7
CisKKyNlbHNlCiAjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKIHN0YXRpYyBuc0ZvbnRQUyog
Q3JlYXRlRm9udFBTKG5zSVRydWVUeXBlRm9udENhdGFsb2dFbnRyeSosIGNvbnN0IG5zRm9udCYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZvbnRNZXRyaWNzUFMqKTsKIAogc3Rh
dGljIE5TX0RFRklORV9DSUQoa0ZDU0NJRCwgTlNfRk9OVENBVEFMT0dTRVJWSUNFX0NJRCk7CiAj
ZW5kaWYKKyNlbmRpZgogCiAjaWZkZWYgUFJfTE9HR0lORwogc3RhdGljIFBSTG9nTW9kdWxlSW5m
byAqZ0ZvbnRNZXRyaWNzUFNNID0gUFJfTmV3TG9nTW9kdWxlKCJGb250TWV0cmljc1BTIik7CiAj
ZW5kaWYKIAogLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogICogIFNlZSBkb2N1bWVudGF0aW9uIGluIG5zRm9udE1ldHJpY3NQUy5oCkBAIC04
OSwxOSArMTAxLDI4IEBAIG5zRm9udE1ldHJpY3NQUyA6OiB+bnNGb250TWV0cmljc1BTKCkKICAg
CiAgIGlmIChtRm9udHNQUykgewogICAgIGludCBpOwogICAgIGZvciAoaT0wOyBpPG1Gb250c1BT
LT5Db3VudCgpOyBpKyspIHsKICAgICAgIGZvbnRwcyAqZm9udFBTID0gKGZvbnRwcyAqKW1Gb250
c1BTLT5FbGVtZW50QXQoaSk7CiAgICAgICBpZiAoIWZvbnRQUykKICAgICAgICAgY29udGludWU7
Ci0gICAgICBOU19JRl9SRUxFQVNFKGZvbnRQUy0+ZW50cnkpOwogICAgICAgaWYgKGZvbnRQUy0+
Zm9udHBzKQogICAgICAgICBkZWxldGUgZm9udFBTLT5mb250cHM7CisjaWZkZWYgTU9aX0VOQUJM
RV9YRlQKKyAgICAgIGlmIChmb250UFMtPmVudHJ5KQorICAgICAgICBkZWxldGUgZm9udFBTLT5l
bnRyeTsKKyAgICAgIGlmIChmb250UFMtPmNoYXJzZXQpCisgICAgICAgIEZjQ2hhclNldERlc3Ry
b3koZm9udFBTLT5jaGFyc2V0KTsKKyNlbHNlCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIK
KyAgICAgIE5TX0lGX1JFTEVBU0UoZm9udFBTLT5lbnRyeSk7CiAgICAgICBpZiAoZm9udFBTLT5j
Y21hcCkKICAgICAgICAgRnJlZUNDTWFwKGZvbnRQUy0+Y2NtYXApOworI2VuZGlmCisjZW5kaWYK
ICAgICAgIGRlbGV0ZSBmb250UFM7CiAgICAgfQogICAgIGRlbGV0ZSBtRm9udHNQUzsKICAgfQog
CiAgIGlmIChtRm9udHNBbHJlYWR5TG9hZGVkKSB7CiAgICAgZGVsZXRlIG1Gb250c0FscmVhZHlM
b2FkZWQ7CkBAIC0xMjMsMTQgKzE0NCwxNSBAQCBOU19JTVBMX0lTVVBQT1JUUzEobnNGb250TWV0
cmljc1BTLCBuc0lGCiBOU19JTUVUSE9ESU1QCiBuc0ZvbnRNZXRyaWNzUFMgOjogSW5pdChjb25z
dCBuc0ZvbnQmIGFGb250LCBuc0lBdG9tKiBhTGFuZ0dyb3VwLAogICBuc0lEZXZpY2VDb250ZXh0
ICphQ29udGV4dCkKIHsKICAgbUxhbmdHcm91cCA9IGFMYW5nR3JvdXA7CiAKICAgbUZvbnQgPSBu
ZXcgbnNGb250KGFGb250KTsKKwogICAvL2Rvbid0IGFkZHJlZiB0aGlzIHRvIGF2b2lkIGNpcmN1
bGFyIHJlZnMKICAgbURldmljZUNvbnRleHQgPSAobnNEZXZpY2VDb250ZXh0UFMgKilhQ29udGV4
dDsKIAogICBtRm9udHNQUyA9IG5ldyBuc1ZvaWRBcnJheSgpOwogICBOU19FTlNVUkVfVFJVRSht
Rm9udHNQUywgTlNfRVJST1JfT1VUX09GX01FTU9SWSk7CiAgIG1Gb250c0FscmVhZHlMb2FkZWQg
PSBuZXcgbnNIYXNodGFibGUoKTsKICAgTlNfRU5TVVJFX1RSVUUobUZvbnRzQWxyZWFkeUxvYWRl
ZCwgTlNfRVJST1JfT1VUX09GX01FTU9SWSk7CkBAIC0xNTgsMTUgKzE4MCwxNSBAQCBuc0ZvbnRN
ZXRyaWNzUFMgOjogRGVzdHJveSgpCiB2b2lkCiBuc0ZvbnRNZXRyaWNzUFM6OlJlYWxpemVGb250
KCkKIHsKICAgaWYgKG1Gb250ICYmIG1EZXZpY2VDb250ZXh0KSB7CiAgICAgZmxvYXQgZGV2MmFw
cDsKICAgICBkZXYyYXBwID0gbURldmljZUNvbnRleHQtPkRldlVuaXRzVG9BcHBVbml0cygpOwog
ICAgIGZvbnRwcyAqZm9udCA9IChmb250cHMqKW1Gb250c1BTLT5FbGVtZW50QXQoMCk7Ci0jaWZk
ZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKKyNpZiBkZWZpbmVkKE1PWl9FTkFCTEVfRlJFRVRZUEUy
KSB8fCBkZWZpbmVkKE1PWl9FTkFCTEVfWEZUKQogICAgIE5TX0FTU0VSVElPTihmb250ICYmIGZv
bnQtPmVudHJ5LCAibm8gZm9udCBhdmFpbGFibGUiKTsKICAgICBpZiAoZm9udCAmJiAhZm9udC0+
Zm9udHBzICYmIGZvbnQtPmVudHJ5KQogICAgICAgZm9udC0+Zm9udHBzID0gQ3JlYXRlRm9udFBT
KGZvbnQtPmVudHJ5LCAqbUZvbnQsIHRoaXMpOwogI2VuZGlmCiAgICAgTlNfQVNTRVJUSU9OKGZv
bnQgJiYgZm9udC0+Zm9udHBzLCAibm8gZm9udCBhdmFpbGFibGUiKTsKICAgICBpZiAoZm9udCAm
JiBmb250LT5mb250cHMpCiAgICAgICBmb250LT5mb250cHMtPlJlYWxpemVGb250KHRoaXMsIGRl
djJhcHApOwpAQCAtNDY0LDE5ICs0ODYsMjMgQEAgbnNGb250UFM6OkZpbmRGb250KGNoYXIgYUNo
YXIsIGNvbnN0IG5zRgogLy8gbnNGb250UFMKIG5zRm9udFBTKgogbnNGb250UFM6OkZpbmRGb250
KFBSVW5pY2hhciBhQ2hhciwgY29uc3QgbnNGb250JiBhRm9udCwgCiAgICAgICAgICAgICAgICAg
ICAgbnNGb250TWV0cmljc1BTKiBhRm9udE1ldHJpY3MpCiB7CiAgIG5zRm9udFBTKiBmb250UFM7
CiAKLSNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgorI2lmIGRlZmluZWQoTU9aX0VOQUJMRV9G
UkVFVFlQRTIpIHx8IGRlZmluZWQoTU9aX0VOQUJMRV9YRlQpCiAgIG5zRGV2aWNlQ29udGV4dFBT
KiBkYyA9IGFGb250TWV0cmljcy0+R2V0RGV2aWNlQ29udGV4dCgpOwogICBOU19FTlNVUkVfVFJV
RShkYywgbnNudWxsKTsKICAgaWYgKGRjLT5tRlRQRW5hYmxlKSB7CisjaWZkZWYgTU9aX0VOQUJM
RV9YRlQKKyAgICBmb250UFMgPSBuc0ZvbnRQU1hmdDo6RmluZEZvbnQoYUNoYXIsIGFGb250LCBh
Rm9udE1ldHJpY3MpOworI2Vsc2UKICAgICBmb250UFMgPSBuc0ZvbnRQU0ZyZWVUeXBlOjpGaW5k
Rm9udChhQ2hhciwgYUZvbnQsIGFGb250TWV0cmljcyk7CisjZW5kaWYKICAgICBpZiAoZm9udFBT
KQogICAgICAgcmV0dXJuIGZvbnRQUzsKICAgfQogI2VuZGlmCiAKICAgLyogRmluZCBpbiBhZm0g
Zm9udCAqLwogICBpZiAoYUZvbnRNZXRyaWNzLT5HZXRGb250c1BTKCktPkNvdW50KCkgPiAwKSB7
CkBAIC00ODQsMTcgKzUxMCwyMyBAQCBuc0ZvbnRQUzo6RmluZEZvbnQoUFJVbmljaGFyIGFDaGFy
LCBjb25zCiAgICAgTlNfRU5TVVJFX1RSVUUoZnBzLCBuc251bGwpOwogICAgIGZvbnRQUyA9IGZw
cy0+Zm9udHBzOwogICB9CiAgIGVsc2UgewogICAgIGZvbnRQUyA9IG5zRm9udFBTQUZNOjpGaW5k
Rm9udChhRm9udCwgYUZvbnRNZXRyaWNzKTsKICAgICBmb250cHMgKmZwcyA9IG5ldyBmb250cHM7
CiAgICAgTlNfRU5TVVJFX1RSVUUoZnBzLCBuc251bGwpOwotICAgIGZwcy0+ZW50cnkgID0gbnNu
dWxsOwogICAgIGZwcy0+Zm9udHBzID0gZm9udFBTOworI2lmIGRlZmluZWQoTU9aX0VOQUJMRV9Y
RlQpIHx8IGRlZmluZWQoTU9aX0VOQUJMRV9GUkVFVFlQRTIpIAorICAgIGZwcy0+ZW50cnkgID0g
bnNudWxsOworI2lmZGVmIE1PWl9FTkFCTEVfWEZUCisgICAgZnBzLT5jaGFyc2V0ID0gbnNudWxs
OworI2Vsc2UKICAgICBmcHMtPmNjbWFwICA9IG5zbnVsbDsKKyNlbmRpZgorI2VuZGlmCiAgICAg
YUZvbnRNZXRyaWNzLT5HZXRGb250c1BTKCktPkFwcGVuZEVsZW1lbnQoZnBzKTsKICAgfQogICBy
ZXR1cm4gZm9udFBTOwogfQogCiBuc0ZvbnRQUzo6bnNGb250UFMoY29uc3QgbnNGb250JiBhRm9u
dCwgbnNGb250TWV0cmljc1BTKiBhRm9udE1ldHJpY3MpCiB7CkBAIC01NDQsMTYyICs1NzYsOTI2
IEBAIG5zRm9udFBTQUZNOjpGaW5kRm9udChjb25zdCBuc0ZvbnQmIGFGb24KIH0KIAogbnNGb250
UFNBRk06Om5zRm9udFBTQUZNKGNvbnN0IG5zRm9udCYgYUZvbnQsIG5zQUZNT2JqZWN0KiBhQUZN
SW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDE2IGZvbnRJbmRleCwgbnNGb250
TWV0cmljc1BTKiBhRm9udE1ldHJpY3MpIDoKIG5zRm9udFBTKGFGb250LCBhRm9udE1ldHJpY3Mp
LCBtQUZNSW5mbyhhQUZNSW5mbyksIG1Gb250SW5kZXgoZm9udEluZGV4KQogewogICBpZiAoISht
Rm9udCAmJiBtQUZNSW5mbykpIHJldHVybjsKLSAgbUZhbWlseU5hbWUuQXNzaWduV2l0aENvbnZl
cnNpb24oKGNoYXIqKW1BRk1JbmZvLT5tUFNGb250SW5mby0+bUZhbWlseU5hbWUpOworICBBcHBl
bmRBU0NJSXRvVVRGMTYobUFGTUluZm8tPm1QU0ZvbnRJbmZvLT5tRmFtaWx5TmFtZSwgbUZhbWls
eU5hbWUpOwogfQogCiBuc0ZvbnRQU0FGTTo6fm5zRm9udFBTQUZNKCkKIHsKICAgaWYgKG1BRk1J
bmZvKSB7CiAgICAgZGVsZXRlIG1BRk1JbmZvOwogICAgIG1BRk1JbmZvID0gbnNudWxsOwogICB9
CiB9CiAKIG5zY29vcmQKIG5zRm9udFBTQUZNOjpHZXRXaWR0aChjb25zdCBjaGFyKiBhU3RyaW5n
LCBQUlVpbnQzMiBhTGVuZ3RoKQogewotICBuc2Nvb3JkIHdpZHRoID0gMDsKLSAgaWYgKG1BRk1J
bmZvKSB7Ci0gICAgbUFGTUluZm8tPkdldFN0cmluZ1dpZHRoKGFTdHJpbmcsIHdpZHRoLCBhTGVu
Z3RoKTsKLSAgfQotICByZXR1cm4gd2lkdGg7CisgIG5zY29vcmQgd2lkdGggPSAwOworICBpZiAo
bUFGTUluZm8pIHsKKyAgICBtQUZNSW5mby0+R2V0U3RyaW5nV2lkdGgoYVN0cmluZywgd2lkdGgs
IGFMZW5ndGgpOworICB9CisgIHJldHVybiB3aWR0aDsKK30KKworbnNjb29yZAorbnNGb250UFNB
Rk06OkdldFdpZHRoKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCkK
K3sKKyAgbnNjb29yZCB3aWR0aCA9IDA7CisgIGlmIChtQUZNSW5mbykgeworICAgIG1BRk1JbmZv
LT5HZXRTdHJpbmdXaWR0aChhU3RyaW5nLCB3aWR0aCwgYUxlbmd0aCk7CisgIH0KKyAgcmV0dXJu
IHdpZHRoOworfQorCituc2Nvb3JkCituc0ZvbnRQU0FGTTo6RHJhd1N0cmluZyhuc1JlbmRlcmlu
Z0NvbnRleHRQUyogYUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFY
LCBuc2Nvb3JkIGFZLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVN0cmlu
ZywgUFJVaW50MzIgYUxlbmd0aCkKK3sKKyAgTlNfRU5TVVJFX1RSVUUoYUNvbnRleHQsIDApOwor
ICBuc1Bvc3RTY3JpcHRPYmoqIHBzT2JqID0gYUNvbnRleHQtPkdldFBvc3RTY3JpcHRPYmooKTsK
KyAgTlNfRU5TVVJFX1RSVUUocHNPYmosIDApOworCisgIHBzT2JqLT5tb3ZldG8oYVgsIGFZKTsK
KyAgcHNPYmotPnNob3coYVN0cmluZywgYUxlbmd0aCwgIiIpOworICByZXR1cm4gR2V0V2lkdGgo
YVN0cmluZywgYUxlbmd0aCk7Cit9CisKK25zY29vcmQKK25zRm9udFBTQUZNOjpEcmF3U3RyaW5n
KG5zUmVuZGVyaW5nQ29udGV4dFBTKiBhQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5zY29vcmQgYVgsIG5zY29vcmQgYVksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
UlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGgpCit7CisgIE5TX0VOU1VSRV9UUlVF
KGFDb250ZXh0LCAwKTsKKyAgbnNQb3N0U2NyaXB0T2JqKiBwc09iaiA9IGFDb250ZXh0LT5HZXRQ
b3N0U2NyaXB0T2JqKCk7CisgIE5TX0VOU1VSRV9UUlVFKHBzT2JqLCAwKTsKKworICBwc09iai0+
bW92ZXRvKGFYLCBhWSk7CisgIHBzT2JqLT5zaG93KGFTdHJpbmcsIGFMZW5ndGgsICIiLCAwKTsK
KyAgcmV0dXJuIEdldFdpZHRoKGFTdHJpbmcsIGFMZW5ndGgpOworfQorCituc3Jlc3VsdAorbnNG
b250UFNBRk06OlJlYWxpemVGb250KG5zRm9udE1ldHJpY3NQUyogYUZvbnRNZXRyaWNzLCBmbG9h
dCBkZXYyYXBwKQoreworICBOU19FTlNVUkVfQVJHX1BPSU5URVIoYUZvbnRNZXRyaWNzKTsKKwor
ICBmbG9hdCBmb250U2l6ZTsKKyAgZmxvYXQgb2Zmc2V0OworCisgIG5zY29vcmQgb25lUGl4ZWwg
PSBOU1RvQ29vcmRSb3VuZCgxICogZGV2MmFwcCk7CisKKyAgLy8gY29udmVydCB0aGUgZm9udCBz
aXplIHdoaWNoIGlzIGluIHR3aXBzIHRvIHBvaW50cworICBmb250U2l6ZSA9IG1Gb250LT5zaXpl
IC8gVFdJUFNfUEVSX1BPSU5UX0ZMT0FUOworCisgIG9mZnNldCA9IE5TRmxvYXRQb2ludHNUb1R3
aXBzKGZvbnRTaXplICogbUFGTUluZm8tPm1QU0ZvbnRJbmZvLT5tWEhlaWdodCkgLyAxMDAwLjBm
OworICBuc2Nvb3JkIHhIZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChvZmZzZXQpOworICBhRm9udE1l
dHJpY3MtPlNldFhIZWlnaHQoeEhlaWdodCk7CisgIGFGb250TWV0cmljcy0+U2V0U3VwZXJzY3Jp
cHRPZmZzZXQoeEhlaWdodCk7CisgIGFGb250TWV0cmljcy0+U2V0U3Vic2NyaXB0T2Zmc2V0KHhI
ZWlnaHQpOworICBhRm9udE1ldHJpY3MtPlNldFN0cmlrZW91dCgobnNjb29yZCkoeEhlaWdodCAv
IDIpLCBvbmVQaXhlbCk7CisKKyAgb2Zmc2V0ID0gTlNGbG9hdFBvaW50c1RvVHdpcHMoZm9udFNp
emUgKiBtQUZNSW5mby0+bVBTRm9udEluZm8tPm1VbmRlcmxpbmVQb3NpdGlvbikgLyAxMDAwLjBm
OworICBhRm9udE1ldHJpY3MtPlNldFVuZGVybGluZShOU1RvQ29vcmRSb3VuZChvZmZzZXQpLCBv
bmVQaXhlbCk7CisKKyAgbnNjb29yZCBzaXplID0gTlNUb0Nvb3JkUm91bmQoZm9udFNpemUgKiBk
ZXYyYXBwKTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRIZWlnaHQoc2l6ZSk7CisgIGFGb250TWV0cmlj
cy0+U2V0RW1IZWlnaHQoc2l6ZSk7CisgIGFGb250TWV0cmljcy0+U2V0TWF4QWR2YW5jZShzaXpl
KTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRNYXhIZWlnaHQoc2l6ZSk7CisKKyAgb2Zmc2V0ID0gTlNG
bG9hdFBvaW50c1RvVHdpcHMoZm9udFNpemUgKiBtQUZNSW5mby0+bVBTRm9udEluZm8tPm1Bc2Nl
bmRlcikgLyAxMDAwLjBmOworICBuc2Nvb3JkIGFzY2VudCA9IE5TVG9Db29yZFJvdW5kKG9mZnNl
dCk7CisgIGFGb250TWV0cmljcy0+U2V0QXNjZW50KGFzY2VudCk7CisgIGFGb250TWV0cmljcy0+
U2V0RW1Bc2NlbnQoYXNjZW50KTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRNYXhBc2NlbnQoYXNjZW50
KTsKKworICBvZmZzZXQgPSBOU0Zsb2F0UG9pbnRzVG9Ud2lwcyhmb250U2l6ZSAqIG1BRk1JbmZv
LT5tUFNGb250SW5mby0+bURlc2NlbmRlcikgLyAxMDAwLjBmOworICBuc2Nvb3JkIGRlc2NlbnQg
PSAtKE5TVG9Db29yZFJvdW5kKG9mZnNldCkpOworICBhRm9udE1ldHJpY3MtPlNldERlc2NlbnQo
ZGVzY2VudCk7CisgIGFGb250TWV0cmljcy0+U2V0RW1EZXNjZW50KGRlc2NlbnQpOworICBhRm9u
dE1ldHJpY3MtPlNldE1heERlc2NlbnQoZGVzY2VudCk7CisKKyAgYUZvbnRNZXRyaWNzLT5TZXRM
ZWFkaW5nKDApOworCisgIG5zY29vcmQgc3BhY2VXaWR0aCA9IEdldFdpZHRoKCIgIiwgMSk7Cisg
IGFGb250TWV0cmljcy0+U2V0U3BhY2VXaWR0aChzcGFjZVdpZHRoKTsKKworICBuc2Nvb3JkIGF2
ZUNoYXJXaWR0aCA9IEdldFdpZHRoKCJ4IiwgMSk7CisgIGFGb250TWV0cmljcy0+U2V0QXZlQ2hh
cldpZHRoKGF2ZUNoYXJXaWR0aCk7CisKKyAgcmV0dXJuIE5TX09LOworfQorCituc3Jlc3VsdAor
bnNGb250UFNBRk06OlNldHVwRm9udChuc1JlbmRlcmluZ0NvbnRleHRQUyogYUNvbnRleHQpCit7
CisgIE5TX0VOU1VSRV9UUlVFKGFDb250ZXh0ICYmIG1Gb250TWV0cmljcywgMCk7CisgIG5zUG9z
dFNjcmlwdE9iaiogcHNPYmogPSBhQ29udGV4dC0+R2V0UG9zdFNjcmlwdE9iaigpOworICBOU19F
TlNVUkVfVFJVRShwc09iaiwgMCk7CisKKyAgbnNjb29yZCBmb250SGVpZ2h0ID0gMDsKKyAgbUZv
bnRNZXRyaWNzLT5HZXRIZWlnaHQoZm9udEhlaWdodCk7CisKKyAgcHNPYmotPnNldHNjcmlwdGZv
bnQobUZvbnRJbmRleCwgbUZhbWlseU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGZvbnRI
ZWlnaHQsIG1Gb250LT5zdHlsZSwgbUZvbnQtPnZhcmlhbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgIG1Gb250LT53ZWlnaHQsIG1Gb250LT5kZWNvcmF0aW9ucyk7CisgIHJldHVybiBOU19PSzsK
K30KKworI2lmZGVmIE1PWl9NQVRITUwKK25zcmVzdWx0Cituc0ZvbnRQU0FGTTo6R2V0Qm91bmRp
bmdNZXRyaWNzKGNvbnN0IGNoYXIqICAgICAgICBhU3RyaW5nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUlVpbnQzMiAgICAgICAgICAgYUxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNCb3VuZGluZ01ldHJpY3MmIGFCb3VuZGluZ01ldHJpY3MpCit7
CisgIHJldHVybiBOU19FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9CisKK25zcmVzdWx0Cituc0Zv
bnRQU0FGTTo6R2V0Qm91bmRpbmdNZXRyaWNzKGNvbnN0IFBSVW5pY2hhciogICBhU3RyaW5nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAgICAgICAgICAgYUxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNCb3VuZGluZ01ldHJpY3MmIGFC
b3VuZGluZ01ldHJpY3MpCit7CisgIHJldHVybiBOU19FUlJPUl9OT1RfSU1QTEVNRU5URUQ7Cit9
CisjZW5kaWYKKworI2lmIGRlZmluZWQoTU9aX0VOQUJMRV9GUkVFVFlQRTIpIHx8IGRlZmluZWQo
TU9aX0VOQUJMRV9YRlQpCisKKyNkZWZpbmUgV0lERU5fOF9UT18xNl9CVUZfU0laRSAxMDI0CisK
KyNpZmRlZiBNT1pfRU5BQkxFX1hGVAorCituc1hmdEVudHJ5Ojpuc1hmdEVudHJ5KEZjUGF0dGVy
biAqYUZvbnRQYXR0ZXJuKQoreworICBtRmFjZSA9IG5zbnVsbDsKKyAgbUZhY2VJbmRleCA9IDA7
CisKKyAgY2hhciAqZmNSZXN1bHQ7CisKKyAgaWYgKEZjUGF0dGVybkdldFN0cmluZyhhRm9udFBh
dHRlcm4sIEZDX0ZJTEUsIDAsIChGY0NoYXI4ICoqKSAmZmNSZXN1bHQpCisgICAgICA9PSBGY1Jl
c3VsdE1hdGNoKSAgICAgCisgICAgbUZvbnRGaWxlTmFtZSA9IGZjUmVzdWx0OworCisgIGlmIChG
Y1BhdHRlcm5HZXRTdHJpbmcoYUZvbnRQYXR0ZXJuLCBGQ19GQU1JTFksIDAsIChGY0NoYXI4ICoq
KSAmZmNSZXN1bHQpCisgICAgICA9PSBGY1Jlc3VsdE1hdGNoKSAgICAgCisgICAgbUZhbWlseU5h
bWUgPSBmY1Jlc3VsdDsKKworICBpZiAoRmNQYXR0ZXJuR2V0U3RyaW5nKGFGb250UGF0dGVybiwg
RkNfU1RZTEUsIDAsIChGY0NoYXI4ICoqKSAmZmNSZXN1bHQpCisgICAgICA9PSBGY1Jlc3VsdE1h
dGNoKQorICAgIG1TdHlsZU5hbWUgPSBmY1Jlc3VsdDsKK30KKworCitzdGF0aWMgbnNGb250UFMq
CitDcmVhdGVGb250UFMobnNYZnRFbnRyeSAqYUVudHJ5LCBjb25zdCBuc0ZvbnQmIGFGb250LAor
ICAgICAgICAgICAgIG5zRm9udE1ldHJpY3NQUyogYUZvbnRNZXRyaWNzKQoreworICBuc3Jlc3Vs
dCBydjsKKyAgbnNEZXZpY2VDb250ZXh0UFMqIGRjID0gYUZvbnRNZXRyaWNzLT5HZXREZXZpY2VD
b250ZXh0KCk7CisgIE5TX0VOU1VSRV9UUlVFKGRjLCBuc251bGwpOworCisgIG5zQ0F1dG9TdHJp
bmcgZmlsZU5hbWUoYUVudHJ5LT5tRm9udEZpbGVOYW1lKTsKKyAgbnNDQXV0b1N0cmluZyBmYW1p
bHlOYW1lKGFFbnRyeS0+bUZhbWlseU5hbWUpOworICBuc0NBdXRvU3RyaW5nIHN0eWxlTmFtZShh
RW50cnktPm1TdHlsZU5hbWUpOworICBUb0xvd2VyQ2FzZShmYW1pbHlOYW1lKTsKKyAgVG9Mb3dl
ckNhc2Uoc3R5bGVOYW1lKTsKKyAgCisgIG5zQ0F1dG9TdHJpbmcgZm9udE5hbWU7CisgIGZvbnRO
YW1lLkFwcGVuZChmYW1pbHlOYW1lKTsKKyAgZm9udE5hbWUuQXBwZW5kKCItIik7CisgIGZvbnRO
YW1lLkFwcGVuZChzdHlsZU5hbWUpOworICBuc0NTdHJpbmdLZXkga2V5KGZvbnROYW1lKTsKKwor
ICBuc0hhc2h0YWJsZSAqcHNGR0xpc3QgPSBkYy0+R2V0UFNGb250R2VuZXJhdG9yTGlzdCgpOwor
ICBOU19FTlNVUkVfVFJVRShwc0ZHTGlzdCwgbnNudWxsKTsKKyAgCisgIG5zUFNGb250R2VuZXJh
dG9yKiBwc0ZvbnRHZW4gPSAobnNQU0ZvbnRHZW5lcmF0b3IqKSBwc0ZHTGlzdC0+R2V0KCZrZXkp
OworICBpZiAoIXBzRm9udEdlbikgeworICAgIHBzRm9udEdlbiA9IG5ldyBuc1hmdFR5cGU4R2Vu
ZXJhdG9yOworICAgIE5TX0VOU1VSRV9UUlVFKHBzRm9udEdlbiwgbnNudWxsKTsKKyAgICBydiA9
ICgobnNYZnRUeXBlOEdlbmVyYXRvciopcHNGb250R2VuKS0+SW5pdChhRW50cnkpOworICAgIGlm
IChOU19GQUlMRUQocnYpKSB7CisgICAgICBkZWxldGUgcHNGb250R2VuOworICAgICAgcmV0dXJu
IG5zbnVsbDsKKyAgICB9CisgICAgcHNGR0xpc3QtPlB1dCgma2V5LCAodm9pZCAqKSBwc0ZvbnRH
ZW4pOworICB9CisgIG5zRm9udFBTWGZ0KiBmb250ID0gbmV3IG5zRm9udFBTWGZ0KGFGb250LCBh
Rm9udE1ldHJpY3MpOworICBOU19FTlNVUkVfVFJVRShmb250LCBuc251bGwpOworICBydiA9IGZv
bnQtPkluaXQoYUVudHJ5LCBwc0ZvbnRHZW4pOworICBpZiAoTlNfRkFJTEVEKHJ2KSkgeworICAg
IGRlbGV0ZSBmb250OworICAgIHJldHVybiBuc251bGw7CisgIH0KKyAgcmV0dXJuIGZvbnQ7Cit9
CisKKy8qIHN0YXRpYyAqLworUFJCb29sCituc0ZvbnRQU1hmdDo6Q1NTRm9udEVudW1DYWxsYmFj
ayhjb25zdCBuc1N0cmluZyYgYUZhbWlseSwgUFJCb29sIGFJc0dlbmVyaWMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFGcGkpCit7CisgICAgZm9udFBTSW5m
byAqZnBpID0gKGZvbnRQU0luZm8gKilhRnBpOworCisgICAgLy8gbWFrZSBzdXJlIGl0J3MgYW4g
YXNjaWkgbmFtZSwgaWYgbm90IHRoZW4gcmV0dXJuIGFuZCBjb250aW51ZQorICAgIC8vIGVudW1l
cmF0aW5nCisgICAgaWYgKCFOU19Jc0FTQ0lJRm9udE5hbWUoYUZhbWlseSkpCisgICAgICAgIHJl
dHVybiBQUl9UUlVFOworCisgICAgTlNfTG9zc3lDb252ZXJ0VVRGMTZ0b0FTQ0lJIG5hbWUoYUZh
bWlseSk7CisgICAgVG9Mb3dlckNhc2UobmFtZSk7CisgICAgZnBpLT5tRm9udExpc3QuQXBwZW5k
Q1N0cmluZyhuYW1lKTsKKyAgICBmcGktPm1Gb250SXNHZW5lcmljLkFwcGVuZEVsZW1lbnQoKHZv
aWQgKilhSXNHZW5lcmljKTsKKyAgICBpZiAoYUlzR2VuZXJpYykgeworICAgICAgICBmcGktPm1H
ZW5lcmljRm9udCA9CisgICAgICAgICAgICBmcGktPm1Gb250TGlzdC5DU3RyaW5nQXQoZnBpLT5t
Rm9udExpc3QuQ291bnQoKSAtIDEpOworICAgICAgICByZXR1cm4gUFJfRkFMU0U7IC8vIHN0b3Ag
cHJvY2Vzc2luZworICAgIH0KKworICAgIHJldHVybiBQUl9UUlVFOyAvLyBrZWVwIHByb2Nlc3Np
bmcKK30KKworbnNGb250UFMqCituc0ZvbnRQU1hmdDo6RmluZEZvbnQoUFJVbmljaGFyIGFDaGFy
LCBjb25zdCBuc0ZvbnQmIGFGb250LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRm9u
dE1ldHJpY3NQUyogYUZvbnRNZXRyaWNzKQoreworICBQUkJvb2wgaW5pdGVkID0gUFJfRkFMU0U7
CisgIG5zQ09NUHRyPG5zSUF0b20+IGxhbmdHcm91cDsKKyAgZm9udFBTSW5mbyBmcGk7CisgIGZw
aS5mb250cHMgPSBhRm9udE1ldHJpY3MtPkdldEZvbnRzUFMoKTsKKyAgaW50IGkgPSAwOworCisg
IHdoaWxlICgxKSB7CisgICAgLy8KKyAgICAvLyBzZWUgaWYgaXQgaXMgYWxyZWFkeSBpbiB0aGUg
bGlzdCBvZiBmb250cworICAgIC8vCisgICAgZm9yICg7IGk8ZnBpLmZvbnRwcy0+Q291bnQoKTsg
aSsrKSB7CisgICAgICBmb250cHMgKmZpID0gKGZvbnRwcyAqKWZwaS5mb250cHMtPkVsZW1lbnRB
dChpKTsKKyAgICAgIGlmICghZmktPmVudHJ5IHx8ICFmaS0+Y2hhcnNldCkgeworICAgICAgICBO
U19BU1NFUlRJT04oZmktPmVudHJ5LCAiaW52YWxpZCBlbnRyeSIpOworICAgICAgICBOU19BU1NF
UlRJT04oZmktPmNoYXJzZXQsICJpbnZhbGlkIGNoYXJzZXQiKTsKKyAgICAgICAgY29udGludWU7
CisgICAgICB9CisgICAgICBpZiAoRmNDaGFyU2V0SGFzQ2hhcihmaS0+Y2hhcnNldCwgYUNoYXIp
KSB7CisgICAgICAgIGlmICghZmktPmZvbnRwcykgeworI2lmZGVmIFBSX0xPR0dJTkcKKyAgICAg
ICAgICBpZiAoUFJfTE9HX1RFU1QoZ0ZvbnRNZXRyaWNzUFNNLCBQUl9MT0dfREVCVUcpKSB7Cisg
ICAgICAgICAgICBQUl9Mb2dQcmludCgiQ3JlYXRlRm9udFBTICVzLyVzXG4iLAorICAgICAgICAg
ICAgICAgIGZpLT5lbnRyeS0+bUZhbWlseU5hbWUuZ2V0KCksIGZpLT5lbnRyeS0+bVN0eWxlTmFt
ZS5nZXQoKSk7CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgZmktPmZvbnRwcyA9IENy
ZWF0ZUZvbnRQUyhmaS0+ZW50cnksIGFGb250LCBhRm9udE1ldHJpY3MpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmaS0+Zm9udHBzKQorICAgICAgICAgIHJldHVybiBmaS0+Zm9udHBzOworICAg
ICAgfQorICAgIH0KKworICAgIC8vIGlmIGFscmVhZHkgZ2V0IGFsbCBtYXRjaGVkIGZvbnRzIGFu
ZCBub3QgZm91bmQgc3VpdGFibGUKKyAgICAvLyB0aGVuIHJldHVybiBuc251bGwKKyAgICBpZiAo
ZnBpLmZvbnRwcy0+Q291bnQoKSA+IDApCisgICAgICByZXR1cm4gbnNudWxsOworCisgICAgLy8K
KyAgICAvLyBpdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdCBvZiBmb250cworICAgIC8vIHNv
IGFkZCBtb3JlIGZvbnRzIHRvIHRoZSBsaXN0CisgICAgLy8KKyAgICBpZiAoaW5pdGVkKQorICAg
ICAgcmV0dXJuIG5zbnVsbDsKKyAKKyAgICBpbml0ZWQgPSBQUl9UUlVFOworCisgICAgZnBpLm5z
Zm9udCA9ICZhRm9udDsKKyAgICBmcGkuYWxyZWFkeUxvYWRlZCA9IGFGb250TWV0cmljcy0+R2V0
Rm9udHNBbHJlYWR5TG9hZGVkTGlzdCgpOworICAgIGZwaS5tR2VuZXJpY0ZvbnQgPSBuc251bGw7
CisKKyAgICBhRm9udE1ldHJpY3MtPkdldExhbmdHcm91cChnZXR0ZXJfQWRkUmVmcyhsYW5nR3Jv
dXApKTsKKyAgICBpZiAoIWxhbmdHcm91cCkKKyAgICAgIGxhbmdHcm91cCA9IE5TX05ld0F0b20o
Ingtd2VzdGVybiIpOworCisgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlIGZvbnQgbmFtZXMgcGFz
c2VkIGluCisgICAgYUZvbnQuRW51bWVyYXRlRmFtaWxpZXMobnNGb250UFNYZnQ6OkNTU0ZvbnRF
bnVtQ2FsbGJhY2ssICZmcGkpOworCisgICAgbnNDT01QdHI8bnNJUHJlZj4gcHJlZlNlcnZpY2U7
CisgICAgcHJlZlNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKE5TX1BSRUZfQ09OVFJBQ1RJRCk7Cisg
ICAgaWYgKCFwcmVmU2VydmljZSkKKyAgICAgIHJldHVybiBuc251bGw7CisKKyAgICBuc1hQSURM
Q1N0cmluZyB2YWx1ZTsKKyAgICBuc0NBdXRvU3RyaW5nICBhRGVmYXVsdEZvbnQ7CisKKyAgICAv
LyBTZXQgdXAgdGhlIGRlZmF1bHQgZm9udCBuYW1lIGlmIGl0J3Mgbm90IHNldAorICAgIGlmICgh
ZnBpLm1HZW5lcmljRm9udCkgeworICAgICAgcHJlZlNlcnZpY2UtPkNvcHlDaGFyUHJlZigiZm9u
dC5kZWZhdWx0IiwgZ2V0dGVyX0NvcGllcyh2YWx1ZSkpOworCisgICAgICBpZiAodmFsdWUuZ2V0
KCkpCisgICAgICAgIGFEZWZhdWx0Rm9udCA9IHZhbHVlLmdldCgpOworICAgICAgZWxzZQorICAg
ICAgICBhRGVmYXVsdEZvbnQgPSAic2VyaWYiOworCisgICAgICBmcGkubUdlbmVyaWNGb250ID0g
JmFEZWZhdWx0Rm9udDsKKyAgICB9CisKKyAgICAvLyBJZiBwYXR0ZXJuIGlzIG51bGwsIHNldCB1
cCB0aGUgYmFzZSBiaXRzIG9mIGl0IHNvIHdlIGNhbgorICAgIC8vIG1hdGNoLiAgSWYgd2UgbmVl
ZCB0byBtYXRjaCBsYXRlciB3ZSBkb24ndCBoYXZlIHRvIHNldCBpdCB1cAorICAgIC8vIGFnYWlu
LgorICAgIEZjUGF0dGVybiAqcGF0dGVybiA9IG5zbnVsbDsKKworICAgIHBhdHRlcm4gPSBGY1Bh
dHRlcm5DcmVhdGUoKTsKKyAgICBpZiAoIXBhdHRlcm4pCisgICAgICByZXR1cm4gbnNudWxsOwor
CisgICAgLy8gWFhYIG5lZWQgdG8gYWRkIHVzZXIgZGVmaW5lZCBmYW1pbHkKKworICAgIC8vIEFk
ZCBDU1MgbmFtZXMgLSB3YWxrIHRoZSBsaXN0IG9mIGZvbnRzLCBhZGRpbmcgdGhlIGdlbmVyaWMg
YXMKKyAgICAvLyB0aGUgbGFzdCBmb250CisgICAgZm9yIChpbnQgaT0wOyBpIDwgZnBpLm1Gb250
TGlzdC5Db3VudCgpOyArK2kpIHsKKyAgICAgIC8vIGlmIHRoaXMgd2FzIGEgZ2VuZXJpYyBuYW1l
LCBicmVhayBvdXQgb2YgdGhlIGxvb3Agc2luY2Ugd2UKKyAgICAgIC8vIGRvbid0IHdhbnQgdG8g
YWRkIGl0IHRvIHRoZSBwYXR0ZXJuIHlldAorICAgICAgaWYgKGZwaS5tRm9udElzR2VuZXJpY1tp
XSkKKyAgICAgICAgYnJlYWs7OworCisgICAgICBuc0NTdHJpbmcgKmZhbWlseU5hbWUgPSBmcGku
bUZvbnRMaXN0LkNTdHJpbmdBdChpKTsKKyAgICAgIE5TX0FkZEZGUkUocGF0dGVybiwgZmFtaWx5
TmFtZSwgUFJfRkFMU0UpOworICAgIH0KKworICAgIC8vIEFkZCB0aGUgbGFuZ3VhZ2UgZ3JvdXAu
ICBOb3RlIHRoYXQgd2UgZG8gdGhpcyBiZWZvcmUgYWRkaW5nIGFueQorICAgIC8vIGdlbmVyaWNz
LiAgVGhhdCdzIGJlY2F1c2UgdGhlIGxhbmd1YWdlIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4KKyAg
ICAvLyBhbnkgZ2VuZXJpYyBmb250LgorICAgIE5TX0FkZExhbmdHcm91cChwYXR0ZXJuLCBsYW5n
R3JvdXApOworCisgICAgLy8gSWYgdGhlcmUncyBhIGdlbmVyaWMgYWRkIGEgcHJlZiBmb3IgdGhl
IGdlbmVyaWMgaWYgdGhlcmUncyBvbmUKKyAgICAvLyBzZXQuCisgICAgaWYgKGZwaS5tR2VuZXJp
Y0ZvbnQgJiYgIWFGb250LnN5c3RlbUZvbnQpIHsKKyAgICAgIG5zQ0F1dG9TdHJpbmcgbmFtZSgi
Zm9udC5uYW1lLiIpOworICAgICAgbmFtZSArPSBmcGkubUdlbmVyaWNGb250LT5nZXQoKTsKKyAg
ICAgIG5hbWUgKz0gIi4iOworCisgICAgICBuc0F1dG9TdHJpbmcgbGFuZ0dyb3VwU3RyOworICAg
ICAgbGFuZ0dyb3VwLT5Ub1N0cmluZyhsYW5nR3JvdXBTdHIpOworCisgICAgICBMb3NzeUFwcGVu
ZFVURjE2dG9BU0NJSShsYW5nR3JvdXBTdHIsIG5hbWUpOworCisgICAgICBuc0NPTVB0cjxuc0lQ
cmVmPiBwcmVmOworICAgICAgcHJlZiA9IGRvX0dldFNlcnZpY2UoTlNfUFJFRl9DT05UUkFDVElE
KTsKKyAgICAgIGlmIChwcmVmKSB7CisgICAgICAgIG5zcmVzdWx0IHJ2OworICAgICAgICBuc1hQ
SURMQ1N0cmluZyB2YWx1ZTsKKyAgICAgICAgcnYgPSBwcmVmLT5HZXRDaGFyUHJlZihuYW1lLmdl
dCgpLCBnZXR0ZXJfQ29waWVzKHZhbHVlKSk7CisKKyAgICAgICAgLy8gd2UgaWdub3JlIHByZWZz
IHRoYXQgaGF2ZSB0aHJlZSBoeXBlbnMgc2luY2UgdGhleSBhcmUgWAorICAgICAgICAvLyBzdHls
ZSBwcmVmcy4KKyAgICAgICAgaWYgKE5TX0ZGUkVDb3VudEh5cGhlbnModmFsdWUpIDwgMykgewor
ICAgICAgICAgIG5zQ0F1dG9TdHJpbmcgdG1wc3RyKHZhbHVlKTsKKworICAgICAgICAgIGlmIChQ
Ul9MT0dfVEVTVChnRm9udE1ldHJpY3NQU00sIFBSX0xPR19ERUJVRykpIHsKKyAgICAgICAgICAg
ICAgcHJpbnRmKCJcdGFkZGluZyBnZW5lcmljIGZvbnQgZnJvbSBwcmVmZXJlbmNlczogJXNcbiIs
CisgICAgICAgICAgICAgICAgICAgICB0bXBzdHIuZ2V0KCkpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIE5TX0FkZEZGUkUocGF0dGVybiwgJnRtcHN0ciwgUFJfRkFMU0UpOworICAgICAgICB9
CisgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIHRoZSBnZW5lcmljIGlmIHRoZXJlIGlzIG9u
ZS4KKyAgICBpZiAoZnBpLm1HZW5lcmljRm9udCAmJiAhYUZvbnQuc3lzdGVtRm9udCkKKyAgICAg
IE5TX0FkZEZGUkUocGF0dGVybiwgZnBpLm1HZW5lcmljRm9udCwgUFJfRkFMU0UpOworCisgICAg
Ly8gQWRkIHRoZSBzbGFudCB0eXBlCisgICAgRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBG
Q19TTEFOVCwgTlNfQ2FsY3VsYXRlU2xhbnQoYUZvbnQuc3R5bGUpKTsKKworICAgIC8vIEFkZCB0
aGUgd2VpZ2h0CisgICAgRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIE5T
X0NhbGN1bGF0ZVdlaWdodChhRm9udC53ZWlnaHQpKTsKKworICAgIC8vIFNldCB1cCB0aGUgZGVm
YXVsdCBzdWJzdGl0dXRpb25zIGZvciB0aGlzIGZvbnQKKyAgICBGY0NvbmZpZ1N1YnN0aXR1dGUo
MCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4pOworICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0
dGVybik7CisKKyAgICBGY1Jlc3VsdCAgIHJlc3VsdDsKKyAgICBGY0ZvbnRTZXQgKnNldCA9IEZj
Rm9udFNvcnQoMCwgcGF0dGVybiwgRmNUcnVlLCAwLCAmcmVzdWx0KTsKKyAgICBpZiAoIXNldCkg
eworICAgICAgIHJldHVybiBuc251bGw7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgbGlzdCBv
ZiBuZXcgZm9udCBvYmplY3RzIGJhc2VkIG9uIHRoZSBmb250cyByZXR1cm5lZAorICAgIC8vIGFz
IHBhcnQgb2YgdGhlIHF1ZXJ5CisgICAgZm9yIChpbnQgaT0wOyBpIDwgc2V0LT5uZm9udDsgKytp
KSB7CisgICAgICAgIEZjQm9vbCBmY19vdXRsaW5lOworICAgICAgICBGY0NoYXI4ICpmY19mYW1p
bHk7CisgICAgICAgIEZjQ2hhcjggKmZjX3N0eWxlOworICAgICAgICBGY0NoYXJTZXQgKmZjX2No
YXJzZXQ7CisKKyAgICAgICAgLy8gc2tpcCBpZiB0aGUgZm9udHMgaXMgbm90IG91dGxpbmUgZm9u
dCBmaWxlcy4KKyAgICAgICAgcmVzdWx0ID0gRmNQYXR0ZXJuR2V0Qm9vbCAoc2V0LT5mb250c1tp
XSwgRkNfT1VUTElORSwgMCwgJmZjX291dGxpbmUpOworICAgICAgICBpZiAoIWZjX291dGxpbmUp
CisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVzdWx0ID0gRmNQYXR0ZXJuR2V0U3Ry
aW5nIChzZXQtPmZvbnRzW2ldLCBGQ19GQU1JTFksIDAsICZmY19mYW1pbHkpOworICAgICAgICBp
ZiAocmVzdWx0ICE9IEZjUmVzdWx0TWF0Y2ggfHwgZmNfZmFtaWx5ID09IG5zbnVsbCkKKyAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICByZXN1bHQgPSBGY1BhdHRlcm5HZXRTdHJpbmcgKHNl
dC0+Zm9udHNbaV0sIEZDX1NUWUxFLCAwLCAmZmNfc3R5bGUpOworICAgICAgICBpZiAocmVzdWx0
ICE9IEZjUmVzdWx0TWF0Y2ggfHwgZmNfc3R5bGUgPT0gbnNudWxsKQorICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHJlc3VsdCA9IEZjUGF0dGVybkdldENoYXJTZXQoc2V0LT5mb250c1tp
XSwgRkNfQ0hBUlNFVCwgMCwgJmZjX2NoYXJzZXQpOworICAgICAgICBpZiAocmVzdWx0ICE9IEZj
UmVzdWx0TWF0Y2ggfHwgZmNfY2hhcnNldCA9PSBuc251bGwpCisgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgbnNYZnRFbnRyeSAqeGZ0RW50cnkgPSBuZXcgbnNYZnRFbnRyeShzZXQtPmZv
bnRzW2ldKTsKKyAgICAgICAgaWYgKCF4ZnRFbnRyeSkKKyAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBmb250cHMgKmZwcyA9IG5ldyBmb250cHM7CisgICAgICAgIGZwcy0+ZW50cnkgPSB4
ZnRFbnRyeTsKKyAgICAgICAgZnBzLT5jaGFyc2V0ID0gZmNfY2hhcnNldDsKKyAgICAgICAgZnBz
LT5mb250cHMgPSBuc251bGw7CisgICAgICAgIGZwaS5mb250cHMtPkFwcGVuZEVsZW1lbnQoZnBz
KTsKKyAgICB9CisKKyAgICAvLyB3ZSdyZSBkb25lIHdpdGggdGhlIHNldCBub3cKKyAgICBGY0Zv
bnRTZXREZXN0cm95KHNldCk7CisKKyAgICBGY1BhdHRlcm5EZXN0cm95KHBhdHRlcm4pOworICB9
CisKKyAgcmV0dXJuIG5zbnVsbDsKK30KKworLypGVF9DQUxMQkFDS19ERUYqLworRlRfRXJyb3IK
K25zWGZ0RmFjZVJlcXVlc3RlcihGVENfRmFjZUlEIGZhY2VfaWQsIEZUX0xpYnJhcnkgbGliLAor
ICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciByZXF1ZXN0X2RhdGEsIEZUX0ZhY2UqIGFGYWNl
KQoreworICBuc1hmdEVudHJ5ICpmYWNlSUQgPSAobnNYZnRFbnRyeSAqKWZhY2VfaWQ7CisKKyAg
RlRfRXJyb3IgZnRlcnJvciA9IEZUX05ld19GYWNlKGxpYiwgZmFjZUlELT5tRm9udEZpbGVOYW1l
LmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZUlELT5tRmFjZUlu
ZGV4LCBhRmFjZSk7CisgIGlmIChmdGVycm9yKSAKKyAgICAqYUZhY2UgPSBuc251bGw7CisgIHJl
dHVybiAwOworfQorCituc0ZvbnRQU1hmdDo6bnNGb250UFNYZnQoY29uc3QgbnNGb250JiBhRm9u
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250TWV0cmljc1BTKiBh
Rm9udE1ldHJpY3MpCisgIDpuc0ZvbnRQUyhhRm9udCwgYUZvbnRNZXRyaWNzKQoreworfQorCitu
c3Jlc3VsdAorbnNGb250UFNYZnQ6OkluaXQobnNYZnRFbnRyeSogYUVudHJ5LAorICAgICAgICAg
ICAgICAgICAgICAgICBuc1BTRm9udEdlbmVyYXRvciogYVBTRm9udEdlbikKK3sKKyAgTlNfRU5T
VVJFX1RSVUUoYUVudHJ5ICYmIGFQU0ZvbnRHZW4sIE5TX0VSUk9SX0ZBSUxVUkUpOworICBtRW50
cnkgPSBhRW50cnk7CisgIG1QU0ZvbnRHZW5lcmF0b3IgPSBhUFNGb250R2VuOworCisgIGZsb2F0
IGFwcDJkZXY7CisgIG5zSURldmljZUNvbnRleHQqIGRjID0gbUZvbnRNZXRyaWNzLT5HZXREZXZp
Y2VDb250ZXh0KCk7CisgIE5TX0VOU1VSRV9UUlVFKGRjLCBOU19FUlJPUl9OVUxMX1BPSU5URVIp
OworICBhcHAyZGV2ID0gZGMtPkFwcFVuaXRzVG9EZXZVbml0cygpOworICAKKyAgbVBpeGVsU2l6
ZSA9IE5TVG9JbnRSb3VuZChhcHAyZGV2ICogbUZvbnQtPnNpemUpOworCisgIG1JbWFnZURlc2Mu
Zm9udC5mYWNlX2lkICAgID0gKHZvaWQqKW1FbnRyeTsKKyAgbUltYWdlRGVzYy5mb250LnBpeF93
aWR0aCAgPSBtUGl4ZWxTaXplOworICBtSW1hZ2VEZXNjLmZvbnQucGl4X2hlaWdodCA9IG1QaXhl
bFNpemU7CisgIG1JbWFnZURlc2MuaW1hZ2VfdHlwZSA9IDA7CisKKyAgRlRfRXJyb3IgZnRlcnJv
cjsgCisgIGZ0ZXJyb3IgPSBGVF9Jbml0X0ZyZWVUeXBlKCZtRnJlZVR5cGVMaWJyYXJ5KTsKKyAg
aWYgKGZ0ZXJyb3IpIHsKKyAgICBOU19BU1NFUlRJT04oIWZ0ZXJyb3IsICJmYWlsZWQgdG8gaW5p
dGlhbGl6ZSBGcmVlVHlwZSBsaWJyYXJ5Iik7CisgICAgbUZyZWVUeXBlTGlicmFyeSA9IG5zbnVs
bDsKKyAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKKyAgfQorICBmdGVycm9yID0gRlRDX01h
bmFnZXJfTmV3KG1GcmVlVHlwZUxpYnJhcnksIDAsIDAsIDAsIG5zWGZ0RmFjZVJlcXVlc3RlciwK
KyAgICAgICAgICAgICAgICAgIE5VTEwsICZtRlRDYWNoZU1hbmFnZXIpOworICBOU19BU1NFUlRJ
T04oIWZ0ZXJyb3IsICJmYWlsZWQgdG8gY3JlYXRlIEZyZWVUeXBlIENhY2hlIG1hbmFnZXIiKTsK
KyAgaWYgKGZ0ZXJyb3IpCisgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CisKKyAgZnRlcnJv
ciA9IEZUQ19JbWFnZV9DYWNoZV9OZXcobUZUQ2FjaGVNYW5hZ2VyLCAmbUltYWdlQ2FjaGUpOwor
ICBOU19BU1NFUlRJT04oIWZ0ZXJyb3IsICJmYWlsZWQgdG8gY3JlYXRlIEZyZWVUeXBlIGltYWdl
IGNhY2hlIik7CisgIGlmIChmdGVycm9yKQorICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOwor
CisgIHJldHVybiBOU19PSzsKK30KKworbnNGb250UFNYZnQ6On5uc0ZvbnRQU1hmdCgpCit7Cisg
IEZUQ19NYW5hZ2VyX0RvbmUobUZUQ2FjaGVNYW5hZ2VyKTsKKworICBpZiAoRlRfRG9uZV9GcmVl
VHlwZShtRnJlZVR5cGVMaWJyYXJ5KSkKKyAgICByZXR1cm47CisKKyAgbUVudHJ5ID0gbnNudWxs
OworfQorCitGVF9GYWNlCituc0ZvbnRQU1hmdDo6Z2V0RlRGYWNlKCkKK3sKKyAgRlRfRXJyb3Ig
ZXJyb3I7CisgIEZUX0ZhY2UgZmFjZSA9IG1FbnRyeS0+bUZhY2U7CisKKyAgaWYgKGZhY2UpCisg
ICAgcmV0dXJuIChmYWNlKTsKKworICBlcnJvciA9IEZUQ19NYW5hZ2VyX0xvb2t1cF9TaXplKG1G
VENhY2hlTWFuYWdlciwgJm1JbWFnZURlc2MuZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZmFjZSwgbnNudWxsKTsKKyAgTlNfQVNTRVJUSU9OKGVycm9yID09IDAsICJm
YWlsZWQgdG8gZ2V0IGZhY2Uvc2l6ZSIpOworICBpZiAoZXJyb3IpCisgICAgcmV0dXJuIG5zbnVs
bDsKKworICBtRW50cnktPm1GYWNlID0gZmFjZTsKKyAgcmV0dXJuIGZhY2U7Cit9CisKK25zY29v
cmQKK25zRm9udFBTWGZ0OjpHZXRXaWR0aChjb25zdCBjaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBh
TGVuZ3RoKQoreworICBQUlVuaWNoYXIgdW5pY2hhcnNbV0lERU5fOF9UT18xNl9CVUZfU0laRV07
CisgIFBSVWludDMyIGxlbiwgd2lkdGggPSAwOworICB3aGlsZSAoIGFMZW5ndGggPiAwICkgewor
ICAgIGxlbiA9IFBSX01JTihhTGVuZ3RoLCBXSURFTl84X1RPXzE2X0JVRl9TSVpFKTsKKyAgICBm
b3IgKFBSVWludDMyIGk9MDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICB1bmljaGFyc1tpXSA9IFBS
VW5pY2hhcihQUlVpbnQ4KGFTdHJpbmdbaV0pKTsKKyAgICB9CisgICAgd2lkdGggKz0gR2V0V2lk
dGgodW5pY2hhcnMsIGxlbik7CisgICAgYVN0cmluZyArPSBsZW47CisgICAgYUxlbmd0aCAtPSBs
ZW47CisgIH0KKyAgcmV0dXJuIHdpZHRoOworfQorCisKK25zY29vcmQKK25zRm9udFBTWGZ0OjpH
ZXRXaWR0aChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGgpCit7Cisg
IEZUX1VJbnQgZ2x5cGhfaW5kZXg7CisgIEZUX0dseXBoIGdseXBoOworICBkb3VibGUgb3JpZ2lu
X3ggPSAwOworCisgIC8vIGdldCB0aGUgZmFjZS9zaXplIGZyb20gdGhlIEZyZWVUeXBlIGNhY2hl
CisgIEZUX0ZhY2UgZmFjZSA9IGdldEZURmFjZSgpOworICBOU19BU1NFUlRJT04oZmFjZSwgImZh
aWxlZCB0byBnZXQgZmFjZS9zaXplIik7CisgIGlmICghZmFjZSkKKyAgICByZXR1cm4gMDsKKwor
ICBmb3IgKFBSVWludDMyIGk9MDsgaTxhTGVuZ3RoOyBpKyspIHsKKyAgICBnbHlwaF9pbmRleCA9
IEZUX0dldF9DaGFyX0luZGV4KChGVF9GYWNlKWZhY2UsIGFTdHJpbmdbaV0pOworICAgIEZUX0Vy
cm9yIGVycm9yID0gRlRDX0ltYWdlX0NhY2hlX0xvb2t1cChtSW1hZ2VDYWNoZSwgJm1JbWFnZURl
c2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2lu
ZGV4LCAmZ2x5cGgpOworICAgIGlmIChlcnJvcikgeworICAgICAgb3JpZ2luX3ggKz0gRlRfUkVH
X1RPXzE2XzE2KGZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtLzIgKyAyKTsKKyAgICAgIGNvbnRp
bnVlOworICAgIH0KKyAgICBvcmlnaW5feCArPSBnbHlwaC0+YWR2YW5jZS54OworICB9CisKKyAg
TlNfRU5TVVJFX1RSVUUobUZvbnRNZXRyaWNzLCAwKTsKKworICBuc0RldmljZUNvbnRleHRQUyog
ZGMgPSBtRm9udE1ldHJpY3MtPkdldERldmljZUNvbnRleHQoKTsKKyAgTlNfRU5TVVJFX1RSVUUo
ZGMsIDApOworCisgIGZsb2F0IGRldjJhcHA7CisgIGRldjJhcHAgPSBkYy0+RGV2VW5pdHNUb0Fw
cFVuaXRzKCk7CisgIG9yaWdpbl94ICo9IGRldjJhcHA7CisgIG9yaWdpbl94IC89IEZUX1JFR19U
T18xNl8xNigxKTsKKworICByZXR1cm4gTlNUb0Nvb3JkUm91bmQoKG5zY29vcmQpb3JpZ2luX3gp
OworfQorCituc2Nvb3JkCituc0ZvbnRQU1hmdDo6RHJhd1N0cmluZyhuc1JlbmRlcmluZ0NvbnRl
eHRQUyogYUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgs
IG5zY29vcmQgYVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFT
dHJpbmcsIFBSVWludDMyIGFMZW5ndGgpCit7CisgIE5TX0VOU1VSRV9UUlVFKGFDb250ZXh0LCAw
KTsKKyAgbnNQb3N0U2NyaXB0T2JqKiBwc09iaiA9IGFDb250ZXh0LT5HZXRQb3N0U2NyaXB0T2Jq
KCk7CisgIE5TX0VOU1VSRV9UUlVFKHBzT2JqLCAwKTsKKyAgbnNjb29yZCB3aWR0aCA9IDA7Cisg
IAorICBwc09iai0+bW92ZXRvKGFYLCBhWSk7CisKKyAgUFJVbmljaGFyIHVuaWNoYXJzW1dJREVO
XzhfVE9fMTZfQlVGX1NJWkVdOworICBQUlVpbnQzMiBsZW47CisgIAorICB3aGlsZSAoIGFMZW5n
dGggPiAwICkgeworICAgIGxlbiA9IFBSX01JTihhTGVuZ3RoLCBXSURFTl84X1RPXzE2X0JVRl9T
SVpFKTsKKyAgICBmb3IgKFBSVWludDMyIGk9MDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICB1bmlj
aGFyc1tpXSA9IFBSVW5pY2hhcihQUlVpbnQ4KGFTdHJpbmdbaV0pKTsKKyAgICB9CisgICAgcHNP
YmotPnNob3codW5pY2hhcnMsIGxlbiwgIiIsIDEpOworICAgIG1QU0ZvbnRHZW5lcmF0b3ItPkFk
ZFRvU3Vic2V0KHVuaWNoYXJzLCBsZW4pOworICAgIHdpZHRoICs9IEdldFdpZHRoKHVuaWNoYXJz
LCBsZW4pOworICAgIGFTdHJpbmcgKz0gbGVuOworICAgIGFMZW5ndGggLT0gbGVuOworICB9Cisg
IHJldHVybiB3aWR0aDsKK30KKworbnNjb29yZAorbnNGb250UFNYZnQ6OkRyYXdTdHJpbmcobnNS
ZW5kZXJpbmdDb250ZXh0UFMqIGFDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGgpCit7CisgIE5TX0VOU1VS
RV9UUlVFKGFDb250ZXh0LCAwKTsKKyAgbnNQb3N0U2NyaXB0T2JqKiBwc09iaiA9IGFDb250ZXh0
LT5HZXRQb3N0U2NyaXB0T2JqKCk7CisgIE5TX0VOU1VSRV9UUlVFKHBzT2JqLCAwKTsKKworICBw
c09iai0+bW92ZXRvKGFYLCBhWSk7CisgIHBzT2JqLT5zaG93KGFTdHJpbmcsIGFMZW5ndGgsICIi
LCAxKTsKKyAgCisgIG1QU0ZvbnRHZW5lcmF0b3ItPkFkZFRvU3Vic2V0KGFTdHJpbmcsIGFMZW5n
dGgpOworICByZXR1cm4gR2V0V2lkdGgoYVN0cmluZywgYUxlbmd0aCk7Cit9CisKK2ludAorbnNG
b250UFNYZnQ6OmFzY2VudCgpCit7CisgIEZUX0ZhY2UgZmFjZSA9IGdldEZURmFjZSgpOworICBO
U19BU1NFUlRJT04oZmFjZSwgImZhaWxlZCB0byBnZXQgZmFjZS9zaXplIik7CisgIE5TX0VOU1VS
RV9UUlVFKGZhY2UsIDApOworICByZXR1cm4gRlRfREVTSUdOX1VOSVRTX1RPX1BJWEVMUyhmYWNl
LT5hc2NlbmRlciwgZmFjZS0+c2l6ZS0+bWV0cmljcy55X3NjYWxlKTsKK30KKworaW50Cituc0Zv
bnRQU1hmdDo6ZGVzY2VudCgpCit7CisgIEZUX0ZhY2UgZmFjZSA9IGdldEZURmFjZSgpOworICBO
U19BU1NFUlRJT04oZmFjZSwgImZhaWxlZCB0byBnZXQgZmFjZS9zaXplIik7CisgIE5TX0VOU1VS
RV9UUlVFKGZhY2UsIDApOworICByZXR1cm4gRlRfREVTSUdOX1VOSVRTX1RPX1BJWEVMUygtZmFj
ZS0+ZGVzY2VuZGVyLCBmYWNlLT5zaXplLT5tZXRyaWNzLnlfc2NhbGUpOworfQorCitpbnQKK25z
Rm9udFBTWGZ0OjptYXhfYXNjZW50KCkKK3sKKyAgRlRfRmFjZSBmYWNlID0gZ2V0RlRGYWNlKCk7
CisgIE5TX0FTU0VSVElPTihmYWNlLCAiZmFpbGVkIHRvIGdldCBmYWNlL3NpemUiKTsKKyAgTlNf
RU5TVVJFX1RSVUUoZmFjZSwgMCk7CisgIFRUX09TMiAqdHRfb3MyID0gKFRUX09TMiAqKSBGVF9H
ZXRfU2ZudF9UYWJsZShmYWNlLCBmdF9zZm50X29zMik7CisgIE5TX0FTU0VSVElPTih0dF9vczIs
ICJ1bmFibGUgdG8gZ2V0IE9TMiB0YWJsZSIpOworICBpZiAodHRfb3MyKQorICAgICByZXR1cm4g
RlRfREVTSUdOX1VOSVRTX1RPX1BJWEVMUyh0dF9vczItPnNUeXBvQXNjZW5kZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnNpemUtPm1ldHJpY3MueV9zY2Fs
ZSk7CisgIGVsc2UKKyAgICAgcmV0dXJuIEZUX0RFU0lHTl9VTklUU19UT19QSVhFTFMoZmFjZS0+
YmJveC55TWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5z
aXplLT5tZXRyaWNzLnlfc2NhbGUpOworfQorCitpbnQKK25zRm9udFBTWGZ0OjptYXhfZGVzY2Vu
dCgpCit7CisgIEZUX0ZhY2UgZmFjZSA9IGdldEZURmFjZSgpOworICBOU19BU1NFUlRJT04oZmFj
ZSwgImZhaWxlZCB0byBnZXQgZmFjZS9zaXplIik7CisgIE5TX0VOU1VSRV9UUlVFKGZhY2UsIDAp
OworICBUVF9PUzIgKnR0X29zMiA9IChUVF9PUzIgKikgRlRfR2V0X1NmbnRfVGFibGUoZmFjZSwg
ZnRfc2ZudF9vczIpOworICBOU19BU1NFUlRJT04odHRfb3MyLCAidW5hYmxlIHRvIGdldCBPUzIg
dGFibGUiKTsKKyAgaWYgKHR0X29zMikKKyAgICAgcmV0dXJuIEZUX0RFU0lHTl9VTklUU19UT19Q
SVhFTFMoLXR0X29zMi0+c1R5cG9EZXNjZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhY2UtPnNpemUtPm1ldHJpY3MueV9zY2FsZSk7CisgIGVsc2UKKyAgICAg
cmV0dXJuIEZUX0RFU0lHTl9VTklUU19UT19QSVhFTFMoLWZhY2UtPmJib3gueU1pbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0cmljcy55X3Nj
YWxlKTsKK30KKworaW50Cituc0ZvbnRQU1hmdDo6bWF4X3dpZHRoKCkKK3sKKyAgRlRfRmFjZSBm
YWNlID0gZ2V0RlRGYWNlKCk7CisgIE5TX0FTU0VSVElPTihmYWNlLCAiZmFpbGVkIHRvIGdldCBm
YWNlL3NpemUiKTsKKyAgTlNfRU5TVVJFX1RSVUUoZmFjZSwgMCk7CisgIHJldHVybiBGVF9ERVNJ
R05fVU5JVFNfVE9fUElYRUxTKGZhY2UtPm1heF9hZHZhbmNlX3dpZHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnhfc2NhbGUpOworfQor
CitQUkJvb2wKK25zRm9udFBTWGZ0OjpnZXRYSGVpZ2h0KHVuc2lnbmVkIGxvbmcgJmFWYWwpCit7
CisgIEZUX0ZhY2UgZmFjZSA9IGdldEZURmFjZSgpOworICBOU19BU1NFUlRJT04oZmFjZSwgImZh
aWxlZCB0byBnZXQgZmFjZS9zaXplIik7CisgIGlmICghZmFjZSB8fCAhYVZhbCkKKyAgICByZXR1
cm4gUFJfRkFMU0U7CisgIGFWYWwgPSBGVF9ERVNJR05fVU5JVFNfVE9fUElYRUxTKGZhY2UtPmhl
aWdodCwgZmFjZS0+c2l6ZS0+bWV0cmljcy55X3NjYWxlKTsKKworICByZXR1cm4gUFJfVFJVRTsK
K30KKworUFJCb29sCituc0ZvbnRQU1hmdDo6dW5kZXJsaW5lUG9zaXRpb24obG9uZyAmYVZhbCkK
K3sKKyAgRlRfRmFjZSBmYWNlID0gZ2V0RlRGYWNlKCk7CisgIE5TX0FTU0VSVElPTihmYWNlLCAi
ZmFpbGVkIHRvIGdldCBmYWNlL3NpemUiKTsKKyAgaWYgKCFmYWNlKQorICAgIHJldHVybiBQUl9G
QUxTRTsKKyAgYVZhbCA9IEZUX0RFU0lHTl9VTklUU19UT19QSVhFTFMoLWZhY2UtPnVuZGVybGlu
ZV9wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6
ZS0+bWV0cmljcy55X3NjYWxlKTsKKyAgcmV0dXJuIFBSX1RSVUU7CiB9CiAKLW5zY29vcmQKLW5z
Rm9udFBTQUZNOjpHZXRXaWR0aChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFM
ZW5ndGgpCitQUkJvb2wKK25zRm9udFBTWGZ0Ojp1bmRlcmxpbmVfdGhpY2tuZXNzKHVuc2lnbmVk
IGxvbmcgJmFWYWwpCiB7Ci0gIG5zY29vcmQgd2lkdGggPSAwOwotICBpZiAobUFGTUluZm8pIHsK
LSAgICBtQUZNSW5mby0+R2V0U3RyaW5nV2lkdGgoYVN0cmluZywgd2lkdGgsIGFMZW5ndGgpOwot
ICB9Ci0gIHJldHVybiB3aWR0aDsKKyAgRlRfRmFjZSBmYWNlID0gZ2V0RlRGYWNlKCk7CisgIE5T
X0FTU0VSVElPTihmYWNlLCAiZmFpbGVkIHRvIGdldCBmYWNlL3NpemUiKTsKKyAgaWYgKCFmYWNl
KQorICAgIHJldHVybiBQUl9GQUxTRTsKKyAgYVZhbCA9IEZUX0RFU0lHTl9VTklUU19UT19QSVhF
TFMoZmFjZS0+dW5kZXJsaW5lX3RoaWNrbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0cmljcy54X3NjYWxlKTsKKyAgcmV0dXJuIFBSX1RSVUU7
CiB9CiAKLW5zY29vcmQKLW5zRm9udFBTQUZNOjpEcmF3U3RyaW5nKG5zUmVuZGVyaW5nQ29udGV4
dFBTKiBhQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsIG5zY29v
cmQgYVksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhU3RyaW5nLCBQUlVp
bnQzMiBhTGVuZ3RoKQorUFJCb29sCituc0ZvbnRQU1hmdDo6c3VwZXJzY3JpcHRfeShsb25nICZh
VmFsKQogewotICBOU19FTlNVUkVfVFJVRShhQ29udGV4dCwgMCk7Ci0gIG5zUG9zdFNjcmlwdE9i
aiogcHNPYmogPSBhQ29udGV4dC0+R2V0UG9zdFNjcmlwdE9iaigpOwotICBOU19FTlNVUkVfVFJV
RShwc09iaiwgMCk7CisgIGFWYWwgPSAwOworICBGVF9GYWNlIGZhY2UgPSBnZXRGVEZhY2UoKTsK
KyAgTlNfQVNTRVJUSU9OKGZhY2UsICJmYWlsZWQgdG8gZ2V0IGZhY2Uvc2l6ZSIpOworICBpZiAo
IWZhY2UpCisgICAgcmV0dXJuIFBSX0ZBTFNFOwogCi0gIHBzT2JqLT5tb3ZldG8oYVgsIGFZKTsK
LSAgcHNPYmotPnNob3coYVN0cmluZywgYUxlbmd0aCwgIiIpOwotICByZXR1cm4gR2V0V2lkdGgo
YVN0cmluZywgYUxlbmd0aCk7CisgIFRUX09TMiAqdHRfb3MyID0gKFRUX09TMiAqKSBGVF9HZXRf
U2ZudF9UYWJsZShmYWNlLCBmdF9zZm50X29zMik7CisgIE5TX0FTU0VSVElPTih0dF9vczIsICJ1
bmFibGUgdG8gZ2V0IE9TMiB0YWJsZSIpOworICBpZiAoIXR0X29zMikKKyAgICByZXR1cm4gUFJf
RkFMU0U7CisKKyAgYVZhbCA9IEZUX0RFU0lHTl9VTklUU19UT19QSVhFTFModHRfb3MyLT55U3Vw
ZXJzY3JpcHRZT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2Ut
PnNpemUtPm1ldHJpY3MueV9zY2FsZSk7CisgIHJldHVybiBQUl9UUlVFOwogfQogCi1uc2Nvb3Jk
Ci1uc0ZvbnRQU0FGTTo6RHJhd1N0cmluZyhuc1JlbmRlcmluZ0NvbnRleHRQUyogYUNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLAotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVu
Z3RoKQorUFJCb29sCituc0ZvbnRQU1hmdDo6c3Vic2NyaXB0X3kobG9uZyAmYVZhbCkKIHsKLSAg
TlNfRU5TVVJFX1RSVUUoYUNvbnRleHQsIDApOwotICBuc1Bvc3RTY3JpcHRPYmoqIHBzT2JqID0g
YUNvbnRleHQtPkdldFBvc3RTY3JpcHRPYmooKTsKLSAgTlNfRU5TVVJFX1RSVUUocHNPYmosIDAp
OworICBhVmFsID0gMDsKKyAgRlRfRmFjZSBmYWNlID0gZ2V0RlRGYWNlKCk7CisgIE5TX0FTU0VS
VElPTihmYWNlLCAiZmFpbGVkIHRvIGdldCBmYWNlL3NpemUiKTsKKyAgaWYgKCFmYWNlKQorICAg
IHJldHVybiBQUl9GQUxTRTsKIAotICBwc09iai0+bW92ZXRvKGFYLCBhWSk7Ci0gIHBzT2JqLT5z
aG93KGFTdHJpbmcsIGFMZW5ndGgsICIiLCAwKTsKLSAgcmV0dXJuIEdldFdpZHRoKGFTdHJpbmcs
IGFMZW5ndGgpOworICBUVF9PUzIgKnR0X29zMiA9IChUVF9PUzIgKikgRlRfR2V0X1NmbnRfVGFi
bGUoZmFjZSwgZnRfc2ZudF9vczIpOworICBOU19BU1NFUlRJT04odHRfb3MyLCAidW5hYmxlIHRv
IGdldCBPUzIgdGFibGUiKTsKKyAgaWYgKCF0dF9vczIpCisgICAgcmV0dXJuIFBSX0ZBTFNFOwor
CisgIGFWYWwgPSBGVF9ERVNJR05fVU5JVFNfVE9fUElYRUxTKHR0X29zMi0+eVN1YnNjcmlwdFlP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0
cmljcy55X3NjYWxlKTsKKworICAvLyBzb21lIGZvbnRzIGhhdmUgdGhlIHNpZ24gd3JvbmcuIGl0
IHNob3VsZCBiZSBhbHdheXMgcG9zaXRpdmUuCisgIGFWYWwgPSAoYVZhbCA8IDApID8gLWFWYWwg
OiBhVmFsOworICByZXR1cm4gUFJfVFJVRTsKIH0KIAogbnNyZXN1bHQKLW5zRm9udFBTQUZNOjpS
ZWFsaXplRm9udChuc0ZvbnRNZXRyaWNzUFMqIGFGb250TWV0cmljcywgZmxvYXQgZGV2MmFwcCkK
K25zRm9udFBTWGZ0OjpSZWFsaXplRm9udChuc0ZvbnRNZXRyaWNzUFMqIGFGb250TWV0cmljcywg
ZmxvYXQgZGV2MmFwcCkKIHsKLSAgTlNfRU5TVVJFX0FSR19QT0lOVEVSKGFGb250TWV0cmljcyk7
Ci0KLSAgZmxvYXQgZm9udFNpemU7Ci0gIGZsb2F0IG9mZnNldDsKKyAKKyAgbnNjb29yZCBsZWFk
aW5nLCBlbUhlaWdodCwgZW1Bc2NlbnQsIGVtRGVzY2VudDsKKyAgbnNjb29yZCBtYXhIZWlnaHQs
IG1heEFzY2VudCwgbWF4RGVzY2VudCwgbWF4QWR2YW5jZTsKKyAgbnNjb29yZCB4SGVpZ2h0LCBz
cGFjZVdpZHRoLCBhdmVDaGFyV2lkdGg7CisgIG5zY29vcmQgdW5kZXJsaW5lT2Zmc2V0LCB1bmRl
cmxpbmVTaXplLCBzdXBlcnNjcmlwdE9mZnNldCwgc3Vic2NyaXB0T2Zmc2V0OworICBuc2Nvb3Jk
IHN0cmlrZW91dE9mZnNldCwgc3RyaWtlb3V0U2l6ZTsKIAotICBuc2Nvb3JkIG9uZVBpeGVsID0g
TlNUb0Nvb3JkUm91bmQoMSAqIGRldjJhcHApOworICBpbnQgbGluZVNwYWNpbmcgPSBhc2NlbnQo
KSArIGRlc2NlbnQoKTsKKyAgaWYgKGxpbmVTcGFjaW5nID4gbVBpeGVsU2l6ZSkgeworICAgIGxl
YWRpbmcgPSBuc2Nvb3JkKChsaW5lU3BhY2luZyAtIG1QaXhlbFNpemUpICogZGV2MmFwcCk7Cisg
IH0KKyAgZWxzZSB7CisgICAgbGVhZGluZyA9IDA7CisgIH0KKyAgZW1IZWlnaHQgPSBQUl9NQVgo
MSwgbnNjb29yZChtUGl4ZWxTaXplICogZGV2MmFwcCkpOworICBlbUFzY2VudCA9IG5zY29vcmQo
YXNjZW50KCkgKiBtUGl4ZWxTaXplICogZGV2MmFwcCAvIGxpbmVTcGFjaW5nKTsKKyAgZW1EZXNj
ZW50ID0gZW1IZWlnaHQgLSBlbUFzY2VudDsKIAotICAvLyBjb252ZXJ0IHRoZSBmb250IHNpemUg
d2hpY2ggaXMgaW4gdHdpcHMgdG8gcG9pbnRzCi0gIGZvbnRTaXplID0gbUZvbnQtPnNpemUgLyBU
V0lQU19QRVJfUE9JTlRfRkxPQVQ7CisgIG1heEhlaWdodCAgPSBuc2Nvb3JkKChtYXhfYXNjZW50
KCkgKyBtYXhfZGVzY2VudCgpKSAqIGRldjJhcHApOworICBtYXhBc2NlbnQgID0gbnNjb29yZCht
YXhfYXNjZW50KCkgKiBkZXYyYXBwKSA7CisgIG1heERlc2NlbnQgPSBuc2Nvb3JkKG1heF9kZXNj
ZW50KCkgKiBkZXYyYXBwKTsKKyAgbWF4QWR2YW5jZSA9IG5zY29vcmQobWF4X3dpZHRoKCkgKiBk
ZXYyYXBwKTsKIAotICBvZmZzZXQgPSBOU0Zsb2F0UG9pbnRzVG9Ud2lwcyhmb250U2l6ZSAqIG1B
Rk1JbmZvLT5tUFNGb250SW5mby0+bVhIZWlnaHQpIC8gMTAwMC4wZjsKLSAgbnNjb29yZCB4SGVp
Z2h0ID0gTlNUb0Nvb3JkUm91bmQob2Zmc2V0KTsKLSAgYUZvbnRNZXRyaWNzLT5TZXRYSGVpZ2h0
KHhIZWlnaHQpOwotICBhRm9udE1ldHJpY3MtPlNldFN1cGVyc2NyaXB0T2Zmc2V0KHhIZWlnaHQp
OwotICBhRm9udE1ldHJpY3MtPlNldFN1YnNjcmlwdE9mZnNldCh4SGVpZ2h0KTsKLSAgYUZvbnRN
ZXRyaWNzLT5TZXRTdHJpa2VvdXQoKG5zY29vcmQpKHhIZWlnaHQgLyAyKSwgb25lUGl4ZWwpOwor
ICAvLyA1NiUgb2YgYXNjZW50LCBiZXN0IGd1ZXNzIGZvciBub24tdHJ1ZSB0eXBlCisgIHhIZWln
aHQgPSBOU1RvQ29vcmRSb3VuZCgoZmxvYXQpYXNjZW50KCkqIGRldjJhcHAgKiAwLjU2Zik7CiAK
LSAgb2Zmc2V0ID0gTlNGbG9hdFBvaW50c1RvVHdpcHMoZm9udFNpemUgKiBtQUZNSW5mby0+bVBT
Rm9udEluZm8tPm1VbmRlcmxpbmVQb3NpdGlvbikgLyAxMDAwLjBmOwotICBhRm9udE1ldHJpY3Mt
PlNldFVuZGVybGluZShOU1RvQ29vcmRSb3VuZChvZmZzZXQpLCBvbmVQaXhlbCk7CisgIFBSVW5p
Y2hhciBzcGFjZSA9IChQUlVuaWNoYXIpJyAnOworICBzcGFjZVdpZHRoID0gTlNUb0Nvb3JkUm91
bmQoR2V0V2lkdGgoJnNwYWNlLCAxKSk7CisgIFBSVW5pY2hhciBhdmVyYWdlWCA9IChQUlVuaWNo
YXIpJ3gnOworICBhdmVDaGFyV2lkdGggPSBOU1RvQ29vcmRSb3VuZChHZXRXaWR0aCgmYXZlcmFn
ZVgsIDEpKTsKKyAgCisgIHVuc2lnbmVkIGxvbmcgcHIgPSAwOworICBpZiAoZ2V0WEhlaWdodChw
cikpIHsKKyAgICB4SGVpZ2h0ID0gKG5zY29vcmQocHIgKiBkZXYyYXBwKSk7CisgIH0KIAotICBu
c2Nvb3JkIHNpemUgPSBOU1RvQ29vcmRSb3VuZChmb250U2l6ZSAqIGRldjJhcHApOwotICBhRm9u
dE1ldHJpY3MtPlNldEhlaWdodChzaXplKTsKLSAgYUZvbnRNZXRyaWNzLT5TZXRFbUhlaWdodChz
aXplKTsKLSAgYUZvbnRNZXRyaWNzLT5TZXRNYXhBZHZhbmNlKHNpemUpOwotICBhRm9udE1ldHJp
Y3MtPlNldE1heEhlaWdodChzaXplKTsKKyAgZmxvYXQgaGVpZ2h0OworICBsb25nIHZhbDsKKyAg
CisgIGhlaWdodCA9IGFzY2VudCgpICsgZGVzY2VudCgpOworICB1bmRlcmxpbmVPZmZzZXQgPSAt
TlNUb0ludFJvdW5kKAorICAgICAgICAgICAgICAgICAgICBQUl9NQVggKDEsIGZsb29yICgwLjEg
KiBoZWlnaHQgKyAwLjUpKSAqIGRldjJhcHApOwogCi0gIG9mZnNldCA9IE5TRmxvYXRQb2ludHNU
b1R3aXBzKGZvbnRTaXplICogbUFGTUluZm8tPm1QU0ZvbnRJbmZvLT5tQXNjZW5kZXIpIC8gMTAw
MC4wZjsKLSAgbnNjb29yZCBhc2NlbnQgPSBOU1RvQ29vcmRSb3VuZChvZmZzZXQpOwotICBhRm9u
dE1ldHJpY3MtPlNldEFzY2VudChhc2NlbnQpOwotICBhRm9udE1ldHJpY3MtPlNldEVtQXNjZW50
KGFzY2VudCk7Ci0gIGFGb250TWV0cmljcy0+U2V0TWF4QXNjZW50KGFzY2VudCk7CisgIGlmICh1
bmRlcmxpbmVfdGhpY2tuZXNzKHByKSkgeworICAgIC8qIHRoaXMgd2lsbCBvbmx5IGJlIHByb3Zp
ZGVkIGZyb20gYWRvYmUgLmFmbSBmb250cyAqLworICAgIHVuZGVybGluZVNpemUgPSBuc2Nvb3Jk
KFBSX01BWChkZXYyYXBwLCBOU1RvSW50Um91bmQocHIgKiBkZXYyYXBwKSkpOworICB9CisgIGVs
c2UgeworICAgIGhlaWdodCA9IGFzY2VudCgpICsgZGVzY2VudCgpOworICAgIHVuZGVybGluZVNp
emUgPSBOU1RvSW50Um91bmQoCisgICAgICAgICAgICAgICAgICAgIFBSX01BWCgxLCBmbG9vciAo
MC4wNSAqIGhlaWdodCArIDAuNSkpICogZGV2MmFwcCk7CisgIH0KIAotICBvZmZzZXQgPSBOU0Zs
b2F0UG9pbnRzVG9Ud2lwcyhmb250U2l6ZSAqIG1BRk1JbmZvLT5tUFNGb250SW5mby0+bURlc2Nl
bmRlcikgLyAxMDAwLjBmOwotICBuc2Nvb3JkIGRlc2NlbnQgPSAtKE5TVG9Db29yZFJvdW5kKG9m
ZnNldCkpOwotICBhRm9udE1ldHJpY3MtPlNldERlc2NlbnQoZGVzY2VudCk7Ci0gIGFGb250TWV0
cmljcy0+U2V0RW1EZXNjZW50KGRlc2NlbnQpOwotICBhRm9udE1ldHJpY3MtPlNldE1heERlc2Nl
bnQoZGVzY2VudCk7CisgIGlmIChzdXBlcnNjcmlwdF95KHZhbCkpIHsKKyAgICBzdXBlcnNjcmlw
dE9mZnNldCA9IG5zY29vcmQoUFJfTUFYKGRldjJhcHAsIE5TVG9JbnRSb3VuZCh2YWwgKiBkZXYy
YXBwKSkpOworICB9CisgIGVsc2UgeworICAgIHN1cGVyc2NyaXB0T2Zmc2V0ID0geEhlaWdodDsK
KyAgfQogCi0gIGFGb250TWV0cmljcy0+U2V0TGVhZGluZygwKTsKKyAgaWYgKHN1YnNjcmlwdF95
KHZhbCkpIHsKKyAgICBzdWJzY3JpcHRPZmZzZXQgPSBuc2Nvb3JkKFBSX01BWChkZXYyYXBwLCBO
U1RvSW50Um91bmQodmFsICogZGV2MmFwcCkpKTsKKyAgfQorICBlbHNlIHsKKyAgIHN1YnNjcmlw
dE9mZnNldCA9IHhIZWlnaHQ7CisgIH0KIAotICBuc2Nvb3JkIHNwYWNlV2lkdGggPSBHZXRXaWR0
aCgiICIsIDEpOworICAvKiBuZWVkIGJldHRlciB3YXkgdG8gY2FsY3VsYXRlIHRoaXMgKi8KKyAg
c3RyaWtlb3V0T2Zmc2V0ID0gTlNUb0Nvb3JkUm91bmQoeEhlaWdodCAvIDIuMCk7CisgIHN0cmlr
ZW91dFNpemUgPSB1bmRlcmxpbmVTaXplOworICAKKyAgLy8gVE9ETzogbGVhZGluZyBuZXZlciB1
c2VkLCBkb2VzIGl0IGVxdWFsIHRvICJIZWlnaHQiPworICBhRm9udE1ldHJpY3MtPlNldEhlaWdo
dChlbUhlaWdodCk7CisgIGFGb250TWV0cmljcy0+U2V0RW1IZWlnaHQoZW1IZWlnaHQpOworICBh
Rm9udE1ldHJpY3MtPlNldEVtQXNjZW50KGVtQXNjZW50KTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRF
bURlc2NlbnQoZW1EZXNjZW50KTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRNYXhIZWlnaHQobWF4SGVp
Z2h0KTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRNYXhBc2NlbnQobWF4QXNjZW50KTsKKyAgYUZvbnRN
ZXRyaWNzLT5TZXRNYXhEZXNjZW50KG1heERlc2NlbnQpOworICBhRm9udE1ldHJpY3MtPlNldE1h
eEFkdmFuY2UobWF4QWR2YW5jZSk7CisgIGFGb250TWV0cmljcy0+U2V0WEhlaWdodCh4SGVpZ2h0
KTsKICAgYUZvbnRNZXRyaWNzLT5TZXRTcGFjZVdpZHRoKHNwYWNlV2lkdGgpOwotCi0gIG5zY29v
cmQgYXZlQ2hhcldpZHRoID0gR2V0V2lkdGgoIngiLCAxKTsKICAgYUZvbnRNZXRyaWNzLT5TZXRB
dmVDaGFyV2lkdGgoYXZlQ2hhcldpZHRoKTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRVbmRlcmxpbmUo
dW5kZXJsaW5lT2Zmc2V0LCB1bmRlcmxpbmVTaXplKTsKKyAgYUZvbnRNZXRyaWNzLT5TZXRTdXBl
cnNjcmlwdE9mZnNldChzdXBlcnNjcmlwdE9mZnNldCk7CisgIGFGb250TWV0cmljcy0+U2V0U3Vi
c2NyaXB0T2Zmc2V0KHN1YnNjcmlwdE9mZnNldCk7CisgIGFGb250TWV0cmljcy0+U2V0U3RyaWtl
b3V0KHN0cmlrZW91dE9mZnNldCwgc3RyaWtlb3V0U2l6ZSk7CiAKICAgcmV0dXJuIE5TX09LOwog
fQogCiBuc3Jlc3VsdAotbnNGb250UFNBRk06OlNldHVwRm9udChuc1JlbmRlcmluZ0NvbnRleHRQ
UyogYUNvbnRleHQpCituc0ZvbnRQU1hmdDo6U2V0dXBGb250KG5zUmVuZGVyaW5nQ29udGV4dFBT
KiBhQ29udGV4dCkKIHsKLSAgTlNfRU5TVVJFX1RSVUUoYUNvbnRleHQgJiYgbUZvbnRNZXRyaWNz
LCAwKTsKKyAgTlNfRU5TVVJFX1RSVUUoYUNvbnRleHQsIE5TX0VSUk9SX0ZBSUxVUkUpOwogICBu
c1Bvc3RTY3JpcHRPYmoqIHBzT2JqID0gYUNvbnRleHQtPkdldFBvc3RTY3JpcHRPYmooKTsKLSAg
TlNfRU5TVVJFX1RSVUUocHNPYmosIDApOworICBOU19FTlNVUkVfVFJVRShwc09iaiwgTlNfRVJS
T1JfRkFJTFVSRSk7CiAKICAgbnNjb29yZCBmb250SGVpZ2h0ID0gMDsKICAgbUZvbnRNZXRyaWNz
LT5HZXRIZWlnaHQoZm9udEhlaWdodCk7CiAKLSAgcHNPYmotPnNldHNjcmlwdGZvbnQobUZvbnRJ
bmRleCwgbUZhbWlseU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGZvbnRIZWlnaHQsIG1G
b250LT5zdHlsZSwgbUZvbnQtPnZhcmlhbnQsCi0gICAgICAgICAgICAgICAgICAgICAgIG1Gb250
LT53ZWlnaHQsIG1Gb250LT5kZWNvcmF0aW9ucyk7CisgIG5zQ1N0cmluZyBmb250TmFtZTsKKyAg
aW50IHdtb2RlID0gMDsKKyAgRlRfRmFjZSBmYWNlID0gZ2V0RlRGYWNlKCk7CisgIE5TX0VOU1VS
RV9UUlVFKGZhY2UsIE5TX0VSUk9SX05VTExfUE9JTlRFUik7CisgIGNoYXIgKmNpZEZvbnROYW1l
ID0gRlQyVG9UeXBlOENpZEZvbnROYW1lKGZhY2UsIHdtb2RlKTsKKyAgTlNfRU5TVVJFX1RSVUUo
Y2lkRm9udE5hbWUsIE5TX0VSUk9SX0ZBSUxVUkUpOworICBmb250TmFtZS5Bc3NpZ24oY2lkRm9u
dE5hbWUpOworICBwc09iai0+c2V0Zm9udChmb250TmFtZSwgZm9udEhlaWdodCk7CisgIFBSX0Zy
ZWUoY2lkRm9udE5hbWUpOworICAKICAgcmV0dXJuIE5TX09LOwogfQogCiAjaWZkZWYgTU9aX01B
VEhNTAogbnNyZXN1bHQKLW5zRm9udFBTQUZNOjpHZXRCb3VuZGluZ01ldHJpY3MoY29uc3QgY2hh
ciogICAgICAgIGFTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu
dDMyICAgICAgICAgICBhTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0JvdW5kaW5nTWV0cmljcyYgYUJvdW5kaW5nTWV0cmljcykKK25zRm9udFBTWGZ0OjpHZXRCb3Vu
ZGluZ01ldHJpY3MoY29uc3QgY2hhciogICAgICAgIGFTdHJpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgICAgICAgICAgIGFMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNCb3VuZGluZ01ldHJpY3MmIGFCb3VuZGlu
Z01ldHJpY3MpCiB7CiAgIHJldHVybiBOU19FUlJPUl9OT1RfSU1QTEVNRU5URUQ7CiB9CiAKIG5z
cmVzdWx0Ci1uc0ZvbnRQU0FGTTo6R2V0Qm91bmRpbmdNZXRyaWNzKGNvbnN0IFBSVW5pY2hhciog
ICBhU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAgICAg
ICAgICAgYUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNCb3VuZGlu
Z01ldHJpY3MmIGFCb3VuZGluZ01ldHJpY3MpCituc0ZvbnRQU1hmdDo6R2V0Qm91bmRpbmdNZXRy
aWNzKGNvbnN0IFBSVW5pY2hhciogICBhU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSVWludDMyICAgICAgICAgICBhTGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQm91bmRpbmdNZXRyaWNzJiBhQm91bmRpbmdNZXRyaWNz
KQogewogICByZXR1cm4gTlNfRVJST1JfTk9UX0lNUExFTUVOVEVEOwogfQotI2VuZGlmCi0KLSNp
ZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgorI2VuZGlmIC8vTU9aX01BVEhNTAogCi0jZGVmaW5l
IFdJREVOXzhfVE9fMTZfQlVGX1NJWkUgMTAyNAorI2Vsc2UKIAogUFJCb29sCiBuc0ZvbnRQU0Zy
ZWVUeXBlOjpDU1NGb250RW51bUNhbGxiYWNrKGNvbnN0IG5zU3RyaW5nJiBhRmFtaWx5LCBQUkJv
b2wgYUdlbmVyaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq
IGFGcGkpCiB7CiAgIGZvbnRQU0luZm8qIGZwaSA9IChmb250UFNJbmZvKilhRnBpOwogICBuc0NB
dXRvU3RyaW5nIGZhbWlseW5hbWU7CkBAIC03MDksMTUgKzE1MDUsMTUgQEAgbnNGb250UFNGcmVl
VHlwZTo6Q1NTRm9udEVudW1DYWxsYmFjayhjbwogICAgICAgcmV0dXJuIFBSX1RSVUU7IC8vIGtl
ZXAgdHJ5aW5nCiAgICAgfQogICAgIG5zWFBJRExDU3RyaW5nIHZhbHVlOwogICAgIG5zcmVzdWx0
IHJ2OwogICAgIG5zQ09NUHRyPG5zSVByZWY+IHByZWYoZG9fR2V0U2VydmljZShOU19QUkVGX0NP
TlRSQUNUSUQsICZydikpOwogICAgIE5TX0VOU1VSRV9TVUNDRVNTKHJ2LCBQUl9UUlVFKTsgLy8g
a2VlcCB0cnlpbmcKICAgICBuc0NBdXRvU3RyaW5nIG5hbWUoImZvbnQubmFtZS4iKTsKLSAgICBu
YW1lLkFwcGVuZFdpdGhDb252ZXJzaW9uKGFGYW1pbHkuZ2V0KCkpOworICAgIExvc3N5QXBwZW5k
VVRGMTZ0b0FTQ0lJKGFGYW1pbHksIG5hbWUpOwogICAgIG5hbWUuQXBwZW5kKGNoYXIoJy4nKSk7
CiAgICAgbmFtZS5BcHBlbmQoZnBpLT5sYW5nKTsKICAgICBwcmVmLT5Db3B5Q2hhclByZWYobmFt
ZS5nZXQoKSwgZ2V0dGVyX0NvcGllcyh2YWx1ZSkpOwogICAgIGlmICghdmFsdWUuZ2V0KCkpCiAg
ICAgICByZXR1cm4gUFJfVFJVRTsgLy8ga2VlcCB0cnlpbmcKICAgICAvLyBzdHJpcCBkb3duIHRv
IGp1c3QgdGhlIGZhbWlseSBuYW1lCiAgICAgUFJJbnQzMiBzdGFydEZhbWlseSA9IHZhbHVlLkZp
bmRDaGFyKCctJykgKyAxOwpAQCAtNzMwLDE1ICsxNTI2LDE1IEBAIG5zRm9udFBTRnJlZVR5cGU6
OkNTU0ZvbnRFbnVtQ2FsbGJhY2soY28KICAgICAgIGVsc2UgIC8vIEZGUkUgCiAgICAgICAgIGZh
bWlseW5hbWUuQXBwZW5kKFN1YnN0cmluZyh2YWx1ZSwgc3RhcnRGYW1pbHksIGVuZEZhbWlseSAt
IHN0YXJ0RmFtaWx5KSk7CiAgICAgfQogICAgIFBSX0xPRyhnRm9udE1ldHJpY3NQU00sIFBSX0xP
R19ERUJVRywKICAgICAgICAgKCJnZW5lcmljIGZvbnQgXCIlc1wiIC0+IFwiJXNcIlxuIiwgbmFt
ZS5nZXQoKSwgZmFtaWx5bmFtZS5nZXQoKSkpOwogICB9CiAgIGVsc2UKLSAgICBmYW1pbHluYW1l
LkFwcGVuZFdpdGhDb252ZXJzaW9uKGFGYW1pbHkpOworICAgIExvc3N5QXBwZW5kVVRGMTZ0b0FT
Q0lJKGFGYW1pbHksIGZhbWlseW5hbWUpOwogCiAgIEFkZEZvbnRFbnRyaWVzKGZhbWlseW5hbWUs
IGZwaS0+bGFuZywgZnBpLT53ZWlnaHQsIAogICAgICAgICAgICAgICAgICBuc0lGb250Q2F0YWxv
Z1NlcnZpY2U6OmtGQ1dpZHRoQW55LCBmcGktPnNsYW50LAogICAgICAgICAgICAgICAgICBuc0lG
b250Q2F0YWxvZ1NlcnZpY2U6OmtGQ1NwYWNpbmdBbnksIGZwaSk7CiAKICAgcmV0dXJuIFBSX1RS
VUU7CiB9CkBAIC0xNTU2LDE0ICsyMzUyLDE1IEBAIG5zRm9udFBTRnJlZVR5cGU6OkdldEJvdW5k
aW5nTWV0cmljcyhjb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0Jv
dW5kaW5nTWV0cmljcyYgYUJvdW5kaW5nTWV0cmljcykKIHsKICAgcmV0dXJuIE5TX0VSUk9SX05P
VF9JTVBMRU1FTlRFRDsKIH0KICNlbmRpZiAvL01PWl9NQVRITUwKIAogI2VuZGlmIC8vTU9aX0VO
QUJMRV9GUkVFVFlQRTIKKyNlbmRpZiAvL01PWl9FTkFCTEVfWEZUCiAKIC8vIEltcGxlbWVudGF0
aW9uIG9mIG5zUFNGb250R2VuZXJhdG9yCiBuc1BTRm9udEdlbmVyYXRvcjo6bnNQU0ZvbnRHZW5l
cmF0b3IoKQogewogfQogCiBuc1BTRm9udEdlbmVyYXRvcjo6fm5zUFNGb250R2VuZXJhdG9yKCkK
QEAgLTE1ODksMTUgKzIzODYsNzcgQEAgdm9pZCBuc1BTRm9udEdlbmVyYXRvcjo6QWRkVG9TdWJz
ZXQoY29ucwogICBmb3IgKFBSVWludDMyIGk9MDsgaSA8IGFMZW5ndGg7IGkrKykgewogICAgIHVu
aWNoYXIgPSAoUFJVbmljaGFyKSgodW5zaWduZWQgY2hhcilhU3RyaW5nW2ldKTsKICAgICBpZiAo
bVN1YnNldC5GaW5kQ2hhcih1bmljaGFyKSA9PSAtMSApCiAgICAgICBtU3Vic2V0LkFwcGVuZCh1
bmljaGFyKTsKICAgfQogfQogCisjaWZkZWYgTU9aX0VOQUJMRV9YRlQKK25zWGZ0VHlwZThHZW5l
cmF0b3I6Om5zWGZ0VHlwZThHZW5lcmF0b3IoKQoreworfQorCituc3Jlc3VsdAorbnNYZnRUeXBl
OEdlbmVyYXRvcjo6SW5pdChuc1hmdEVudHJ5KiBhRW50cnkpCit7CisgIE5TX0VOU1VSRV9UUlVF
KGFFbnRyeSwgTlNfRVJST1JfRkFJTFVSRSk7CisgIG1FbnRyeSA9IGFFbnRyeTsKKworICBGVF9F
cnJvciBlcnJvciA9IEZUX0luaXRfRnJlZVR5cGUoJm1GcmVlVHlwZUxpYnJhcnkpOworICBOU19B
U1NFUlRJT04oIWVycm9yLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgRnJlZVR5cGUgbGlicmFyeSIp
OworICBpZiAoZXJyb3IpIHsKKyAgICBtRnJlZVR5cGVMaWJyYXJ5ID0gbnNudWxsOworICAgIHJl
dHVybiBOU19FUlJPUl9GQUlMVVJFOworICB9CisgIGVycm9yID0gRlRDX01hbmFnZXJfTmV3KG1G
cmVlVHlwZUxpYnJhcnksIDAsIDAsIDAsIG5zWGZ0RmFjZVJlcXVlc3RlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwgJm1GVENhY2hlTWFuYWdlcik7CisgIE5TX0FTU0VSVElPTigh
ZXJyb3IsICJmYWlsZWQgdG8gY3JlYXRlIEZyZWVUeXBlIENhY2hlIG1hbmFnZXIiKTsKKyAgaWYg
KGVycm9yKQorICAgIHJldHVybiBOU19FUlJPUl9GQUlMVVJFOworCisgIHJldHVybiBOU19PSzsK
K30KKworbnNYZnRUeXBlOEdlbmVyYXRvcjo6fm5zWGZ0VHlwZThHZW5lcmF0b3IoKQoreworICBG
VENfTWFuYWdlcl9Eb25lKG1GVENhY2hlTWFuYWdlcik7CisKKyAgaWYgKEZUX0RvbmVfRnJlZVR5
cGUobUZyZWVUeXBlTGlicmFyeSkpCisgICAgcmV0dXJuOworCisgIG1FbnRyeSA9IG5zbnVsbDsK
K30KKwordm9pZCBuc1hmdFR5cGU4R2VuZXJhdG9yOjpHZW5lcmF0ZVBTRm9udChGSUxFKiBhRmls
ZSkKK3sKKyAgRlRfRXJyb3IgZXJyb3I7CisgIEZUX0ZhY2UgZmFjZSA9IG1FbnRyeS0+bUZhY2U7
CisKKyAgaWYgKGZhY2UgPT0gbnNudWxsKSB7CisgICAgbUltYWdlRGVzYy5mb250LmZhY2VfaWQg
ICAgPSAodm9pZCopbUVudHJ5OworICAgIG1JbWFnZURlc2MuZm9udC5waXhfd2lkdGggID0gMTY7
CisgICAgbUltYWdlRGVzYy5mb250LnBpeF9oZWlnaHQgPSAxNjsKKyAgICBtSW1hZ2VEZXNjLmlt
YWdlX3R5cGUgPSAwOworICAgIGVycm9yID0gRlRDX01hbmFnZXJfTG9va3VwX1NpemUobUZUQ2Fj
aGVNYW5hZ2VyLCAmbUltYWdlRGVzYy5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmZhY2UsIG5zbnVsbCk7CisgICAgaWYgKGVycm9yKQorICAgICAgcmV0dXJuOwor
ICB9CisKKyAgaWYgKGZhY2UgPT0gbnNudWxsKQorICAgIHJldHVybjsKKyAKKyAgaW50IHdtb2Rl
ID0gMDsKKyAgaWYgKCFtU3Vic2V0LklzRW1wdHkoKSkKKyAgICBGVDJTdWJzZXRUb1R5cGU4KGZh
Y2UsIG1TdWJzZXQuZ2V0KCksIG1TdWJzZXQuTGVuZ3RoKCksIHdtb2RlLCBhRmlsZSk7Cit9CisK
KyNlbHNlCiAjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKKwogbnNGVDJUeXBlOEdlbmVyYXRv
cjo6bnNGVDJUeXBlOEdlbmVyYXRvcigpCiB7CiB9CiAKIG5zcmVzdWx0CiBuc0ZUMlR5cGU4R2Vu
ZXJhdG9yOjpJbml0KG5zSVRydWVUeXBlRm9udENhdGFsb2dFbnRyeSogYUVudHJ5KQogewpAQCAt
MTYzNSw5ICsyNDk0LDEwIEBAIHZvaWQgbnNGVDJUeXBlOEdlbmVyYXRvcjo6R2VuZXJhdGVQU0Zv
bnQKICAgaWYgKE5TX0ZBSUxFRChydikpCiAgICAgcmV0dXJuOwogIAogICBpbnQgd21vZGUgPSAw
OwogICBpZiAoIW1TdWJzZXQuSXNFbXB0eSgpKQogICAgIEZUMlN1YnNldFRvVHlwZTgoZmFjZSwg
bVN1YnNldC5nZXQoKSwgbVN1YnNldC5MZW5ndGgoKSwgd21vZGUsIGFGaWxlKTsKIH0KLSNlbmRp
ZiAvL01PWl9FTkFCTEVfRlJFRVRZUEUyCiAKKyNlbmRpZiAvL01PWl9FTkFCTEVfRlJFRVRZUEUy
CisjZW5kaWYgLy9NT1pfRU5BQkxFX1hGVApJbmRleDogZ2Z4L3NyYy9wcy9uc0ZvbnRNZXRyaWNz
UFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9tb3ppbGxhL2dmeC9zcmMvcHMvbnNG
b250TWV0cmljc1BTLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtdSAtNyAtcCAt
cjEuMjQgbnNGb250TWV0cmljc1BTLmgKLS0tIGdmeC9zcmMvcHMvbnNGb250TWV0cmljc1BTLmgJ
MjIgQXByIDIwMDMgMTY6MjU6MDkgLTAwMDAJMS4yNAorKysgZ2Z4L3NyYy9wcy9uc0ZvbnRNZXRy
aWNzUFMuaAkxNyBPY3QgMjAwNCAxMToxMDoxOSAtMDAwMApAQCAtNDcsMTUgKzQ3LDI4IEBACiAj
aW5jbHVkZSAibnNJQXRvbS5oIgogI2luY2x1ZGUgIm5zVW5pdENvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJuc0lEZXZpY2VDb250ZXh0LmgiCiAjaW5jbHVkZSAibnNDT01QdHIuaCIKICNpbmNsdWRl
ICJuc0NSVC5oIgogI2luY2x1ZGUgIm5zQ29tcHJlc3NlZENoYXJNYXAuaCIKICNpbmNsdWRlICJu
c1Bvc3RTY3JpcHRPYmouaCIKKyNpZmRlZiBNT1pfRU5BQkxFX1hGVAorI2luY2x1ZGUgPGZ0MmJ1
aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9HTFlQSF9ICisjaW5j
bHVkZSBGVF9DQUNIRV9ICisjaW5jbHVkZSBGVF9DQUNIRV9JTUFHRV9ICisjaW5jbHVkZSBGVF9P
VVRMSU5FX0gKKyNpbmNsdWRlIEZUX09VVExJTkVfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFC
TEVTX0gKKyNlbHNlCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKICNpbmNsdWRlICJuc0lG
b250Q2F0YWxvZ1NlcnZpY2UuaCIKKyNlbmRpZgorI2VuZGlmCiAjaW5jbHVkZSAibnNWb2lkQXJy
YXkuaCIKICNpbmNsdWRlICJuc0hhc2h0YWJsZS5oIgogCiBjbGFzcyBuc1BTRm9udEdlbmVyYXRv
cjsKIGNsYXNzIG5zRGV2aWNlQ29udGV4dFBTOwogY2xhc3MgbnNSZW5kZXJpbmdDb250ZXh0UFM7
CiBjbGFzcyBuc0ZvbnRQUzsKQEAgLTI0NywyNCArMjYwLDEyMSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICBuc0FGTU9iamVjdCogbUFGTUluZm87CiAgIFBSSW50MTYgICAgICBtRm9udEluZGV4Owog
ICBuc1N0cmluZyAgICAgbUZhbWlseU5hbWU7CiB9OwogCisKKyNpZmRlZiBNT1pfRU5BQkxFX1hG
VAorCisjaW5jbHVkZSA8WDExL1hmdC9YZnQuaD4KKworY2xhc3MgbnNYZnRFbnRyeQoreworcHVi
bGljOgorICBuc1hmdEVudHJ5KEZjUGF0dGVybiAqYUZvbnRQYXR0ZXJuKTsKKyAgfm5zWGZ0RW50
cnkoKSB7fTsgCisKKyAgRlRfRmFjZSAgICAgICBtRmFjZTsKKyAgaW50ICAgICAgICAgICBtRmFj
ZUluZGV4OworICBuc0NTdHJpbmcgICAgIG1Gb250RmlsZU5hbWU7CisgIG5zQ1N0cmluZyAgICAg
bUZhbWlseU5hbWU7CisgIG5zQ1N0cmluZyAgICAgbVN0eWxlTmFtZTsKKworcHJvdGVjdGVkOgor
ICBuc1hmdEVudHJ5KCkge307Cit9OworCitzdHJ1Y3QgZm9udHBzIHsKKyAgbnNYZnRFbnRyeSAq
ZW50cnk7CisgIG5zRm9udFBTICAgKmZvbnRwczsKKyAgRmNDaGFyU2V0ICAqY2hhcnNldDsKK307
CisKK3N0cnVjdCBmb250UFNJbmZvIHsKKyAgbnNWb2lkQXJyYXkgICAgICpmb250cHM7CisgIGNv
bnN0IG5zRm9udCogICAgbnNmb250OworICBuc0NBdXRvU3RyaW5nICAgIGxhbmc7CisgIG5zSGFz
aHRhYmxlICAgICAqYWxyZWFkeUxvYWRlZDsKKyAgbnNDU3RyaW5nQXJyYXkgICBtRm9udExpc3Q7
CisgIG5zQXV0b1ZvaWRBcnJheSAgbUZvbnRJc0dlbmVyaWM7CisgIG5zQ1N0cmluZyAgICAgICAq
bUdlbmVyaWNGb250OworfTsKKworY2xhc3MgbnNGb250UFNYZnQgOiBwdWJsaWMgbnNGb250UFMK
K3sKK3B1YmxpYzoKKyAgc3RhdGljIG5zRm9udFBTKiBGaW5kRm9udChQUlVuaWNoYXIgYUNoYXIs
IGNvbnN0IG5zRm9udCYgYUZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGb250
TWV0cmljc1BTKiBhRm9udE1ldHJpY3MpOworICBuc3Jlc3VsdCAgICAgICAgIEluaXQobnNYZnRF
bnRyeSogYUVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgbnNQU0ZvbnRHZW5lcmF0b3Iq
IGFQU0ZvbnRHZW4pOworICBzdGF0aWMgUFJCb29sIENTU0ZvbnRFbnVtQ2FsbGJhY2soY29uc3Qg
bnNTdHJpbmcmIGFGYW1pbHksIFBSQm9vbCBhR2VuZXJpYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQqIGFGcGkpOworCisgIG5zRm9udFBTWGZ0KGNvbnN0IG5zRm9u
dCYgYUZvbnQsIG5zRm9udE1ldHJpY3NQUyogYUZvbnRNZXRyaWNzKTsKKyAgdmlydHVhbCB+bnNG
b250UFNYZnQoKTsKKyAgTlNfREVDTF9BTkRfSU1QTF9aRVJPSU5HX09QRVJBVE9SX05FVworCisg
IG5zY29vcmQgR2V0V2lkdGgoY29uc3QgY2hhciogYVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCk7
CisgIG5zY29vcmQgR2V0V2lkdGgoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBh
TGVuZ3RoKTsKKyAgbnNjb29yZCBEcmF3U3RyaW5nKG5zUmVuZGVyaW5nQ29udGV4dFBTKiBhQ29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsIG5zY29vcmQgYVksCisgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoKTsK
KyAgbnNjb29yZCBEcmF3U3RyaW5nKG5zUmVuZGVyaW5nQ29udGV4dFBTKiBhQ29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsIG5zY29vcmQgYVksCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGgpOworICBu
c3Jlc3VsdCBSZWFsaXplRm9udChuc0ZvbnRNZXRyaWNzUFMqIGFGb250TWV0cmljcywgZmxvYXQg
ZGV2MmFwcCk7CisgIG5zcmVzdWx0IFNldHVwRm9udChuc1JlbmRlcmluZ0NvbnRleHRQUyogYUNv
bnRleHQpOworCisjaWZkZWYgTU9aX01BVEhNTAorICBuc3Jlc3VsdAorICBHZXRCb3VuZGluZ01l
dHJpY3MoY29uc3QgY2hhciogICAgICAgIGFTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICBQ
UlVpbnQzMiAgICAgICAgICAgYUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIG5zQm91bmRp
bmdNZXRyaWNzJiBhQm91bmRpbmdNZXRyaWNzKTsKKyAgbnNyZXN1bHQKKyAgR2V0Qm91bmRpbmdN
ZXRyaWNzKGNvbnN0IFBSVW5pY2hhciogICBhU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgICAgICAgICAgIGFMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBuc0JvdW5k
aW5nTWV0cmljcyYgYUJvdW5kaW5nTWV0cmljcyk7CisjZW5kaWYKKworICBuc1hmdEVudHJ5ICpt
RW50cnk7CisgIEZUX0ZhY2UgZ2V0RlRGYWNlKCk7CisKK3Byb3RlY3RlZDoKKyAgUFJVaW50MTYg
ICAgICAgIG1QaXhlbFNpemU7CisgIEZUQ19JbWFnZV9EZXNjICBtSW1hZ2VEZXNjOworICBGVF9M
aWJyYXJ5ICAgICAgbUZyZWVUeXBlTGlicmFyeTsKKyAgRlRDX01hbmFnZXIgICAgIG1GVENhY2hl
TWFuYWdlcjsKKyAgRlRDX0ltYWdlX0NhY2hlIG1JbWFnZUNhY2hlOworCisgIGludCAgICAgYXNj
ZW50KCk7CisgIGludCAgICAgZGVzY2VudCgpOworICBQUkJvb2wgIGdldFhIZWlnaHQodW5zaWdu
ZWQgbG9uZyAmYVZhbCk7CisgIGludCAgICAgbWF4X2FzY2VudCgpOworICBpbnQgICAgIG1heF9k
ZXNjZW50KCk7CisgIGludCAgICAgbWF4X3dpZHRoKCk7CisgIFBSQm9vbCAgc3VwZXJzY3JpcHRf
eShsb25nICZhVmFsKTsKKyAgUFJCb29sICBzdWJzY3JpcHRfeShsb25nICZhVmFsKTsKKyAgUFJC
b29sICB1bmRlcmxpbmVQb3NpdGlvbihsb25nICZhVmFsKTsKKyAgUFJCb29sICB1bmRlcmxpbmVf
dGhpY2tuZXNzKHVuc2lnbmVkIGxvbmcgJmFWYWwpOworICBuc1BTRm9udEdlbmVyYXRvciogIG1Q
U0ZvbnRHZW5lcmF0b3I7Cit9OworCisjZWxzZQorCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQ
RTIKKyNpbmNsdWRlICJuc0lGcmVlVHlwZTIuaCIKKwogdHlwZWRlZiBzdHJ1Y3QgewogICBuc0lU
cnVlVHlwZUZvbnRDYXRhbG9nRW50cnkgKmVudHJ5OwogICBuc0ZvbnRQUyAqZm9udHBzOwogICB1
bnNpZ25lZCBzaG9ydCAqY2NtYXA7CiB9IGZvbnRwczsKIAotI2lmZGVmIE1PWl9FTkFCTEVfRlJF
RVRZUEUyCi0KLSNpbmNsdWRlICJuc0lGcmVlVHlwZTIuaCIKLQogdHlwZWRlZiBzdHJ1Y3Qgewog
ICBuc1ZvaWRBcnJheSAqZm9udHBzOwogICBjb25zdCBuc0ZvbnQqIG5zZm9udDsKICAgbnNDQXV0
b1N0cmluZyBsYW5nOwogICBuc0hhc2h0YWJsZSAqYWxyZWFkeUxvYWRlZDsKICAgUFJVaW50MTYg
c2xhbnQ7CiAgIFBSVWludDE2IHdlaWdodDsKQEAgLTMzNCwzOCArNDQ0LDYxIEBAIHByb3RlY3Rl
ZDoKICAgUFJCb29sICBzdXBlcnNjcmlwdF95KGxvbmcgJmFWYWwpOwogICBQUkJvb2wgIHN1YnNj
cmlwdF95KGxvbmcgJmFWYWwpOwogICBQUkJvb2wgIHVuZGVybGluZVBvc2l0aW9uKGxvbmcgJmFW
YWwpOwogICBQUkJvb2wgIHVuZGVybGluZV90aGlja25lc3ModW5zaWduZWQgbG9uZyAmYVZhbCk7
CiAgIG5zUFNGb250R2VuZXJhdG9yKiAgbVBTRm9udEdlbmVyYXRvcjsKIH07CiAKLSNlbmRpZgor
I2Vsc2UgLy8gIUZSRUVUWVBFMiAmJiAhWEZUCit0eXBlZGVmIHN0cnVjdCB7CisgIG5zRm9udFBT
ICAgKmZvbnRwczsKK30gZm9udHBzOworI2VuZGlmIC8vIE1PWl9FTkFCTEVfRlJFRVRZUEUyCisj
ZW5kaWYgICAvLyBNT1pfRU5BQkxFX1hGVAogCiBjbGFzcyBuc1BTRm9udEdlbmVyYXRvciB7CiBw
dWJsaWM6CiAgIG5zUFNGb250R2VuZXJhdG9yKCk7CiAgIHZpcnR1YWwgfm5zUFNGb250R2VuZXJh
dG9yKCk7CiAgIHZpcnR1YWwgdm9pZCAgR2VuZXJhdGVQU0ZvbnQoRklMRSogYUZpbGUpOwogICB2
b2lkICBBZGRUb1N1YnNldChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5n
dGgpOwogICB2b2lkICBBZGRUb1N1YnNldChjb25zdCBjaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBh
TGVuZ3RoKTsKIAogcHJvdGVjdGVkOgogICBuc1N0cmluZyBtU3Vic2V0OwogfTsKIAorCisjaWZk
ZWYgTU9aX0VOQUJMRV9YRlQKKworY2xhc3MgbnNYZnRUeXBlOEdlbmVyYXRvciA6IHB1YmxpYyBu
c1BTRm9udEdlbmVyYXRvciB7CitwdWJsaWM6CisgIG5zWGZ0VHlwZThHZW5lcmF0b3IoKTsKKyAg
fm5zWGZ0VHlwZThHZW5lcmF0b3IoKTsKKyAgbnNyZXN1bHQgSW5pdChuc1hmdEVudHJ5KiBhRmNl
KTsKKyAgdm9pZCAgR2VuZXJhdGVQU0ZvbnQoRklMRSogYUZpbGUpOworCitwcm90ZWN0ZWQ6Cisg
IG5zWGZ0RW50cnkgKm1FbnRyeTsKKyAgRlRDX0ltYWdlX0Rlc2MgIG1JbWFnZURlc2M7CisgIEZU
X0xpYnJhcnkgICAgICBtRnJlZVR5cGVMaWJyYXJ5OworICBGVENfTWFuYWdlciAgICAgbUZUQ2Fj
aGVNYW5hZ2VyOworfTsKKyNlbHNlCiAjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKIGNsYXNz
IG5zRlQyVHlwZThHZW5lcmF0b3IgOiBwdWJsaWMgbnNQU0ZvbnRHZW5lcmF0b3IgewogcHVibGlj
OgogICBuc0ZUMlR5cGU4R2VuZXJhdG9yKCk7CiAgIH5uc0ZUMlR5cGU4R2VuZXJhdG9yKCk7CiAg
IG5zcmVzdWx0IEluaXQobnNJVHJ1ZVR5cGVGb250Q2F0YWxvZ0VudHJ5KiBhRmNlKTsKICAgdm9p
ZCAgR2VuZXJhdGVQU0ZvbnQoRklMRSogYUZpbGUpOwogCiBwcm90ZWN0ZWQ6CiAgIG5zQ09NUHRy
PG5zSVRydWVUeXBlRm9udENhdGFsb2dFbnRyeT4gbUVudHJ5OwogICBuc0NPTVB0cjxuc0lGcmVl
VHlwZTI+IG1GdDI7CiAgIEZUQ19JbWFnZV9EZXNjICBtSW1hZ2VEZXNjOwogfTsKLSNlbmRpZgor
I2VuZGlmICAgLy8gTU9aX0VOQUJMRV9GUkVFVFlQRTIKKyNlbmRpZiAgIC8vIE1PWl9FTkFCTEVf
WEZUCiAKICNlbmRpZgogCkluZGV4OiBnZngvc3JjL3BzL25zVHlwZTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnNyb290L21vemlsbGEvZ2Z4L3NyYy9wcy9uc1R5cGUxLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLTcgLXAgLXIxLjEgbnNUeXBlMS5jcHAKLS0tIGdm
eC9zcmMvcHMvbnNUeXBlMS5jcHAJMTEgRGVjIDIwMDIgMDY6MjQ6NDcgLTAwMDAJMS4xCisrKyBn
Zngvc3JjL3BzL25zVHlwZTEuY3BwCTE3IE9jdCAyMDA0IDExOjEwOjE5IC0wMDAwCkBAIC02Nywx
NSArNjcsMTcgQEAKIAogI2luY2x1ZGUgIm5zVHlwZTEuaCIKIAogc3RhdGljIGNvbnN0IFBSVWlu
dDE2IHR5cGUxX2VuY3J5cHRpb25fYzEgPSBUWVBFMV9FTkNSWVBUSU9OX0MxOwogc3RhdGljIGNv
bnN0IFBSVWludDE2IHR5cGUxX2VuY3J5cHRpb25fYzIgPSBUWVBFMV9FTkNSWVBUSU9OX0MyOwog
CiB0eXBlZGVmIHN0cnVjdCB7CisjaWZuZGVmIE1PWl9FTkFCTEVfWEZUCiAgIG5zSUZyZWVUeXBl
MiAgKmZ0MjsKKyNlbmRpZgogICBGVF9GYWNlICAgICAgICBmYWNlOwogICBpbnQgICAgICAgICAg
ICBlbG1fY250OwogICBpbnQgICAgICAgICAgICBsZW47CiAgIGRvdWJsZSAgICAgICAgIGN1cl94
OwogICBkb3VibGUgICAgICAgICBjdXJfeTsKICAgdW5zaWduZWQgY2hhciAqYnVmOwogICBpbnQg
ICAgICAgICAgICB3bW9kZTsKQEAgLTE3NywyNSArMTc5LDMyIEBAIHNpZGVXaWR0aEFuZEJlYXJp
bmcoRlRfVmVjdG9yICphRW5kUHQsIEYKIHsKICAgaW50IGF3ID0gMDsKICAgaW50IGFoID0gMDsK
ICAgRlRfVVNob3J0IHVwbSA9IGFGdGktPmZhY2UtPnVuaXRzX3Blcl9FTTsKICAgRlRfR2x5cGhT
bG90IHNsb3Q7CiAgIEZUX0dseXBoIGdseXBoOwogICBGVF9CQm94IGJib3g7Ci0gIG5zcmVzdWx0
IHJ2OwogCiAgIHNsb3QgPSBhRnRpLT5mYWNlLT5nbHlwaDsKIAotICBydiA9IGFGdGktPmZ0Mi0+
R2V0R2x5cGgoc2xvdCwgJmdseXBoKTsKKyNpZmRlZiBNT1pfRU5BQkxFX1hGVAorICBGVF9FcnJv
ciBlcnJvciA9IEZUX0dldF9HbHlwaChzbG90LCAmZ2x5cGgpOworICBpZiAoZXJyb3IpIHsKKyAg
ICBOU19FUlJPUigic2lkZVdpZHRoQW5kQmVhcmluZyBmYWlsZWQgdG8gZ2V0IGdseXBoIik7Cisg
ICAgcmV0dXJuIFBSX0ZBTFNFOworICB9CisgIEZUX0dseXBoX0dldF9DQm94KGdseXBoLCBmdF9n
bHlwaF9iYm94X3Vuc2NhbGVkLCAmYmJveCk7CisjZWxzZQorICBuc3Jlc3VsdCBydiA9IGFGdGkt
PmZ0Mi0+R2V0R2x5cGgoc2xvdCwgJmdseXBoKTsKICAgaWYgKE5TX0ZBSUxFRChydikpIHsKICAg
ICBOU19FUlJPUigic2lkZVdpZHRoQW5kQmVhcmluZyBmYWlsZWQgdG8gZ2V0IGdseXBoIik7CiAg
ICAgcmV0dXJuIFBSX0ZBTFNFOwogICB9CiAgIGFGdGktPmZ0Mi0+R2x5cGhHZXRDQm94KGdseXBo
LCBmdF9nbHlwaF9iYm94X3Vuc2NhbGVkLCAmYmJveCk7Ci0KKyNlbmRpZgogCiAgIGlmIChhRnRp
LT53bW9kZSA9PSAwKQogICAgIGF3ID0gdG9DUyh1cG0sIHNsb3QtPm1ldHJpY3MuaG9yaUFkdmFu
Y2UpOwogICBlbHNlCiAgICAgYXcgPSAtdG9DUyh1cG0sIHNsb3QtPm1ldHJpY3MudmVydEFkdmFu
Y2UpOwogCiAgIGlmIChhRW5kUHQtPnkgPT0gMCkgewpAQCAtMzY3LDUyICszNzYsNzMgQEAgc3Rh
dGljIEZUX091dGxpbmVfRnVuY3MgZnRfb3V0bGluZV9mdW5jcwogICBjb25pY3RvLAogICBjdWJp
Y3RvLAogICAwLAogICAwCiB9OwogCiBGVF9FcnJvcgorI2lmZGVmIE1PWl9FTkFCTEVfWEZUCitG
VDJHbHlwaFRvVHlwZTFDaGFyU3RyaW5nKEZUX0ZhY2UgYUZhY2UsIFBSVWludDMyIGFHbHlwaElE
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYVdtb2RlLCBpbnQgYUxlbklWLCB1bnNp
Z25lZCBjaGFyICphQnVmKQorI2Vsc2UKIEZUMkdseXBoVG9UeXBlMUNoYXJTdHJpbmcobnNJRnJl
ZVR5cGUyICphRnQyLCBGVF9GYWNlIGFGYWNlLCBQUlVpbnQzMiBhR2x5cGhJRCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGFXbW9kZSwgaW50IGFMZW5JViwgdW5zaWduZWQgY2hhciAq
YUJ1ZikKKyNlbmRpZgogewogICBpbnQgajsKICAgRlRfSW50MzIgZmxhZ3MgPSBGVF9MT0FEX05P
X0JJVE1BUCB8IEZUX0xPQURfTk9fU0NBTEUgfCBGVF9MT0FEX05PX0hJTlRJTkc7CiAgIEZUX0ds
eXBoU2xvdCBzbG90OwogICB1bnNpZ25lZCBjaGFyICpzdGFydCA9IGFCdWY7CiAgIEZUMlBUMV9p
bmZvIGZ0aTsKLSAgbnNyZXN1bHQgcnY7CiAKLSAgcnYgPSBhRnQyLT5Mb2FkR2x5cGgoYUZhY2Us
IGFHbHlwaElELCBmbGFncyk7CisjaWZkZWYgTU9aX0VOQUJMRV9YRlQKKyAgRlRfRXJyb3IgZXJy
b3IgPSBGVF9Mb2FkX0dseXBoKGFGYWNlLCBhR2x5cGhJRCwgZmxhZ3MpOworICBpZiAoZXJyb3Ip
IHsKKyAgICBOU19FUlJPUigiZmFpbGVkIHRvIGxvYWQgYUdseXBoSUQiKTsKKyAgICByZXR1cm4g
ZXJyb3I7CisgIH0KKyNlbHNlCisgIG5zcmVzdWx0IHJ2ID0gYUZ0Mi0+TG9hZEdseXBoKGFGYWNl
LCBhR2x5cGhJRCwgZmxhZ3MpOwogICBpZiAoTlNfRkFJTEVEKHJ2KSkgewogICAgIE5TX0VSUk9S
KCJmYWlsZWQgdG8gbG9hZCBhR2x5cGhJRCIpOwogICAgIHJldHVybiAxOwogICB9CisjZW5kaWYK
ICAgc2xvdCA9IGFGYWNlLT5nbHlwaDsKIAogICBpZiAoc2xvdC0+Zm9ybWF0ICE9IGZ0X2dseXBo
X2Zvcm1hdF9vdXRsaW5lKSB7CiAgICAgTlNfRVJST1IoImFHbHlwaElEIGlzIG5vdCBhbiBvdXRs
aW5lIGdseXBoIik7CiAgICAgcmV0dXJuIDE7CiAgIH0KIAorI2lmbmRlZiBNT1pfRU5BQkxFX1hG
VAogICBmdGkuZnQyICAgICA9IGFGdDI7CisjZW5kaWYKICAgZnRpLmZhY2UgICAgPSBhRmFjZTsK
ICAgZnRpLmJ1ZiAgICAgPSBhQnVmOwogICBmdGkuZWxtX2NudCA9IDA7CiAgIGZ0aS5sZW4gICAg
ID0gMDsKICAgZnRpLndtb2RlICAgPSBhV21vZGU7CiAKICAgLyogYWRkIHNwYWNlIGZvciAicmFu
ZG9tIiBieXRlcyAqLwogICBmb3IgKGo9MDsgajwgYUxlbklWOyBqKyspIHsKICAgICBmdGkubGVu
ICs9IGVjc2koJmZ0aS5idWYsIDApOwogICB9CisjaWZkZWYgTU9aX0VOQUJMRV9YRlQKKyAgaWYg
KEZUX091dGxpbmVfRGVjb21wb3NlKCZzbG90LT5vdXRsaW5lLCAmZnRfb3V0bGluZV9mdW5jcywg
JmZ0aSkpICB7CisgICAgTlNfRVJST1IoImVycm9yIGRlY29tcG9zaW5nIGFHbHlwaElEIik7Cisg
ICAgcmV0dXJuIDE7CisgIH0KKyNlbHNlCiAgIHJ2ID0gYUZ0Mi0+T3V0bGluZURlY29tcG9zZSgm
c2xvdC0+b3V0bGluZSwgJmZ0X291dGxpbmVfZnVuY3MsICZmdGkpOwogICBpZiAoTlNfRkFJTEVE
KHJ2KSkgewogICAgIE5TX0VSUk9SKCJlcnJvciBkZWNvbXBvc2luZyBhR2x5cGhJRCIpOwogICAg
IHJldHVybiAxOwogICB9CisjZW5kaWYKIAogICBpZiAoZnRpLmVsbV9jbnQpIHsKICAgICBmdGku
bGVuICs9IGNzYygmZnRpLmJ1ZiwgVDFfQ0xPU0VQQVRIKTsKICAgICBmdGkubGVuICs9IGNzYygm
ZnRpLmJ1ZiwgVDFfRU5EQ0hBUik7CiAgIH0KICAgZWxzZSB7CiAgICAgRlRfVmVjdG9yIGVuZF9w
dDsKSW5kZXg6IGdmeC9zcmMvcHMvbnNUeXBlMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNy
b290L21vemlsbGEvZ2Z4L3NyYy9wcy9uc1R5cGUxLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MgpkaWZmIC11IC03IC1wIC1yMS4yIG5zVHlwZTEuaAotLS0gZ2Z4L3NyYy9wcy9uc1R5cGUxLmgJ
MTYgSmFuIDIwMDMgMDU6MDQ6MjMgLTAwMDAJMS4yCisrKyBnZngvc3JjL3BzL25zVHlwZTEuaAkx
NyBPY3QgMjAwNCAxMToxMDoxOSAtMDAwMApAQCAtNTAsMTUgKzUwLDIzIEBACiAvLwogCiAjaWZu
ZGVmIFRZUEUxX0gKICNkZWZpbmUgVFlQRTFfSAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs
dWRlICJuc3ByLmgiCisjaWZkZWYgTU9aX0VOQUJMRV9YRlQKKyNpbmNsdWRlICJuc0lTdXBwb3J0
cy5oIgorI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5j
bHVkZSBGVF9HTFlQSF9ICisjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNlbHNlCiAjaW5jbHVkZSAi
bnNJRnJlZVR5cGUyLmgiCisjZW5kaWYKIAogLyogdG8vZnJvbSBDaGFyYWN0ZXIgU3BhY2UgKi8K
IGlubGluZSBpbnQKIHRvQ1MoZG91YmxlIHVwbSwgZG91YmxlIHgpCiB7CiAgIHJldHVybiAoaW50
KSgoeCoxMDAwLjApL3VwbSk7CiB9CkBAIC05MSwxMiArOTksMTYgQEAgZnJvbUNTKGRvdWJsZSB1
cG0sIGRvdWJsZSB4KQogLyogdGhlIDIgYnl0ZSAoZXNjYXBlZCkgUG9zdHNjcmlwdCBUeXBlIDEg
Y29tbWFuZHMgKi8KICNkZWZpbmUgVDFfRVNDX1NCVyAgICA3ICAvKiAweDA3ICovCiAKICNkZWZp
bmUgVFlQRTFfRU5DUllQVElPTl9LRVkgNDMzMAogI2RlZmluZSBUWVBFMV9FTkNSWVBUSU9OX0Mx
ICA1Mjg0NQogI2RlZmluZSBUWVBFMV9FTkNSWVBUSU9OX0MyICAyMjcxOQogCisjaWZkZWYgTU9a
X0VOQUJMRV9YRlQgIAorRlRfRXJyb3IgRlQyR2x5cGhUb1R5cGUxQ2hhclN0cmluZyhGVF9GYWNl
IGFGYWNlLAorI2Vsc2UgLyogTU9aX0VOQUJMRV9GUkVFVFlQRTIgKi8KIEZUX0Vycm9yIEZUMkds
eXBoVG9UeXBlMUNoYXJTdHJpbmcobnNJRnJlZVR5cGUyICphRnQyLCBGVF9GYWNlIGFGYWNlLAor
I2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFHbHlw
aElELCBpbnQgYVdtb2RlLCBpbnQgYUxlbklWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyICphQnVmKTsKIAogI2VuZGlmIC8qIFRZUEUxX0ggKi8KSW5k
ZXg6IGdmeC9zcmMvcHMvbnNUeXBlOC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qv
bW96aWxsYS9nZngvc3JjL3BzL25zVHlwZTguY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUK
ZGlmZiAtdSAtNyAtcCAtcjEuNSBuc1R5cGU4LmNwcAotLS0gZ2Z4L3NyYy9wcy9uc1R5cGU4LmNw
cAkxNyBKYW4gMjAwMyAyMzoyODo0MiAtMDAwMAkxLjUKKysrIGdmeC9zcmMvcHMvbnNUeXBlOC5j
cHAJMTcgT2N0IDIwMDQgMTE6MTA6MjIgLTAwMDAKQEAgLTQ5LDI5ICs0OSwzNSBAQAogCiAjaW5j
bHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJuc0NpZE1h
cC5oIgogI2luY2x1ZGUgIm5zVHlwZTEuaCIKICNpbmNsdWRlICJuc1R5cGU4LmgiCisjaWZuZGVm
IE1PWl9FTkFCTEVfWEZUCiAjaW5jbHVkZSAibnNJRnJlZVR5cGUyLmgiCisjZW5kaWYKICNpbmNs
dWRlICJuc0lTZXJ2aWNlTWFuYWdlci5oIgogI2luY2x1ZGUgIm5zSVNpZ25hdHVyZVZlcmlmaWVy
LmgiCiAjaW5jbHVkZSAicGxiYXNlNjQuaCIKICNpbmNsdWRlICJuc0NSVC5oIgogCiAjZGVmaW5l
IERFRkFVTFRfQ01BUF9TSVpFIDEwMjQwCiAKICNkZWZpbmUgSEVYQVNDSUlfTElORV9MRU4gNjQK
IAogCiBzdGF0aWMgdm9pZCBoZXhfb3V0KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgUFJVaW50MzIgbiwg
RklMRSAqZiwgUFJVaW50MzIgKnBvcyk7CiAKIHN0YXRpYyB2b2lkIGZsYXR0ZW5fbmFtZShjaGFy
ICphVG9OYW1lKTsKKyNpZmRlZiBNT1pfRU5BQkxFX1hGVAorc3RhdGljIGludCBGVDJTdWJzZXRU
b0NpZEtleWVkVHlwZTEoRlRfRmFjZSBhRmFjZSwKKyNlbHNlCiBzdGF0aWMgaW50IEZUMlN1YnNl
dFRvQ2lkS2V5ZWRUeXBlMShuc0lGcmVlVHlwZTIgKmFGdDIsIEZUX0ZhY2UgYUZhY2UsCisjZW5k
aWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciAq
YUNoYXJJRHMsIGludCBhTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqYUZvbnROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqYVJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqYUVuY29kaW5nLCBpbnQgYVN1cHBsZW1lbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYVdtb2RlLCBpbnQgYUxlbklWLCBGSUxFICph
RmlsZSk7CiAKIHZvaWQKQEAgLTMxNSwyMCArMzIxLDIyIEBAIEZUMlN1YnNldFRvVHlwZTgoRlRf
RmFjZSBhRmFjZSwgY29uc3QgUFIKICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICBpbnQgc3Vw
cGxlbWVudCwgbGVuSVY7CiAgIFBSVWludDMyIENJRHNfYnVmWzUwMDBdOwogICBQUlVpbnQzMiAq
Q0lEcyA9IENJRHNfYnVmOwogICBpbnQgY21hcF90eXBlID0gMDsKICAgUFJCb29sIHN0YXR1cyA9
IFBSX0ZBTFNFOwogCisjaWZuZGVmIE1PWl9FTkFCTEVfWEZUCiAgIG5zcmVzdWx0IHJ2OwogICBu
c0NPTVB0cjxuc0lGcmVlVHlwZTI+IGZ0MiA9IGRvX0dldFNlcnZpY2UoTlNfRlJFRVRZUEUyX0NP
TlRSQUNUSUQsICZydik7CiAgIGlmIChOU19GQUlMRUQocnYpKSB7CiAgICAgTlNfRVJST1IoIkZh
aWxlZCB0byBnZXQgbnNJRnJlZVR5cGUyIHNlcnZpY2UiKTsKICAgICBnb3RvIGRvbmU7CiAgIH0K
KyNlbmRpZgogCiAgIGlmICgoYU51bUNoYXJzKzEpID4gc2l6ZW9mKENJRHNfYnVmKS9zaXplb2Yo
Q0lEc19idWZbMF0pKQogICAgIENJRHMgPSAoUFJVaW50MzIgKilQUl9NYWxsb2MoKGFOdW1DaGFy
cysxKSpzaXplb2YoQ0lEc19idWZbMF0pKTsKICAgaWYgKCFDSURzKSB7CiAgICAgTlNfRVJST1Io
IkZhaWxlZCB0byBhbGxvYyBzcGFjZSBmb3IgQ0lEcyIpOwogICAgIGdvdG8gZG9uZTsKICAgfQpA
QCAtMzY0LDE1ICszNzIsMTkgQEAgRlQyU3Vic2V0VG9UeXBlOChGVF9GYWNlIGFGYWNlLCBjb25z
dCBQUgogICBXcml0ZUNtYXBIZWFkZXIoY21hcG5hbWUsIHJlZ2lzdHJ5LCBlbmNvZGluZywgc3Vw
cGxlbWVudCwgY21hcF90eXBlLCBhV21vZGUsCiAgICAgICAgICAgICAgICAgICBhRmlsZSk7CiAg
IFdyaXRlQ29kZVNwYWNlUmFuZ2VNYXBVQ1MyKGFGaWxlKTsKICAgV3JpdGVDaWRDaGFyTWFwKGFD
aGFySURzLCBDSURzLCBhTnVtQ2hhcnMsIGFGaWxlKTsKICAgV3JpdGVDbWFwRm9vdGVyKGFGaWxl
KTsKIAogICAvKiBvdXRwdXQgdGhlIFR5cGUgOCBDSUQgZm9udCAqLworI2lmZGVmIE1PWl9FTkFC
TEVfWEZUCisgIEZUMlN1YnNldFRvQ2lkS2V5ZWRUeXBlMShhRmFjZSwgYUNoYXJJRHMsIGFOdW1D
aGFycywgZm9udG5hbWUsCisjZWxzZQogICBGVDJTdWJzZXRUb0NpZEtleWVkVHlwZTEoZnQyLCBh
RmFjZSwgYUNoYXJJRHMsIGFOdW1DaGFycywgZm9udG5hbWUsCisjZW5kaWYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBlbmNvZGluZywgc3VwcGxlbWVudCwgYVdtb2RlLCBs
ZW5JViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGaWxlKTsKICAgZnByaW50ZihhRmls
ZSwgIlxuIik7CiAKICAgLyogY29tcG9zZSB0aGUgY21hcCBhbmQgZm9udCAqLwogICBmcHJpbnRm
KGFGaWxlLCAiLyVzXG4iLCBjaWRmb250bmFtZSk7CiAgIGZwcmludGYoYUZpbGUsICIgIC8lcyAv
Q01hcCBmaW5kcmVzb3VyY2VcbiIsIGNtYXBuYW1lKTsKQEAgLTM4OCwxNSArNDAwLDE5IEBAIGRv
bmU6CiAgIFBSX0ZSRUVJRihjaWRmb250bmFtZSk7CiAgIGlmIChDSURzICE9IENJRHNfYnVmKQog
ICAgIFBSX0ZyZWUoQ0lEcyk7CiAgIHJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBQUkJvb2wK
KyNpZmRlZiBNT1pfRU5BQkxFX1hGVAorRlQyU3Vic2V0VG9DaWRLZXllZFR5cGUxKEZUX0ZhY2Ug
YUZhY2UsCisjZWxzZQogRlQyU3Vic2V0VG9DaWRLZXllZFR5cGUxKG5zSUZyZWVUeXBlMiAqYUZ0
MiwgRlRfRmFjZSBhRmFjZSwKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFBSVW5pY2hhciAqYUNoYXJJRHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFMZW4s
IGNvbnN0IGNoYXIgKmFGb250TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICphUmVnaXN0cnksIGNvbnN0IGNoYXIgKmFFbmNvZGluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgYVN1cHBsZW1lbnQsIGludCBhV21vZGUsIGludCBhTGVuSVYsIEZJTEUgKmFG
aWxlKQogewogICBpbnQgaSwgY2hhcnN0cmluZ3NfbGVuLCBkYXRhX29mZnNldDsKICAgdW5zaWdu
ZWQgaW50IGNoYXJzdHJpbmdfbGVuOwpAQCAtNDQxLDI0ICs0NTcsMzQgQEAgRlQyU3Vic2V0VG9D
aWRLZXllZFR5cGUxKG5zSUZyZWVUeXBlMiAqYQogICAgICAgICAgICAgICAgICB0b0NTKHVwbSwg
YUZhY2UtPmJib3gueU1pbiksCiAgICAgICAgICAgICAgICAgIHRvQ1ModXBtLCBhRmFjZS0+YmJv
eC54TWF4KSwKICAgICAgICAgICAgICAgICAgdG9DUyh1cG0sIGFGYWNlLT5iYm94LnlNYXgpKTsK
IAogICBmcHJpbnRmKGFGaWxlLCAiXG4iKTsKIAogICAvKiBtZWFzdXJlIHRoZSBub3RkZWYgZ2x5
cGggbGVuZ3RoICovCisjaWZkZWYgTU9aX0VOQUJMRV9YRlQKKyAgY21hcGluZm9bMF0gPSBGVDJH
bHlwaFRvVHlwZTFDaGFyU3RyaW5nKGFGYWNlLCAwLCBhV21vZGUsIGFMZW5JViwgTlVMTCk7Cisj
ZWxzZQogICBjbWFwaW5mb1swXSA9IEZUMkdseXBoVG9UeXBlMUNoYXJTdHJpbmcoYUZ0MiwgYUZh
Y2UsIDAsIGFXbW9kZSwgYUxlbklWLCBOVUxMKTsKKyNlbmRpZgogICBudW1fY2hhcnN0cmluZ3Mg
PSAxOwogICBjaGFyc3RyaW5nc19sZW4gPSBjbWFwaW5mb1swXTsKIAogICAvKiBnZXQgY2hhcnN0
cmluZyBsZW5ndGhzICovCiAgIG1heF9jaGFyc3RyaW5nID0gY21hcGluZm9bMF07CiAgIGZvciAo
aT0wOyBpPGFMZW47IGkrKykgeworI2lmZGVmIE1PWl9FTkFCTEVfWEZUCisgICAgZ2x5cGhJRCA9
IEZUX0dldF9DaGFyX0luZGV4KGFGYWNlLCBhQ2hhcklEc1tpXSk7CisgICAgY21hcGluZm9baSsx
XSA9IEZUMkdseXBoVG9UeXBlMUNoYXJTdHJpbmcoYUZhY2UsIGdseXBoSUQsIGFXbW9kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTGVuSVYsIE5VTEwp
OworI2Vsc2UKICAgICBhRnQyLT5HZXRDaGFySW5kZXgoYUZhY2UsIGFDaGFySURzW2ldLCAmZ2x5
cGhJRCk7CiAgICAgY21hcGluZm9baSsxXSA9IEZUMkdseXBoVG9UeXBlMUNoYXJTdHJpbmcoYUZ0
MiwgYUZhY2UsIGdseXBoSUQsIGFXbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhTGVuSVYsIE5VTEwpOworI2VuZGlmCiAgICAgY2hhcnN0cmluZ3Nf
bGVuICs9IGNtYXBpbmZvW2krMV07CiAgICAgaWYgKGNtYXBpbmZvW2krMV0pCiAgICAgICBudW1f
Y2hhcnN0cmluZ3MrKzsKICAgICBpZiAoY21hcGluZm9baSsxXSA+IG1heF9jaGFyc3RyaW5nKQog
ICAgICAgbWF4X2NoYXJzdHJpbmcgPSBjbWFwaW5mb1tpKzFdOwogICB9CiAgIGNtYXBpbmZvW2kr
MV0gPSAwOwpAQCAtNTUwLDIzICs1NzYsMzQgQEAgRlQyU3Vic2V0VG9DaWRLZXllZFR5cGUxKG5z
SUZyZWVUeXBlMiAqYQogICAgIGRhdGFfb2Zmc2V0ICs9IGNtYXBpbmZvW2ldOwogICB9CiAKICAg
Ly8KICAgLy8gb3V0cHV0IHRoZSBjaGFyU3RyaW5ncwogICAvLwogICAvLyBvdXRwdXQgdGhlIG5v
dGRlZiBnbHlwaAorI2lmZGVmIE1PWl9FTkFCTEVfWEZUCisgIGNoYXJzdHJpbmdfbGVuID0gRlQy
R2x5cGhUb1R5cGUxQ2hhclN0cmluZyhhRmFjZSwgMCwgYVdtb2RlLCBhTGVuSVYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nKTsKKyNlbHNl
CiAgIGNoYXJzdHJpbmdfbGVuID0gRlQyR2x5cGhUb1R5cGUxQ2hhclN0cmluZyhhRnQyLCBhRmFj
ZSwgMCwgYVdtb2RlLCBhTGVuSVYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyc3RyaW5nKTsKKyNlbmRpZgogICBoZXhfb3V0KGNoYXJzdHJpbmcsIGNo
YXJzdHJpbmdfbGVuLCBhRmlsZSwgJmxpbmVfcG9zKTsKIAogICAvKiBvdXRwdXQgdGhlIGNoYXJz
dHJpbmdzIGZvciB0aGUgZ2x5cGhzICovCiAgIGZvciAoaT0wOyBpPGFMZW47IGkrKykgeworI2lm
ZGVmIE1PWl9FTkFCTEVfWEZUCisgICAgZ2x5cGhJRCA9IEZUX0dldF9DaGFyX0luZGV4KGFGYWNl
LCBhQ2hhcklEc1tpXSk7CisgICAgY2hhcnN0cmluZ19sZW4gPSBGVDJHbHlwaFRvVHlwZTFDaGFy
U3RyaW5nKGFGYWNlLCBnbHlwaElELCBhV21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFMZW5JViwgY2hhcnN0cmluZyk7CisjZWxzZQogICAgIGFG
dDItPkdldENoYXJJbmRleChhRmFjZSwgYUNoYXJJRHNbaV0sICZnbHlwaElEKTsKICAgICBjaGFy
c3RyaW5nX2xlbiA9IEZUMkdseXBoVG9UeXBlMUNoYXJTdHJpbmcoYUZ0MiwgYUZhY2UsIGdseXBo
SUQsIGFXbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYUxlbklWLCBjaGFyc3RyaW5nKTsKKyNlbmRpZgogICAgIE5TX0FTU0VSVElPTihjaGFyc3Ry
aW5nX2xlbj09Y21hcGluZm9baSsxXSwgImdseXBoIGRhdGEgY2hhbmdlZCIpOwogICAgIGhleF9v
dXQoY2hhcnN0cmluZywgY2hhcnN0cmluZ19sZW4sIGFGaWxlLCAmbGluZV9wb3MpOwogICB9CiAg
IC8vIGFkZCBvbmUgYnl0ZSBwYWRkaW5nIHNvIHRoZSBpbnRlcnBlcnRlciBjYW4gYWx3YXlzIGRv
IDIgYnl0ZSByZWFkcwogICBjaGFyc3RyaW5nWzBdID0gMDsKICAgaGV4X291dChjaGFyc3RyaW5n
LCAxLCBhRmlsZSwgJmxpbmVfcG9zKTsKIApJbmRleDogZ2Z4L3NyYy9wcy9uc1R5cGU4LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL3BzL25zVHlwZTguaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLTcgLXAgLXIxLjIgbnNUeXBlOC5oCi0t
LSBnZngvc3JjL3BzL25zVHlwZTguaAkxNiBKYW4gMjAwMyAwNTowNDoyNCAtMDAwMAkxLjIKKysr
IGdmeC9zcmMvcHMvbnNUeXBlOC5oCTE3IE9jdCAyMDA0IDExOjEwOjIyIC0wMDAwCkBAIC0zOSwx
NSArMzksMzIgQEAKICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKICNpZm5k
ZWYgVFlQRThfSAogI2RlZmluZSBUWVBFOF9ICiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1
ZGUgIm5zcHIuaCIKKyNpZmRlZiBNT1pfRU5BQkxFX1hGVAorI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+
CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisjaW5jbHVkZSBGVF9HTFlQSF9ICisjaW5jbHVkZSBG
VF9DQUNIRV9ICisjaW5jbHVkZSBGVF9DQUNIRV9JTUFHRV9ICisjaW5jbHVkZSBGVF9PVVRMSU5F
X0gKKy8vIG1hY3JvcyB0byBoYW5kbGUgRnJlZVR5cGUyIDI2LjYgbnVtYmVycyAoMjYgYml0IG51
bWJlciB3aXRoIDYgYml0IGZyYWN0aW9uKQorI2RlZmluZSBGVF9SRUdfVE9fMTZfMTYoeCkgKCh4
KTw8MTYpCisjaWZuZGVmIEZUX011bEZpeAorI2RlZmluZSBGVF9NdWxGaXgodiwgcykgKCgodikq
KHMpKT4+MTYpCisjZW5kaWYKKyNkZWZpbmUgRlRfUk9VTkQoeCkgKCgoeCkgKyAzMikgJiB+NjMp
IC8vIDYzID0gMl42IC0gMQorI2RlZmluZSBGVF9UUlVOQyh4KSAoKHgpID4+IDYpCisjZGVmaW5l
IEZUX0RFU0lHTl9VTklUU19UT19QSVhFTFModiwgcykgRlRfVFJVTkMoRlRfUk9VTkQoRlRfTXVs
Rml4KCh2KSAsIChzKSkpKQorI2Vsc2UgLyogTU9aX0VOQUJMRV9GUkVFVFlQRTIgKi8KICNpbmNs
dWRlICJuc0lGcmVlVHlwZTIuaCIKKyNlbmRpZiAvKiBNT1pfRU5BQkxFX1hGVCAqLwogCiB2b2lk
IEFkZENJRENoZWNrQ29kZShGSUxFICphRmlsZSk7CiBQUkJvb2wgRlQyU3Vic2V0VG9UeXBlOChG
VF9GYWNlIGFGYWNlLCBjb25zdCBQUlVuaWNoYXIgKmFDaGFySURzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYU51bUNoYXJzLCBpbnQgYVdtb2RlLCBGSUxFICphRmlsZSk7CiBj
aGFyKiAgRlQyVG9UeXBlOENpZEZvbnROYW1lKEZUX0ZhY2UgYUZhY2UsIGludCBhV21vZGUpOwog
CiAKSW5kZXg6IGdmeC9zcmMveDExc2hhcmVkL25zRm9udERlYnVnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL3gxMXNoYXJlZC9uc0ZvbnREZWJ1Zy5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtNyAtcCAtcjEuMSBuc0ZvbnREZWJ1Zy5o
Ci0tLSBnZngvc3JjL3gxMXNoYXJlZC9uc0ZvbnREZWJ1Zy5oCTE3IFNlcCAyMDAyIDA2OjE1OjA0
IC0wMDAwCTEuMQorKysgZ2Z4L3NyYy94MTFzaGFyZWQvbnNGb250RGVidWcuaAkxNyBPY3QgMjAw
NCAxMToxMDoyMiAtMDAwMApAQCAtOTMsMTEgKzkzLDEzIEBACiAgICAgICAgICAgICAgICAgZmZs
dXNoKHN0ZG91dCk7IFwKICAgICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICBQUl9FTkRfTUFD
Uk8KIAogI2RlZmluZSBGUkVFVFlQRV9GT05UX1BSSU5URih4KSBcCiAgICAgICAgICBERUJVR19Q
UklOVEZfTUFDUk8oeCwgTlNfRk9OVF9ERUJVR19GUkVFVFlQRV9GT05UKQogCisjaWZkZWYgTU9a
X0VOQUJMRV9GUkVFVFlQRTIKIGV4dGVybiBQUlVpbnQzMiBnRm9udERlYnVnOworI2VuZGlmCiAK
ICNlbmRpZgogCkluZGV4OiBnZngvc3JjL3hsaWIvbnNGb250TWV0cmljc1hsaWIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L21vemlsbGEvZ2Z4L3NyYy94bGliL25zRm9udE1ldHJp
Y3NYbGliLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjUKZGlmZiAtdSAtNyAtcCAtcjEu
MTY1IG5zRm9udE1ldHJpY3NYbGliLmNwcAotLS0gZ2Z4L3NyYy94bGliL25zRm9udE1ldHJpY3NY
bGliLmNwcAk5IE1hciAyMDA0IDE0OjE0OjU1IC0wMDAwCTEuMTY1CisrKyBnZngvc3JjL3hsaWIv
bnNGb250TWV0cmljc1hsaWIuY3BwCTE3IE9jdCAyMDA0IDExOjEwOjQ5IC0wMDAwCkBAIC02MCwx
OCArNjAsMTggQEAKICNpbmNsdWRlICJuc0NPTVB0ci5oIgogI2luY2x1ZGUgIm5zUHJpbnRmQ1N0
cmluZy5oIgogI2luY2x1ZGUgIm5zcHIuaCIKICNpbmNsdWRlICJuc0hhc2h0YWJsZS5oIgogI2lu
Y2x1ZGUgIm5zUmVhZGFibGVVdGlscy5oIgogI2luY2x1ZGUgIm5zQVN0cmluZy5oIgogI2luY2x1
ZGUgIm5zWFBJRExTdHJpbmcuaCIKLSNpZmRlZiBVU0VfRlJFRVRZUEUKKyNpZmRlZiBNT1pfRU5B
QkxFX0ZSRUVUWVBFMgogI2luY2x1ZGUgIm5zRlQyRm9udENhdGFsb2cuaCIKICNpbmNsdWRlICJu
c0ZyZWVUeXBlLmgiCi0jZW5kaWYgLyogVVNFX0ZSRUVUWVBFICovCisjZW5kaWYgLyogTU9aX0VO
QUJMRV9GUkVFVFlQRTIgKi8KICNpZmRlZiBVU0VfWDExU0hBUkVEX0NPREUKICNpbmNsdWRlICJu
c1hGb250Tm9ybWFsLmgiCiAjZW5kaWYgLyogVVNFX1gxMVNIQVJFRF9DT0RFICovCiAjaWZkZWYg
VVNFX0FBU0IKICNpbmNsdWRlICJuc1gxMUFscGhhQmxlbmQuaCIKICNpbmNsdWRlICJuc1hGb250
QUFTY2FsZWRCaXRtYXAuaCIKICNlbmRpZiAvKiBVU0VfQUFTQiAqLwpAQCAtMTA5LDE3ICsxMDks
MTcgQEAgc3RhdGljIFBSTG9nTW9kdWxlSW5mbyAqRm9udE1ldHJpY3NYbGliTAogI2RlZmluZSBG
T05UX01BWF9GT05UX1NDQUxFIDIKIAogI3VuZGVmIE5PSVNZX0ZPTlRTCiAjdW5kZWYgUkVBTExZ
X05PSVNZX0ZPTlRTCiAKIC8qIExvY2FsIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBQUkJvb2wgICAg
ICAgICAgICAgICAgIEZyZWVOb2RlKG5zSGFzaEtleSogYUtleSwgdm9pZCogYURhdGEsIHZvaWQq
IGFDbG9zdXJlKTsKLSNpZmRlZiBVU0VfRlJFRVRZUEUKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVU
WVBFMgogc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgQ2hhclNldE5hbWVUb0NvZGVSYW5n
ZUJpdHMoY29uc3QgY2hhciosIFBSVWludDMyKiwgUFJVaW50MzIqKTsKLSNlbmRpZiAvKiBVU0Vf
RlJFRVRZUEUgKi8KKyNlbmRpZiAvKiBNT1pfRU5BQkxFX0ZSRUVUWVBFMiAqLwogc3RhdGljIGNv
bnN0IG5zRm9udENoYXJTZXRNYXBYbGliICpHZXRDaGFyU2V0TWFwKG5zRm9udE1ldHJpY3NYbGli
Q29udGV4dCAqYUZtY3R4LCBjb25zdCBjaGFyICphQ2hhclNldE5hbWUpOwogCiAvLyB0aGUgZm9u
dCBjYXRhbG9nIGlzIHNvIGV4cGVuc2l2ZSB0byBnZW5lcmF0ZQogLy8gYWx3YXlzIHRlbGwgdGhl
IHVzZXIgd2hhdCBpcyBoYXBwZW5pbmcKIHN0YXRpYyBQUlVpbnQzMiBnRm9udERlYnVnID0gMCB8
IE5TX0ZPTlRfREVCVUdfRk9OVF9TQ0FOOwogCiBzdHJ1Y3QgbnNGb250Q2hhclNldE1hcFhsaWI7
CkBAIC0yMTEsMTkgKzIxMSwxOSBAQCBwdWJsaWM6CiAgIGRvdWJsZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbUJpdG1hcFVuZGVyc2l6ZTsKIAogI2lmZGVmIFVTRV9BQVNCCiAgIFBS
SW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUFudGlBbGlhc01pbmltdW07CiAj
ZW5kaWYgLyogVVNFX0FBU0IgKi8KICAgUFJJbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtRW1iZWRkZWRCaXRtYXBNYXhpbXVtSGVpZ2h0OwogCi0jaWZkZWYgVVNFX0ZSRUVUWVBF
CisjaWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKICAgUFJCb29sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtRW5hYmxlRnJlZVR5cGUyOwogICBQUkJvb2wgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1GcmVlVHlwZTJBdXRvaGludGVkOwogICBQUkJvb2wgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1GcmVlVHlwZTJVbmhpbnRlZDsKLSNlbmRpZiAvKiBVU0Vf
RlJFRVRZUEUgKi8KKyNlbmRpZiAvKiBNT1pfRU5BQkxFX0ZSRUVUWVBFMiAqLwogI2lmZGVmIFVT
RV9BQVNCCiAgIFBSVWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUFBVFREYXJr
VGV4dE1pblZhbHVlOwogICBkb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1B
QVRURGFya1RleHRHYWluOwogI2VuZGlmIC8qIFVTRV9BQVNCICovCiAKICNpZmRlZiBFTkFCTEVf
WF9GT05UX0JBTk5JTkcKICAgcmVnZXhfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpt
Rm9udFJlamVjdFJlZ0V4LApAQCAtMjMyLDE2ICsyMzIsMTggQEAgcHVibGljOgogfTsKIAogc3Ry
dWN0IG5zRm9udENoYXJTZXRJbmZvWGxpYgogewogICBjb25zdCBjaGFyKiAgICAgICAgICAgIG1D
aGFyU2V0OwogICBuc0ZvbnRDaGFyU2V0Q29udmVydGVyWGxpYiBDb252ZXJ0OwogICBQUlVpbnQ4
ICAgICAgICAgICAgICAgIG1TcGVjaWFsVW5kZXJsaW5lOworI2lmZGVmIE1PWl9FTkFCTEVfRlJF
RVRZUEUyCiAgIFBSSW50MzIgICAgICAgICAgICAgICAgbUNvZGVSYW5nZTFCaXRzOwogICBQUklu
dDMyICAgICAgICAgICAgICAgIG1Db2RlUmFuZ2UyQml0czsKKyNlbmRpZgogICBQUlVpbnQxNiog
ICAgICAgICAgICAgIG1DQ01hcDsKICAgbnNJVW5pY29kZUVuY29kZXIqICAgICBtQ29udmVydGVy
OwogICBuc0lBdG9tKiAgICAgICAgICAgICAgIG1MYW5nR3JvdXA7CiAgIFBSQm9vbCAgICAgICAg
ICAgICAgICAgbUluaXRlZFNpemVJbmZvOwogICBQUkludDMyICAgICAgICAgICAgICAgIG1PdXRs
aW5lU2NhbGVNaW47CiAgIFBSSW50MzIgICAgICAgICAgICAgICAgbUJpdG1hcFNjYWxlTWluOwog
ICBkb3VibGUgICAgICAgICAgICAgICAgIG1CaXRtYXBPdmVyc2l6ZTsKQEAgLTI4MSwxNCArMjgz
LDE1IEBAIHN0YXRpYyBpbnQgRG91YmxlQnl0ZUNvbnZlcnQobnNGb250Q2hhclMKICAgY29uc3Qg
UFJVbmljaGFyKiBhU3JjQnVmLCBQUkludDMyIGFTcmNMZW4sIGNoYXIqIGFEZXN0QnVmLCBQUklu
dDMyIGFEZXN0TGVuKTsKIHN0YXRpYyBpbnQgSVNPMTA2NDZDb252ZXJ0KG5zRm9udENoYXJTZXRJ
bmZvWGxpYiogYVNlbGYsIFhGb250U3RydWN0KiBhRm9udCwKICAgY29uc3QgUFJVbmljaGFyKiBh
U3JjQnVmLCBQUkludDMyIGFTcmNMZW4sIGNoYXIqIGFEZXN0QnVmLCBQUkludDMyIGFEZXN0TGVu
KTsKIAogc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBVbmtub3duID0geyBuc251bGwgfTsK
IHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgU3BlY2lhbCA9IHsgbnNudWxsIH07CiAKKyNp
ZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBV
U0FTQ0lJID0KICAgeyAidXMtYXNjaWkiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwKICAgICBUVF9P
UzJfQ1BSMV9MQVRJTjEgfCBUVF9PUzJfQ1BSMV9NQUNfUk9NQU4sCiAgICAgVFRfT1MyX0NQUjJf
Q0FfRlJFTkNIIHwgIFRUX09TMl9DUFIyX1BPUlRVR0VTRQogICAgIHwgVFRfT1MyX0NQUjJfV0Vf
TEFUSU4xIHwgIFRUX09TMl9DUFIyX1VTIH07CiBzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGli
IElTTzg4NTkxID0KICAgeyAiSVNPLTg4NTktMSIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwLApAQCAt
NDg2LDE1ICs0ODksMTY4IEBAIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgTWF0aGVtYXRp
Y2EKICAgIHsgIngtbWF0aGVtYXRpY2EyIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAsIFRUX09TMl9D
UFIxX1NZTUJPTCwgMH07CiBzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIE1hdGhlbWF0aWNh
MyA9CiAgICB7ICJ4LW1hdGhlbWF0aWNhMyIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwLCBUVF9PUzJf
Q1BSMV9TWU1CT0wsIDB9Owogc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBNYXRoZW1hdGlj
YTQgPQogICAgeyAieC1tYXRoZW1hdGljYTQiLCBTaW5nbGVCeXRlQ29udmVydCwgMCwgVFRfT1My
X0NQUjFfU1lNQk9MLCAwfTsKIHN0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgTWF0aGVtYXRp
Y2E1ID0KICAgIHsgIngtbWF0aGVtYXRpY2E1IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAsIFRUX09T
Ml9DUFIxX1NZTUJPTCwgMH07Ci0jZW5kaWYgLyogTU9aX01BVEhNTCAqLworI2VuZGlmIC8qIE1B
VEhNTCAqLworCisjZWxzZQorCitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIFVTQVNDSUkg
PQorICB7ICJ1cy1hc2NpaSIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250
Q2hhclNldEluZm9YbGliIElTTzg4NTkxID0KKyAgeyAiSVNPLTg4NTktMSIsIFNpbmdsZUJ5dGVD
b252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIElTTzg4NTkyID0KKyAg
eyAiSVNPLTg4NTktMiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hh
clNldEluZm9YbGliIElTTzg4NTkzID0KKyAgeyAiSVNPLTg4NTktMyIsIFNpbmdsZUJ5dGVDb252
ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIElTTzg4NTk0ID0KKyAgeyAi
SVNPLTg4NTktNCIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNl
dEluZm9YbGliIElTTzg4NTk1ID0KKyAgeyAiSVNPLTg4NTktNSIsIFNpbmdsZUJ5dGVDb252ZXJ0
LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIElTTzg4NTk2ID0KKyAgeyAiSVNP
LTg4NTktNiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldElu
Zm9YbGliIElTTzg4NTk2OHggPQorICB7ICJ4LWlzby04ODU5LTYtOC14IiwgU2luZ2xlQnl0ZUNv
bnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgSVNPODg1OTYxNiA9Cisg
IHsgIngtaXNvLTg4NTktNi0xNiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNG
b250Q2hhclNldEluZm9YbGliIElCTTEwNDYgPQorICB7ICJ4LUlCTTEwNDYiLCBTaW5nbGVCeXRl
Q29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBJU084ODU5NyA9Cisg
IHsgIklTTy04ODU5LTciLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENo
YXJTZXRJbmZvWGxpYiBJU084ODU5OCA9CisgIHsgIklTTy04ODU5LTgiLCBTaW5nbGVCeXRlQ29u
dmVydCwgMCB9OworLy8gY2hhbmdlIGZyb20gIAorLy8geyAiSVNPLTg4NTktOCIsIFNpbmdsZUJ5
dGVDb252ZXJ0UmV2ZXJzZSwgMCwgMCwgMCB9OworLy8gdW50aWxsIHdlIGZpeCB0aGUgbGF5b3V0
IGFuZCBlbnN1cmUgd2Ugb25seSBjYWxsIHRoaXMgd2l0aCBwdXJlIFJUTCB0ZXh0CitzdGF0aWMg
bnNGb250Q2hhclNldEluZm9YbGliIElTTzg4NTk5ID0KKyAgeyAiSVNPLTg4NTktOSIsIFNpbmds
ZUJ5dGVDb252ZXJ0LCAwIH07CisvLyBubyBzdXBwb3J0IGZvciBpc28tODg1OS0xMCAoTm9yZGlj
L0ljZWxhbmRpYykgY3VycmVudGx5CisvLyBzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIElT
Tzg4NTkxMCA9CisvLyB7ICJJU08tODg1OS0xMCIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwLAorLy8g
ICAwLCBUVF9PUzJfQ1BSMl9OT1JESUMgfCBUVF9PUzJfQ1BSMl9JQ0VMQU5ESUMgfTsKKy8vIG5v
IHN1cHBvcnQgZm9yIGlzby04ODU5LTEyIChWaWV0bmFtZXNlKSBjdXJyZW50bHkKKy8vIHN0YXRp
YyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgSVNPODg1OTEyID0KKy8vIHsgIklTTy04ODU5LTEyIiwg
U2luZ2xlQnl0ZUNvbnZlcnQsIDAsCisvLyAgIFRUX09TMl9DUFIxX1ZJRVROQU1FU0UsIDAgfTsK
K3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgSVNPODg1OTEzID0KKyAgeyAiSVNPLTg4NTkt
MTMiLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxp
YiBJU084ODU5MTUgPQorICB7ICJJU08tODg1OS0xNSIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07
CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIEpJU1gwMjAxID0KKyAgeyAiamlzXzAyMDEi
LCBTaW5nbGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBL
T0k4UiA9CisgIHsgIktPSTgtUiIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNG
b250Q2hhclNldEluZm9YbGliIEtPSThVID0KKyAgeyAiS09JOC1VIiwgU2luZ2xlQnl0ZUNvbnZl
cnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgVElTNjIwMiA9CisvKiBBZGRl
ZCB0byBzdXBwb3J0IHRoYWkgY29udGV4dCBzZW5zaXRpdmUgc2hhcGluZyBpZgorICogQ1RMIGV4
dGVuc2lvbiBpcyBpcyBpbiBmb3JjZSAqLworI2lmZGVmIFNVTkNUTAorICB7ICJ0aXM2MjAtMiIs
IFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CisjZWxzZQorICB7ICJ3aW5kb3dzLTg3NCIsIFNpbmds
ZUJ5dGVDb252ZXJ0LCAwIH07CisjZW5kaWYgLyogU1VOQ1RMICovCitzdGF0aWMgbnNGb250Q2hh
clNldEluZm9YbGliIFRJUzYyMCA9CisgIHsgIlRJUy02MjAiLCBTaW5nbGVCeXRlQ29udmVydCwg
MCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBJU084ODU5MTEgPQorICB7ICJJU08t
ODg1OS0xMSIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwIH07CitzdGF0aWMgbnNGb250Q2hhclNldElu
Zm9YbGliIEJpZzUgPQorICB7ICJ4LXgtYmlnNSIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07Cisv
LyBhIGtsdWRnZSB0byBkaXN0aW5ndWlzaCB6aC1UVyBvbmx5IGZvbnRzIGluIEJpZzUgKHN1Y2gg
YXMgaHBiaWc1LSkKKy8vIGZyb20gemgtVFcvemgtSEsgY29tbW9uIGZvbnRzIGluIEJpZzUgKHN1
Y2ggYXMgYmlnNS0xKQorc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBCaWc1VFdISyA9Cisg
IHsgIngteC1iaWc1IiwgRG91YmxlQnl0ZUNvbnZlcnQsIDEgfTsKK3N0YXRpYyBuc0ZvbnRDaGFy
U2V0SW5mb1hsaWIgQ05TMTE2NDMxID0KKyAgeyAieC1jbnMtMTE2NDMtMSIsIERvdWJsZUJ5dGVD
b252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIENOUzExNjQzMiA9Cisg
IHsgIngtY25zLTExNjQzLTIiLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9u
dENoYXJTZXRJbmZvWGxpYiBDTlMxMTY0MzMgPQorICB7ICJ4LWNucy0xMTY0My0zIiwgRG91Ymxl
Qnl0ZUNvbnZlcnQsIDEgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgQ05TMTE2NDM0
ID0KKyAgeyAieC1jbnMtMTE2NDMtNCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMg
bnNGb250Q2hhclNldEluZm9YbGliIENOUzExNjQzNSA9CisgIHsgIngtY25zLTExNjQzLTUiLCBE
b3VibGVCeXRlQ29udmVydCwgMSB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBDTlMx
MTY0MzYgPQorICB7ICJ4LWNucy0xMTY0My02IiwgRG91YmxlQnl0ZUNvbnZlcnQsIDEgfTsKK3N0
YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgQ05TMTE2NDM3ID0KKyAgeyAieC1jbnMtMTE2NDMt
NyIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGli
IEdCMjMxMiA9CisgIHsgImdiXzIzMTItODAiLCBEb3VibGVCeXRlQ29udmVydCwgMSB9Oworc3Rh
dGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBHQjE4MDMwXzAgPQorICB7ICJnYjE4MDMwLjIwMDAt
MCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGli
IEdCMTgwMzBfMSA9CisgIHsgImdiMTgwMzAuMjAwMC0xIiwgRG91YmxlQnl0ZUNvbnZlcnQsIDEg
fTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgR0JLID0KKyAgeyAieC1nYmstbm9hc2Np
aSIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGli
IEhLU0NTID0KKyAgeyAiaGtzY3MtMSIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMg
bnNGb250Q2hhclNldEluZm9YbGliIEpJU1gwMjA4ID0KKyAgeyAiamlzXzAyMDgtMTk4MyIsIERv
dWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIEpJU1gw
MjEyID0KKyAgeyAiamlzXzAyMTItMTk5MCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0
aWMgbnNGb250Q2hhclNldEluZm9YbGliIEtTQzU2MDEgPQorICB7ICJrc19jXzU2MDEtMTk4NyIs
IERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIFgx
MUpvaGFiID0KKyAgeyAieC14MTFqb2hhYiIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0
aWMgbnNGb250Q2hhclNldEluZm9YbGliIEpvaGFiTm9Bc2NpaSA9CisgIHsgIngtam9oYWItbm9h
c2NpaSIsIERvdWJsZUJ5dGVDb252ZXJ0LCAxIH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9Y
bGliIEphbW9UVEYgPQorICB7ICJ4LWtvcmVhbmphbW8tMCIsIERvdWJsZUJ5dGVDb252ZXJ0LCAx
IH07CitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIFRhbWlsVFRGID0KKyAgeyAieC10YW1p
bHR0Zi0wIiwgRG91YmxlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5m
b1hsaWIgQ1AxMjUwID0KKyAgeyAid2luZG93cy0xMjUwIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAg
fTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgQ1AxMjUxID0KKyAgeyAid2luZG93cy0x
MjUxIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hs
aWIgQ1AxMjUyID0KKyAgeyAid2luZG93cy0xMjUyIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsK
K3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgQ1AxMjUzID0KKyAgeyAid2luZG93cy0xMjUz
IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIg
Q1AxMjU3ID0KKyAgeyAid2luZG93cy0xMjU3IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDAgfTsKKwor
I2lmZGVmIFNVTkNUTAorLyogSGluZGkgcmFuZ2UgY3VycmVudGx5IHVuc3VwcG9ydGVkIGluIEZU
MiByYW5nZS4gQ2hhbmdlIFRUKiBvbmNlIHdlIAorICAgYXJyaXZlIGF0IGEgd2F5IHRvIGlkZW50
aWZ5IGhpbmRpICovCitzdGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIFN1bkluZGljID0KKyAg
eyAieC1zdW4tdW5pY29kZS1pbmRpYS0wIiwgRG91YmxlQnl0ZUNvbnZlcnQsIDAgfTsKKyNlbmRp
ZiAvKiBTVU5DVEwgKi8KKworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBJU08xMDY0NjEg
PQorICB7IG5zbnVsbCwgSVNPMTA2NDZDb252ZXJ0LCAxfTsKKworc3RhdGljIG5zRm9udENoYXJT
ZXRJbmZvWGxpYiBBZG9iZVN5bWJvbCA9CisgICB7ICJBZG9iZS1TeW1ib2wtRW5jb2RpbmciLCBT
aW5nbGVCeXRlQ29udmVydCwgMCB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBBZG9i
ZUV1cm8gPQorICB7ICJ4LWFkb2JlLWV1cm8iLCBTaW5nbGVCeXRlQ29udmVydCwgMCB9OworICAg
ICAgICAgCisjaWZkZWYgTU9aX01BVEhNTAorc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBD
TUNNRVggPQorICAgeyAieC10MS1jbWV4IiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDB9Oworc3RhdGlj
IG5zRm9udENoYXJTZXRJbmZvWGxpYiBDTUNNU1kgPQorICAgeyAieC10MS1jbXN5IiwgU2luZ2xl
Qnl0ZUNvbnZlcnQsIDB9Oworc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBDTUNNUiA9Cisg
ICB7ICJ4LXQxLWNtciIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwfTsKK3N0YXRpYyBuc0ZvbnRDaGFy
U2V0SW5mb1hsaWIgQ01DTU1JID0KKyAgIHsgIngtdDEtY21taSIsIFNpbmdsZUJ5dGVDb252ZXJ0
LCAwfTsKK3N0YXRpYyBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgTWF0aGVtYXRpY2ExID0KKyAgIHsg
IngtbWF0aGVtYXRpY2ExIiwgU2luZ2xlQnl0ZUNvbnZlcnQsIDB9Oworc3RhdGljIG5zRm9udENo
YXJTZXRJbmZvWGxpYiBNYXRoZW1hdGljYTIgPQorICAgeyAieC1tYXRoZW1hdGljYTIiLCBTaW5n
bGVCeXRlQ29udmVydCwgMH07IAorc3RhdGljIG5zRm9udENoYXJTZXRJbmZvWGxpYiBNYXRoZW1h
dGljYTMgPQorICAgeyAieC1tYXRoZW1hdGljYTMiLCBTaW5nbGVCeXRlQ29udmVydCwgMH07Citz
dGF0aWMgbnNGb250Q2hhclNldEluZm9YbGliIE1hdGhlbWF0aWNhNCA9CisgICB7ICJ4LW1hdGhl
bWF0aWNhNCIsIFNpbmdsZUJ5dGVDb252ZXJ0LCAwfTsgCitzdGF0aWMgbnNGb250Q2hhclNldElu
Zm9YbGliIE1hdGhlbWF0aWNhNSA9CisgICB7ICJ4LW1hdGhlbWF0aWNhNSIsIFNpbmdsZUJ5dGVD
b252ZXJ0LCAwfTsKKyNlbmRpZiAvKiBNQVRITUwgKi8KKyNlbmRpZiAvKiBGUkVFVFlQRTIgKi8K
IAogc3RhdGljIG5zRm9udExhbmdHcm91cFhsaWIgRkxHX1dFU1RFUk4gPSB7ICJ4LXdlc3Rlcm4i
LCAgICAgbnNudWxsIH07CiBzdGF0aWMgbnNGb250TGFuZ0dyb3VwWGxpYiBGTEdfQkFMVElDICA9
IHsgIngtYmFsdGljIiwgICAgICBuc251bGwgfTsKIHN0YXRpYyBuc0ZvbnRMYW5nR3JvdXBYbGli
IEZMR19DRSAgICAgID0geyAieC1jZW50cmFsLWV1cm8iLG5zbnVsbCB9Owogc3RhdGljIG5zRm9u
dExhbmdHcm91cFhsaWIgRkxHX1JVU1NJQU4gPSB7ICJ4LWN5cmlsbGljIiwgICAgbnNudWxsIH07
CiBzdGF0aWMgbnNGb250TGFuZ0dyb3VwWGxpYiBGTEdfR1JFRUsgICA9IHsgImVsIiwgICAgICAg
ICAgICBuc251bGwgfTsKIHN0YXRpYyBuc0ZvbnRMYW5nR3JvdXBYbGliIEZMR19UVVJLSVNIID0g
eyAidHIiLCAgICAgICAgICAgIG5zbnVsbCB9OwpAQCAtMTA0NCwxNyArMTIwMCwxNyBAQCBGcmVl
Tm9kZUFycmF5KG5zSGFzaEtleSogYUtleSwgdm9pZCogYURhCiAvKiBUaGlzIGlzIG9ubHkgcmVx
dWlyZWQgZm9yIHRoZSBtYWluIGRpc3BsYXkgKi8KIHN0YXRpYyBuc0ZvbnRNZXRyaWNzWGxpYkNv
bnRleHQgKmdsb2JhbF9mbWN0eCA9IG5zbnVsbDsKIAogbnNGb250TWV0cmljc1hsaWJDb250ZXh0
Ojp+bnNGb250TWV0cmljc1hsaWJDb250ZXh0KCkKIHsKICAgUFJfTE9HKEZvbnRNZXRyaWNzWGxp
YkxNLCBQUl9MT0dfREVCVUcsICgiIyBuc0ZvbnRNZXRyaWNzWGxpYkNvbnRleHQgZGVzdHJveSgp
XG4iKSk7CiAKLSNpZmRlZiBVU0VfRlJFRVRZUEUKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBF
MgogICBuc0ZyZWVUeXBlRnJlZUdsb2JhbHMoKTsKLSNlbmRpZiAvKiBVU0VfRlJFRVRZUEUgKi8K
KyNlbmRpZiAvKiBNT1pfRU5BQkxFX0ZSRUVUWVBFMiAqLwogCiAjaWZkZWYgRU5BQkxFX1hfRk9O
VF9CQU5OSU5HCiAgIGlmIChtRm9udFJlamVjdFJlZ0V4KSB7CiAgICAgcmVnZnJlZShtRm9udFJl
amVjdFJlZ0V4KTsKICAgICBkZWxldGUgbUZvbnRSZWplY3RSZWdFeDsKICAgfQogICAKQEAgLTEx
NzYsMTkgKzEzMzIsMTkgQEAgbnNGb250TWV0cmljc1hsaWJDb250ZXh0OjpJbml0KG5zSURldmlj
ZQogICBtQml0bWFwVW5kZXJzaXplID0gMC44OwogCiAjaWZkZWYgVVNFX0FBU0IKICAgbUFudGlB
bGlhc01pbmltdW0gPSA4OwogI2VuZGlmIC8qIFVTRV9BQVNCICovCiAgIG1FbWJlZGRlZEJpdG1h
cE1heGltdW1IZWlnaHQgPSAxMDAwMDAwOwogCi0jaWZkZWYgVVNFX0ZSRUVUWVBFCisjaWZkZWYg
TU9aX0VOQUJMRV9GUkVFVFlQRTIKICAgbUVuYWJsZUZyZWVUeXBlMiA9IFBSX1RSVUU7CiAgIG1G
cmVlVHlwZTJBdXRvaGludGVkID0gUFJfRkFMU0U7CiAgIG1GcmVlVHlwZTJVbmhpbnRlZCA9IFBS
X1RSVUU7Ci0jZW5kaWYgLyogVVNFX0ZSRUVUWVBFICovCisjZW5kaWYgLyogTU9aX0VOQUJMRV9G
UkVFVFlQRTIgKi8KICNpZmRlZiBVU0VfQUFTQgogICBtQUFUVERhcmtUZXh0TWluVmFsdWUgPSA2
NDsKICAgbUFBVFREYXJrVGV4dEdhaW4gPSAwLjg7CiAjZW5kaWYgLyogVVNFX0FBU0IgKi8KIAog
I2lmZGVmIEVOQUJMRV9YX0ZPTlRfQkFOTklORwogICBtRm9udFJlamVjdFJlZ0V4ID0gbnNudWxs
OwpAQCAtMTM2NCwxNSArMTUyMCwxNSBAQCBuc0ZvbnRNZXRyaWNzWGxpYkNvbnRleHQ6OkluaXQo
bnNJRGV2aWNlCiAjaWZkZWYgVVNFX1hQUklOVAogICB9CiAjZW5kaWYgLyogVVNFX1hQUklOVCAq
LwogICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkgewogICAgIG1Gb3JjZU91dGxpbmVTY2FsZWRGb250
cyA9IGZvcmNlX291dGxpbmVfc2NhbGVkX2ZvbnRzOwogICB9CiAKLSNpZmRlZiBVU0VfRlJFRVRZ
UEUKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogICBQUkJvb2wgZW5hYmxlX2ZyZWV0eXBl
MiA9IFBSX1RSVUU7CiAgIHJ2ID0gbVByZWYtPkdldEJvb2xQcmVmKCJmb250LkZyZWVUeXBlMi5l
bmFibGUiLCAmZW5hYmxlX2ZyZWV0eXBlMik7CiAgIGlmIChOU19TVUNDRUVERUQocnYpKSB7CiAg
ICAgbUVuYWJsZUZyZWVUeXBlMiA9IGVuYWJsZV9mcmVldHlwZTI7CiAgICAgRlJFRVRZUEVfRk9O
VF9QUklOVEYoKCJtRW5hYmxlRnJlZVR5cGUyID0gJWQiLCBtRW5hYmxlRnJlZVR5cGUyKSk7CiAg
IH0KIApAQCAtMTM4NSwxNSArMTU0MSwxNSBAQCBuc0ZvbnRNZXRyaWNzWGxpYkNvbnRleHQ6Oklu
aXQobnNJRGV2aWNlCiAKICAgUFJCb29sIGZyZWV0eXBlMl91bmhpbnRlZCA9IFBSX1RSVUU7CiAg
IHJ2ID0gbVByZWYtPkdldEJvb2xQcmVmKCJmb250LkZyZWVUeXBlMi51bmhpbnRlZCIsICZmcmVl
dHlwZTJfdW5oaW50ZWQpOwogICBpZiAoTlNfU1VDQ0VFREVEKHJ2KSkgewogICAgIG1GcmVlVHlw
ZTJVbmhpbnRlZCA9IGZyZWV0eXBlMl91bmhpbnRlZDsKICAgICBGUkVFVFlQRV9GT05UX1BSSU5U
RigoIm1GcmVlVHlwZTJVbmhpbnRlZCA9ICVkIiwgbUZyZWVUeXBlMlVuaGludGVkKSk7CiAgIH0K
LSNlbmRpZiAvKiBVU0VfRlJFRVRZUEUgKi8KKyNlbmRpZiAvKiBNT1pfRU5BQkxFX0ZSRUVUWVBF
MiAqLwogCiAjaWZkZWYgVVNFX0FBU0IKICAgUFJJbnQzMiBhbnRpYWxpYXNfbWluaW11bSA9IDg7
CiAgIHJ2ID0gbVByZWYtPkdldEludFByZWYoImZvbnQuYW50aWFsaWFzLm1pbiIsICZhbnRpYWxp
YXNfbWluaW11bSk7CiAgIGlmIChOU19TVUNDRUVERUQocnYpKSB7CiAgICAgbUFudGlBbGlhc01p
bmltdW0gPSBhbnRpYWxpYXNfbWluaW11bTsKICAgICBGUkVFVFlQRV9GT05UX1BSSU5URigoIm1B
bnRpQWxpYXNNaW5pbXVtID0gJWQiLCBtQW50aUFsaWFzTWluaW11bSkpOwpAQCAtMTU4MSwyMCAr
MTczNywyMCBAQCBuc0ZvbnRNZXRyaWNzWGxpYkNvbnRleHQ6OkluaXQobnNJRGV2aWNlCiAgICAg
ICBtRm9udEFjY2VwdFJlZ0V4ID0gbnNudWxsOwogICAgICAgCiAgICAgICByZXR1cm4gTlNfRVJS
T1JfSU5WQUxJRF9BUkc7CiAgICAgfSAgICAKICAgfQogI2VuZGlmIC8qIEVOQUJMRV9YX0ZPTlRf
QkFOTklORyAqLwogCi0jaWZkZWYgVVNFX0ZSRUVUWVBFCisjaWZkZWYgTU9aX0VOQUJMRV9GUkVF
VFlQRTIKICAgcnYgPSBuc0ZyZWVUeXBlSW5pdEdsb2JhbHMoKTsKICAgaWYgKE5TX0ZBSUxFRChy
dikpIHsKICAgICByZXR1cm4gTlNfRVJST1JfT1VUX09GX01FTU9SWTsKICAgfQotI2VuZGlmIC8q
IFVTRV9GUkVFVFlQRSAqLworI2VuZGlmIC8qIE1PWl9FTkFCTEVfRlJFRVRZUEUyICovCiAKICAg
cmV0dXJuIE5TX09LOwogfQogCiAjaWZkZWYgVVNFX1gxMVNIQVJFRF9DT0RFCiAjZXJyb3Igbm90
IGltcGxlbWVudGVkIHlldAogI2Vsc2UKQEAgLTE5MTIsMTUgKzIwNjgsMTUgQEAgTlNfSU1FVEhP
RElNUCAgbnNGb250TWV0cmljc1hsaWI6OkRlc3RybwogfQogCiB2b2lkIG5zRm9udE1ldHJpY3NY
bGliOjpSZWFsaXplRm9udCgpCiB7CiAgIGZsb2F0IGY7CiAgIGYgPSBtRGV2aWNlQ29udGV4dC0+
RGV2VW5pdHNUb0FwcFVuaXRzKCk7CiAKLSNpZmRlZiBVU0VfRlJFRVRZUEUKKyNpZmRlZiBNT1pf
RU5BQkxFX0ZSRUVUWVBFMgogICBpZiAobVdlc3Rlcm5Gb250LT5Jc0ZyZWVUeXBlRm9udCgpKSB7
CiAgICAgbnNGcmVlVHlwZUZvbnQgKmZ0ID0gKG5zRnJlZVR5cGVGb250ICopbVdlc3Rlcm5Gb250
OwogICAgIGlmICghZnQpCiAgICAgICByZXR1cm47CiAgICAgLy8gbm93IHRoYXQgdGhlcmUgYXJl
IG11bHRpcGxlIGZvbnQgdHlwZXMgKGVnOiBjb3JlIFggZm9udHMKICAgICAvLyBhbmQgVHJ1ZVR5
cGUgZm9udHMpIHRoZXJlIHNob3VsZCBiZSBhIGNvbW1vbiBzZXQgb2YgbWV0aG9kcyAKICAgICAv
LyB0byBnZXQgdGhlIG1ldHJpY3MgaW5mbyBmcm9tIHRoZSBmb250IG9iamVjdC4gVGhlc2UgbWV0
aG9kcwpAQCAtMTk5NSwxNSArMjE1MSwxNSBAQCB2b2lkIG5zRm9udE1ldHJpY3NYbGliOjpSZWFs
aXplRm9udCgpCiAgICAgLyogbmVlZCBiZXR0ZXIgd2F5IHRvIGNhbGN1bGF0ZSB0aGlzICovCiAg
ICAgbVN0cmlrZW91dE9mZnNldCA9IE5TVG9Db29yZFJvdW5kKG1YSGVpZ2h0IC8gMi4wKTsKICAg
ICBtU3RyaWtlb3V0U2l6ZSA9IG1VbmRlcmxpbmVTaXplOwogCiAgICAgcmV0dXJuOwogI2VuZGlm
IC8qIE1PWl9FTkFCTEVfRlJFRVRZUEUyICovCiAgIH0KLSNlbmRpZiAvKiBVU0VfRlJFRVRZUEUg
Ki8KKyNlbmRpZiAvKiBNT1pfRU5BQkxFX0ZSRUVUWVBFMiAqLwogICBuc1hGb250ICp4Rm9udCA9
IG1XZXN0ZXJuRm9udC0+R2V0WEZvbnQoKTsKICAgWEZvbnRTdHJ1Y3QgKmZvbnRJbmZvID0geEZv
bnQtPkdldFhGb250U3RydWN0KCk7CiAgIGYgPSBtRGV2aWNlQ29udGV4dC0+RGV2VW5pdHNUb0Fw
cFVuaXRzKCk7CiAKICAgbnNjb29yZCBsaW5lU3BhY2luZyA9IG5zY29vcmQoKGZvbnRJbmZvLT5h
c2NlbnQgKyBmb250SW5mby0+ZGVzY2VudCkgKiBmKTsKICAgbUVtSGVpZ2h0ID0gUFJfTUFYKDEs
IG5zY29vcmQobVdlc3Rlcm5Gb250LT5tU2l6ZSAqIGYpKTsKICAgaWYgKGxpbmVTcGFjaW5nID4g
bUVtSGVpZ2h0KSB7CkBAIC0zMDA2LDIxICszMTYyLDIxIEBAIG5zRm9udFhsaWI6OkdldFhGb250
KHZvaWQpCiAKIFBSQm9vbAogbnNGb250WGxpYjo6R2V0WEZvbnRJczEwNjQ2KHZvaWQpCiB7CiAg
IHJldHVybiAoKFBSQm9vbCkgKG1DaGFyU2V0SW5mbyA9PSBtRm9udE1ldHJpY3NDb250ZXh0LT5t
SVNPMTA2NDYxKSk7CiB9CiAKLSNpZmRlZiBVU0VfRlJFRVRZUEUKKyNpZmRlZiBNT1pfRU5BQkxF
X0ZSRUVUWVBFMgogUFJCb29sCiBuc0ZvbnRYbGliOjpJc0ZyZWVUeXBlRm9udCh2b2lkKQogewog
ICByZXR1cm4gUFJfRkFMU0U7CiB9Ci0jZW5kaWYgLyogVVNFX0ZSRUVUWVBFICovCisjZW5kaWYg
LyogTU9aX0VOQUJMRV9GUkVFVFlQRTIgKi8KIAogTU9aX0RFQ0xfQ1RPUl9DT1VOVEVSKG5zRm9u
dFhsaWIpCiAKIG5zRm9udFhsaWI6Om5zRm9udFhsaWIoKQogewogICBNT1pfQ09VTlRfQ1RPUihu
c0ZvbnRYbGliKTsKIH0KQEAgLTM2NTAsMTUgKzM4MDYsMTUgQEAgbnNGb250TWV0cmljc1hsaWI6
OkdldEFBU0JCYXNlRm9udChuc0ZvbgogfQogI2VuZGlmIC8qIFVTRV9BQVNCICovCiAKIG5zRm9u
dFhsaWIqCiBuc0ZvbnRNZXRyaWNzWGxpYjo6UGlja0FTaXplQW5kTG9hZChuc0ZvbnRTdHJldGNo
WGxpYiogYVN0cmV0Y2gsCiAgIG5zRm9udENoYXJTZXRJbmZvWGxpYiogYUNoYXJTZXQsIFBSVW5p
Y2hhciBhQ2hhciwgY29uc3QgY2hhciAqYU5hbWUpCiB7Ci0jaWZkZWYgVVNFX0ZSRUVUWVBFCisj
aWZkZWYgTU9aX0VOQUJMRV9GUkVFVFlQRTIKICAgaWYgKGFTdHJldGNoLT5tRnJlZVR5cGVGYWNl
SUQpIHsKICAgICAvL0ZSRUVUWVBFX0ZPTlRfUFJJTlRGKCgibUZyZWVUeXBlRmFjZUlEID0gMHgl
cCIsIGFTdHJldGNoLT5tRnJlZVR5cGVGYWNlSUQpKTsKICAgICBuc0ZyZWVUeXBlRm9udCAqZnRm
b250ID0gbnNGcmVlVHlwZUZvbnQ6Ok5ld0ZvbnQoYVN0cmV0Y2gtPm1GcmVlVHlwZUZhY2VJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBp
eGVsU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYU5hbWUpOwogICAgIGlmICghZnRmb250KSB7CiAgICAgICBGUkVFVFlQRV9GT05UX1BS
SU5URigoImZhaWxlZCB0byBjcmVhdGUgZm9udCIpKTsKQEAgLTM2NzgsMTUgKzM4MzQsMTUgQEAg
bnNGb250TWV0cmljc1hsaWI6OlBpY2tBU2l6ZUFuZExvYWQobnNGbwogICAgIFNldENoYXJzZXRM
YW5nR3JvdXAobUZvbnRNZXRyaWNzQ29udGV4dCwgYUNoYXJTZXQpOwogICAgIGZ0Zm9udC0+bVNp
emUgPSBtUGl4ZWxTaXplOwogICAgIGZ0Zm9udC0+TG9hZEZvbnQoKTsKICAgICBmdGZvbnQtPm1D
aGFyU2V0SW5mbyA9IG1Gb250TWV0cmljc0NvbnRleHQtPm1JU08xMDY0NjE7CiAgICAgLy9GUkVF
VFlQRV9GT05UX1BSSU5URigoImFkZCB0aGUgZnRmb250IikpOwogICAgIHJldHVybiBBZGRUb0xv
YWRlZEZvbnRzTGlzdChmdGZvbnQpOwogICB9Ci0jZW5kaWYgLyogVVNFX0ZSRUVUWVBFICovCisj
ZW5kaWYgLyogTU9aX0VOQUJMRV9GUkVFVFlQRTIgKi8KIAogICBQUkJvb2wgICAgICB1c2Vfc2Nh
bGVkX2ZvbnQgICAgICAgICAgICAgICA9IFBSX0ZBTFNFOwogICBQUkJvb2wgICAgICBoYXZlX25l
YXJseV9yaWdodHNpemVkX2JpdG1hcCA9IFBSX0ZBTFNFOwogI2lmZGVmIFVTRV9BQVNCCiAgIG5z
Rm9udFhsaWIgKmJhc2VfYWFmb250ICAgICAgICAgICAgICAgICAgID0gbnNudWxsOwogI2VuZGlm
IC8qIFVTRV9BQVNCICovCiAKQEAgLTQ0OTQsMTggKzQ2NTAsMTggQEAgR2V0Rm9udE5hbWVzKG5z
Rm9udE1ldHJpY3NYbGliQ29udGV4dCAqYQogCiAjaWZkZWYgTlNfRk9OVF9ERUJVR19DQUxMX1RS
QUNFCiAgIGlmIChnRm9udERlYnVnICYgTlNfRk9OVF9ERUJVR19DQUxMX1RSQUNFKSB7CiAgICAg
cHJpbnRmKCJHZXRGb250TmFtZXMgJXNcbiIsIGFQYXR0ZXJuKTsKICAgfQogI2VuZGlmCiAKLSNp
ZmRlZiBVU0VfRlJFRVRZUEUKKyNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogICAvLyBnZXQg
RnJlZVR5cGUgZm9udHMKICAgbnNGVDJGb250Q2F0YWxvZzo6R2V0Rm9udE5hbWVzKGFGbWN0eCwg
YVBhdHRlcm4sIGFOb2Rlcyk7Ci0jZW5kaWYgLyogVVNFX0ZSRUVUWVBFICovCisjZW5kaWYgLyog
TU9aX0VOQUJMRV9GUkVFVFlQRTIgKi8KIAogICBuc0NBdXRvU3RyaW5nIHByZXZpb3VzTm9kZU5h
bWU7CiAgIG5zSGFzaHRhYmxlKiBub2RlX2hhc2g7CiAgIGlmIChhQW55Rm91bmRyeSkgewogICAg
IE5TX0FTU0VSVElPTihhUGF0dGVyblsxXSA9PSAnKicsICJpbnZhbGlkICdhbnlGb3VuZHJ5JyBw
YXR0ZXJuIik7CiAgICAgbm9kZV9oYXNoID0gJmFGbWN0eC0+bUFGUkVOb2RlczsKICAgfQpAQCAt
NTg5MiwyMCArNjA0OCwyMCBAQCBjb25zdCBuc0ZvbnRDaGFyU2V0TWFwWGxpYiAqR2V0Q2hhclNl
dE1hCiAgIG5zQ1N0cmluZ0tleSBjaGFyU2V0S2V5KGFDaGFyU2V0TmFtZSk7CiAgIGNvbnN0IG5z
Rm9udENoYXJTZXRNYXBYbGliKiBjaGFyU2V0TWFwID0gKGNvbnN0IG5zRm9udENoYXJTZXRNYXBY
bGliICopIGFGbWN0eC0+bUNoYXJTZXRNYXBzLkdldCgmY2hhclNldEtleSk7CiAgIGlmICghY2hh
clNldE1hcCkKICAgICBjaGFyU2V0TWFwID0gYUZtY3R4LT5tTm9uZUNoYXJTZXRNYXA7CiAgIHJl
dHVybiBjaGFyU2V0TWFwOwogfQogCi0jaWZkZWYgVVNFX0ZSRUVUWVBFCisjaWZkZWYgTU9aX0VO
QUJMRV9GUkVFVFlQRTIKIHN0YXRpYwogdm9pZCBDaGFyU2V0TmFtZVRvQ29kZVJhbmdlQml0cyhj
b25zdCBjaGFyICphQ2hhcnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJV
aW50MzIgKmFDb2RlUmFuZ2UxLCBQUlVpbnQzMiAqYUNvZGVSYW5nZTIpCiB7CiAgIG5zRm9udENo
YXJTZXRNYXBYbGliICAqY2hhclNldE1hcCAgPSBHZXRDaGFyU2V0TWFwKGFGbWN0eCwgYUNoYXJz
ZXQpOwogICBuc0ZvbnRDaGFyU2V0SW5mb1hsaWIgKmNoYXJTZXRJbmZvID0gY2hhclNldE1hcC0+
bUluZm87CiAKICAgKmFDb2RlUmFuZ2UxID0gY2hhclNldEluZm8tPm1Db2RlUmFuZ2UxQml0czsK
ICAgKmFDb2RlUmFuZ2UyID0gY2hhclNldEluZm8tPm1Db2RlUmFuZ2UyQml0czsKIH0KLSNlbmRp
ZiAvKiBVU0VfRlJFRVRZUEUgKi8KKyNlbmRpZiAvKiBNT1pfRU5BQkxFX0ZSRUVUWVBFMiAqLwog
CkluZGV4OiBnZngvc3JjL3hsaWIvbnNGb250TWV0cmljc1hsaWIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3Zzcm9vdC9tb3ppbGxhL2dmeC9zcmMveGxpYi9uc0ZvbnRNZXRyaWNzWGxpYi5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM3CmRpZmYgLXUgLTcgLXAgLXIxLjM3IG5zRm9udE1ldHJp
Y3NYbGliLmgKLS0tIGdmeC9zcmMveGxpYi9uc0ZvbnRNZXRyaWNzWGxpYi5oCTUgRmViIDIwMDQg
MDE6NTc6MDYgLTAwMDAJMS4zNworKysgZ2Z4L3NyYy94bGliL25zRm9udE1ldHJpY3NYbGliLmgJ
MTcgT2N0IDIwMDQgMTE6MTA6NDkgLTAwMDAKQEAgLTUyLDE1ICs1MiwxNSBAQAogI2luY2x1ZGUg
Im5zQ1JULmgiCiAjaW5jbHVkZSAibnNDT01QdHIuaCIKICNpbmNsdWRlICJuc1JlbmRlcmluZ0Nv
bnRleHRYbGliLmgiCiAjaW5jbHVkZSAibnNJQ2hhclJlcHJlc2VudGFibGUuaCIKICNpbmNsdWRl
ICJuc0NvbXByZXNzZWRDaGFyTWFwLmgiCiAKIC8qIFVuZGVmaW5lIHNvbWUgQ1BQIHN5bWJvbHMg
d2hpY2ggd3JhcCBub3QteWV0LWltcGxlbWVudGVkIGNvZGUgKi8KLSN1bmRlZiBVU0VfRlJFRVRZ
UEUKKyN1bmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogI3VuZGVmIFVTRV9BQVNCCiAjdW5kZWYg
VVNFX1gxMVNIQVJFRF9DT0RFCiAKICNpZmRlZiBVU0VfWDExU0hBUkVEX0NPREUKIC8qIFhYWDog
SSB3aXNoIEkgd291bGQgdXNlIHRoZSBjb2RlIGluIGdmeC9zcmMveDExc2hhcmVkLyAtIHVuZm9y
dHVuYXRlbHkKICAqIGl0IGlzIGZ1bGwgb2YgR0RLL0dUSysgZGVwZW5kaWNlcyB3aGljaCBtYWtl
cyBpdCBpbXBvc3NpYmxlIHRvIHVzZSBpdAogICogeWV0Li4uIDstKApAQCAtMTgzLDM0ICsxODMs
MzQgQEAgc3RydWN0IG5zRm9udENoYXJTZXRYbGliOwogc3RydWN0IG5zRm9udEZhbWlseVhsaWI7
CiBzdHJ1Y3QgbnNGb250Tm9kZVhsaWI7CiBzdHJ1Y3QgbnNGb250U3RyZXRjaFhsaWI7CiBzdHJ1
Y3QgbnNGb250V2VpZ2h0WGxpYjsKIAogY2xhc3MgbnNGb250WGxpYlVzZXJEZWZpbmVkOwogY2xh
c3MgbnNGb250TWV0cmljc1hsaWI7Ci0jaWZkZWYgVVNFX0ZSRUVUWVBFCisjaWZkZWYgTU9aX0VO
QUJMRV9GUkVFVFlQRTIKIGNsYXNzIG5zRnJlZVR5cGVGYWNlOwotI2VuZGlmIC8qIFVTRV9GUkVF
VFlQRSAqLworI2VuZGlmIC8qIE1PWl9FTkFCTEVfRlJFRVRZUEUyICovCiAKIHN0cnVjdCBuc0Zv
bnRTdHJldGNoWGxpYgogewogICBOU19ERUNMX0FORF9JTVBMX1pFUk9JTkdfT1BFUkFUT1JfTkVX
CiAKICAgdm9pZCBTb3J0U2l6ZXModm9pZCk7CiAKICAgbnNGb250WGxpYiAgICAgICAqKm1TaXpl
czsKICAgUFJVaW50MTYgICAgICAgICAgIG1TaXplc0FsbG9jOwogICBQUlVpbnQxNiAgICAgICAg
ICAgbVNpemVzQ291bnQ7CiAKICAgY2hhciogICAgICAgICAgICAgIG1TY2FsYWJsZTsKICAgUFJC
b29sICAgICAgICAgICAgIG1PdXRsaW5lU2NhbGVkOwogICBuc1ZvaWRBcnJheSAgICAgICAgbVNj
YWxlZEZvbnRzOwotI2lmZGVmIFVTRV9GUkVFVFlQRQorI2lmZGVmIE1PWl9FTkFCTEVfRlJFRVRZ
UEUyCiAgIG5zRnJlZVR5cGVGYWNlICAgICptRnJlZVR5cGVGYWNlSUQ7Ci0jZW5kaWYgLyogVVNF
X0ZSRUVUWVBFICovCisjZW5kaWYgLyogTU9aX0VOQUJMRV9GUkVFVFlQRTIgKi8KIH07CiAKIHN0
cnVjdCBuc0ZvbnRTdHlsZVhsaWIKIHsKICAgTlNfREVDTF9BTkRfSU1QTF9aRVJPSU5HX09QRVJB
VE9SX05FVwogCiAgIHZvaWQgRmlsbFdlaWdodEhvbGVzKHZvaWQpOwpAQCAtMjg1LDE3ICsyODUs
MTcgQEAgcHVibGljOgogCiAgIGlubGluZSBpbnQgU3VwcG9ydHNDaGFyKFBSVW5pY2hhciBhQ2hh
cikKICAgICB7IHJldHVybiBtQ0NNYXAgJiYgQ0NNQVBfSEFTX0NIQVIobUNDTWFwLCBhQ2hhcik7
IH07CiAKICAgdmlydHVhbCBYRm9udFN0cnVjdCAqR2V0WEZvbnRTdHJ1Y3Qodm9pZCk7CiAgIHZp
cnR1YWwgbnNYRm9udCAgICAgKkdldFhGb250KHZvaWQpOwogICB2aXJ0dWFsIFBSQm9vbCAgICAg
ICBHZXRYRm9udElzMTA2NDYodm9pZCk7Ci0jaWZkZWYgVVNFX0ZSRUVUWVBFCisjaWZkZWYgTU9a
X0VOQUJMRV9GUkVFVFlQRTIKICAgdmlydHVhbCBQUkJvb2wgICAgICAgSXNGcmVlVHlwZUZvbnQo
dm9pZCk7Ci0jZW5kaWYgLyogVVNFX0ZSRUVUWVBFICovCisjZW5kaWYgLyogTU9aX0VOQUJMRV9G
UkVFVFlQRTIgKi8KICAgdmlydHVhbCBpbnQgICAgICAgICAgR2V0V2lkdGgoY29uc3QgUFJVbmlj
aGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoKSA9IDA7CiAgIHZpcnR1YWwgaW50ICAgICAg
ICAgIERyYXdTdHJpbmcobnNSZW5kZXJpbmdDb250ZXh0WGxpYiAqYUNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRHJhd2luZ1N1cmZhY2VYbGliICphU3VyZmFj
ZSwgbnNjb29yZCBhWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3Jk
IGFZLCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUxlbmd0aCkgPSAwOwogI2lmZGVmIE1PWl9NQVRITUwKICAgLy8g
Ym91bmRpbmcgbWV0cmljcyBmb3IgYSBzdHJpbmcgCkBAIC00NzIsMTUgKzQ3MiwxNSBAQCBwdWJs
aWM6CiAKIGNsYXNzIG5zSGFzaEtleTsKIAogLyogWFhYOiBXZSBjYW4ndCBpbmNsdWRlIGdmeC9z
cmMveDExc2hhcmVkL25zRnJlZVR5cGUuaCBiZWNhdXNlIGl0IHJlbGllcyBvbgogICogR0RLL0dU
SysgaW5jbHVkZXMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgaW4gWGxpYiBidWlsZHMgKGZpeCBp
cyB0byByZW1vdmUKICAqIHRoZSBHREsvR1RLKyBkZXBlbmRpY3kgZnJvbSB0aGUgY29kZSBpbiBn
Zngvc3JjL3gxMXNoYXJlZC8gLi4uKQogICovCi0jaWZuZGVmIFVTRV9GUkVFVFlQRQorI2lmbmRl
ZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgogLyoKICAqIERlZmluZXMgZm9yIHRoZSBUcnVlVHlwZSBj
b2RlcGFnZSBiaXRzLgogICogVXNlZCBhcyBhIGhpbnQgZm9yIHRoZSBsYW5ndWFnZXMgc3VwcG9y
dGVkIGluIGEgVHJ1ZVR5cGUgZm9udC4KICAqLwogCiAvKgogICogdWxDb2RlUGFnZVJhbmdlMQpA
QCAtNTIxLDExICs1MjEsMTEgQEAgY2xhc3MgbnNIYXNoS2V5OwogI2RlZmluZSBUVF9PUzJfQ1BS
Ml9DWVJJTExJQyAgICAgKDB4MDIwMDAwMDApLypJQk0gQ3lyaWxsaWM7IHByaW1hcmlseSBSdXNz
aWFuKi8KICNkZWZpbmUgVFRfT1MyX0NQUjJfTEFUSU4yICAgICAgICgweDA0MDAwMDAwKSAvKiBM
YXRpbiAyICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVFRfT1MyX0NQUjJfQkFMVElD
ICAgICAgICgweDA4MDAwMDAwKSAvKiBNUy1ET1MgQmFsdGljICAgICAgICAgICAgICAgKi8KICNk
ZWZpbmUgVFRfT1MyX0NQUjJfR1JFRUtfNDM3RyAgICgweDEwMDAwMDAwKSAvKiBHcmVlazsgZm9y
bWVyIDQzNyBHICAgICAgICAgKi8KICNkZWZpbmUgVFRfT1MyX0NQUjJfQVJBQklDXzcwOCAgICgw
eDIwMDAwMDAwKSAvKiBBcmFiaWM7IEFTTU8gNzA4ICAgICAgICAgICAgKi8KICNkZWZpbmUgVFRf
T1MyX0NQUjJfV0VfTEFUSU4xICAgICgweDQwMDAwMDAwKSAvKiBXRS9MYXRpbiAxICAgICAgICAg
ICAgICAgICAgKi8KICNkZWZpbmUgVFRfT1MyX0NQUjJfVVMgICAgICAgICAgICgweDgwMDAwMDAw
KSAvKiBVUyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNlbmRpZiAvKiAhVVNFX0ZSRUVU
WVBFICovCisjZW5kaWYgLyogIU1PWl9FTkFCTEVfRlJFRVRZUEUyICovCiAKICNlbmRpZiAvKiAh
bnNGb250TWV0cmljc1hsaWJfaF9fICovCiAKSW5kZXg6IGdmeC9zcmMvc2hhcmVkL01ha2VmaWxl
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L21vemlsbGEvZ2Z4L3NyYy9zaGFyZWQv
TWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC03IC1wIC1yMS41
IE1ha2VmaWxlLmluCi0tLSBnZngvc3JjL3NoYXJlZC9NYWtlZmlsZS5pbgkxMiBNYXIgMjAwMyAw
NDo1NzoxNSAtMDAwMAkxLjUKKysrIGdmeC9zcmMvc2hhcmVkL01ha2VmaWxlLmluCTE3IE9jdCAy
MDA0IDExOjEwOjQ5IC0wMDAwCkBAIC01MCwxMCArNTAsMTUgQEAgQ1BQU1JDUyA9IFwKIAogaWZu
ZXEgKCwkKGZpbHRlciBtYWMgY29jb2EsJChNT1pfV0lER0VUX1RPT0xLSVQpKSkKIENQUFNSQ1Mg
Kz0gbnNOYXRpdmVUaGVtZS5jcHAKIGVuZGlmCiAKIExPQ0FMX0lOQ0xVREVTID0gLUkkKHNyY2Rp
cikvLi4gXAogICAgICAgICAgICAgICAgICAkKE5VTEwpCisgIAoraWZkZWYgTU9aX0VOQUJMRV9Y
RlQKK0NQUFNSQ1MgKz0gbnNGb250Q29uZmlnVXRpbHMuY3BwCitMT0NBTF9JTkNMVURFUyArPSAk
KE1PWl9YRlRfQ0ZMQUdTKQorZW5kaWYKIAogaW5jbHVkZSAkKHRvcHNyY2RpcikvY29uZmlnL3J1
bGVzLm1rCiAKSW5kZXg6IGdmeC9zcmMvc2hhcmVkL25zRm9udENvbmZpZ1V0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiBnZngvc3JjL3NoYXJlZC9uc0ZvbnRDb25maWdVdGlscy5jcHAKZGlm
ZiAtTiBnZngvc3JjL3NoYXJlZC9uc0ZvbnRDb25maWdVdGlscy5jcHAKLS0tIC9kZXYvbnVsbAkx
IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBnZngvc3JjL3NoYXJlZC9uc0ZvbnRDb25maWdV
dGlscy5jcHAJMTcgT2N0IDIwMDQgMTE6MTA6NTAgLTAwMDAKQEAgLTAsMCArMSwyMjcgQEAKKy8q
IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh
c2ljLW9mZnNldDogNCAtKi0gKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioK
KyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01Q
TC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxh
Lm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwg
Q29kZSBpcyBDaHJpc3RvcGhlciBCbGl6emFyZAorICogPGJsaXp6YXJkQG1vemlsbGEub3JnPi4g
IFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCisgKiBhcmUgQ29weXJp
Z2h0IChDKSAyMDAyIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVu
dHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVy
IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRo
ZSAiR1BMIiksCisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisg
KiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BM
IG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlv
dXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBs
YWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJl
ZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHBy
b3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBv
ciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisj
aW5jbHVkZSAibnNGb250Q29uZmlnVXRpbHMuaCIKKworc3RydWN0IE1velhmdExhbmdHcm91cCB7
CisgICAgY29uc3QgY2hhciAgICAqbW96TGFuZ0dyb3VwOworICAgIEZjQ2hhcjMyICAgICAgIGNo
YXJhY3RlcjsKKyAgICBjb25zdCBGY0NoYXI4ICpYZnRMYW5nOworfTsKKworY29uc3QgTW96WGZ0
TGFuZ0dyb3VwIE1velhmdExhbmdHcm91cHNbXSA9IHsKKyAgICB7ICJ4LXdlc3Rlcm4iLCAgICAg
IDB4MDA0MSwgKGNvbnN0IEZjQ2hhcjggKikiZW4iIH0sCisgICAgeyAieC1jZW50cmFsLWV1cm8i
LCAweDAxMDAsIChjb25zdCBGY0NoYXI4ICopInBsIiB9LAorICAgIHsgIngtY3lyaWxsaWMiLCAg
ICAgMHgwNDExLCAoY29uc3QgRmNDaGFyOCAqKSJydSIgfSwKKyAgICB7ICJ4LWJhbHRpYyIsICAg
ICAgIDB4MDEwNCwgKGNvbnN0IEZjQ2hhcjggKikibHYiIH0sCisgICAgeyAieC1kZXZhbmFnYXJp
IiwgICAweDA5MDUsIChjb25zdCBGY0NoYXI4ICopImhpIiB9LAorICAgIHsgIngtdGFtaWwiLCAg
ICAgICAgMHgwQjg1LCAoY29uc3QgRmNDaGFyOCAqKSJ0YSIgfSwKKyAgICB7ICJ4LXVuaWNvZGUi
LCAgICAgIDB4MDAwMCwgICAgICAgICAgICAgICAgICAwICAgIH0sCisgICAgeyAieC11c2VyLWRl
ZiIsICAgICAweDAwMDAsICAgICAgICAgICAgICAgICAgMCAgICB9LAorfTsKKworI2RlZmluZSBO
VU1fWEZUX0xBTkdfR1JPVVBTIChzaXplb2YgKE1velhmdExhbmdHcm91cHMpIC8gXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKE1velhmdExhbmdHcm91cHNbMF0pKQorCitz
dGF0aWMgCit2b2lkIEZGUkVUb0ZhbWlseShuc0FDU3RyaW5nICZhRkZSRU5hbWUsIG5zQUNTdHJp
bmcgJm9GYW1pbHkpOworCitzdGF0aWMKK2NvbnN0IE1velhmdExhbmdHcm91cCoKK0ZpbmRGQ0xh
bmdHcm91cCAobnNBQ1N0cmluZyAmYUxhbmdHcm91cCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpPTA7IGkgPCBOVU1fWEZUX0xBTkdfR1JPVVBTOyArK2kpIHsKKyAgICAgICAgaWYgKGFMYW5n
R3JvdXAuRXF1YWxzKE1velhmdExhbmdHcm91cHNbaV0ubW96TGFuZ0dyb3VwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNDYXNlSW5zZW5zaXRpdmVDU3RyaW5nQ29tcGFyYXRvcigp
KSkgeworICAgICAgICAgICAgcmV0dXJuICZNb3pYZnRMYW5nR3JvdXBzW2ldOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG5zbnVsbDsKK30KKworaW50CitOU19DYWxjdWxhdGVTbGFu
dChQUlVpbnQ4IGFTdHlsZSkKK3sKKyAgICBpbnQgZmNTbGFudDsKKworICAgIHN3aXRjaChhU3R5
bGUpIHsKKyAgICBjYXNlIE5TX0ZPTlRfU1RZTEVfSVRBTElDOgorICAgICAgICBmY1NsYW50ID0g
RkNfU0xBTlRfSVRBTElDOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5TX0ZPTlRfU1RZTEVf
T0JMSVFVRToKKyAgICAgICAgZmNTbGFudCA9IEZDX1NMQU5UX09CTElRVUU7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZjU2xhbnQgPSBGQ19TTEFOVF9ST01BTjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZjU2xhbnQ7Cit9CisKK2ludAorTlNf
Q2FsY3VsYXRlV2VpZ2h0IChQUlVpbnQxNiBhV2VpZ2h0KQoreworICAgIC8qCisgICAgICogd2Vp
Z2h0cyBjb21lIGluIHR3byBwYXJ0cyBjcmFtbWVkIGludG8gb25lCisgICAgICogaW50ZWdlciAt
LSB0aGUgImJhc2UiIHdlaWdodCBpcyB3ZWlnaHQgLyAxMDAsCisgICAgICogdGhlIHJlc3Qgb2Yg
dGhlIHZhbHVlIGlzIHRoZSAib2Zmc2V0IiBmcm9tIHRoYXQKKyAgICAgKiB3ZWlnaHQgLS0gdGhl
IG51bWJlciBvZiBzdGVwcyB0byBtb3ZlIHRvIGFkanVzdAorICAgICAqIHRoZSB3ZWlnaHQgaW4g
dGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvbnQgd2VpZ2h0cywKKyAgICAgKiB0aGlzIHZhbHVlIGNh
biBiZSBuZWdhdGl2ZSBvciBwb3NpdGl2ZS4KKyAgICAgKi8KKyAgICBQUkludDMyIGJhc2VXZWln
aHQgPSAoYVdlaWdodCArIDUwKSAvIDEwMDsKKyAgICBQUkludDMyIG9mZnNldCA9IGFXZWlnaHQg
LSBiYXNlV2VpZ2h0ICogMTAwOworCisgICAgLyogY2xpcCB3ZWlnaHRzIHRvIHJhbmdlIDAgdG8g
OSAqLworICAgIGlmIChiYXNlV2VpZ2h0IDwgMCkKKyAgICAgICAgYmFzZVdlaWdodCA9IDA7Cisg
ICAgaWYgKGJhc2VXZWlnaHQgPiA5KQorICAgICAgICBiYXNlV2VpZ2h0ID0gOTsKKworICAgIC8q
IE1hcCBmcm9tIHdlaWdodCB2YWx1ZSB0byBmY1dlaWdodHMgaW5kZXggKi8KKyAgICBzdGF0aWMg
aW50IGZjV2VpZ2h0TG9va3VwWzEwXSA9IHsKKyAgICAgICAgMCwgMCwgMCwgMCwgMSwgMSwgMiwg
MywgMywgNCwKKyAgICB9OworCisgICAgUFJJbnQzMiBmY1dlaWdodCA9IGZjV2VpZ2h0TG9va3Vw
W2Jhc2VXZWlnaHRdOworCisgICAgLyoKKyAgICAgKiBhZGp1c3QgYnkgdGhlIG9mZnNldCB2YWx1
ZSwgbWFrZSBzdXJlIHdlIHN0YXkgaW5zaWRlIHRoZQorICAgICAqIGZjV2VpZ2h0cyB0YWJsZQor
ICAgICAqLworICAgIGZjV2VpZ2h0ICs9IG9mZnNldDsKKyAgICBpZiAoZmNXZWlnaHQgPCAwKQor
ICAgICAgICBmY1dlaWdodCA9IDA7CisgICAgaWYgKGZjV2VpZ2h0ID4gNCkKKyAgICAgICAgZmNX
ZWlnaHQgPSA0OworCisgICAgLyogTWFwIHRvIGZpbmFsIEZDX1dFSUdIVCB2YWx1ZSAqLworICAg
IHN0YXRpYyBpbnQgZmNXZWlnaHRzWzVdID0geworICAgICAgICBGQ19XRUlHSFRfTElHSFQsICAg
ICAgLyogMCAqLworICAgICAgICBGQ19XRUlHSFRfTUVESVVNLCAgICAgLyogMSAqLworICAgICAg
ICBGQ19XRUlHSFRfREVNSUJPTEQsICAgLyogMiAqLworICAgICAgICBGQ19XRUlHSFRfQk9MRCwg
ICAgICAgLyogMyAqLworICAgICAgICBGQ19XRUlHSFRfQkxBQ0ssICAgICAgLyogNCAqLworICAg
IH07CisKKyAgICByZXR1cm4gZmNXZWlnaHRzW2ZjV2VpZ2h0XTsKK30KKwordm9pZAorTlNfQWRk
TGFuZ0dyb3VwKEZjUGF0dGVybiAqYVBhdHRlcm4sIG5zSUF0b20gKmFMYW5nR3JvdXApCit7Cisg
ICAgLy8gRmluZCB0aGUgRkMgbGFuZyBncm91cCBmb3IgdGhpcyBsYW5nIGdyb3VwCisgICAgbnND
QXV0b1N0cmluZyBjbmFtZTsKKyAgICBhTGFuZ0dyb3VwLT5Ub1VURjhTdHJpbmcoY25hbWUpOwor
CisgICAgLy8gc2VlIGlmIHRoZSBsYW5nIGdyb3VwIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgZnJv
bSBtb3ppbGxhJ3MKKyAgICAvLyBpbnRlcm5hbCBtYXBwaW5nIGludG8gZm9udGNvbmZpZydzCisg
ICAgY29uc3Qgc3RydWN0IE1velhmdExhbmdHcm91cCAqbGFuZ0dyb3VwOworICAgIGxhbmdHcm91
cCA9IEZpbmRGQ0xhbmdHcm91cChjbmFtZSk7CisKKyAgICAvLyBpZiB0aGVyZSdzIG5vIGxhbmcg
Z3JvdXAsIGp1c3QgdXNlIHRoZSBsYW5nIGdyb3VwIGFzIGl0IHdhcworICAgIC8vIHBhc3NlZCB0
byB1cworICAgIC8vCisgICAgLy8gd2UncmUgY2FzdGluZyBhd2F5IHRoZSBjb25zdCBoZXJlIGZv
ciB0aGUgc3RyaW5ncyAtIHNob3VsZCBiZQorICAgIC8vIHNhZmUuCisgICAgaWYgKCFsYW5nR3Jv
dXApCisgICAgICAgIEZjUGF0dGVybkFkZFN0cmluZyhhUGF0dGVybiwgRkNfTEFORywgKEZjQ2hh
cjggKiljbmFtZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobGFuZ0dyb3VwLT5YZnRMYW5nKQorICAg
ICAgICBGY1BhdHRlcm5BZGRTdHJpbmcoYVBhdHRlcm4sIEZDX0xBTkcsIChGY0NoYXI4ICopbGFu
Z0dyb3VwLT5YZnRMYW5nKTsKK30KKwordm9pZAorTlNfQWRkRkZSRShGY1BhdHRlcm4gKmFQYXR0
ZXJuLCBuc0NTdHJpbmcgKmFGYW1pbHksIFBSQm9vbCBhV2VhaykKK3sKKyAgICBuc0NBdXRvU3Ry
aW5nIGZhbWlseTsKKyAgICBGRlJFVG9GYW1pbHkoKmFGYW1pbHksIGZhbWlseSk7CisKKyAgICBG
Y1ZhbHVlIHY7CisgICAgdi50eXBlID0gRmNUeXBlU3RyaW5nOworICAgIC8vIGNhc3RpbmcgYXdh
eSB0aGUgY29uc3QgaGVyZSwgc2hvdWxkIGJlIHNhZmUKKyAgICB2LnUucyA9IChGY0NoYXI4ICop
ZmFtaWx5LmdldCgpOworCisgICAgaWYgKGFXZWFrKQorICAgICAgICBGY1BhdHRlcm5BZGRXZWFr
KGFQYXR0ZXJuLCBGQ19GQU1JTFksIHYsIEZjVHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBGY1Bh
dHRlcm5BZGQoYVBhdHRlcm4sIEZDX0ZBTUlMWSwgdiwgRmNUcnVlKTsKK30KKworLyogc3RhdGlj
ICovCit2b2lkCitGRlJFVG9GYW1pbHkobnNBQ1N0cmluZyAmYUZGUkVOYW1lLCBuc0FDU3RyaW5n
ICZvRmFtaWx5KQoreworICBpZiAoTlNfRkZSRUNvdW50SHlwaGVucyhhRkZSRU5hbWUpID09IDMp
IHsKKyAgICAgIFBSSW50MzIgZmFtaWx5SHlwaGVuID0gYUZGUkVOYW1lLkZpbmRDaGFyKCctJykg
KyAxOworICAgICAgUFJJbnQzMiByZWdpc3RyeUh5cGhlbiA9IGFGRlJFTmFtZS5GaW5kQ2hhcign
LScsZmFtaWx5SHlwaGVuKTsKKyAgICAgIG9GYW1pbHkuQXBwZW5kKFN1YnN0cmluZyhhRkZSRU5h
bWUsIGZhbWlseUh5cGhlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Ry
eUh5cGhlbi1mYW1pbHlIeXBoZW4pKTsKKyAgfQorICBlbHNlIHsKKyAgICAgIG9GYW1pbHkuQXBw
ZW5kKGFGRlJFTmFtZSk7CisgIH0KK30KKworaW50CitOU19GRlJFQ291bnRIeXBoZW5zIChuc0FD
U3RyaW5nICZhRkZSRU5hbWUpCit7CisgICAgaW50IGggPSAwOworICAgIFBSSW50MzIgaHlwaGVu
ID0gMDsKKyAgICB3aGlsZSAoKGh5cGhlbiA9IGFGRlJFTmFtZS5GaW5kQ2hhcignLScsIGh5cGhl
bikpID49IDApIHsKKyAgICAgICAgKytoOworICAgICAgICArK2h5cGhlbjsKKyAgICB9CisgICAg
cmV0dXJuIGg7Cit9CisKK1BSQm9vbAorTlNfSXNBU0NJSUZvbnROYW1lKGNvbnN0IG5zU3RyaW5n
JiBhTmFtZSkKK3sKKyAgICBQUlVpbnQzMiBsZW4gPSBhTmFtZS5MZW5ndGgoKTsKKyAgICBjb25z
dCBQUlVuaWNoYXIqIHN0ciA9IGFOYW1lLmdldCgpOworICAgIGZvciAoUFJVaW50MzIgaSA9IDA7
IGkgPCBsZW47IGkrKykgeworICAgICAgICAvKgorICAgICAgICAgKiBYIGZvbnQgbmFtZXMgYXJl
IHByaW50YWJsZSBBU0NJSSwgaWdub3JlIG90aGVycyAoZm9yIG5vdykKKyAgICAgICAgICovCisg
ICAgICAgIGlmICgoc3RyW2ldIDwgMHgyMCkgfHwgKHN0cltpXSA+IDB4N0UpKSB7CisgICAgICAg
ICAgICByZXR1cm4gUFJfRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUFJf
VFJVRTsKK30KSW5kZXg6IGdmeC9zcmMvc2hhcmVkL25zRm9udENvbmZpZ1V0aWxzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogZ2Z4L3NyYy9zaGFyZWQvbnNGb250Q29uZmlnVXRpbHMuaApkaWZmIC1O
IGdmeC9zcmMvc2hhcmVkL25zRm9udENvbmZpZ1V0aWxzLmgKLS0tIC9kZXYvbnVsbAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCisrKyBnZngvc3JjL3NoYXJlZC9uc0ZvbnRDb25maWdVdGlscy5o
CTE3IE9jdCAyMDA0IDExOjEwOjUwIC0wMDAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qIC0qLSBNb2Rl
OiBDKys7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNl
dDogNCAtKi0gKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNp
b246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgor
ICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisg
KiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQor
ICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2Rl
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBD
aHJpc3RvcGhlciBCbGl6emFyZAorICogPGJsaXp6YXJkQG1vemlsbGEub3JnPi4gIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCisgKiBhcmUgQ29weXJpZ2h0IChDKSAy
MDAyIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiks
CisgKiBvciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4x
IG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9z
ZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBM
R1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRl
Y2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0g
d2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUg
R1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMg
YWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
cgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQ
TC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaWZuZGVmIG5z
Rm9udENvbmZpZ1V0aWxzX2hfXworI2RlZmluZSBuc0ZvbnRDb25maWdVdGlsc19oX18KKworI2lu
Y2x1ZGUgIm5zcHIuaCIKKyNpbmNsdWRlICJuc1N0cmluZy5oIgorI2luY2x1ZGUgIm5zSUF0b20u
aCIKKyNpbmNsdWRlICJuc0ZvbnQuaCIKKworI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZp
Zy5oPgorCitleHRlcm4gaW50ICAgICBOU19DYWxjdWxhdGVTbGFudCAgIChQUlVpbnQ4ICBhU3R5
bGUpOworZXh0ZXJuIGludCAgICAgTlNfQ2FsY3VsYXRlV2VpZ2h0ICAoUFJVaW50MTYgYVdlaWdo
dCk7CitleHRlcm4gdm9pZCAgICBOU19BZGRMYW5nR3JvdXAgICAgIChGY1BhdHRlcm4gKmFQYXR0
ZXJuLCBuc0lBdG9tICphTGFuZ0dyb3VwKTsKK2V4dGVybiB2b2lkICAgIE5TX0FkZEZGUkUgICAg
ICAgICAgKEZjUGF0dGVybiAqYVBhdHRlcm4sIG5zQ1N0cmluZyAqYUZhbWlseSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhV2Vhayk7CitleHRlcm4gaW50ICAg
ICBOU19GRlJFQ291bnRIeXBoZW5zIChuc0FDU3RyaW5nICZhRkZSRU5hbWUpOworZXh0ZXJuIFBS
Qm9vbCAgTlNfSXNBU0NJSUZvbnROYW1lICAoY29uc3QgbnNTdHJpbmcmIGFOYW1lKTsKKyNlbmRp
ZgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>753</attachid>
            <date>2005-02-22 00:57:11 +0300</date>
            <delta_ts>2005-02-22 00:57:11 +0300</delta_ts>
            <desc>see #234035</desc>
            <filename>234035.patch.4xftonly</filename>
            <type>text/plain</type>
            <size>6900</size>
            <attacher name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</attacher>
            
              <data encoding="base64">PyBnZngvc3JjL3BzLy5uc1R5cGU4LmNwcC5zd3AKPyBnZngvc3JjL3BzL1VuQmF0YW5nLnJhdwo/
IGdmeC9zcmMvcHMvbnNUeXBlOC5jcHAubmV3Cj8gZ2Z4L3NyYy9wcy9vdXRwdXQucHMKSW5kZXg6
IGdmeC9zcmMvcHMvbnNGb250TWV0cmljc1BTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
cm9vdC9tb3ppbGxhL2dmeC9zcmMvcHMvbnNGb250TWV0cmljc1BTLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40NQpkaWZmIC11IC03IC1wIC1yMS40NSBuc0ZvbnRNZXRyaWNzUFMuY3BwCi0t
LSBnZngvc3JjL3BzL25zRm9udE1ldHJpY3NQUy5jcHAJMjAgQXVnIDIwMDQgMDk6MTE6MjUgLTAw
MDAJMS40NQorKysgZ2Z4L3NyYy9wcy9uc0ZvbnRNZXRyaWNzUFMuY3BwCTE1IE9jdCAyMDA0IDIy
OjU1OjExIC0wMDAwCkBAIC0xMDI0LDI4ICsxMDI0LDE0IEBAIG5zRm9udFBTWGZ0OjpGaW5kRm9u
dChQUlVuaWNoYXIgYUNoYXIsIGMKIAogICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7CiAg
IH0KIAogICByZXR1cm4gbnNudWxsOwogfQogCi0vKkZUX0NBTExCQUNLX0RFRiovCi1GVF9FcnJv
cgotbnNYZnRGYWNlUmVxdWVzdGVyKEZUQ19GYWNlSUQgZmFjZV9pZCwgRlRfTGlicmFyeSBsaWIs
Ci0gICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyIHJlcXVlc3RfZGF0YSwgRlRfRmFjZSogYUZh
Y2UpCi17Ci0gIG5zWGZ0RW50cnkgKmZhY2VJRCA9IChuc1hmdEVudHJ5ICopZmFjZV9pZDsKLQot
ICBGVF9FcnJvciBmdGVycm9yID0gRlRfTmV3X0ZhY2UobGliLCBmYWNlSUQtPm1Gb250RmlsZU5h
bWUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlSUQtPm1GYWNl
SW5kZXgsIGFGYWNlKTsKLSAgaWYgKGZ0ZXJyb3IpIAotICAgICphRmFjZSA9IG5zbnVsbDsKLSAg
cmV0dXJuIDA7Ci19Ci0KIG5zRm9udFBTWGZ0Ojpuc0ZvbnRQU1hmdChjb25zdCBuc0ZvbnQmIGFG
b250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZvbnRNZXRyaWNzUFMq
IGFGb250TWV0cmljcykKICAgOm5zRm9udFBTKGFGb250LCBhRm9udE1ldHJpY3MpCiB7CiB9CiAK
IG5zcmVzdWx0CkBAIC0xMDU5LDYzICsxMDQ1LDQ2IEBAIG5zRm9udFBTWGZ0OjpJbml0KG5zWGZ0
RW50cnkqIGFFbnRyeSwKICAgZmxvYXQgYXBwMmRldjsKICAgbnNJRGV2aWNlQ29udGV4dCogZGMg
PSBtRm9udE1ldHJpY3MtPkdldERldmljZUNvbnRleHQoKTsKICAgTlNfRU5TVVJFX1RSVUUoZGMs
IE5TX0VSUk9SX05VTExfUE9JTlRFUik7CiAgIGFwcDJkZXYgPSBkYy0+QXBwVW5pdHNUb0RldlVu
aXRzKCk7CiAgIAogICBtUGl4ZWxTaXplID0gTlNUb0ludFJvdW5kKGFwcDJkZXYgKiBtRm9udC0+
c2l6ZSk7CiAKLSAgbUltYWdlRGVzYy5mb250LmZhY2VfaWQgICAgPSAodm9pZCopbUVudHJ5Owot
ICBtSW1hZ2VEZXNjLmZvbnQucGl4X3dpZHRoICA9IG1QaXhlbFNpemU7Ci0gIG1JbWFnZURlc2Mu
Zm9udC5waXhfaGVpZ2h0ID0gbVBpeGVsU2l6ZTsKLSAgbUltYWdlRGVzYy5pbWFnZV90eXBlID0g
MDsKLQogICBGVF9FcnJvciBmdGVycm9yOyAKICAgZnRlcnJvciA9IEZUX0luaXRfRnJlZVR5cGUo
Jm1GcmVlVHlwZUxpYnJhcnkpOwogICBpZiAoZnRlcnJvcikgewotICAgIE5TX0FTU0VSVElPTigh
ZnRlcnJvciwgImZhaWxlZCB0byBpbml0aWFsaXplIEZyZWVUeXBlIGxpYnJhcnkiKTsKKyAgICBO
U19FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgRnJlZVR5cGUgbGlicmFyeSIpOwogICAgIG1G
cmVlVHlwZUxpYnJhcnkgPSBuc251bGw7CiAgICAgcmV0dXJuIE5TX0VSUk9SX0ZBSUxVUkU7CiAg
IH0KLSAgZnRlcnJvciA9IEZUQ19NYW5hZ2VyX05ldyhtRnJlZVR5cGVMaWJyYXJ5LCAwLCAwLCAw
LCBuc1hmdEZhY2VSZXF1ZXN0ZXIsCi0gICAgICAgICAgICAgICAgICBOVUxMLCAmbUZUQ2FjaGVN
YW5hZ2VyKTsKLSAgTlNfQVNTRVJUSU9OKCFmdGVycm9yLCAiZmFpbGVkIHRvIGNyZWF0ZSBGcmVl
VHlwZSBDYWNoZSBtYW5hZ2VyIik7Ci0gIGlmIChmdGVycm9yKQotICAgIHJldHVybiBOU19FUlJP
Ul9GQUlMVVJFOwotCi0gIGZ0ZXJyb3IgPSBGVENfSW1hZ2VfQ2FjaGVfTmV3KG1GVENhY2hlTWFu
YWdlciwgJm1JbWFnZUNhY2hlKTsKLSAgTlNfQVNTRVJUSU9OKCFmdGVycm9yLCAiZmFpbGVkIHRv
IGNyZWF0ZSBGcmVlVHlwZSBpbWFnZSBjYWNoZSIpOwotICBpZiAoZnRlcnJvcikKLSAgICByZXR1
cm4gTlNfRVJST1JfRkFJTFVSRTsKLQogICByZXR1cm4gTlNfT0s7CiB9CiAKIG5zRm9udFBTWGZ0
Ojp+bnNGb250UFNYZnQoKQogewotICBGVENfTWFuYWdlcl9Eb25lKG1GVENhY2hlTWFuYWdlcik7
CisgIGlmIChtRW50cnktPm1GYWNlKSAKKyAgICBGVF9Eb25lX0ZhY2UobUVudHJ5LT5tRmFjZSk7
CiAKICAgaWYgKEZUX0RvbmVfRnJlZVR5cGUobUZyZWVUeXBlTGlicmFyeSkpCiAgICAgcmV0dXJu
OwogCiAgIG1FbnRyeSA9IG5zbnVsbDsKIH0KIAogRlRfRmFjZQogbnNGb250UFNYZnQ6OmdldEZU
RmFjZSgpCiB7Ci0gIEZUX0Vycm9yIGVycm9yOwogICBGVF9GYWNlIGZhY2UgPSBtRW50cnktPm1G
YWNlOwogCiAgIGlmIChmYWNlKQogICAgIHJldHVybiAoZmFjZSk7CiAKLSAgZXJyb3IgPSBGVENf
TWFuYWdlcl9Mb29rdXBfU2l6ZShtRlRDYWNoZU1hbmFnZXIsICZtSW1hZ2VEZXNjLmZvbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY2UsIG5zbnVsbCk7Ci0gIE5TX0FT
U0VSVElPTihlcnJvciA9PSAwLCAiZmFpbGVkIHRvIGdldCBmYWNlL3NpemUiKTsKLSAgaWYgKGVy
cm9yKQorICBpZiAoRlRfTmV3X0ZhY2UobUZyZWVUeXBlTGlicmFyeSwgbUVudHJ5LT5tRm9udEZp
bGVOYW1lLmdldCgpLCAKKyAgICAgICAgICAgICAgICAgIG1FbnRyeS0+bUZhY2VJbmRleCwgJmZh
Y2UpIHx8CisgICAgICBGVF9TZXRfUGl4ZWxfU2l6ZXMoZmFjZSwgbVBpeGVsU2l6ZSwgMCkpCiAg
ICAgcmV0dXJuIG5zbnVsbDsKIAogICBtRW50cnktPm1GYWNlID0gZmFjZTsKICAgcmV0dXJuIGZh
Y2U7CiB9CiAKIG5zY29vcmQKQEAgLTExNDUsMjMgKzExMTQsMjQgQEAgbnNGb250UFNYZnQ6Okdl
dFdpZHRoKGNvbnN0IFBSVW5pY2hhciogYQogCiAgIC8vIGdldCB0aGUgZmFjZS9zaXplIGZyb20g
dGhlIEZyZWVUeXBlIGNhY2hlCiAgIEZUX0ZhY2UgZmFjZSA9IGdldEZURmFjZSgpOwogICBOU19B
U1NFUlRJT04oZmFjZSwgImZhaWxlZCB0byBnZXQgZmFjZS9zaXplIik7CiAgIGlmICghZmFjZSkK
ICAgICByZXR1cm4gMDsKIAorICAvLyBYWFggOiB3ZSBtaWdodCBuZWVkIHNvbWUgY2FjaGluZyBo
ZXJlCiAgIGZvciAoUFJVaW50MzIgaT0wOyBpPGFMZW5ndGg7IGkrKykgewogICAgIGdseXBoX2lu
ZGV4ID0gRlRfR2V0X0NoYXJfSW5kZXgoKEZUX0ZhY2UpZmFjZSwgYVN0cmluZ1tpXSk7Ci0gICAg
RlRfRXJyb3IgZXJyb3IgPSBGVENfSW1hZ2VfQ2FjaGVfTG9va3VwKG1JbWFnZUNhY2hlLCAmbUlt
YWdlRGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhfaW5kZXgsICZnbHlwaCk7Ci0gICAgaWYgKGVycm9yKSB7CisgICAgaWYgKEZUX0xvYWRfR2x5
cGgoZmFjZSwgZ2x5cGhfaW5kZXgsIEZUX0xPQURfREVGQVVMVCkgfHwKKyAgICAgICAgRlRfR2V0
X0dseXBoKGZhY2UtPmdseXBoLCAmZ2x5cGgpKSB7ICAgICAKICAgICAgIG9yaWdpbl94ICs9IEZU
X1JFR19UT18xNl8xNihmYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbS8yICsgMik7CiAgICAgICBj
b250aW51ZTsKICAgICB9CiAgICAgb3JpZ2luX3ggKz0gZ2x5cGgtPmFkdmFuY2UueDsKKyAgICBG
VF9Eb25lX0dseXBoKGdseXBoKTsKICAgfQogCiAgIE5TX0VOU1VSRV9UUlVFKG1Gb250TWV0cmlj
cywgMCk7CiAKICAgbnNEZXZpY2VDb250ZXh0UFMqIGRjID0gbUZvbnRNZXRyaWNzLT5HZXREZXZp
Y2VDb250ZXh0KCk7CiAgIE5TX0VOU1VSRV9UUlVFKGRjLCAwKTsKIApAQCAtMjQwNyw1MiArMjM3
Nyw0MCBAQCBuc1hmdFR5cGU4R2VuZXJhdG9yOjpJbml0KG5zWGZ0RW50cnkqIGFFCiAKICAgRlRf
RXJyb3IgZXJyb3IgPSBGVF9Jbml0X0ZyZWVUeXBlKCZtRnJlZVR5cGVMaWJyYXJ5KTsKICAgTlNf
QVNTRVJUSU9OKCFlcnJvciwgImZhaWxlZCB0byBpbml0aWFsaXplIEZyZWVUeXBlIGxpYnJhcnki
KTsKICAgaWYgKGVycm9yKSB7CiAgICAgbUZyZWVUeXBlTGlicmFyeSA9IG5zbnVsbDsKICAgICBy
ZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKICAgfQotICBlcnJvciA9IEZUQ19NYW5hZ2VyX05ldyht
RnJlZVR5cGVMaWJyYXJ5LCAwLCAwLCAwLCBuc1hmdEZhY2VSZXF1ZXN0ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsICZtRlRDYWNoZU1hbmFnZXIpOwotICBOU19BU1NFUlRJT04o
IWVycm9yLCAiZmFpbGVkIHRvIGNyZWF0ZSBGcmVlVHlwZSBDYWNoZSBtYW5hZ2VyIik7Ci0gIGlm
IChlcnJvcikKLSAgICByZXR1cm4gTlNfRVJST1JfRkFJTFVSRTsKIAogICByZXR1cm4gTlNfT0s7
CiB9CiAKIG5zWGZ0VHlwZThHZW5lcmF0b3I6On5uc1hmdFR5cGU4R2VuZXJhdG9yKCkKIHsKLSAg
RlRDX01hbmFnZXJfRG9uZShtRlRDYWNoZU1hbmFnZXIpOworICBpZiAobUVudHJ5LT5tRmFjZSkg
CisgICAgRlRfRG9uZV9GYWNlKG1FbnRyeS0+bUZhY2UpOwogCiAgIGlmIChGVF9Eb25lX0ZyZWVU
eXBlKG1GcmVlVHlwZUxpYnJhcnkpKQogICAgIHJldHVybjsKIAogICBtRW50cnkgPSBuc251bGw7
CiB9CiAKIHZvaWQgbnNYZnRUeXBlOEdlbmVyYXRvcjo6R2VuZXJhdGVQU0ZvbnQoRklMRSogYUZp
bGUpCiB7Ci0gIEZUX0Vycm9yIGVycm9yOwogICBGVF9GYWNlIGZhY2UgPSBtRW50cnktPm1GYWNl
OwogCiAgIGlmIChmYWNlID09IG5zbnVsbCkgewotICAgIG1JbWFnZURlc2MuZm9udC5mYWNlX2lk
ICAgID0gKHZvaWQqKW1FbnRyeTsKLSAgICBtSW1hZ2VEZXNjLmZvbnQucGl4X3dpZHRoICA9IDE2
OwotICAgIG1JbWFnZURlc2MuZm9udC5waXhfaGVpZ2h0ID0gMTY7Ci0gICAgbUltYWdlRGVzYy5p
bWFnZV90eXBlID0gMDsKLSAgICBlcnJvciA9IEZUQ19NYW5hZ2VyX0xvb2t1cF9TaXplKG1GVENh
Y2hlTWFuYWdlciwgJm1JbWFnZURlc2MuZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZmYWNlLCBuc251bGwpOwotICAgIGlmIChlcnJvcikKLSAgICAgIHJldHVybjsK
KyAgICBpZiAoRlRfTmV3X0ZhY2UobUZyZWVUeXBlTGlicmFyeSwgbUVudHJ5LT5tRm9udEZpbGVO
YW1lLmdldCgpLCBtRW50cnktPm1GYWNlSW5kZXgsICZmYWNlKSB8fAorICAgICAgICBmYWNlID09
IG5zbnVsbCAvKiB8fCBGVF9TZXRfUGl4ZWxfU2l6ZXMoZmFjZSwgMTYsIDApICovKSAKKyAgICAg
ICByZXR1cm47CisgICAgIG1FbnRyeS0+bUZhY2UgPSBmYWNlOwogICB9CiAKLSAgaWYgKGZhY2Ug
PT0gbnNudWxsKQotICAgIHJldHVybjsKLSAKICAgaW50IHdtb2RlID0gMDsKICAgaWYgKCFtU3Vi
c2V0LklzRW1wdHkoKSkKICAgICBGVDJTdWJzZXRUb1R5cGU4KGZhY2UsIG1TdWJzZXQuZ2V0KCks
IG1TdWJzZXQuTGVuZ3RoKCksIHdtb2RlLCBhRmlsZSk7CiB9CiAKICNlbHNlCiAjaWZkZWYgTU9a
X0VOQUJMRV9GUkVFVFlQRTIKSW5kZXg6IGdmeC9zcmMvcHMvbnNGb250TWV0cmljc1BTLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvbW96aWxsYS9nZngvc3JjL3BzL25zRm9udE1ldHJp
Y3NQUy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUgLTcgLXAgLXIxLjI2IG5z
Rm9udE1ldHJpY3NQUy5oCi0tLSBnZngvc3JjL3BzL25zRm9udE1ldHJpY3NQUy5oCTIwIEF1ZyAy
MDA0IDA5OjExOjI1IC0wMDAwCTEuMjYKKysrIGdmeC9zcmMvcHMvbnNGb250TWV0cmljc1BTLmgJ
MTUgT2N0IDIwMDQgMjI6NTU6MTIgLTAwMDAKQEAgLTMzNywxOCArMzM3LDE1IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiAgIG5zWGZ0RW50cnkgKm1FbnRyeTsKICAgRlRfRmFjZSBnZXRGVEZhY2UoKTsK
IAogcHJvdGVjdGVkOgogICBQUlVpbnQxNiAgICAgICAgbVBpeGVsU2l6ZTsKLSAgRlRDX0ltYWdl
X0Rlc2MgIG1JbWFnZURlc2M7CiAgIEZUX0xpYnJhcnkgICAgICBtRnJlZVR5cGVMaWJyYXJ5Owot
ICBGVENfTWFuYWdlciAgICAgbUZUQ2FjaGVNYW5hZ2VyOwotICBGVENfSW1hZ2VfQ2FjaGUgbUlt
YWdlQ2FjaGU7CiAKICAgaW50ICAgICBhc2NlbnQoKTsKICAgaW50ICAgICBkZXNjZW50KCk7CiAg
IFBSQm9vbCAgZ2V0WEhlaWdodCh1bnNpZ25lZCBsb25nICZhVmFsKTsKICAgaW50ICAgICBtYXhf
YXNjZW50KCk7CiAgIGludCAgICAgbWF4X2Rlc2NlbnQoKTsKICAgaW50ICAgICBtYXhfd2lkdGgo
KTsKQEAgLTQ3NCwxNyArNDcxLDE1IEBAIHB1YmxpYzoKICAgbnNYZnRUeXBlOEdlbmVyYXRvcigp
OwogICB+bnNYZnRUeXBlOEdlbmVyYXRvcigpOwogICBuc3Jlc3VsdCBJbml0KG5zWGZ0RW50cnkq
IGFGY2UpOwogICB2b2lkICBHZW5lcmF0ZVBTRm9udChGSUxFKiBhRmlsZSk7CiAKIHByb3RlY3Rl
ZDoKICAgbnNYZnRFbnRyeSAqbUVudHJ5OwotICBGVENfSW1hZ2VfRGVzYyAgbUltYWdlRGVzYzsK
ICAgRlRfTGlicmFyeSAgICAgIG1GcmVlVHlwZUxpYnJhcnk7Ci0gIEZUQ19NYW5hZ2VyICAgICBt
RlRDYWNoZU1hbmFnZXI7CiB9OwogI2Vsc2UKICNpZmRlZiBNT1pfRU5BQkxFX0ZSRUVUWVBFMgog
Y2xhc3MgbnNGVDJUeXBlOEdlbmVyYXRvciA6IHB1YmxpYyBuc1BTRm9udEdlbmVyYXRvciB7CiBw
dWJsaWM6CiAgIG5zRlQyVHlwZThHZW5lcmF0b3IoKTsKICAgfm5zRlQyVHlwZThHZW5lcmF0b3Io
KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>