<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>216431</bug_id>
          
          <creation_ts>2020-09-12 02:25:50 -0700</creation_ts>
          <short_desc>Addressing feedback on r266936</short_desc>
          <delta_ts>2020-09-12 03:38:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1687909</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-12 02:25:50 -0700</bug_when>
    <thetext>Addressing feedback on r266936</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687910</commentid>
    <comment_count>1</comment_count>
      <attachid>408588</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-12 02:27:18 -0700</bug_when>
    <thetext>Created attachment 408588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687911</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-12 03:37:23 -0700</bug_when>
    <thetext>Committed r266977: &lt;https://trac.webkit.org/changeset/266977&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408588.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687912</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-12 03:38:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/68759981&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408588</attachid>
            <date>2020-09-12 02:27:18 -0700</date>
            <delta_ts>2020-09-12 03:37:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216431-20200912022717.patch</filename>
            <type>text/plain</type>
            <size>129811</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzNiNjlhMGQ3ODJhNDc0
MjA2MTY5ZTMyNzU1MzM3NTMwMzNmOGY4Yi4uNmM1MDY4NzcwNjlhMDNhYzVkN2JjYjQ0MzIxNDc0
MTQ0NjRhYTY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA5LTEyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkcmVzc2lu
ZyBmZWVkYmFjayBvbiByMjY2OTM2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTY0MzEKKworICAgICAgICBVbnJldmlld2VkLgorCisgICAgICAgIEkg
ZGlkbid0IGZvbGxvdyB0aGUgcmV2aWV3ZXIncyBhZHZpY2UgdGhvcm91Z2hseS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29y
ZVRleHQuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3Jl
VGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250Q29yZVRleHQuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFn
ZUNvcmVUZXh0LmNwcC4KKwogMjAyMC0wOS0xMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4Zmll
bGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gTWlncmF0ZSBDb3JlVGV4dC1zcGVjaWZp
YyBjb2RlIGZyb20gKioqQ29jb2EubW0gdG8gKioqQ29yZVRleHQuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IGQ3N2Q4M2U3ODE2MjFlNmJjNGYzNjE1ZmNkNjNlYmRiNTU1N2E3NWEu
LjkyNTk0MDc0YmI5NGUwZGNmOGI1MTVjODI1YTY5NzI3ZDBmYTgzYjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zMjEsMTAgKzMyMSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR1BVTGF5ZXIubW0KIAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
Rm9udENvcmVUZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURh
dGFDb3JlVGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4
dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVJvdGF0aW9uU2Vzc2lvblZULm1tCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CmluZGV4IDllMDJjZDZmZmY4MTBmMGUxZDAwOTRiZmYzZmI0MmZjOGVlZTk4
ZTIuLmJlZWFiNmM5OTI3ZDU0OGJkNWJmOGUwNTU4YjU3NmY2OTE5NDAwMDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dApAQCAtMzY5LDEwICszNjksMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViQ29yZURlY29tcHJlc3Npb25TZXNzaW9uLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9XZWJHTExheWVyLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVmlkZW9UcmFja1ByaXZhdGVXZWJNLmNwcAotcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNz
L2N0L0ZvbnRDb3JlVGV4dC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURh
dGFDb3JlVGV4dC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0dseXBoUGFnZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNDYzN2NlNDgyZWQ0MWNjODJlMTE2NDdkNmNjY2I1MDU4NmQwZWU5OC4uMGUwYTU3ODBm
NDgzN2Y2MDg1NzBiMTQwYmM4ZWJlMTBiYzMwMWUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTgxNDMsNyArMTgxNDMsNyBA
QAogCQkJbmFtZSA9IEluc3BlY3RvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
Ci0JCTFDNkZEOEFBMjUwQTI5MjQwMEQ2RTkyMCAvKiBjdCAqLyA9IHsKKwkJMUM2RkQ5MjAyNTBD
Q0E2NDAwRDZFOTIwIC8qIGNvcmV0ZXh0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQkxQzZGRDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAgKi8sCkBAIC0xODE1MSw3ICsxODE1MSw3IEBACiAJCQkJMUM2RkQ4QUMyNTBB
Mjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8sCiAJCQkJMUM2
RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8qIEdseXBoUGFnZUNvcmVUZXh0LmNwcCAqLywKIAkJCSk7
Ci0JCQlwYXRoID0gY3Q7CisJCQlwYXRoID0gY29yZXRleHQ7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwogCQl9OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyogaW5zcGVjdG9yICov
ID0gewpAQCAtMjU4NjcsOCArMjU4NjcsOCBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0
RiAvKiBjZyAqLywKIAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJ
CQkJMkNFMTE4OTgyNEMyNDAyQzAwMzc3MEU5IC8qIGNvcmVpbWFnZSAqLywKKwkJCQkxQzZGRDky
MDI1MENDQTY0MDBENkU5MjAgLyogY29yZXRleHQgKi8sCiAJCQkJOTMzMkFCM0IxNjUxNUQ3NzAw
RDgyN0VDIC8qIGNwdSAqLywKLQkJCQkxQzZGRDhBQTI1MEEyOTI0MDBENkU5MjAgLyogY3QgKi8s
CiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICovLAogCQkJCTBGRTVGQkM5MUMz
REQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMgKi8sCiAJCQkJQTc1RThCN0YwRTFERTJCMDAw
N0YyNDgxIC8qIGZpbHRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyOGI1MTI0M2U1Nzg1YTA2MmRmZWViYmU3NjM3ZTUzMDY2MDQ5NjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9G
b250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2LTIwMjAsIDIwMTYgQXBwbGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKKworI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgUExBVEZP
Uk0oQ09DT0EpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UK
KyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQ29uZnVzaW5nbHksIGV2ZW4gd2hlbiBDR0ZvbnRSZW5kZXJp
bmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKSByZXR1cm5zIHRydWUsIENHQ29udGV4dFNldFNo
b3VsZFNtb290aEZvbnRzKCkgc3RpbGwgaW1wYWN0cyB0ZXh0CisvLyByZW5kZXJpbmcsIHdoaWNo
IGlzIHdoeSB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlICJzdWJwaXhlbCBhbnRpYWxpYXNpbmciIHJh
dGhlciB0aGFuICJzbW9vdGhpbmciIHRlcm1pbm9sb2d5LgorYm9vbCBGb250Q2FzY2FkZTo6aXNT
dWJwaXhlbEFudGlhbGlhc2luZ0F2YWlsYWJsZSgpCit7CisjaWYgSEFWRShDR19GT05UX1JFTkRF
UklOR19HRVRfRk9OVF9TTU9PVEhJTkdfRElTQUJMRUQpCisgICAgc3RhdGljIGJvb2wgc3VicGl4
ZWxBbnRpYWxpYXNpbmdFbmFibGVkOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxh
ZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdKCkgeworICAgICAgICBzdWJwaXhl
bEFudGlhbGlhc2luZ0VuYWJsZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rp
c2FibGVkKCk7CisgICAgfSk7CisgICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxl
ZDsKKyNlbGlmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5
cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAg
IENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29u
dGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkpOworICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRa
ZXJvOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
IENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAt
IDFdLCBtYXRyaXgpOworICAgICAgICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0u
eCArIGFkdmFuY2Uud2lkdGg7CisgICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kg
LSAxXS55ICsgYWR2YW5jZS5oZWlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworI2lmIEVOQUJMRShMRVRURVJQUkVTUykKKyAgICByZXR1cm4gY29udGV4dC50ZXh0RHJh
d2luZ01vZGUoKS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkxldHRlcnByZXNzKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dH
bHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3sK
KyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTZXRUZXh0
UG9zaXRpb24oY29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOworCisgICAgY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBW
ZWN0b3I8Q0dQb2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOworICAgIGlmIChwbGF0Zm9ybURh
dGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAg
IENHQWZmaW5lVHJhbnNmb3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9y
bU1ha2UoMCwgLTEsIDEsIDAsIDAsIDApOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0ZXh0
TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKKyAgICAgICAgQ0dBZmZp
bmVUcmFuc2Zvcm0gcnVuTWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodGV4dE1hdHJp
eCwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRN
YXRyaXgocnVuTWF0cml4LCBjb250ZXh0KTsKKworICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+
IHRyYW5zbGF0aW9ucyhjb3VudCk7CisgICAgICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRp
b25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMu
ZGF0YSgpLCBjb3VudCk7CisKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
Q0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7
CisKKyAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2lu
dC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGlu
ZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1NpemUgdHJhbnNs
YXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0
ZUxlZnRUcmFuc2Zvcm0pOworICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5
QWZmaW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0
aCwgcG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9ybSk7CisgICAgICAg
ICAgICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ldLndpZHRoOworICAgICAgICAgICAgcG9zaXRp
b24ueSArPSBhZHZhbmNlc1tpXS5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgQ1RGb250RHJh
d0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwg
Y291bnQsIGNvbnRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9y
aXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50
KTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBo
cywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7
CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCB0cnVlKTsK
KworICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRD
VE0oY2dDb250ZXh0KTsKKyAgICBib29sIGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgPSBX
VEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6OmlzSW50ZWdyYWwoY29u
dGV4dFRyYW5zZm9ybS5kKSAmJiBjb250ZXh0VHJhbnNmb3JtLmIgPT0gMC5mICYmIGNvbnRleHRU
cmFuc2Zvcm0uYyA9PSAwLmY7CisgICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNvbnRleHRUcmFuc2Zv
cm0uYiB8fCBjb250ZXh0VHJhbnNmb3JtLmMpICYmIChjb250ZXh0VHJhbnNmb3JtLmEgfHwgY29u
dGV4dFRyYW5zZm9ybS5kKSk7CisgICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uID0gaXNU
cmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSB8fCAoIWlzUm90YXRlZCAmJiBjb250ZXh0LnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cygpKTsKKworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBp
eGVsUG9zaXRpb25Gb250cyhjZ0NvbnRleHQsIHRydWUpOworICAgIENHQ29udGV4dFNldFNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24p
OworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hv
clBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisgICAg
aWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGJvb2wg
c2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1
ZTsKKworICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKKyAgICAgICAgc21vb3Ro
aW5nTW9kZSA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKKworICAgIHN3aXRjaCAo
c21vb3RoaW5nTW9kZSkgeworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2Vk
OgorICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nOgorICAgIGNhc2UgRm9udFNt
b290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZEFudGlhbGlh
cyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5v
U21vb3RoaW5nOgorICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgc2hv
dWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KCFzaG91bGRVc2VTbW9vdGhpbmcoKSkKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxz
ZTsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgb3JpZ2luYWxTaG91bGRV
c2VGb250U21vb3RoaW5nID0gQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0
KTsKKyAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21v
b3RoaW5nKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQs
IHNob3VsZFNtb290aEZvbnRzKTsKKyNlbmRpZgorCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZEFu
dGlhbGlhcyA9IENHQ29udGV4dEdldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQpOworICAgIGlm
IChzaG91bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENH
Q29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisK
KyAgICBib29sIHVzZUxldHRlcnByZXNzRWZmZWN0ID0gc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZl
Y3QoY29udGV4dCk7CisgICAgVU5VU0VEX1ZBUklBQkxFKHVzZUxldHRlcnByZXNzRWZmZWN0KTsK
KyAgICBGbG9hdFBvaW50IHBvaW50ID0gYW5jaG9yUG9pbnQ7CisKKyAgICBDR0FmZmluZVRyYW5z
Zm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIGlmICghcGxhdGZv
cm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkpCisgICAgICAgIG1hdHJpeCA9IENURm9udEdldE1h
dHJpeChwbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKKyAg
ICBtYXRyaXguZCA9IC1tYXRyaXguZDsKKyAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09i
bGlxdWUoKSkgeworICAgICAgICBzdGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRo
ZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MCk7CisgICAgICAgIGlmIChwbGF0Zm9y
bURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAg
ICAgICAgICBpZiAoZm9udC5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAgICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRy
aXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNv
bmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEs
IDAsIDApKTsKKyAgICB9CisgICAgU2NvcGVkVGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNn
Q29udGV4dCk7CisKKyAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOworICAgIENH
Q29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CisKKyAg
ICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29s
b3Igc2hhZG93Q29sb3I7CisgICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvcik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9
IGNvbnRleHQuZ2V0Q1RNKCk7CisgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQu
c3ludGhldGljQm9sZE9mZnNldCgpOworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFj
b250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpIHsKKyAgICAgICAg
RmxvYXRTaXplIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5t
YXBTaXplKEZsb2F0U2l6ZSgxLCAwKSk7CisgICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVu
Z3RoSW5EZXZpY2VQaXhlbHMgPSBzcXJ0Zihob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVs
cy53aWR0aCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhv
cml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRT
aXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkpOworICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRM
ZW5ndGhJbkRldmljZVBpeGVscykgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBz
Y2FsZWQgZG93biBjb250ZXh0IHdvbid0IGJsb3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlw
aHMuCisgICAgICAgICAgICBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGlj
Qm9sZE9mZnNldCwgc3ludGhldGljQm9sZE9mZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5E
ZXZpY2VQaXhlbHMpOworICAgICAgICB9CisgICAgfTsKKworICAgIGJvb2wgaGFzU2ltcGxlU2hh
ZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwg
JiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEu
aXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFj
b250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cp
IHsKKyAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2Yg
cmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFz
aW5nLgorICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CisgICAgICAgIENvbG9yIGZpbGxD
b2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xv
ciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBo
YUFzRmxvYXQoKSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xv
cik7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0
LndpZHRoKCk7CisgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMs
IHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRv
d24gaXMgbmVnYXRpdmUuCisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsg
c2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSA/IC0xIDogMSk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChz
aGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmds
eXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAg
ICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hh
ZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKGZpbGxDb2xvcik7CisgICAgfQorCisjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQor
ICAgIGlmICh1c2VMZXR0ZXJwcmVzc0VmZmVjdCkKKyAgICAgICAgc2hvd0xldHRlcnByZXNzZWRH
bHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgZWxz
ZQorI2VuZGlmCisgICAgeworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBm
b250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgfQorCisgICAgaWYgKHN5bnRoZXRpY0JvbGRP
ZmZzZXQpCisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54
KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGds
eXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUds
eXBocyk7CisKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQorICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZv
bnRzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKKyNlbmRpZgor
CisgICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91
bGRBbnRpYWxpYXMpOworfQorCitib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVt
Rm9udCgpIGNvbnN0Cit7CisgICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgp
OworICAgIHJldHVybiBpc1N5c3RlbUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250
KCkpOworfQorCisvLyBGSVhNRTogVXNlIHRoaXMgb24gYWxsIHBvcnRzLgorY29uc3QgRm9udCog
Rm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKK3sKKyAgICBVQ2hhcjMyIGJhc2VD
aGFyYWN0ZXI7CisgICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOworICAgIFUxNl9O
RVhUKGNoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rl
cik7CisKKyAgICBHbHlwaERhdGEgYmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZv
ckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7CisKKyAgICBp
ZiAoIWJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKGxlbmd0aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQorICAgICAgICByZXR1
cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OworCisgICAgYm9vbCB0cmllZEJhc2VDaGFy
YWN0ZXJGb250ID0gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tS
YW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBm
YWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAg
ICAgIGlmICghZm9udCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFj
dGVyIDw9IDB4MDZmZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisgICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAg
ICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5o
YXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2Vu
SWRlb2dyYXBoRm9udCgpOworICAgICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24u
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVk
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250
LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCk7CisgICAgICAgICAgICAgICAgR2x5cGgg
dmVydGljYWxSaWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIo
YmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9
PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICAgICAgICAgICAgICBmb250
ID0gJnZlcnRpY2FsUmlnaHRGb250OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBGb250JiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZv
bnQoKTsKKyAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5n
bHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodXBy
aWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgICAgICAg
ICAgICAgIGZvbnQgPSAmdXByaWdodEZvbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZm9udCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAg
ICAgICB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gdHJ1ZTsKKworICAgICAgICBpZiAoZm9udC0+
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkK
KyAgICAgICAgICAgIHJldHVybiBmb250OworICAgIH0KKworICAgIGlmICghdHJpZWRCYXNlQ2hh
cmFjdGVyRm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5mb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5m
b250OworCisgICAgcmV0dXJuIEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3Jl
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllMjI1MWQ2YWRhOWEwZWEwYzQ4MTJmN2M1NTYzN2Y5
ZjA5NDg5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCkBAIC0wLDAgKzEsNzcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJPcGVuVHlwZUNHLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUg
IkxvY2FsZUNvY29hLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgor
I2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKK3sKKyAgICByZXR1cm4gYSAm
JiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NG
Q29tcGFyZUVxdWFsVG87Cit9CisKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhD
VEZvbnRSZWYgZm9udCkKK3sKKyAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtD
VEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOworfQorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKK2Jvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmlu
Z1JlZiBmb250RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBu
b3QgcGVyZm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+Cisg
ICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlv
biBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCisgICAgcmV0dXJuIChDRlN0cmluZ0NvbXBh
cmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pCisgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiks
IGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Cit9CisKK3N0YXRpYyBj
b25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKKworc3RhdGljIGJvb2wg
c2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQp
KTsKKworICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFt
ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQorICAgICAgICB8
fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRp
Y2EiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgp
LCBDRlNUUigiLkhlbHZldGljYSBOZXVlVUkiKSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBib29s
IG5lZWRzQXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQoreworICAgIHJl
dHVybiBmYW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENG
U1RSKCJUaW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5h
bWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZShmYW1pbHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMg
Ym9vbCBpc0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCit7CisgICAgcmV0dXJuIGZh
bWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhl
bSIpKTsKK30KKworYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQg
dGFibGVUYWcpCit7CisgICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFp
bGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBp
ZiAoIXRhYmxlVGFncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENGSW5kZXggbnVtVGFi
bGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4
IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byB0
YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKKyAg
ICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9u
dFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQorewor
ICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0
Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYgKCF0YWJsZVRhZ3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlH
ZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nh
c3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7CisgICAgICAgIGlmICh0YWcg
PT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5p
dCgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0
YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7CisjZWxzZQorICAgIG1fc3ludGhldGljQm9sZE9mZnNl
dCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBtX3NjcmlwdENhY2hlID0gMDsKKyAgICBtX3Njcmlw
dEZvbnRQcm9wZXJ0aWVzID0gbnVsbHB0cjsKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJ
KCkpCisgICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOworI2VuZGlmCisKKyAgICB1bnNpZ25l
ZCB1bml0c1BlckVtID0gQ1RGb250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5mb250KCkp
OworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBDR0Zs
b2F0IGNhcEhlaWdodCA9IHBvaW50U2l6ZSA/IENURm9udEdldENhcEhlaWdodChtX3BsYXRmb3Jt
RGF0YS5mb250KCkpIDogMDsKKyAgICBDR0Zsb2F0IGxpbmVHYXAgPSBwb2ludFNpemUgPyBDVEZv
bnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgYXNj
ZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0QXNjZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkg
OiAwOworICAgIENHRmxvYXQgZGVzY2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldERlc2NlbnQo
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7CisKKyAgICAvLyBUaGUgT3BlbiBGb250IEZvcm1h
dCBkZXNjcmliZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGFzIGZvbGxvd3M6Cisg
ICAgLy8gIklmIHNldCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIE9TLzIuc1R5
cG9Bc2NlbmRlciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIrIE9TLzIuc1R5cG9MaW5lR2FwIGFzIGEg
dmFsdWUgZm9yIGRlZmF1bHQgbGluZSBzcGFjaW5nIGZvciB0aGlzIGZvbnQuIgorICAgIC8vIE9u
IE9TIFgsIHdlIG9ubHkgYXBwbHkgdGhpcyBydWxlIGluIHRoZSBpbXBvcnRhbnQgY2FzZSBvZiBm
b250cyB3aXRoIGEgTUFUSCB0YWJsZS4KKyAgICBpZiAoZm9udEhhc1RhYmxlKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBrQ1RGb250VGFibGVNQVRIKSkgeworICAgICAgICBzaG9ydCB0eXBvQXNj
ZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXA7CisgICAgICAgIGlmIChPcGVuVHlwZTo6dHJ5
R2V0VHlwb01ldHJpY3MobV9wbGF0Zm9ybURhdGEuZm9udCgpLCB0eXBvQXNjZW50LCB0eXBvRGVz
Y2VudCwgdHlwb0xpbmVHYXApKSB7CisgICAgICAgICAgICBhc2NlbnQgPSBzY2FsZUVtVG9Vbml0
cyh0eXBvQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgICAgIGRlc2Nl
bnQgPSAtc2NhbGVFbVRvVW5pdHModHlwb0Rlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXpl
OworICAgICAgICAgICAgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9MaW5lR2FwLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZmFtaWx5
TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUobV9wbGF0Zm9ybURhdGEuZm9udCgp
KSk7CisKKyAgICAvLyBEaXNhYmxlIGFudGlhbGlhc2luZyB3aGVuIHJlbmRlcmluZyB3aXRoIEFo
ZW0gYmVjYXVzZSBtYW55IHRlc3RzIHJlcXVpcmUgdGhpcy4KKyAgICBpZiAoaXNBaGVtRm9udChm
YW1pbHlOYW1lLmdldCgpKSkKKyAgICAgICAgbV9hbGxvd3NBbnRpYWxpYXNpbmcgPSBmYWxzZTsK
KworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVs
dmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQorICAgIC8vIHZlcnRpY2Fs
IG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUg
ZmFjdG8KKyAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUg
aXMgdG9vIGJpZyBhbmQgaXMKKyAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNp
bmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKKyAgICAvLyBhbmQgYWRkIGl0
IHRvIHRoZSBhc2NlbnQuCisgICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6TG9jYWwgJiYgbmVl
ZHNBc2NlbnRBZGp1c3RtZW50KGZhbWlseU5hbWUuZ2V0KCkpKQorICAgICAgICBhc2NlbnQgKz0g
c3RkOjpyb3VuZCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1Zik7CisjZW5kaWYKKworICAgIC8v
IENvbXB1dGUgbGluZSBzcGFjaW5nIGJlZm9yZSB0aGUgbGluZSBtZXRyaWNzIGhhY2tzIGFyZSBh
cHBsaWVkLgorICAgIGZsb2F0IGxpbmVTcGFjaW5nID0gbHJvdW5kZihhc2NlbnQpICsgbHJvdW5k
ZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
Ly8gSGFjayBIaXJhZ2lubyBsaW5lIG1ldHJpY3MgdG8gYWxsb3cgcm9vbSBmb3IgbWFya2VkIHRl
eHQgdW5kZXJsaW5lcy4KKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTM4NjE4Mz4KKyAgICBpZiAo
ZGVzY2VudCA8IDMgJiYgbGluZUdhcCA+PSAzICYmIGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdIYXNQ
cmVmaXgoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhpcmFnaW5vIikpKSB7CisgICAgICAgIGxp
bmVHYXAgLT0gMyAtIGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyNlbmRp
ZgorICAgIAorICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmll
bnRhdGlvbjo6VmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAg
ICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3Jt
RGF0YS5jdEZvbnQoKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENHRmxvYXQg
YWRqdXN0bWVudCA9IHNob3VsZFVzZUFkanVzdG1lbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA/
IGNlaWwoKGFzY2VudCArIGRlc2NlbnQpICoga0xpbmVIZWlnaHRBZGp1c3RtZW50KSA6IDA7CisK
KyAgICBsaW5lR2FwID0gY2VpbGYobGluZUdhcCk7CisgICAgbGluZVNwYWNpbmcgPSBjZWlsKGFz
Y2VudCkgKyBhZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIGxpbmVHYXA7CisgICAgYXNjZW50
ID0gY2VpbGYoYXNjZW50ICsgYWRqdXN0bWVudCk7CisgICAgZGVzY2VudCA9IGNlaWxmKGRlc2Nl
bnQpOworCisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBmb250RmFtaWx5U2hvdWxk
Tm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOworI2VuZGlmCisKKyAgICBDR0Zs
b2F0IHhIZWlnaHQgPSAwOworICAgIGlmIChtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKKyAgICAg
ICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsKSB7CisgICAgICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVy
ICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNl
bGluZSwgYW5kIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0
byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhl
IGJhc2VsaW5lLgorICAgICAgICAgICAgR2x5cGggeEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIo
J3gnKTsKKyAgICAgICAgICAgIGlmICh4R2x5cGgpCisgICAgICAgICAgICAgICAgeEhlaWdodCA9
IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeEhlaWdodCA9IENURm9udEdldFhIZWlnaHQobV9w
bGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4SGVpZ2h0
ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgp
OworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBI
ZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5l
U3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVQb3Np
dGlvbigtQ1RGb250R2V0VW5kZXJsaW5lUG9zaXRpb24obV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7
CisgICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVUaGlja25lc3MoQ1RGb250R2V0VW5kZXJs
aW5lVGhpY2tuZXNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOworfQorCit2b2lkIEZvbnQ6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgIG1f
bWF4Q2hhcldpZHRoID0gMDsKKworICAgIGF1dG8gb3MyVGFibGUgPSBhZG9wdENGKENURm9udENv
cHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRUYWJsZU9TMiwga0NURm9udFRh
YmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExlbmd0
aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZE
YXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdDaGFy
V2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0g
c2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0o
KSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgfQorCisgICAgYXV0byBoZWFkVGFibGUg
PSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRU
YWJsZUhlYWQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIGlmIChoZWFkVGFi
bGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKKyAgICAgICAg
Y29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAg
ICAgdW5zaWduZWQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOworICAgICAgICBT
SW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOworICAgICAgICBTSW50MTYg
eE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOworICAgICAgICBmbG9hdCBkaWZmID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGgg
PSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1w
bGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhl
eSBhcmUgbm9uLXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK2Jvb2wgRm9u
dDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENh
cHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyNpZiAoUExB
VEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorICAg
IEdseXBoIGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAoIWds
eXBoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fw
cykgeworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogeworICAgICAgICBhdXRvJiBz
dXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOworICAgICAgICByZXR1cm4g
c3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0K
KyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7CisgICAgICAgIGF1dG8mIHN1cHBv
cnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOworICAgICAgICByZXR1cm4gc3Vw
cG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKKyAgICAgICAgYXV0byYgc3VwcG9y
dGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1
cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9Cisg
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogeworICAgICAgICBhdXRvJiBzdXBw
b3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKKyAgICAgICAgcmV0dXJu
IHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZh
cmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOworCisgICAgc3dpdGNoIChm
b250VmFyaWFudENhcHMpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAg
Y2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
QWxsU21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1
cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorI2VuZGlmCit9CisKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkg
JiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorc3RhdGljIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXks
IGludCByYXdWYWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmcmF3VmFsdWUpKTsKKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVG
ZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKKyAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJS
QVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJh
d1ZhbHVlKQoreworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5
KSk7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7
CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktl
eSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKKyAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVuaW9u
Qml0VmVjdG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQorewor
ICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOworICAgIHJl
c3VsdC5lbnN1cmVTaXplKGxlbmd0aCk7CisgICAgQ0ZJbmRleCBtaW4gPSAwOworICAgIHdoaWxl
IChtaW4gPCBsZW5ndGgpIHsKKyAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3Rv
ckdldEZpcnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWlu
KSwgMSk7CisgICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOworICAgICAgICBt
aW4gPSBuZXh0SW5kZXggKyAxOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5
cGVDb3ZlcmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9y
JiByZXN1bHQpCit7CisgICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9w
dENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVu
VHlwZURpY3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMo
cmVzdWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNv
dmVyYWdlKGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3Im
IHJlc3VsdCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0
Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVU
eXBlRGljdGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3Rv
cnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6Omds
eXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3Vw
cG9ydGVkQnlTbWFsbENhcHMpIHsKKyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fw
cyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJz
bWNwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fw
cy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlw
ZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1f
Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBt
X2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Cit9CisKK2NvbnN0IEJpdFZlY3Rv
ciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAoreworICAgIGlm
ICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5U
eXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBo
c1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RPcGVuVHlw
ZUNvdmVyYWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNT
dXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVD
b3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0
Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUo
KSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBl
ckNhc2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlw
aHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3Im
IEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRl
ZEJ5UGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVy
YWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0
ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uo
a0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0
YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAg
fQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOworfQor
Citjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcygp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcykgewor
ICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwor
ICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0
YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7Cisg
ICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRh
KCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAg
ICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBl
dGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFn
ZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1E
YXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVl
KCk7Cit9CisjZW5kaWYKKworc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9u
dChDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljKQoreworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoc3ludGhldGljQm9sZCkKKyAgICAgICAgZm9udFRyYWl0cyB8PSBr
Q1RGb250Qm9sZFRyYWl0OworICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCisgICAgICAgIGZvbnRU
cmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMg
c2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOworCisgICAg
Ym9vbCB1c2VkU3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkg
JiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7CisgICAgYm9vbCB1c2Vk
U3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAh
KHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9y
bURhdGEgc2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRT
eW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7CisKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRl
KHNjYWxlZEZvbnREYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0
dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIHJldHVybiBDRkRpY3Rpb25hcnlD
b250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rp
b25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVm
IGZlYXR1cmUpCit7CisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUs
IGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5z
S2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKK30KKwor
c3RhdGljIGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGlj
dGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0
dXJlKSk7CisgICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsK
KyAgICBpbnQgcmF3VmFsdWU7CisgICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxD
Rk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBl
RmVhdHVyZVZhbHVlKSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1
ZSwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVm
Pih0YWcpIDogV1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQs
IGludD4gdHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFT
U0VSVChpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAgaW50IHJhd1R5cGU7CisgICAg
Q0ZOdW1iZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAg
YXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmF3VHlwZSk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpbnQg
cmF3U2VsZWN0b3I7CisgICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51
bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxl
Y3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxl
Y3Rvciwga0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCBy
YXdTZWxlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVj
dG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQoreworICAgIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVz
KGZvbnQpKTsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0
dXJlcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyAr
K2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8
Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBp
KSk7CisgICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlw
ZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGludCByYXdGZWF0dXJlS2V5OworICAgICAgICBDRk51bWJlckdl
dFZhbHVlKGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKKyAg
ICAgICAgaWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJh
eVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlw
ZVNlbGVjdG9yc0tleSkpOworICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChmZWF0dXJlU2VsZWN0b3JzKTsKKyAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBq
IDwgc2VsZWN0b3JzQ291bnQ7ICsraikgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmVTZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7CisgICAgICAgICAgICBDRk51bWJlclJl
ZiBpc0RlZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOwor
ICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpbnQgcmF3SXNEZWZhdWx0OworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShpc0RlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOworICAgICAgICAg
ICAgaWYgKCFyYXdJc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGlubGlu
ZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlS
ZWYgZmVhdHVyZSwgQ1RGb250UmVmIGZvbnQpCit7CisgICAgYm9vbCBpc09wZW5UeXBlID0gaXNP
cGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlw
ZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQor
ICAgICAgICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQg
Zm9ybWF0LgorICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOworICAgIGlmIChpc09wZW5UeXBlKSB7CisgICAgICAgIGF1dG8gZmVhdHVyZVRh
ZyA9IG9wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYg
KENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQorICAgICAgICAgICAg
fHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCisgICAgICAgICAg
ICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKKyAgICAgICAg
ICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKKyAg
ICAgICAgICAgIGludCByYXdaZXJvID0gMDsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gemVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd1plcm8pKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRh
Zy52YWx1ZSgpKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFs
dWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFy
eUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOworICAgICAg
ICB9CisgICAgfQorICAgIGlmIChpc1RydWVUeXBlKSB7CisgICAgICAgIGF1dG8gdHJ1ZVR5cGVG
ZWF0dXJlUGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKHRydWVU
eXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVy
ZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZl
YXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgeworICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYg
ZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dl
ckNhc2VUeXBlLCBmb250KSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShy
ZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0
U2VsZWN0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJL
ZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJ
ZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5m
aXJzdCA9PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0g
a1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25k
ID09IGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7CisgICAgICAgICAgICBDRkRpY3Rp
b25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJL
ZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXkpKTsKKyAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3Ig
PSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQp
KQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0
LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RG
b250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJy
YXlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0
dHJpYnV0ZSkpKTsKKyAgICBpZiAoIWZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZm9udDsKKyAg
ICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7
CisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVh
dHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0
aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMu
Z2V0KCksIGkpKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgp
LCByZW1vdmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7CisgICAgfQorICAgIENGVHlw
ZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKKyAgICBD
RlR5cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlz
KSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNj
cmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0
cmlidXRlcy5nZXQoKSkpOworICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRo
QXR0cmlidXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlw
dG9yLmdldCgpKSk7Cit9CisKK1JlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5
bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0Cit7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZv
cm1EYXRhLnNpemUoKTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZl
YXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZURlcml2YXRp
dmVGb250KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwg
Zm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0
YS5zeW50aGV0aWNPYmxpcXVlKCkpOworfQorCitSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAoreworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2Fs
ZUZhY3RvcjsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250
RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3Io
Zm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKKworICAgIHJldHVybiBjcmVh
dGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCks
IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Cit9CisKK3ZvaWQgRm9udDo6YXBw
bHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5n
R2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2Vy
bmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3Ry
aW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Cit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KKyNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMp
CisgICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhz
UG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0
c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikKKyAgICB7CisgICAgICAgIHJh
bmdlLmxvY2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocmFuZ2UubG9jYXRpb24sIHN0YXRpY19j
YXN0PENGSW5kZXg+KDApKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgp
KSk7CisgICAgICAgIGlmIChyYW5nZS5sZW5ndGggPCAwKSB7CisgICAgICAgICAgICByYW5nZS5s
ZW5ndGggPSBzdGQ6Om1pbihyYW5nZS5sb2NhdGlvbiwgLXJhbmdlLmxlbmd0aCk7CisgICAgICAg
ICAgICByYW5nZS5sb2NhdGlvbiA9IHJhbmdlLmxvY2F0aW9uIC0gcmFuZ2UubGVuZ3RoOworICAg
ICAgICAgICAgZ2x5cGhCdWZmZXIucmVtb3ZlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnbHlw
aEJ1ZmZlci5tYWtlSG9sZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJh
bmdlLmxlbmd0aCwgdGhpcyk7CisKKyAgICAgICAgKm5ld0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1
ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgICAgICpuZXdBZHZhbmNlc1Bv
aW50ZXIgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAg
ICAgKm5ld09mZnNldHNQb2ludGVyID0gZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlw
aEluZGV4KTsKKyAgICAgICAgKm5ld0luZGljZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0
c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpOworICAgIH07CisKKyAgICBhdXRvIHN1YnN0
cmluZyA9IHRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IHN1YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
KyAgICBhdXRvIGxvY2FsZVN0cmluZyA9IExvY2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlk
ZW50aWZpZXJGcm9tU3RyaW5nKGxvY2FsZSkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAg
ICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29t
cG9zaXRpb24KKyAgICAgICAgfCAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJu
aW5nIDogMCkKKyAgICAgICAgfCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwg
PyBrQ1RGb250U2hhcGVSaWdodFRvTGVmdCA6IDApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAg
ICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ld
IC09IGJlZ2lubmluZ1N0cmluZ0luZGV4OworCisgICAgQ1RGb250U2hhcGVHbHlwaHMoCisgICAg
ICAgIG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLAorICAgICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMo
YmVnaW5uaW5nR2x5cGhJbmRleCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4o
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLAorICAgICAgICByZWlu
dGVycHJldF9jYXN0PENHUG9pbnQqPihnbHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmluZ0dseXBo
SW5kZXgpKSwKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0ds
eXBoSW5kZXgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cGNv
bnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkpLAorICAgICAgICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBi
ZWdpbm5pbmdHbHlwaEluZGV4LAorICAgICAgICBvcHRpb25zLAorICAgICAgICBsb2NhbGVTdHJp
bmcuZ2V0KCksCisgICAgICAgIGhhbmRsZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAg
ICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldICs9
IGJlZ2lubmluZ1N0cmluZ0luZGV4OworCisjZWxzZQorCisgICAgVU5VU0VEX1BBUkFNKGJlZ2lu
bmluZ1N0cmluZ0luZGV4KTsKKyAgICBVTlVTRURfUEFSQU0obG9jYWxlKTsKKyAgICBVTlVTRURf
UEFSQU0odGV4dCk7CisKKyAgICAvLyBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBp
biB2aXN1YWwgb3JkZXIsIGJ1dCBXaWR0aEl0ZXJhdG9yIGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3Jk
ZXIuCisgICAgLy8gVGVtcG9yYXJpbHkgcHV0IHVzIGluIHZpc3VhbCBvcmRlciBqdXN0IGZvciB0
aGUgY2FsbCwgdGhlbiBwdXQgdXMgYmFjayBpbnRvIGxvZ2ljYWwgb3JkZXIgd2hlbgorICAgIC8v
IHRoZSBjYWxsIGlzIGRvbmUuCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9m
IHRoZSBlbnRpcmUgR2x5cGhCdWZmZXI7IHdlJ3JlIGp1c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xl
IGNodW5rIG9mIGl0LgorICAgIC8vIFdpZHRoSXRlcmF0b3IgZW5jb3VudGVycyB0aGUgY2h1bmtz
IG91dCBpbiBsb2dpY2FsIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIG1haW50YWluIHRoYXQgaW52YXJp
YW50LgorICAgIC8vIEV2ZW50dWFsbHksIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkg
d2lsbCByZXZlcnNlIHRoZSB3aG9sZSBidWZmZXIgdG8gcHV0IHRoZSBlbnRpcmUgdGhpbmcKKyAg
ICAvLyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGhhcyBhIHZp
ZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlci4KKyAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwg
Q1RGb250U2hhcGVHbHlwaHMoKSBhY2NlcHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBi
dXQgcmV0dXJucyBpdCBpbiBwaHlzaWNhbAorICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUg
c2Vjb25kIHJldmVyc2UoKSBpbiB0aGlzIGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUg
d2hlbgorICAgIC8vIENURm9udFNoYXBlR2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KKyAgICBpZiAo
dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVy
LnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5u
aW5nR2x5cGhJbmRleCk7CisKKyAgICBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAo
ZW5hYmxlS2VybmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBr
Q1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nOworICAgIENURm9udFRyYW5zZm9ybUdseXBocyht
X3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBo
SW5kZXgpLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJl
Z2lubmluZ0dseXBoSW5kZXgpKSwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJ
bmRleCwgb3B0aW9ucyk7CisjZW5kaWYKKworICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBp
biB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRoZSBvdGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KKyAg
ICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBo
QnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0g
YmVnaW5uaW5nR2x5cGhJbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgZXh0cmFjdE51bWJlcihDRk51
bWJlclJlZiBudW1iZXIpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaWYgKG51bWJlcikK
KyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2go
KQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAg
QVNTRVJUKGN0Rm9udCk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4KKyAgICAv
LyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQg
T3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBk
b2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNp
YWwgY2FzZSBNUy1QR290aGljLgorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0v
NDAzMjkzOD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4K
KyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQg
cGl0Y2guCisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTW9ub3R5cGVDb3JzaXZhCisgICAgLy8gQWNj
b3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBN
b25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBk
b2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisKKyAgICBhdXRvIGZ1
bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CisgICAgYXV0byBm
YW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAg
IGludCBmaXhlZFBpdGNoID0gZXh0cmFjdE51bWJlcihhZG9wdENGKHN0YXRpY19jYXN0PENGTnVt
YmVyUmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9u
dEZpeGVkQWR2YW5jZUF0dHJpYnV0ZSkpKS5nZXQoKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRj
aCA9IChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRy
YWl0KSB8fCBmaXhlZFBpdGNoIHx8IChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdl
dCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxO
YW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJl
KGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZhIikpKTsKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIGlmIChmYW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IikpKSB7CisgICAgICAgIC8v
IFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRj
aCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlz
IHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgorICAgICAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAgfQorI2VuZGlmCit9CisKK0Zsb2F0UmVj
dCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5k
aW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmll
bnRhdGlvblZlcnRpY2FsIDoga0NURm9udE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAw
LCAxKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOworICAgIGlm
IChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJv
dW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOworCisgICAgcmV0dXJu
IGJvdW5kaW5nQm94OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworCisg
ICAgaWYgKHBsYXRmb3JtRGF0YSgpLnNpemUoKSkgeworICAgICAgICBib29sIGhvcml6b250YWwg
PSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpv
bnRhbDsKKyAgICAgICAgQ1RGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBob3Jpem9udGFs
IHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6
b250YWwgOiBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbDsKKyNpZiBVU0UoQ1RGT05UR0VUQURW
QU5DRVNfV09SS0FST1VORCkKKyAgICAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBr
Q0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVT
dWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6
YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOworICAgICAgICBpZiAo
IUNURm9udElzQXBwbGVDb2xvckVtb2ppKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9w
bGF0Zm9ybURhdGEuaGFzVmFyaWF0aW9ucygpKQorICAgICAgICAgICAgQ1RGb250R2V0VW5zdW1t
ZWRBZHZhbmNlc0ZvckdseXBoc0FuZFN0eWxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmll
bnRhdGlvbiwgc3R5bGUsICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAgICAgICBlbHNlCisjZW5k
aWYKKyAgICAgICAgeworICAgICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIG9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGlj
Qm9sZE9mZnNldDsKK30KKworUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0
aEZvckdseXBoKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOworICAg
IGF1dG8gc3ludGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsK
KyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkgeworICAgICAgICBhdXRvIG5ld1BhdGggPSBh
ZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisgICAgICAgIENHUGF0aEFkZFBhdGgobmV3
UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgYXV0byB0cmFuc2xh
dGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIDApOworICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlv
biwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShuZXdQYXRoKSB9Owor
ICAgIH0KKyAgICByZXR1cm4geyBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3Vs
dC5nZXQoKSkpIH07Cit9CisKK2Jvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChV
Q2hhcjMyIGNoYXJhY3RlciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAorewor
ICAgIGlmICh2YXJpYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVuaUNoYXIg
Y29kZVVuaXRzWzJdOworICAgIENHR2x5cGggZ2x5cGhzWzJdOworICAgIENGSW5kZXggY291bnQg
PSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVVbml0cywgY291bnQsIGNoYXJhY3Rlcik7
CisgICAgcmV0dXJuIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1EYXRhKCku
Y3RGb250KCksIGNvZGVVbml0cywgZ2x5cGhzLCBjb3VudCk7Cit9CisKK2Jvb2wgRm9udDo6aXNQ
cm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0Cit7CisgICAgYXV0byBwbGF0Zm9y
bUZvbnQgPSBwbGF0Zm9ybURhdGEoKS5mb250KCk7CisgICAgaWYgKCFwbGF0Zm9ybUZvbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFsbG93IG1vc3Qgbm9uLWljb24gZm9udHMg
dG8gYmFpbCBlYXJseSBoZXJlIGJ5IHRlc3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyICdhJywgd2l0
aG91dCBpdGVyYXRpbmcgb3ZlciBhbGwgYmFzaWMgbGF0aW4gY2hhcmFjdGVycy4KKyAgICBVbmlD
aGFyIGxvd2VyY2FzZUFDaGFyYWN0ZXIgPSAnYSc7CisgICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5
cGg7CisgICAgaWYgKENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1Gb250LCAm
bG93ZXJjYXNlQUNoYXJhY3RlciwgJmxvd2VyY2FzZUFHbHlwaCwgMSkpIHsKKyAgICAgICAgaWYg
KCFDR1JlY3RJc0VtcHR5KENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1G
b250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCAmbG93ZXJjYXNlQUdseXBoLCBudWxscHRy
LCAxKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBzdXBw
b3J0ZWRDaGFyYWN0ZXJzID0gYWRvcHRDRihDVEZvbnRDb3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3Jt
Rm9udCkpOworICAgIGlmIChDRkNoYXJhY3RlclNldEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVk
Q2hhcmFjdGVycy5nZXQoKSwgMSkgfHwgQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1
cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGlzIGVuY29tcGFzc2VzIGFsbCBiYXNpYyBMYXRpbiBub24tY29udHJvbCBjaGFyYWN0
ZXJzLgorICAgIGNvbnN0ZXhwciBVbmlDaGFyIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOwor
ICAgIGNvbnN0ZXhwciBVbmlDaGFyIGxhc3RDaGFyYWN0ZXJUb1Rlc3QgPSAnfic7CisgICAgY29u
c3RleHByIGF1dG8gbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0ID0gbGFzdENoYXJhY3RlclRvVGVz
dCAtIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ICsgMTsKKworICAgIFZlY3RvcjxDR0dseXBoPiBnbHlw
aHM7CisgICAgZ2x5cGhzLmZpbGwoMCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KTsKKyAgICBD
VEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJSYW5nZShwbGF0Zm9ybUZvbnQsIGdseXBocy5iZWdp
bigpLCBDRlJhbmdlTWFrZShmaXJzdENoYXJhY3RlclRvVGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJz
VG9UZXN0KSk7CisgICAgZ2x5cGhzLnJlbW92ZUFsbCgwKTsKKworICAgIGlmIChnbHlwaHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8Q0dSZWN0PiBib3Vu
ZGluZ1JlY3RzOworICAgIGJvdW5kaW5nUmVjdHMuZmlsbChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6
ZSgpKTsKKyAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwg
a0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgZ2x5cGhzLmJlZ2luKCksIGJvdW5kaW5nUmVjdHMu
YmVnaW4oKSwgZ2x5cGhzLnNpemUoKSk7CisgICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5n
UmVjdHMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuICFDR1Jl
Y3RJc0VtcHR5KHJlY3QpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDVi
MGU4NTAxMjE1OWY2MDEzZmY1MjI5ZGIyNDBhMjdlNjI4MGNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udFBsYXRmb3JtRGF0
YUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4KKyNlbHNlCisjaW5jbHVkZSA8
cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmIGZvbnQs
IGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBG
b250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50
LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKKyAgICA6IEZvbnRQbGF0Zm9y
bURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24s
IHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCit7CisgICAgQVNTRVJUX0FSRyhmb250
LCBmb250KTsKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0Owor
ICAgIG1faXNTeXN0ZW1Gb250ID0gV2ViQ29yZTo6aXNTeXN0ZW1Gb250KG1fZm9udC5nZXQoKSk7
CisgICAgYXV0byB2YXJpYXRpb25zID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZSkp
KTsKKyAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2YXJpYXRpb25zICYmIENGRGljdGlvbmFyeUdldENv
dW50KHZhcmlhdGlvbnMuZ2V0KCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBt
X2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX2ZvbnQuZ2V0KCkpOworI2VuZGlm
Cit9CisKK2Jvb2wgaXNTeXN0ZW1Gb250KENURm9udFJlZiBmb250KQoreworI2lmIEhBVkUoQ1RG
T05USVNTWVNURU1VSUZPTlQpCisgICAgcmV0dXJuIENURm9udElzU3lzdGVtVUlGb250KGZvbnQp
OworI2Vsc2UKKyAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7CisjZW5kaWYKK30KKwor
Q1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250KCkgY29uc3QKK3sKKyAg
ICBDVEZvbnRSZWYgcGxhdGZvcm1Gb250ID0gZm9udCgpOworICAgIEFTU0VSVChwbGF0Zm9ybUZv
bnQpOworICAgIGlmIChwbGF0Zm9ybUZvbnQgJiYgYWRvcHRDRihDVEZvbnRDb3B5QXR0cmlidXRl
KHBsYXRmb3JtRm9udCwga0NURm9udFVSTEF0dHJpYnV0ZSkpKQorICAgICAgICByZXR1cm4gcGxh
dGZvcm1Gb250OworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgUExBVEZPUk0oQ09DT0Ep
CitpbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKEZvbnRX
aWR0aFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKKyAgICBjYXNl
IEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtQcm9wb3J0
aW9uYWxUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0
aDoKKyAgICAgICAgcmV0dXJuIGtIYWxmV2lkdGhUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZv
bnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6CisgICAgICAgIHJldHVybiBrVGhpcmRXaWR0aFRl
eHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgor
ICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvcjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3Rv
cjsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xhc3RS
ZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCit7CisgICAgYXV0byBsYXN0UmVzb3J0ID0gYWRv
cHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENGU1RSKCJMYXN0UmVz
b3J0IiksIDApKTsKKworICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0UmVzb3J0
LmdldCgpIH07CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJSQVlfTEVO
R1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAgQ0ZUeXBl
UmVmIGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07CisgICAgQ0ZUeXBl
UmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OworICAgIHJldHVybiBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJB
WV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIENURm9udERlc2NyaXB0b3JS
ZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpCit7Cisg
ICAgc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9IENURm9udERlc2NyaXB0
b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rp
b25hcnkoKS5nZXQoKSk7CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9CisKK0NURm9udFJlZiBG
b250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAoreworICAgIGlmIChtX2N0Rm9udCkKKyAg
ICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOworCisgICAgQVNTRVJUKG1fZm9udCk7CisgICAg
bV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhtX2ZvbnQu
Z2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNG
b250RGVzY3JpcHRvcigpKSk7CisKKyAgICBpZiAobV93aWR0aFZhcmlhbnQgIT0gRm9udFdpZHRo
VmFyaWFudDo6UmVndWxhcldpZHRoKSB7CisgICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0g
a1RleHRTcGFjaW5nVHlwZTsKKyAgICAgICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFw
Rm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOworICAg
ICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFk
b3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgpKSk7CisgICAgICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlVHlwZVZh
bHVlKSk7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVNlbGVjdG9yID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERl
c2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVh
dGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5cGUuZ2V0
KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVm
PiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobmV3RGVz
Y3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7CisKKyAgICAgICAgaWYgKG5ld0ZvbnQpCisgICAg
ICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7CisgICAgfQorCisgICAgcmV0dXJuIG1fY3RGb250
LmdldCgpOworfQorI2Vsc2UKK0NURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBj
b25zdAoreworICAgIHJldHVybiBmb250KCk7Cit9CisjZW5kaWYKKworUmV0YWluUHRyPENGVHlw
ZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhDVEZvbnRSZWYg
Y3RGb250KQoreworICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlG
b250RGVzY3JpcHRvcihjdEZvbnQpKTsKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY4MyBUaGlzIGlzIGEgc2hhbGxvdyBwb2ludGVyIGNv
bXBhcmUgZm9yIHdlYiBmb250cworICAgIC8vIGJlY2F1c2UgdGhlIFVSTCBjb250YWlucyB0aGUg
YWRkcmVzcyBvZiB0aGUgZm9udC4gVGhpcyBtZWFucyB3ZSBtaWdodCBlcnJvbmVvdXNseSBnZXQg
ZmFsc2UgbmVnYXRpdmVzLgorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsID0gYWRvcHRDRihz
dGF0aWNfY2FzdDxDRlVSTFJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udERl
c2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGUpKSk7CisgICAgQVNT
RVJUKCF1cmwgfHwgQ0ZHZXRUeXBlSUQodXJsLmdldCgpKSA9PSBDRlVSTEdldFR5cGVJRCgpKTsK
KyAgICByZXR1cm4gdXJsOworfQorCitSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1E
YXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gb2JqZWN0
Rm9yRXF1YWxpdHlDaGVjayhjdEZvbnQoKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZv
bnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Cit7Cisg
ICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJs
ZShmb250KCksIHRhYmxlLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKSkKKyAgICAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZ2V0KCkpOworCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECisKK1N0cmluZyBGb250UGxhdGZvcm1EYXRh
OjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgU3RyaW5nIGZvbnREZXNjcmlwdGlvbiB7IGFk
b3B0Q0YoQ0ZDb3B5RGVzY3JpcHRpb24oZm9udCgpKSkuZ2V0KCkgfTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhmb250RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAorICAgICAgICAobV9zeW50aGV0
aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIgOiAiIiksCisgICAgICAgIChtX3N5bnRoZXRpY09i
bGlxdWUgPyAiIHN5bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKKyAgICAgICAgKG1fb3JpZW50YXRp
b24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24i
IDogIiIpKTsKK30KKworI2VuZGlmCisKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlO
YW1lKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBwbGF0Zm9ybUZvbnQgPSBmb250KCkpCisgICAg
ICAgIHJldHVybiBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9udCkpLmdl
dCgpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0dseXBoUGFn
ZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0dseXBoUGFnZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzhlZTM2ZGM2Yjg1YzQzYTNkNWI5
Y2Q5NTRlYzRlMTM3YmVmNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvR2x5cGhQYWdlQ29yZVRleHQuY3BwCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8cGFs
L3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9D
b3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgaWYgKCFmb250
Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFGb250
Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjb25zdGV4
cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAgICBBU1NFUlQoYnVm
ZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBo
UGFnZTo6c2l6ZSk7CisKKyAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOworICAg
IFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOworICAgIHVuc2lnbmVk
IGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGlmIChz
aG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkK
KyAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZv
cm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGds
eXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBDVEZvbnRHZXRH
bHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7
CisKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byB0aGVHbHlwaCA9IGds
eXBoc1tpICogZ2x5cGhTdGVwXTsKKyAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9
IGRlbGV0ZWRHbHlwaCkgeworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlw
aCk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3Jl
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI4YjUxMjQzZTU3
ODVhMDYyZGZlZWJiZTc2MzdlNTMwNjYwNDk2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9G
b250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAyMCwgMjAxNiBBcHBsZSBJbmMuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotCi0jaW5jbHVkZSAiQ29tcGxleFRleHRD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxw
YWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0
U1BJLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb25mdXNpbmdseSwgZXZlbiB3aGVu
IENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNhYmxlZCgpIHJldHVybnMgdHJ1ZSwg
Q0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGlsbCBpbXBhY3RzIHRleHQKLS8vIHJl
bmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgInN1YnBpeGVsIGFu
dGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIgdGVybWlub2xvZ3kuCi1ib29sIEZv
bnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkKLXsKLSNpZiBIQVZF
KENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElOR19ESVNBQkxFRCkKLSAgICBzdGF0
aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7Ci0gICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7Ci0g
ICAgICAgIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZCA9ICFDR0ZvbnRSZW5kZXJpbmdHZXRG
b250U21vb3RoaW5nRGlzYWJsZWQoKTsKLSAgICB9KTsKLSAgICByZXR1cm4gc3VicGl4ZWxBbnRp
YWxpYXNpbmdFbmFibGVkOwotI2VsaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiB0cnVlOwot
I2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBmaWxsVmVjdG9yV2l0
aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25z
LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQpCi17Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zv
cm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25z
WzBdID0gQ0dQb2ludFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9y
bShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9z
aXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkg
PSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBj
b250ZXh0LnRleHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVy
cHJlc3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2ln
bmVkIGNvdW50KQotewotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENH
Q29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2ludC54KCksIHBvaW50LnkoKSk7Ci0K
LSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3Jt
RGF0YSgpOwotICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7Ci0gICAg
aWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwpIHsKLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcm90YXRlTGVmdFRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwgMCwgMCwgMCk7Ci0gICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIHRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpOwot
ICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBydW5NYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNv
bmNhdCh0ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKLSAgICAgICAgU2NvcGVkVGV4
dE1hdHJpeCBzYXZlZE1hdHJpeChydW5NYXRyaXgsIGNvbnRleHQpOwotCi0gICAgICAgIFZlY3Rv
cjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsKLSAgICAgICAgQ1RGb250R2V0VmVy
dGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMs
IHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKLQotICAgICAgICBDR0FmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRleHRHZXRUZXh0TWF0
cml4KGNvbnRleHQpKTsKLQotICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gRmxvYXRQb2ludChw
b2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVv
Z3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAg
IENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKHRyYW5zbGF0
aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBwb3NpdGlvbnNbaV0g
PSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UocG9zaXRpb24ueCAtIHRy
YW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb24uaGVpZ2h0KSwgdHJhbnNm
b3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2YW5jZXNbaV0ud2lkdGg7Ci0gICAg
ICAgICAgICBwb3NpdGlvbi55ICs9IGFkdmFuY2VzW2ldLmhlaWdodDsKLSAgICAgICAgfQotICAg
ICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3Np
dGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmls
bFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCBh
ZHZhbmNlcywgY291bnQpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5j
dEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLXsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXNGb250cyhjZ0Nv
bnRleHQsIHRydWUpOwotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybSA9
IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOwotICAgIGJvb2wgaXNUcmFuc2xhdGlvbk9ySW50
ZWdyYWxTY2FsZSA9IFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmEpICYmIFdURjo6
aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmQpICYmIGNvbnRleHRUcmFuc2Zvcm0uYiA9PSAw
LmYgJiYgY29udGV4dFRyYW5zZm9ybS5jID09IDAuZjsKLSAgICBib29sIGlzUm90YXRlZCA9ICgo
Y29udGV4dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRUcmFuc2Zvcm0uYykgJiYgKGNvbnRleHRUcmFu
c2Zvcm0uYSB8fCBjb250ZXh0VHJhbnNmb3JtLmQpKTsKLSAgICBib29sIGRvU3VicGl4ZWxRdWFu
dGl6YXRpb24gPSBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNjYWxlIHx8ICghaXNSb3RhdGVkICYm
IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkpOwotCi0gICAgQ0dDb250ZXh0
U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgdHJ1ZSk7Ci0gICAgQ0dD
b250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgZG9TdWJwaXhl
bFF1YW50aXphdGlvbik7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17
Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9y
bURhdGEoKTsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgIGJvb2wgc2hvdWxkU21v
b3RoRm9udHMgPSB0cnVlOwotCi0gICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQot
ICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwot
Ci0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9k
ZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6Ci0g
ICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKLSAgICAgICAg
c2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21v
b3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNl
OwotICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQotICAgICAgICBzaG91bGRTbW9v
dGhGb250cyA9IGZhbHNlOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBv
cmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhG
b250cyhjZ0NvbnRleHQpOwotICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZv
bnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwotI2VuZGlmCi0KLSAgICBib29sIG9y
aWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNnQ29u
dGV4dCk7Ci0gICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlh
cykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgc2hvdWxk
QW50aWFsaWFzKTsKLQotICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRVc2VM
ZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKLSAgICBVTlVTRURfVkFSSUFCTEUodXNlTGV0dGVy
cHJlc3NFZmZlY3QpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBhbmNob3JQb2ludDsKLQotICAg
IENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7Ci0g
ICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKLSAgICAgICAgbWF0cml4
ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIG1hdHJpeC5iID0g
LW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwotICAgIGlmIChwbGF0Zm9ybURh
dGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVlU2tl
dyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICAg
ICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVy
dGljYWwpIHsKLSAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
KSkKLSAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRy
aXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNm
b3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIC1vYmxpcXVlU2tldywg
MCwgMSwgMCwgMCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1hdHJpeCA9IENHQWZm
aW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIC1v
YmxpcXVlU2tldywgMSwgMCwgMCkpOwotICAgIH0KLSAgICBTY29wZWRUZXh0TWF0cml4IHJlc3Rv
cmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKLQotICAgIHNldENHRm9udFJlbmRlcmluZ01vZGUoY29u
dGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93
Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250ZXh0LmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIEFmZmluZVRyYW5zZm9y
bSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKLSAgICBmbG9hdCBzeW50aGV0aWNCb2xk
T2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0Jv
bGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQo
KSkgewotICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMg
PSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsKLSAgICAgICAgZmxvYXQgaG9y
aXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRmKGhvcml6b250YWxVbml0U2l6
ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVs
cy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkgKiBo
b3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSk7Ci0gICAgICAgIGlmICho
b3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7Ci0gICAgICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3QgYmxvdyB1cCB0aGUgZ2FwIGJl
dHdlZW4gdGhlIGdseXBocy4KLSAgICAgICAgICAgIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBzdGQ6
Om1pbihzeW50aGV0aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNCb2xkT2Zmc2V0IC8gaG9yaXpvbnRh
bFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9v
bCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3
aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYg
IXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZs
aXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgaWYgKGhh
c1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2
ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJw
aXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLSAgICAg
ICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
c2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkg
KyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3Jp
bmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBm
bGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkg
PSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzKTsKLSAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNC
b2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAgICAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUo
TEVUVEVSUFJFU1MpCi0gICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQotICAgICAgICBzaG93
TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5
cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5
cGhzKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAgICB9Ci0KLSAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9h
dFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQs
IGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhmcm9tKSwgbnVtR2x5cGhzKTsKLQotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3Ip
OwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKHNob3VsZFNtb290aEZvbnRz
ICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKLSAgICAgICAgQ0dDb250ZXh0U2V0
U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhp
bmcpOwotI2VuZGlmCi0KLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxk
QW50aWFsaWFzKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0
LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLWJvb2wgRm9udENhc2NhZGU6OnByaW1h
cnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKLXsKLSAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9
IHByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIGlzU3lzdGVtRm9udChmb250RGF0YS5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSk7Ci19Ci0KLS8vIEZJWE1FOiBVc2UgdGhpcyBvbiBhbGwgcG9ydHMu
Ci1jb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAotewotICAg
IFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKLSAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9
IDA7Ci0gICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3Ro
LCBiYXNlQ2hhcmFjdGVyKTsKLQotICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRh
ID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCBOb3JtYWxWYXJp
YW50KTsKLQotICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgp
Ci0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7Ci0KLSAgICBib29s
IHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
Rm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hh
cmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAgY29udGludWU7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAw
ICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQtPnNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYygpKQotICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGZvbnQt
PnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCkgewotICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJhY3Rl
cikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9
ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2Zv
bnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmll
bnRhdGlvbjo6TWl4ZWQpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiB2ZXJ0aWNhbFJp
Z2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKLSAgICAgICAg
ICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlw
aEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAodmVydGlj
YWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAg
ICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZvbnQ7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVwcmlnaHRGb250ID0gZm9udC0+dXByaWdo
dE9yaWVudGF0aW9uRm9udCgpOwotICAgICAgICAgICAgICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9
IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAg
ICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkK
LSAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJpZ2h0Rm9udDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb250ID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEu
Zm9udCkKLSAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSB0cnVlOwotCi0gICAg
ICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0
ZXJzLCBsZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnQ7Ci0gICAgfQotCi0gICAgaWYg
KCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCAm
JiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFj
dGVyR2x5cGhEYXRhLmZvbnQ7Ci0KLSAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJhY2soKTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
Rm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0Zv
bnRDb3JlVGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMjI1MWQ2YWRh
OWEwZWEwYzQ4MTJmN2M1NTYzN2Y5ZjA5NDg5ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
Rm9udENvcmVUZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJPcGVuVHlwZUNHLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUg
IkxvY2FsZUNvY29hLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKLXsKLSAgICByZXR1cm4gYSAm
JiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NG
Q29tcGFyZUVxdWFsVG87Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhD
VEZvbnRSZWYgZm9udCkKLXsKLSAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtD
VEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOwotfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLWJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmlu
Z1JlZiBmb250RmFtaWx5TmFtZSkKLXsKLSAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBu
b3QgcGVyZm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+Ci0g
ICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlv
biBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCi0gICAgcmV0dXJuIChDRlN0cmluZ0NvbXBh
cmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pCi0gICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiks
IGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Ci19Ci0KLXN0YXRpYyBj
b25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKLQotc3RhdGljIGJvb2wg
c2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQp
KTsKLQotICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFt
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQotICAgICAgICB8
fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRp
Y2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgp
LCBDRlNUUigiLkhlbHZldGljYSBOZXVlVUkiKSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBib29s
IG5lZWRzQXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQotewotICAgIHJl
dHVybiBmYW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENG
U1RSKCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5h
bWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZShmYW1pbHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMg
Ym9vbCBpc0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZh
bWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhl
bSIpKTsKLX0KLQotYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQg
dGFibGVUYWcpCi17Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFp
bGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBp
ZiAoIXRhYmxlVGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFi
bGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4
IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0
YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAg
ICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9u
dFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQotewot
ICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0
Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKCF0YWJsZVRhZ3Mp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlH
ZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nh
c3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7Ci0gICAgICAgIGlmICh0YWcg
PT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5p
dCgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0
YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7Ci0jZWxzZQotICAgIG1fc3ludGhldGljQm9sZE9mZnNl
dCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBtX3NjcmlwdENhY2hlID0gMDsKLSAgICBtX3Njcmlw
dEZvbnRQcm9wZXJ0aWVzID0gbnVsbHB0cjsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJ
KCkpCi0gICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOwotI2VuZGlmCi0KLSAgICB1bnNpZ25l
ZCB1bml0c1BlckVtID0gQ1RGb250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5mb250KCkp
OwotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBDR0Zs
b2F0IGNhcEhlaWdodCA9IHBvaW50U2l6ZSA/IENURm9udEdldENhcEhlaWdodChtX3BsYXRmb3Jt
RGF0YS5mb250KCkpIDogMDsKLSAgICBDR0Zsb2F0IGxpbmVHYXAgPSBwb2ludFNpemUgPyBDVEZv
bnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotICAgIENHRmxvYXQgYXNj
ZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0QXNjZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkg
OiAwOwotICAgIENHRmxvYXQgZGVzY2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldERlc2NlbnQo
bV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0KLSAgICAvLyBUaGUgT3BlbiBGb250IEZvcm1h
dCBkZXNjcmliZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGFzIGZvbGxvd3M6Ci0g
ICAgLy8gIklmIHNldCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIE9TLzIuc1R5
cG9Bc2NlbmRlciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIrIE9TLzIuc1R5cG9MaW5lR2FwIGFzIGEg
dmFsdWUgZm9yIGRlZmF1bHQgbGluZSBzcGFjaW5nIGZvciB0aGlzIGZvbnQuIgotICAgIC8vIE9u
IE9TIFgsIHdlIG9ubHkgYXBwbHkgdGhpcyBydWxlIGluIHRoZSBpbXBvcnRhbnQgY2FzZSBvZiBm
b250cyB3aXRoIGEgTUFUSCB0YWJsZS4KLSAgICBpZiAoZm9udEhhc1RhYmxlKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBrQ1RGb250VGFibGVNQVRIKSkgewotICAgICAgICBzaG9ydCB0eXBvQXNj
ZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXA7Ci0gICAgICAgIGlmIChPcGVuVHlwZTo6dHJ5
R2V0VHlwb01ldHJpY3MobV9wbGF0Zm9ybURhdGEuZm9udCgpLCB0eXBvQXNjZW50LCB0eXBvRGVz
Y2VudCwgdHlwb0xpbmVHYXApKSB7Ci0gICAgICAgICAgICBhc2NlbnQgPSBzY2FsZUVtVG9Vbml0
cyh0eXBvQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICAgICAgICAgIGRlc2Nl
bnQgPSAtc2NhbGVFbVRvVW5pdHModHlwb0Rlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXpl
OwotICAgICAgICAgICAgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9MaW5lR2FwLCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gZmFtaWx5
TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUobV9wbGF0Zm9ybURhdGEuZm9udCgp
KSk7Ci0KLSAgICAvLyBEaXNhYmxlIGFudGlhbGlhc2luZyB3aGVuIHJlbmRlcmluZyB3aXRoIEFo
ZW0gYmVjYXVzZSBtYW55IHRlc3RzIHJlcXVpcmUgdGhpcy4KLSAgICBpZiAoaXNBaGVtRm9udChm
YW1pbHlOYW1lLmdldCgpKSkKLSAgICAgICAgbV9hbGxvd3NBbnRpYWxpYXNpbmcgPSBmYWxzZTsK
LQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVs
dmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQotICAgIC8vIHZlcnRpY2Fs
IG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUg
ZmFjdG8KLSAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUg
aXMgdG9vIGJpZyBhbmQgaXMKLSAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNp
bmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKLSAgICAvLyBhbmQgYWRkIGl0
IHRvIHRoZSBhc2NlbnQuCi0gICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6TG9jYWwgJiYgbmVl
ZHNBc2NlbnRBZGp1c3RtZW50KGZhbWlseU5hbWUuZ2V0KCkpKQotICAgICAgICBhc2NlbnQgKz0g
c3RkOjpyb3VuZCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1Zik7Ci0jZW5kaWYKLQotICAgIC8v
IENvbXB1dGUgbGluZSBzcGFjaW5nIGJlZm9yZSB0aGUgbGluZSBtZXRyaWNzIGhhY2tzIGFyZSBh
cHBsaWVkLgotICAgIGZsb2F0IGxpbmVTcGFjaW5nID0gbHJvdW5kZihhc2NlbnQpICsgbHJvdW5k
ZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAg
Ly8gSGFjayBIaXJhZ2lubyBsaW5lIG1ldHJpY3MgdG8gYWxsb3cgcm9vbSBmb3IgbWFya2VkIHRl
eHQgdW5kZXJsaW5lcy4KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTM4NjE4Mz4KLSAgICBpZiAo
ZGVzY2VudCA8IDMgJiYgbGluZUdhcCA+PSAzICYmIGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdIYXNQ
cmVmaXgoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhpcmFnaW5vIikpKSB7Ci0gICAgICAgIGxp
bmVHYXAgLT0gMyAtIGRlc2NlbnQ7Ci0gICAgICAgIGRlc2NlbnQgPSAzOwotICAgIH0KLSNlbmRp
ZgotICAgIAotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmll
bnRhdGlvbjo6VmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKLSAgICAg
ICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3Jt
RGF0YS5jdEZvbnQoKSk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIENHRmxvYXQg
YWRqdXN0bWVudCA9IHNob3VsZFVzZUFkanVzdG1lbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA/
IGNlaWwoKGFzY2VudCArIGRlc2NlbnQpICoga0xpbmVIZWlnaHRBZGp1c3RtZW50KSA6IDA7Ci0K
LSAgICBsaW5lR2FwID0gY2VpbGYobGluZUdhcCk7Ci0gICAgbGluZVNwYWNpbmcgPSBjZWlsKGFz
Y2VudCkgKyBhZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIGxpbmVHYXA7Ci0gICAgYXNjZW50
ID0gY2VpbGYoYXNjZW50ICsgYWRqdXN0bWVudCk7Ci0gICAgZGVzY2VudCA9IGNlaWxmKGRlc2Nl
bnQpOwotCi0gICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBmb250RmFtaWx5U2hvdWxk
Tm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOwotI2VuZGlmCi0KLSAgICBDR0Zs
b2F0IHhIZWlnaHQgPSAwOwotICAgIGlmIChtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKLSAgICAg
ICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsKSB7Ci0gICAgICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVy
ICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNl
bGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0
byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhl
IGJhc2VsaW5lLgotICAgICAgICAgICAgR2x5cGggeEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIo
J3gnKTsKLSAgICAgICAgICAgIGlmICh4R2x5cGgpCi0gICAgICAgICAgICAgICAgeEhlaWdodCA9
IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeEhlaWdodCA9IENURm9udEdldFhIZWlnaHQobV9w
bGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB4SGVpZ2h0
ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgp
OwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsK
LSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Mu
c2V0RGVzY2VudChkZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBI
ZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5l
U3BhY2luZyhsaW5lU3BhY2luZyk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVQb3Np
dGlvbigtQ1RGb250R2V0VW5kZXJsaW5lUG9zaXRpb24obV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7
Ci0gICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVUaGlja25lc3MoQ1RGb250R2V0VW5kZXJs
aW5lVGhpY2tuZXNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwotfQotCi12b2lkIEZvbnQ6OnBs
YXRmb3JtQ2hhcldpZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwOwotICAgIG1f
bWF4Q2hhcldpZHRoID0gMDsKLQotICAgIGF1dG8gb3MyVGFibGUgPSBhZG9wdENGKENURm9udENv
cHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRUYWJsZU9TMiwga0NURm9udFRh
YmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExlbmd0
aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgewotICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZE
YXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7Ci0gICAgICAgIFNJbnQxNiBvczJBdmdDaGFy
V2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107Ci0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0g
c2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0o
KSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgfQotCi0gICAgYXV0byBoZWFkVGFibGUg
PSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRU
YWJsZUhlYWQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmIChoZWFkVGFi
bGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKLSAgICAgICAg
Y29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKLSAgICAg
ICAgdW5zaWduZWQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOwotICAgICAgICBT
SW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOwotICAgICAgICBTSW50MTYg
eE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOwotICAgICAgICBmbG9hdCBkaWZmID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGgg
PSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1w
bGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhl
eSBhcmUgbm9uLXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLWJvb2wgRm9u
dDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENh
cHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKLXsKLSNpZiAoUExB
VEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotICAg
IEdseXBoIGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAoIWds
eXBoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fw
cykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewotICAgICAgICBhdXRvJiBz
dXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4g
c3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0K
LSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBv
cnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3Vw
cG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKLSAgICAgICAgYXV0byYgc3VwcG9y
dGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1
cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0g
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogewotICAgICAgICBhdXRvJiBzdXBw
b3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKLSAgICAgICAgcmV0dXJu
IHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZh
cmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOwotCi0gICAgc3dpdGNoIChm
b250VmFyaWFudENhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAg
Y2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
QWxsU21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1
cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkg
JiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotc3RhdGljIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXks
IGludCByYXdWYWx1ZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmcmF3VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVG
ZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKLSAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJS
QVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJh
d1ZhbHVlKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5
KSk7Ci0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7
Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktl
eSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKLSAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVuaW9u
Qml0VmVjdG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQotewot
ICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOwotICAgIHJl
c3VsdC5lbnN1cmVTaXplKGxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBtaW4gPSAwOwotICAgIHdoaWxl
IChtaW4gPCBsZW5ndGgpIHsKLSAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3Rv
ckdldEZpcnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWlu
KSwgMSk7Ci0gICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOwotICAgICAgICBt
aW4gPSBuZXh0SW5kZXggKyAxOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5
cGVDb3ZlcmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9y
JiByZXN1bHQpCi17Ci0gICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9w
dENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVu
VHlwZURpY3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMo
cmVzdWx0LCBzb3VyY2UuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNv
dmVyYWdlKGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3Im
IHJlc3VsdCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0
Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVU
eXBlRGljdGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3Rv
cnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6Omds
eXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3Vw
cG9ydGVkQnlTbWFsbENhcHMpIHsKLSAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fw
cyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJz
bWNwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fw
cy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlw
ZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1f
Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBt
X2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3Rv
ciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAotewotICAgIGlm
ICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5U
eXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBo
c1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RPcGVuVHlw
ZUNvdmVyYWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNT
dXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVD
b3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0
Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUo
KSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBl
ckNhc2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9nbHlw
aHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3Im
IEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRl
ZEJ5UGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVy
YWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0
ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uo
a0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0
YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAg
fQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOwotfQot
Ci1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcykgewot
ICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwot
ICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0
YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7Ci0g
ICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRh
KCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAg
ICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBl
dGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFn
ZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1E
YXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVl
KCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9u
dChDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljSXRhbGljKQotewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoc3ludGhldGljQm9sZCkKLSAgICAgICAgZm9udFRyYWl0cyB8PSBr
Q1RGb250Qm9sZFRyYWl0OwotICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCi0gICAgICAgIGZvbnRU
cmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OwotCi0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMg
c2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwotCi0gICAg
Ym9vbCB1c2VkU3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkg
JiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgYm9vbCB1c2Vk
U3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAh
KHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9y
bURhdGEgc2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRT
eW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7Ci0KLSAgICByZXR1cm4gRm9udDo6Y3JlYXRl
KHNjYWxlZEZvbnREYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0
dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIHJldHVybiBDRkRpY3Rpb25hcnlD
b250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rp
b25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOwot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVm
IGZlYXR1cmUpCi17Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUs
IGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5z
S2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKLX0KLQot
c3RhdGljIGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGlj
dGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0
dXJlKSk7Ci0gICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsK
LSAgICBpbnQgcmF3VmFsdWU7Ci0gICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxD
Rk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBl
RmVhdHVyZVZhbHVlKSk7Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1
ZSwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwotICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVm
Pih0YWcpIDogV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQs
IGludD4gdHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFT
U0VSVChpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgaW50IHJhd1R5cGU7Ci0gICAg
Q0ZOdW1iZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAg
YXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmF3VHlwZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpbnQg
cmF3U2VsZWN0b3I7Ci0gICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51
bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxl
Y3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxl
Y3Rvciwga0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCBy
YXdTZWxlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVj
dG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQotewotICAgIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVz
KGZvbnQpKTsKLSAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0
dXJlcy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyAr
K2kpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8
Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBp
KSk7Ci0gICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlw
ZUlkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGludCByYXdGZWF0dXJlS2V5OwotICAgICAgICBDRk51bWJlckdl
dFZhbHVlKGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKLSAg
ICAgICAgaWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJh
eVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlw
ZVNlbGVjdG9yc0tleSkpOwotICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChmZWF0dXJlU2VsZWN0b3JzKTsKLSAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBq
IDwgc2VsZWN0b3JzQ291bnQ7ICsraikgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmVTZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7Ci0gICAgICAgICAgICBDRk51bWJlclJl
ZiBpc0RlZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOwot
ICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpbnQgcmF3SXNEZWZhdWx0OwotICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShpc0RlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOwotICAgICAgICAg
ICAgaWYgKCFyYXdJc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGlubGlu
ZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlS
ZWYgZmVhdHVyZSwgQ1RGb250UmVmIGZvbnQpCi17Ci0gICAgYm9vbCBpc09wZW5UeXBlID0gaXNP
cGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7Ci0gICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlw
ZUZlYXR1cmUoZmVhdHVyZSk7Ci0gICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQot
ICAgICAgICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQg
Zm9ybWF0LgotICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOwotICAgIGlmIChpc09wZW5UeXBlKSB7Ci0gICAgICAgIGF1dG8gZmVhdHVyZVRh
ZyA9IG9wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYg
KENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQotICAgICAgICAgICAg
fHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCi0gICAgICAgICAg
ICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKLSAgICAgICAg
ICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKLSAg
ICAgICAgICAgIGludCByYXdaZXJvID0gMDsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gemVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd1plcm8pKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRh
Zy52YWx1ZSgpKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFs
dWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFy
eUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmIChpc1RydWVUeXBlKSB7Ci0gICAgICAgIGF1dG8gdHJ1ZVR5cGVG
ZWF0dXJlUGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKHRydWVU
eXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVy
ZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZl
YXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgewotICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYg
ZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dl
ckNhc2VUeXBlLCBmb250KSkKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShy
ZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0
U2VsZWN0b3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJL
ZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJ
ZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5m
aXJzdCA9PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0g
a1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25k
ID09IGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rp
b25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJL
ZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXkpKTsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3Ig
PSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQp
KQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0
LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RG
b250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJy
YXlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0
dHJpYnV0ZSkpKTsKLSAgICBpZiAoIWZlYXR1cmVzKQotICAgICAgICByZXR1cm4gZm9udDsKLSAg
ICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7
Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVh
dHVyZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0
aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMu
Z2V0KCksIGkpKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgp
LCByZW1vdmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7Ci0gICAgfQotICAgIENGVHlw
ZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKLSAgICBD
RlR5cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlz
KSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNj
cmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0
cmlidXRlcy5nZXQoKSkpOwotICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRo
QXR0cmlidXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlw
dG9yLmdldCgpKSk7Ci19Ci0KLVJlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5
bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZv
cm1EYXRhLnNpemUoKTsKLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZl
YXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRp
dmVGb250KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwg
Zm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0
YS5zeW50aGV0aWNPYmxpcXVlKCkpOwotfQotCi1SZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9y
KSBjb25zdAotewotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2Fs
ZUZhY3RvcjsKLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250
RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3Io
Zm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKLQotICAgIHJldHVybiBjcmVh
dGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCks
IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLXZvaWQgRm9udDo6YXBw
bHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5n
R2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2Vy
bmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3Ry
aW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAg
VU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KLSNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMp
Ci0gICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhz
UG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0
c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikKLSAgICB7Ci0gICAgICAgIHJh
bmdlLmxvY2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocmFuZ2UubG9jYXRpb24sIHN0YXRpY19j
YXN0PENGSW5kZXg+KDApKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgp
KSk7Ci0gICAgICAgIGlmIChyYW5nZS5sZW5ndGggPCAwKSB7Ci0gICAgICAgICAgICByYW5nZS5s
ZW5ndGggPSBzdGQ6Om1pbihyYW5nZS5sb2NhdGlvbiwgLXJhbmdlLmxlbmd0aCk7Ci0gICAgICAg
ICAgICByYW5nZS5sb2NhdGlvbiA9IHJhbmdlLmxvY2F0aW9uIC0gcmFuZ2UubGVuZ3RoOwotICAg
ICAgICAgICAgZ2x5cGhCdWZmZXIucmVtb3ZlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5s
b2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnbHlw
aEJ1ZmZlci5tYWtlSG9sZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJh
bmdlLmxlbmd0aCwgdGhpcyk7Ci0KLSAgICAgICAgKm5ld0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1
ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdBZHZhbmNlc1Bv
aW50ZXIgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICAg
ICAgKm5ld09mZnNldHNQb2ludGVyID0gZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlw
aEluZGV4KTsKLSAgICAgICAgKm5ld0luZGljZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0
c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpOwotICAgIH07Ci0KLSAgICBhdXRvIHN1YnN0
cmluZyA9IHRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKLSAgICBhdXRvIHVw
Y29udmVydGVkQ2hhcmFjdGVycyA9IHN1YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
LSAgICBhdXRvIGxvY2FsZVN0cmluZyA9IExvY2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlk
ZW50aWZpZXJGcm9tU3RyaW5nKGxvY2FsZSkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAg
ICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29t
cG9zaXRpb24KLSAgICAgICAgfCAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJu
aW5nIDogMCkKLSAgICAgICAgfCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwg
PyBrQ1RGb250U2hhcGVSaWdodFRvTGVmdCA6IDApOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKLSAg
ICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ld
IC09IGJlZ2lubmluZ1N0cmluZ0luZGV4OwotCi0gICAgQ1RGb250U2hhcGVHbHlwaHMoCi0gICAg
ICAgIG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLAotICAgICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMo
YmVnaW5uaW5nR2x5cGhJbmRleCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4o
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLAotICAgICAgICByZWlu
dGVycHJldF9jYXN0PENHUG9pbnQqPihnbHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmluZ0dseXBo
SW5kZXgpKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0ds
eXBoSW5kZXgpLAotICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cGNv
bnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkpLAotICAgICAgICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBi
ZWdpbm5pbmdHbHlwaEluZGV4LAotICAgICAgICBvcHRpb25zLAotICAgICAgICBsb2NhbGVTdHJp
bmcuZ2V0KCksCi0gICAgICAgIGhhbmRsZXIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKLSAgICAg
ICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldICs9
IGJlZ2lubmluZ1N0cmluZ0luZGV4OwotCi0jZWxzZQotCi0gICAgVU5VU0VEX1BBUkFNKGJlZ2lu
bmluZ1N0cmluZ0luZGV4KTsKLSAgICBVTlVTRURfUEFSQU0obG9jYWxlKTsKLSAgICBVTlVTRURf
UEFSQU0odGV4dCk7Ci0KLSAgICAvLyBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBp
biB2aXN1YWwgb3JkZXIsIGJ1dCBXaWR0aEl0ZXJhdG9yIGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3Jk
ZXIuCi0gICAgLy8gVGVtcG9yYXJpbHkgcHV0IHVzIGluIHZpc3VhbCBvcmRlciBqdXN0IGZvciB0
aGUgY2FsbCwgdGhlbiBwdXQgdXMgYmFjayBpbnRvIGxvZ2ljYWwgb3JkZXIgd2hlbgotICAgIC8v
IHRoZSBjYWxsIGlzIGRvbmUuCi0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9m
IHRoZSBlbnRpcmUgR2x5cGhCdWZmZXI7IHdlJ3JlIGp1c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xl
IGNodW5rIG9mIGl0LgotICAgIC8vIFdpZHRoSXRlcmF0b3IgZW5jb3VudGVycyB0aGUgY2h1bmtz
IG91dCBpbiBsb2dpY2FsIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIG1haW50YWluIHRoYXQgaW52YXJp
YW50LgotICAgIC8vIEV2ZW50dWFsbHksIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkg
d2lsbCByZXZlcnNlIHRoZSB3aG9sZSBidWZmZXIgdG8gcHV0IHRoZSBlbnRpcmUgdGhpbmcKLSAg
ICAvLyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGhhcyBhIHZp
ZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlci4KLSAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwg
Q1RGb250U2hhcGVHbHlwaHMoKSBhY2NlcHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBi
dXQgcmV0dXJucyBpdCBpbiBwaHlzaWNhbAotICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUg
c2Vjb25kIHJldmVyc2UoKSBpbiB0aGlzIGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUg
d2hlbgotICAgIC8vIENURm9udFNoYXBlR2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KLSAgICBpZiAo
dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCi0gICAgICAgIGdseXBoQnVmZmVy
LnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5u
aW5nR2x5cGhJbmRleCk7Ci0KLSAgICBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAo
ZW5hYmxlS2VybmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBr
Q1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nOwotICAgIENURm9udFRyYW5zZm9ybUdseXBocyht
X3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBo
SW5kZXgpLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJl
Z2lubmluZ0dseXBoSW5kZXgpKSwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJ
bmRleCwgb3B0aW9ucyk7Ci0jZW5kaWYKLQotICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBp
biB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRoZSBvdGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KLSAg
ICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCi0gICAgICAgIGdseXBo
QnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0g
YmVnaW5uaW5nR2x5cGhJbmRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0cmFjdE51bWJlcihDRk51
bWJlclJlZiBudW1iZXIpCi17Ci0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgaWYgKG51bWJlcikK
LSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZyZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2go
KQotewotICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Ci0gICAg
QVNTRVJUKGN0Rm9udCk7Ci0KLSAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4KLSAgICAv
LyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQg
T3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBk
b2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KLQotICAgIC8vIFNwZWNp
YWwgY2FzZSBNUy1QR290aGljLgotICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0v
NDAzMjkzOD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4K
LSAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQg
cGl0Y2guCi0KLSAgICAvLyBTcGVjaWFsIGNhc2UgTW9ub3R5cGVDb3JzaXZhCi0gICAgLy8gQWNj
b3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBN
b25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBk
b2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCi0KLSAgICBhdXRvIGZ1
bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7Ci0gICAgYXV0byBm
YW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKLQotICAg
IGludCBmaXhlZFBpdGNoID0gZXh0cmFjdE51bWJlcihhZG9wdENGKHN0YXRpY19jYXN0PENGTnVt
YmVyUmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9u
dEZpeGVkQWR2YW5jZUF0dHJpYnV0ZSkpKS5nZXQoKSk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRj
aCA9IChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRy
YWl0KSB8fCBmaXhlZFBpdGNoIHx8IChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdl
dCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxO
YW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJl
KGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZhIikpKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGlmIChmYW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IikpKSB7Ci0gICAgICAgIC8v
IFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRj
aCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlz
IHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgotICAgICAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci0gICAgfQotI2VuZGlmCi19Ci0KLUZsb2F0UmVj
dCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveDsKLSAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5k
aW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgp
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmll
bnRhdGlvblZlcnRpY2FsIDoga0NURm9udE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAw
LCAxKTsKLSAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOwotICAgIGlm
IChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJv
dW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAgcmV0dXJu
IGJvdW5kaW5nQm94OwotfQotCi1mbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOwotCi0g
ICAgaWYgKHBsYXRmb3JtRGF0YSgpLnNpemUoKSkgewotICAgICAgICBib29sIGhvcml6b250YWwg
PSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpv
bnRhbDsKLSAgICAgICAgQ1RGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBob3Jpem9udGFs
IHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6
b250YWwgOiBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbDsKLSNpZiBVU0UoQ1RGT05UR0VUQURW
QU5DRVNfV09SS0FST1VORCkKLSAgICAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBr
Q0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVT
dWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6
YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwotICAgICAgICBpZiAo
IUNURm9udElzQXBwbGVDb2xvckVtb2ppKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9w
bGF0Zm9ybURhdGEuaGFzVmFyaWF0aW9ucygpKQotICAgICAgICAgICAgQ1RGb250R2V0VW5zdW1t
ZWRBZHZhbmNlc0ZvckdseXBoc0FuZFN0eWxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmll
bnRhdGlvbiwgc3R5bGUsICZnbHlwaCwgJmFkdmFuY2UsIDEpOwotICAgICAgICBlbHNlCi0jZW5k
aWYKLSAgICAgICAgewotICAgICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9w
bGF0Zm9ybURhdGEuY3RGb250KCksIG9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGlj
Qm9sZE9mZnNldDsKLX0KLQotUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0
aEZvckdseXBoKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOwotICAg
IGF1dG8gc3ludGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsK
LSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkgewotICAgICAgICBhdXRvIG5ld1BhdGggPSBh
ZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3
UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgYXV0byB0cmFuc2xh
dGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIDApOwotICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlv
biwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShuZXdQYXRoKSB9Owot
ICAgIH0KLSAgICByZXR1cm4geyBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3Vs
dC5nZXQoKSkpIH07Ci19Ci0KLWJvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChV
Q2hhcjMyIGNoYXJhY3RlciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAotewot
ICAgIGlmICh2YXJpYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFVuaUNoYXIg
Y29kZVVuaXRzWzJdOwotICAgIENHR2x5cGggZ2x5cGhzWzJdOwotICAgIENGSW5kZXggY291bnQg
PSAwOwotICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVVbml0cywgY291bnQsIGNoYXJhY3Rlcik7
Ci0gICAgcmV0dXJuIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1EYXRhKCku
Y3RGb250KCksIGNvZGVVbml0cywgZ2x5cGhzLCBjb3VudCk7Ci19Ci0KLWJvb2wgRm9udDo6aXNQ
cm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0Ci17Ci0gICAgYXV0byBwbGF0Zm9y
bUZvbnQgPSBwbGF0Zm9ybURhdGEoKS5mb250KCk7Ci0gICAgaWYgKCFwbGF0Zm9ybUZvbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEFsbG93IG1vc3Qgbm9uLWljb24gZm9udHMg
dG8gYmFpbCBlYXJseSBoZXJlIGJ5IHRlc3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyICdhJywgd2l0
aG91dCBpdGVyYXRpbmcgb3ZlciBhbGwgYmFzaWMgbGF0aW4gY2hhcmFjdGVycy4KLSAgICBVbmlD
aGFyIGxvd2VyY2FzZUFDaGFyYWN0ZXIgPSAnYSc7Ci0gICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5
cGg7Ci0gICAgaWYgKENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1Gb250LCAm
bG93ZXJjYXNlQUNoYXJhY3RlciwgJmxvd2VyY2FzZUFHbHlwaCwgMSkpIHsKLSAgICAgICAgaWYg
KCFDR1JlY3RJc0VtcHR5KENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1G
b250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCAmbG93ZXJjYXNlQUdseXBoLCBudWxscHRy
LCAxKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYXV0byBzdXBw
b3J0ZWRDaGFyYWN0ZXJzID0gYWRvcHRDRihDVEZvbnRDb3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3Jt
Rm9udCkpOwotICAgIGlmIChDRkNoYXJhY3RlclNldEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVk
Q2hhcmFjdGVycy5nZXQoKSwgMSkgfHwgQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1
cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBUaGlzIGVuY29tcGFzc2VzIGFsbCBiYXNpYyBMYXRpbiBub24tY29udHJvbCBjaGFyYWN0
ZXJzLgotICAgIGNvbnN0ZXhwciBVbmlDaGFyIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOwot
ICAgIGNvbnN0ZXhwciBVbmlDaGFyIGxhc3RDaGFyYWN0ZXJUb1Rlc3QgPSAnfic7Ci0gICAgY29u
c3RleHByIGF1dG8gbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0ID0gbGFzdENoYXJhY3RlclRvVGVz
dCAtIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ICsgMTsKLQotICAgIFZlY3RvcjxDR0dseXBoPiBnbHlw
aHM7Ci0gICAgZ2x5cGhzLmZpbGwoMCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KTsKLSAgICBD
VEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJSYW5nZShwbGF0Zm9ybUZvbnQsIGdseXBocy5iZWdp
bigpLCBDRlJhbmdlTWFrZShmaXJzdENoYXJhY3RlclRvVGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJz
VG9UZXN0KSk7Ci0gICAgZ2x5cGhzLnJlbW92ZUFsbCgwKTsKLQotICAgIGlmIChnbHlwaHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Q0dSZWN0PiBib3Vu
ZGluZ1JlY3RzOwotICAgIGJvdW5kaW5nUmVjdHMuZmlsbChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6
ZSgpKTsKLSAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwg
a0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgZ2x5cGhzLmJlZ2luKCksIGJvdW5kaW5nUmVjdHMu
YmVnaW4oKSwgZ2x5cGhzLnNpemUoKSk7Ci0gICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5n
UmVjdHMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIHJlY3QpIHsKLSAgICAgICAgcmV0dXJuICFDR1Jl
Y3RJc0VtcHR5KHJlY3QpOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZv
cm1EYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
Rm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTQ1YjBlODUwMTIxNTlmNjAxM2ZmNTIyOWRiMjQwYTI3ZTYyODBjYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJu
YWwgZm9udCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDxwYWwv
c3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0Nv
cmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Gb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBi
b29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmlu
Z01vZGUgdGV4dFJlbmRlcmluZ01vZGUpCi0gICAgOiBGb250UGxhdGZvcm1EYXRhKHNpemUsIHN5
bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlhbnQs
IHRleHRSZW5kZXJpbmdNb2RlKQotewotICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7Ci0gICAg
bV9mb250ID0gZm9udDsKLSAgICBtX2lzQ29sb3JCaXRtYXBGb250ID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoZm9udCkgJiBrQ1RGb250Q29sb3JHbHlwaHNUcmFpdDsKLSAgICBtX2lzU3lzdGVt
Rm9udCA9IFdlYkNvcmU6OmlzU3lzdGVtRm9udChtX2ZvbnQuZ2V0KCkpOwotICAgIGF1dG8gdmFy
aWF0aW9ucyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDVEZvbnRDb3B5
QXR0cmlidXRlKGZvbnQsIGtDVEZvbnRWYXJpYXRpb25BdHRyaWJ1dGUpKSk7Ci0gICAgbV9oYXNW
YXJpYXRpb25zID0gdmFyaWF0aW9ucyAmJiBDRkRpY3Rpb25hcnlHZXRDb3VudCh2YXJpYXRpb25z
LmdldCgpKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgbV9pc0Vtb2ppID0gQ1RG
b250SXNBcHBsZUNvbG9yRW1vamkobV9mb250LmdldCgpKTsKLSNlbmRpZgotfQotCi1ib29sIGlz
U3lzdGVtRm9udChDVEZvbnRSZWYgZm9udCkKLXsKLSNpZiBIQVZFKENURk9OVElTU1lTVEVNVUlG
T05UKQotICAgIHJldHVybiBDVEZvbnRJc1N5c3RlbVVJRm9udChmb250KTsKLSNlbHNlCi0gICAg
cmV0dXJuIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlG
b250RGVzY3JpcHRvcihmb250KSkuZ2V0KCkpOwotI2VuZGlmCi19Ci0KLUNURm9udFJlZiBGb250
UGxhdGZvcm1EYXRhOjpyZWdpc3RlcmVkRm9udCgpIGNvbnN0Ci17Ci0gICAgQ1RGb250UmVmIHBs
YXRmb3JtRm9udCA9IGZvbnQoKTsKLSAgICBBU1NFUlQocGxhdGZvcm1Gb250KTsKLSAgICBpZiAo
cGxhdGZvcm1Gb250ICYmIGFkb3B0Q0YoQ1RGb250Q29weUF0dHJpYnV0ZShwbGF0Zm9ybUZvbnQs
IGtDVEZvbnRVUkxBdHRyaWJ1dGUpKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRm9udDsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotaW5saW5lIGludCBt
YXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihGb250V2lkdGhWYXJpYW50IHZh
cmlhbnQpCi17Ci0gICAgc3dpdGNoICh2YXJpYW50KSB7Ci0gICAgY2FzZSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGg6Ci0gICAgICAgIHJldHVybiBrUHJvcG9ydGlvbmFsVGV4dFNlbGVj
dG9yOwotCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpIYWxmV2lkdGg6Ci0gICAgICAgIHJl
dHVybiBrSGFsZldpZHRoVGV4dFNlbGVjdG9yOwotCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50
OjpUaGlyZFdpZHRoOgotICAgICAgICByZXR1cm4ga1RoaXJkV2lkdGhUZXh0U2VsZWN0b3I7Ci0K
LSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aDoKLSAgICAgICAgcmV0dXJu
IGtRdWFydGVyV2lkdGhUZXh0U2VsZWN0b3I7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGtQcm9wb3J0aW9uYWxUZXh0U2VsZWN0b3I7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRl
c0RpY3Rpb25hcnkoKQotewotICAgIGF1dG8gbGFzdFJlc29ydCA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlNUUigiTGFzdFJlc29ydCIpLCAwKSk7Ci0K
LSAgICBDRlR5cGVSZWYgZGVzY3JpcHRvcnNbXSA9IHsgbGFzdFJlc29ydC5nZXQoKSB9OwotICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBkZXNjcmlwdG9ycywgV1RGX0FSUkFZX0xFTkdUSChkZXNjcmlwdG9y
cyksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLQotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7
IGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9
IHsgYXJyYXkuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMp
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBDVEZvbnREZXNjcmlwdG9yUmVmIGNhc2NhZGVUb0xh
c3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3IoKQotewotICAgIHN0YXRpYyBDVEZv
bnREZXNjcmlwdG9yUmVmIGRlc2NyaXB0b3IgPSBDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0
dHJpYnV0ZXMoY2FzY2FkZVRvTGFzdFJlc29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KCkuZ2V0KCkp
OwotICAgIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1DVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0
YTo6Y3RGb250KCkgY29uc3QKLXsKLSAgICBpZiAobV9jdEZvbnQpCi0gICAgICAgIHJldHVybiBt
X2N0Rm9udC5nZXQoKTsKLQotICAgIEFTU0VSVChtX2ZvbnQpOwotICAgIG1fY3RGb250ID0gYWRv
cHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMobV9mb250LmdldCgpLCBtX3NpemUs
IG51bGxwdHIsIGNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3Io
KSkpOwotCi0gICAgaWYgKG1fd2lkdGhWYXJpYW50ICE9IEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3Vs
YXJXaWR0aCkgewotICAgICAgICBpbnQgZmVhdHVyZVR5cGVWYWx1ZSA9IGtUZXh0U3BhY2luZ1R5
cGU7Ci0gICAgICAgIGludCBmZWF0dXJlU2VsZWN0b3JWYWx1ZSA9IG1hcEZvbnRXaWR0aFZhcmlh
bnRUb0NURmVhdHVyZVNlbGVjdG9yKG1fd2lkdGhWYXJpYW50KTsKLSAgICAgICAgUmV0YWluUHRy
PENURm9udERlc2NyaXB0b3JSZWY+IHNvdXJjZURlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENv
cHlGb250RGVzY3JpcHRvcihtX2N0Rm9udC5nZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IGZlYXR1cmVUeXBlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZmVhdHVyZVR5cGVWYWx1ZSkpOwotICAgICAg
ICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGZlYXR1cmVTZWxlY3RvciA9IGFkb3B0Q0YoQ0ZOdW1i
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVT
ZWxlY3RvclZhbHVlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBu
ZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlQ29weVdpdGhGZWF0
dXJlKHNvdXJjZURlc2NyaXB0b3IuZ2V0KCksIGZlYXR1cmVUeXBlLmdldCgpLCBmZWF0dXJlU2Vs
ZWN0b3IuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4gbmV3Rm9udCA9IGFk
b3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKG5ld0Rlc2NyaXB0b3IuZ2V0KCks
IG1fc2l6ZSwgMCkpOwotCi0gICAgICAgIGlmIChuZXdGb250KQotICAgICAgICAgICAgbV9jdEZv
bnQgPSBuZXdGb250OwotICAgIH0KLQotICAgIHJldHVybiBtX2N0Rm9udC5nZXQoKTsKLX0KLSNl
bHNlCi1DVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6Y3RGb250KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZm9udCgpOwotfQotI2VuZGlmCi0KLVJldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0
Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2soQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAg
ICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3Io
Y3RGb250KSk7Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzg2ODMgVGhpcyBpcyBhIHNoYWxsb3cgcG9pbnRlciBjb21wYXJlIGZvciB3ZWIg
Zm9udHMKLSAgICAvLyBiZWNhdXNlIHRoZSBVUkwgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhl
IGZvbnQuIFRoaXMgbWVhbnMgd2UgbWlnaHQgZXJyb25lb3VzbHkgZ2V0IGZhbHNlIG5lZ2F0aXZl
cy4KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZV
UkxSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnREZXNjcmlwdG9yLmdldCgp
LCBrQ1RGb250UmVmZXJlbmNlVVJMQXR0cmlidXRlKSkpOwotICAgIEFTU0VSVCghdXJsIHx8IENG
R2V0VHlwZUlEKHVybC5nZXQoKSkgPT0gQ0ZVUkxHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIHVy
bDsKLX0KLQotUmV0YWluUHRyPENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9y
RXF1YWxpdHlDaGVjaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG9iamVjdEZvckVxdWFsaXR5Q2hl
Y2soY3RGb250KCkpOwotfQotCi1SZWZQdHI8U2hhcmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRh
OjpvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlKSBjb25zdAotewotICAgIGlmIChSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUoZm9udCgpLCB0YWJs
ZSwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSkpCi0gICAgICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShkYXRhLmdldCgpKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24o
KSBjb25zdAotewotICAgIFN0cmluZyBmb250RGVzY3JpcHRpb24geyBhZG9wdENGKENGQ29weURl
c2NyaXB0aW9uKGZvbnQoKSkpLmdldCgpIH07Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoZm9udERl
c2NyaXB0aW9uLCAnICcsIG1fc2l6ZSwKLSAgICAgICAgKG1fc3ludGhldGljQm9sZCA/ICIgc3lu
dGhldGljIGJvbGQiIDogIiIpLAotICAgICAgICAobV9zeW50aGV0aWNPYmxpcXVlID8gIiBzeW50
aGV0aWMgb2JsaXF1ZSIgOiAiIiksCi0gICAgICAgIChtX29yaWVudGF0aW9uID09IEZvbnRPcmll
bnRhdGlvbjo6VmVydGljYWwgPyAiIHZlcnRpY2FsIG9yaWVudGF0aW9uIiA6ICIiKSk7Ci19Ci0K
LSNlbmRpZgotCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5TmFtZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGF1dG8gcGxhdGZvcm1Gb250ID0gZm9udCgpKQotICAgICAgICByZXR1cm4gYWRv
cHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShwbGF0Zm9ybUZvbnQpKS5nZXQoKTsKLSAgICByZXR1
cm4geyB9OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGVlMzZkYzZiODVjNDNhM2Q1YjljZDk1NGVj
NGUxMzdiZWY0NDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHbHlwaFBhZ2UuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0j
ZWxzZQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBzaG91bGRGaWxsV2l0aFZlcnRpY2Fs
R2x5cGhzKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
Rm9udCYgZm9udCkKLXsKLSAgICBpZiAoIWZvbnQuaGFzVmVydGljYWxHbHlwaHMoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZm
ZXJbaV0pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBDR0dseXBoIGRlbGV0ZWRHbHlwaCA9IDB4
RkZGRjsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoKQotewotICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gR2x5cGhQYWdlOjpzaXpl
IHx8IGJ1ZmZlckxlbmd0aCA9PSAyICogR2x5cGhQYWdlOjpzaXplKTsKLQotICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSB0aGlzLT5mb250KCk7Ci0gICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5cGhz
KGJ1ZmZlckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgZ2x5cGhTdGVwID0gYnVmZmVyTGVuZ3RoIC8g
R2x5cGhQYWdlOjpzaXplOwotCi0gICAgaWYgKHNob3VsZEZpbGxXaXRoVmVydGljYWxHbHlwaHMo
YnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpKQotICAgICAgICBDVEZvbnRHZXRWZXJ0aWNhbEds
eXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsK
LSAgICBlbHNlCi0gICAgICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0
Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwg
Z2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKLQotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZh
bHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkg
ewotICAgICAgICBhdXRvIHRoZUdseXBoID0gZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdOwotICAgICAg
ICBpZiAodGhlR2x5cGggJiYgdGhlR2x5cGggIT0gZGVsZXRlZEdseXBoKSB7Ci0gICAgICAgICAg
ICBzZXRHbHlwaEZvckluZGV4KGksIHRoZUdseXBoKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>