<?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>115007</bug_id>
          
          <creation_ts>2013-04-22 18:39:23 -0700</creation_ts>
          <short_desc>Remove wxWebKit&apos;s folders from WebCore</short_desc>
          <delta_ts>2013-04-23 12:55:06 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>kevino</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>879555</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-22 18:39:23 -0700</bug_when>
    <thetext>Remove wxWebKit&apos;s folders from WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>879556</commentid>
    <comment_count>1</comment_count>
      <attachid>199138</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-22 18:40:05 -0700</bug_when>
    <thetext>Created attachment 199138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>880088</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-23 12:55:06 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/148983</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199138</attachid>
            <date>2013-04-22 18:40:05 -0700</date>
            <delta_ts>2013-04-23 03:57:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115007-20130422183930.patch</filename>
            <type>text/plain</type>
            <size>344659</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNjMjUwNjJjOGFiZDRm
YmE2YzhjNzM4MTMyNzk4MDA3OTQwMWUzYi4uZTZlMWNjZTYzOGI4OWEwNzc4Y2ExZWM0NmFjM2Vm
ZmMxNDkxMGFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEzLTA0LTIyICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB3eFdl
YktpdCdzIGZvbGRlcnMgZnJvbSBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUwMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgd3hXZWJLaXQgcG9ydCBpcyBubyBsb25nZXIgYWN0aXZl
bHkgbWFpbnRhaW5lZCBieSBLZXZpbgorICAgICAgICBvbiB3ZWJraXQub3JnLiBSZW1vdmUgdGhl
IGNvZGUgdW50aWwgbmV3IG1haW50YWluZXJzIHJlc3VtZSB0aGUgd29yay4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvd3gvQWNjZXNzaWJpbGl0eU9iamVjdFd4LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3d4L0VkaXRvcld4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdl
L3d4L0RyYWdDb250cm9sbGVyV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4
L0NvbG9yV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0Zs
b2F0UmVjdFd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9G
b250Q2FjaGVXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGEuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxhdGZvcm1EYXRhV3guY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGFXeE1hYy5t
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3guY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dseXBoTWFwV3guY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JY29uV3guY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyRGF0
YVd4Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZm
ZXJXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VX
eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UG9pbnRX
eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UmVjdFd4
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRTaXplV3gu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFX
eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3Jt
YXRpb25NYXRyaXhXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3d4L0NsaXBib2FyZFd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9DbGlw
Ym9hcmRXeC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L0NvbnRleHRNZW51SXRl
bVd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9DdXJzb3JXeC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vd3gvRHJhZ0RhdGFXeC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vd3gvRHJhZ0ltYWdlV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL3d4L0V2ZW50TG9vcFd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9G
aWxlU3lzdGVtV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L0tleUV2ZW50
V2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9LZXlib2FyZEV2ZW50V3gu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L0xhbmd1YWdlV3guY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L0xvY2FsREMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS93eC9Mb2NhbGl6ZWRTdHJpbmdzV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL3d4L0xvZ2dpbmdXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
d3gvTWltZVR5cGVSZWdpc3RyeVd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9Nb3VzZUV2ZW50V3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L01vdXNl
V2hlZWxFdmVudFd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9QYXN0ZWJv
YXJkV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Qb3B1cE1lbnVXeC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL3d4L1J1bkxvb3BXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vd3gvU1NMS2V5R2VuZXJhdG9yV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL3d4L1NjcmVlbld4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3Jv
bGxWaWV3V3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L1Njcm9sbGJhclRo
ZW1lV3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1l
V3guaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TZWFyY2hQb3B1cE1lbnVXeC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvU2VhcmNoUG9wdXBNZW51V3guaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TaGFyZWRCdWZmZXJXeC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvU2hhcmVkVGltZXJXeC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vd3gvU291bmRXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vd3gvU3lzdGVtVGltZVd4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4
L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXeC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vd3gvV2lkZ2V0V3guY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4
L3d4Y29kZS9jYWlyby9ub24ta2VybmVkLWRyYXdpbmcuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL3d4L3d4Y29kZS9mb250cHJvcHMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL3d4L3d4Y29kZS9mb250cHJvcHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS93eC93eGNvZGUvZ2RpcGx1cy9ub24ta2VybmVkLWRyYXdpbmcuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS9ndGsvZm9udHByb3BzLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvZ3RrL25vbi1rZXJuZWQtZHJhd2luZy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9zY3JvbGxiYXJfcmVuZGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9m
b250cHJvcHMubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9j
YXJib24vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS93eC93eGNvZGUvbWFjL2NhcmJvbi9zY3JvbGxiYXJfcmVuZGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvbm9uLWtlcm5lZC1kcmF3aW5nLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL3Njcm9sbGJhcl9yZW5kZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvd2luL2ZvbnRwcm9wcy5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9ub24ta2VybmVkLWRyYXdpbmcu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS93aW4vc2Nyb2xsYmFy
X3JlbmRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy93eC9QbHVnaW5EYXRhV3gu
Y3BwOiBSZW1vdmVkLgorCiAyMDEzLTA0LTIyICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgRGVidWcgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS93eC9BY2Nlc3NpYmlsaXR5T2JqZWN0V3guY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS93eC9BY2Nlc3NpYmlsaXR5T2JqZWN0V3guY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjMyNjQyMzc4OTY5Mjg3NzgyOThhMGQ5MzAyOTQ2
NTg0NjM3OWE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvd3gvQWNjZXNzaWJpbGl0eU9iamVjdFd4LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eU9iamVjdC5oIgotCi0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUlnbm9yZUF0dGFj
aG1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQWNjZXNzaWJpbGl0eU9i
amVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1J
bmNsdWRlc09iamVjdCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTWVudUxpc3RQb3B1cCgpIHx8IGlz
TWVudUxpc3RPcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIElnbm9yZU9iamVjdDsKLQotICAgIHJl
dHVybiBEZWZhdWx0QmVoYXZpb3I7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEhBVkUoQUNDRVNTSUJJTElUWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvd3gvRWRpdG9yV3guY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93eC9FZGl0b3JX
eC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDZiNzgzMmY0M2I2ZTRlNzEw
MWU3YmU4MTI0ZWNlOTFmYTdkMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93eC9FZGl0b3JXeC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmlu
IE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkVkaXRvci5oIgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJkV3guaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJk
QWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqKSAKLXsgCi0gICAgcmV0dXJuIENsaXBib2FyZFd4
OjpjcmVhdGUocG9saWN5LCBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSk7Ci19Ci0KLXZvaWQgRWRp
dG9yOjpzaG93Q29sb3JQYW5lbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBFZGl0b3I6OnNob3dGb250UGFuZWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRWRpdG9yOjpzaG93U3R5bGVzUGFuZWwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRHJhZ0NvbnRyb2xs
ZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0RyYWdDb250cm9sbGVyV3guY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzE5YzQ3ZmQ0MGE2NzIwOTJiYmRkNGNjNmZj
OWIyYTQ5NzExMDQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEZJWE1FOiBUaGVzZSB2YWx1ZXMgYXJlIHN0cmFpZ2h0IG91dCBvZiBEcmFnQ29udHJvbGxlck1h
Yywgc28gcHJvYmFibHkgaGF2ZSAKLS8vIGxpdHRsZSBjb3JyZWxhdGlvbiB3aXRoIHd4IHN0YW5k
YXJkcy4uLgotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0g
MjsKLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAw
ICogMTUwMDsKLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0g
NzsKLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7Ci0K
LWNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwotCi1i
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLURyYWdPcGVyYXRpb24g
RHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRhKQotewotICAg
IC8vRklYTUU6IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0ZQotICAgIGlmIChkcmFnRGF0YS0+Y29u
dGFpbnNVUkwoMCkpCi0gICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKLSAgICAgICAg
Ci0gICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwotfSAKLQotY29uc3QgSW50U2l6ZSYgRHJh
Z0NvbnRyb2xsZXI6Om1heERyYWdJbWFnZVNpemUoKQotewotICAgIHN0YXRpYyBjb25zdCBJbnRT
aXplIG1heERyYWdJbWFnZVNpemUoNDAwLCA0MDApOwotICAgIAotICAgIHJldHVybiBtYXhEcmFn
SW1hZ2VTaXplOwotfQotCi12b2lkIERyYWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1E
cmFnKCkKLXsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93eC9FdmVu
dEhhbmRsZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBiNzQ1MGIyMWE0NWY3OTE2NDBkZWZk
ODJhY2RlNmE2NGYzZTJlNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmlu
IE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
LQotI2luY2x1ZGUgIkNsaXBib2FyZFd4LmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJL
ZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRv
dWJsZSBFdmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7Ci0KLWJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKLXsKLSAgICBzdWJmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChtZXYuZXZlbnQoKSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1l
KE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lLCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0KiBoaXR0ZXN0KQotewotICAgIHN1YmZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQobWV2LmV2ZW50KCksIGhpdHRlc3QpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50
VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJm
cmFtZSkKLXsKLSAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KG1ldi5ldmVudCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFdmVudEhh
bmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQotewotICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmll
dyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBpZiAoIWV2ZW50LnRhcmdldE5vZGUoKSB8fCAh
ZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIHx8ICFldmVudC50YXJnZXROb2RlKCktPnJl
bmRlcmVyKCktPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBy
ZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQoZXZlbnQudGFy
Z2V0Tm9kZSgpLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCkpOwotfQotCi1ib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJX
aWRnZXQpCi17Ci0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHJlbmRlcldp
ZGdldC0+d2lkZ2V0KCkpOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkK
LXsKLSAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdG9GcmFtZVZpZXcod2lkZ2V0KS0+ZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwotfQotCi1ib29sIEV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25z
dCAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi0gICAgcmV0dXJuIGZhbHNlOyAKLX0KLQot
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiwgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLSAgICByZXR1cm4gZmFsc2U7IAotfQotCi1ib29sIEV2
ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikKLXsgCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7IAotfQotCi12b2lkIEV2ZW50SGFu
ZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQotewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFt
ZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZy
YW1lKG1fZnJhbWUpOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0Ci17Ci0gICAgLy8gd3ggc2VuZHMgYWN0
aXZhdGUgZXZlbnRzIHNlcGFyYXRlIGZyb20gbW91c2UgZXZlbnRzLiAKLSAgICAvLyBXZSdsbCBo
YXZlIHRvIHRlc3QgdGhlIGV4YWN0IG9yZGVyIG9mIGV2ZW50cywgCi0gICAgLy8gYnV0IGZvciB0
aGUgbW9tZW50IGp1c3QgcmV0dXJuIGZhbHNlLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQo
KSBjb25zdCAKLXsKLSAgICByZXR1cm4gQ2xpcGJvYXJkV3g6OmNyZWF0ZShDbGlwYm9hcmRXcml0
YWJsZSwgQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7Ci19Ci0KLXVuc2lnbmVkIEV2ZW50SGFuZGxl
cjo6YWNjZXNzS2V5TW9kaWZpZXJzKCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6QWx0
S2V5OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9Db2xvcld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Nv
bG9yV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzgxYzU5MTA2NTY5YWQ3
MTliNDQ0M2FhNjk5OTg2NmMxM2FkNzQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0NvbG9y
V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotCi0jaW5jbHVkZSA8
d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2NvbG91ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUNvbG9yOjpDb2xvcihjb25zdCB3eENvbG91ciYgY29sb3IpCi17Ci0gICAgbV9jb2xvciA9
IG1ha2VSR0JBKChpbnQpY29sb3IuUmVkKCksIChpbnQpY29sb3IuR3JlZW4oKSwgKGludCljb2xv
ci5CbHVlKCksIChpbnQpY29sb3IuQWxwaGEoKSk7Ci19Ci0KLUNvbG9yOjpvcGVyYXRvciB3eENv
bG91cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHd4Q29sb3VyKHJlZCgpLCBncmVlbigpLCBibHVl
KCksIGFscGhhKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9GbG9hdFJlY3RXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9GbG9hdFJlY3RXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJiNDYwZTU1ZTlhYmYwNGMwNWE0ODA1NzVkMjQzY2FjM2I5OGJmZDkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvRmxvYXRSZWN0V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoV1hHQykKLUZsb2F0UmVjdDo6RmxvYXRS
ZWN0KGNvbnN0IHd4UmVjdDJERG91YmxlJiByKQotICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50
KHIubV94LCByLm1feSkpCi0gICAgLCBtX3NpemUoRmxvYXRTaXplKHIubV93aWR0aCwgci5tX2hl
aWdodCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25z
dAotewotICAgIHJldHVybiB3eFJlY3QyRERvdWJsZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0
KCkpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTRhZjViMjE3NDY3ZjJmNjc3YjFiODJiYjY1MjM4MDBjYjgyYjRlYS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9Gb250Q2FjaGVXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hl
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+Ci0j
aW5jbHVkZSA8d3gvZm9udGVudW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0
YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPFNpbXBs
ZUZvbnREYXRhPiBmb250RGF0YSA9IDA7Ci0gICAgZm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0
YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpLCBmYWxzZSwg
RG9Ob3RSZXRhaW4pOwotICAgIGlmICghZm9udERhdGEtPmNvbnRhaW5zQ2hhcmFjdGVycyhjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICBmb250RGF0YSA9IGdldFNpbWlsYXJGb250UGxhdGZv
cm1EYXRhKGZvbnQpOwotICAgIGlmICghZm9udERhdGEtPmNvbnRhaW5zQ2hhcmFjdGVycyhjaGFy
YWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICBmb250RGF0YSA9IGdldExhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoZm9udC5mb250RGVzY3JpcHRpb24oKSk7Ci0KLSAgICBBU1NFUlQoZm9udERhdGEpOwot
ICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9u
dERhdGE+IEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYg
Zm9udCkKLXsKLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IHNpbXBsZUZvbnREYXRhID0gMDsK
LSNpZiBPUyhEQVJXSU4pCi0gICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZv
bnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiAKLSAgICAvLyB0aGUgcHJlc2VuY2Ugb2Yga2V5d29y
ZHMgaW4gdGhlIHRoZSByZXF1ZXN0ZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwgd2UnbGwKLSAgICAv
LyBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KLSAg
ICBjb25zdCBGb250RmFtaWx5KiBjdXJyRmFtaWx5ID0gJmZvbnQuZm9udERlc2NyaXB0aW9uKCku
ZmFtaWx5KCk7Ci0gICAgd2hpbGUgKGN1cnJGYW1pbHkgJiYgIXNpbXBsZUZvbnREYXRhKSB7Ci0g
ICAgICAgIGlmIChjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSkgewotICAgICAgICAgICAg
c3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5l
dyBTdHJpbmcoIlBhc2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKLSAgICAgICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDMgJiYgIXNpbXBsZUZvbnREYXRhOyArK2opCi0gICAgICAgICAgICAgICAg
aWYgKGN1cnJGYW1pbHktPmZhbWlseSgpLmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNpbXBsZUZvbnREYXRhID0gZ2V0Q2FjaGVkRm9udERhdGEo
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgZ2VlemFTdHIpOwotICAgICAgICB9Ci0gICAgICAgIGN1
cnJGYW1pbHkgPSBjdXJyRmFtaWx5LT5uZXh0KCk7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKCFz
aW1wbGVGb250RGF0YSkKLSAgICAgICAgc2ltcGxlRm9udERhdGEgPSBnZXRDYWNoZWRGb250RGF0
YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKTsKLQotICAg
IHJldHVybiBzaW1wbGVGb250RGF0YS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U2ltcGxl
Rm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJldGFpbikK
LXsKLSAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhl
IHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawotICAgIC8vIHRo
ZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHBy
ZWZzLgotICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gZmFsbGJhY2sgPSAwOwotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgc3RhdGljIEF0b21pY1N0cmluZyBmYWxsYmFja05hbWUoIkFyaWFsIFVuaWNv
ZGUgTVMiKTsKLSNlbHNlCi0gICAgc3RhdGljIEF0b21pY1N0cmluZyBmYWxsYmFja05hbWUoIlRp
bWVzIE5ldyBSb21hbiIpOwotI2VuZGlmCi0gICAgZmFsbGJhY2sgPSBnZXRDYWNoZWRGb250RGF0
YShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrTmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7Ci0g
ICAgQVNTRVJUKGZhbGxiYWNrKTsKLSAgICAKLSAgICByZXR1cm4gZmFsbGJhY2sucmVsZWFzZSgp
OwotfQotCi1QYXNzT3duUHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgLy8gd3ggd2lsbCBBTFdBWVMgY3JlYXRl
IGEgdmFsaWQgZm9udCwgZXZlbiBpZiB0aGUgZm9udCBmYW1pbHkgd2UncmUgbG9va2luZyBmb3Ig
aXMgbm90IGF2YWlsYWJsZS4KLSAgICAvLyBTbyB3ZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGZv
bnQgaXMgdGhlIG9uZSB3ZSdyZSBsb29raW5nIGZvciBiZWZvcmUgY3JlYXRpbmcgdGhlIGZvbnQu
Ci0gICAgaWYgKCF3eEZvbnRFbnVtZXJhdG9yOjpJc1ZhbGlkRmFjZW5hbWUoZmFtaWx5LnN0cmlu
ZygpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpKTsKLX0KLQotdm9pZCBG
b250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDU1ZjBmY2FiYjA3YzJkOWMzNDMyMmJkNWJjY2MyOWY3YmRmNmEyMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci19Ci0K
LUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uLCBGb250
V2lkdGhWYXJpYW50LCBGb250UmVuZGVyaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRm9udFBsYXRm
b3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOwotfQotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
KiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQotewot
ICAgIHJldHVybiAwOwotfQotCi1ib29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1cHBvcnRz
Rm9ybWF0KGNvbnN0IFN0cmluZyYgLyogZm9ybWF0ICovKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjOTc1Mjk2NTFiM2QyMmJlZTUzNTdjMDRiZjE0M2VmYWQ4ZTE0MTlmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0jZGVmaW5l
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgi
Ci0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlICJGb250V2lkdGhWYXJp
YW50LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgRm9udFBsYXRmb3JtRGF0
YTsKLSAgICBjbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLSAgICBzdHJ1Y3QgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDdXN0b21QbGF0Zm9y
bURhdGEpOwotICAgIHB1YmxpYzoKLSAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpIHsg
fQotICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwotCi0gICAgICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAgIEZvbnRQbGF0Zm9y
bURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywg
Rm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IFJlZ3VsYXJX
aWR0aCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2RlKTsKLSAgICB9Owot
Ci0gICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShTaGFyZWRCdWZmZXIqKTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGEuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTJjYjFlZTRjMmU1YmY5NDA1ZjBmNGM2MTU2MDI2ZjNhZDRmMDY0
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxhdGZvcm1EYXRhLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBLZXZpbiBP
bGxpdmllciAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotIAotI2lmbmRlZiBGb250UGxhdGZvcm1EYXRh
X2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9oCi0KLSNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKLSNpbmNsdWRlICJGb250V2lkdGhWYXJpYW50LmgiCi0jaW5jbHVkZSAiRm9udE9yaWVu
dGF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KLQotI2luY2x1
ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9mb250Lmg+Ci0jaW5jbHVkZSA8d3gvZ2RpY21u
Lmg+Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+Ci0KLSNpZiBfX09CSkNfXwotQGNsYXNzIE5TRm9udDsKLSNlbHNl
Ci1jbGFzcyBOU0ZvbnQ7Ci0jZW5kaWYKLQotaW5saW5lIENURm9udFJlZiB0b0NURm9udFJlZihO
U0ZvbnQgKm5zRm9udCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KG5zRm9u
dCk7IH0KLQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRm9udEhvbGRl
cjogcHVibGljIFdURjo6UmVmQ291bnRlZDxGb250SG9sZGVyPgotewotcHVibGljOgotICAgIEZv
bnRIb2xkZXIoKQotICAgICAgICA6IG1fZm9udCgwKQotICAgIHt9Ci0KLSAgICBGb250SG9sZGVy
KHd4Rm9udCogZm9udCkKLSAgICAgICAgOiBtX2ZvbnQoZm9udCkKLSAgICB7fQotCi0gICAgfkZv
bnRIb2xkZXIoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1fZm9udDsKLSAgICB9Ci0KLSAgICB3
eEZvbnQqIGZvbnQoKSB7IHJldHVybiBtX2ZvbnQ7IH0KLQotcHJpdmF0ZToKLSAgICB3eEZvbnQq
IG1fZm9udDsKLX07Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgewotcHVibGljOgotICAgIGVu
dW0gRm9udFN0YXRlIHsgVU5JTklUSUFMSVpFRCwgREVMRVRFRCwgVkFMSUQgfTsKLQotICAgIEZv
bnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgIDogbV9m
b250U3RhdGUoREVMRVRFRCkKLSAgICAsIG1fZm9udCgwKQotICAgICwgbV9zaXplKDApCi0jaWYg
T1MoREFSV0lOKQotICAgICwgbV9hdHN1Rm9udElEKDApCi0jZW5kaWYKLSAgICB7IH0KLQotICAg
IH5Gb250UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgIAotICAgIEZvbnRQbGF0Zm9y
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKLSAgICA6IG1fZm9udFN0
YXRlKFVOSU5JVElBTElaRUQpCi0gICAgLCBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQot
I2lmIE9TKERBUldJTikKLSAgICAsIG1fYXRzdUZvbnRJRCgwKQotI2VuZGlmCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBGb250UGxhdGZvcm1EYXRhKCkgCi0gICAgOiBtX2ZvbnRTdGF0ZShVTklO
SVRJQUxJWkVEKQotICAgICwgbV9mb250KDApCi0gICAgLCBtX3NpemUoMCkKLSNpZiBPUyhEQVJX
SU4pCi0gICAgLCBtX2F0c3VGb250SUQoMCkKLSNlbmRpZgotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgd3hGb250KiBmb250KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9mb250LT5mb250KCk7
Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7Ci0gICAgICAgIHN3aXRj
aCAobV9mb250U3RhdGUpIHsKLSAgICAgICAgY2FzZSBERUxFVEVEOgotICAgICAgICAgICAgcmV0
dXJuIC0xOwotICAgICAgICBjYXNlIFVOSU5JVElBTElaRUQ6Ci0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgY2FzZSBWQUxJRDoKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlSGFzaCgp
OyAgICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb21wdXRl
SGFzaCgpIGNvbnN0OwotICAgIAotICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhl
cikgY29uc3QKLSAgICB7IAotICAgICAgICBpZiAobV9mb250ICYmIG1fZm9udFN0YXRlID09IFZB
TElEICYmIG90aGVyLm1fZm9udFN0YXRlID09IFZBTElEICYmIG90aGVyLm1fZm9udCkgewotICAg
ICAgICAgICAgd3hGb250KiB0aGlzRm9udCA9IG1fZm9udC0+Zm9udCgpOwotICAgICAgICAgICAg
d3hGb250KiBvdGhlckZvbnQgPSBvdGhlci5tX2ZvbnQtPmZvbnQoKTsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzRm9udC0+SXNPaygpICYmIG90aGVyRm9udC0+SXNPaygpICYmIHRoaXNGb250LT5J
c1NhbWVBcygqb3RoZXJGb250KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gbV9mb250U3RhdGUgPT0gb3RoZXIubV9mb250U3RhdGU7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFN0YXRl
ID09IERFTEVURUQ7IH0KLSAgICAKLSAgICBib29sIHJvdW5kc0dseXBoQWR2YW5jZXMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIAotICAgIGJvb2wgYWxsb3dzTGlnYXR1cmVzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBGb250T3JpZW50YXRpb24gb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBIb3Jpem9udGFsOyB9IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi0g
ICAgdm9pZCBzZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRpb24pIHsgfSAvLyBGSVhNRTogSW1w
bGVtZW50LgotCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldCwgc28ganVzdCByZXR1
cm4gdGhlIGRlZmF1bHQgdmFsdWUgZm9yIG5vdy4KLSAgICBGb250V2lkdGhWYXJpYW50IHdpZHRo
VmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIFJlZ3VsYXJXaWR0aDsgfQotICAgIAotICAgIGJvb2wg
aXNDb21wb3NpdGVGb250UmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotI2lm
IE9TKFdJTkRPV1MpCi0gICAgYm9vbCB1c2VHREkoKSBjb25zdDsKLSAgICBIRk9OVCBoZm9udCgp
IGNvbnN0OwotI2VuZGlmCi0KLSNpZiBPUyhEQVJXSU4pCi0gICAgQVRTVUZvbnRJRCBtX2F0c3VG
b250SUQ7Ci0gICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0OwotICAgIE5TRm9udCogbnNGb250
KCkgY29uc3QgeyByZXR1cm4gbV9uc0ZvbnQ7IH0KLSAgICBDVEZvbnRSZWYgY3RGb250KCkgY29u
c3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KG1fbnNGb250KTsgfQotICAg
IHZvaWQgY2FjaGVOU0ZvbnQoKTsKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmlu
ZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRm9udFN0YXRl
IG1fZm9udFN0YXRlOwotICAgIFdURjo6UmVmUHRyPEZvbnRIb2xkZXI+IG1fZm9udDsKLSAgICBm
bG9hdCBtX3NpemU7Ci0jaWYgT1MoREFSV0lOKQotICAgIE5TRm9udCogbV9uc0ZvbnQ7Ci0jZW5k
aWYKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9Gb250UGxhdGZvcm1EYXRhV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3JtRGF0YVd4LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDUwY2FjMTcxMWFmYzUwNzdiOWVlNjRhYzIyN2M1ZTQzNzlkZWZlNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxhdGZvcm1EYXRhV3guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4g
T2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udERl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2ZvbnQuaD4KLSNpbmNsdWRlIDx3eC9nZGljbW4uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgd3hGb250RmFtaWx5IGZvbnRGYW1pbHlU
b1d4Rm9udEZhbWlseShjb25zdCBpbnQgZmFtaWx5KQotewotICAgIHN3aXRjaCAoZmFtaWx5KSB7
Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKLSAgICAgICAg
ICAgIHJldHVybiB3eEZPTlRGQU1JTFlfREVGQVVMVDsKLSAgICAgICAgY2FzZSBGb250RGVzY3Jp
cHRpb246OlNlcmlmRmFtaWx5OgotICAgICAgICAgICAgcmV0dXJuIHd4Rk9OVEZBTUlMWV9ST01B
TjsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKLSAgICAg
ICAgICAgIHJldHVybiB3eEZPTlRGQU1JTFlfTU9ERVJOOwotICAgICAgICBjYXNlIEZvbnREZXNj
cmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgotICAgICAgICAgICAgcmV0dXJuIHd4Rk9OVEZBTUlM
WV9URUxFVFlQRTsgLy8gVE9ETzogQ2hlY2sgdGhlc2UgYXJlIGVxdWl2YWxlbnQKLSAgICAgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1pbHk6Ci0gICAgICAgICAgICByZXR1cm4g
d3hGT05URkFNSUxZX1NDUklQVDsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OkZhbnRh
c3lGYW1pbHk6Ci0gICAgICAgICAgICByZXR1cm4gd3hGT05URkFNSUxZX0RFQ09SQVRJVkU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gd3hGT05URkFNSUxZX0RFRkFVTFQ7
Ci0gICAgfQotfQotCi1zdGF0aWMgd3hGb250V2VpZ2h0IGZvbnRXZWlnaHRUb1d4Rm9udFdlaWdo
dChGb250V2VpZ2h0IHdlaWdodCkKLXsKLSAgICBpZiAod2VpZ2h0ID49IEZvbnRXZWlnaHQ2MDAp
Ci0gICAgICAgIHJldHVybiB3eEZPTlRXRUlHSFRfQk9MRDsKLQotICAgIGlmICh3ZWlnaHQgPD0g
Rm9udFdlaWdodDMwMCkKLSAgICAgICAgcmV0dXJuIHd4Rk9OVFdFSUdIVF9MSUdIVDsKLSAgICAK
LSAgICByZXR1cm4gd3hGT05UV0VJR0hUX05PUk1BTDsKLX0gCi0KLXN0YXRpYyBpbnQgaXRhbGlj
VG9XeEZvbnRTdHlsZShib29sIGlzSXRhbGljKQotewotICAgIGlmIChpc0l0YWxpYykKLSAgICAg
ICAgcmV0dXJuIHd4Rk9OVFNUWUxFX0lUQUxJQzsKLSAgICAKLSAgICByZXR1cm4gd3hGT05UU1RZ
TEVfTk9STUFMOwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzYywgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0v
LyBOQjogVGhlIFdpbmRvd3Mgd3hGb250IGNvbnN0cnVjdG9yIGhhcyB0d28gZm9ybXMsIG9uZSB0
YWtpbmcgYSB3eFNpemUgKHdpdGggcGl4ZWxzKQotLy8gYW5kIG9uZSB0YWtpbmcgYW4gaW50IChw
b2ludHMpLiBXaGVuIHBvaW50cyBhcmUgdXNlZCwgV2luZG93cyBjYWxjdWxhdGVzCi0vLyBhIHBp
eGVsIHNpemUgdXNpbmcgYW4gYWxnb3JpdGhtIHdoaWNoIGNhdXNlcyB0aGUgc2l6ZSB0byBiZSB3
YXkgb2ZmLiBIb3dldmVyLAotLy8gdGhpcyBpcyBhIG1vb3QgaXNzdWUgb24gTGludXggYW5kIE1h
YyBhcyB0aGV5IG9ubHkgYWNjZXB0IHRoZSBwb2ludCBhcmd1bWVudC4gU28sCi0vLyB3ZSB1c2Ug
dGhlIHBpeGVsIHNpemUgY29uc3RydWN0b3Igb24gV2luZG93cywgYnV0IHdlIHVzZSBwb2ludCBz
aXplIG9uIExpbnV4IGFuZCBNYWMuCi0jaWYgX19XWE1TV19fCi0gICAgbV9mb250ID0gYWRvcHRS
ZWYobmV3IEZvbnRIb2xkZXIobmV3IHd4Rm9udCggICB3eFNpemUoMCwgLWRlc2MuY29tcHV0ZWRQ
aXhlbFNpemUoKSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5
VG9XeEZvbnRGYW1pbHkoZGVzYy5nZW5lcmljRmFtaWx5KCkpLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXRhbGljVG9XeEZvbnRTdHlsZShkZXNjLml0YWxpYygpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodFRvV3hGb250V2VpZ2h0KGRlc2Mu
d2VpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5LnN0cmluZygpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgKSk7IAotI2Vsc2UKLSAg
ICBtX2ZvbnQgPSBhZG9wdFJlZihuZXcgRm9udEhvbGRlcihuZXcgd3hGb250KCAgIGRlc2MuY29t
cHV0ZWRQaXhlbFNpemUoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRG
YW1pbHlUb1d4Rm9udEZhbWlseShkZXNjLmdlbmVyaWNGYW1pbHkoKSksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGFsaWNUb1d4Rm9udFN0eWxlKGRlc2MuaXRhbGljKCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0VG9XeEZvbnRXZWlnaHQo
ZGVzYy53ZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkuc3RyaW5nKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICApKTsgCi0jZW5k
aWYKLSNpZiBPUyhEQVJXSU4pCi0jaWYgIXd4T1NYX1VTRV9DT1JFX1RFWFQKLSNpZiB3eENIRUNL
X1ZFUlNJT04oMiw5LDApCi0gICAgbV9hdHN1Rm9udElEID0gbV9mb250LT5mb250KCktPk9TWEdl
dEFUU1VGb250SUQoKTsKLSNlbHNlCi0gICAgbV9hdHN1Rm9udElEID0gbV9mb250LT5mb250KCkt
Pk1hY0dldEFUU1VGb250SUQoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgbV9uc0ZvbnQgPSAwOwot
ICAgIGNhY2hlTlNGb250KCk7Ci0jZW5kaWYKLSAgICBtX3NpemUgPSBkZXNjLmNvbXB1dGVkUGl4
ZWxTaXplKCk7Ci0gICAgbV9mb250U3RhdGUgPSBWQUxJRDsKLSAgICBtX3NpemUgPSBkZXNjLmNv
bXB1dGVkUGl4ZWxTaXplKCk7Ci19Ci0KLXVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6OmNvbXB1
dGVIYXNoKCkgY29uc3QKLXsKLSAgICB3eEZvbnQqIHRoaXNGb250ID0gbV9mb250LT5mb250KCk7
Ci0gICAgQVNTRVJUKHRoaXNGb250ICYmIHRoaXNGb250LT5Jc09rKCkpOwotCi0gICAgLy8gbWFr
ZSBhIGhhc2ggdGhhdCBpcyB1bmlxdWUgZm9yIHRoaXMgZm9udCwgYnV0IG5vdCBnbG9iYWxseSB1
bmlxdWUgLSB0aGF0IGlzLAotICAgIC8vIGEgZm9udCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBlcXVh
bCBzaG91bGQgZ2VuZXJhdGUgdGhlIHNhbWUgaGFzaAotICAgIGNvbnN0IGNoYXIqIGZvbnROYW1l
ID0gdGhpc0ZvbnQtPkdldEZhY2VOYW1lKCkudXRmOF9zdHIoKTsKLSAgICB1aW50cHRyX3QgaGFz
aENvZGVzWzZdID0gewotICAgICAgICB0aGlzRm9udC0+R2V0UG9pbnRTaXplKCksCi0gICAgICAg
IHRoaXNGb250LT5HZXRGYW1pbHkoKSwKLSAgICAgICAgdGhpc0ZvbnQtPkdldFN0eWxlKCksCi0g
ICAgICAgIHRoaXNGb250LT5HZXRXZWlnaHQoKSwKLSAgICAgICAgdGhpc0ZvbnQtPkdldFVuZGVy
bGluZWQoKSwKLSAgICAgICAgKHVpbnRwdHJfdCl0aGlzRm9udAotICAgIH07Ci0KLSAgICByZXR1
cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMp
OwotfQotCi1Gb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci0gICAgbV9m
b250U3RhdGUgPSBVTklOSVRJQUxJWkVEOwotICAgIG1fZm9udCA9IDA7Ci19Ci0KLSNpZm5kZWYg
TkRFQlVHCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykKLWJvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6dXNlR0RJKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotSEZPTlQgRm9udFBsYXRmb3JtRGF0YTo6aGZvbnQoKSBjb25zdAotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIRk9OVD4obV9mb250LT5mb250KCktPkdldEhGT05UKCkpOwotfQotI2VuZGlm
Ci0KLSNpZiBPUyhEQVJXSU4pCi1DR0ZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6Y2dGb250KCkg
Y29uc3QKLXsKLSAgICBDR0ZvbnRSZWYgY2dGb250ID0gMDsKLSNpZmRlZiB3eE9TWF9VU0VfQ09S
RV9URVhUICYmIHd4T1NYX1VTRV9DT1JFX1RFWFQKLSAgICBjZ0ZvbnQgPSBDVEZvbnRDb3B5R3Jh
cGhpY3NGb250KChDVEZvbnRSZWYpbV9mb250LT5mb250KCktPk9TWEdldENURm9udCgpLCAwKTsK
LSNlbHNlCi0gICAgQVRTRm9udFJlZiBmb250UmVmOwotICAgIAotICAgIGZvbnRSZWYgPSBGTUdl
dEFUU0ZvbnRSZWZGcm9tRm9udChtX2F0c3VGb250SUQpOwotICAgIAotICAgIGlmIChmb250UmVm
KQotICAgICAgICBjZ0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCh2b2lkKikm
Zm9udFJlZik7Ci0jZW5kaWYKLSAgICByZXR1cm4gY2dGb250OwotfQotI2VuZGlmCi0KLQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxh
dGZvcm1EYXRhV3hNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9G
b250UGxhdGZvcm1EYXRhV3hNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVm
YzQzZTUxZjhmYzhjMDhmZmUzZmE1OTU1YmI3YmE1ZmM2MGYwMWEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvRm9udFBsYXRmb3JtRGF0YVd4TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTQz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgS2V2aW4gT2xsaXZpZXIsIFN0ZWZh
biBDc29tb3IgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9mb250Lmg+Ci0jaW5jbHVkZSA8
d3gvZm9udHV0aWwuaD4KLQotI2lmICF3eENIRUNLX1ZFUlNJT04oMiw5LDApCi0jaW5jbHVkZSA8
d3gvbWFjL3ByaXZhdGUuaD4KLSNlbHNlCi0jaW5jbHVkZSA8d3gvb3N4L3ByaXZhdGUuaD4KLSNl
bmRpZgotCi0jaWYgIXd4Q0hFQ0tfVkVSU0lPTigyLDksMCkgfHwgIXd4T1NYX1VTRV9DT0NPQQot
Ci1zdGF0aWMgY29uc3QgTlNBZmZpbmVUcmFuc2Zvcm1TdHJ1Y3Qga1NsYW50TlNUcmFuc2Zvcm1T
dHJ1Y3QgPSB7IDEsIDAsIHRhbihkZWcycmFkKDExKSksIDEsIDAsIDAgIH07Ci0KLU5TRm9udCog
T1NYQ3JlYXRlTlNGb250KGNvbnN0IHd4TmF0aXZlRm9udEluZm8qIGluZm8pCi17Ci0gICAgTlNG
b250KiBuc0ZvbnQ7Ci0gICAgaW50IHdlaWdodCA9IDU7Ci0gICAgTlNGb250VHJhaXRNYXNrIHRy
YWl0cyA9IDA7Ci0gICAgaWYgKGluZm8tPkdldFdlaWdodCgpID09IHd4Rk9OVFdFSUdIVF9CT0xE
KQotICAgIHsKLSAgICAgICAgdHJhaXRzIHw9IE5TQm9sZEZvbnRNYXNrOwotICAgICAgICB3ZWln
aHQgPSA5OwotICAgIH0KLSAgICBlbHNlIGlmIChpbmZvLT5HZXRXZWlnaHQoKSA9PSB3eEZPTlRX
RUlHSFRfTElHSFQpCi0gICAgICAgIHdlaWdodCA9IDM7Ci0KLSAgICBpZiAoaW5mby0+R2V0U3R5
bGUoKSA9PSB3eEZPTlRTVFlMRV9JVEFMSUMgfHwgaW5mby0+R2V0U3R5bGUoKSA9PSB3eEZPTlRT
VFlMRV9TTEFOVCkKLSAgICAgICAgdHJhaXRzIHw9IE5TSXRhbGljRm9udE1hc2s7Ci0gICAgCi0g
ICAgbnNGb250ID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZh
bWlseTooTlNTdHJpbmcqKShDRlN0cmluZ1JlZil3eE1hY0NGU3RyaW5nSG9sZGVyKGluZm8tPkdl
dEZhY2VOYW1lKCkpIAotICAgICAgICB0cmFpdHM6dHJhaXRzIHdlaWdodDp3ZWlnaHQgc2l6ZTpp
bmZvLT5HZXRQb2ludFNpemUoKV07Ci0gICAgCi0gICAgaWYgKCBuc0ZvbnQgPT0gbmlsICkKLSAg
ICB7Ci0gICAgICAgIE5TRm9udFRyYWl0TWFzayByZW1haW5pbmdUcmFpdHMgPSB0cmFpdHM7Ci0g
ICAgICAgIG5zRm9udCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9udFdp
dGhGYW1pbHk6KE5TU3RyaW5nKikoQ0ZTdHJpbmdSZWYpd3hNYWNDRlN0cmluZ0hvbGRlcihpbmZv
LT5HZXRGYWNlTmFtZSgpKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyYWl0czowIHdlaWdodDo1IHNpemU6aW5mby0+R2V0UG9p
bnRTaXplKCldOwotICAgICAgICBpZiAoIG5zRm9udCA9PSBuaWwgKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIGluZm8tPkdldFdlaWdodCgpID09IHd4Rk9OVFdFSUdIVF9CT0xEICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuc0ZvbnQgPSBbTlNGb250IGJvbGRTeXN0ZW1G
b250T2ZTaXplOmluZm8tPkdldFBvaW50U2l6ZSgpXTsKLSAgICAgICAgICAgICAgICByZW1haW5p
bmdUcmFpdHMgJj0gfk5TQm9sZEZvbnRNYXNrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG5zRm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpp
bmZvLT5HZXRQb2ludFNpemUoKV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIGZh
bGxiYWNrIC0gaWYgaW4gZG91YnQsIGxldCBnbyBvZiB0aGUgYm9sZCBhdHRyaWJ1dGUKLSAgICAg
ICAgaWYgKCBuc0ZvbnQgJiYgKHJlbWFpbmluZ1RyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spICkK
LSAgICAgICAgewotICAgICAgICAgICAgTlNGb250KiBuc0ZvbnRXaXRoVHJhaXRzID0gbmlsOwot
ICAgICAgICAgICAgaWYgKCByZW1haW5pbmdUcmFpdHMgJiBOU0JvbGRGb250TWFzaykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBuc0ZvbnRXaXRoVHJhaXRzID0gW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpuc0ZvbnQgdG9IYXZlVHJhaXQ6TlNC
b2xkRm9udE1hc2tdOwotICAgICAgICAgICAgICAgIGlmICggbnNGb250V2l0aFRyYWl0cyA9PSBu
aWwgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbnNGb250V2l0aFRy
YWl0cyA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6bnNG
b250IHRvSGF2ZVRyYWl0Ok5TSXRhbGljRm9udE1hc2tdOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5zRm9udFdpdGhUcmFpdHMgIT0gbmlsICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
bWFpbmluZ1RyYWl0cyAmPSB+TlNJdGFsaWNGb250TWFzazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVtYWluaW5nVHJhaXRzICY9IH5OU0JvbGRGb250TWFzazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIHJlbWFpbmluZ1RyYWl0cyAmIE5TSXRh
bGljRm9udE1hc2spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCBuc0ZvbnRX
aXRoVHJhaXRzID09IG5pbCApCi0gICAgICAgICAgICAgICAgICAgIG5zRm9udFdpdGhUcmFpdHMg
PSBuc0ZvbnQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTlNBZmZpbmVUcmFu
c2Zvcm0qIHRyYW5zZm9ybSA9IFtOU0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm1dOwotICAgICAg
ICAgICAgICAgIFt0cmFuc2Zvcm0gc2V0VHJhbnNmb3JtU3RydWN0OmtTbGFudE5TVHJhbnNmb3Jt
U3RydWN0XTsKLSAgICAgICAgICAgICAgICBbdHJhbnNmb3JtIHNjYWxlQnk6aW5mby0+R2V0UG9p
bnRTaXplKCldOwotICAgICAgICAgICAgICAgIE5TRm9udERlc2NyaXB0b3IqIGl0YWxpY0Rlc2Mg
PSBbW25zRm9udFdpdGhUcmFpdHMgZm9udERlc2NyaXB0b3JdIGZvbnREZXNjcmlwdG9yV2l0aE1h
dHJpeDp0cmFuc2Zvcm1dOwotICAgICAgICAgICAgICAgIGlmICggaXRhbGljRGVzYyAhPSBuaWwg
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTlNGb250KiBmID0gW05T
Rm9udCBmb250V2l0aERlc2NyaXB0b3I6aXRhbGljRGVzYyBzaXplOihDR0Zsb2F0KShpbmZvLT5H
ZXRQb2ludFNpemUoKSldOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGYgIT0gbmlsICkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5zRm9udFdpdGhUcmFpdHMgPSBmOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggbnNGb250V2l0aFRyYWl0cyAh
PSBuaWwgKQotICAgICAgICAgICAgICAgIG5zRm9udCA9IG5zRm9udFdpdGhUcmFpdHM7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgICAgICAgICAKLSAgICB3eEFTU0VSVF9NU0cobnNGb250ICE9IG5p
bCx3eFQoIkNvdWxkbid0IGNyZWF0ZSBuc0ZvbnQiKSkgOwotICAgIHd4TWFjQ29jb2FSZXRhaW4o
bnNGb250KTsKLSAgICByZXR1cm4gbnNGb250OwotfQotCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmNhY2hlTlNGb250KCkKLXsKLSAgICBp
ZiAobV9uc0ZvbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0jaWYgd3hDSEVDS19WRVJT
SU9OKDIsOSwxKSAmJiB3eE9TWF9VU0VfQ09DT0EKLSAgICBpZiAobV9mb250ICYmIG1fZm9udC0+
Zm9udCgpKQotICAgICAgICBtX25zRm9udCA9IChOU0ZvbnQqKW1fZm9udC0+Zm9udCgpLT5PU1hH
ZXROU0ZvbnQoKTsKLSNlbHNlCi0gICAgbV9uc0ZvbnQgPSBPU1hDcmVhdGVOU0ZvbnQobV9mb250
LT5mb250KCktPkdldE5hdGl2ZUZvbnRJbmZvKCkpOwotI2VuZGlmCi19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3guY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2YzI2NWI4ODQ2YWEzZTQxNzcwODJiZmMwMGI0N2MyY2VjOGRhNGUw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllci4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCi0jaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLQotI2lmIE9TKFdJTkRPV1MpCi0jaW5j
bHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotdHlwZWRlZiBXZWJDb3JlOjpVbmlzY3JpYmVD
b250cm9sbGVyIENvbXBsZXhUZXh0Q29udHJvbGxlcjsKLSNlbmRpZgotCi0jaWYgT1MoREFSV0lO
KQotI2luY2x1ZGUgIm1hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCIKLSNlbmRpZgotCi0jaW5j
bHVkZSA8d3gvZGNjbGllbnQuaD4KLSNpbmNsdWRlICJmb250cHJvcHMuaCIKLSNpbmNsdWRlICJu
b24ta2VybmVkLWRyYXdpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEZvbnQ6
OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCi17Ci0jaWYgT1MoV0lORE9X
UykgfHwgT1MoREFSV0lOKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLX0KLQotYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5D
b21wbGV4VGV4dCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Ci17Ci0gICAgLy8gcHJlcGFyZSBEQwotICAgIENvbG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0
LT5maWxsQ29sb3IoKTsKLQotICAgIC8vIFdlIGNhbid0IHVzZSB3eCBkcmF3aW5nIG1ldGhvZHMg
b24gV2luL0xpbnV4IGJlY2F1c2UgdGhleSBhdXRvbWF0aWNhbGx5IGtlcm4gdGV4dAotICAgIC8v
IHNvIHdlJ3ZlIGNyZWF0ZWQgYSBmdW5jdGlvbiB3aXRoIHBsYXRmb3JtIGRlcGVuZGVudCBkcmF3
aW5nIGltcGxlbWVudGF0aW9ucyB0aGF0Ci0gICAgLy8gd2lsbCBob3BlZnVsbHkgYmUgZm9sZGVk
IGludG8gd3ggb25jZSB0aGUgQVBJIGhhcyBzb2xpZGlmaWVkLgotICAgIC8vIHNlZSBwbGF0Zm9y
bS93eC93eGNvZGUvPHBsYXRmb3JtPiBmb3IgdGhlIGltcGxlbWVudGF0aW9ucy4KLSAgICBncmFw
aGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICBkcmF3VGV4dFdpdGhTcGFjaW5nKGdyYXBoaWNzQ29u
dGV4dCwgZm9udCwgY29sb3IsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsK
LSAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSNpZiBPUyhX
SU5ET1dTKSB8fCBPUyhEQVJXSU4pCi0gICAgQ29tcGxleFRleHRDb250cm9sbGVyIGl0KHRoaXMs
IHJ1bik7Ci0gICAgaXQuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICBmbG9hdCBhZnRlcldp
ZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgLy8gVXNpbmcgcm91bmRmKCkgcmF0aGVy
IHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNlIHRvIGVuc3Vy
ZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotI2lmIE9T
KFdJTkRPV1MpCi0gICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICAgICAgZmxv
YXQgdG90YWxXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdChwb2ludC54KCkgKyBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55
KCksIHJvdW5kZih0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHRvdGFsV2lkdGgg
LSBhZnRlcldpZHRoKSwgaCk7Ci0jZWxzZQotICAgICAgICBmbG9hdCB0b3RhbFdpZHRoID0gaXQu
dG90YWxXaWR0aCgpOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZsb29y
Zih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHRvdGFsV2lkdGgg
LSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKLSNl
bmRpZgotICAgIH0gCi0gICAgCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9v
cmYoYmVmb3JlV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihhZnRlcldpZHRoKSAtIGZsb29yZihi
ZWZvcmVXaWR0aCksIGgpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKLSNlbmRpZgotfQotCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZh
bmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgaW50IC8qIGZyb20g
Ki8sIGludCAvKiB0byAqLywgR2x5cGhCdWZmZXImIC8qIGdseXBoQnVmZmVyICovLCBGb3JUZXh0
RW1waGFzaXNPck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8pIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIGJ5IG1vdmluZyBtb3N0IG9mIHRoZSBkcmF3Q29tcGxleFRleHQo
KSBpbXBsZW1lbnRhdGlvbiBpbiBoZXJlLiBTZXQgdXAgdGhlCi0gICAgLy8gQ29tcGxleFRleHRD
b250cm9sbGVyIGFjY29yZGluZyB0byBmb3JUZXh0RW1waGFzaXMuCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotI2lmIE9TKFdJTkRPV1MpIHx8
IE9TKERBUldJTikKLSAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsg
YWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCi0gICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7Ci0KLSAgICBmbG9hdCBzdGFydFggPSBwb2ludC54KCk7Ci0gICAgQ29tcGxleFRl
eHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFu
Y2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29G
YXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0gICAgCi0g
ICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gIEdpdmUg
dXAuCi0gICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQot
ICAgIGlmIChydW4ucnRsKCkpIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgICAgICBjb250cm9sbGVy
LmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICAgICAgc3RhcnRYICs9IGNvbnRyb2xsZXIucnVu
V2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aDsKLSNlbHNlCi0gICAgICAgIHN0YXJ0WCArPSBjb250
cm9sbGVyLnRvdGFsV2lkdGgoKSAtIGFmdGVyV2lkdGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
LCBlbmQgPSBnbHlwaEJ1ZmZlci5zaXplKCkgLSAxOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC8g
MjsgKytpLCAtLWVuZCkKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLnN3YXAoaSwgZW5kKTsKLSNl
bmRpZgotICAgIH0gZWxzZQotICAgICAgICBzdGFydFggKz0gYmVmb3JlV2lkdGg7Ci0KLSAgICAv
LyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93IGF0IHRoZSBzdGFydGluZyBwb2ludCByZXR1cm5l
ZCBpbiBzdGFydFguCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgp
KTsKLSAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQ
b2ludCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZm
ZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50Lnko
KSkpOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqKSBjb25zdAotewotI2lmIE9TKFdJTkRPV1MpIHx8IE9TKERBUldJTikK
LSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNr
Rm9udHMpOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5n
dGgoKSk7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotI2Vsc2UKLSAg
ICByZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1pbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgs
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0jaWYgT1MoV0lORE9XUykgfHwg
T1MoREFSV0lOKQotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1
bik7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotI2VuZGlmCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HbHlwaE1hcFd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0dseXBoTWFwV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmY4NmU0
ZGQzMDRhNDMzYTgyYTJhZGViY2UxMDRjM2FhMDExNGEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0dseXBoTWFwV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUu
aCIKLQotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSA8dW5pY29kZS91dGYx
Ni5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZQotewotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgYm9vbCBp
c1V0ZjE2ID0gYnVmZmVyTGVuZ3RoICE9IGxlbmd0aDsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLQotICAg
ICAgICBpZihpc1V0ZjE2KSB7Ci0gICAgICAgICAgICBVQ2hhciBsZWFkID0gYnVmZmVyW2kgKiAy
XTsKLSAgICAgICAgICAgIFVDaGFyIHRyYWlsID0gYnVmZmVyW2kgKiAyICsgMV07Ci0gICAgICAg
ICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hhcmFjdGVyID0gYnVmZmVyW2ldOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgY2hhcmFjdGVy
LCBmb250RGF0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFkaWVudFd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0dyYWRpZW50V3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTZk
ZWRhMTNiMTQwMzRhZmZiNDVjYmIxN2IxMjViMGYxZDI3MzllLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0dyYWRpZW50V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmll
cnMuY29tPiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0KLSNpbmNsdWRlICJDU1NQYXJzZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0j
aW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSA8d3gvZGMuaD4KLSNpbmNsdWRlIDx3eC9k
Y2dyYXBoLmg+Ci0jaW5jbHVkZSA8d3gvZ3JhcGhpY3MuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ry
b3koKQotewotICAgIGRlbGV0ZSBtX2dyYWRpZW50OwotfQotCi1QbGF0Zm9ybUdyYWRpZW50IEdy
YWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKLXsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAgICAg
ICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci0KLSNpZiB3eENIRUNLX1ZFUlNJT04oMiwgOSwgMSkKLSAg
ICBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIHd4R3JhcGhpY3NSZW5kZXJlciog
cmVuZGVyZXIgPSAwOwotI2lmIHd4VVNFX0NBSVJPCi0gICAgcmVuZGVyZXIgPSB3eEdyYXBoaWNz
UmVuZGVyZXI6OkdldENhaXJvUmVuZGVyZXIoKTsKLSNlbHNlCi0gICAgcmVuZGVyZXIgPSB3eEdy
YXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpOwotI2VuZGlmCi0gICAgaWYgKHJl
bmRlcmVyKSB7Ci0gICAgICAgIHd4R3JhcGhpY3NHcmFkaWVudFN0b3BzIHN0b3BzOwotICAgICAg
ICBWZWN0b3I8Q29sb3JTdG9wPjo6aXRlcmF0b3Igc3RvcEl0ZXJhdG9yID0gbV9zdG9wcy5iZWdp
bigpOwotICAgICAgICBpbnQgbnVtU3RvcHMgPSAwOwotICAgICAgICBzdG9wcy5TZXRTdGFydENv
bG91cih3eENvbG91cigyNTUqc3RvcEl0ZXJhdG9yLT5yZWQsIDI1NSpzdG9wSXRlcmF0b3ItPmdy
ZWVuLCAyNTUqc3RvcEl0ZXJhdG9yLT5ibHVlLCAyNTUqc3RvcEl0ZXJhdG9yLT5hbHBoYSkpOwot
ICAgICAgICAKLSAgICAgICAgd2hpbGUgKHN0b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7
Ci0gICAgICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBzdG9wSXRlcmF0b3ItPnN0b3A7Ci0gICAg
ICAgICAgICBpZiAobV9yYWRpYWwgJiYgbV9yMCkKLSAgICAgICAgICAgICAgICBwb3NpdGlvbiA9
IG1pbigobV9yMCAvIG1fcjErcG9zaXRpb24qKDEuMGYtbV9yMCAvIG1fcjEpKSwgMS4wKTsKLSAg
ICAgICAgICAgIHN0b3BzLkFkZCh3eEdyYXBoaWNzR3JhZGllbnRTdG9wKHd4Q29sb3VyKDI1NSpz
dG9wSXRlcmF0b3ItPnJlZCwgMjU1KnN0b3BJdGVyYXRvci0+Z3JlZW4sIDI1NSpzdG9wSXRlcmF0
b3ItPmJsdWUsIDI1NSpzdG9wSXRlcmF0b3ItPmFscGhhKSwgcG9zaXRpb24pKTsKLSAgICAgICAg
ICAgIHN0b3BJdGVyYXRvcisrOwotICAgICAgICAgICAgbnVtU3RvcHMrKzsKLSAgICAgICAgfQot
ICAgICAgICBzdG9wSXRlcmF0b3ItLTsKLSAgICAgICAgc3RvcHMuU2V0RW5kQ29sb3VyKHd4Q29s
b3VyKDI1NSpzdG9wSXRlcmF0b3ItPnJlZCwgMjU1KnN0b3BJdGVyYXRvci0+Z3JlZW4sIDI1NSpz
dG9wSXRlcmF0b3ItPmJsdWUsIDI1NSpzdG9wSXRlcmF0b3ItPmFscGhhKSk7Ci0gICAgICAgIAot
ICAgICAgICB3eEdyYXBoaWNzQnJ1c2ggZ3JhZGllbnQ7Ci0gICAgICAgIGlmIChudW1TdG9wcyA+
PSAyKSB7Ci0gICAgICAgICAgICBpZiAobV9yYWRpYWwpCi0gICAgICAgICAgICAgICAgZ3JhZGll
bnQgPSByZW5kZXJlci0+Q3JlYXRlUmFkaWFsR3JhZGllbnRCcnVzaChtX3AxLngoKSwgbV9wMS55
KCksIG1fcDAueCgpLCBtX3AwLnkoKSwgbV9yMSwgc3RvcHMpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGdyYWRpZW50ID0gcmVuZGVyZXItPkNyZWF0ZUxpbmVhckdyYWRpZW50
QnJ1c2gobV9wMC54KCksIG1fcDAueSgpLCBtX3AxLngoKSwgbV9wMS55KCksIHN0b3BzKTsKLSAg
ICAgICAgfQotICAgICAgICBtX2dyYWRpZW50ID0gbmV3IHd4R3JhcGhpY3NCcnVzaChncmFkaWVu
dCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci19Ci0KLXZvaWQgR3Jh
ZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjLCBjb25zdCBGbG9hdFJlY3QmIHIpCi17ICAg
IAotI2lmIHd4Q0hFQ0tfVkVSU0lPTigyLCA5LCAxKQotICAgIHd4R0NEQyogY29udGV4dCA9IGR5
bmFtaWNfY2FzdDx3eEdDREMqPihjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICB3eEdyYXBoaWNzQ29udGV4dCogZ3JhZGllbnRD
b250ZXh0ID0gY29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0KLSAgICBncmFkaWVudENv
bnRleHQtPlNldFBlbigqd3hUUkFOU1BBUkVOVF9QRU4pOwotICAgIGdyYWRpZW50Q29udGV4dC0+
U2V0QnJ1c2goKnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgZ3JhZGllbnRDb250ZXh0LT5EcmF3
UmVjdGFuZ2xlKHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKLSNlbmRpZgot
fQotCi19IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDZiOTI2YWEwNjRmMzYxYmVlNTE2MDkwOWRmMjZiMzI0MjIzYWExNjguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsODE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZp
ZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0
aC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLQotLy8gc2VlIGh0dHA6Ly90cmFjLnd4d2lkZ2V0cy5vcmcvdGlj
a2V0LzExNDgyCi0jaWZkZWYgX19XWE1TV19fCi0jICAgaW5jbHVkZSAid3gvbXN3L3dpbnVuZGVm
LmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC93aW5kb3cu
aD4KLSNpbmNsdWRlIDx3eC9kY2NsaWVudC5oPgotI2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4KLSNp
bmNsdWRlIDx3eC9ncmFwaGljcy5oPgotCi0jaWYgd3hVU0VfQ0FJUk8KLSNpbmNsdWRlIDxjYWly
by5oPgotI2VuZGlmCi0KLSNpZiBfX1dYTUFDX18KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+
Ci0jZWxpZiBfX1dYTVNXX18KLQotI2luY2x1ZGUgInd4L21zdy9wcml2YXRlLmgiCi0vLyBUT0RP
IHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgKGdkaXBsdXMgbmVlZHMgdGhlIG1hY3JvcykKLQotI3Vu
ZGVmIG1heAotI2RlZmluZSBtYXgoYSwgYikgICAgICAgICAgICAoKChhKSA+IChiKSkgPyAoYSkg
OiAoYikpCi0KLSN1bmRlZiBtaW4KLSNkZWZpbmUgbWluKGEsIGIpICAgICAgICAgICAgKCgoYSkg
PCAoYikpID8gKGEpIDogKGIpKQotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0jaW5jbHVkZSA8
Z2RpcGx1cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW50IGdldFd4Q29t
cG9zaXRpbmdPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgaGFzQWxwaGEpCi17
Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtb3JlIG9wZXJhdG9ycy4KLSAgICBpZiAo
b3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiAhaGFzQWxwaGEpCi0gICAgICAgIG9wID0gQ29t
cG9zaXRlQ29weTsKLQotICAgIGludCBmdW5jdGlvbjsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
ICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IHd4Q0xFQVI7
Ci0gICAgICAgIGNhc2UgQ29tcG9zaXRlQ29weToKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gd3hD
T1BZOyAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ZnVuY3Rpb24gPSB3eENPUFk7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbjsKLX0KLQotc3Rh
dGljIGludCBzdHJva2VTdHlsZVRvV3hQZW5TdHlsZShpbnQgcCkKLXsKLSAgICBpZiAocCA9PSBT
b2xpZFN0cm9rZSkKLSAgICAgICAgcmV0dXJuIHd4U09MSUQ7Ci0gICAgaWYgKHAgPT0gRG90dGVk
U3Ryb2tlKQotICAgICAgICByZXR1cm4gd3hET1Q7Ci0gICAgaWYgKHAgPT0gRGFzaGVkU3Ryb2tl
KQotICAgICAgICByZXR1cm4gd3hMT05HX0RBU0g7Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAg
ICBpZiAocCA9PSBEb3VibGVTdHJva2UpCi0gICAgICAgIHJldHVybiB3eFNPTElEOwotICAgIGlm
IChwID09IFdhdnlTdHJva2UpIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTQxMTEgLSBOZWVkcyBwbGF0Zm9ybSBzdXBwb3J0LgotICAgICAgICByZXR1
cm4gd3hTT0xJRDsKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBpZiAocCA9PSBOb1N0cm9rZSkK
LSAgICAgICAgcmV0dXJuIHd4VFJBTlNQQVJFTlQ7Ci0gICAgCi0gICAgcmV0dXJuIHd4U09MSUQ7
Ci19Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7Ci0gICAgfkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSgpOwotCi0jaWYgVVNFKFdYR0MpCi0gICAgd3hHQ0RDKiBjb250ZXh0
OwotI2Vsc2UKLSAgICB3eFdpbmRvd0RDKiBjb250ZXh0OwotI2VuZGlmCi0gICAgaW50IG1zd0RD
U3RhdGVJRDsKLSAgICBGbG9hdFNpemUgY3VycmVudFNjYWxlOwotICAgIHd4UmVnaW9uIGd0a0N1
cnJlbnRDbGlwUmduOwotICAgIHd4UmVnaW9uIGd0a1BhaW50Q2xpcFJnbjsKLX07Ci0KLUdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCkgOgotICAgIGNvbnRleHQoMCksCi0gICAgbXN3RENTdGF0ZUlEKDApLAotICAgIGd0a0N1cnJl
bnRDbGlwUmduKHd4UmVnaW9uKCkpLAotICAgIGd0a1BhaW50Q2xpcFJnbih3eFJlZ2lvbigpKSwK
LSAgICBjdXJyZW50U2NhbGUoMS4wLCAxLjApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCi17Ci19Ci0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKLXsKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOwotICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOwotCi0gICAgaWYgKGNv
bnRleHQpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3Io
KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Io
c3Ryb2tlQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgfQotI2lmIFVTRShXWEdD
KQotICAgIG1fZGF0YS0+Y29udGV4dCA9ICh3eEdDREMqKWNvbnRleHQ7Ci0jZWxzZQotICAgIG1f
ZGF0YS0+Y29udGV4dCA9ICh3eFdpbmRvd0RDKiljb250ZXh0OwotI2VuZGlmCi19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIGRlbGV0ZSBtX2RhdGE7
Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCop
bV9kYXRhLT5jb250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3Jt
U3RhdGUoKQotewotICAgIGlmIChtX2RhdGEtPmNvbnRleHQpCi0gICAgewotI2lmIFVTRShXWEdD
KQotICAgICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQtPkdldEdy
YXBoaWNzQ29udGV4dCgpOwotICAgICAgICBnYy0+UHVzaFN0YXRlKCk7Ci0jZWxzZQotICAgIC8v
IHdoZW4gZXZlcnl0aGluZyBpcyB3b3JraW5nIHdpdGggVVNFX1dYR0MsIHdlIGNhbiByZW1vdmUg
dGhpcwotICAgICNpZiBfX1dYTUFDX18KLSAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQ7Ci0g
ICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhp
Y3NDb250ZXh0KCk7Ci0gICAgICAgIGlmIChnYykKLSAgICAgICAgICAgIGNvbnRleHQgPSAoQ0dD
b250ZXh0UmVmKWdjLT5HZXROYXRpdmVDb250ZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZXh0KQot
ICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICAjZWxpZiBfX1dY
TVNXX18KLSAgICAgICAgSERDIGRjID0gKEhEQyltX2RhdGEtPmNvbnRleHQtPkdldEhEQygpOwot
ICAgICAgICBtX2RhdGEtPm1zd0RDU3RhdGVJRCA9IDo6U2F2ZURDKGRjKTsKLSAgICAjZWxpZiBf
X1dYR1RLX18KLSAgICAgICAgbV9kYXRhLT5ndGtDdXJyZW50Q2xpcFJnbiA9IG1fZGF0YS0+Y29u
dGV4dC0+bV9jdXJyZW50Q2xpcHBpbmdSZWdpb247Ci0gICAgICAgIG1fZGF0YS0+Z3RrUGFpbnRD
bGlwUmduID0gbV9kYXRhLT5jb250ZXh0LT5tX3BhaW50Q2xpcHBpbmdSZWdpb247Ci0gICAgI2Vu
ZGlmCi0jZW5kaWYgLy8gX19XWE1BQ19fCi0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQotewotICAgIGlmIChtX2RhdGEtPmNvbnRleHQpCi0g
ICAgewotI2lmIFVTRShXWEdDKQotICAgICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2Rh
dGEtPmNvbnRleHQtPkdldEdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICBnYy0+UG9wU3RhdGUo
KTsKLSNlbHNlCi0gICAgI2lmIF9fV1hNQUNfXwotICAgICAgICBDR0NvbnRleHRSZWYgY29udGV4
dDsKLSAgICAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRH
cmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgaWYgKGdjKQotICAgICAgICAgICAgY29udGV4dCA9
IChDR0NvbnRleHRSZWYpZ2MtPkdldE5hdGl2ZUNvbnRleHQoKTsKLSAgICAgICAgaWYgKGNvbnRl
eHQpCi0gICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOyAKLSAgICAj
ZWxpZiBfX1dYTVNXX18KLSAgICAgICAgSERDIGRjID0gKEhEQyltX2RhdGEtPmNvbnRleHQtPkdl
dEhEQygpOwotICAgICAgICA6OlJlc3RvcmVEQyhkYywgbV9kYXRhLT5tc3dEQ1N0YXRlSUQpOwot
ICAgICNlbGlmIF9fV1hHVEtfXwotICAgICAgICBtX2RhdGEtPmNvbnRleHQtPm1fY3VycmVudENs
aXBwaW5nUmVnaW9uID0gbV9kYXRhLT5ndGtDdXJyZW50Q2xpcFJnbjsKLSAgICAgICAgbV9kYXRh
LT5jb250ZXh0LT5tX3BhaW50Q2xpcHBpbmdSZWdpb24gPSBtX2RhdGEtPmd0a1BhaW50Q2xpcFJn
bjsKLSAgICAjZW5kaWYKLQotI2VuZGlmIC8vIFVTRV9XWEdDIAotICAgIH0KLX0KLQotLy8gRHJh
d3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghcmVjdC5pc0Vt
cHR5KCkpOwotCi0gICAgc2F2ZSgpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0UGVuKHd4UGVu
KHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZVRvV3hQZW5TdHls
ZShzdHJva2VTdHlsZSgpKSkpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+RHJhd1JlY3RhbmdsZShy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgcmVz
dG9yZSgpOwotfQotCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3Qg
SW50UG9pbnQmIHBvaW50MikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwotICAgIEZsb2F0UG9pbnQg
cDIgPSBwb2ludDI7Ci0gICAgCi0gICAgc2F2ZSgpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0
UGVuKHd4UGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZVRv
V3hQZW5TdHlsZShzdHJva2VTdHlsZSgpKSkpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+RHJhd0xp
bmUocG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSk7Ci0gICAg
cmVzdG9yZSgpOwotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUg
bGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNhdmUoKTsKLSAgICBtX2RhdGEtPmNvbnRleHQt
PlNldFBlbih3eFBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5
bGVUb1d4UGVuU3R5bGUoc3Ryb2tlU3R5bGUoKSkpKTsKLSAgICBtX2RhdGEtPmNvbnRleHQtPkRy
YXdFbGxpcHNlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKLSAgICByZXN0b3JlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMo
Y29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNh
dmUoKTsKLSAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbihzdHJva2VDb2xvcigpLCBz
dHJva2VUaGlja25lc3MoKSwgc3Ryb2tlU3R5bGVUb1d4UGVuU3R5bGUoc3Ryb2tlU3R5bGUoKSkp
KTsKLSAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdFbGxpcHRpY0FyYyhyZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgc3RhcnRBbmdsZSwgc3RhcnRBbmdsZSAr
IGFuZ2xlU3Bhbik7Ci0gICAgcmVzdG9yZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50
cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5wb2ludHMgPD0gMSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc2F2ZSgpOwotICAgIHd4UG9pbnQqIHBvbHlnb24gPSBuZXcgd3hQb2ludFtucG9p
bnRzXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5wb2ludHM7IGkrKykKLSAgICAgICAg
cG9seWdvbltpXSA9IHd4UG9pbnQocG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7Ci0gICAg
bV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tu
ZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKHN0cm9rZVN0eWxlKCkpKSk7Ci0gICAgbV9k
YXRhLT5jb250ZXh0LT5EcmF3UG9seWdvbigoaW50KW5wb2ludHMsIHBvbHlnb24pOwotICAgIGRl
bGV0ZSBbXSBwb2x5Z29uOwotICAgIHJlc3RvcmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQq
IHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobnVtUG9pbnRzIDw9IDEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNhdmUoKTsKLQotICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0UGVu
KCp3eFRSQU5TUEFSRU5UX1BFTik7Ci0gICAgbV9kYXRhLT5jb250ZXh0LT5TZXRCcnVzaCh3eEJy
dXNoKGNvbG9yKSk7Ci0gICAgbV9kYXRhLT5jb250ZXh0LT5EcmF3UmVjdGFuZ2xlKHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIHJlc3RvcmUo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdo
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQs
IGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSNpZiBVU0UoV1hHQykK
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0
b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+
U2V0QnJ1c2god3hCcnVzaChjb2xvcikpOwotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1f
ZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgZ2MtPkZpbGxQYXRoKCpw
YXRoLnBsYXRmb3JtUGF0aCgpKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0Q2xp
cHBpbmdSZWdpb24oci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJikKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lm
IFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+
R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0KLSNpZiB3eFVTRV9DQUlSTwotICAgIGRvdWJsZSB4MSwg
eTEsIHgyLCB5MjsKLSAgICBjYWlyb190KiBjciA9IChjYWlyb190KilnYy0+R2V0TmF0aXZlQ29u
dGV4dCgpOwotICAgIGNhaXJvX2NsaXBfZXh0ZW50cyhjciwgJngxLCAmeTEsICZ4MiwgJnkyKTsK
LSAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSk7Ci0gICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fZmlsbF9ydWxlX3Qgc2F2ZWRGaWxsUnVsZSA9IGNhaXJv
X2dldF9maWxsX3J1bGUoY3IpOwotICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIENBSVJPX0ZJ
TExfUlVMRV9FVkVOX09ERCk7Ci0gICAgY2Fpcm9fY2xpcChjcik7Ci0gICAgY2Fpcm9fc2V0X2Zp
bGxfcnVsZShjciwgc2F2ZWRGaWxsUnVsZSk7Ci0KLSNlbGlmIF9fV1hNQUNfXwotICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOwot
Ci0gICAgQ0dSZWN0IHJlY3RzWzJdID0geyBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29u
dGV4dCksIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpIH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29u
dGV4dEFkZFJlY3RzKGNvbnRleHQsIHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAoY29u
dGV4dCk7Ci0gICAgcmV0dXJuOwotCi0jZWxpZiBfX1dYTVNXX18KLSAgICBHZGlwbHVzOjpHcmFw
aGljcyogZyA9IChHZGlwbHVzOjpHcmFwaGljcyopZ2MtPkdldE5hdGl2ZUNvbnRleHQoKTsKLSAg
ICBHZGlwbHVzOjpSZWdpb24gZXhjbHVkZVJlZ2lvbihHZGlwbHVzOjpSZWN0KHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgZy0+RXhjbHVkZUNs
aXAoJmV4Y2x1ZGVSZWdpb24pOwotICAgIHJldHVybjsgCi0jZW5kaWYKLQotI2VuZGlmIC8vIFVT
RShXWEdDKQotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1F
OiBXaHkgZG9lcyB0aGlzIG1ldGhvZCBpZ25vcmUgZW1wdHkgcGF0aHM/Ci0gICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47IAotCi0gICAgd3hHcmFwaGljc0NvbnRleHQqIGdj
ID0gbV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKLQotI2lmIHd4VVNFX0NB
SVJPCi0gICAgY2Fpcm9fdCogY3IgPSAoY2Fpcm9fdCopZ2MtPkdldE5hdGl2ZUNvbnRleHQoKTsK
LSAgICBjYWlyb19wYXRoX3QqIG5hdGl2ZVBhdGggPSAoY2Fpcm9fcGF0aF90KilwYXRoLnBsYXRm
b3JtUGF0aCgpLT5HZXROYXRpdmVQYXRoKCk7Ci0KLSAgICBjYWlyb19uZXdfcGF0aChjcik7Ci0g
ICAgY2Fpcm9fYXBwZW5kX3BhdGgoY3IsIG5hdGl2ZVBhdGgpOwotCi0gICAgY2Fpcm9fc2V0X2Zp
bGxfcnVsZShjciwgY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REID8gQ0FJUk9fRklMTF9SVUxFX0VW
RU5fT0REIDogQ0FJUk9fRklMTF9SVUxFX1dJTkRJTkcpOwotICAgIGNhaXJvX2NsaXAoY3IpOwot
I2VsaWYgX19XWE1BQ19fCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoQ0dDb250ZXh0UmVm
KWdjLT5HZXROYXRpdmVDb250ZXh0KCk7ICAgCi0gICAgQ0dQYXRoUmVmIG5hdGl2ZVBhdGggPSAo
Q0dQYXRoUmVmKXBhdGgucGxhdGZvcm1QYXRoKCktPkdldE5hdGl2ZVBhdGgoKTsgCi0gICAgCi0g
ICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dEFkZFBhdGgoY29u
dGV4dCwgbmF0aXZlUGF0aCk7Ci0gICAgaWYgKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCkKLSAg
ICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgQ0dDb250
ZXh0Q2xpcChjb250ZXh0KTsKLSNlbGlmIF9fV1hNU1dfXwotICAgIEdkaXBsdXM6OkdyYXBoaWNz
KiBnID0gKEdkaXBsdXM6OkdyYXBoaWNzKilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOwotICAgIEdk
aXBsdXM6OkdyYXBoaWNzUGF0aCogbmF0aXZlUGF0aCA9IChHZGlwbHVzOjpHcmFwaGljc1BhdGgq
KXBhdGgucGxhdGZvcm1QYXRoKCktPkdldE5hdGl2ZVBhdGgoKTsKLSAgICBpZiAoY2xpcFJ1bGUg
PT0gUlVMRV9FVkVOT0REKQotICAgICAgICBuYXRpdmVQYXRoLT5TZXRGaWxsTW9kZShHZGlwbHVz
OjpGaWxsTW9kZUFsdGVybmF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBuYXRpdmVQYXRoLT5TZXRG
aWxsTW9kZShHZGlwbHVzOjpGaWxsTW9kZVdpbmRpbmcpOwotICAgIGctPlNldENsaXAobmF0aXZl
UGF0aCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNh
dmUoKTsKLSAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gb3JpZ2luICsgRmxvYXRTaXplKHdpZHRo
LCAwKTsKLSAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbihzdHJva2VDb2xvcigpLCBz
dHJva2VUaGlja25lc3MoKSwgd3hTT0xJRCkpOwotICAgIG1fZGF0YS0+Y29udGV4dC0+RHJhd0xp
bmUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpOwot
ICAgIHJlc3RvcmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXJTcGVsbGluZ0xpbmVTdHlsZToKLSAgICAgICAgbV9kYXRhLT5jb250
ZXh0LT5TZXRQZW4od3hQZW4oKnd4UkVELCAyLCB3eExPTkdfREFTSCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZToKLSAgICAgICAgbV9k
YXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oKnd4R1JFRU4sIDIsIHd4TE9OR19EQVNIKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9kYXRhLT5jb250ZXh0LT5EcmF3TGluZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpLCBvcmlnaW4u
eCgpICsgd2lkdGgsIG9yaWdpbi55KCkpOwotfQotCi0vLyBGSVhNRTogZG9uJ3QgaWdub3JlIHRo
ZSB3aW5kaW5nIHJ1bGUuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSkgCi17IAotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIGlmIHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSBjbGlwIGFnYWluc3Qg
YSB6ZXJvIHJlY3QgdG8gcmVkdWNlIHRoZSBjbGlwcGluZyByZWdpb24gdG8KLSAgICAvLyBub3Ro
aW5nIC0gd2hpY2ggaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIGNsaXAoKSBpZiB0aGUgcGF0
aCBpcyBlbXB0eS4KLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIG1fZGF0YS0+Y29u
dGV4dC0+U2V0Q2xpcHBpbmdSZWdpb24oMCwgMCwgMCwgMCk7Ci0gICAgZWxzZQotICAgICAgICBj
bGlwUGF0aChwYXRoLCBSVUxFX05PTlpFUk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBj
bGlwKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4
dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsgCi0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0jaWYgVVNF
KFdYR0MpCi0gICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRH
cmFwaGljc0NvbnRleHQoKTsKLSAgICBpZiAoZ2MpIHsKLSAgICAgICAgd3hHcmFwaGljc01hdHJp
eCBtYXRyaXggPSBnYy0+R2V0VHJhbnNmb3JtKCk7Ci0gICAgICAgIGRvdWJsZSBhLCBiLCBjLCBk
LCBlLCBmOwotICAgICAgICBtYXRyaXguR2V0KCZhLCAmYiwgJmMsICZkLCAmZSwgJmYpOwotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpOwotICAgIH0KLSNl
bmRpZgotICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpIAoteyAKLSNpZiBVU0UoV1hHQykK
LSAgICBpZiAobV9kYXRhLT5jb250ZXh0KSB7Ci0gICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBn
YyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgIGdjLT5U
cmFuc2xhdGUodHgsIHR5KTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkgCi17IAotI2lmIFVTRShXWEdDKQotICAgIGlmIChtX2Rh
dGEtPmNvbnRleHQpIHsKLSAgICAgICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5j
b250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ2MtPlJvdGF0ZShhbmdsZSk7
Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNjYWxlKSAKLXsKLSNpZiBVU0UoV1hHQykKLSAgICBpZiAobV9kYXRhLT5jb250
ZXh0KSB7Ci0gICAgICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+
R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgIGdjLT5TY2FsZShzY2FsZS53aWR0aCgpLCBz
Y2FsZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+Y3VycmVudFNjYWxlID0gc2NhbGU7Ci0g
ICAgfQotI2VuZGlmCi19Ci0KLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmN1cnJlbnRTY2Fs
ZSgpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+Y3VycmVudFNjYWxlOwotfQotRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0
LCBSb3VuZGluZ01vZGUpCi17Ci0gICAgRmxvYXRSZWN0IHJlc3VsdDsKLQotICAgIHd4Q29vcmQg
eCA9ICh3eENvb3JkKWZyZWN0LngoKTsKLSAgICB3eENvb3JkIHkgPSAod3hDb29yZClmcmVjdC55
KCk7Ci0KLSAgICB4ID0gbV9kYXRhLT5jb250ZXh0LT5Mb2dpY2FsVG9EZXZpY2VYKHgpOwotICAg
IHkgPSBtX2RhdGEtPmNvbnRleHQtPkxvZ2ljYWxUb0RldmljZVkoeSk7Ci0gICAgcmVzdWx0LnNl
dFgoKGZsb2F0KXgpOwotICAgIHJlc3VsdC5zZXRZKChmbG9hdCl5KTsKLSAgICB4ID0gKHd4Q29v
cmQpZnJlY3Qud2lkdGgoKTsKLSAgICB5ID0gKHd4Q29vcmQpZnJlY3QuaGVpZ2h0KCk7Ci0gICAg
eCA9IG1fZGF0YS0+Y29udGV4dC0+TG9naWNhbFRvRGV2aWNlWFJlbCh4KTsKLSAgICB5ID0gbV9k
YXRhLT5jb250ZXh0LT5Mb2dpY2FsVG9EZXZpY2VZUmVsKHkpOwotICAgIHJlc3VsdC5zZXRXaWR0
aCgoZmxvYXQpeCk7Ci0gICAgcmVzdWx0LnNldEhlaWdodCgoZmxvYXQpeSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsgCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0
IEtVUkwmLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYgKG1fZGF0YS0+Y29udGV4dCkKLSAgICB7Ci0jaWYg
d3hDSEVDS19WRVJTSU9OKDIsOSwwKQotICAgICAgICBtX2RhdGEtPmNvbnRleHQtPlNldExvZ2lj
YWxGdW5jdGlvbihzdGF0aWNfY2FzdDx3eFJhc3Rlck9wZXJhdGlvbk1vZGU+KGdldFd4Q29tcG9z
aXRpbmdPcGVyYXRpb24ob3AsIGZhbHNlKSkpOwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLT5jb250
ZXh0LT5TZXRMb2dpY2FsRnVuY3Rpb24oZ2V0V3hDb21wb3NpdGluZ09wZXJhdGlvbihvcCwgZmFs
c2UpKTsKLSNlbmRpZgotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fZGF0YS0+Y29udGV4dCkKLSAgICAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQ
ZW4oY29sb3IsIHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZVRvV3hQZW5TdHlsZShzdHJv
a2VTdHlsZSgpKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5jb250ZXh0KQotICAg
ICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBlbihzdHJva2VDb2xvcigpLCB0aGlja25l
c3MsIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKHN0cm9rZVN0eWxlKCkpKSk7Ci0KLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5jb250ZXh0KQotICAgICAg
ICBtX2RhdGEtPmNvbnRleHQtPlNldEJydXNoKHd4QnJ1c2goY29sb3IpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNp
ZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBtX2RhdGEtPmNvbnRleHQt
PkdldEdyYXBoaWNzQ29udGV4dCgpOwotICAgIGlmIChnYykKLSAgICAgICAgZ2MtPkNvbmNhdFRy
YW5zZm9ybSh0cmFuc2Zvcm0pOwotI2VuZGlmCi0gICAgcmV0dXJuOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShX
WEdDKQotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3Jh
cGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGdjKQotICAgICAgICBnYy0+U2V0VHJhbnNmb3JtKHRy
YW5zZm9ybSk7Ci0jZW5kaWYKLSAgICByZXR1cm47Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
SW50ZXJwb2xhdGlvblF1YWxpdHkpCi17Ci19Ci0KLUludGVycG9sYXRpb25RdWFsaXR5IEdyYXBo
aWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEludGVycG9sYXRpb25EZWZhdWx0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgVVNFKFdYR0MpCi0gICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0g
bV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRleHQoKTsKLSAgICBpZiAoZ2MpCi0gICAg
ICAgIGdjLT5GaWxsUGF0aCgqcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBp
ZiAocGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKFdYR0MpCi0gICAg
d3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGljc0NvbnRl
eHQoKTsKLSAgICBpZiAoZ2MpCi0gICAgICAgIGdjLT5TdHJva2VQYXRoKCpwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93
KEZsb2F0U2l6ZSBjb25zdCYsIGZsb2F0LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCi17IAot
ICAgIG5vdEltcGxlbWVudGVkKCk7IAotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQ
bGF0Zm9ybVNoYWRvdygpIAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhpY3ND
b250ZXh0KCk7Ci0gICAgaWYgKGdjKQotICAgICAgICBnYy0+QmVnaW5MYXllcihvcGFjaXR5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIo
KQoteyAKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gbV9kYXRhLT5jb250ZXh0LT5HZXRHcmFwaGlj
c0NvbnRleHQoKTsKLSAgICBpZiAoZ2MpCi0gICAgICAgIGdjLT5FbmRMYXllcigpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQotewotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpCi17IAotICAg
IG5vdEltcGxlbWVudGVkKCk7IAotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNh
cChMaW5lQ2FwKSAKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVKb2luKExpbmVKb2luKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0KQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgT1MoV0lORE9XUykKLUhEQyBHcmFwaGljc0Nv
bnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3Vw
cG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQotewotICAgIGlmIChkc3RSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDcmVhdGUgYSBiaXRtYXAg
REMgaW4gd2hpY2ggdG8gZHJhdy4KLSAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0gICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplICAgICAgICAgID0gc2l6ZW9mKEJJVE1BUElORk9IRUFE
RVIpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggICAgICAgICA9IGRzdFJlY3Qu
d2lkdGgoKTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSBkc3RS
ZWN0LmhlaWdodCgpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzICAgICAgICA9
IDE7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCAgICAgID0gMzI7Ci0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwotICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlICAgICA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQ
ZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCAgICAg
ICA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgID0gMDsKLQot
ICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgSEJJVE1BUCBiaXRtYXAgPSA6OkNyZWF0ZURJQlNl
Y3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKTsKLSAg
ICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBIREMgZGlzcGxheURDID0g
OjpHZXREQygwKTsKLSAgICBIREMgYml0bWFwREMgPSA6OkNyZWF0ZUNvbXBhdGlibGVEQyhkaXNw
bGF5REMpOwotICAgIDo6UmVsZWFzZURDKDAsIGRpc3BsYXlEQyk7Ci0KLSAgICA6OlNlbGVjdE9i
amVjdChiaXRtYXBEQywgYml0bWFwKTsKLQotICAgIC8vIEZpbGwgb3VyIGJ1ZmZlciB3aXRoIGNs
ZWFyIGlmIHdlJ3JlIGdvaW5nIHRvIGFscGhhIGJsZW5kLgotICAgIGlmIChzdXBwb3J0QWxwaGFC
bGVuZCkgewotICAgICAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICAgICAgR2V0T2JqZWN0KGJpdG1h
cCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Ci0gICAgICAgIGludCBidWZmZXJTaXplID0g
Ym1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0OwotICAgICAgICBtZW1zZXQo
Ym1wSW5mby5ibUJpdHMsIDAsIGJ1ZmZlclNpemUpOwotICAgIH0KLSAgICByZXR1cm4gYml0bWFw
REM7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERD
IGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9v
bCBtYXlDcmVhdGVCaXRtYXApCi17Ci0gICAgaWYgKGhkYykgewotCi0gICAgICAgIGlmICghZHN0
UmVjdC5pc0VtcHR5KCkpIHsKLQotICAgICAgICAgICAgSEJJVE1BUCBiaXRtYXAgPSBzdGF0aWNf
Y2FzdDxIQklUTUFQPihHZXRDdXJyZW50T2JqZWN0KGhkYywgT0JKX0JJVE1BUCkpOwotICAgICAg
ICAgICAgQklUTUFQIGluZm87Ci0gICAgICAgICAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2Yo
aW5mbyksICZpbmZvKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmJtQml0c1BpeGVsID09IDMy
KTsKLQotICAgICAgICAgICAgd3hCaXRtYXAgYm1wOwotICAgICAgICAgICAgYm1wLlNldEhCSVRN
QVAoYml0bWFwKTsKLSNpZiAhd3hDSEVDS19WRVJTSU9OKDIsOSwwKQotICAgICAgICAgICAgaWYg
KHN1cHBvcnRBbHBoYUJsZW5kKQotICAgICAgICAgICAgICAgIGJtcC5Vc2VBbHBoYSgpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBtX2RhdGEtPmNvbnRleHQtPkRyYXdCaXRtYXAoYm1wLCBkc3RSZWN0
LngoKSwgZHN0UmVjdC55KCksIHN1cHBvcnRBbHBoYUJsZW5kKTsKLQotICAgICAgICAgICAgOjpE
ZWxldGVPYmplY3QoYml0bWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIDo6RGVsZXRlREMoaGRj
KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSWNvbld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ljb25XeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZmE0
ZWIxMzgxMDZhMjIyYTFlMDc0NjEyY2Y4MjhjY2FiODFkM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvSWNvbld4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkljb24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUljb246On5JY29uKCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVh
dGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEljb246OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJEYXRhV3guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyRGF0YVd4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg0MzBlODEwMjM2YzU1N2VmNmVkZTk0MWI5NTNlMDE2ODlkMjgzMDIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJEYXRhV3guaAorKysgL2Rldi9udWxsCkBAIC0x
LDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotLy8g
c2VlIGh0dHA6Ly90cmFjLnd4d2lkZ2V0cy5vcmcvdGlja2V0LzExNDgyCi0jaWZkZWYgX19XWE1T
V19fCi0jICAgaW5jbHVkZSAid3gvbXN3L3dpbnVuZGVmLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUg
PHd4L2JpdG1hcC5oPgotI2luY2x1ZGUgPHd4L2RjbWVtb3J5Lmg+Ci0KLWNsYXNzIHd4R0NEQzsK
LWNsYXNzIHd4R3JhcGhpY3NDb250ZXh0OwotY2xhc3Mgd3hNZW1vcnlEQzsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewot
cHVibGljOgotICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJik7Ci0gICAgfkltYWdl
QnVmZmVyRGF0YSgpOwotICAgIHd4Qml0bWFwIG1fYml0bWFwOwotICAgIHd4TWVtb3J5REMqIG1f
bWVtREM7Ci0gICAgd3hHQ0RDKiBtX2djZGM7Ci0gICAgd3hHcmFwaGljc0NvbnRleHQqIG1fZ3Jh
cGhpY3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5ZjAxZWEyMzAwMjA4YmY2ZjE2MGE1MGQyYWVkOGY3ZTIwZDU4
ZDhjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4g
T2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgotCi0vLyBzZWUgaHR0cDovL3RyYWMud3h3aWRnZXRzLm9yZy90aWNrZXQvMTE0
ODIKLSNpZmRlZiBfX1dYTVNXX18KLSMgICBpbmNsdWRlICJ3eC9tc3cvd2ludW5kZWYuaCIKLSNl
bmRpZgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2JpdG1hcC5oPgotI2lu
Y2x1ZGUgPHd4L2RjLmg+Ci0jaW5jbHVkZSA8d3gvZGNncmFwaC5oPgotI2luY2x1ZGUgPHd4L2Rj
bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8d3gvZ3JhcGhpY3MuaD4KLSNpbmNsdWRlIDx3eC9pbWFnZS5o
PiAKLSNpbmNsdWRlIDx3eC9yYXdibXAuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlt
YWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0g
ICAgIG1fYml0bWFwLkNyZWF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDMyKTsKLSAg
ICAgewotICAgICAgICB3eEFscGhhUGl4ZWxEYXRhIHBpeERhdGEobV9iaXRtYXAsIHd4UG9pbnQo
MCwgMCksIHd4U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgQVNT
RVJUKHBpeERhdGEpOwotICAgICAgICBpZiAocGl4RGF0YSkgewotICAgICAgICAgICAgd3hBbHBo
YVBpeGVsRGF0YTo6SXRlcmF0b3IgcChwaXhEYXRhKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgICAgICAgICAgd3hBbHBoYVBp
eGVsRGF0YTo6SXRlcmF0b3Igcm93U3RhcnQgPSBwOwotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHAuUmVkKCkgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgcC5CbHVlKCkgPSAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcC5HcmVlbigpID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgYmVsb3cgc2hvdWxkIGJlIHRyYW5zcGFyZW50IGJ1dCBjYW5ub3Qg
YmUgb24gR0RJL0dESyAoc2VlIHd4V2lkZ2V0cyBidWdzICMxMDA2NiBhbmQgIzI0NzQpCi0jaWYg
d3hVU0VfQ0FJUk8gfHwgZGVmaW5lZChfX1dYTUFDX18pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwLkFscGhhKCkgPSAwOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICsrcDsgCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHAgPSByb3dTdGFydDsKLSAgICAgICAgICAg
ICAgICBwLk9mZnNldFkocGl4RGF0YSwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgfQotICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWh0bWw1LTIwMDkwMjEy
L3RoZS1jYW52YXMtZWxlbWVudC5odG1sI2NhbnZhc3BpeGVsYXJyYXkKLSAgICAgLy8gIldoZW4g
dGhlIGNhbnZhcyBpcyBpbml0aWFsaXplZCBpdCBtdXN0IGJlIHNldCB0byBmdWxseSB0cmFuc3Bh
cmVudCBibGFjay4iCi0KLSAgICBtX21lbURDID0gbmV3IHd4TWVtb3J5REMobV9iaXRtYXApOwot
ICAgIHd4R3JhcGhpY3NSZW5kZXJlciogcmVuZGVyZXIgPSB3eEdyYXBoaWNzUmVuZGVyZXI6Okdl
dENhaXJvUmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZW5kZXJlciA9
IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7Ci0gICAgbV9ncmFwaGlj
cyA9IHJlbmRlcmVyLT5DcmVhdGVDb250ZXh0KCptX21lbURDKTsKLSAgICBtX2djZGMgPSBuZXcg
d3hHQ0RDKG1fZ3JhcGhpY3MpOwotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRh
dGEoKQotewotICAgIGRlbGV0ZSBtX2djZGM7Ci0gICAgZGVsZXRlIG1fbWVtREM7Ci19Ci0KLUlt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgYm9vbCYgc3Vj
Y2VzcykKLSAgICA6IG1fZGF0YShzaXplKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2xv
Z2ljYWxTaXplKHNpemUpCi17Ci0gICAgLy8gRklYTUU6IFJlc3BlY3QgcmVzb3V0aW9uU2NhbGUg
dG8gc3VwcG9ydCBoaWdoLURQSSBjYW52YXMuCi0gICAgVU5VU0VEX1BBUkFNKHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgLy8gRklYTUU6IGNvbG9yU3BhY2UgaXMgbm90IHVzZWQKLSAgICBVTlVTRURf
UEFSQU0oY29sb3JTcGFjZSk7Ci0KLSAgICBpZiAobV9kYXRhLm1fZ2NkYy0+SXNPaygpKSB7Ci0g
ICAgICAgIG1fY29udGV4dCA9IGFkb3B0UHRyKG5ldyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQo
bV9kYXRhLm1fZ2NkYykpOwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgc3VjY2VzcyA9IGZhbHNlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkK
LXsKLQotfQotCi1HcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkg
bXVsdGlwbGllZCwgVWludDhDbGFtcGVkQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotICAg
IAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgZG91YmxlKiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVC
ZWhhdmlvcikgY29uc3QKLXsKLSAgICBBU1NFUlQoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5n
U3RvcmUpOwotICAgIAotICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6
OmNyZWF0ZShtX2RhdGEubV9iaXRtYXApOwotICAgIHJldHVybiBpbWcucmVsZWFzZSgpOwotfQot
Ci1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0g
ICAgcmV0dXJuIENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC0+Y2xpcChyZWN0KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKLXsKLSAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBjb250ZXh0
LT5kcmF3SW1hZ2UoaW1hZ2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcCwgRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgdXNlTG93UXVhbGl0eVNj
YWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgQVNTRVJUKGNv
bnRleHQpOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpOwotICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0
IFZlY3RvcjxpbnQ+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0lt
YWdlV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGJiZGJiOGMzMmJlMTE0
Nzk3M2ZkMTE3MTQzZWE0YWFhOTcwMDFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdl
V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEtldmluIE9sbGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0K
LSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgot
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0j
aW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDx3eC9kZWZz
Lmg+Ci0jaW5jbHVkZSA8d3gvYml0bWFwLmg+Ci0jaW5jbHVkZSA8d3gvZGMuaD4KLSNpbmNsdWRl
IDx3eC9kY21lbW9yeS5oPgotI2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4KLSNpbmNsdWRlIDx3eC9n
cmFwaGljcy5oPgotI2luY2x1ZGUgPHd4L2ltYWdlLmg+Ci0jaW5jbHVkZSA8d3gvdGhyZWFkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gdGhpcyBpcyBpbiBHcmFwaGljc0NvbnRleHRX
eC5jcHAKLWludCBnZXRXeENvbXBvc2l0aW5nT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBib29sIGhhc0FscGhhKTsKLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRh
ZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEg
PSBmYWxzZTsKLQotICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAgICAgIGRlbGV0ZSBtX2ZyYW1lOwot
ICAgICAgICBtX2ZyYW1lID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0vLyBJbWFnZSBDbGFzcwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQotewotICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGhhdmUgc29tZSAncGxhY2Vob2xkZXInIGdyYXBoaWNzIGZvciB0aGluZ3MgbGlrZSBt
aXNzaW5nCi0gICAgLy8gcGx1Z2lucyBvciBicm9rZW4gaW1hZ2VzLgotICAgIFZlY3RvcjxjaGFy
PiBhcnI7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoYXJy
LmRhdGEoKSwgYXJyLnNpemUoKSk7Ci0gICAgaW1nLT5zZXREYXRhKGJ1ZmZlciwgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIGltZy5yZWxlYXNlKCk7Ci19Ci0KLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShj
b25zdCB3eEJpdG1hcCYgYml0bWFwKQotICAgIDogSW1hZ2UoMCkKLSAgICAsIG1fY3VycmVudEZy
YW1lKDApCi0gICAgLCBtX2ZyYW1lcygwKQotICAgICwgbV9mcmFtZVRpbWVyKDApCi0gICAgLCBt
X3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50
U3RhdHVzKFVua25vd24pCi0gICAgLCBtX3JlcGV0aXRpb25zQ29tcGxldGUoMCkKLSAgICAsIG1f
aXNTb2xpZENvbG9yKGZhbHNlKQotICAgICwgbV9jaGVja2VkRm9yU29saWRDb2xvcihmYWxzZSkK
LSAgICAsIG1fYW5pbWF0aW9uRmluaXNoZWQodHJ1ZSkKLSAgICAsIG1fYWxsRGF0YVJlY2VpdmVk
KHRydWUpCi0gICAgLCBtX2hhdmVTaXplKHRydWUpCi0gICAgLCBtX3NpemVBdmFpbGFibGUodHJ1
ZSkKLSAgICAsIG1fZGVjb2RlZFNpemUoMCkKLSAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkK
LSAgICAsIG1fZnJhbWVDb3VudCgxKQotewotICAgIG1fZGVjb2RlZFNpemUgPSBiaXRtYXAuR2V0
V2lkdGgoKSAqIGJpdG1hcC5HZXRIZWlnaHQoKSAqIDQ7Ci0gICAgbV9zaXplID0gSW50U2l6ZShi
aXRtYXAuR2V0V2lkdGgoKSwgYml0bWFwLkdldEhlaWdodCgpKTsKLQotICAgIHd4R3JhcGhpY3NS
ZW5kZXJlciogcmVuZGVyZXIgPSAwOwotI2lmIHd4VVNFX0NBSVJPCi0gICAgcmVuZGVyZXIgPSB3
eEdyYXBoaWNzUmVuZGVyZXI6OkdldENhaXJvUmVuZGVyZXIoKTsKLSNlbHNlCi0gICAgcmVuZGVy
ZXIgPSB3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpOwotI2VuZGlmCi0g
ICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIHd4R3JhcGhpY3NCaXRtYXAqIGdibXAgPSBuZXcg
d3hHcmFwaGljc0JpdG1hcChyZW5kZXJlci0+Q3JlYXRlQml0bWFwKGJpdG1hcCkpOwotICAgICAg
ICBBU1NFUlQoIWdibXAtPklzTnVsbCgpKTsKLSAgICAKLSAgICAgICAgbV9mcmFtZXMuZ3Jvdygx
KTsKLSAgICAgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IGdibXA7Ci0gICAgICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7
Ci0gICAgfQotfQotCi0KLS8vIERyYXdpbmcgUm91dGluZXMKLQotdm9pZCBCaXRtYXBJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQotewotICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewotICAgICAgICBm
aWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFj
ZSwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgVVNFKFdYR0MpCi0gICAgd3hH
Q0RDKiBjb250ZXh0ID0gKHd4R0NEQyopY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgd3hH
cmFwaGljc0NvbnRleHQqIGdjID0gY29udGV4dC0+R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAg
d3hHcmFwaGljc0JpdG1hcCogYml0bWFwID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsK
LSNlbHNlCi0gICAgd3hXaW5kb3dEQyogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIHd4Qml0bWFwKiBiaXRtYXAgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwot
I2VuZGlmCi0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotICAgIGlmICghYml0bWFwKSAvLyBJZiBp
dCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgYSBzdWIgcG9ydGlvbiBvZiB0aGUgaW1h
Z2Ugb3Igc2NhbGluZyB0aGVuIGNyZWF0ZQotICAgIC8vIGEgcGF0dGVybiB0cmFuc2Zvcm1hdGlv
biBvbiB0aGUgaW1hZ2UgYW5kIGRyYXcgdGhlIHRyYW5zZm9ybWVkIHBhdHRlcm4uCi0gICAgLy8g
VGVzdCB1c2luZyBleGFtcGxlIHNpdGUgYXQgaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9j
c3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAotICAgIC8vIEZJWE1FOiBOWUkKLSAgIAot
ICAgIGN0eHQtPnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgotICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7Ci0gICAgCi0jaWYgVVNFKFdY
R0MpCi0gICAgZmxvYXQgc2NhbGVYID0gc3JjLndpZHRoKCkgLyBkc3Qud2lkdGgoKTsKLSAgICBm
bG9hdCBzY2FsZVkgPSBzcmMuaGVpZ2h0KCkgLyBkc3QuaGVpZ2h0KCk7Ci0KLSAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRzdDsKLSAgICBGbG9hdFNpemUgc2VsZlNpemUgPSBjdXJy
ZW50RnJhbWVTaXplKCk7Ci0gICAgCi0gICAgaWYgKHNyYy5zaXplKCkgIT0gc2VsZlNpemUpIHsK
LSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGRzdC54KCkg
LSBzcmMueCgpIC8gc2NhbGVYLCBkc3QueSgpIC0gc3JjLnkoKSAvIHNjYWxlWSkpOwotICAgICAg
ICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoRmxvYXRTaXplKHNlbGZTaXplLndpZHRoKCkgLyBz
Y2FsZVgsIHNlbGZTaXplLmhlaWdodCgpIC8gc2NhbGVZKSk7Ci0gICAgfQotCi0gICAgZ2MtPkNs
aXAoZHN0LngoKSwgZHN0LnkoKSwgZHN0LndpZHRoKCksIGRzdC5oZWlnaHQoKSk7Ci0jaWYgd3hD
SEVDS19WRVJTSU9OKDIsOSwwKQotICAgIGdjLT5EcmF3Qml0bWFwKCpiaXRtYXAsIGFkanVzdGVk
RGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSwgYWRqdXN0ZWREZXN0UmVjdC53aWR0
aCgpLCBhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpKTsKLSNlbHNlCi0gICAgZ2MtPkRyYXdHcmFw
aGljc0JpdG1hcCgqYml0bWFwLCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVj
dC55KCksIGFkanVzdGVkRGVzdFJlY3Qud2lkdGgoKSwgYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQo
KSk7Ci0jZW5kaWYKLQotI2Vsc2UgLy8gVVNFKFdYR0MpCi0gICAgSW50UmVjdCBzcmNJbnRSZWN0
KHNyYyk7Ci0gICAgSW50UmVjdCBkc3RJbnRSZWN0KGRzdCk7Ci0gICAgYm9vbCByZXNjYWxpbmcg
PSBmYWxzZTsKLSAgICBpZiAoKGRzdEludFJlY3Qud2lkdGgoKSAhPSBzcmNJbnRSZWN0LndpZHRo
KCkpIHx8IChkc3RJbnRSZWN0LmhlaWdodCgpICE9IHNyY0ludFJlY3QuaGVpZ2h0KCkpKQotICAg
IHsKLSAgICAgICAgcmVzY2FsaW5nID0gdHJ1ZTsKLSAgICAgICAgd3hJbWFnZSBpbWcgPSBiaXRt
YXAtPkNvbnZlcnRUb0ltYWdlKCk7Ci0gICAgICAgIGltZy5SZXNjYWxlKGRzdEludFJlY3Qud2lk
dGgoKSwgZHN0SW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGJpdG1hcCA9IG5ldyB3eEJpdG1h
cChpbWcpOwotICAgIH0gCi0gICAgCi0gICAgd3hNZW1vcnlEQyBteWRjOyAKLSAgICBBU1NFUlQo
Yml0bWFwLT5HZXRSZWZEYXRhKCkpOwotICAgIG15ZGMuU2VsZWN0T2JqZWN0KCpiaXRtYXApOyAK
LSAgICAKLSAgICBjb250ZXh0LT5CbGl0KCh3eENvb3JkKWRzdEludFJlY3QueCgpLCh3eENvb3Jk
KWRzdEludFJlY3QueSgpLCAod3hDb29yZClkc3RJbnRSZWN0LndpZHRoKCksICh3eENvb3JkKWRz
dEludFJlY3QuaGVpZ2h0KCksICZteWRjLCAKLSAgICAgICAgICAgICAgICAgICAgKHd4Q29vcmQp
c3JjSW50UmVjdC54KCksICh3eENvb3JkKXNyY0ludFJlY3QueSgpLCB3eENPUFksIHRydWUpOyAK
LSAgICBteWRjLlNlbGVjdE9iamVjdCh3eE51bGxCaXRtYXApOwotICAgIAotICAgIC8vIE5COiBk
ZWxldGUgaXMgY2F1c2luZyBjcmFzaGVzIGR1cmluZyBwYWdlIGxvYWQsIGJ1dCBub3QgZHVyaW5n
IHRoZSBkZWxldGlvbgotICAgIC8vIGl0c2VsZi4gSXQgb2NjdXJzIGxhdGVyIG9uIHdoZW4gYSB2
YWxpZCBiaXRtYXAgY3JlYXRlZCBpbiBmcmFtZUF0SW5kZXgKLSAgICAvLyBzdWRkZW5seSBiZWNv
bWVzIGludmFsaWQgYWZ0ZXIgcmV0dXJuaW5nLiBJdCdzIHBvc3NpYmxlIHRoZXNlIGVycm9ycyBk
ZWFsCi0gICAgLy8gd2l0aCByZWVudHJhbmN5IGFuZCB0aHJlZGluZyBwcm9ibGVtcy4KLSAgICAv
L2RlbGV0ZSBiaXRtYXA7Ci0gICAgaWYgKHJlc2NhbGluZykKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZSBiaXRtYXA7Ci0gICAgICAgIGJpdG1hcCA9IE5VTEw7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBj
dHh0LT5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFn
ZU9ic2VydmVyKCkpCi0gICAgICAgIG9ic2VydmVyLT5kaWREcmF3KHRoaXMpOwotfQotCi12b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCkKLXsKLSNpZiBVU0UoV1hHQykKLSAgICB3eEdDREMqIGNvbnRl
eHQgPSAod3hHQ0RDKiljdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICB3eEdyYXBoaWNzQml0
bWFwKiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotI2Vsc2UKLSAgICB3
eFdpbmRvd0RDKiBjb250ZXh0ID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgd3hCaXRt
YXAqIGJpdG1hcCA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0jZW5kaWYKLQotICAg
IGlmICghYml0bWFwKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdl
IHlldC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3R4dC0+c2F2ZSgpOwotICAgIGN0eHQtPmNs
aXAoSW50UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0
UmVjdC5oZWlnaHQoKSkpOwotICAgIAotICAgIGZsb2F0IGFkanVzdGVkWCA9IGRzdFJlY3QueCgp
OwotICAgIGZsb2F0IGFkanVzdGVkWSA9IGRzdFJlY3QueSgpOwotICAgIAotICAgIGFkanVzdGVk
WCArPSBwaGFzZS54KCkgLSBkc3RSZWN0LngoKSAqCi0gICAgICAgICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0gICAgYWRqdXN0ZWRZ
ICs9IChwaGFzZS55KCkgLSBkc3RSZWN0LnkoKSAqCi0gICAgICAgICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSkpOwotICAgIAotI2lmIFVT
RShXWEdDKQotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IGNvbnRleHQtPkdldEdyYXBoaWNz
Q29udGV4dCgpOwotICAgIGdjLT5Db25jYXRUcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7Ci0j
ZWxzZQotICAgIHd4TWVtb3J5REMgbXlkYzsKLSAgICBteWRjLlNlbGVjdE9iamVjdCgqYml0bWFw
KTsKLSNlbmRpZgotCi0gICAgZmxvYXQgY3VycmVudFcgPSBhZGp1c3RlZFg7Ci0gICAgZmxvYXQg
Y3VycmVudEggPSBhZGp1c3RlZFk7Ci0KLSAgICB3aGlsZSAoY3VycmVudFcgPD0gZHN0UmVjdC54
KCkgKyBkc3RSZWN0LndpZHRoKCkpIHsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRIIDw9IGRzdFJl
Y3QueSgpICsgZHN0UmVjdC5oZWlnaHQoKSkgewotI2lmIFVTRShXWEdDKQotI2lmIHd4Q0hFQ0tf
VkVSU0lPTigyLDksMCkKLSAgICAgICAgICAgIGdjLT5EcmF3Qml0bWFwKCpiaXRtYXAsIGN1cnJl
bnRXLCBjdXJyZW50SCwgKHd4RG91YmxlKXNyY1JlY3Qud2lkdGgoKSwgKHd4RG91YmxlKXNyY1Jl
Y3QuaGVpZ2h0KCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGdjLT5EcmF3R3JhcGhpY3NCaXRtYXAo
KmJpdG1hcCwgY3VycmVudFcsIGN1cnJlbnRILCAod3hEb3VibGUpc3JjUmVjdC53aWR0aCgpLCAo
d3hEb3VibGUpc3JjUmVjdC5oZWlnaHQoKSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBj
b250ZXh0LT5CbGl0KCh3eENvb3JkKWRzdFJlY3QueCgpICsgY3VycmVudFcsICh3eENvb3JkKWRz
dFJlY3QueSgpICsgY3VycmVudEgsICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAod3hD
b29yZClzcmNSZWN0LndpZHRoKCksICh3eENvb3JkKXNyY1JlY3QuaGVpZ2h0KCksICZteWRjLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAod3hDb29yZClzcmNSZWN0LngoKSwgKHd4Q29v
cmQpc3JjUmVjdC55KCksIHd4Q09QWSwgdHJ1ZSk7IAotI2VuZGlmCi0gICAgICAgICAgICBjdXJy
ZW50SCArPSBzcmNSZWN0LmhlaWdodCgpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRXICs9
IHNyY1JlY3Qud2lkdGgoKTsKLSAgICAgICAgY3VycmVudEggPSBhZGp1c3RlZFk7Ci0gICAgfQot
ICAgIGN0eHQtPnJlc3RvcmUoKTsKLQotI2lmICFVU0UoV1hHQykKLSAgICBteWRjLlNlbGVjdE9i
amVjdCh3eE51bGxCaXRtYXApOwotI2VuZGlmICAgIAotICAgIAotICAgIC8vIE5COiBkZWxldGUg
aXMgY2F1c2luZyBjcmFzaGVzIGR1cmluZyBwYWdlIGxvYWQsIGJ1dCBub3QgZHVyaW5nIHRoZSBk
ZWxldGlvbgotICAgIC8vIGl0c2VsZi4gSXQgb2NjdXJzIGxhdGVyIG9uIHdoZW4gYSB2YWxpZCBi
aXRtYXAgY3JlYXRlZCBpbiBmcmFtZUF0SW5kZXgKLSAgICAvLyBzdWRkZW5seSBiZWNvbWVzIGlu
dmFsaWQgYWZ0ZXIgcmV0dXJuaW5nLiBJdCdzIHBvc3NpYmxlIHRoZXNlIGVycm9ycyBkZWFsCi0g
ICAgLy8gd2l0aCByZWVudHJhbmN5IGFuZCB0aHJlZGluZyBwcm9ibGVtcy4KLSAgICAvL2RlbGV0
ZSBiaXRtYXA7Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgaWYgKEltYWdlT2JzZXJ2
ZXIqIG9ic2VydmVyID0gaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBvYnNlcnZlci0+ZGlkRHJh
dyh0aGlzKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsK
LSAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsKLX0KLQotdm9pZCBCaXRtYXBJbWFn
ZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpCi17Ci0KLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UG9pbnRXeC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRQb2ludFd4LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzg5YWM5ZjdlMjU3NGI4NjUxZTk0YjU5NmY2ZGY1ZmFkNGU3Nzdj
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRQb2ludFd4LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgS2V2aW4g
T2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNp
bmNsdWRlIDx3eC9nZGljbW4uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbnRQb2ludDo6
SW50UG9pbnQoY29uc3Qgd3hQb2ludCYgcCkKLSAgICA6IG1feChwLngpCi0gICAgLCBtX3kocC55
KQotewotfQotCi1JbnRQb2ludDo6b3BlcmF0b3Igd3hQb2ludCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHd4UG9pbnQobV94LCBtX3kpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRSZWN0V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW50UmVjdFd4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTBjMWI1NWMyMDYxZGI2Y2ZiNTMzMjJmNjBkYTdmYThmNjk5NDFjZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbnRSZWN0V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2
aW5vQHRoZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+Ci0jaW5jbHVkZSA8d3gvZ2Rp
Y21uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UmVjdDo6SW50UmVjdChjb25zdCB3
eFJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHIueCwgci55KSkKLSAgICAsIG1f
c2l6ZShJbnRTaXplKHIud2lkdGgsIHIuaGVpZ2h0KSkKLXsKLX0KLQotSW50UmVjdDo6b3BlcmF0
b3Igd3hSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gd3hSZWN0KHgoKSwgeSgpLCB3aWR0aCgp
LCBoZWlnaHQoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ludFNpemVXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbnRTaXplV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzgy
ODU0ZTEzMWJhODU5ZDRiY2M4MjVhYTE5ZjFhMDAxNzFiNGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ludFNpemVXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEtldmluIFdhdHRlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0KLSNp
bmNsdWRlIDx3eC9kZWZzLmg+Ci0jaW5jbHVkZSA8d3gvZ2RpY21uLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotSW50U2l6ZTo6SW50U2l6ZShjb25zdCB3eFNpemUmIHMpCi0gICAgOiBtX3dp
ZHRoKHMueCkKLSAgICAsIG1faGVpZ2h0KHMueSkKLXsKLX0KLQotSW50U2l6ZTo6b3BlcmF0b3Ig
d3hTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd3hTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
UGF0aFd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZDMwNTJkYmZjMDE5NDU1ZWU1YTBk
ZjNkZWRlY2JiNzA4N2FlNTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3
IEtldmluIE9sbGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgi
IAotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4K
LQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWludCBnZXRXeFdpbmRSdWxlRm9yV2luZFJ1bGUoV2luZFJ1bGUg
cnVsZSkKLXsKLSAgICAgaWYgKHJ1bGUgPT0gUlVMRV9FVkVOT0REKQotICAgICAgICByZXR1cm4g
d3hPRERFVkVOX1JVTEU7Ci0KLSAgICByZXR1cm4gd3hXSU5ESU5HX1JVTEU7Ci19Ci0KLVBhdGg6
OlBhdGgoKSAKLSAgICA6IG1fcGF0aCgwKQotewotfQotCi1QYXRoOjp+UGF0aCgpCi17Ci0gICAg
aWYgKG1fcGF0aCkKLSAgICAgICAgZGVsZXRlIG1fcGF0aDsKLX0KLQotUGF0aDo6UGF0aChjb25z
dCBQYXRoJiBwYXRoKQoteyAKLSAgICBtX3BhdGggPSBuZXcgd3hHcmFwaGljc1BhdGgoKnBhdGgu
bV9wYXRoKTsKLX0KLQotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgV2luZFJ1bGUgcnVsZSkgY29uc3QKLXsKLSNpZiBVU0UoV1hHQykKLSAgICBpZiAo
bV9wYXRoKSB7Ci0jaWYgd3hDSEVDS19WRVJTSU9OKDIsOSwwKQotICAgICAgICByZXR1cm4gbV9w
YXRoLT5Db250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSwgc3RhdGljX2Nhc3Q8d3hQb2x5Z29u
RmlsbE1vZGU+KGdldFd4V2luZFJ1bGVGb3JXaW5kUnVsZShydWxlKSkpOwotI2Vsc2UKLSAgICAg
ICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCksIGdldFd4V2lu
ZFJ1bGVGb3JXaW5kUnVsZShydWxlKSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1
cm4gZmFsc2U7IAotfQotCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKQot
eyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdS
ZWN0KCkgY29uc3QgCi17IAotI2lmIFVTRShXWEdDKQotICAgIGlmIChtX3BhdGgpCi0gICAgICAg
IHJldHVybiBtX3BhdGgtPkdldEJveCgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Ci19Ci0KLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVB
cHBsaWVyKiBhcHBsaWVyKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotfQotCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0
eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29u
c3QgUGF0aCYgcGF0aCkKLXsgCi0gICAgKmVuc3VyZVBsYXRmb3JtUGF0aCgpID0gKnBhdGgucGxh
dGZvcm1QYXRoKCk7Ci0gICAgcmV0dXJuICp0aGlzOyAKLX0KLQotUGxhdGZvcm1QYXRoUHRyIFBh
dGg6OmVuc3VyZVBsYXRmb3JtUGF0aCgpCi17Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgcmV0
dXJuIG1fcGF0aDsKLQotICAgIC8vIE5COiBUaGlzIG9ubHkgc3VwcG9ydHMgdGhlICdkZWZhdWx0
JyByZW5kZXJlciBhcyBkZXRlcm1pbmVkIGJ5IHd4IG9uCi0gICAgLy8gZWFjaCBwbGF0Zm9ybS4g
SWYgYW4gYXBwIHVzZXMgYSBub24tZGVmYXVsdCByZW5kZXJlciAoZS5nLiBDYWlybyBvbiBXaW4p
LAotICAgIC8vIHRoZXJlIHdpbGwgYmUgcHJvYmxlbXMsIGJ1dCB0aGVyZSdzIG5vIHdheSB3ZSBj
YW4gZGV0ZXJtaW5lIHdoaWNoCi0gICAgLy8gcmVuZGVyZXIgYW4gYXBwIGlzIHVzaW5nIHJpZ2h0
IG5vdyB3aXRoIHd4IEFQSSwgc28gd2Ugd2lsbCBqdXN0IGhhbmRsZQotICAgIC8vIHRoZSBjb21t
b24gY2FzZS4KLSNpZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVy
ID0gMDsKLSNpZiB3eFVTRV9DQUlSTwotICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVy
OjpHZXRDYWlyb1JlbmRlcmVyKCk7Ci0jZWxzZQotICAgIHJlbmRlcmVyID0gd3hHcmFwaGljc1Jl
bmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKTsKLSNlbmRpZgotICAgIGlmIChyZW5kZXJlcikg
ewotICAgICAgICB3eEdyYXBoaWNzUGF0aCBwYXRoID0gcmVuZGVyZXItPkNyZWF0ZVBhdGgoKTsK
LSAgICAgICAgbV9wYXRoID0gbmV3IHd4R3JhcGhpY3NQYXRoKHBhdGgpOwotICAgIH0KLSNlbmRp
ZgotICAgIHJldHVybiBtX3BhdGg7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xlYXIoKQoteyAKLSAgICBp
ZiAobV9wYXRoKQotICAgICAgICBkZWxldGUgbV9wYXRoOwotICAgIG1fcGF0aCA9IDA7Ci19Ci0K
LXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSAKLXsKLSNpZiBVU0Uo
V1hHQykKLSAgICBpZiAoZW5zdXJlUGxhdGZvcm1QYXRoKCkpCi0gICAgICAgIG1fcGF0aC0+TW92
ZVRvUG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGF0aDo6
YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSAKLXsKLSNpZiBVU0UoV1hHQykKLSAg
ICBpZiAoZW5zdXJlUGxhdGZvcm1QYXRoKCkpCi0gICAgICAgIG1fcGF0aC0+QWRkTGluZVRvUG9p
bnQocG9pbnQueCgpLCBwb2ludC55KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGF0aDo6YWRkUXVh
ZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbCwgY29uc3QgRmxvYXRQb2ludCYgZW5k
KSAKLXsKLSNpZiBVU0UoV1hHQykKLSAgICBpZiAoZW5zdXJlUGxhdGZvcm1QYXRoKCkpCi0gICAg
ICAgIG1fcGF0aC0+QWRkUXVhZEN1cnZlVG9Qb2ludChjb250cm9sLngoKSwgY29udHJvbC55KCks
IGVuZC54KCksIGVuZC55KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3Vy
dmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJv
bDIsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkgCi17Ci0jaWYgVVNFKFdYR0MpCi0gICAgaWYgKGVu
c3VyZVBsYXRmb3JtUGF0aCgpKQotICAgICAgICBtX3BhdGgtPkFkZEN1cnZlVG9Qb2ludChjb250
cm9sMS54KCksIGNvbnRyb2wxLnkoKSwgY29udHJvbDIueCgpLCBjb250cm9sMi55KCksIGVuZC54
KCksIGVuZC55KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGZsb2F0IHJhZGl1cykg
Ci17Ci0jaWYgVVNFKFdYR0MpCi0gICAgaWYgKGVuc3VyZVBsYXRmb3JtUGF0aCgpKQotICAgICAg
ICBtX3BhdGgtPkFkZEFyY1RvUG9pbnQocG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQyLngo
KSwgcG9pbnQyLnkoKSwgcmFkaXVzKTsKLSNlbmRpZgotfQotCi12b2lkIFBhdGg6OmNsb3NlU3Vi
cGF0aCgpIAotewotI2lmIFVTRShXWEdDKQotICAgIGlmIChlbnN1cmVQbGF0Zm9ybVBhdGgoKSkK
LSAgICAgICAgbV9wYXRoLT5DbG9zZVN1YnBhdGgoKTsKLSNlbmRpZgotfQotCi12b2lkIFBhdGg6
OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFy
dEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dpc2UpIAotewotI2lmIFVTRShXWEdD
KQotICAgIGlmIChlbnN1cmVQbGF0Zm9ybVBhdGgoKSkKLSAgICAgICAgbV9wYXRoLT5BZGRBcmMo
cG9pbnQueCgpLCBwb2ludC55KCksIHJhZGl1cywgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIGNsb2Nr
d2lzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgCi17Ci0jaWYgVVNFKFdYR0MpCi0gICAgaWYgKGVuc3VyZVBsYXRmb3JtUGF0aCgpKQot
ICAgICAgICBtX3BhdGgtPkFkZFJlY3RhbmdsZShyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQYXRoOjphZGRFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgCi17Ci0jaWYgVVNFKFdYR0MpCi0gICAgaWYgKGVuc3Vy
ZVBsYXRmb3JtUGF0aCgpKQotICAgICAgICBtX3BhdGgtPkFkZEVsbGlwc2UocmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQg
UGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSAKLXsKLSNp
ZiBVU0UoV1hHQykKLSAgICBpZiAoZW5zdXJlUGxhdGZvcm1QYXRoKCkpCi0gICAgICAgIG1fcGF0
aC0+VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQYXRoOjphcHBseSh2
b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdCAKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOyAKLX0KLQotYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKLXsKLSNp
ZiBVU0UoV1hHQykKLSAgICBpZiAobV9wYXRoKSB7Ci0gICAgICAgIHd4RG91YmxlIHgsIHksIHdp
ZHRoLCBoZWlnaHQ7Ci0gICAgICAgIG1fcGF0aC0+R2V0Qm94KCZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0KTsKLSAgICAgICAgcmV0dXJuICh3aWR0aCA9PSAwICYmIGhlaWdodCA9PSAwKTsKLSAgICB9
Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9p
bnQoKSBjb25zdAotewotICAgIHJldHVybiAhaXNFbXB0eSgpOwotfQotCi1GbG9hdFBvaW50IFBh
dGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IHJldHVybiBjdXJyZW50
IHBvaW50IG9mIHN1YnBhdGguCi0gICAgZmxvYXQgcXVpZXROYU4gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQocXVpZXROYU4s
IHF1aWV0TmFOKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWFhYWI5Y2MyMDFlNjZmNzcyYTI1MDFlNTkzY2Y3ZDg2NmY0YTZjYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8
dW5pY29kZS91bm9ybS5oPgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUg
PHd4L2Rjc2NyZWVuLmg+Ci0jaW5jbHVkZSA8d3gvc3RyaW5nLmg+Ci0jaW5jbHVkZSAiZm9udHBy
b3BzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlCi17Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtSW5pdCgpCi17ICAgIAotICAgIHd4Rm9udCAqZm9udCA9IG1fcGxhdGZvcm1EYXRhLmZv
bnQoKTsKLSAgICBpZiAoZm9udCAmJiBmb250LT5Jc09rKCkpIHsKLSAgICAgICAgd3hGb250UHJv
cGVydGllcyBwcm9wcyA9IHd4Rm9udFByb3BlcnRpZXMoZm9udCk7Ci0gICAgICAgIG1fZm9udE1l
dHJpY3Muc2V0QXNjZW50KHByb3BzLkdldEFzY2VudCgpKTsKLSAgICAgICAgbV9mb250TWV0cmlj
cy5zZXREZXNjZW50KHByb3BzLkdldERlc2NlbnQoKSk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Mu
c2V0WEhlaWdodChwcm9wcy5HZXRYSGVpZ2h0KCkpOwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNl
dFVuaXRzUGVyRW0oMSk7IC8vIEZJWE1FIQotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVH
YXAocHJvcHMuR2V0TGluZUdhcCgpKTsKLSAgICAgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3Bh
Y2luZyhwcm9wcy5HZXRMaW5lU3BhY2luZygpKTsKLSAgICB9Ci0KLSAgICBtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQgPSAwLjBmOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBtX3NjcmlwdENhY2hlID0g
MDsKLSAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLSAgICBtX2lzU3lzdGVtRm9udCA9
IGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldp
ZHRoSW5pdCgpCi17Ci0gICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgbV9tYXhDaGFyV2lk
dGggPSAwLmY7Ci0gICAgaW5pdENoYXJXaWR0aHMoKTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIGlmIChtX3Njcmlw
dEZvbnRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVz
OwotICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
bV9zY3JpcHRDYWNoZSkKLSAgICAgICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsK
LSNlbmRpZgotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgRm9udERlc2NyaXB0
aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICBkZXNjLnNl
dFNwZWNpZmllZFNpemUoc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCkpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5
KCkuZmFtaWx5KCkpOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKHBsYXRmb3Jt
RGF0YSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKLX0KLQotYm9vbCBTaW1wbGVGb250RGF0YTo6
Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBXZSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgdG8g
bG9hZCBub24tQVNDSUkgZW5jb2Rpbmcgc2l0ZXMKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVy
biB3eEZvbnRDb250YWluc0NoYXJhY3RlcnMobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKLSNlbGlmIE9TKERBUldJTikKLSAgICByZXR1cm4gd3hGb250Q29udGFp
bnNDaGFyYWN0ZXJzKG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpLCBjaGFyYWN0ZXJzLCBsZW5ndGgp
OwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRl
dGVybWluZVBpdGNoKCkKLXsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpICYmIG1fcGxh
dGZvcm1EYXRhLmZvbnQoKS0+T2soKSkKLSAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1f
cGxhdGZvcm1EYXRhLmZvbnQoKS0+SXNGaXhlZFdpZHRoKCk7Ci0gICAgZWxzZQotICAgICAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Ci19Ci0KLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKLXsKLSAgICByZXR1cm4gRmxv
YXRSZWN0KCk7Ci19Ci0KLWZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0jaWYgX19XWE1TV19fCi0gICAgLy8gdW5kZXIgV2lu
ZG93cyAvIHd4TVNXIHdlIGN1cnJlbnRseSBhbHdheXMgdXNlIEdESSBmb250cy4KLSAgICByZXR1
cm4gd2lkdGhGb3JHRElHbHlwaChnbHlwaCk7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgZmxvYXQg
cG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Ci0g
ICAgQ0dTaXplIGFkdmFuY2U7Ci0gICAgTlNGb250KiBuc2ZvbnQgPSAoTlNGb250KiltX3BsYXRm
b3JtRGF0YS5uc0ZvbnQoKTsKLSAgICBpZiAoIXdrR2V0R2x5cGhUcmFuc2Zvcm1lZEFkdmFuY2Vz
KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCBuc2ZvbnQsICZtLCAmZ2x5cGgsICZhZHZhbmNlKSkg
ewotICAgICAgICAvLyBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9y
ICVAICVmIiwgW25zZm9udCBkaXNwbGF5TmFtZV0sIHBvaW50U2l6ZSk7Ci0gICAgICAgIGFkdmFu
Y2Uud2lkdGggPSAwOwotICAgIH0KLSAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhl
dGljQm9sZE9mZnNldDsKLSNlbHNlCi0gICAgLy8gVE9ETzogZml4IHRoaXMhIE1ha2UgR2V0VGV4
dEV4dGVudHMgYSBtZXRob2Qgb2Ygd3hGb250IGluIDIuOQotICAgIGludCB3aWR0aCA9IDEwOwot
ICAgIEdldFRleHRFeHRlbnQoKm1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgKHd4Q2hhcilnbHlwaCwg
JndpZHRoLCBOVUxMKTsKLSAgICByZXR1cm4gd2lkdGg7Ci0jZW5kaWYKLX0KLQotI2lmIE9TKFdJ
TkRPV1MpCi1TQ1JJUFRfRk9OVFBST1BFUlRJRVMqIFNpbXBsZUZvbnREYXRhOjpzY3JpcHRGb250
UHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgLy8gQUZBSUNUIHRoaXMgaXMgbmV2ZXIgY2FsbGVk
IGV2ZW4gYnkgdGhlIFdpbiBwb3J0IGFueW1vcmUuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
U2ltcGxlRm9udERhdGE6OmluaXRHRElGb250KCkKLXsKLSAgICAvLyB1bnVzZWQgYnkgd3ggcG9y
dAotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNvbW1vbkRlc3Ryb3koKQotewot
ICAgIC8vIHVudXNlZCBieSB3eCBwb3J0Ci19Ci0KLWZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0
aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIEhEQyBoZGMgPSBHZXREQygw
KTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX3BsYXRmb3JtRGF0
YS5oZm9udCgpKTsKLSAgICBpbnQgd2lkdGg7Ci0gICAgR2V0Q2hhcldpZHRoSShoZGMsIGdseXBo
LCAxLCAwLCAmd2lkdGgpOwotICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIFJl
bGVhc2VEQygwLCBoZGMpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLSNlbmRpZgotICAgIAotI2lm
IE9TKERBUldJTikKLWNvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Z2V0Q29t
cG9zaXRlRm9udFJlZmVyZW5jZUZvbnREYXRhKE5TRm9udCAqa2V5KSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotICAgIAotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25NYXRyaXhXeC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNDIzMGRmOGYxNDJhNGZmODIwYWVkZDk1
NDc3MWNhOWU5Yjc4OGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJhbnNmb3JtYXRpb25N
YXRyaXhXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEtldmluIE9sbGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9ncmFwaGlj
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoV1hHQykKLVRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvciB3eEdyYXBoaWNzTWF0cml4KCkgY29uc3QKLXsKLSAgICB3eEdy
YXBoaWNzUmVuZGVyZXIqIHJlbmRlcmVyID0gMDsKLSNpZiB3eFVTRV9DQUlSTwotICAgIHJlbmRl
cmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXRDYWlyb1JlbmRlcmVyKCk7Ci0jZWxzZQotICAg
IHJlbmRlcmVyID0gd3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKTsKLSNl
bmRpZgotICAgIEFTU0VSVChyZW5kZXJlcik7Ci0gICAgCi0gICAgd3hHcmFwaGljc01hdHJpeCBt
YXRyaXggPSByZW5kZXJlci0+Q3JlYXRlTWF0cml4KGEoKSwgYigpLCBjKCksIGQoKSwgZSgpLCBm
KCkpOwotICAgIHJldHVybiBtYXRyaXg7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3Ig
d3hHcmFwaGljc01hdHJpeCgpIGNvbnN0Ci17Ci0gICAgd3hHcmFwaGljc1JlbmRlcmVyKiByZW5k
ZXJlciA9IDA7Ci0jaWYgd3hVU0VfQ0FJUk8KLSAgICByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5k
ZXJlcjo6R2V0Q2Fpcm9SZW5kZXJlcigpOwotI2Vsc2UKLSAgICByZW5kZXJlciA9IHd4R3JhcGhp
Y3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7Ci0jZW5kaWYKLSAgICBBU1NFUlQocmVu
ZGVyZXIpOwotICAgIAotICAgIHd4R3JhcGhpY3NNYXRyaXggbWF0cml4ID0gcmVuZGVyZXItPkNy
ZWF0ZU1hdHJpeChhKCksIGIoKSwgYygpLCBkKCksIGUoKSwgZigpKTsKLSAgICByZXR1cm4gbWF0
cml4OwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWVlYjc0ZDM3OTA1ZWIwMjk5MzNkMTlhZTFhOTJhNTVkOTQ0NDI1
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi0vLyBGSVhNRTogQXJl
IGFsbCB0aGVzZSBuZWVkZWQ/Ci0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2Jp
dG1hcC5oPgotI2lmIFVTRShXWEdDKQotI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+Ci0jZW5kaWYK
LSNpbmNsdWRlIDx3eC9pbWFnZS5oPgotI2luY2x1ZGUgPHd4L3Jhd2JtcC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVBhc3NOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2
ZUltYWdlKCkgY29uc3QKLXsKLSAgICB3eEJpdG1hcCogYm1wID0gbmV3IHd4Qml0bWFwKHdpZHRo
KCksIGhlaWdodCgpLCAzMik7Ci0KLSAgICB7Ci0gICAgICAgIHR5cGVkZWYgd3hQaXhlbERhdGE8
d3hCaXRtYXAsIHd4QWxwaGFQaXhlbEZvcm1hdD4gV3hQaXhlbERhdGE7Ci0gICAgICAgIFd4UGl4
ZWxEYXRhIGRhdGEoKmJtcCk7Ci0gICAgICAgIAotICAgICAgICAvLyBOQjogSXQgYXBwZWFycyB0
aGF0IHRoZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdCQSBmb3JtYXQuCi0g
ICAgICAgIC8vIFRoaXMgY29kZSB3b3JrcyBwcm9wZXJseSBvbiBib3RoIHBwYyBhbmQgaW50ZWws
IG1lYW5pbmcgdGhlIGlzc3VlIGlzCi0gICAgICAgIC8vIGxpa2VseSBub3QgYW4gaXNzdWUgb2Yg
Ynl0ZSBvcmRlciBnZXR0aW5nIG1peGVkIHVwIG9uIGRpZmZlcmVudCBhcmNocy4gCi0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fYnl0
ZXM7Ci0gICAgICAgIGludCByb3dDb3VudGVyID0gMDsKLSAgICAgICAgbG9uZyBwaXhlbENvdW50
ZXIgPSAwOwotICAgICAgICBXeFBpeGVsRGF0YTo6SXRlcmF0b3IgcChkYXRhKTsKLSAgICAgICAg
V3hQaXhlbERhdGE6Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsgCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4
ZWxEYXRhKTsgaSArPSBzaXplb2YoUGl4ZWxEYXRhKSkgewotI2lmICFDUFUoQklHX0VORElBTikK
LSAgICAgICAgICAgIHAuQWxwaGEoKSA9IGJ5dGVzW2kgKyAzXTsKLSAgICAgICAgICAgIHAuUmVk
KCkgPSBieXRlc1tpICsgMl07Ci0gICAgICAgICAgICBwLkdyZWVuKCkgPSBieXRlc1tpICsgMV07
Ci0gICAgICAgICAgICBwLkJsdWUoKSA9IGJ5dGVzW2kgKyAwXTsKLSNlbHNlCi0gICAgICAgICAg
ICBwLkFscGhhKCkgPSBieXRlc1tpICsgMF07Ci0gICAgICAgICAgICBwLlJlZCgpID0gYnl0ZXNb
aSArIDFdOwotICAgICAgICAgICAgcC5HcmVlbigpID0gYnl0ZXNbaSArIDJdOwotICAgICAgICAg
ICAgcC5CbHVlKCkgPSBieXRlc1tpICsgM107Ci0jZW5kaWYKLSAgICAgICAgICAgIHArKzsKLQot
ICAgICAgICAgICAgcGl4ZWxDb3VudGVyKys7Ci0gICAgICAgICAgICBpZiAoKHBpeGVsQ291bnRl
ciAlIHdpZHRoKCkpID09IDApIHsKLSAgICAgICAgICAgICAgICByb3dDb3VudGVyKys7Ci0gICAg
ICAgICAgICAgICAgcCA9IHJvd1N0YXJ0OwotICAgICAgICAgICAgICAgIHAuTW92ZVRvKGRhdGEs
IDAsIHJvd0NvdW50ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWYgIXd4Q0hFQ0tf
VkVSU0lPTigyLDksMCkKLSAgICAgICAgYm1wLT5Vc2VBbHBoYSgpOwotI2VuZGlmCi0gICAgfSAv
LyBlbnN1cmUgdGhhdCBXeFBpeGVsRGF0YSBpcyBkZXN0cm95ZWQgYXMgaXQgdW5sb2NrcyB0aGUg
Yml0bWFwIGRhdGEgaW4KLSAgICAgIC8vIGl0cyBkdG9yIGFuZCB3ZSBjYW4ndCBhY2Nlc3MgaXQg
KG5vdGFibHkgaW4gQ3JlYXRlQml0bWFwKCkgYmVsb3cpCi0gICAgICAvLyBiZWZvcmUgdGhpcyBp
cyBkb25lCi0KLSAgICBBU1NFUlQoYm1wLT5Jc09rKCkpOwotCi0jaWYgVVNFKFdYR0MpCi0gICAg
d3hHcmFwaGljc1JlbmRlcmVyKiByZW5kZXJlciA9IDA7Ci0jaWYgd3hVU0VfQ0FJUk8KLSAgICBy
ZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0Q2Fpcm9SZW5kZXJlcigpOwotI2Vsc2UK
LSAgICByZW5kZXJlciA9IHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCk7
Ci0jZW5kaWYKLSAgICBBU1NFUlQocmVuZGVyZXIpOwotICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJp
dG1hcCA9IG5ldyB3eEdyYXBoaWNzQml0bWFwKHJlbmRlcmVyLT5DcmVhdGVCaXRtYXAoKmJtcCkp
OwotICAgIGRlbGV0ZSBibXA7Ci0gICAgcmV0dXJuIGJpdG1hcDsKLSNlbHNlCi0gICAgcmV0dXJu
IGJtcDsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRjZGI5NjYzNmUxYTkxYjEzNzRlNzRlYmQ5M2QyNGM2MTYyNzMzYzEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvQ2xpcGJvYXJkV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZp
ZXJzLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNsaXBib2Fy
ZFd4LmgiCi0KLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSGFzaFRhYmxlLmgiCi0jaW5jbHVkZSAiSW50UG9p
bnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmQu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLVBhc3NSZWZQdHI8Q2xp
cGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIERyYWdEYXRh
KiwgRnJhbWUqKQotewotICAgIHJldHVybiAwOwotfQotCi1DbGlwYm9hcmRXeDo6Q2xpcGJvYXJk
V3goQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRU
eXBlKSAKLSAgICA6IENsaXBib2FyZChwb2xpY3ksIGNsaXBib2FyZFR5cGUpCi17Ci19Ci0KLXZv
aWQgQ2xpcGJvYXJkV3g6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDbGlwYm9hcmRXeDo6Y2xlYXJBbGxEYXRhKCkgCi17
Ci0gICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+Y2xlYXIoKTsKLX0KLQotU3Ry
aW5nIENsaXBib2FyZFd4OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QgCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gIiI7IAotfQotCi1ib29sIENsaXBib2Fy
ZFd4OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSAKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gZXh0ZW5z
aW9ucyBiZXlvbmQgSUUncyBBUEkKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV3g6OnR5
cGVzKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIExpc3RIYXNoU2V0PFN0
cmluZz4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZFd4OjpmaWxlcygpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotSW50UG9pbnQgQ2xpcGJvYXJkV3g6OmRyYWdMb2NhdGlvbigp
IGNvbnN0IAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRQb2ludCgw
LDApOwotfQotCi1DYWNoZWRJbWFnZSogQ2xpcGJvYXJkV3g6OmRyYWdJbWFnZSgpIGNvbnN0IAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7IAotfQotCi12b2lkIENsaXBi
b2FyZFd4OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpIAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLU5vZGUqIENsaXBib2FyZFd4OjpkcmFnSW1hZ2VF
bGVtZW50KCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgCi19Ci0K
LXZvaWQgQ2xpcGJvYXJkV3g6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBv
aW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1EcmFnSW1hZ2VSZWYgQ2xpcGJv
YXJkV3g6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvYykgY29uc3QKLXsgCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBDbGlwYm9hcmRXeDo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiwgRnJhbWUqKSAKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIENsaXBi
b2FyZFd4Ojp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBG
cmFtZSogZnJhbWUpIAotewotICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndy
aXRlVVJMKHVybCwgc3RyaW5nLCBmcmFtZSk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkV3g6OndyaXRl
UmFuZ2UoUmFuZ2UqIHJhbmdlLCBGcmFtZSogZnJhbWUpIAotewotICAgIFBhc3RlYm9hcmQ6Omdl
bmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlU2VsZWN0aW9uKHJhbmdlLCBmcmFtZS0+ZWRpdG9yKCkt
PnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+Z3JhbnVs
YXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHksIGZyYW1lKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRX
eDo6aGFzRGF0YSgpIAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIENsaXBib2FyZFd4Ojp3cml0ZVBsYWluVGV4dChjb25zdCBXVEY6OlN0cmlu
ZyYgdGV4dCkKLXsKLSAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBs
YWluVGV4dCh0ZXh0LCBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2UpOwotfQotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzdiMWZkZDhhMDZjZjE4ZWVhMDZiOTA0NjZlMDIwY2EyYWI3YWFhZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2xpcGJvYXJkV3hfaAotI2RlZmluZSBDbGlw
Ym9hcmRXeF9oCi0KLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgY2xhc3MgQ2FjaGVkSW1hZ2U7Ci0KLSAgICAvLyBTdGF0ZSBhdmFpbGFibGUgZHVy
aW5nIElFJ3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi0gICAgY2xh
c3MgQ2xpcGJvYXJkV3ggOiBwdWJsaWMgQ2xpcGJvYXJkIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZFd4PiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZFd4KHBvbGljeSwgY2xpcGJvYXJk
VHlwZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5n
JiB0eXBlKTsKLSAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKLSAgICAgICAgU3RyaW5nIGdl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKLSAgICAgICAgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICAKLSAgICAgICAgLy8g
ZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKLSAgICAKLSAgICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkg
Y29uc3Q7Ci0gICAgICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdDsKLSAgICAgICAg
dm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwotICAgICAg
ICBOb2RlKiBkcmFnSW1hZ2VFbGVtZW50KCk7Ci0gICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxl
bWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKLQotICAgICAgICB2aXJ0dWFsIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdy
aXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVBsYWluVGV4dChjb25zdCBXVEY6OlN0cmluZyYpOwotCi0KLSAgICAgICAgdmlydHVh
bCBib29sIGhhc0RhdGEoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENsaXBib2FyZFd4KENs
aXBib2FyZEFjY2Vzc1BvbGljeSwgQ2xpcGJvYXJkVHlwZSk7Ci0gICAgfTsKLX0gCi0KLSNlbmRp
ZiAvLyBDbGlwYm9hcmRXeF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9Db250ZXh0TWVudUl0ZW1XeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250
ZXh0TWVudUl0ZW1XeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZWJlMTM1
YjYxNWY5OTk3OTEzZjhhYTU2MDJkZjA1ZTg1YTdiMzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4
dE1lbnVJdGVtV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkNvbnRleHRNZW51
SXRlbS5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZW51
RGVzY3JpcHRpb24uaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUNvbnRleHRNZW51
SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRleHRNZW51KiBzdWJNZW51KQotewotICAgIG1fcGxh
dGZvcm1EZXNjcmlwdGlvbi50eXBlID0gU3VibWVudVR5cGU7Ci0gICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uLmFjdGlvbiA9IENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOwotICAgIGlmIChzdWJN
ZW51KQotICAgICAgICBzZXRTdWJNZW51KHN1Yk1lbnUpOwotICAgIGVsc2UKLSAgICAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSAwOwotfQotCi1Db250ZXh0TWVudUl0ZW06OkNv
bnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUsIENvbnRleHRNZW51QWN0aW9u
IGFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
dGl0bGUsIENvbnRleHRNZW51KiBzdWJNZW51KQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlv
bi50eXBlID0gdHlwZTsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24uYWN0aW9uID0gYWN0aW9u
OwotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi50aXRsZSA9IHRpdGxlOwotICAgIGlmIChzdWJN
ZW51KQotICAgICAgICBzZXRTdWJNZW51KHN1Yk1lbnUpOwotICAgIGVsc2UKLSAgICAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSAwOwotfQotCi1Db250ZXh0TWVudUl0ZW06On5D
b250ZXh0TWVudUl0ZW0oKQotewotfQotCi1QbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gQ29u
dGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgcmV0dXJu
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotQ29udGV4dE1lbnVJdGVtVHlwZSBDb250ZXh0
TWVudUl0ZW06OnR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRp
b24udHlwZTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFR5cGUoQ29udGV4dE1lbnVJ
dGVtVHlwZSB0eXBlKQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi50eXBlID0gdHlwZTsK
LX0KLQotQ29udGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb24uYWN0aW9uOwotfQotCi12b2lkIENv
bnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbikKLXsKLSAg
ICBtX3BsYXRmb3JtRGVzY3JpcHRpb24uYWN0aW9uID0gYWN0aW9uOwotfQotCi1TdHJpbmcgQ29u
dGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbi50aXRsZTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFRpdGxlKGNvbnN0
IFN0cmluZyYgdGl0bGUpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLnRpdGxlID0gdGl0
bGU7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KENvbnRleHRNZW51KiBz
dWJNZW51KQotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi5zdWJNZW51ID0gc3ViTWVudS0+
cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKLX0KLQotdm9pZCBDb250ZXh0TWVudUl0ZW06
OnNldENoZWNrZWQoYm9vbCBzaG91bGRDaGVjaykKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24uY2hlY2tlZCA9IHNob3VsZENoZWNrOwotfQotCi12b2lkIENvbnRleHRNZW51SXRlbTo6c2V0
RW5hYmxlZChib29sIHNob3VsZEVuYWJsZSkKLXsKLSAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24u
ZW5hYmxlZCA9IHNob3VsZEVuYWJsZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
Q29udGV4dE1lbnVXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMmVlNTI3
ZDk0OGUxNjJhYmI4OTQyMzhiYjJiMzg0ZDg2OWY2MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4
dE1lbnVXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAid3gvbWVu
dS5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci10eXBlZGVmIFdURjo6SGFzaE1hcDxpbnQsIENvbnRleHRNZW51QWN0aW9uPiBJdGVtQWN0aW9u
TWFwOwotc3RhdGljIEl0ZW1BY3Rpb25NYXAgc19pdGVtQWN0aW9uczsKLQotQ29udGV4dE1lbnVJ
dGVtKiBDb250ZXh0TWVudTo6aXRlbVdpdGhJZChpbnQgaWQpCi17Ci0gICAgcmV0dXJuIG5ldyBD
b250ZXh0TWVudUl0ZW0oQWN0aW9uVHlwZSwgc19pdGVtQWN0aW9ucy5nZXQoaWQpLCAiIik7Ci19
Ci0KLUNvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCi17Ci0gICAgbV9wbGF0Zm9ybURlc2NyaXB0
aW9uID0gbmV3IHd4TWVudSgobG9uZykwKTsKLX0KLQotQ29udGV4dE1lbnU6On5Db250ZXh0TWVu
dSgpCi17Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKLSAgICAgICAgZGVsZXRlIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbjsKLX0KLQotdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIGl0ZW0pCi17Ci0gICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uIGl0ZW1EZXNjcmlwdGlvbiA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsg
ICAgCi0gICAgd3hJdGVtS2luZCBtZW51S2luZFd4ID0gKCBpdGVtRGVzY3JpcHRpb24udHlwZSA9
PSBDaGVja2FibGVBY3Rpb25UeXBlICkgPyB3eElURU1fQ0hFQ0sgOiB3eElURU1fTk9STUFMOwot
ICAgIHd4U3RyaW5nIHRpdGxlV3goaXRlbURlc2NyaXB0aW9uLnRpdGxlKTsKLSAgICBpbnQgaWRX
eCA9IHd4SURfQU5ZOwotICAgIHd4TWVudUl0ZW0gKiBpdGVtV3g7Ci0KLSAgICBJdGVtQWN0aW9u
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzX2l0ZW1BY3Rpb25zLmVuZCgpOwotICAgIGZvciAo
SXRlbUFjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzX2l0ZW1BY3Rpb25zLmJlZ2luKCk7
ICBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZSA9PSBpdGVtRGVzY3Jp
cHRpb24uYWN0aW9uKQotICAgICAgICAgICAgaWRXeCA9IGl0LT5rZXk7Ci0gICAgfQotCi0gICAg
aWYgKGl0ZW1EZXNjcmlwdGlvbi5zdWJNZW51KSB7Ci0gICAgICAgIGl0ZW1XeCA9IG5ldyB3eE1l
bnVJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgaWRXeCwgdGl0bGVXeCwgd3hFbXB0eVN0cmlu
Zywgd3hJVEVNX05PUk1BTCwgaXRlbURlc2NyaXB0aW9uLnN1Yk1lbnUpOwotICAgIH0gZWxzZSBp
ZiAoaXRlbURlc2NyaXB0aW9uLnR5cGUgIT0gU2VwYXJhdG9yVHlwZSkgewotICAgICAgICBpdGVt
V3ggPSBuZXcgd3hNZW51SXRlbShtX3BsYXRmb3JtRGVzY3JpcHRpb24sIGlkV3gsIHRpdGxlV3gs
IHd4VCgiIiksIG1lbnVLaW5kV3gpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGl0ZW1XeCA9IG5l
dyB3eE1lbnVJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgc19pdGVt
QWN0aW9ucy5hZGQoaXRlbVd4LT5HZXRJZCgpLCBpdGVtLmFjdGlvbigpKTsKLSAgICAKLSAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24tPkFwcGVuZChpdGVtV3gpOwotICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbi0+RW5hYmxlKGl0ZW1XeC0+R2V0SWQoKSwgaXRlbURlc2NyaXB0aW9uLmVuYWJsZWQp
OwotICAgIAotICAgIGlmIChtZW51S2luZFd4ID09IHd4SVRFTV9DSEVDSykKLSAgICAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uLT5DaGVjayhpdGVtV3gtPkdldElkKCksIGl0ZW1EZXNjcmlwdGlv
bi5jaGVja2VkKTsgICAgICAgIAotfQotCi12b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURl
c2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi17Ci0gICAgaWYgKCFtZW51
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQotICAg
ICAgICBkZWxldGUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotCi0gICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gbWVudTsKLX0KLQotUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6
OnBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtRGVz
Y3JpcHRpb247Ci19Ci0KLVBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51OjpyZWxl
YXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCi17Ci0gICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gMDsKLQotICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLX0KLQotdW5zaWduZWQgQ29u
dGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbikKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+R2V0TWVudUl0ZW1D
b3VudCgpOwotICAgIAotICAgIHJldHVybiAwOwotfQotCi1WZWN0b3I8Q29udGV4dE1lbnVJdGVt
PiBjb250ZXh0TWVudUl0ZW1WZWN0b3Iod3hNZW51KiBtZW51KQotewotICAgIFZlY3RvcjxDb250
ZXh0TWVudUl0ZW0+IG1lbnVJdGVtVmVjdG9yOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIG1lbnVJdGVtVmVjdG9yOwotfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvQ3Vyc29yV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3gvQ3Vyc29yV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmZhYTlkYjlm
NTUzOGQ4YjlkMWU0NGI2MTViMjZmYjgxMDcyNzU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0N1cnNvcld4
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkltYWdl
LmgiCi0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+Ci0jaW5jbHVkZSA8d3gvY3Vyc29yLmg+Ci0jaW5j
bHVkZSA8d3gvaW1hZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DdXJzb3I6OkN1cnNv
cihjb25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV9wbGF0Zm9ybUN1cnNvcihvdGhlci5tX3Bs
YXRmb3JtQ3Vyc29yKQotewotfQotCi1DdXJzb3I6OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFBvaW50JikgCi17Ci0gICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7Ci0gICAgLy8gRklYTUU6
IGZpZ3VyZSBvdXQgd2h5IHRoZSBiZWxvdyBjb2RlIGNhdXNlcyBhIGNyYXNoICAKLSAgICAvL21f
cGxhdGZvcm1DdXJzb3IgPSBuZXcgd3hDdXJzb3IoIGltYWdlLT5nZXRXeEJpdG1hcCgpLT5Db252
ZXJ0VG9JbWFnZSgpICk7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci19Ci0KLUN1cnNvciYg
Q3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LUN1cnNvcjo6Q3Vyc29yKHd4Q3Vyc29yKiBjKQotICAgIDogbV9wbGF0Zm9ybUN1cnNvcihjKQot
ewotfQotCi1jb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJz
b3IgYyA9IEN1cnNvcihuZXcgd3hDdXJzb3Iod3hDVVJTT1JfQVJST1cpKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNv
ciBjID0gQ3Vyc29yKG5ldyB3eEN1cnNvcih3eENVUlNPUl9DUk9TUykpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIGhhbmRDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3Ig
YyA9IEN1cnNvcihuZXcgd3hDdXJzb3Iod3hDVVJTT1JfSEFORCkpOwotICAgIHJldHVybiBjOwot
fQotCi1jb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBDdXJzb3IobmV3IHd4Q3Vyc29yKHd4Q1VSU09SX0lCRUFNKSk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0g
Q3Vyc29yKG5ldyB3eEN1cnNvcih3eENVUlNPUl9XQUlUKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gQ3Vy
c29yKG5ldyB3eEN1cnNvcih3eENVUlNPUl9RVUVTVElPTl9BUlJPVykpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBD
dXJzb3IgYyA9IEN1cnNvcihuZXcgd3hDdXJzb3Iod3hDVVJTT1JfU0laRVdFKSk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQotewotICAgIHN0
YXRpYyBDdXJzb3IgYyA9IEN1cnNvcihuZXcgd3hDdXJzb3Iod3hDVVJTT1JfU0laRU5TKSk7Ci0g
ICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCkK
LXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBDdXJzb3IobmV3IHd4Q3Vyc29yKHd4Q1VSU09SX1NJ
WkVORVNXKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBDdXJzb3IobmV3IHd4Q3Vyc29y
KHd4Q1VSU09SX1NJWkVOV1NFKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
c291dGhSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IG5vcnRoUmVzaXpl
Q3Vyc29yKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhFYXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBub3J0aFdlc3RSZXNpemVDdXJz
b3IoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVD
dXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigp
OwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3IoKQot
ewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGVhc3RSZXNpemVDdXJzb3IoKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBz
dGF0aWMgQ3Vyc29yIGMgPSBub3J0aFJlc2l6ZUN1cnNvcigpOwotICAgIHJldHVybiBjOwotfQot
Ci1jb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vy
c29yIGMgPSBlYXN0UmVzaXplQ3Vyc29yKCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vy
c29yIGMgPSBub3J0aEVhc3RSZXNpemVDdXJzb3IoKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29u
c3QgQ3Vyc29yJiBub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRp
YyBDdXJzb3IgYyA9IG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpOwotICAgIHJldHVybiBjOwotfQot
Ci1jb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCi17Ci0gICAgLy8gRklYTUU6IFdp
bmRvd3MgZG9lcyBub3QgaGF2ZSBhIHN0YW5kYXJkIGNvbHVtbiByZXNpemUgY3Vyc29yCi0gICAg
c3RhdGljIEN1cnNvciBjID0gQ3Vyc29yKG5ldyB3eEN1cnNvcih3eENVUlNPUl9TSVpJTkcpKTsK
LSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQotewot
ICAgIC8vIEZJWE1FOiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZCByb3cgcmVzaXpl
IGN1cnNvcgotICAgIHN0YXRpYyBDdXJzb3IgYyA9IEN1cnNvcihuZXcgd3hDdXJzb3Iod3hDVVJT
T1JfU0laSU5HKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0gICAgCi1jb25zdCBDdXJzb3ImIG1pZGRs
ZVBhbm5pbmdDdXJzb3IoKQotewotICAgIHJldHVybiBtb3ZlQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHJldHVybiBlYXN0UmVzaXplQ3Vy
c29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBy
ZXR1cm4gbm9ydGhSZXNpemVDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RQ
YW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCk7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJu
IG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoUGFubmlu
Z0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoUmVzaXplQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgc291dGhFYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoRWFz
dFJlc2l6ZUN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJz
b3IoKQotewotICAgIHJldHVybiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKTsKLX0KLQotY29uc3Qg
Q3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHdlc3RSZXNpemVDdXJz
b3IoKTsKLX0gICAgCi0KLWNvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkKLXsKLSAg
ICByZXR1cm4gaUJlYW1DdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkK
LXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbnRl
eHRNZW51Q3Vyc29yKCkKLXsKLSAgICByZXR1cm4gaGFuZEN1cnNvcigpOwotfQotCi1jb25zdCBD
dXJzb3ImIG5vRHJvcEN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0K
LQotY29uc3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHdhaXRDdXJz
b3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBv
aW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29yKCkKLXsKLSAgICBy
ZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vbmVDdXJzb3IoKQot
ewotICAgIC8vIFRPRE86IERldGVybWluZSBpZiB3ZSBjYW4gZmluZCBhIGJldHRlciBjdXJzb3Ig
Zm9yIHRoaXMuCi0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29y
JiBub3RBbGxvd2VkQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBDdXJzb3IobmV3
IHd4Q3Vyc29yKHd4Q1VSU09SX05PX0VOVFJZKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBDdXJzb3Io
bmV3IHd4Q3Vyc29yKHd4Q1VSU09SX01BR05JRklFUikpOwotICAgIHJldHVybiBjOwotfQotCi1j
b25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQotewotICAgIC8vIFRPRE86IEZpbmQgYSB3YXkg
dG8gaW1wbGVtZW50IGluL291dCBtYWduaWZpZXJzIGluIHd4LgotICAgIHJldHVybiB6b29tSW5D
dXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKLXsKLSAgICAvLyBUT0RP
OiBEZXRlcm1pbmUgaWYgd2UgY2FuIGZpbmQgYSBiZXR0ZXIgY3Vyc29yIGZvciB0aGlzLgotICAg
IHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZ3JhYmJpbmdDdXJz
b3IoKQotewotICAgIC8vIFRPRE86IERldGVybWluZSBpZiB3ZSBjYW4gZmluZCBhIGJldHRlciBj
dXJzb3IgZm9yIHRoaXMuCi0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3Qg
Q3Vyc29yJiBtb3ZlQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBDdXJzb3IobmV3
IHd4Q3Vyc29yKHd4Q1VSU09SX1NJWklORykpOwotICAgIHJldHVybiBjOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9EcmFnRGF0YVd4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0RyYWdEYXRhV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MmU0NzQwYTRkZDA3Yjk2NjAyZDQzZGVhNTFkOTk5MWE2MzFkMTAxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L0RyYWdEYXRhV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnRGF0
YS5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIERy
YWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LSAgICAKLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdAotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVz
KFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Ci17Ci19Ci0KLWJvb2wgRHJhZ0RhdGE6OmNv
bnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmlu
ZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoRnJhbWUqKSBjb25zdAotewotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLSAgICAKLUNvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gQ29sb3IoKTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29u
dGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBEcmFnRGF0
YTo6Y29udGFpbnNVUkwoRnJhbWUqLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQ
b2xpY3kpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotU3RyaW5nIERyYWdE
YXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGlj
eSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAg
Ci0gICAgCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50
KEZyYW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotICAgIAotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC9EcmFnSW1hZ2VXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9EcmFnSW1h
Z2VXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNmU3NjVjMGViNmVjZTQ0
ZTdiOWQ4MWQ3OThkOTg0YTk5Yjg0ZmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvRHJhZ0ltYWdlV3guY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCi0KLSNpbmNsdWRlICJGbG9hdFNpemUuaCIK
LSNpbmNsdWRlICJJbWFnZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFNpemUgZHJh
Z0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpCi17Ci0gICAgcmV0dXJuIEludFNpemUoMCwgMCk7Ci19
Ci0KLXZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZikKLXsKLX0KLQotRHJhZ0ltYWdl
UmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplKQotewotICAg
IHJldHVybiBpbWFnZTsKLX0KLSAgICAKLURyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRv
RnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCkKLXsKLSAgICByZXR1cm4gaW1hZ2U7
Ci19Ci0gICAgICAgIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFn
ZSosIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSkKLXsKLSAgICByZXR1cm4gMDsKLX0KLSAg
ICAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2VGaWxlbmFt
ZShjb25zdCBTdHJpbmcmKQotewotICAgIHJldHVybiAwOyAgICAgCi19Ci0gICAgCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9FdmVudExvb3BXeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9FdmVudExvb3BXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk5MDkwY2FhYzdlMTdlMTdkMDQxMTgwYTI5ZjVmZjdhN2ZlNDhlMDYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvRXZlbnRMb29wV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJF
dmVudExvb3AuaCIKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9hcHAuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQotewotICAg
IGlmICh3eFRoZUFwcCkgewotICAgICAgICBpZiAod3hUaGVBcHAtPklzTWFpbkxvb3BSdW5uaW5n
KCkpCi0gICAgICAgICAgICB3eFRoZUFwcC0+RGlzcGF0Y2goKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9lbmRlZCA9IHRydWU7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9GaWxlU3lzdGVtV3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvRmlsZVN5c3RlbVd4LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiNDY5Mjk5NDhkYjU0ZjhjODU1Yzg1YmUwNDFlNGUy
YjZhZDI0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9GaWxlU3lzdGVtV3guY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZp
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBQZXRlciBMYXVmZW5iZXJnIEAgSW5oYW5jZSBEaWdpdGFsIENvcnAKLSAqCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKLQotI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgotI2luY2x1ZGUg
PHd4L3d4Lmg+Ci0jaW5jbHVkZSA8d3gvZGF0ZXRpbWUuaD4KLSNpbmNsdWRlIDx3eC9kaXIuaD4K
LSNpbmNsdWRlIDx3eC9keW5saWIuaD4KLSNpbmNsdWRlIDx3eC9maWxlLmg+Ci0jaW5jbHVkZSA8
d3gvZmlsZWZuLmg+Ci0jaW5jbHVkZSA8d3gvZmlsZW5hbWUuaD4KLQotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPENvcmVGb3Vu
ZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIC8vIE5PVEU6IFRo
aXMgaXMgY2FsbGVkIGZvciBkaXJlY3RvcnkgcGF0aHMgdG9vIHNvIHdlIG5lZWQgdG8gY2hlY2sg
Ym90aC4KLSAgICByZXR1cm4gd3hGaWxlTmFtZTo6RmlsZUV4aXN0cyhwYXRoKSB8fCB3eEZpbGVO
YW1lOjpEaXJFeGlzdHMocGF0aCk7Ci19Ci0KLWJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgpCi17Ci0gICAgcmV0dXJuIHd4UmVtb3ZlRmlsZShwYXRoKTsKLX0KLQotYm9vbCBkZWxl
dGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHd4Rmls
ZU5hbWU6OlJtZGlyKHBhdGgpOwotfQotCi1ib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYg
cGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQotewotICAgIHd4VUxvbmdMb25nIHNpemUgPSB3
eEZpbGVOYW1lOjpHZXRTaXplKHBhdGgpOwotICAgIGlmICh3eEludmFsaWRTaXplICE9IHNpemUp
IHsKLSAgICAgICAgLy8gVE9ETzogd2h5IGlzIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplIHNpZ25l
ZD8KLSAgICAgICAgcmVzdWx0U2l6ZSA9IChsb25nIGxvbmcpc2l6ZS5HZXRWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIHQpCi17
Ci0gICAgaWYgKHd4RmlsZUV4aXN0cyhwYXRoKSkgewotICAgICAgICB0ID0gd3hGaWxlTmFtZShw
YXRoKS5HZXRNb2RpZmljYXRpb25UaW1lKCkuR2V0VGlja3MoKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRGaWxlTWV0YWRhdGEo
Y29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIGlmICgh
d3hGaWxlRXhpc3RzKHBhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgd3hGaWxlTmFt
ZSBmaWxlTmFtZShwYXRoKTsKLSAgICBtZXRhZGF0YS5sZW5ndGggPSBmaWxlTmFtZS5HZXRTaXpl
KCkuR2V0VmFsdWUoKTsKLSAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gZmlsZU5hbWUu
R2V0TW9kaWZpY2F0aW9uVGltZSgpLkdldFRpY2tzKCk7Ci0gICAgbWV0YWRhdGEudHlwZSA9IGZp
bGVOYW1lLklzRGlyKCkgPyBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3RvcnkgOiBGaWxlTWV0YWRh
dGE6OlR5cGVGaWxlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIG1ha2VBbGxEaXJlY3Rv
cmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHd4RmlsZU5hbWU6Ok1rZGly
KHBhdGgsIDA3NzcsIHd4UEFUSF9NS0RJUl9GVUxMKTsKLX0KLQotU3RyaW5nIHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50
KQotewotICAgIHJldHVybiB3eEZpbGVOYW1lKHBhdGgsIGNvbXBvbmVudCkuR2V0RnVsbFBhdGgo
KTsKLX0KLQotU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKLXsKLSAgICByZXR1cm4gd3hGaWxl
TmFtZTo6R2V0SG9tZURpcigpOwotfQotCi1TdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0
cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gd3hGaWxlTmFtZShwYXRoKS5HZXRGdWxsTmFtZSgp
OwotfQotCi1TdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAg
cmV0dXJuIHd4RmlsZU5hbWUocGF0aCkuR2V0UGF0aCgpOwotfQotCi1TdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxl
KQotewotICAgIHd4U3RyaW5nIHNGaWxlbmFtZSA9IHd4RmlsZU5hbWU6OkNyZWF0ZVRlbXBGaWxl
TmFtZShwcmVmaXgpOwotICAgIHd4RmlsZSogdGVtcCA9IG5ldyB3eEZpbGUoKTsKLSAgICB0ZW1w
LT5PcGVuKHNGaWxlbmFtZS5jX3N0cigpLCB3eEZpbGU6OnJlYWRfd3JpdGUpOwotICAgIGhhbmRs
ZSA9IHRlbXA7Ci0gICAgcmV0dXJuIFN0cmluZyhzRmlsZW5hbWUpOwotfQotICAgIAotUGxhdGZv
cm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1v
ZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLSAgICAKLXZv
aWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQotewotICAgIGlmIChoYW5k
bGUgJiYgaGFuZGxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAgIGRlbGV0
ZSBoYW5kbGU7Ci19Ci0KLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlmIChoYW5kbGUpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx3eEZpbGUqPihoYW5kbGUpLT5Xcml0ZShkYXRhLCBsZW5n
dGgpOwotICAgIHJldHVybiAtMTsKLX0KLQotYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1
bGUgbW9kKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIDo6RnJlZUxpYnJhcnkobW9k
KTsKLSNlbGlmIE9TKERBUldJTikKLSAgICBDRlJlbGVhc2UobW9kKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSNlbHNlCi0gICAgd3hBU1NFUlQobW9kKTsKLSAgICBkZWxldGUgbW9kOwotICAgIHJldHVy
biB0cnVlOwotI2VuZGlmCi19Ci0KLQotY2xhc3Mgd3hEaXJUcmF2ZXJzZXJOb25SZWN1cnNpdmUg
OiBwdWJsaWMgd3hEaXJUcmF2ZXJzZXIgewotcHVibGljOgotICAgIHd4RGlyVHJhdmVyc2VyTm9u
UmVjdXJzaXZlKHd4U3RyaW5nIGJhc2VQYXRoLCB3eEFycmF5U3RyaW5nJiBmaWxlcykgOiBtX2Jh
c2VQYXRoKGJhc2VQYXRoKSwgbV9maWxlcyhmaWxlcykgeyB9Ci0KLSAgICB2aXJ0dWFsIHd4RGly
VHJhdmVyc2VSZXN1bHQgT25GaWxlKGNvbnN0IHd4U3RyaW5nJiBmaWxlbmFtZSkKLSAgICB7Ci0g
ICAgICAgIHd4RmlsZU5hbWUgYWZpbGUoZmlsZW5hbWUpOwotICAgICAgICBhZmlsZS5NYWtlUmVs
YXRpdmVUbyhtX2Jhc2VQYXRoKTsKLSAgICAgICAgaWYgKGFmaWxlLkdldEZ1bGxQYXRoKCkuRmlu
ZChhZmlsZS5HZXRQYXRoU2VwYXJhdG9yKCkpID09IHd4Tk9UX0ZPVU5EKQotICAgICAgICAgICAg
bV9maWxlcy5wdXNoX2JhY2soZmlsZW5hbWUpOwotCi0gICAgICAgIHJldHVybiB3eERJUl9DT05U
SU5VRTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHd4RGlyVHJhdmVyc2VSZXN1bHQgT25EaXIoY29u
c3Qgd3hTdHJpbmcmIGRpcm5hbWUpCi0gICAgewotICAgICAgICB3eEZpbGVOYW1lIGRpcmZpbGUo
ZGlybmFtZSk7Ci0gICAgICAgIGRpcmZpbGUuTWFrZVJlbGF0aXZlVG8obV9iYXNlUGF0aCk7Ci0g
ICAgICAgIGlmIChkaXJmaWxlLkdldEZ1bGxQYXRoKCkuRmluZChkaXJmaWxlLkdldFBhdGhTZXBh
cmF0b3IoKSkgPT0gd3hOT1RfRk9VTkQpCi0gICAgICAgICAgICBtX2ZpbGVzLnB1c2hfYmFjayhk
aXJuYW1lKTsKLQotICAgICAgICByZXR1cm4gd3hESVJfQ09OVElOVUU7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIHd4U3RyaW5nIG1fYmFzZVBhdGg7Ci0gICAgd3hBcnJheVN0cmluZyYgbV9maWxl
czsKLQotICAgIERFQ0xBUkVfTk9fQ09QWV9DTEFTUyh3eERpclRyYXZlcnNlck5vblJlY3Vyc2l2
ZSkKLX07Ci0KLVZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGZpbHRlcikKLXsKLSAgICB3eEFycmF5U3RyaW5nICAgZmlsZV9wYXRo
czsKLSAgICAvLyB3eERpcjo6R2V0QWxsRmlsZXMgcmVjdXJzZXMgYW5kIGZvciBwbGF0Zm9ybXMg
bGlrZSBNYWMgd2hlcmUKLSAgICAvLyBhIC5wbHVnaW4gb3IgLmJ1bmRsZSBjYW4gYmUgYSBkaXIg
d3ggd2lsbCByZWN1cnNlIGludG8gdGhlIGJ1bmRsZQotICAgIC8vIGFuZCBsaXN0IHRoZSBmaWxl
cyByYXRoZXIgdGhhbiBqdXN0IHJldHVybmluZyB0aGUgcGx1Z2luIG5hbWUsIHNvCi0gICAgLy8g
d2Ugd3JpdGUgYSBzcGVjaWFsIHRyYXZlcnNlciB0aGF0IHdvcmtzIGFyb3VuZCB0aGF0IGlzc3Vl
LgotICAgIHd4RGlyVHJhdmVyc2VyTm9uUmVjdXJzaXZlIHRyYXZlcnNlcihwYXRoLCBmaWxlX3Bh
dGhzKTsKLSAgICAKLSAgICB3eERpciBkaXIocGF0aCk7Ci0gICAgZGlyLlRyYXZlcnNlKHRyYXZl
cnNlciwgX1QoIiIpLCB3eERJUl9GSUxFUyB8IHd4RElSX0RJUlMpOwotCi0gICAgVmVjdG9yPFN0
cmluZz4gZW50cmllczsKLSAgICAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVfcGF0aHMu
R2V0Q291bnQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZV9wYXRo
c1tpXSk7Ci0gICAgfSAgIAotICAgIAotICAgIHJldHVybiBlbnRyaWVzOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9LZXlFdmVudFdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9LZXlFdmVudFdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0tleWJvYXJkRXZlbnRXeC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9LZXlib2FyZEV2ZW50V3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5NjNiNTYzNTBjZWE3NWM4NmE0YmJhOGExZGUyMzU3YWQwOTg4NjBhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L0tleWJvYXJkRXZlbnRXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLQotI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVz
LmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+
Ci0jaW5jbHVkZSA8d3gvZXZlbnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
U3RyaW5nIGtleUlkZW50aWZpZXJGb3JXeEtleUNvZGUoaW50IGtleUNvZGUpCi17Ci0gICAgc3dp
dGNoIChrZXlDb2RlKSB7Ci0gICAgICAgIGNhc2UgV1hLX01FTlU6Ci0gICAgICAgIGNhc2UgV1hL
X0FMVDoKLSAgICAgICAgICAgIHJldHVybiAiQWx0IjsKLSAgICAgICAgY2FzZSBXWEtfQ0xFQVI6
Ci0gICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsKLSAgICAgICAgY2FzZSBXWEtfRE9XTjoKLSAg
ICAgICAgICAgIHJldHVybiAiRG93biI7Ci0gICAgICAgIGNhc2UgV1hLX0VORDoKLSAgICAgICAg
ICAgIHJldHVybiAiRW5kIjsKLSAgICAgICAgY2FzZSBXWEtfUkVUVVJOOgotICAgICAgICAgICAg
cmV0dXJuICJFbnRlciI7Ci0gICAgICAgIGNhc2UgV1hLX0VYRUNVVEU6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkV4ZWN1dGUiOwotICAgICAgICBjYXNlIFdYS19GMToKLSAgICAgICAgICAgIHJldHVy
biAiRjEiOwotICAgICAgICBjYXNlIFdYS19GMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwot
ICAgICAgICBjYXNlIFdYS19GMzoKLSAgICAgICAgICAgIHJldHVybiAiRjMiOwotICAgICAgICBj
YXNlIFdYS19GNDoKLSAgICAgICAgICAgIHJldHVybiAiRjQiOwotICAgICAgICBjYXNlIFdYS19G
NToKLSAgICAgICAgICAgIHJldHVybiAiRjUiOwotICAgICAgICBjYXNlIFdYS19GNjoKLSAgICAg
ICAgICAgIHJldHVybiAiRjYiOwotICAgICAgICBjYXNlIFdYS19GNzoKLSAgICAgICAgICAgIHJl
dHVybiAiRjciOwotICAgICAgICBjYXNlIFdYS19GODoKLSAgICAgICAgICAgIHJldHVybiAiRjgi
OwotICAgICAgICBjYXNlIFdYS19GOToKLSAgICAgICAgICAgIHJldHVybiAiRjkiOwotICAgICAg
ICBjYXNlIFdYS19GMTA6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMCI7Ci0gICAgICAgIGNhc2Ug
V1hLX0YxMToKLSAgICAgICAgICAgIHJldHVybiAiRjExIjsKLSAgICAgICAgY2FzZSBXWEtfRjEy
OgotICAgICAgICAgICAgcmV0dXJuICJGMTIiOwotICAgICAgICBjYXNlIFdYS19GMTM6Ci0gICAg
ICAgICAgICByZXR1cm4gIkYxMyI7Ci0gICAgICAgIGNhc2UgV1hLX0YxNDoKLSAgICAgICAgICAg
IHJldHVybiAiRjE0IjsKLSAgICAgICAgY2FzZSBXWEtfRjE1OgotICAgICAgICAgICAgcmV0dXJu
ICJGMTUiOwotICAgICAgICBjYXNlIFdYS19GMTY6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNiI7
Ci0gICAgICAgIGNhc2UgV1hLX0YxNzoKLSAgICAgICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAg
ICAgY2FzZSBXWEtfRjE4OgotICAgICAgICAgICAgcmV0dXJuICJGMTgiOwotICAgICAgICBjYXNl
IFdYS19GMTk6Ci0gICAgICAgICAgICByZXR1cm4gIkYxOSI7Ci0gICAgICAgIGNhc2UgV1hLX0Yy
MDoKLSAgICAgICAgICAgIHJldHVybiAiRjIwIjsKLSAgICAgICAgY2FzZSBXWEtfRjIxOgotICAg
ICAgICAgICAgcmV0dXJuICJGMjEiOwotICAgICAgICBjYXNlIFdYS19GMjI6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYyMiI7Ci0gICAgICAgIGNhc2UgV1hLX0YyMzoKLSAgICAgICAgICAgIHJldHVy
biAiRjIzIjsKLSAgICAgICAgY2FzZSBXWEtfRjI0OgotICAgICAgICAgICAgcmV0dXJuICJGMjQi
OwotICAgICAgICBjYXNlIFdYS19IRUxQOgotICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKLSAg
ICAgICAgY2FzZSBXWEtfSE9NRToKLSAgICAgICAgICAgIHJldHVybiAiSG9tZSI7Ci0gICAgICAg
IGNhc2UgV1hLX0lOU0VSVDoKLSAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICAgICAg
Y2FzZSBXWEtfTEVGVDoKLSAgICAgICAgICAgIHJldHVybiAiTGVmdCI7Ci0gICAgICAgIGNhc2Ug
V1hLX1BBR0VET1dOOgotICAgICAgICAgICAgcmV0dXJuICJQYWdlRG93biI7Ci0gICAgICAgIGNh
c2UgV1hLX1BBR0VVUDoKLSAgICAgICAgICAgIHJldHVybiAiUGFnZVVwIjsKLSAgICAgICAgY2Fz
ZSBXWEtfUEFVU0U6Ci0gICAgICAgICAgICByZXR1cm4gIlBhdXNlIjsKLSAgICAgICAgY2FzZSBX
WEtfUFJJTlQ6Ci0gICAgICAgICAgICByZXR1cm4gIlByaW50U2NyZWVuIjsKLSAgICAgICAgY2Fz
ZSBXWEtfUklHSFQ6Ci0gICAgICAgICAgICByZXR1cm4gIlJpZ2h0IjsKLSAgICAgICAgY2FzZSBX
WEtfU0VMRUNUOgotICAgICAgICAgICAgcmV0dXJuICJTZWxlY3QiOwotICAgICAgICBjYXNlIFdY
S19VUDoKLSAgICAgICAgICAgIHJldHVybiAiVXAiOwotICAgICAgICAgICAgLy8gU3RhbmRhcmQg
c2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDA3Ri4KLSAgICAgICAgY2FzZSBXWEtfREVMRVRFOgot
ICAgICAgICAgICAgcmV0dXJuICJVKzAwN0YiOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b3VwcGVyKGtleUNvZGUpKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBp
bnQga2V5Y29kZSkKLXsKLSAgICBzd2l0Y2ggKGtleWNvZGUpIHsKLSAgICAgICAgLyogRklYTUU6
IE5lZWQgdG8gc3VwcGx5IGEgYm9vbCBpbiB0aGlzIGZ1bmMsIHRvIGRldGVybWluZSB3aGV0ZXIg
dGhlIGV2ZW50IGNvbWVzIGZyb20gdGhlIGtleXBhZAotICAgICAgICAqLwotICAgICAgICBjYXNl
IFdYS19OVU1QQUQwOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1l
cmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNlIFdYS19OVU1QQUQxOgotICAgICAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQotICAgICAgICBj
YXNlIFdYS19OVU1QQUQyOgotICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQyOyAvLyAoNjIp
IE51bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRDM6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQotICAg
ICAgICBjYXNlIFdYS19OVU1QQUQ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8v
ICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBXWEtfTlVNUEFENToKLSAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkK
LSAgICAgICAgY2FzZSBXWEtfTlVNUEFENjoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2
OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRDc6
Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3
IGtleQotICAgICAgICBjYXNlIFdYS19OVU1QQUQ4OgotICAgICAgICAgICAgcmV0dXJuIFZLX05V
TVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBXWEtfTlVN
UEFEOToKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5
cGFkIDkga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRF9NVUxUSVBMWToKLSAgICAgICAgICAg
IHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKLSAgICAgICAgY2FzZSBX
WEtfTlVNUEFEX0FERDoKLSAgICAgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2QikgQWRkIGtl
eQotICAgICAgICBjYXNlIFdYS19OVU1QQURfU1VCVFJBQ1Q6Ci0gICAgICAgICAgICByZXR1cm4g
VktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBB
RF9ERUNJTUFMOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1h
bCBrZXkKLSAgICAgICAgY2FzZSBXWEtfRElWSURFOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RJ
VklERTsgLy8gKDZGKSBEaXZpZGUga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRF9TRVBBUkFU
T1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfU0VQQVJBVE9SOwotICAgICAgICAKLSAgICAgICAg
Y2FzZSBXWEtfQkFDSzoKLSAgICAgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tT
UEFDRSBrZXkKLSAgICAgICAgY2FzZSBXWEtfVEFCOgotICAgICAgICBjYXNlIFdYS19OVU1QQURf
VEFCOgotICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5Ci0gICAgICAg
IGNhc2UgV1hLX0NMRUFSOgotICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOyAvLyAoMEMpIENM
RUFSIGtleQotICAgICAgICBjYXNlIFdYS19OVU1QQURfRU5URVI6Ci0gICAgICAgIGNhc2UgV1hL
X1JFVFVSTjoKLSAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4ga2V5
Ci0gICAgICAgIGNhc2UgV1hLX1NISUZUOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NISUZUOyAv
LyAoMTApIFNISUZUIGtleQotICAgICAgICBjYXNlIFdYS19DT05UUk9MOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0NPTlRST0w7IC8vICgxMSkgQ1RSTCBrZXkKLSAgICAgICAgY2FzZSBXWEtfTUVO
VToKLSAgICAgICAgY2FzZSBXWEtfQUxUOgotICAgICAgICAgICAgcmV0dXJuIFZLX01FTlU7IC8v
ICgxMikgQUxUIGtleQotCi0gICAgICAgIGNhc2UgV1hLX1BBVVNFOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBBVVNFIGtleQotICAgICAgICBjYXNlIFdYS19DQVBJVEFM
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0NBUElUQUw7IC8vICgxNCkgQ0FQUyBMT0NLIGtleQot
ICAgICAgICAvKgotICAgICAgICBjYXNlIFdYS19LYW5hX0xvY2s6Ci0gICAgICAgIGNhc2UgV1hL
X0thbmFfU2hpZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfS0FOQTsgLy8gKDE1KSBJbnB1dCBN
ZXRob2QgRWRpdG9yIChJTUUpIEthbmEgbW9kZQotICAgICAgICBjYXNlIFdYS19IYW5ndWw6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfSEFOR1VMOyAvLyBWS19IQU5HVUwgKDE1KSBJTUUgSGFuZ3Vs
IG1vZGUKLSAgICAgICAgICAgIC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKLSAgICAg
ICAgICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKLSAgICAgICAgY2FzZSBXWEtf
SGFuZ3VsX0hhbmphOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkpBOyAvLyAoMTkpIElNRSBI
YW5qYSBtb2RlCi0gICAgICAgIGNhc2UgV1hLX0thbmppOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0tBTkpJOyAvLyAoMTkpIElNRSBLYW5qaSBtb2RlCi0gICAgICAgICovCi0gICAgICAgIGNhc2Ug
V1hLX0VTQ0FQRToKLSAgICAgICAgICAgIHJldHVybiBWS19FU0NBUEU7IC8vICgxQikgRVNDIGtl
eQotICAgICAgICAgICAgLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0Ci0gICAgICAgICAg
ICAvLyBWS19OT05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKLSAgICAgICAgICAgIC8vIFZL
X0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQKLSAgICAgICAgICAgIC8vIFZLX01PREVDSEFOR0UgKDFG
KSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAotICAgICAgICBjYXNlIFdYS19OVU1QQURfU1BBQ0U6
Ci0gICAgICAgIGNhc2UgV1hLX1NQQUNFOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAv
LyAoMjApIFNQQUNFQkFSCi0gICAgICAgIGNhc2UgV1hLX05VTVBBRF9QQUdFVVA6Ci0gICAgICAg
IGNhc2UgV1hLX1BBR0VVUDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQ
QUdFIFVQIGtleQotICAgICAgICBjYXNlIFdYS19OVU1QQURfUEFHRURPV046Ci0gICAgICAgIGNh
c2UgV1hLX1BBR0VET1dOOgotICAgICAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFH
RSBET1dOIGtleQotICAgICAgICBjYXNlIFdYS19OVU1QQURfRU5EOgotICAgICAgICBjYXNlIFdY
S19FTkQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKLSAgICAg
ICAgY2FzZSBXWEtfTlVNUEFEX0hPTUU6Ci0gICAgICAgIGNhc2UgV1hLX0hPTUU6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQotICAgICAgICBjYXNlIFdYS19O
VU1QQURfTEVGVDoKLSAgICAgICAgY2FzZSBXWEtfTEVGVDoKLSAgICAgICAgICAgIHJldHVybiBW
S19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRF9V
UDoKLSAgICAgICAgY2FzZSBXWEtfVVA6Ci0gICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgy
NikgVVAgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRF9SSUdIVDoKLSAgICAgICAg
Y2FzZSBXWEtfUklHSFQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklH
SFQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgV1hLX05VTVBBRF9ET1dOOgotICAgICAgICBjYXNl
IFdYS19ET1dOOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJP
VyBrZXkKLSAgICAgICAgY2FzZSBXWEtfU0VMRUNUOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NF
TEVDVDsgLy8gKDI5KSBTRUxFQ1Qga2V5Ci0gICAgICAgIGNhc2UgV1hLX1BSSU5UOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1BSSU5UOyAvLyAoMkEpIFBSSU5UIGtleQotICAgICAgICBjYXNlIFdY
S19FWEVDVVRFOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7Ly8gKDJCKSBFWEVDVVRF
IGtleQotICAgICAgICBjYXNlIFdYS19TTkFQU0hPVDoKLSAgICAgICAgICAgICByZXR1cm4gVktf
U05BUFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVOIGtleQotICAgICAgICBjYXNlIFdYS19OVU1Q
QURfSU5TRVJUOgotICAgICAgICBjYXNlIFdYS19JTlNFUlQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKLSAgICAgICAgY2FzZSBXWEtfTlVNUEFEX0RFTEVU
RToKLSAgICAgICAgY2FzZSBXWEtfREVMRVRFOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVU
RTsgLy8gKDJFKSBERUwga2V5Ci0gICAgICAgIGNhc2UgV1hLX0hFTFA6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQotICAgICAgICBjYXNlICcwJzoKLSAgICAg
ICAgICAgIHJldHVybiBWS18wOyAgICAvLyAgKDMwKSAwKSBrZXkKLSAgICAgICAgY2FzZSAnMSc6
Ci0gICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQotICAgICAgICBjYXNl
ICcyJzoKLSAgICAgICAgICAgIHJldHVybiBWS18yOyAvLyAgKDMyKSAyICYga2V5Ci0gICAgICAg
IGNhc2UgJzMnOgotICAgICAgICAgICAgcmV0dXJuIFZLXzM7IC8vY2FzZSAnMyc6IGNhc2UgJyMn
OwotICAgICAgICBjYXNlICc0JzogIC8vICAoMzQpIDQga2V5ICckJzsKLSAgICAgICAgICAgIHJl
dHVybiBWS180OwotICAgICAgICBjYXNlICc1JzoKLSAgICAgICAgICAgIHJldHVybiBWS181OyAv
LyAgKDM1KSA1IGtleSAgJyUnCi0gICAgICAgIGNhc2UgJzYnOgotICAgICAgICAgICAgcmV0dXJu
IFZLXzY7IC8vICAoMzYpIDYga2V5ICAnXicKLSAgICAgICAgY2FzZSAnNyc6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYnCi0gICAgICAgIGNhc2UgJzgn
OgotICAgICAgICAgICAgcmV0dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAnKicKLSAgICAgICAg
Y2FzZSAnOSc6Ci0gICAgICAgICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkgJygnCi0g
ICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgcmV0dXJuIFZLX0E7IC8vICAoNDEpIEEga2V5
IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7Ci0gICAgICAgIGNhc2UgJ0InOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2InOiBjYXNlICdCJzog
cmV0dXJuIDB4NDI7Ci0gICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAgcmV0dXJuIFZLX0M7
IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0dXJuIDB4NDM7Ci0gICAgICAg
IGNhc2UgJ0QnOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2Ug
J2QnOiBjYXNlICdEJzogcmV0dXJuIDB4NDQ7Ci0gICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNhc2UgJ2UnOiBjYXNlICdFJzogcmV0dXJu
IDB4NDU7Ci0gICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAo
NDYpIEYga2V5IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7Ci0gICAgICAgIGNhc2Ug
J0cnOgotICAgICAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5IGNhc2UgJ2cnOiBj
YXNlICdHJzogcmV0dXJuIDB4NDc7Ci0gICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7
Ci0gICAgICAgIGNhc2UgJ0knOgotICAgICAgICAgICAgcmV0dXJuIFZLX0k7IC8vICAoNDkpIEkg
a2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7Ci0gICAgICAgIGNhc2UgJ0onOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNhc2UgJ2onOiBjYXNlICdK
JzogcmV0dXJuIDB4NEE7Ci0gICAgICAgIGNhc2UgJ0snOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0s7IC8vICAoNEIpIEsga2V5IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7Ci0gICAg
ICAgIGNhc2UgJ0wnOgotICAgICAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNh
c2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7Ci0gICAgICAgIGNhc2UgJ00nOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQpIE0ga2V5IGNhc2UgJ20nOiBjYXNlICdNJzogcmV0
dXJuIDB4NEQ7Ci0gICAgICAgIGNhc2UgJ04nOgotICAgICAgICAgICAgcmV0dXJuIFZLX047IC8v
ICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7Ci0gICAgICAgIGNh
c2UgJ08nOgotICAgICAgICAgICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28n
OiBjYXNlICdPJzogcmV0dXJuIDB4NEY7Ci0gICAgICAgIGNhc2UgJ1AnOgotICAgICAgICAgICAg
cmV0dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0dXJuIDB4
NTA7Ci0gICAgICAgIGNhc2UgJ1EnOgotICAgICAgICAgICAgcmV0dXJuIFZLX1E7IC8vICAoNTEp
IFEga2V5IGNhc2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7Ci0gICAgICAgIGNhc2UgJ1In
OgotICAgICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2UgJ3InOiBjYXNl
ICdSJzogcmV0dXJuIDB4NTI7Ci0gICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgcmV0dXJu
IFZLX1M7IC8vICAoNTMpIFMga2V5IGNhc2UgJ3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7Ci0g
ICAgICAgIGNhc2UgJ1QnOgotICAgICAgICAgICAgcmV0dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5
IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7Ci0gICAgICAgIGNhc2UgJ1UnOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzog
cmV0dXJuIDB4NTU7Ci0gICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgcmV0dXJuIFZLX1Y7
IC8vICAoNTYpIFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJuIDB4NTY7Ci0gICAgICAg
IGNhc2UgJ1cnOgotICAgICAgICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2Ug
J3cnOiBjYXNlICdXJzogcmV0dXJuIDB4NTc7Ci0gICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJu
IDB4NTg7Ci0gICAgICAgIGNhc2UgJ1knOgotICAgICAgICAgICAgcmV0dXJuIFZLX1k7IC8vICAo
NTkpIFkga2V5IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0dXJuIDB4NTk7Ci0gICAgICAgIGNhc2Ug
J1onOgotICAgICAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBj
YXNlICdaJzogcmV0dXJuIDB4NUE7Ci0gICAgICAgIGNhc2UgV1hLX1dJTkRPV1NfTEVGVDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19MV0lOOyAvLyAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jv
c29mdCBOYXR1cmFsIGtleWJvYXJkKQotCi0gICAgICAgIGNhc2UgV1hLX05VTUxPQ0s6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfTlVNTE9DSzsgLy8gKDkwKSBOVU0gTE9DSyBrZXkKLQotICAgICAg
ICBjYXNlIFdYS19TQ1JPTEw6Ci0gICAgICAgICAgICByZXR1cm4gVktfU0NST0xMOyAvLyAoOTEp
IFNDUk9MTCBMT0NLIGtleQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci19Ci0KLVBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50KHd4S2V5RXZlbnQmIGV2ZW50KQotewotICAgIGlmIChldmVudC5HZXRFdmVudFR5cGUoKSA9
PSB3eEVWVF9LRVlfVVApCi0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6OktleVVwOwot
ICAgIGVsc2UgaWYgKGV2ZW50LkdldEV2ZW50VHlwZSgpID09IHd4RVZUX0tFWV9ET1dOKQotICAg
ICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOwotICAgIGVsc2UgaWYgKGV2ZW50
LkdldEV2ZW50VHlwZSgpID09IHd4RVZUX0NIQVIpCi0gICAgICAgIG1fdHlwZSA9IFBsYXRmb3Jt
RXZlbnQ6OkNoYXI7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICBpZiAobV90eXBlICE9IFBsYXRmb3JtRXZlbnQ6OkNoYXIpCi0gICAgICAgIG1fa2V5SWRlbnRp
ZmllciA9IGtleUlkZW50aWZpZXJGb3JXeEtleUNvZGUoZXZlbnQuR2V0S2V5Q29kZSgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy9FTlRFUiBpcyBhbiBlZGl0aW5nIGNvbW1hbmQgcHJvY2Vzc2Vk
IGFzIGEgY2hhciAob25seSBFbnRlciBhbmQgVGFiIGFyZSkKLSAgICAgICAgLy91bmZvcnR1bmF0
ZWx5IHRoZSB1bmljb2RlIGtleSBmb3IgbnVtcGFkX2VudGVyICgzNzApIGlzIE5PVCB3aGF0IHdl
IHdhbnQgaGVyZSAoMTMpCi0gICAgICAgIC8vVGhlIHVuaWNvZGUgdmFsdWVzIGZvciBub3JtYWwg
ZW50ZXIgYW5kIHRhYiBhcmUgdGhlIHNhbWUgYXMgdGhlIEFTQ0lJIHZhbHVlcywgdGh1cyBvawot
ICAgICAgICAvL05vdGUgdGhhdCBJIHRoaW5rIHRoaXMgYSB3eCBidWcsIGFzIHRoZSBDaGFyYWN0
ZXIgQ29kZSBpcyBhY3R1YWxseSAxMyB3aGVuCi0gICAgICAgIC8vbnVtcGFkX2VudGVyIGlzIGEg
Q0hBUiBldmVudC4KLSAgICAgICAgaWYgKGV2ZW50LkdldEtleUNvZGUoKSA9PSAxMyAmJiBldmVu
dC5HZXRVbmljb2RlS2V5KCkgPT0gd3hDaGFyKDM3MCkpCi0gICAgICAgICAgICBtX3RleHQgPSAi
XHIiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RleHQgPSB3eFN0cmluZyhldmVudC5H
ZXRVbmljb2RlS2V5KCkpOwotICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gbV90ZXh0OwotICAg
IH0KLSAgICBtX2F1dG9SZXBlYXQgPSBmYWxzZTsgLy8gRklYTUU6IG5vdCBjb3JyZWN0LgotICAg
IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVu
dC5HZXRLZXlDb2RlKCkpOwotICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgPSBldmVudC5HZXRL
ZXlDb2RlKCk7Ci0gICAgbV9pc0tleXBhZCA9IChldmVudC5HZXRLZXlDb2RlKCkgPj0gV1hLX05V
TVBBRF9TUEFDRSkgJiYgKGV2ZW50LkdldEtleUNvZGUoKSA8PSBXWEtfTlVNUEFEX0RJVklERSk7
Ci0gICAgCi0gICAgbV9tb2RpZmllcnMgPSAwOwotICAgIGlmIChldmVudC5TaGlmdERvd24oKSkK
LSAgICAgICAgbV9tb2RpZmllcnMgfD0gU2hpZnRLZXk7Ci0gICAgCi0gICAgaWYgKGV2ZW50LkNt
ZERvd24oKSkKLSAgICAgICAgbV9tb2RpZmllcnMgfD0gQ3RybEtleTsKLSAgICAKLSAgICBpZiAo
ZXZlbnQuQWx0RG93bigpKQotICAgICAgICBtX21vZGlmaWVycyB8PSBBbHRLZXk7Ci0gICAgCi0g
ICAgaWYgKGV2ZW50Lk1ldGFEb3duKCkpCi0gICAgICAgIG1fbW9kaWZpZXJzIHw9IE1ldGFLZXk7
Ci0gICAgCi0gICAgbV90aW1lc3RhbXAgPSBXVEY6OmN1cnJlbnRUaW1lKCk7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBl
LCBib29sKQotewotICAgIC8vIENhbiBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBS
YXdLZXlEb3duIG9yIENoYXIsIGFzIHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZl
cnNpb25zLgotICAgIEFTU0VSVChtX3R5cGUgPT0gUGxhdGZvcm1FdmVudDo6S2V5RG93bik7Ci0g
ICAgbV90eXBlID0gdHlwZTsKLSAgICBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlE
b3duKSB7Ci0gICAgICAgIG1fdGV4dCA9IFN0cmluZygpOwotICAgICAgICBtX3VubW9kaWZpZWRU
ZXh0ID0gU3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9rZXlJZGVudGlmaWVyID0g
U3RyaW5nKCk7Ci0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKLSAgICB9Ci19
Ci0KLWJvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCi17
Ci0gICAgcmV0dXJuIHd4R2V0S2V5U3RhdGUoV1hLX0NBUElUQUwpOwotfQotCi12b2lkIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6Z2V0Q3VycmVudE1vZGlmaWVyU3RhdGUoYm9vbCYgc2hpZnRLZXks
IGJvb2wmIGN0cmxLZXksIGJvb2wmIGFsdEtleSwgYm9vbCYgbWV0YUtleSkKLXsKLSAgICBzaGlm
dEtleSA9IHd4R2V0S2V5U3RhdGUoV1hLX1NISUZUKTsKLSAgICBjdHJsS2V5ID0gd3hHZXRLZXlT
dGF0ZShXWEtfQ09OVFJPTCk7Ci0gICAgYWx0S2V5ID0gd3hHZXRLZXlTdGF0ZShXWEtfQUxUKTsK
LSAgICBtZXRhS2V5ID0gZmFsc2U7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvTGFuZ3VhZ2VXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9MYW5ndWFnZVd4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZmM2YzOWVl
MmUyNmUyNThmM2MyNzYwYThiZjYzZmZkNTllODg1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9MYW5ndWFn
ZVd4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYW5ndWFnZS5oIgotCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU3RyaW5nIHBsYXRmb3JtTGFuZ3VhZ2UoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1WZWN0b3I8
U3RyaW5nPiBwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKLSAg
ICByZXR1cm4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTG9jYWxEQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvTG9jYWxEQy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjcwYzVjY2M3
MWE1ZmY2YWQ1YjhhMjllNTYwOTU0NDMzOTVjYTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0xvY2FsREMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBMb2NhbERDX2gKLSNkZWZpbmUgTG9jYWxEQ19oCi0KLSNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgot
Ci0jaW5jbHVkZSA8d3gvYml0bWFwLmg+Ci0jaW5jbHVkZSA8d3gvZGMuaD4KLSNpbmNsdWRlIDx3
eC9kY21lbW9yeS5oPgotI2luY2x1ZGUgPHd4L3Jhd2JtcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIExvY2FsREMgewotCi1wdWJsaWM6Ci0gICAgTG9jYWxEQyh3eERDKiBob3N0
LCBjb25zdCBJbnRSZWN0JiByLCBib29sIHRyYW5zcGFyZW50ID0gZmFsc2UpCi0gICAgewotI2lm
bmRlZiBfX1dYTUFDX18KLSAgICAgICAgbV9ob3N0ID0gaG9zdDsKLSAgICAgICAgaW50IHdpZHRo
ID0gci53aWR0aCgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gci5oZWlnaHQoKTsKLSAgICAgICAg
Ly8gb24gTVNXLCBzb21lIGNvbnRyb2xzIGxpa2Ugc2Nyb2xsYmFycyBkbyBub3QgYWx3YXlzIGRy
YXcgcHJvcGVybHkgd2hlbgotICAgICAgICAvLyB0aGUgYml0bWFwIGlzIHRyYW5zcGFyZW50LiBI
b3dldmVyLCB0aGV5IGRyYXcgaW50byBhbGwgcGl4ZWxzIHNvIHRoaXMgaXMKLSAgICAgICAgLy8g
bm90IG5lZWRlZC4gU28gb25seSBtYWtlIHRoZSBiaXRtYXAgdHJhbnNwYXJlbnQgd2hlbiBuZWVk
ZWQuCi0gICAgICAgIGludCBkZXB0aCA9IDI0OwotICAgICAgICBpZiAodHJhbnNwYXJlbnQpCi0g
ICAgICAgICAgICBkZXB0aCA9IDMyOwotICAgICAgICBtX2JpdG1hcCA9IG5ldyB3eEJpdG1hcCh3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Ci0gICAgICAgIC8vIHdlIG5lZWQgdGhlIHd4QWxwaGFQaXhl
bERhdGEgY29kZSB0byBiZSBpbiBpdHMgb3duIHNjb3BlIHNvIHRoYXQgdGhlCi0gICAgICAgIC8v
IHBpeERhdGEgaXMgZGVsZXRlZCBiZWZvcmUgd2UgYXNzaWduIHRoZSBiaXRtYXAgdG8gdGhlIHd4
TWVtb3J5REMsCi0gICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGEgY29weS4KLSAgICAgICAg
aWYgKHRyYW5zcGFyZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICB3eEFscGhhUGl4ZWxEYXRh
IHBpeERhdGEoKm1fYml0bWFwLCB3eFBvaW50KDAsMCksIHd4U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgICAgICAgICBBU1NFUlQocGl4RGF0YSk7Ci0gICAgICAgICAgICBpZiAocGl4RGF0YSkg
ewotICAgICAgICAgICAgICAgIHd4QWxwaGFQaXhlbERhdGE6Okl0ZXJhdG9yIHAocGl4RGF0YSk7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeT0wOyB5PGhlaWdodDsgeSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHd4QWxwaGFQaXhlbERhdGE6Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeD0wOyB4PHdpZHRoOyB4KyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHAuQWxwaGEoKSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAr
K3A7IAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHAgPSByb3dT
dGFydDsKLSAgICAgICAgICAgICAgICAgICAgcC5PZmZzZXRZKHBpeERhdGEsIDEpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQg
PSBuZXcgd3hNZW1vcnlEQygqbV9iaXRtYXApOwotICAgICAgICBtX2NvbnRleHQtPlNldERldmlj
ZU9yaWdpbigtci54KCksIC1yLnkoKSk7Ci0gICAgICAgIG1fcmVjdCA9IHI7Ci0jZWxzZQotICAg
ICAgICBtX2NvbnRleHQgPSBob3N0OwotI2VuZGlmCi0gICAgfQotCi0gICAgd3hEQyogY29udGV4
dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgfkxvY2FsREMoKQotICAgIHsKLSNpZm5k
ZWYgX19XWE1BQ19fCi0gICAgICAgIGRlbGV0ZSBtX2NvbnRleHQ7Ci0gICAgICAgIG1faG9zdC0+
RHJhd0JpdG1hcCgqbV9iaXRtYXAsIG1fcmVjdC54KCksIG1fcmVjdC55KCkpOwotICAgICAgICBk
ZWxldGUgbV9iaXRtYXA7Ci0jZW5kaWYKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgd3hEQyogbV9o
b3N0OwotICAgIHd4REMqIG1fY29udGV4dDsKLSAgICB3eEJpdG1hcCogbV9iaXRtYXA7Ci0gICAg
SW50UmVjdCBtX3JlY3Q7Ci0gICAgICAgICAgICAKLX07Ci0KLX0KLQotI2VuZGlmIC8vIExvY2Fs
RENfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTG9jYWxpemVkU3Ry
aW5nc1d4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0xvY2FsaXplZFN0cmluZ3NX
eC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YzIxNjk4N2Q1OWRlYmQ3ZmVm
YmIyZjZjZmI1MDdiNWRiZTExMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTG9jYWxpemVkU3RyaW5nc1d4
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgS2V2aW4gT2xsaXZpZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0KLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0cmluZyBsb2NhbGl6ZWRTdHJpbmcoY29uc3QgY2hh
cioga2V5KQotewotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGtleSwgc3RybGVuKGtleSkp
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Mb2dnaW5n
V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTG9nZ2luZ1d4LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0MzI1OTU3YTU5ZjIyYjlmNTg3MGY4MTBkYjc1ZDlm
OWYzYTk4MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Mb2dnaW5nV3guY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8
a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbml0aWFsaXplTG9nZ2luZy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2lm
ICFMT0dfRElTQUJMRUQKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNs
dWRlIDx3eC9kZWZzLmg+Ci0jaW5jbHVkZSA8d3gvdXRpbHMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIGluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCi17Ci0g
ICAgc3RhdGljIGJvb2wgaGF2ZUluaXRpYWxpemVkTG9nZ2luZ0NoYW5uZWxzID0gZmFsc2U7Ci0g
ICAgaWYgKGhhdmVJbml0aWFsaXplZExvZ2dpbmdDaGFubmVscykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaGF2ZUluaXRpYWxpemVkTG9nZ2luZ0NoYW5uZWxzID0gdHJ1ZTsKLQotICAgIHd4U3Ry
aW5nIGxvZ2dpbmdFbnY7Ci0gICAgd3hHZXRFbnYod3hUKCJXWF9XRUJLSVRfTE9HIiksICZsb2dn
aW5nRW52KTsKLSAgICBpZiAobG9nZ2luZ0VudiA9PSB3eEVtcHR5U3RyaW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTdHJpbmcgd2tMb2dnaW5nRW52ID0gbG9nZ2luZ0VudjsKLSAgICBWZWN0
b3I8U3RyaW5nPiBsb2dzOwotICAgIAotICAgIHdrTG9nZ2luZ0Vudi5zcGxpdCgiLCIsIGxvZ3Mp
OwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbG9ncy5zaXplKCk7ICsraSkgewot
ICAgICAgICBXVEZMb2dDaGFubmVsKiBjaGFubmVsID0gZ2V0Q2hhbm5lbEZyb21OYW1lKGxvZ3Nb
aV0pOwotICAgICAgICAKLSAgICAgICAgaWYgKGNoYW5uZWwpCi0gICAgICAgICAgICBjaGFubmVs
LT5zdGF0ZSA9IFdURkxvZ0NoYW5uZWxPbjsKLSAgICB9Ci19Ci0KLX0KLQotI2VuZGlmIC8vICFM
T0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L01pbWVU
eXBlUmVnaXN0cnlXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9NaW1lVHlwZVJl
Z2lzdHJ5V3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGE4MTVlYjc3Mjdk
NTA2Y2JjYjc1ZWVkZGUzYmRkODk5ZjY0MmMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L01pbWVUeXBlUmVn
aXN0cnlXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBFeHRlbnNpb25NYXAgewot
ICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbjsKLSAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKLX07
Ci1zdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKLSAgICB7ICJi
bXAiLCAiaW1hZ2UvYm1wIiB9LAotICAgIHsgImNzcyIsICJ0ZXh0L2NzcyIgfSwKLSAgICB7ICJn
aWYiLCAiaW1hZ2UvZ2lmIiB9LAotICAgIHsgImh0bSIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAi
aHRtbCIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwgICAK
LSAgICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWci
IH0sCi0gICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBk
ZiIsICJhcHBsaWNhdGlvbi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAg
ICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJzdmciLCAiaW1hZ2Uv
c3ZnK3htbCIgfSwKLSAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAidHh0Iiwg
InRleHQvcGxhaW4iIH0sCi0gICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKLSAgICB7
ICJ4bWwiLCAidGV4dC94bWwiIH0sCi0gICAgeyAieHNsIiwgInRleHQveHNsIiB9LAotICAgIHsg
InhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKLSAgICB7IDAsIDAgfQotfTsKLSAg
ICAKLVN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcgJmV4dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgU3Ry
aW5nIHMgPSBleHQubG93ZXIoKTsKLSAgICBjb25zdCBFeHRlbnNpb25NYXAgKmUgPSBleHRlbnNp
b25NYXA7Ci0gICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgewotICAgICAgICBpZiAocyA9PSBlLT5l
eHRlbnNpb24pCi0gICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7Ci0gICAgICAgICsrZTsK
LSAgICB9Ci0gICAgLy8gdW5rbm93biwgbGV0J3MganVzdCBhc3N1bWUgcGxhaW4gdGV4dAotICAg
IHJldHVybiAidGV4dC9wbGFpbiI7Ci19Ci0KLWJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBs
aWNhdGlvblBsdWdpbk1JTUVUeXBlKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Nb3VzZUV2
ZW50V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTW91c2VFdmVudFd4LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyZjA2ZmEwZTdmYTJkODlmYjA4YTkzMzMx
ZDIwMDFlOTNiZTQxYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Nb3VzZUV2ZW50V3guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBP
bGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotCi0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3eC9kZWZzLmg+Ci0jaW5jbHVkZSA8d3gvZXZlbnQuaD4K
LSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dGF0aWMgUGxhdGZvcm1FdmVudDo6VHlwZSB0eXBlRnJvbU1vdXNlRXZlbnQoY29uc3Qgd3hNb3Vz
ZUV2ZW50JiBldmVudCkKLXsKLSAgICB3eEV2ZW50VHlwZSB0eXBlID0gZXZlbnQuR2V0RXZlbnRU
eXBlKCk7Ci0KLSAgICBpZiAodHlwZSA9PSB3eEVWVF9MRUZUX0RPV04gfHwgdHlwZSA9PSB3eEVW
VF9NSURETEVfRE9XTiB8fCB0eXBlID09IHd4RVZUX1JJR0hUX0RPV04pCi0gICAgICAgIHJldHVy
biBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQ7Ci0gICAgaWYgKHR5cGUgPT0gd3hFVlRfTEVG
VF9VUCB8fCB0eXBlID09IHd4RVZUX01JRERMRV9VUCB8fCB0eXBlID09IHd4RVZUX1JJR0hUX1VQ
IHx8IHR5cGUgPT0gd3hFVlRfTEVGVF9EQ0xJQ0sgfHwgdHlwZSA9PSB3eEVWVF9NSURETEVfRENM
SUNLIHx8IHR5cGUgPT0gd3hFVlRfUklHSFRfRENMSUNLKQotICAgICAgICByZXR1cm4gUGxhdGZv
cm1FdmVudDo6TW91c2VSZWxlYXNlZDsKLSAgICBpZiAodHlwZSA9PSB3eEVWVF9NT1RJT04pCi0g
ICAgICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkOwotCi0gICAgcmV0dXJuIFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQ7Ci19Ci0KLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZv
cm1Nb3VzZUV2ZW50KGNvbnN0IHd4TW91c2VFdmVudCYgZXZlbnQsIGNvbnN0IHd4UG9pbnQmIGds
b2JhbFBvaW50LCBpbnQgY2xpY2tDb3VudCkKLSAgICA6IFBsYXRmb3JtRXZlbnQodHlwZUZyb21N
b3VzZUV2ZW50KGV2ZW50KSwgZXZlbnQuU2hpZnREb3duKCksIGV2ZW50LkNtZERvd24oKSB8fCBl
dmVudC5Db250cm9sRG93bigpLCBldmVudC5BbHREb3duKCksIGV2ZW50Lk1ldGFEb3duKCksIFdU
Rjo6Y3VycmVudFRpbWUoKSkKLSAgICAsIG1fcG9zaXRpb24oZXZlbnQuR2V0UG9zaXRpb24oKSkK
LSAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9pbnQpCi17Ci0KLSAgICBpZiAoZXZlbnQu
TGVmdElzRG93bigpIHx8IGV2ZW50LkJ1dHRvbih3eE1PVVNFX0JUTl9MRUZUKSkKLSAgICAgICAg
bV9idXR0b24gPSBMZWZ0QnV0dG9uOwotICAgIGVsc2UgaWYgKGV2ZW50LlJpZ2h0SXNEb3duKCkg
fHwgZXZlbnQuQnV0dG9uKHd4TU9VU0VfQlROX1JJR0hUKSkKLSAgICAgICAgbV9idXR0b24gPSBS
aWdodEJ1dHRvbjsKLSAgICBlbHNlIGlmIChldmVudC5NaWRkbGVJc0Rvd24oKSB8fCBldmVudC5C
dXR0b24od3hNT1VTRV9CVE5fTUlERExFKSkKLSAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0
b247Ci0KLSAgICBpZiAobV90eXBlID09IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQpCi0gICAg
ICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBtX2NsaWNrQ291bnQgPSBj
bGlja0NvdW50OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9Nb3VzZVdoZWVsRXZlbnRXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9Nb3Vz
ZVdoZWVsRXZlbnRXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Y2I2OTMx
ZjM5NDViZTIwN2IzMTliMGExYjUwYzA2OTQ1YTJmNjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvTW91c2VX
aGVlbEV2ZW50V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZl
bnQuaCIKLQotI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2V2ZW50Lmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZl
bnQoY29uc3Qgd3hNb3VzZUV2ZW50JiBldmVudCwgY29uc3Qgd3hQb2ludCYgZ2xvYmFsUG9pbnQp
Ci0gICAgOiBQbGF0Zm9ybUV2ZW50KFBsYXRmb3JtRXZlbnQ6OldoZWVsLCBldmVudC5TaGlmdERv
d24oKSwgZXZlbnQuQ29udHJvbERvd24oKSwgZXZlbnQuQWx0RG93bigpLCBldmVudC5NZXRhRG93
bigpLCBXVEY6OmN1cnJlbnRUaW1lKCkpCi0gICAgLCBtX3Bvc2l0aW9uKGV2ZW50LkdldFBvc2l0
aW9uKCkpCi0gICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvaW50KQotICAgICwgbV9ncmFu
dWxhcml0eShTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCkKLSAgICAsIG1fZGVsdGFYKDApIC8vIHd4
IGRvZXNuJ3Qgc3VwcG9ydCBob3Jpem9udGFsIG1vdXNlIHdoZWVsIHNjcm9sbGluZwotICAgICwg
bV9kZWx0YVkoZXZlbnQuR2V0V2hlZWxSb3RhdGlvbigpIC8gZXZlbnQuR2V0V2hlZWxEZWx0YSgp
KQotICAgICwgbV93aGVlbFRpY2tzWChtX2RlbHRhWCkKLSAgICAsIG1fd2hlZWxUaWNrc1kobV9k
ZWx0YVkpCi0gICAgLCBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZShmYWxzZSkKLXsKLSAg
ICAvLyBGSVhNRTogcmV0cmlldmUgdGhlIHVzZXIgc2V0dGluZyBmb3IgdGhlIG51bWJlciBvZiBs
aW5lcyB0byBzY3JvbGwgb24gZWFjaCB3aGVlbCBldmVudAotICAgIG1fZGVsdGFZICo9IHN0YXRp
Y19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOwotfQotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9QYXN0ZWJvYXJkV3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvUGFzdGVib2FyZFd4LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDNhMzQ3YjdmMDYwZTljYWZhYWY1NTA5NWU1M2I5OTE2ODViMTgx
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93eC9QYXN0ZWJvYXJkV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIgPGtl
dmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2lu
Y2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgot
I2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+Ci0jaW5jbHVk
ZSA8d3gvZGF0YW9iai5oPgotI2luY2x1ZGUgPHd4L2NsaXBicmQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1QYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKLXsKLX0KLQotUGFzdGVib2FyZCog
UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQotewotICAgIHN0YXRpYyBQYXN0ZWJvYXJk
KiBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQoKTsKLSAgICByZXR1cm4gcGFzdGVib2FyZDsK
LX0KLQotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5n
ZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lLCBTaG91bGRTZXJpYWxp
emVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkKQotewotICAgIGlmICh3eFRoZUNsaXBib2FyZC0+T3BlbigpKSB7Ci0jaWYgd3hD
SEVDS19WRVJTSU9OKDIsIDksIDQpCi0gICAgICAgIHd4VGhlQ2xpcGJvYXJkLT5TZXREYXRhKG5l
dyB3eEhUTUxEYXRhT2JqZWN0KGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlKSkpOwotI2VuZGlmCi0gICAgICAgIHd4VGhlQ2xpcGJvYXJkLT5TZXRE
YXRhKG5ldyB3eFRleHREYXRhT2JqZWN0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNs
aXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRv
cigpLT5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
ZWRUZXh0KCkpKTsKLSAgICAgICAgd3hUaGVDbGlwYm9hcmQtPkNsb3NlKCk7Ci0gICAgfQotfQot
Ci12b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21h
cnRSZXBsYWNlT3B0aW9uKQotewotICAgIGlmICh3eFRoZUNsaXBib2FyZC0+T3BlbigpKSB7Ci0g
ICAgICAgIHd4VGhlQ2xpcGJvYXJkLT5TZXREYXRhKCBuZXcgd3hUZXh0RGF0YU9iamVjdCh0ZXh0
KSApOwotICAgICAgICB3eFRoZUNsaXBib2FyZC0+Q2xvc2UoKTsKLSAgICB9Ci19Ci0KLWJvb2wg
UGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFt
ZSogZnJhbWUpCi17Ci0gICAgaWYgKHd4VGhlQ2xpcGJvYXJkLT5PcGVuKCkpIHsKLSAgICAgICAg
aWYgKHd4VGhlQ2xpcGJvYXJkLT5Jc1N1cHBvcnRlZCh3eERGX1RFWFQpKSB7Ci0gICAgICAgICAg
ICB3eFRleHREYXRhT2JqZWN0IGRhdGE7Ci0gICAgICAgICAgICB3eFRoZUNsaXBib2FyZC0+R2V0
RGF0YShkYXRhKTsKLSAgICAgICAgICAgIHd4VGhlQ2xpcGJvYXJkLT5DbG9zZSgpOwotICAgICAg
ICAgICAgcmV0dXJuIGRhdGEuR2V0VGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0
ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4g
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKLXsK
LSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSAwOwotICAgIGlmICh3eFRo
ZUNsaXBib2FyZC0+T3BlbigpKSB7Ci0jaWYgd3hDSEVDS19WRVJTSU9OKDIsIDksIDQpCi0gICAg
ICAgIGlmICh3eFRoZUNsaXBib2FyZC0+SXNTdXBwb3J0ZWQod3hERl9IVE1MKSkgewotICAgICAg
ICAgICAgd3hIVE1MRGF0YU9iamVjdCBkYXRhOwotICAgICAgICAgICAgd3hUaGVDbGlwYm9hcmQt
PkdldERhdGEoZGF0YSk7Ci0gICAgICAgICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotICAg
ICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3Vt
ZW50KCksIGRhdGEuR2V0SFRNTCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250
ZW50KTsKLSAgICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGFsbG93UGxhaW5UZXh0ICYmIHd4VGhlQ2xpcGJvYXJkLT5Jc1N1cHBvcnRlZCggd3hERl9URVhU
ICkpIHsKLSAgICAgICAgICAgICAgICB3eFRleHREYXRhT2JqZWN0IGRhdGE7Ci0gICAgICAgICAg
ICAgICAgd3hUaGVDbGlwYm9hcmQtPkdldERhdGEoIGRhdGEgKTsKLSAgICAgICAgICAgICAgICBj
aG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIGRhdGEuR2V0VGV4dCgpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICB3eFRoZUNsaXBib2FyZC0+Q2xvc2UoKTsKLSAgICB9
Ci0gICAgaWYgKGZyYWdtZW50KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwot
ICAgIAotICAgIHJldHVybiAwOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQotewotICAgIGlmICh3eFRoZUNsaXBi
b2FyZC0+T3BlbigpKSB7Ci0gICAgICAgIHd4VGhlQ2xpcGJvYXJkLT5TZXREYXRhKCBuZXcgd3hU
ZXh0RGF0YU9iamVjdCggdXJsLnN0cmluZygpICkgKTsKLSAgICAgICAgd3hUaGVDbGlwYm9hcmQt
PkNsb3NlKCk7Ci0gICAgfQotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJkKENs
aXBib2FyZCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJk
OjpjbGVhcigpCi17Ci0gICAgd3hUaGVDbGlwYm9hcmQtPkNsZWFyKCk7Ci19Ci0KLXZvaWQgUGFz
dGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0
bGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSAgICAKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjdhNjMyNGRmY2M3OGMwMTQ4ZTcwMjYzNTk0ZTA2MWVmOWZjYjcyMy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC9Qb3B1cE1lbnVXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZv
ciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQb3B1cE1lbnVXeC5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiUG9w
dXBNZW51Q2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNs
dWRlIDx3eC9kZWZzLmg+Ci0jaWYgX19XWE1TV19fCi0jaW5jbHVkZSA8d3gvbXN3L3dpbnVuZGVm
Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx3eC9ldmVudC5oPgotI2luY2x1ZGUgPHd4L21lbnUuaD4K
LQotc3RhdGljIGludCBzX21lbnVTdGFydElkID0gd3hOZXdJZCgpOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFBvcHVwTWVudUV2ZW50SGFuZGxlciA6IHB1YmxpYyB3eEV2dEhhbmRs
ZXIKLXsKLXB1YmxpYzoKLSAgICBQb3B1cE1lbnVFdmVudEhhbmRsZXIoUG9wdXBNZW51Q2xpZW50
KiBjbGllbnQpIDoKLSAgICAgICAgbV9jbGllbnQoY2xpZW50KQotICAgIHt9Ci0KLSAgICB2b2lk
IE9uTWVudUl0ZW1TZWxlY3RlZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpCi0gICAgewotICAgICAg
ICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkKGV2ZW50
LkdldElkKCkgLSBzX21lbnVTdGFydElkKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUG9wdXBN
ZW51Q2xpZW50KiBtX2NsaWVudDsKLQotfTsKLQotUG9wdXBNZW51V3g6OlBvcHVwTWVudVd4KFBv
cHVwTWVudUNsaWVudCogY2xpZW50KQotICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCi0gICAg
LCBtX21lbnUoMCkKLXsKLSAgICBtX3BvcHVwSGFuZGxlciA9IG5ldyBQb3B1cE1lbnVFdmVudEhh
bmRsZXIoY2xpZW50KTsKLX0KLQotUG9wdXBNZW51V3g6On5Qb3B1cE1lbnVXeCgpCi17Ci0gICAg
ZGVsZXRlIG1fcG9wdXBIYW5kbGVyOwotICAgIGRlbGV0ZSBtX21lbnU7Ci19Ci0KLXZvaWQgUG9w
dXBNZW51V3g6OmRpc2Nvbm5lY3RDbGllbnQoKQotewotICAgIG1fcG9wdXBDbGllbnQgPSAwOwot
fQotCi12b2lkIFBvcHVwTWVudVd4OjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyog
diwgaW50IGluZGV4KQotewotICAgIC8vIGp1c3QgZGVsZXRlIGFuZCByZWNyZWF0ZQotICAgIGRl
bGV0ZSBtX21lbnU7Ci0gICAgQVNTRVJUKGNsaWVudCgpKTsKLSAgICBBU1NFUlQodik7Ci0KLSAg
ICB3eFdpbmRvdyogbmF0aXZlV2luID0gdi0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKTsKLQotICAgIGlmIChuYXRpdmVXaW4pIHsKLSAgICAgICAgLy8gY29uc3RydWN0IHRoZSBt
ZW51Ci0gICAgICAgIG1fbWVudSA9IG5ldyB3eE1lbnUoKTsKLQotICAgICAgICBpbnQgc2l6ZSA9
IGNsaWVudCgpLT5saXN0U2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
IGkrKykgewotICAgICAgICAgICAgaW50IGlkID0gc19tZW51U3RhcnRJZCArIGk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChjbGllbnQoKS0+aXRlbUlzU2VwYXJhdG9yKGkpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9tZW51LT5BcHBlbmRTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE5PVEU6IGFwcGVuZGluZyBh
IG1lbnUgaXRlbSB3aXRoIGFuIGVtcHR5IGxhYmVsIGFzc2VydHMgaW4gd3guCi0gICAgICAgICAg
ICAgICAgaWYgKCFjbGllbnQoKS0+aXRlbVRleHQoaSkuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICBtX21lbnUtPkFwcGVuZChzX21lbnVTdGFydElkICsgaSwgY2xpZW50KCktPml0ZW1U
ZXh0KGkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fbWVu
dS0+QXBwZW5kKHNfbWVudVN0YXJ0SWQgKyBpLCAiICIpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIG5hdGl2ZVdpbi0+Q29ubmVjdChzX21lbnVTdGFydElkLCBzX21lbnVTdGFy
dElkICsgKHNpemUtMSksIHd4RVZUX0NPTU1BTkRfTUVOVV9TRUxFQ1RFRCwgd3hDb21tYW5kRXZl
bnRIYW5kbGVyKFBvcHVwTWVudUV2ZW50SGFuZGxlcjo6T25NZW51SXRlbVNlbGVjdGVkKSwgMCwg
bV9wb3B1cEhhbmRsZXIpOwotICAgICAgICBuYXRpdmVXaW4tPlBvcHVwTWVudShtX21lbnUsIHIu
eCgpIC0gdi0+c2Nyb2xsWCgpLCByLnkoKSAtIHYtPnNjcm9sbFkoKSk7Ci0gICAgICAgIG5hdGl2
ZVdpbi0+RGlzY29ubmVjdChzX21lbnVTdGFydElkLCBzX21lbnVTdGFydElkICsgKHNpemUtMSks
IHd4RVZUX0NPTU1BTkRfTUVOVV9TRUxFQ1RFRCwgd3hDb21tYW5kRXZlbnRIYW5kbGVyKFBvcHVw
TWVudUV2ZW50SGFuZGxlcjo6T25NZW51SXRlbVNlbGVjdGVkKSwgMCwgbV9wb3B1cEhhbmRsZXIp
OwotICAgICAgICAKLSAgICAgICAgY2xpZW50KCktPnBvcHVwRGlkSGlkZSgpOwotICAgIH0KLX0K
LQotdm9pZCBQb3B1cE1lbnVXeDo6aGlkZSgpCi17Ci0gICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBk
byBhbnl0aGluZyBoZXJlLCB0aGUgbmF0aXZlIGNvbnRyb2wgb25seSBleGlzdHMgZHVyaW5nIHRo
ZSB0aW1lCi0gICAgLy8gc2hvdyBpcyBjYWxsZWQKLX0KLQotdm9pZCBQb3B1cE1lbnVXeDo6dXBk
YXRlRnJvbUVsZW1lbnQoKQotewotICAgIGNsaWVudCgpLT5zZXRUZXh0RnJvbUl0ZW0obV9wb3B1
cENsaWVudC0+c2VsZWN0ZWRJbmRleCgpKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvUG9wdXBNZW51V3guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3d4L1BvcHVwTWVudVd4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkOTQ3YTcw
ODAzNmVlY2FkNTVkMDRhZWU4OTZiZDQ1MzU2MGNkYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvUG9wdXBN
ZW51V3guaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LQotI2lmbmRlZiBQb3B1cE1lbnVXeF9oCi0jZGVmaW5lIFBvcHVwTWVudVd4X2gKLQotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQb3B1cE1lbnUuaCIKLSNpbmNsdWRlICJQb3B1cE1l
bnVDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0KLSNpZmRlZiBfX1dYTVNXX18KLSNpbmNsdWRlIDx3eC9tc3cvd2ludW5k
ZWYuaD4KLSNlbmRpZgotY2xhc3Mgd3hNZW51OwotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNs
dWRlIDx3eC9ldmVudC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lVmll
dzsKLWNsYXNzIFBvcHVwTWVudUV2ZW50SGFuZGxlcjsKLWNsYXNzIFNjcm9sbGJhcjsKLQotY2xh
c3MgUG9wdXBNZW51V3ggOiBwdWJsaWMgUG9wdXBNZW51IHsKLXB1YmxpYzoKLSAgICBQb3B1cE1l
bnVXeChQb3B1cE1lbnVDbGllbnQqKTsKLSAgICB+UG9wdXBNZW51V3goKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQgaW5kZXgpOwotICAg
IHZpcnR1YWwgdm9pZCBoaWRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RDbGllbnQoKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIE9uTWVudUl0ZW1TZWxlY3RlZCh3eENvbW1hbmRFdmVudCYpOwotICAgIFBvcHVwTWVu
dUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cENsaWVudDsgfQotCi0gICAg
UG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OwotICAgIHd4TWVudSogbV9tZW51OwotICAg
IFBvcHVwTWVudUV2ZW50SGFuZGxlciogbV9wb3B1cEhhbmRsZXI7Ci19OwotCi19Ci0KLSNlbmRp
ZiAvLyBQb3B1cE1lbnVXeF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9SZW5kZXJUaGVtZVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRo
ZW1lV3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjkxZTdmNDMwMWE0OWY4
YmM0OWU2ZDlkM2UzM2MyODQ3MTU4NzJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3gu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLQotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkxvY2FsREMuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLQotI2luY2x1ZGUg
PHd4L2RjLmg+Ci0jaW5jbHVkZSA8d3gvZGNncmFwaC5oPgotI2luY2x1ZGUgPHd4L3JlbmRlcmVy
Lmg+Ci0jaW5jbHVkZSA8d3gvZGNjbGllbnQuaD4KLSNpbmNsdWRlIDx3eC9zY3JvbHdpbi5oPgot
I2luY2x1ZGUgPHd4L3NldHRpbmdzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UmVuZGVyVGhlbWVXeCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci1wcml2YXRlOgotICAgIFJlbmRl
clRoZW1lV3goKSA6IFJlbmRlclRoZW1lKCkgeyB9Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVX
eCgpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0
ZSgpOwotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFj
dHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHBhaW50QnV0dG9uKG8sIGksIHIpOwotICAgIH0KLSAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hl
Y2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRS
YWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50
UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0
aW9uJikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdm9pZCBj
bG9zZSgpOwotCi0gICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0KSBjb25zdDsKLX07
Ci0KLQotLy8gQ29uc3RhbnRzCi0KLSNkZWZpbmUgTUlOSU1VTV9NRU5VX0xJU1RfU0laRSAyMQot
I2RlZmluZSBQT1BVUF9JTlRFUk5BTF9QQURESU5HX0xFRlQgNgotI2RlZmluZSBQT1BVUF9JTlRF
Uk5BTF9QQURESU5HX1RPUCAyCi0jZGVmaW5lIFBPUFVQX0lOVEVSTkFMX1BBRERJTkdfQk9UVE9N
IDIKLQotI2lmZGVmIF9fV1hNQUNfXwotI2RlZmluZSBQT1BVUF9JTlRFUk5BTF9QQURESU5HX1JJ
R0hUIDIyCi0jZWxzZQotI2RlZmluZSBQT1BVUF9JTlRFUk5BTF9QQURESU5HX1JJR0hUIDIwCi0j
ZW5kaWYKLQotUmVuZGVyVGhlbWVXeDo6flJlbmRlclRoZW1lV3goKQotewotfQotCi1QYXNzUmVm
UHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVd4OjpjcmVhdGUoKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVXeCgpKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVt
ZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQotewotICAgIHN0YXRpYyBS
ZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVtZVd4OjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAg
cmV0dXJuIHJ0OwotfQotCi13eFdpbmRvdyogbmF0aXZlV2luZG93Rm9yUmVuZGVyT2JqZWN0KFJl
bmRlck9iamVjdCogbykKLXsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG8tPnZpZXcoKS0+
ZnJhbWVWaWV3KCk7Ci0gICAgQVNTRVJUKGZyYW1lVmlldyk7Ci0gICAgQVNTRVJUKGZyYW1lVmll
dy0+aG9zdFdpbmRvdygpKTsKLSAgICByZXR1cm4gZnJhbWVWaWV3LT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpOwotfQotCi0KLWJvb2wgUmVuZGVyVGhlbWVXeDo6aXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYg
YmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKLXsKLSAgICBp
ZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9
IGJvcmRlcjsKLQotICAgIC8vIE5vcm1hbGx5IENTUyBjYW4gYmUgdXNlZCB0byBzZXQgcHJvcGVy
dGllcyBvZiBmb3JtIGNvbnRyb2xzIChzdWNoIGFzIGFkZGluZyBhIGJhY2tncm91bmQgYml0bWFw
KS4KLSAgICAvLyBIb3dldmVyLCBmb3IgdGhpcyB0byB3b3JrIFJlbmRlclRoZW1lV3ggbmVlZHMg
dG8gYWRqdXN0IHVuY3VzdG9taXplZCBlbGVtZW50cyAoZS5nLiBidXR0b25zKSB0byByZWZsZWN0
IHRoZQotICAgIC8vIGNoYW5nZXMgbWFkZSBieSBDU1MuIFNpbmNlIHdlIGRvbid0IGRvIHRoYXQg
cmlnaHQgbm93LCB0aGUgbmF0aXZlIHBhcnRzIG9mIGZvcm0gZWxlbWVudHMgYXBwZWFyIGluIG9k
ZCBwbGFjZXMuIAotICAgIC8vIFVudGlsIHdlIGhhdmUgdGltZSB0byBpbXBsZW1lbnQgdGhhdCBz
dXBwb3J0LCB3ZSByZXR1cm4gZmFsc2UgaGVyZSwgc28gdGhhdCB3ZSBpZ25vcmUgY3VzdG9taXph
dGlvbnMgCi0gICAgLy8gYW5kIGFsd2F5cyB1c2UgdGhlIG5hdGl2ZSB0aGVtZSBkcmF3aW5nIHRv
IGRyYXcgZm9ybSBjb250cm9scy4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVXeDo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0
JiByKQotewotICAgIHN3aXRjaCAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgICAg
IGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgICAgICByLnNldFdpZHRoKHIud2lkdGgoKSAr
IDEwMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRoZW1lV3g6OmNvbnRy
b2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKLXsKLSAgICBpZiAo
IWlzRW5hYmxlZChvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hlY2tib3hl
cyBvbmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCi0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSA9PSBDaGVja2JveFBhcnQpCi0gICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7Ci0K
LSAgICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxl
ZC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVd4OjpzeXN0ZW1Gb250
KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewot
ICAgIC8vIG5vLW9wCi19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXeDo6YWRkSW50cmluc2ljTWFyZ2lu
cyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gQ3V0IG91dCB0aGUgaW50cmlu
c2ljIG1hcmdpbnMgY29tcGxldGVseSBpZiB3ZSBlbmQgdXAgdXNpbmcgYSBzbWFsbCBmb250IHNp
emUKLSAgICBpZiAoc3R5bGUtPmZvbnRTaXplKCkgPCAxMSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KLSAgICBjb25zdCBpbnQgbSA9IDI7Ci0KLSAg
ICAvLyBGSVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5n
IHdpdGggbWluLXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCi0gICAgaWYgKHN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5MZWZ0
KCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChtLCBG
aXhlZCkpOwotCi0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKQotICAg
ICAgICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChtLCBGaXhlZCkpOwotICAgIH0K
LQotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxl
LT5tYXJnaW5Ub3AoKS5xdWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChM
ZW5ndGgobSwgRml4ZWQpKTsKLQotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgpLnF1
aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChtLCBGaXhl
ZCkpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJUaGVtZVd4OjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVk
IHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93
LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgotICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mg
b24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRo
YXQgYWNjb3VudHMgZm9yCi0gICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJl
IGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5
IG9uIHRoZSB0aGVtZSdzCi0gICAgLy8gbWV0cmljcy4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywg
Rml4ZWQpKTsKLQotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
V3g6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhp
cyBpcyB0aGUgc2FtZSBhcyBjaGVja2JveGVzLgotICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVXeDo6c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBwYXJ0
KSBjb25zdAotewotICAgIHN3aXRjaCAocGFydCkgewotICAgICAgICBjYXNlIFB1c2hCdXR0b25Q
YXJ0OgotICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxkUGFy
dDoKLSAgICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgZGVmYXVsdDogLy8gTm8gZm9yIGFsbCBvdGhlcnMuLi4KLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Ci17Ci0gICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVXeDo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgd3hXaW5kb3cqIHdpbmRvdyA9IG5hdGl2ZVdpbmRvd0Zv
clJlbmRlck9iamVjdChvKTsKLSAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBMb2NhbERDIGxvY2FsREMoZGMsIHIsIC8q
dHJhbnNwYXJlbnQgPSovIHRydWUpOwotCi0gICAgaW50IGZsYWdzID0gMDsKLSAgICAKLSAgICBJ
bnRSZWN0IHJlY3QgPSByOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykpCi0gICAgICAgIGZsYWdz
IHw9IHd4Q09OVFJPTF9ESVNBQkxFRDsKLQotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHls
ZSgpLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHN1cHBvcnRzRm9jdXMocGFydCkgJiYgaXNGb2N1
c2VkKG8pKQotICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9DVVNFRDsKLQotICAgIGlmIChp
c1ByZXNzZWQobykpCi0gICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9QUkVTU0VEOwotICAgIAot
ICAgIGlmIChwYXJ0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHBhcnQgPT0gQnV0dG9uUGFydCkKLSAg
ICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd1B1c2hCdXR0b24od2luZG93LCAqbG9j
YWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKLSAgICBlbHNlIGlmKHBhcnQgPT0gUmFkaW9Q
YXJ0KSB7Ci0gICAgICAgIGlmIChpc0NoZWNrZWQobykpCi0gICAgICAgICAgICBmbGFncyB8PSB3
eENPTlRST0xfQ0hFQ0tFRDsKLSNpZiB3eENIRUNLX1ZFUlNJT04oMiw5LDEpCi0gICAgICAgIHd4
UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdSYWRpb0JpdG1hcCh3aW5kb3csICpsb2NhbERDLmNv
bnRleHQoKSwgcmVjdCwgZmxhZ3MpOwotI2VsaWYgd3hDSEVDS19WRVJTSU9OKDIsOSwwKQotICAg
ICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3UmFkaW9CdXR0b24od2luZG93LCAqbG9j
YWxEQy5jb250ZXh0KCksIHJlY3QsIGZsYWdzKTsKLSNlbHNlCi0gICAgICAgIHd4UmVuZGVyZXJf
RHJhd1JhZGlvQnV0dG9uKHdpbmRvdywgKmxvY2FsREMuY29udGV4dCgpLCByZWN0LCBmbGFncyk7
Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZSBpZihwYXJ0ID09IENoZWNrYm94UGFydCkgewotICAg
ICAgICBpZiAoaXNDaGVja2VkKG8pKQotICAgICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0NI
RUNLRUQ7Ci0gICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdDaGVja0JveCh3aW5k
b3csICpsb2NhbERDLmNvbnRleHQoKSwgcmVjdCwgZmxhZ3MpOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0KLX0K
LQotYm9vbCBSZW5kZXJUaGVtZVd4OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICB3eFdpbmRvdyogd2lu
ZG93ID0gbmF0aXZlV2luZG93Rm9yUmVuZGVyT2JqZWN0KG8pOwotICAgIHd4REMqIGRjID0gc3Rh
dGljX2Nhc3Q8d3hEQyo+KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIExvY2Fs
REMgbG9jYWxEQyhkYywgcik7Ci0gICAgaW50IGZsYWdzID0gMDsKLSAgICAKLSAgICBJbnRSZWN0
IHJlY3QgPSByOwotCi0gICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKTsKLSAgICBpZiAoc3VwcG9ydHNGb2N1cyhwYXJ0KSAmJiBpc0ZvY3VzZWQobykpCi0gICAg
ICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9GT0NVU0VEOwotCi0jaWYgd3hDSEVDS19WRVJTSU9OKDIs
OSwwKQotICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdUZXh0Q3RybCh3aW5kb3csICps
b2NhbERDLmNvbnRleHQoKSwgcmVjdCwgZmxhZ3MpOwotI2Vsc2UKLSAgICB3eFJlbmRlcmVyX0Ry
YXdUZXh0Q3RybCh3aW5kb3csICpsb2NhbERDLmNvbnRleHQoKSwgciwgMCk7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFJlbmRlclRoZW1lV3g6Om1pbmltdW1NZW51TGlz
dFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCAKLXsgCi0gICAgcmV0dXJuIE1JTklNVU1fTUVOVV9M
SVNUX1NJWkU7IAotfQotCi12b2lkIFJlbmRlclRoZW1lV3g6OmFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotCi0gICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBh
dXRvLgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLSAgICAKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z0JvdHRvbShMZW5ndGgoMiwgRml4ZWQpKTsKLX0KLSAgICAKLWJvb2wgUmVuZGVyVGhlbWVXeDo6
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKLXsKLSAgICB3eFdpbmRvdyogd2luZG93ID0gbmF0aXZlV2luZG93Rm9yUmVu
ZGVyT2JqZWN0KG8pOwotICAgIHd4REMqIGRjID0gc3RhdGljX2Nhc3Q8d3hEQyo+KGkuY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgTG9jYWxEQyBsb2NhbERDKGRjLCByKTsKLSAg
ICBJbnRSZWN0IHJlY3QgPSByOwotCi0gICAgaW50IGZsYWdzID0gMDsgICAgICAKLSAgICBpZiAo
IWlzRW5hYmxlZChvKSkKLSAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0RJU0FCTEVEOwotICAg
ICAgICAKLSAgICBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpICYm
IGlzRm9jdXNlZChvKSkKLSAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0ZPQ1VTRUQ7Ci0KLSAg
ICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfUFJFU1NFRDsK
LQotI2lmIHd4Q0hFQ0tfVkVSU0lPTigyLDksMCkKLSAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQo
KS5EcmF3Q2hvaWNlKHdpbmRvdywgKmxvY2FsREMuY29udGV4dCgpLCByZWN0LCBmbGFncyk7Ci0j
ZWxzZQotICAgIHd4UmVuZGVyZXJfRHJhd0Nob2ljZSh3aW5kb3csICpsb2NhbERDLmNvbnRleHQo
KSwgcmVjdCwgZmxhZ3MpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVXeDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotICAgIAotYm9vbCBSZW5kZXJUaGVtZVd4OjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHd4
V2luZG93KiB3aW5kb3cgPSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3Qobyk7Ci0gICAgd3hE
QyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7
Ci0gICAgTG9jYWxEQyBsb2NhbERDKGRjLCByKTsKLSAgICBJbnRSZWN0IHJlY3QgPSByOwotCi0g
ICAgaW50IGZsYWdzID0gMDsgICAgICAKLSAgICBpZiAoIWlzRW5hYmxlZChvKSkKLSAgICAgICAg
ZmxhZ3MgfD0gd3hDT05UUk9MX0RJU0FCTEVEOwotICAgICAgICAKLSAgICBpZiAoc3VwcG9ydHNG
b2N1cyhvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKLSAgICAgICAg
ZmxhZ3MgfD0gd3hDT05UUk9MX0ZPQ1VTRUQ7Ci0gICAgCi0gICAgaWYgKGlzUHJlc3NlZChvKSkK
LSAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX1BSRVNTRUQ7Ci0KLSAgICB3eFJlbmRlcmVyTmF0
aXZlOjpHZXQoKS5EcmF3Q29tYm9Cb3hEcm9wQnV0dG9uKHdpbmRvdywgKmxvY2FsREMuY29udGV4
dCgpLCByZWN0LCBmbGFncyk7Ci0gICAgICAgICAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LSAgICAKLUNvbG9yIFJlbmRlclRoZW1lV3g6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd3hTeXN0ZW1TZXR0aW5nczo6R2V0Q29s
b3VyKHd4U1lTX0NPTE9VUl9ISUdITElHSFQpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVd4Ojpw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gd3hTeXN0ZW1TZXR0aW5nczo6R2V0Q29sb3VyKHd4U1lTX0NPTE9VUl9CVE5TSEFET1cp
OwotfQotCi1Db2xvciBSZW5kZXJUaGVtZVd4OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEdldCB3eCB0byByZXR1cm4gdGhl
IGNvcnJlY3QgdmFsdWUgZm9yIGVhY2ggcGxhdGZvcm0uCi0jaWYgX19XWE1BQ19fCi0gICAgcmV0
dXJuIENvbG9yKCk7Ci0jZWxzZQotICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMjU1KTsKLSNl
bmRpZgotfQotCi1Db2xvciBSZW5kZXJUaGVtZVd4OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSNpZiBfX1dYTUFDX18KLSAgICByZXR1cm4gQ29s
b3IoKTsKLSNlbHNlCi0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAyNTUpOwotI2VuZGlmCi19
Ci0KLWludCBSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5
bGUqKSBjb25zdCAKLXsgCi0gICAgcmV0dXJuIFBPUFVQX0lOVEVSTkFMX1BBRERJTkdfTEVGVDsg
Ci19Ci0KLWludCBSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRl
clN0eWxlKikgY29uc3QgCi17Ci0gICAgcmV0dXJuIFBPUFVQX0lOVEVSTkFMX1BBRERJTkdfUklH
SFQ7Ci19Ci0KLWludCBSZW5kZXJUaGVtZVd4Ojpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5k
ZXJTdHlsZSopIGNvbnN0IAotewotICAgIHJldHVybiBQT1BVUF9JTlRFUk5BTF9QQURESU5HX1RP
UDsKLX0KLQotaW50IFJlbmRlclRoZW1lV3g6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKikgY29uc3QKLXsgCi0gICAgcmV0dXJuIFBPUFVQX0lOVEVSTkFMX1BBRERJTkdf
Qk9UVE9NOyAKLX0KLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9SdW5Mb29wV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvUnVuTG9vcFd4LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQxNGRkNTQ1NzU3YjUzNmQ2MDA1OTFm
Y2FjYzkxZGZkMmMwMDg3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9SdW5Mb29wV3guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBLZXZpbiBP
bGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgUnVuTG9vcDo6cnVuKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OnN0b3AoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLVJ1bkxvb3A6OlJ1bkxvb3AoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLVJ1bkxvb3A6On5SdW5Mb29wKCkKLXsKLX0KLQotdm9pZCBSdW5Mb29w
Ojp3YWtlVXAoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NTTEtleUdl
bmVyYXRvcld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NTTEtleUdlbmVyYXRv
cld4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QwNzZlNzUzZjA0NzAyZTI1
NGQzMmQ1ZjIxYjI3YjQzNDk0MTc2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TU0xLZXlHZW5lcmF0b3JX
eC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTU0xLZXlHZW5lcmF0b3IuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3Ry
aW5nPiYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIHNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmlu
ZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpCi17Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Nj
cmVlbld4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NjcmVlbld4LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliMGFhNWU2MTY2ZDc3ODEyNTBlNmFjOTE5NWVl
YTYwYTRmMzQ1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JlZW5XeC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJTY3JlZW4uaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXaWRn
ZXQuaCIKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9kaXNwbGF5Lmg+Ci0j
aW5jbHVkZSA8d3gvZ2RpY21uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLUZsb2F0
UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQotewotLyoKLSAgICBpbnQgZGlzcGxheU51
bTsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHdpZGdldC0+d2lkZ2V0KCk7Ci0gICAgZGlzcGxheU51
bSA9IHd4RGlzcGxheTo6R2V0RnJvbVdpbmRvdyh3aWRnZXQtPm5hdGl2ZVdpbmRvdygpKTsKLSAg
ICBpZiAoZGlzcGxheU51bSAhPSAtMSl7Ci0gICAgICAgIHd4RGlzcGxheSB0aGlzRGlzcGxheShk
aXNwbGF5TnVtKTsKLSAgICAgICAgcmV0dXJuIHRoaXNEaXNwbGF5LkdldEdlb21ldHJ5KCk7Ci0g
ICAgfQotKi8KLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci19Ci0KLWludCBzY3JlZW5EZXB0aChX
aWRnZXQqIHdpZGdldCkKLXsKLSAgICByZXR1cm4gd3hEaXNwbGF5RGVwdGgoKTsKLX0KLQotaW50
IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCi17Ci0gICAgcmV0dXJuIHd4RGlzcGxh
eURlcHRoKCk7Ci19Ci0KLWJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQot
ewotICAgIHJldHVybiB3eENvbG91ckRpc3BsYXkoKTsKLX0KLQotRmxvYXRSZWN0IHNjcmVlbkF2
YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCi17Ci0vKgotICAgIFdpZGdldCogd2lkZ2V0ID0g
d2lkZ2V0LT53aWRnZXQoKTsKLSAgICBkaXNwbGF5TnVtID0gd3hEaXNwbGF5OjpHZXRGcm9tV2lu
ZG93KHdpZGdldC0+bmF0aXZlV2luZG93KCkpOwotICAgIGlmIChkaXNwbGF5TnVtICE9IC0xKXsK
LSAgICAgICAgd3hEaXNwbGF5IHRoaXNEaXNwbGF5KGRpc3BsYXlOdW0pOwotICAgICAgICAvLyBG
SVhNRTogSW4gMi43IHRoaXMgbWV0aG9kIGlzIGdvbmU/IAotICAgICAgICAvL3JldHVybiB0aGlz
RGlzcGxheS5HZXRDbGllbnRBcmVhKCk7Ci0gICAgfQotKi8gICAgCi0gICAgcmV0dXJuIEZsb2F0
UmVjdCgpOwotfQotCi1mbG9hdCBzY2FsZUZhY3RvcihXaWRnZXQqKQotewotICAgIHJldHVybiAx
LjBmOwotCi19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Nj
cm9sbFZpZXdXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3gu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmFlNmU2NmNmYWU2ZTgxMTA3NmU1
YWE5YjFlYjI2ZjU4MmQyNmVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwzNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBL
ZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
LQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSA8
d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L3Njcm9sYmFyLmg+Ci0jaW5jbHVkZSA8d3gvc2Nyb2x3
aW4uaD4KLSNpbmNsdWRlIDx3eC9ldmVudC5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
IDogcHVibGljIHd4RXZ0SGFuZGxlciB7Ci0KLXB1YmxpYzoKLSAgICBTY3JvbGxWaWV3UHJpdmF0
ZShTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQotICAgICAgICA6IHd4RXZ0SGFuZGxlcigpCi0gICAg
ICAgICwgbV9zY3JvbGxWaWV3KHNjcm9sbFZpZXcpCi0gICAgICAgICwgdlNjcm9sbGJhck1vZGUo
U2Nyb2xsYmFyQXV0bykKLSAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQot
ICAgICAgICAsIHZpZXdTdGFydCgwLCAwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJpbmRF
dmVudHMod3hXaW5kb3cqIHdpbikKLSAgICB7Ci0gICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGFu
IGVhc2llciB3YXkgdG8gQ29ubmVjdCB0byBhIHJhbmdlIG9mIGV2ZW50cz8gdGhlc2UgYXJlIGNv
bnRpZ3VvdXMuCi0gICAgICAgIHdpbi0+Q29ubmVjdCh3eEVWVF9TQ1JPTExXSU5fVE9QLCAgICAg
ICAgICB3eFNjcm9sbFdpbkV2ZW50SGFuZGxlcihTY3JvbGxWaWV3UHJpdmF0ZTo6T25TY3JvbGxX
aW5FdmVudHMpLCBOVUxMLCB0aGlzKTsKLSAgICAgICAgd2luLT5Db25uZWN0KHd4RVZUX1NDUk9M
TFdJTl9CT1RUT00sICAgICAgIHd4U2Nyb2xsV2luRXZlbnRIYW5kbGVyKFNjcm9sbFZpZXdQcml2
YXRlOjpPblNjcm9sbFdpbkV2ZW50cyksIE5VTEwsIHRoaXMpOwotICAgICAgICB3aW4tPkNvbm5l
Y3Qod3hFVlRfU0NST0xMV0lOX0xJTkVVUCwgICAgICAgd3hTY3JvbGxXaW5FdmVudEhhbmRsZXIo
U2Nyb2xsVmlld1ByaXZhdGU6Ok9uU2Nyb2xsV2luRXZlbnRzKSwgTlVMTCwgdGhpcyk7Ci0gICAg
ICAgIHdpbi0+Q29ubmVjdCh3eEVWVF9TQ1JPTExXSU5fTElORURPV04sICAgICB3eFNjcm9sbFdp
bkV2ZW50SGFuZGxlcihTY3JvbGxWaWV3UHJpdmF0ZTo6T25TY3JvbGxXaW5FdmVudHMpLCBOVUxM
LCB0aGlzKTsKLSAgICAgICAgd2luLT5Db25uZWN0KHd4RVZUX1NDUk9MTFdJTl9QQUdFVVAsICAg
ICAgIHd4U2Nyb2xsV2luRXZlbnRIYW5kbGVyKFNjcm9sbFZpZXdQcml2YXRlOjpPblNjcm9sbFdp
bkV2ZW50cyksIE5VTEwsIHRoaXMpOwotICAgICAgICB3aW4tPkNvbm5lY3Qod3hFVlRfU0NST0xM
V0lOX1BBR0VET1dOLCAgICAgd3hTY3JvbGxXaW5FdmVudEhhbmRsZXIoU2Nyb2xsVmlld1ByaXZh
dGU6Ok9uU2Nyb2xsV2luRXZlbnRzKSwgTlVMTCwgdGhpcyk7Ci0gICAgICAgIHdpbi0+Q29ubmVj
dCh3eEVWVF9TQ1JPTExXSU5fVEhVTUJUUkFDSywgICB3eFNjcm9sbFdpbkV2ZW50SGFuZGxlcihT
Y3JvbGxWaWV3UHJpdmF0ZTo6T25TY3JvbGxXaW5FdmVudHMpLCBOVUxMLCB0aGlzKTsKLSAgICAg
ICAgd2luLT5Db25uZWN0KHd4RVZUX1NDUk9MTFdJTl9USFVNQlJFTEVBU0UsIHd4U2Nyb2xsV2lu
RXZlbnRIYW5kbGVyKFNjcm9sbFZpZXdQcml2YXRlOjpPblNjcm9sbFdpbkV2ZW50cyksIE5VTEws
IHRoaXMpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIE9uU2Nyb2xsV2luRXZlbnRzKHd4U2Nyb2xs
V2luRXZlbnQmIGUpCi0gICAgewotICAgICAgICB3eEV2ZW50VHlwZSBzY3JvbGxUeXBlKGUuR2V0
RXZlbnRUeXBlKCkpOwotICAgICAgICBib29sIGhvcml6ID0gZS5HZXRPcmllbnRhdGlvbigpID09
IHd4SE9SSVpPTlRBTDsKLQotICAgICAgICB3eFBvaW50IHBvcyh2aWV3U3RhcnQpOwotIAotICAg
ICAgICBpZiAoc2Nyb2xsVHlwZSA9PSB3eEVWVF9TQ1JPTExXSU5fVEhVTUJUUkFDSyB8fCBzY3Jv
bGxUeXBlID09IHd4RVZUX1NDUk9MTFdJTl9USFVNQlJFTEVBU0UpIHsKLSAgICAgICAgICAgIGlm
IChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLnggPSBlLkdldFBvc2l0aW9uKCk7Ci0gICAg
ICAgICAgICBlbHNlICAgICAgIAotICAgICAgICAgICAgICAgIHBvcy55ID0gZS5HZXRQb3NpdGlv
bigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNjcm9sbFR5cGUgPT0gd3hFVlRfU0NS
T0xMV0lOX0xJTkVET1dOKSB7Ci0gICAgICAgICAgICBpZiAoaG9yaXopIAotICAgICAgICAgICAg
ICAgIHBvcy54ICs9IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKLSAgICAgICAgICAg
IGVsc2UgICAgICAgCi0gICAgICAgICAgICAgICAgcG9zLnkgKz0gU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNjcm9sbFR5cGUgPT0g
d3hFVlRfU0NST0xMV0lOX0xJTkVVUCkgewotICAgICAgICAgICAgaWYgKGhvcml6KSAKLSAgICAg
ICAgICAgICAgICBwb3MueCAtPSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7Ci0gICAg
ICAgICAgICBlbHNlICAgICAgIAotICAgICAgICAgICAgICAgIHBvcy55IC09IFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzY3JvbGxU
eXBlID09IHd4RVZUX1NDUk9MTFdJTl9QQUdFVVApIHsKLSAgICAgICAgICAgIGlmIChob3Jpeikg
Ci0gICAgICAgICAgICAgICAgcG9zLnggLT0gbWF4PGludD4obV9zY3JvbGxWaWV3LT52aXNpYmxl
V2lkdGgoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIG1fc2Ny
b2xsVmlldy0+dmlzaWJsZVdpZHRoKCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSk7Ci0gICAgICAgICAgICBlbHNlICAgICAgIAotICAgICAgICAgICAgICAgIHBvcy55IC09
IG1heDxpbnQ+KG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhlaWdodCgpICogU2Nyb2xsYmFyOjptaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgbV9zY3JvbGxWaWV3LT52aXNpYmxlSGVpZ2h0KCkg
LSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAoc2Nyb2xsVHlwZSA9PSB3eEVWVF9TQ1JPTExXSU5fUEFHRURPV04pIHsKLSAg
ICAgICAgICAgIGlmIChob3JpeikgCi0gICAgICAgICAgICAgICAgcG9zLnggKz0gbWF4PGludD4o
bV9zY3JvbGxWaWV3LT52aXNpYmxlV2lkdGgoKSAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0
ZXBXaGVuUGFnaW5nKCksIG1fc2Nyb2xsVmlldy0+dmlzaWJsZVdpZHRoKCkgLSBTY3JvbGxiYXI6
Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSk7Ci0gICAgICAgICAgICBlbHNlICAgICAgIAotICAg
ICAgICAgICAgICAgIHBvcy55ICs9IG1heDxpbnQ+KG1fc2Nyb2xsVmlldy0+dmlzaWJsZUhlaWdo
dCgpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgbV9zY3JvbGxW
aWV3LT52aXNpYmxlSGVpZ2h0KCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGUuU2tpcCgp
OwotCi0gICAgICAgIG1fc2Nyb2xsVmlldy0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQocG9z
LngsIHBvcy55KSk7Ci0gICAgfQotCi0gICAgU2Nyb2xsVmlldyogbV9zY3JvbGxWaWV3OwotCi0g
ICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyTW9kZTsKLSAgICBTY3JvbGxiYXJNb2RlIGhTY3Jv
bGxiYXJNb2RlOwotICAgIHd4UG9pbnQgdmlld1N0YXJ0OwotfTsKLQotdm9pZCBTY3JvbGxWaWV3
OjpwbGF0Zm9ybUluaXQoKQotewotICAgIG1fZGF0YSA9IG5ldyBTY3JvbGxWaWV3UHJpdmF0ZSh0
aGlzKTsKLX0KLQotCi12b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAg
ZGVsZXRlIG1fZGF0YTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpzZXRQbGF0Zm9ybVdpZGdldCh3
eFdpbmRvdyogd2luKQotewotICAgIFdpZGdldDo6c2V0UGxhdGZvcm1XaWRnZXQod2luKTsKLSAg
ICBtX2RhdGEtPmJpbmRFdmVudHMod2luKTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9y
bVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wg
bm93KQotewotICAgIC8vIHdlIG5lZWQgdG8gY29udmVydCBjb29yZGluYXRlcyB0byBzY3JvbGxl
ZCBwb3NpdGlvbgotICAgIHd4UmVjdCBjb250ZW50c1JlY3QgPSB1cGRhdGVSZWN0OwotICAgIGNv
bnRlbnRzUmVjdC5PZmZzZXQoLXNjcm9sbFgoKSwgLXNjcm9sbFkoKSk7Ci0gICAgd3hXaW5kb3cq
IHdpbiA9IHBsYXRmb3JtV2lkZ2V0KCk7Ci0gICAgaWYgKHdpbikgewotICAgICAgICB3aW4tPlJl
ZnJlc2hSZWN0KGNvbnRlbnRzUmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChub3cpCi0gICAgICAg
ICAgICB3aW4tPlVwZGF0ZSgpOwotICAgIH0KLX0KLQotSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVZpc2libGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdAotewot
ICAgIHd4V2luZG93KiB3aW4gPSBwbGF0Zm9ybVdpZGdldCgpOwotICAgIGlmICghd2luKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgICBp
ZiAoaW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHdpbi0+R2V0U2l6ZSgmd2lkdGgsICZoZWln
aHQpOwotICAgIGVsc2UKLSAgICAgICAgd2luLT5HZXRDbGllbnRTaXplKCZ3aWR0aCwgJmhlaWdo
dCk7Ci0gICAgICAgIAotICAgIHJldHVybiBJbnRSZWN0KG1fZGF0YS0+dmlld1N0YXJ0LngsIG1f
ZGF0YS0+dmlld1N0YXJ0LnksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6
OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQot
ewotICAgIHd4V2luZG93KiB3aW4gPSBwbGF0Zm9ybVdpZGdldCgpOwotCi0gICAgd3hQb2ludCBz
Y3JvbGxPZmZzZXQgPSBtX2RhdGEtPnZpZXdTdGFydDsKLSAgICB3eFBvaW50IG9yaWcoc2Nyb2xs
T2Zmc2V0KTsKLSAgICB3eFBvaW50IG5ld1Njcm9sbE9mZnNldChzY3JvbGxQb2ludCk7Ci0KLSAg
ICB3eFJlY3QgdlJlY3Qod2luLT5HZXRWaXJ0dWFsU2l6ZSgpKTsKLSAgICB3eFJlY3QgY1JlY3Qo
d2luLT5HZXRDbGllbnRTaXplKCkpOwotCi0gICAgLy8gY2xhbXAgdG8gc2Nyb2xsIGFyZWEKLSAg
ICBpZiAobmV3U2Nyb2xsT2Zmc2V0LnggPCAwKQotICAgICAgICBuZXdTY3JvbGxPZmZzZXQueCA9
IDA7Ci0gICAgZWxzZSBpZiAobmV3U2Nyb2xsT2Zmc2V0LnggKyBjUmVjdC53aWR0aCA+IHZSZWN0
LndpZHRoKQotICAgICAgICBuZXdTY3JvbGxPZmZzZXQueCA9IG1heCgwLCB2UmVjdC53aWR0aCAt
IGNSZWN0LndpZHRoKTsKLQotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQueSA8IDApCi0gICAgICAg
IG5ld1Njcm9sbE9mZnNldC55ID0gMDsKLSAgICBlbHNlIGlmIChuZXdTY3JvbGxPZmZzZXQueSAr
IGNSZWN0LmhlaWdodCA+IHZSZWN0LmhlaWdodCkKLSAgICAgICAgbmV3U2Nyb2xsT2Zmc2V0Lnkg
PSBtYXgoMCwgdlJlY3QuaGVpZ2h0IC0gY1JlY3QuaGVpZ2h0KTsKLQotICAgIGlmIChuZXdTY3Jv
bGxPZmZzZXQgPT0gc2Nyb2xsT2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEt
PnZpZXdTdGFydCA9IG5ld1Njcm9sbE9mZnNldDsKLQotICAgIHd4UG9pbnQgZGVsdGEob3JpZyAt
IG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBpZiAoY2FuQmxpdE9uU2Nyb2xsKCkpCi0gICAgICAg
IHdpbi0+U2Nyb2xsV2luZG93KGRlbHRhLngsIGRlbHRhLnkpOwotICAgIGVsc2UKLSAgICAgICAg
d2luLT5SZWZyZXNoKCk7Ci0KLSAgICBhZGp1c3RTY3JvbGxiYXJzKCk7Ci19Ci0KLWJvb2wgU2Ny
b2xsVmlldzo6cGxhdGZvcm1TY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNTaXplKCkKLXsKLSAgICB3eFdpbmRvdyog
d2luID0gcGxhdGZvcm1XaWRnZXQoKTsKLSAgICBpZiAoIXdpbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgd2luLT5TZXRWaXJ0dWFsU2l6ZShtX2NvbnRlbnRzU2l6ZS53aWR0aCgpLCBtX2NvbnRl
bnRzU2l6ZS5oZWlnaHQoKSk7Ci0gICAgYWRqdXN0U2Nyb2xsYmFycygpOwotfQotCi12b2lkIFNj
cm9sbFZpZXc6OmFkanVzdFNjcm9sbGJhcnMoaW50IHgsIGludCB5LCBib29sIHJlZnJlc2gpCi17
Ci0gICAgd3hXaW5kb3cqIHdpbiA9IHBsYXRmb3JtV2lkZ2V0KCk7Ci0gICAgaWYgKCF3aW4pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHd4UmVjdCBjcmVjdCh3aW4tPkdldENsaWVudFJlY3QoKSks
IHZyZWN0KHdpbi0+R2V0VmlydHVhbFNpemUoKSk7Ci0KLSAgICBpZiAoeCA9PSAtMSkgeCA9IG1f
ZGF0YS0+dmlld1N0YXJ0Lng7Ci0gICAgaWYgKHkgPT0gLTEpIHkgPSBtX2RhdGEtPnZpZXdTdGFy
dC55OwotCi0gICAgbG9uZyBzdHlsZSA9IHdpbi0+R2V0V2luZG93U3R5bGUoKTsKLQotICAgIC8v
IGJ5IHNldHRpbmcgdGhlIHd4QUxXQVlTX1NIT1dfU0Igd3hXaW5kb3cgZmxhZyBiZWZvcmUKLSAg
ICAvLyBlYWNoIFNldFNjcm9sbGJhciBjYWxsLCB3ZSBjYW4gY29udHJvbCB0aGUgc2Nyb2xsYmFy
cwotICAgIC8vIHZpc2liaWxpdHkgaW5kaXZpZHVhbGx5LgotCi0gICAgLy8gaG9yaXpvbnRhbCBz
Y3JvbGxiYXIKLSAgICBzd2l0Y2ggKG1fZGF0YS0+aFNjcm9sbGJhck1vZGUpIHsKLSAgICAgICAg
Y2FzZSBTY3JvbGxiYXJBbHdheXNPZmY6Ci0gICAgICAgICAgICB3aW4tPlNldFdpbmRvd1N0eWxl
RmxhZyhzdHlsZSAmIH53eEFMV0FZU19TSE9XX1NCKTsKLSAgICAgICAgICAgIHdpbi0+U2V0U2Ny
b2xsYmFyKHd4SE9SSVpPTlRBTCwgMCwgMCwgMCwgcmVmcmVzaCk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIFNjcm9sbGJhckF1dG86Ci0gICAgICAgICAgICB3aW4tPlNldFdp
bmRvd1N0eWxlRmxhZyhzdHlsZSAmIH53eEFMV0FZU19TSE9XX1NCKTsKLSAgICAgICAgICAgIHdp
bi0+U2V0U2Nyb2xsYmFyKHd4SE9SSVpPTlRBTCwgeCwgY3JlY3Qud2lkdGgsIHZyZWN0LndpZHRo
LCByZWZyZXNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6IC8vIFNj
cm9sbGJhckFsd2F5c09uCi0gICAgICAgICAgICB3aW4tPlNldFdpbmRvd1N0eWxlRmxhZyhzdHls
ZSB8IHd4QUxXQVlTX1NIT1dfU0IpOwotICAgICAgICAgICAgd2luLT5TZXRTY3JvbGxiYXIod3hI
T1JJWk9OVEFMLCB4LCBjcmVjdC53aWR0aCwgdnJlY3Qud2lkdGgsIHJlZnJlc2gpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gdmVydGljYWwgc2Nyb2xsYmFyCi0gICAgc3dp
dGNoIChtX2RhdGEtPnZTY3JvbGxiYXJNb2RlKSB7Ci0gICAgICAgIGNhc2UgU2Nyb2xsYmFyQWx3
YXlzT2ZmOgotICAgICAgICAgICAgd2luLT5TZXRXaW5kb3dTdHlsZUZsYWcoc3R5bGUgJiB+d3hB
TFdBWVNfU0hPV19TQik7Ci0gICAgICAgICAgICB3aW4tPlNldFNjcm9sbGJhcih3eFZFUlRJQ0FM
LCAwLCAwLCAwLCByZWZyZXNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
U2Nyb2xsYmFyQWx3YXlzT246Ci0gICAgICAgICAgICB3aW4tPlNldFdpbmRvd1N0eWxlRmxhZyhz
dHlsZSB8IHd4QUxXQVlTX1NIT1dfU0IpOwotICAgICAgICAgICAgd2luLT5TZXRTY3JvbGxiYXIo
d3hWRVJUSUNBTCwgeSwgY3JlY3QuaGVpZ2h0LCB2cmVjdC5oZWlnaHQsIHJlZnJlc2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDogLy8gY2FzZSBTY3JvbGxiYXJBdXRv
OgotICAgICAgICAgICAgd2luLT5TZXRXaW5kb3dTdHlsZUZsYWcoc3R5bGUgJiB+d3hBTFdBWVNf
U0hPV19TQik7Ci0gICAgICAgICAgICB3aW4tPlNldFNjcm9sbGJhcih3eFZFUlRJQ0FMLCB5LCBj
cmVjdC5oZWlnaHQsIHZyZWN0LmhlaWdodCwgcmVmcmVzaCk7Ci0gICAgfQotfQotCi12b2lkIFNj
cm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyTW9kZXMoKQotewotICAgIGJvb2wgbmVlZHNB
ZGp1c3QgPSBmYWxzZTsKLQotICAgIGlmIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IGhvcml6
b250YWxTY3JvbGxiYXJNb2RlKCkgKSB7Ci0gICAgICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUg
PSBob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSgpOwotICAgICAgICBuZWVkc0FkanVzdCA9IHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgIT0gdmVydGljYWxTY3Jv
bGxiYXJNb2RlKCkgKSB7Ci0gICAgICAgIG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgPSB2ZXJ0aWNh
bFNjcm9sbGJhck1vZGUoKTsKLSAgICAgICAgbmVlZHNBZGp1c3QgPSB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChuZWVkc0FkanVzdCkKLSAgICAgICAgYWRqdXN0U2Nyb2xsYmFycygpOwotfQotCi12
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSYgaG9y
aXpvbnRhbCwgU2Nyb2xsYmFyTW9kZSYgdmVydGljYWwpIGNvbnN0Ci17Ci0gICAgaG9yaXpvbnRh
bCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7Ci0gICAgdmVydGljYWwgPSBtX2RhdGEtPnZTY3Jv
bGxiYXJNb2RlOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q2FuQmxpdE9uU2Ny
b2xsKGJvb2wgY2FuQmxpdE9uU2Nyb2xsKQotewotICAgIG1fY2FuQmxpdE9uU2Nyb2xsID0gY2Fu
QmxpdE9uU2Nyb2xsOwotfQotCi1ib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtQ2FuQmxpdE9uU2Ny
b2xsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jYW5CbGl0T25TY3JvbGw7Ci19Ci0KLS8vIHVz
ZWQgZm9yIHN1YmZyYW1lcyBzdXBwb3J0Ci12b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hp
bGQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gTkI6IEluIGFsbCBjYXNlcyBJJ20gYXdhcmUg
b2YsCi0gICAgLy8gYnkgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQgdGhlIFNjcm9sbFZpZXcgaXMg
YWxyZWFkeSBhIGNoaWxkCi0gICAgLy8gb2YgaXRzIHBhcmVudCBXaWRnZXQgYnkgd3ggcG9ydCBB
UElzLCBzbyBJIGRvbid0IHRoaW5rCi0gICAgLy8gd2UgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJl
LgotfQotCi12b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVtb3ZlQ2hpbGQoV2lkZ2V0KiB3aWRn
ZXQpCi17Ci0gICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgcGxhdGZvcm1XaWRn
ZXQoKS0+UmVtb3ZlQ2hpbGQod2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKTsKLSAgICAgICAgLy8g
RklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIGRlbGV0aW9uPyBJIHNlZQotICAg
ICAgICAvLyBkZXRhY2hGcm9tUGFyZW50Mi8zLzQsIGluaXRpYXRlZCBieSBGcmFtZUxvYWRlcjo6
ZGV0YWNoRnJvbVBhcmVudCwKLSAgICAgICAgLy8gYnV0IEknbSBub3Qgc3VyZSBpZiBpdCdzIGJl
dHRlciB0byBoYW5kbGUgdGhlcmUgb3Igbm90LgotICAgICAgICB3aWRnZXQtPnBsYXRmb3JtV2lk
Z2V0KCktPkRlc3Ryb3koKTsKLSAgICB9Ci19Ci0KLUludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZv
cm1Db250ZW50c1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgaWYg
KHBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgd3hSZWN0IHd4cmVjdCA9IHJlY3Q7Ci0gICAg
ICAgIHBsYXRmb3JtV2lkZ2V0KCktPkNsaWVudFRvU2NyZWVuKCZ3eHJlY3QueCwgJnd4cmVjdC55
KTsKLSAgICAgICAgcmV0dXJuIHd4cmVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QoKTsK
LX0KLQotSW50UG9pbnQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0NvbnRlbnRzKGNvbnN0
IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgewot
ICAgICAgICByZXR1cm4gcGxhdGZvcm1XaWRnZXQoKS0+U2NyZWVuVG9DbGllbnQocG9pbnQpOwot
ICAgIH0KLSAgICByZXR1cm4gSW50UG9pbnQoKTsKLX0KLQotYm9vbCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybUlzT2Zmc2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIXBsYXRmb3JtV2lkZ2V0KCkg
fHwgIXBsYXRmb3JtV2lkZ2V0KCktPklzU2hvd25PblNjcmVlbigpOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiYWRmMzE1NTQwNWE2YTUxMzY2MjMyNWI5MjM1OWRjODEzYTk1
MjQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjA5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lV3gu
aCIKLQotLy8gc2VlIGh0dHA6Ly90cmFjLnd4d2lkZ2V0cy5vcmcvdGlja2V0LzExNDgyCi0vLyB3
ZSBuZWVkIHRvIGluY2x1ZGUgdGhpcyBiZWZvcmUgTG9jYWxEQyBhcyBpdCBpbmNsdWRlcyB3eCBo
ZWFkZXJzCi0jaWZkZWYgX19XWE1TV19fCi0jICAgaW5jbHVkZSAid3gvbXN3L3dpbnVuZGVmLmgi
Ci0jZW5kaWYKLQotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJMb2NhbERDLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgotI2luY2x1ZGUgInNjcm9sbGJhcl9yZW5kZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZS5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLQotI2luY2x1ZGUgPHd4L2Rl
ZnMuaD4KLSNpbmNsdWRlIDx3eC9kY2dyYXBoLmg+Ci0jaW5jbHVkZSA8d3gvc2V0dGluZ3MuaD4K
LQotY29uc3QgaW50IGNNYWNCdXR0b25PdmVybGFwID0gNDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1TY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAg
ICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWVXeCB0aGVtZTsKLSAgICByZXR1cm4gJnRoZW1lOwotfQot
Ci1TY3JvbGxiYXJUaGVtZVd4Ojp+U2Nyb2xsYmFyVGhlbWVXeCgpCi17Ci19Ci0KLWludCBTY3Jv
bGxiYXJUaGVtZVd4OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6
ZSkKLXsKLSAgICBpbnQgdGhpY2tuZXNzID0gd3hTeXN0ZW1TZXR0aW5nczo6R2V0TWV0cmljKHd4
U1lTX1ZTQ1JPTExfWCk7Ci0gICAgCi0gICAgLy8gZmFsbGJhY2sgZm9yIHdoZW4gYSBwbGF0Zm9y
bSBkb2Vzbid0IGRlZmluZSB0aGlzIG1ldHJpYwotICAgIGlmICh0aGlja25lc3MgPD0gMCkKLSAg
ICAgICAgdGhpY2tuZXNzID0gMjA7Ci0gICAgCi0gICAgcmV0dXJuIHRoaWNrbmVzczsKLX0KLQot
Ym9vbCBTY3JvbGxiYXJUaGVtZVd4OjpoYXNUaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyKQotewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGp1c3QgY2FsbGVkIGFzIGEgcGFpbnQt
dGltZSBvcHRpbWl6YXRpb24gdG8gc2VlIGlmCi0gICAgLy8gcGFpbnRpbmcgdGhlIHRodW1iIGNh
biBiZSBza2lwcGVkLiAgV2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFjdCBoZXJlLgotICAgIHJldHVy
biB0aHVtYkxlbmd0aChzY3JvbGxiYXIpID4gMDsKLX0KLQotaW50IFNjcm9sbGJhclRoZW1lV3g6
Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyKQotewot
ICAgIHJldHVybiAyMDsKLX0KLQotSW50U2l6ZSBTY3JvbGxiYXJUaGVtZVd4OjpidXR0b25TaXpl
KFNjcm9sbGJhclRoZW1lQ2xpZW50KikgCi17Ci0jaWZkZWYgX19XWE1BQ19fCi0gICAgcmV0dXJu
IEludFNpemUoMjAsMjApOwotI2Vsc2UKLSAgICByZXR1cm4gSW50U2l6ZSgxNiwxNik7Ci0jZW5k
aWYKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZVd4OjpzcGxpdFRyYWNrKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHVuY29uc3RyYWluZWRUcmFja1JlY3Qs
IEludFJlY3QmIGJlZm9yZVRodW1iUmVjdCwgSW50UmVjdCYgdGh1bWJSZWN0LCBJbnRSZWN0JiBh
ZnRlclRodW1iUmVjdCkKLXsKLSAgICBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFj
ayhzY3JvbGxiYXIsIHVuY29uc3RyYWluZWRUcmFja1JlY3QsIGJlZm9yZVRodW1iUmVjdCwgdGh1
bWJSZWN0LCBhZnRlclRodW1iUmVjdCk7Ci0jaWZkZWYgX19XWE1BQ19fCi0gICAgLy8gb24gTWFj
LCB0aGVyZSBhcmUgYSBmZXcgcGl4ZWxzIGRyYXduIGFib3ZlIHRoZSBhY3R1YWwgdHJhY2sgYW5k
IHNvIGFkanVzdAotICAgIC8vIHRoZSBoaXQgdGVzdGluZyByZWN0cyBhY2NvcmRpbmdseQotICAg
IGludCB0cmFja1N0YXJ0ID0gMTA7IAotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICB0aHVtYlJlY3Quc2V0WCh0aHVtYlJl
Y3QueCgpICsgdHJhY2tTdGFydCk7Ci0gICAgICAgIGFmdGVyVGh1bWJSZWN0LnNldFgoYWZ0ZXJU
aHVtYlJlY3QueCgpIC0gdHJhY2tTdGFydCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGh1bWJS
ZWN0LnNldFkodGh1bWJSZWN0LnkoKSArIHRyYWNrU3RhcnQpOwotICAgICAgICBhZnRlclRodW1i
UmVjdC5zZXRZKGFmdGVyVGh1bWJSZWN0LnkoKSAtIHRyYWNrU3RhcnQpOwotICAgIH0KLSNlbmRp
ZgotfQotCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCkKLXsKLSAg
ICAvLyBGSVhNRTogSGFuZGxpbmcgdGhpcyBjYXNlIGlzIG5lZWRlZCB3aGVuIHRoZXJlIGFyZSB0
d28gc2V0cyBvZiBhcnJvdyBidXR0b25zCi0gICAgLy8gb24gTWFjLCBvbmUgYXQgdGhlIHRvcCBh
bmQgb25lIGF0IHRoZSBib3R0b20uCi0gICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRTaXplIHNpemUgPSBidXR0b25T
aXplKHNjcm9sbGJhcik7Ci0gICAgaW50IHggPSBzY3JvbGxiYXItPngoKTsKLSAgICBpbnQgeSA9
IHNjcm9sbGJhci0+eSgpOwotICAgIAotI2lmIF9fV1hNQUNfXwotICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgeCArPSBzY3Jv
bGxiYXItPndpZHRoKCkgLSAoc2l6ZS53aWR0aCgpICogMikgKyBjTWFjQnV0dG9uT3ZlcmxhcDsK
LSAgICBlbHNlCi0gICAgICAgIHkgKz0gc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIChzaXplLmhlaWdo
dCgpICogMikgKyBjTWFjQnV0dG9uT3ZlcmxhcDsKLSNlbmRpZgotICAgIAotICAgIHJldHVybiBJ
bnRSZWN0KHgsIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLUludFJlY3Qg
U2Nyb2xsYmFyVGhlbWVXeDo6Zm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQotewotICAgIC8vIEZJWE1FOiBI
YW5kbGluZyB0aGlzIGNhc2UgaXMgbmVlZGVkIHdoZW4gdGhlcmUgYXJlIHR3byBzZXRzIG9mIGFy
cm93IGJ1dHRvbnMKLSAgICAvLyBvbiBNYWMsIG9uZSBhdCB0aGUgdG9wIGFuZCBvbmUgYXQgdGhl
IGJvdHRvbS4KLSAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShzY3Jv
bGxiYXIpOwotICAgIGludCB4LCB5OwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotI2lmZGVmIF9fV1hNQUNfXwotICAgICAgICBzaXpl
LnNldFdpZHRoKHNpemUud2lkdGgoKSArIGNNYWNCdXR0b25PdmVybGFwKTsKLSNlbmRpZgotICAg
ICAgICB4ID0gc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBzaXplLndpZHRo
KCk7Ci0gICAgICAgIHkgPSBzY3JvbGxiYXItPnkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICB4
ID0gc2Nyb2xsYmFyLT54KCk7Ci0jaWZkZWYgX19XWE1BQ19fCi0gICAgICAgIHNpemUuc2V0SGVp
Z2h0KHNpemUuaGVpZ2h0KCkgKyBjTWFjQnV0dG9uT3ZlcmxhcCk7Ci0jZW5kaWYKLSAgICAgICAg
eSA9IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCk7
Ci0gICAgfQotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXeDo6dHJhY2tSZWN0KFNjcm9sbGJh
clRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGJvb2wpCi17Ci0gICAgSW50U2l6ZSBicyA9IGJ1dHRv
blNpemUoc2Nyb2xsYmFyKTsKLSAgICBpbnQgdHJhY2tTdGFydCA9IDA7Ci0gICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICB0cmFj
a1N0YXJ0ID0gYnMud2lkdGgoKTsKLSAgICBlbHNlCi0gICAgICAgIHRyYWNrU3RhcnQgPSBicy5o
ZWlnaHQoKTsKLSAgICAgICAgCi0jaWYgX19XWE1BQ19fCi0gICAgdHJhY2tTdGFydCA9IDA7Ci0j
ZW5kaWYKLSAgICAKLSAgICBpbnQgdGhpY2tuZXNzID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9s
bGJhci0+Y29udHJvbFNpemUoKSk7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXItPndpZHRoKCkg
PCAyICogdGhpY2tuZXNzKQotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAgICAg
cmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyB0cmFja1N0YXJ0LCBzY3JvbGxiYXItPnko
KSwgc2Nyb2xsYmFyLT53aWR0aCgpIC0gMiAqIGJzLndpZHRoKCksIHRoaWNrbmVzcyk7Ci0gICAg
fQotICAgIGlmIChzY3JvbGxiYXItPmhlaWdodCgpIDwgMiAqIHRoaWNrbmVzcykKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Ny
b2xsYmFyLT55KCkgKyB0cmFja1N0YXJ0LCB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkg
LSAyICogYnMuaGVpZ2h0KCkpOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lV3g6OnBhaW50KFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICB3eE9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0g
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IHd4SE9S
SVpPTlRBTCA6IHd4VkVSVElDQUw7Ci0gICAgaW50IGZsYWdzID0gMDsKLSAgICBpZiAoc2Nyb2xs
YmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZlKCkpCi0gICAgICAgIGZsYWdzIHw9IHd4Q09OVFJP
TF9GT0NVU0VEOwotICAgIAotICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAg
IGZsYWdzIHw9IHd4Q09OVFJPTF9ESVNBQkxFRDsKLSAgICAKLSAgICB3eERDKiBkYyA9IHN0YXRp
Y19jYXN0PHd4REMqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgCi0gICAgU2Ny
b2xsVmlldyogcm9vdCA9IHNjcm9sbGJhci0+cm9vdCgpOwotICAgIEFTU0VSVChyb290KTsKLSAg
ICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB3eFdpbmRvdyog
d2VidmlldyA9IHJvb3QtPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAg
TG9jYWxEQyBsb2NhbERDKGRjLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAKLSAgICB3
eFJlbmRlcmVyX0RyYXdTY3JvbGxiYXIod2VidmlldywgKmxvY2FsREMuY29udGV4dCgpLCBzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLCBvcmllbnRhdGlvbiwgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCks
IHN0YXRpY19jYXN0PHd4U2Nyb2xsYmFyUGFydD4oc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKSwg
ICAgCi0gICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx3eFNjcm9sbGJhclBhcnQ+KHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSksIHNjcm9sbGJhci0+bWF4aW11bSgpLCBzY3JvbGxiYXIt
PnBhZ2VTdGVwKCksIGZsYWdzKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzcyYWFmOTY2MmY3NDVkNGVlMDc0N2VkZjVjMTFmOWZjNWFkODk1
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVXeF9oCi0jZGVmaW5lIFNjcm9sbGJhclRoZW1lV3hf
aAotCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGJhclRo
ZW1lV3ggOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgewotcHVibGljOgotICAgIHZp
cnR1YWwgflNjcm9sbGJhclRoZW1lV3goKTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGhhc0J1
dHRvbnMoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIGhhc1RodW1iKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Ci0KLSAgICB2aXJ0dWFsIElu
dFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXJUaGVtZUNsaWVudCopOwotCi0gICAgdmlydHVhbCBJ
bnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFy
dCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1
dHRvblJlY3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50
aW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0cmFja1JlY3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBib29sIHBhaW50aW5nID0gZmFsc2UpOwotCi0gICAgdmlydHVhbCB2b2lkIHNw
bGl0VHJhY2soU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRSZWN0JiB0cmFjaywgSW50
UmVjdCYgc3RhcnRUcmFjaywgSW50UmVjdCYgdGh1bWIsIEludFJlY3QmIGVuZFRyYWNrKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqKTsKLX07Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvU2VhcmNoUG9wdXBNZW51V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
U2VhcmNoUG9wdXBNZW51V3guY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzI0
Y2YxN2IxZmRlNmFmZjk3N2UxNjdhYzI4OWY2NTI2MjFhNTc5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Nl
YXJjaFBvcHVwTWVudVd4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnVXeC5oIgotCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TZWFyY2hQ
b3B1cE1lbnVXeDo6U2VhcmNoUG9wdXBNZW51V3goUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0g
ICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVXeChjbGllbnQpKSkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFNlYXJjaFBvcHVwTWVudVd4OjpzYXZlUmVjZW50
U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
c2VhcmNoSXRlbXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTZWFyY2hQ
b3B1cE1lbnVXeDo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
VmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgU2VhcmNoUG9wdXBNZW51V3g6OmVuYWJsZWQoKQotewotICAgIHJldHVybiB0cnVl
OwotfQotCi1Qb3B1cE1lbnUqIFNlYXJjaFBvcHVwTWVudVd4Ojpwb3B1cE1lbnUoKQotewotICAg
IHJldHVybiBtX3BvcHVwLmdldCgpOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L1NlYXJjaFBvcHVwTWVudVd4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC9TZWFyY2hQb3B1cE1lbnVXeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1NTJhOGZlODk1ZmY4NGVjZTQ5NDNhM2Y5MjhmN2NkZjIyY2JiOTYwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3d4L1NlYXJjaFBvcHVwTWVudVd4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgU2VhcmNoUG9wdXBNZW51V3hfaAotI2RlZmluZSBT
ZWFyY2hQb3B1cE1lbnVXeF9oCi0KLSNpbmNsdWRlICJQb3B1cE1lbnVXeC5oIgotI2luY2x1ZGUg
IlNlYXJjaFBvcHVwTWVudS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNlYXJj
aFBvcHVwTWVudVd4IDogcHVibGljIFNlYXJjaFBvcHVwTWVudSB7Ci1wdWJsaWM6Ci0gICAgU2Vh
cmNoUG9wdXBNZW51V3goUG9wdXBNZW51Q2xpZW50Kik7Ci0KLSAgICB2aXJ0dWFsIFBvcHVwTWVu
dSogcG9wdXBNZW51KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcyk7Ci0gICAgdmlydHVhbCBib29sIGVu
YWJsZWQoKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8UG9wdXBNZW51V3g+IG1fcG9wdXA7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBTZWFyY2hQb3B1cE1lbnVXeF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TaGFyZWRCdWZmZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9TaGFyZWRCdWZmZXJXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE5MjAzYmE3OGY3N2RkODM0ZWVmYWE3ZTJhYTkwYmMwYTlmZjRkMDIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvU2hhcmVkQnVmZmVyV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJp
bmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2hhcmVkVGltZXJXeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TaGFyZWRUaW1lcld4LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWFmM2JkZTFhNGFkZTU1ODljNjhhODgyNjdiYzFmMzFiYTYx
ZTFmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TaGFyZWRUaW1lcld4LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIg
PGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAid3gvZGVmcy5oIgotI2luY2x1ZGUgInd4L3RpbWVy
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZvaWQgKCpzaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24pKCk7Ci0KLWNsYXNzIFdlYktpdFRpbWVyOiBwdWJsaWMgd3hUaW1lcgotewot
ICAgIHB1YmxpYzoKLSAgICAgICAgV2ViS2l0VGltZXIoKTsKLSAgICAgICAgfldlYktpdFRpbWVy
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBOb3RpZnkoKTsKLX07Ci0KLVdlYktpdFRpbWVyOjpX
ZWJLaXRUaW1lcigpCi17Ci19Ci0KLVdlYktpdFRpbWVyOjp+V2ViS2l0VGltZXIoKQotewotfQot
Ci12b2lkIFdlYktpdFRpbWVyOjpOb3RpZnkoKQotewotICAgIHNoYXJlZFRpbWVyRmlyZWRGdW5j
dGlvbigpOwotfQotCi1zdGF0aWMgV2ViS2l0VGltZXIqIHdrVGltZXI7IAotCi12b2lkIHNldFNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKLXsKLSAgICBzaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24gPSBmOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRv
dWJsZSBpbnRlcnZhbCkKLXsKLSAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKTsK
LSAgICAKLSAgICBpZiAoIXdrVGltZXIpCi0gICAgICAgIHdrVGltZXIgPSBuZXcgV2ViS2l0VGlt
ZXIoKTsKLSAgICAgICAgCi0gICAgaW50IGludGVydmFsSW5NUyA9IGludGVydmFsICogMTAwMDsK
LQotICAgIC8vIHNhbml0eSBjaGVjawotICAgIGlmIChpbnRlcnZhbEluTVMgPCAxKQotICAgICAg
ICBpbnRlcnZhbEluTVMgPSAxOwotCi0gICAgd2tUaW1lci0+U3RhcnQoaW50ZXJ2YWxJbk1TLCB3
eFRJTUVSX09ORV9TSE9UKTsKLX0KLQotdm9pZCBzdG9wU2hhcmVkVGltZXIoKQotewotICAgIGlm
ICh3a1RpbWVyKQotICAgICAgICB3a1RpbWVyLT5TdG9wKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NvdW5kV3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvU291bmRXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4
ZDBlNTM5ODQyZjNjMmM2OGY4N2Y2MTg4YWQ0ZTA0MDdmNjBmZTYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
U291bmRXeC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KLSAq
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC91dGlscy5oPgotCi0jaW5jbHVkZSAi
U291bmQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHN5c3RlbUJlZXAoKQotewot
ICAgIHd4QmVsbCgpOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TeXN0ZW1UaW1lV3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvU3lzdGVtVGltZVd4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjY4ZWMwMDBlODlhMWYxMmIzNjY5Mjc5NTI0NzA4NjUzMzI3MmJlNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93eC9TeXN0ZW1UaW1lV3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ZmxvYXQgdXNlcklkbGVUaW1lKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIC8vIFJl
dHVybiBhbiBhcmJpdHJhcmlseSBoaWdoIHVzZXJJZGxlVGltZSBzbyB0aGF0IHJlbGVhc2luZyBw
YWdlcyBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzbid0IHBvc3Rwb25lZC4KLSAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIy
OWFlNzc1YWQ4YzJlNDhjNTM5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY4NDBlMTNjMDgyYzY5ZDNjM2I5NWQxOGJmMDM3YWI2NDFhYmUxYWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVVd4LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFyKiBjdXJyZW50
U2VhcmNoTG9jYWxlSUQoKQotewotICAgIHJldHVybiAiIjsKLX0KLQotY29uc3QgY2hhciogY3Vy
cmVudFRleHRCcmVha0xvY2FsZUlEKCkKLXsKLSAgICByZXR1cm4gImVuX3VzIjsKLX0KLQotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9XaWRnZXRXeC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9XaWRnZXRXeC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU5YTNjOTgyYWE3NTQ3Y2YwMDM2OTk2OWU1MDNjYjFjOTgzYjdiOTEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvV2lkZ2V0V3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVv
bGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2lkZ2V0
LmgiCi0KLSNpbmNsdWRlICJDdXJzb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotCi0jaW5jbHVkZSA8
d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L3Njcm9sd2luLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQotewotICAgIGluaXQo
d2lkZ2V0KTsKLX0KLQotV2lkZ2V0Ojp+V2lkZ2V0KCkKLXsKLX0KLQotdm9pZCBXaWRnZXQ6OnNl
dEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNlZCkgewotICAgICAgICBpZiAo
UGxhdGZvcm1XaWRnZXQgd2lkZ2V0ID0gcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgICAgIHdp
ZGdldC0+U2V0Rm9jdXMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgU2Nyb2xsVmlldyogdmlldyA9IHJvb3QoKTsKLSAg
ICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICB2aWV3LT5ob3N0V2luZG93KCktPnNl
dEN1cnNvcihjdXJzb3IpOwotfQotCi12b2lkIFdpZGdldDo6c2hvdygpCi17Ci0gICAgaWYgKFBs
YXRmb3JtV2lkZ2V0IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHdpZGdldC0+
U2hvdygpOwotfQotCi12b2lkIFdpZGdldDo6aGlkZSgpCi17Ci0gICAgaWYgKFBsYXRmb3JtV2lk
Z2V0IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHdpZGdldC0+SGlkZSgpOwot
fQotCi1JbnRSZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29uc3QKLXsKLSAgICBpZiAoUGxhdGZv
cm1XaWRnZXQgd2lkZ2V0ID0gcGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIHdpZGdl
dC0+R2V0UmVjdCgpOwotICAgIAotICAgIHJldHVybiBtX2ZyYW1lOwotfQotCi12b2lkIFdpZGdl
dDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKFBsYXRmb3Jt
V2lkZ2V0IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHdpZGdldC0+U2V0U2l6
ZShyZWN0KTsKLSAgICAKLSAgICBtX2ZyYW1lID0gcmVjdDsKLX0KLQotdm9pZCBXaWRnZXQ6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKFBsYXRmb3JtV2lkZ2V0
IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHdpZGdldC0+UmVmcmVzaFJlY3Qo
cik7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqLGNvbnN0IEludFJl
Y3QmIHIpCi17Ci0gICAgaW52YWxpZGF0ZVJlY3Qocik7Ci0gICAgaWYgKFBsYXRmb3JtV2lkZ2V0
IHdpZGdldCA9IHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHdpZGdldC0+VXBkYXRlKCk7Ci19
Ci0KLXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hj
b2RlL2NhaXJvL25vbi1rZXJuZWQtZHJhd2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC93eGNvZGUvY2Fpcm8vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDZkZGM2ZTI5NTkzODFhYzU5YzFkN2M1OWNkOWZiZmM4YTVlMDI4NC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC93eGNvZGUvY2Fpcm8vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEtl
dmluIFdhdHRlcnMsIEtldmluIE9sbGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotCi0jaW5j
bHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHd4L2RjLmg+Ci0jaW5jbHVkZSA8d3gvZGNjbGllbnQu
aD4KLSNpbmNsdWRlIDx3eC9kY2dyYXBoLmg+Ci0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1
ZGUgPHd4L2dkaWNtbi5oPgotCi0jaWYgVVNFKFdYR0MpCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNp
ZiBfX1dYTVNXX18KLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8
YXNzZXJ0Lmg+Ci0KLSNpZiB3eFVTRV9QQU5HTwotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+Ci0j
aW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotCi0vLyBVc2UgY2Fpcm8tZnQgaWYgYSByZWNl
bnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxlCi0jaWYgIVBBTkdPX1ZFUlNJ
T05fQ0hFQ0soMSwxOCwwKQotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8cGFuZ28v
cGFuZ29mYy1mb250bWFwLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLy8gVVNFKFdYR0Mp
Ci0KLSNpZiBfX1dYR1RLX18KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0jaWYgd3hVU0VfUEFOR08KLXN0YXRpYyBQYW5nb0ZvbnRNYXAqIGdf
Zm9udE1hcDsKLQotUGFuZ29Gb250TWFwKiBwYW5nb0ZvbnRNYXAoKQotewotICAgIGlmICghZ19m
b250TWFwKQotICAgICAgICBnX2ZvbnRNYXAgPSBwYW5nb19jYWlyb19mb250X21hcF9nZXRfZGVm
YXVsdCgpOwotCi0gICAgcmV0dXJuIGdfZm9udE1hcDsKLX0KLQotUGFuZ29Gb250KiBjcmVhdGVQ
YW5nb0ZvbnRGb3JGb250KGNvbnN0IHd4Rm9udCogd3hmb250KQotewotICAgIEFTU0VSVCh3eGZv
bnQgJiYgd3hmb250LT5PaygpKTsKLQotICAgIGNvbnN0IGNoYXIqIGZhY2UgPSB3eGZvbnQtPkdl
dEZhY2VOYW1lKCkubWJfc3RyKHd4Q29udlVURjgpOwotICAgIGNoYXIgY29uc3QqIGZhbWlsaWVz
W10gPSB7Ci0gICAgICAgIGZhY2UsCi0gICAgICAgIDAKLSAgICB9OwotCi0gICAgc3dpdGNoICh3
eGZvbnQtPkdldEZhbWlseSgpKSB7Ci0gICAgY2FzZSB3eEZPTlRGQU1JTFlfUk9NQU46Ci0gICAg
ICAgIGZhbWlsaWVzWzFdID0gInNlcmlmIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3eEZP
TlRGQU1JTFlfU1dJU1M6Ci0gICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIHd4Rk9OVEZBTUlMWV9NT0RFUk46Ci0gICAgICAgIGZhbWlsaWVzWzFd
ID0gIm1vbm9zcGFjZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZh
bWlsaWVzWzFdID0gInNhbnMiOwotICAgIH0KLSAgICAKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlv
biogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldygpOwotICAgIHBhbmdv
X2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUoZGVzY3JpcHRpb24sIHd4Zm9udC0+
R2V0UG9pbnRTaXplKCkgKiBQQU5HT19TQ0FMRSk7Ci0gCi0gICAgUGFuZ29Gb250KiBwYW5nb0Zv
bnQgPSAwOwotICAgIFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gMDsKLQotICAgIHN3aXRj
aCAod3hmb250LT5HZXRXZWlnaHQoKSkgewotICAgIGNhc2Ugd3hGT05UV0VJR0hUX0xJR0hUOgot
ICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBB
TkdPX1dFSUdIVF9MSUdIVCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd3hGT05UV0VJR0hU
X05PUk1BTDoKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2VpZ2h0KGRlc2Ny
aXB0aW9uLCBQQU5HT19XRUlHSFRfTk9STUFMKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSB3
eEZPTlRXRUlHSFRfQk9MRDoKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2Vp
Z2h0KGRlc2NyaXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHN3aXRjaCAod3hmb250LT5HZXRTdHlsZSgpKSB7Ci0gICAgY2FzZSB3eEZPTlRT
VFlMRV9OT1JNQUw6Ci0gICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X3N0eWxlKGRl
c2NyaXB0aW9uLCBQQU5HT19TVFlMRV9OT1JNQUwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IHd4Rk9OVFNUWUxFX0lUQUxJQzoKLSAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRf
c3R5bGUoZGVzY3JpcHRpb24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Ugd3hGT05UU1RZTEVfU0xBTlQ6Ci0gICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRp
b25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9PQkxJUVVFKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgUGFuZ29Gb250TWFwKiBmb250TWFwID0gcGFuZ29Gb250TWFw
KCk7Ci0KLSAgICBwYW5nb0NvbnRleHQgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29u
dGV4dChQQU5HT19DQUlST19GT05UX01BUChmb250TWFwKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgIXBhbmdvRm9udCAmJiBpIDwgR19OX0VMRU1FTlRTKGZhbWlsaWVzKTsgaSsrKSB7Ci0g
ICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2ZhbWlseShkZXNjcmlwdGlvbiwgZmFt
aWxpZXNbaV0pOwotICAgICAgICBwYW5nb19jb250ZXh0X3NldF9mb250X2Rlc2NyaXB0aW9uKHBh
bmdvQ29udGV4dCwgZGVzY3JpcHRpb24pOwotICAgICAgICBwYW5nb0ZvbnQgPSBwYW5nb19mb250
X21hcF9sb2FkX2ZvbnQoZm9udE1hcCwgcGFuZ29Db250ZXh0LCBkZXNjcmlwdGlvbik7Ci0gICAg
fQotICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7Ci0KLSAgICBy
ZXR1cm4gcGFuZ29Gb250OwotfQotCi1jYWlyb19zY2FsZWRfZm9udF90KiBjcmVhdGVTY2FsZWRG
b250Rm9yRm9udChjb25zdCB3eEZvbnQqIHd4Zm9udCkKLXsKLSAgICBBU1NFUlQod3hmb250ICYm
IHd4Zm9udC0+T2soKSk7Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0g
TlVMTDsKLSAgICBQYW5nb0ZvbnQqIHBhbmdvRm9udCA9IGNyZWF0ZVBhbmdvRm9udEZvckZvbnQo
d3hmb250KTsKLSAgICAKLSNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKLSAgICBpZiAo
cGFuZ29Gb250KQotICAgICAgICBzY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJl
bmNlKHBhbmdvX2NhaXJvX2ZvbnRfZ2V0X3NjYWxlZF9mb250KFBBTkdPX0NBSVJPX0ZPTlQocGFu
Z29Gb250KSkpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gc2NhbGVkRm9udDsKLX0KLQotUGFuZ29H
bHlwaCBwYW5nb19mb250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCog
Y29udGV4dCwgZ3VuaWNoYXIgd2MpCi17Ci0gICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOwotICAg
IGdjaGFyIGJ1ZmZlcls3XTsKLQotICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4
KHdjLCBidWZmZXIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7Ci0KLSAg
ICBHTGlzdCogaXRlbXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3Ro
LCBOVUxMLCBOVUxMKTsKLQotICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7Ci0g
ICAgICAgIFBhbmdvSXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PFBhbmdvSXRlbSo+KGl0ZW1zLT5k
YXRhKTsKLSAgICAgICAgUGFuZ29Gb250KiB0bXBGb250ID0gaXRlbS0+YW5hbHlzaXMuZm9udDsK
LSAgICAgICAgaXRlbS0+YW5hbHlzaXMuZm9udCA9IGZvbnQ7Ci0KLSAgICAgICAgUGFuZ29HbHlw
aFN0cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOwotICAgICAgICBwYW5n
b19zaGFwZShidWZmZXIsIGxlbmd0aCwgJml0ZW0tPmFuYWx5c2lzLCBnbHlwaHMpOwotCi0gICAg
ICAgIGl0ZW0tPmFuYWx5c2lzLmZvbnQgPSB0bXBGb250OwotCi0gICAgICAgIGlmIChnbHlwaHMt
Pm51bV9nbHlwaHMgPT0gMSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5cGhzWzBd
LmdseXBoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnX3dhcm5pbmcoImRpZG4ndCBnZXQg
MSBnbHlwaCBidXQgJWQiLCBnbHlwaHMtPm51bV9nbHlwaHMpOwotCi0gICAgICAgIHBhbmdvX2ds
eXBoX3N0cmluZ19mcmVlKGdseXBocyk7Ci0gICAgfQotCi0gICAgZ19saXN0X2ZvcmVhY2goaXRl
bXMsIChHRnVuYylwYW5nb19pdGVtX2ZyZWUsIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlKGl0ZW1z
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYgLy8gd3hVU0VfUEFOR08KLQotCi12
b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQotewotI2lmIFVTRShXWEdDKQotICAgIHd4R0NEQyogZGMgPSBz
dGF0aWNfY2FzdDx3eEdDREMqPihncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBkYy0+R2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0g
ICAgZ2MtPlB1c2hTdGF0ZSgpOwotICAgIGNhaXJvX3QqIGNyID0gKGNhaXJvX3QqKWdjLT5HZXRO
YXRpdmVDb250ZXh0KCk7Ci0KLSAgICB3eEZvbnQqIHd4Zm9udCA9IGZvbnQtPmdldFd4Rm9udCgp
OwotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZF9mb250ID0gMDsKLSNpZiB3eFVTRV9Q
QU5HTwotICAgIFBhbmdvRm9udCogcGFuZ29Gb250ID0gY3JlYXRlUGFuZ29Gb250Rm9yRm9udCh3
eGZvbnQpOwotICAgIFBhbmdvRm9udE1hcCogZm9udE1hcCA9IHBhbmdvRm9udE1hcCgpOwotICAg
IFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gcGFuZ29fY2Fpcm9fZm9udF9tYXBfY3JlYXRl
X2NvbnRleHQoUEFOR09fQ0FJUk9fRk9OVF9NQVAoZm9udE1hcCkpOwotICAgIHNjYWxlZF9mb250
ID0gY3JlYXRlU2NhbGVkRm9udEZvckZvbnQod3hmb250KTsgCi0jZWxpZiBfX1dYTVNXX18KLSAg
ICBjYWlyb19tYXRyaXhfdCBzaXplTWF0cml4LCBjdG07Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRf
aWRlbnRpdHkoJmN0bSk7Ci0gICAgaW50IHNpemUgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5zaXpl
KCk7Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJnNpemVNYXRyaXgsIHNpemUsIHNpemUp
OwotCi0gICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9v
cHRpb25zX2NyZWF0ZSgpOwotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19zZXRfYW50aWFsaWFzKGZv
bnRPcHRpb25zLCBDQUlST19BTlRJQUxJQVNfU1VCUElYRUwpOwotICAgIAotICAgIGNhaXJvX2Zv
bnRfZmFjZV90KiB3aW5fZmFjZSA9IGNhaXJvX3dpbjMyX2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2hm
b250KChIRk9OVCl3eGZvbnQtPkdldEhGT05UKCkpOwotICAgIHNjYWxlZF9mb250ID0gY2Fpcm9f
c2NhbGVkX2ZvbnRfY3JlYXRlKHdpbl9mYWNlLCAmc2l6ZU1hdHJpeCwgJmN0bSwgZm9udE9wdGlv
bnMpOyAKLSNlbmRpZgotICAgIEFTU0VSVChzY2FsZWRfZm9udCk7Ci0KLSAgICBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMgPSBjb25zdF9jYXN0PEdseXBoQnVmZmVyR2x5cGgqPihnbHlwaEJ1ZmZl
ci5nbHlwaHMoZnJvbSkpOwotICAgIGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKLQotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsKLSNpZiB3eFVTRV9QQU5HTwotICAg
ICAgICBnbHlwaHNbaV0uaW5kZXggPSBwYW5nb19mb250X2dldF9nbHlwaChwYW5nb0ZvbnQsIHBh
bmdvQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChmcm9tICsgaSkpOwotI2VuZGlmCi0gICAg
ICAgIGdseXBoc1tpXS54ID0gb2Zmc2V0OwotICAgICAgICBnbHlwaHNbaV0ueSA9IHBvaW50Lnko
KTsKLSAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7Ci0g
ICAgfQotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBjb2xvci5SZWQoKS8yNTUuMCwg
Y29sb3IuR3JlZW4oKS8yNTUuMCwgY29sb3IuQmx1ZSgpLzI1NS4wLCBjb2xvci5BbHBoYSgpLzI1
NS4wKTsKLSAgICBjYWlyb19zZXRfc2NhbGVkX2ZvbnQoY3IsIHNjYWxlZF9mb250KTsKLSAgICAK
LSAgICBjYWlyb19zaG93X2dseXBocyhjciwgZ2x5cGhzLCBudW1HbHlwaHMpOwotCi0gICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfZGVzdHJveShzY2FsZWRfZm9udCk7Ci0gICAgZ2MtPlBvcFN0YXRlKCk7
Ci0jZWxzZQotICAgIHd4REMqIGRjID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKLQotICAgIHd4Rm9udCogd3hmb250ID0gZm9udC0+Z2V0V3hGb250KCk7Ci0gICAgaWYgKHd4
Zm9udCAmJiB3eGZvbnQtPklzT2soKSkKLSAgICAgICAgZGMtPlNldEZvbnQoKnd4Zm9udCk7Ci0g
ICAgZGMtPlNldFRleHRGb3JlZ3JvdW5kKGNvbG9yKTsKLQotICAgIC8vIGNvbnZlcnQgZ2x5cGhz
IHRvIHd4U3RyaW5nCi0gICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2FzdDxH
bHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKLSAgICBpbnQgb2Zm
c2V0ID0gcG9pbnQueCgpOwotICAgIHd4U3RyaW5nIHRleHQgPSB3eEVtcHR5U3RyaW5nOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICB0ZXh0
ID0gdGV4dC5BcHBlbmQoKHd4Q2hhcilnbHlwaHNbaV0pOwotICAgICAgICBvZmZzZXQgKz0gZ2x5
cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gdGhlIHkg
cG9pbnQgaXMgYWN0dWFsbHkgdGhlIGJvdHRvbSBwb2ludCBvZiB0aGUgdGV4dCwgdHVybiBpdCBp
bnRvIHRoZSB0b3AKLSAgICBmbG9hdCBoZWlnaHQgPSBmb250LT5hc2NlbnQoKSAtIGZvbnQtPmRl
c2NlbnQoKTsKLSAgICB3eENvb3JkIHlwb2ludCA9ICh3eENvb3JkKSAocG9pbnQueSgpIC0gaGVp
Z2h0KTsKLSAgICAgCi0gICAgZGMtPkRyYXdUZXh0KHRleHQsICh3eENvb3JkKXBvaW50LngoKSwg
eXBvaW50KTsKLSNlbmRpZgotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC93eGNvZGUvZm9udHByb3BzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L3d4Y29kZS9mb250cHJvcHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmQy
MWJkYTc4NWRlMzZiNDQwMDQ5MGZiMWEyYjExMWFjYjc5M2Q0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4
Y29kZS9mb250cHJvcHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5j
b20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLSAKLS8vIHRoaXMgaXMgYSBoYWNreSB3YXkgb2YgZG9pbmcgaXQsIGJ1dCB3ZSBk
b24ndAotLy8gY3VycmVudGx5IGhhdmUgaW5mbyBvbiB3aGljaCBwbGF0Zm9ybSB3ZSdyZSBiZWlu
ZwotLy8gY29tcGlsZWQgZm9yIGRpcmVjdGx5LgotI2lmIF9fV1hNQUNfXwotI2luY2x1ZGUgIm1h
Yy9jYXJib24vZm9udHByb3BzLmNwcCIKLSNlbGlmIF9fV1hNU1dfXwotI2luY2x1ZGUgIndpbi9m
b250cHJvcHMuY3BwIgotI2Vsc2UKLSNpbmNsdWRlICJndGsvZm9udHByb3BzLmNwcCIKLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2ZvbnRwcm9w
cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2ZvbnRwcm9wcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzAyZGIyYmUwZjEzYWJiNjI2OGVkMDgwNGRmZGY3
OWU1ZmVhNjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9mb250cHJvcHMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xs
aXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDx3eC9kZWZz
Lmg+Ci0jaW5jbHVkZSA8d3gvZm9udC5oPgotCi12b2lkIEdldFRleHRFeHRlbnQoIGNvbnN0IHd4
Rm9udCYgZm9udCwgY29uc3Qgd3hTdHJpbmcmIHN0ciwgd3hDb29yZCAqd2lkdGgsIHd4Q29vcmQg
KmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENvb3JkICpkZXNjZW50ID0g
TlVMTCwgd3hDb29yZCAqZXh0ZXJuYWxMZWFkaW5nID0gTlVMTCApOwotCi1jbGFzcyB3eEZvbnRQ
cm9wZXJ0aWVzewotCi1wdWJsaWM6Ci0gICAgd3hGb250UHJvcGVydGllcyh3eEZvbnQqIGZvbnQp
OwotICAgIGZsb2F0IEdldEFzY2VudCgpIHsgcmV0dXJuIG1fYXNjZW50OyB9Ci0gICAgZmxvYXQg
R2V0RGVzY2VudCgpIHsgcmV0dXJuIG1fZGVzY2VudDsgfQotICAgIGZsb2F0IEdldExpbmVHYXAo
KSB7IHJldHVybiBtX2xpbmVHYXA7IH0KLSAgICBmbG9hdCBHZXRMaW5lU3BhY2luZygpIHsgcmV0
dXJuIG1fbGluZVNwYWNpbmc7IH0KLSAgICBmbG9hdCBHZXRYSGVpZ2h0KCkgeyByZXR1cm4gbV94
SGVpZ2h0OyB9Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9hc2NlbnQ7Ci0gICAgZmxvYXQgbV9k
ZXNjZW50OwotICAgIGZsb2F0IG1fbGluZUdhcDsKLSAgICBmbG9hdCBtX2xpbmVTcGFjaW5nOwot
ICAgIGZsb2F0IG1feEhlaWdodDsKLSAgICAgICAgCi19OwotCi1ib29sIHd4Rm9udENvbnRhaW5z
Q2hhcmFjdGVycyh2b2lkKiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0
aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ2RpcGx1
cy9ub24ta2VybmVkLWRyYXdpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hj
b2RlL2dkaXBsdXMvbm9uLWtlcm5lZC1kcmF3aW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzRjZWUyM2E0ZjEyNzcxNWVmMTI3OGUyZTVjZTdkNTRmMDQ3ZDc2Yi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93eC93eGNvZGUvZ2RpcGx1cy9ub24ta2VybmVkLWRyYXdpbmcuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4g
V2F0dGVycywgS2V2aW4gT2xsaXZpZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1
ZGUgPHd4L2RlZnMuaD4KLQotI2lmIDEgLy8gIXd4VVNFX0NBSVJPCi0KLSNpbmNsdWRlIDx3eC9k
Y2NsaWVudC5oPgotI2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4KLSNpbmNsdWRlIDx3eC9nZGljbW4u
aD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0YW50cwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1j
b25zdCBkb3VibGUgUkFEMkRFRyA9IDE4MC4wIC8gcGlEb3VibGU7Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIExvY2FsIGZ1bmN0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1z
dGF0aWMgaW5saW5lIGRvdWJsZSBkbWluKGRvdWJsZSBhLCBkb3VibGUgYikgeyByZXR1cm4gYSA8
IGIgPyBhIDogYjsgfQotc3RhdGljIGlubGluZSBkb3VibGUgZG1heChkb3VibGUgYSwgZG91Ymxl
IGIpIHsgcmV0dXJuIGEgPiBiID8gYSA6IGI7IH0KLQotc3RhdGljIGlubGluZSBkb3VibGUgRGVn
VG9SYWQoZG91YmxlIGRlZykgeyByZXR1cm4gZGVnMnJhZChkZWcpOyB9Ci1zdGF0aWMgaW5saW5l
IGRvdWJsZSBSYWRUb0RlZyhkb3VibGUgcmFkKSB7IHJldHVybiByYWQyZGVnKHJhZCk7IH0KLQot
I2luY2x1ZGUgInd4L21zdy9wcml2YXRlLmgiCi0KLS8vIFRPRE8gcmVtb3ZlIHRoaXMgZGVwZW5k
ZW5jeSAoZ2RpcGx1cyBuZWVkcyB0aGUgbWFjcm9zKQotCi0jaWZuZGVmIG1heAotI2RlZmluZSBt
YXgoYSxiKSAgICAgICAgICAgICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKLSNlbmRpZgotCi0j
aWZuZGVmIG1pbgotI2RlZmluZSBtaW4oYSxiKSAgICAgICAgICAgICgoKGEpIDwgKGIpKSA/IChh
KSA6IChiKSkKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ2RpcGx1cy5oIgotIAotI2lmIHd4VVNFX0NB
SVJPCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
Y29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLQotCi0j
aWYgVVNFKFdYR0MpCi0gICAgd3hHQ0RDKiBkYyA9IHN0YXRpY19jYXN0PHd4R0NEQyo+KGdyYXBo
aWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2Vsc2UKLSAgICB3eERDKiBkYyA9IGdy
YXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIC8vIGdldCB0
aGUgbmF0aXZlIEhEQyBoYW5kbGUgdG8gZHJhdyB1c2luZyBuYXRpdmUgQVBJcwotICAgIEhEQyBo
ZGMgPSAwOwotICAgIGZsb2F0IHkgPSBwb2ludC55KCkgLSBmb250LT5mb250TWV0cmljcygpLmFz
Y2VudCgpOwotICAgIGZsb2F0IHggPSBwb2ludC54KCk7Ci0KLQotI2lmIFVTRShXWEdDKQotCi0g
ICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gZGMtPkdldEdyYXBoaWNzQ29udGV4dCgpOwotI2lm
IHd4VVNFX0NBSVJPCi0gICAgY2Fpcm9fdCogY29udGV4dCA9IChjYWlyb190KilnYy0+R2V0TmF0
aXZlQ29udGV4dCgpOwotICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCk7Ci0gICAgICAgIGhkYyA9IGNh
aXJvX3dpbjMyX3N1cmZhY2VfZ2V0X2RjKHN1cmZhY2UpOwotICAgIH0KLSNlbHNlCi0gICAgLy8g
d2hlbiBnb2luZyBmcm9tIEdkaVBsdXMgLT4gR2RpLCBhbnkgR2RpUGx1cyB0cmFuc2Zvcm1hdGlv
bnMgYXJlIGxvc3QKLSAgICAvLyBzbyB3ZSBuZWVkIHRvIGFsdGVyIHRoZSBjb29yZGluYXRlcyB0
byByZWZsZWN0IHRoZWlyIHRyYW5zZm9ybWVkIHBvaW50LgotICAgIGRvdWJsZSB4dHJhbnMgPSAw
OwotICAgIGRvdWJsZSB5dHJhbnMgPSAwOwotICAgIAotICAgIGdjLT5HZXRUcmFuc2Zvcm0oKS5U
cmFuc2Zvcm1Qb2ludCgmeHRyYW5zLCAmeXRyYW5zKTsKLSAgICBHZGlwbHVzOjpHcmFwaGljcyog
ZzsKLSAgICBpZiAoZ2MpIHsKLSAgICAgICAgZyA9IChHZGlwbHVzOjpHcmFwaGljcyopZ2MtPkdl
dE5hdGl2ZUNvbnRleHQoKTsKLSAgICAgICAgaGRjID0gZy0+R2V0SERDKCk7Ci0gICAgfQotICAg
IHggKz0gKGludCl4dHJhbnM7Ci0gICAgeSArPSAoaW50KXl0cmFuczsKLSNlbmRpZiAvLyB3eFVT
RV9DQUlSTwotI2Vsc2UKLSAgICBoZGMgPSBzdGF0aWNfY2FzdDxIREM+KGRjLT5HZXRIREMoKSk7
Ci0jZW5kaWYKLQotICAgIC8vIGlmIHRoZSBjb250ZXh0IGhhcyBiZWVuIHNjYWxlZCwgd2UgbXVz
dCBtYW51YWxseSByZS1hcHBseSB0aGF0IHNjYWxlCi0gICAgLy8gdG8gdGhlIEhEQy4KLSAgICBG
bG9hdFNpemUgc2NhbGUgPSBncmFwaGljc0NvbnRleHQtPmN1cnJlbnRTY2FsZSgpOwotICAgIGlm
IChzY2FsZSAhPSBGbG9hdFNpemUoMS4wLCAxLjApKSB7Ci0gICAgICAgIFNldEdyYXBoaWNzTW9k
ZShoZGMsIEdNX0FEVkFOQ0VEKTsKLSAgICAgICAgWEZPUk0geEZvcm07Ci0gICAgICAgIHhGb3Jt
LmVNMTEgPSBzY2FsZS53aWR0aCgpOwotICAgICAgICB4Rm9ybS5lTTEyID0gMC4wOwotICAgICAg
ICB4Rm9ybS5lTTIxID0gMC4wOwotICAgICAgICB4Rm9ybS5lTTIyID0gc2NhbGUuaGVpZ2h0KCk7
Ci0gICAgICAgIHhGb3JtLmVEeCA9IDAuMDsKLSAgICAgICAgeEZvcm0uZUR5ID0gMC4wOwotICAg
ICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ4Rm9ybSk7Ci0gICAgfQotICAgIC8vIEV4dFRl
eHRPdXQgd2FudHMgdGhlIG9mZnNldHMgYXMgYW4gYXJyYXkgb2YgaW50cywgc28gZXh0cmFjdCB0
aGVtCi0gICAgLy8gZnJvbSB0aGUgZ2x5cGggYnVmZmVyCi0gICAgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogICBnbHlwaHMgICA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKLSAgICBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7
Ci0KLSAgICBpbnQqIHNwYWNpbmcgPSBuZXcgaW50W251bUdseXBocyAtIGZyb21dOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkKLSAgICAgICAgc3BhY2luZ1tp
XSA9IGFkdmFuY2VzW2ldLndpZHRoKCk7Ci0KLSAgICB3eEZvbnQqIHd4Zm9udCA9IGZvbnQtPmdl
dFd4Rm9udCgpOwotICAgIGlmICh3eGZvbnQgJiYgd3hmb250LT5Jc09rKCkpCi0gICAgICAgIDo6
U2VsZWN0T2JqZWN0KGhkYywgR2V0SGZvbnRPZigqd3hmb250KSk7Ci0KLSAgICBpZiAoY29sb3Iu
T2soKSkKLSAgICAgICAgOjpTZXRUZXh0Q29sb3IoaGRjLCBjb2xvci5HZXRQaXhlbCgpKTsKLQot
ICAgIC8vIGRvIG5vdCBkcmF3IGJhY2tncm91bmQgYmVoaW5kIGNoYXJhY3RlcnMKLSAgICA6OlNl
dEJrTW9kZShoZGMsIFRSQU5TUEFSRU5UKTsKLQotICAgIC8vIGRyYXcgdGV4dCB3aXRoIG9wdGlv
bmFsIGNoYXJhY3RlciB3aWR0aHMgYXJyYXkKLSAgICB3eFN0cmluZyBzdHJpbmcgPSB3eFN0cmlu
Zygod3hDaGFyKikoJmdseXBoc1tmcm9tXSksIG51bUdseXBocyk7Ci0gICAgOjpFeHRUZXh0T3V0
KGhkYywgeCwgeSwgIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBX
Q0hBUio+KGdseXBocyksIG51bUdseXBocywgc3BhY2luZyk7Ci0KLSAgICA6OlNldEJrTW9kZSho
ZGMsIFRSQU5TUEFSRU5UKTsKLQotICAgICNpZiBVU0UoV1hHQykgJiYgIXd4VVNFX0NBSVJPCi0g
ICAgICAgIGctPlJlbGVhc2VIREMoaGRjKTsKLSAgICAjZW5kaWYKLQotICAgIGRlbGV0ZSBbXSBz
cGFjaW5nOwotfQotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3d4L3d4Y29kZS9ndGsvZm9udHByb3BzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3d4L3d4Y29kZS9ndGsvZm9udHByb3BzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDkxNDU4ZDU3NTcyMDlhNTc2NGQwYTVmNWQxM2Q3ZWZiMjQwNDZiZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC93eGNvZGUvZ3RrL2ZvbnRwcm9wcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotLy8gdGhpcyBuZWVk
cyB0byBiZSBpbmNsdWRlZCBiZWZvcmUgZm9udHByb3BzLmggZm9yIFVDaGFyKiB0byBiZSBkZWZp
bmVkLgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotI2luY2x1ZGUgPHd4L2Rl
ZnMuaD4KLSNpbmNsdWRlIDx3eC9nZGljbW4uaD4KLSNpbmNsdWRlIDx3eC9mb250Lmg+Ci0jaW5j
bHVkZSA8d3gvZm9udHV0aWwuaD4KLSNpbmNsdWRlICJmb250cHJvcHMuaCIKLSNpbmNsdWRlICJu
b24ta2VybmVkLWRyYXdpbmcuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotI2luY2x1ZGUg
PGNhaXJvLmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KLSNpbmNsdWRlIDxwYW5nby9wYW5n
b2NhaXJvLmg+Ci0KLXd4Rm9udFByb3BlcnRpZXM6Ond4Rm9udFByb3BlcnRpZXMod3hGb250KiBm
b250KToKLW1fYXNjZW50KDApLCBtX2Rlc2NlbnQoMCksIG1fbGluZUdhcCgwKSwgbV9saW5lU3Bh
Y2luZygwKSwgbV94SGVpZ2h0KDApCi17Ci0gICAgQVNTRVJUKGZvbnQgJiYgZm9udC0+T2soKSk7
Ci0KLSNpZiBVU0UoV1hHQykKLSAgICBjYWlyb19mb250X2V4dGVudHNfdCBmb250X2V4dGVudHM7
Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgdGV4dF9leHRlbnRzOwotICAgIGNhaXJvX3NjYWxl
ZF9mb250X3QqIHNjYWxlZF9mb250ID0gV2ViQ29yZTo6Y3JlYXRlU2NhbGVkRm9udEZvckZvbnQo
Zm9udCk7Ci0gICAgCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhzY2FsZWRfZm9udCwg
JmZvbnRfZXh0ZW50cyk7Ci0gICAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0
ZW50cy5hc2NlbnQpOwotICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGludD4oZm9udF9leHRl
bnRzLmRlc2NlbnQpOwotICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRf
ZXh0ZW50cy5oZWlnaHQpOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhzY2Fs
ZWRfZm9udCwgIngiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3hIZWlnaHQgPSB0ZXh0X2V4dGVu
dHMuaGVpZ2h0OwotICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhzY2FsZWRfZm9u
dCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX2xpbmVHYXAgPSBtX2xpbmVTcGFjaW5nIC0g
bV9hc2NlbnQgLSBtX2Rlc2NlbnQ7Ci0gICAgCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJv
eShzY2FsZWRfZm9udCk7Ci0jZWxzZQotICAgIFBhbmdvQ29udGV4dCogY29udGV4dCA9IGdka19w
YW5nb19jb250ZXh0X2dldF9mb3Jfc2NyZWVuKCBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkgKTsK
LSAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gcGFuZ29fbGF5b3V0X25ldyhjb250ZXh0KTsKLSAg
ICAvLyBhbmQgdXNlIGl0IGlmIGl0J3MgdmFsaWQKLSAgICBpZiAoIGZvbnQgJiYgZm9udC0+T2so
KSApCi0gICAgewotICAgICAgICBwYW5nb19sYXlvdXRfc2V0X2ZvbnRfZGVzY3JpcHRpb24KLSAg
ICAgICAgKAotICAgICAgICAgICAgbGF5b3V0LAotICAgICAgICAgICAgZm9udC0+R2V0TmF0aXZl
Rm9udEluZm8oKS0+ZGVzY3JpcHRpb24KLSAgICAgICAgKTsKLSAgICB9Ci0gICAgCi0gICAgUGFu
Z29Gb250TWV0cmljcyogbWV0cmljcyA9IHBhbmdvX2NvbnRleHRfZ2V0X21ldHJpY3MgKGNvbnRl
eHQsIGZvbnQtPkdldE5hdGl2ZUZvbnRJbmZvKCktPmRlc2NyaXB0aW9uLCBOVUxMKTsKLQotICAg
IGludCBoZWlnaHQgPSBmb250LT5HZXRQaXhlbFNpemUoKS5HZXRIZWlnaHQoKTsKLQotICAgIG1f
YXNjZW50ID0gUEFOR09fUElYRUxTKHBhbmdvX2ZvbnRfbWV0cmljc19nZXRfYXNjZW50KG1ldHJp
Y3MpKTsgCi0gICAgbV9kZXNjZW50ID0gUEFOR09fUElYRUxTKHBhbmdvX2ZvbnRfbWV0cmljc19n
ZXRfZGVzY2VudChtZXRyaWNzKSk7Ci0gICAgCi0gICAgaW50IGg7Ci0KLSAgICBjb25zdCBjaGFy
KiB4ID0gIngiOwotICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dCggbGF5b3V0LCB4LCBzdHJsZW4o
eCkgKTsKLSAgICBwYW5nb19sYXlvdXRfZ2V0X3BpeGVsX3NpemUoIGxheW91dCwgTlVMTCwgJmgg
KTsKLSAgICAgICAgICAgIAotICAgIG1feEhlaWdodCA9IGg7Ci0gICAgbV9saW5lR2FwID0gKG1f
YXNjZW50ICsgbV9kZXNjZW50KSAvIDQ7IC8vIEZJWE1FOiBIb3cgY2FuIHdlIGNhbGN1bGF0ZSB0
aGlzIHZpYSBQYW5nbz8gCi0gICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50
OwotCi0gICAgcGFuZ29fZm9udF9tZXRyaWNzX3VucmVmKG1ldHJpY3MpOwotI2VuZGlmCi19Ci0K
LWJvb2wgd3hGb250Q29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IHd4Rm9udCYgZm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgR2V0VGV4dEV4dGVudCggY29uc3Qgd3hGb250JiBmb250LCBjb25zdCB3eFN0cmluZyYg
c3RyLCB3eENvb3JkICp3aWR0aCwgd3hDb29yZCAqaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHd4Q29vcmQgKmRlc2NlbnQsIHd4Q29vcmQgKmV4dGVybmFsTGVhZGluZyApCi17
Ci0gICAgaWYgKCB3aWR0aCApCi0gICAgICAgICp3aWR0aCA9IDA7Ci0gICAgaWYgKCBoZWlnaHQg
KQotICAgICAgICAqaGVpZ2h0ID0gMDsKLSAgICBpZiAoIGRlc2NlbnQgKQotICAgICAgICAqZGVz
Y2VudCA9IDA7Ci0gICAgaWYgKCBleHRlcm5hbExlYWRpbmcgKQotICAgICAgICAqZXh0ZXJuYWxM
ZWFkaW5nID0gMDsKLQotICAgIGlmIChzdHIuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0v
LyBGSVhNRTogRG9lc24ndCBzdXBwb3J0IGhlaWdodCwgZGVzY2VudCBvciBleHRlcm5hbCBsZWFk
aW5nLCB0aG91Z2ggd2UgZG9uJ3QgbmVlZCB0aGlzIGZvciBXZWJLaXQKLS8vIGl0IHdpbGwgbmVl
ZCB0byBiZSBpbXBsZW1lbnRlZCBiZWZvcmUgbWVyZ2luZyBpbnRvIHd4IHVubGVzcyB3ZSBjcmFm
dCBhIG5ldyBBUEkuCi0jaWYgVVNFKFdYR0MpCi0gICAgUGFuZ29Gb250KiBwYW5nb0ZvbnQgPSBX
ZWJDb3JlOjpjcmVhdGVQYW5nb0ZvbnRGb3JGb250KCZmb250KTsKLSAgICBQYW5nb0NvbnRleHQq
IHBhbmdvQ29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdP
X0NBSVJPX0ZPTlRfTUFQKFdlYkNvcmU6OnBhbmdvRm9udE1hcCgpKSk7Ci0gICAgUGFuZ29HbHlw
aCBwYW5nb0dseXBoID0gV2ViQ29yZTo6cGFuZ29fZm9udF9nZXRfZ2x5cGgocGFuZ29Gb250LCBw
YW5nb0NvbnRleHQsIChndW5pY2hhcilnX3V0ZjhfZ2V0X2NoYXIoc3RyLlRvVVRGOCgpKSk7Ci0g
ICAgY2Fpcm9fZ2x5cGhfdCBjZ2x5cGggPSB7IHBhbmdvR2x5cGgsIDAsIDAgfTsKLSAgICBjYWly
b190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxl
ZF9mb250ID0gV2ViQ29yZTo6Y3JlYXRlU2NhbGVkRm9udEZvckZvbnQoJmZvbnQpOwotICAgIGNh
aXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkX2ZvbnQsICZjZ2x5cGgsIDEsICZl
eHRlbnRzKTsKLQotICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMoc2NhbGVkX2ZvbnQp
ID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlICE9IDApCi0gICAg
ICAgICp3aWR0aCA9ICh3eENvb3JkKWV4dGVudHMueF9hZHZhbmNlOwotCi0gICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfZGVzdHJveShzY2FsZWRfZm9udCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFuZ29D
b250ZXh0KTsKLSAgICBnX29iamVjdF91bnJlZihwYW5nb0ZvbnQpOwotI2Vsc2UKLSAgICBQYW5n
b0NvbnRleHQqIGNvbnRleHQgPSBnZGtfcGFuZ29fY29udGV4dF9nZXRfZm9yX3NjcmVlbiggZ2Rr
X3NjcmVlbl9nZXRfZGVmYXVsdCgpICk7Ci0gICAgUGFuZ29MYXlvdXQqIG1fbGF5b3V0ID0gcGFu
Z29fbGF5b3V0X25ldyhjb250ZXh0KTsKLSAgICAvLyBhbmQgdXNlIGl0IGlmIGl0J3MgdmFsaWQK
LSAgICBpZiAoIGZvbnQgJiYgZm9udC0+SXNPaygpICkKLSAgICB7Ci0gICAgICAgIHBhbmdvX2xh
eW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbgotICAgICAgICAoCi0gICAgICAgICAgICBtX2xheW91
dCwKLSAgICAgICAgICAgIGZvbnQtPkdldE5hdGl2ZUZvbnRJbmZvKCktPmRlc2NyaXB0aW9uCi0g
ICAgICAgICk7Ci0gICAgfQotCi0gICAgLy8gU2V0IGxheW91dCdzIHRleHQKLSAgICBjb25zdCB3
eENoYXJCdWZmZXIgZGF0YVVURjggPSB3eENvbnZVVEY4LmNXWDJNQihzdHIpOwotICAgIGlmICgg
IWRhdGFVVEY4ICkKLSAgICB7Ci0gICAgICAgIC8vIGhhcmRseSBpZGVhbCwgYnV0IHdoYXQgZWxz
ZSBjYW4gd2UgZG8gaWYgY29udmVyc2lvbiBmYWlsZWQ/Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQoIG1fbGF5b3V0LCBkYXRhVVRGOCwgc3RybGVu
KGRhdGFVVEY4KSApOwotCi0gICAgaW50IGggPSAwOwotICAgIHBhbmdvX2xheW91dF9nZXRfcGl4
ZWxfc2l6ZSggbV9sYXlvdXQsIHdpZHRoLCAmaCApOwotCi0gICAgaWYgKGRlc2NlbnQpCi0gICAg
ewotICAgICAgICBQYW5nb0xheW91dEl0ZXIgKml0ZXIgPSBwYW5nb19sYXlvdXRfZ2V0X2l0ZXIo
bV9sYXlvdXQpOwotICAgICAgICBpbnQgYmFzZWxpbmUgPSBwYW5nb19sYXlvdXRfaXRlcl9nZXRf
YmFzZWxpbmUoaXRlcik7Ci0gICAgICAgIHBhbmdvX2xheW91dF9pdGVyX2ZyZWUoaXRlcik7Ci0g
ICAgICAgICpkZXNjZW50ID0gaCAtIFBBTkdPX1BJWEVMUyhiYXNlbGluZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGhlaWdodCkKLSAgICAgICAgKmhlaWdodCA9ICh3eENvb3JkKSBoOwotI2VuZGlmCi19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9ndGsvbm9u
LWtlcm5lZC1kcmF3aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9n
dGsvbm9uLWtlcm5lZC1kcmF3aW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvd3hjb2RlL2d0ay9zY3JvbGxiYXJfcmVuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L3d4Y29kZS9ndGsvc2Nyb2xsYmFyX3JlbmRlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBlNjA1NWI4ZWZkNTQzNGJkNzc2YWFhMjNiZDIwYzhiOWQ2MTc5
N2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9zY3JvbGxiYXJfcmVuZGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtl
dmluIE9sbGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpbmNsdWRlICJzY3JvbGxiYXJfcmVuZGVyLmgiCi0KLSNpbmNsdWRlIDx3eC9k
ZWZzLmg+Ci0jaW5jbHVkZSA8d3gvZGMuaD4KLSNpbmNsdWRlIDx3eC9kY2dyYXBoLmg+Ci0jaW5j
bHVkZSA8d3gvcmVuZGVyZXIuaD4KLSNpbmNsdWRlIDx3eC9zZXR0aW5ncy5oPgotI2luY2x1ZGUg
PHd4L3dpbmRvdy5oPgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaWYgd3hDSEVDS19WRVJT
SU9OKDIsIDksIDApCi0gICAgI2luY2x1ZGUgPHd4L2d0ay9kYy5oPgotI2Vsc2UKLSAgICAjaW5j
bHVkZSAid3gvZ3RrL3dpbl9ndGsuaCIKLSNlbmRpZgotCi1pbnQgd3hTdHlsZUZvclBhcnQod3hT
Y3JvbGxiYXJQYXJ0IHBhcnQsIHd4U2Nyb2xsYmFyUGFydCBmb2N1c1BhcnQsIHd4U2Nyb2xsYmFy
UGFydCBob3ZlclBhcnQsIGludCBmbGFncykKLXsKLSAgICBpbnQgc3R5bGUgPSAwOwotICAgIGlm
IChmbGFncyA9PSB3eENPTlRST0xfRElTQUJMRUQpCi0gICAgICAgIHN0eWxlID0gd3hDT05UUk9M
X0RJU0FCTEVEOwotICAgIGVsc2UgaWYgKHBhcnQgPT0gZm9jdXNQYXJ0KQotICAgICAgICBzdHls
ZSA9IHd4Q09OVFJPTF9QUkVTU0VEOwotICAgIGVsc2UgaWYgKHBhcnQgPT0gaG92ZXJQYXJ0KQot
ICAgICAgICBzdHlsZSA9IHd4Q09OVFJPTF9DVVJSRU5UOwotCi0gICAgcmV0dXJuIHN0eWxlOwot
fQotCi1HdGtXaWRnZXQqIEdldEJ1dHRvbldpZGdldCgpCi17Ci0gICAgc3RhdGljIEd0a1dpZGdl
dCAqc19idXR0b24gPSBOVUxMOwotICAgIHN0YXRpYyBHdGtXaWRnZXQgKnNfd2luZG93ID0gTlVM
TDsKLQotICAgIGlmICggIXNfYnV0dG9uICkKLSAgICB7Ci0gICAgICAgIHNfd2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcoIEdUS19XSU5ET1dfUE9QVVAgKTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFs
aXplKCBzX3dpbmRvdyApOwotICAgICAgICBzX2J1dHRvbiA9IGd0a19idXR0b25fbmV3KCk7Ci0g
ICAgICAgIGd0a19jb250YWluZXJfYWRkKCBHVEtfQ09OVEFJTkVSKHNfd2luZG93KSwgc19idXR0
b24gKTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKCBzX2J1dHRvbiApOwotICAgIH0KLQot
ICAgIHJldHVybiBzX2J1dHRvbjsKLX0KLQotCi1HZGtXaW5kb3cqIHd4R2V0R2RrV2luZG93Rm9y
REMod3hXaW5kb3cqIHdpbiwgd3hEQyYgZGMpCi17Ci0gICAgR2RrV2luZG93KiBnZGtfd2luZG93
ID0gTlVMTDsKLSNpZiB3eENIRUNLX1ZFUlNJT04oMiwgOSwgMCkKLSAgICBpZiAoIGRjLklzS2lu
ZE9mKCBDTEFTU0lORk8od3hHQ0RDKSApICkKLSAgICAgICAgZ2RrX3dpbmRvdyA9IHdpbi0+R1RL
R2V0RHJhd2luZ1dpbmRvdygpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHd4R1RLRENJbXBs
ICppbXBsID0gd3hEeW5hbWljQ2FzdChkYy5HZXRJbXBsKCksIHd4R1RLRENJbXBsKTsKLSAgICAg
ICAgaWYgKCBpbXBsICkKLSAgICAgICAgICAgIGdka193aW5kb3cgPSBpbXBsLT5HZXRHREtXaW5k
b3coKTsKLSAgICB9Ci0jZWxzZSAvLyB3eCA8IDIuOQotICAgIC8vIFRoZSB3YXkgdG8gZ2V0IGEg
R2RrV2luZG93KiBmcm9tIGEgd3hXaW5kb3cgaXMgdG8gdXNlIAotICAgIC8vIEdUS19QSVpaQSh3
aW4tPm1fd3h3aW5kb3cpLT5iaW5fd2luZG93LCBidXQgdGhpcyBhcHByb2FjaAotICAgIC8vIHdv
bid0IHdvcmsgd2hlbiBkcmF3aW5nIHRvIGEgd3hNZW1vcnlEQyBhcyBpdCBoYXMgaXRzIG93bgot
ICAgIC8vIEdka1dpbmRvdyogZm9yIGl0cyBiaXRtYXAuIHd4V2luZG93REMncyBHZXRHREtXaW5k
b3coKSB3YXMKLSAgICAvLyBkZXNpZ25lZCB0byBjcmVhdGUgYSBzb2x1dGlvbiBmb3IgYWxsIERD
cywgYnV0IHdlIGNhbid0Ci0gICAgLy8gaW1wbGVtZW50IGl0IHdpdGggd3hHQ0RDIHNpbmNlIGl0
IGRvZXNuJ3QgcmV0YWluIGl0cyB3eFdpbmRvdy4gCi0gICAgLy8gU28sIHRvIHdvcmsgYXJvdW5k
IHRoaXMsIHdlIHVzZSBHZXRHREtXaW5kb3cgd2hlbmV2ZXIgcG9zc2libGUKLSAgICAvLyBhbmQg
dXNlIGJpbl93aW5kb3cgZm9yIHd4R0NEQy4gCi0jaWYgd3hVU0VfR1JBUEhJQ1NfQ09OVEVYVAot
ICAgIGlmICggZGMuSXNLaW5kT2YoIENMQVNTSU5GTyh3eEdDREMpICkgKQotICAgICAgICBnZGtf
d2luZG93ID0gR1RLX1BJWlpBKHdpbi0+bV93eHdpbmRvdyktPmJpbl93aW5kb3c7ICAgIAotICAg
IGVsc2UKLSNlbmRpZgotICAgICAgIGdka193aW5kb3cgPSBkYy5HZXRHREtXaW5kb3coKTsKLSAg
ICB3eEFTU0VSVF9NU0coIGdka193aW5kb3csCi0gICAgICAgICAgICAgICAgICB3eFQoImNhbm5v
dCB1c2Ugd3hSZW5kZXJlck5hdGl2ZSBvbiB3eERDIG9mIHRoaXMgdHlwZSIpICk7Ci0jZW5kaWYg
Ly8gd3ggMi45LzIuOAotICAgIAotICAgIHJldHVybiBnZGtfd2luZG93OwotfQotCi12b2lkIHd4
UmVuZGVyZXJfRHJhd1Njcm9sbGJhcih3eFdpbmRvdyogd2luZG93LCB3eERDJiBkYywgY29uc3Qg
d3hSZWN0JiByZWN0LCB3eE9yaWVudGF0aW9uIG9yaWVudCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY3VycmVudCwgd3hTY3JvbGxiYXJQYXJ0IGZvY3VzUGFydCwgd3hTY3JvbGxiYXJQ
YXJ0IGhvdmVyUGFydCwgaW50IG1heCwgaW50IHN0ZXAsIGludCBmbGFncykKLXsKLSAgICBib29s
IGhvcml6ID0gb3JpZW50ID09IHd4SE9SSVpPTlRBTDsKLSAgICB3eENvbG91ciBzY3JvbGxiYXJf
Y29sb3VyID0gd3hTeXN0ZW1TZXR0aW5nczo6R2V0Q29sb3VyKHd4U1lTX0NPTE9VUl9TQ1JPTExC
QVIpOwotICAgIGRjLlNldEJydXNoKHd4QnJ1c2goc2Nyb2xsYmFyX2NvbG91cikpOwotICAgIGRj
LlNldFBlbih3eFBlbih3eFN5c3RlbVNldHRpbmdzOjpHZXRDb2xvdXIod3hTWVNfQ09MT1VSX0JU
TlNIQURPVykpKTsKLSAgICBkYy5EcmF3UmVjdGFuZ2xlKHJlY3QueCwgcmVjdC55LCByZWN0Lndp
ZHRoLCByZWN0LmhlaWdodCk7Ci0KLSAgICB3eFJlbmRlcmVyTmF0aXZlJiByZW5kZXJlciA9IHd4
UmVuZGVyZXJOYXRpdmU6OkdldCgpOwotICAgIGludCB4ID0gcmVjdC54OwotICAgIGludCB5ID0g
cmVjdC55OwotCi0gICAgaW50IGJ1dHRvbkxlbmd0aCA9IDE2OwotCi0gICAgcmVuZGVyZXIuRHJh
d1B1c2hCdXR0b24od2luZG93LCBkYywgd3hSZWN0KHgseSxidXR0b25MZW5ndGgsYnV0dG9uTGVu
Z3RoKSwgd3hTdHlsZUZvclBhcnQod3hTQ1JPTExQQVJUX0JBQ0tCVE5TVEFSVCwgZm9jdXNQYXJ0
LCBob3ZlclBhcnQsIGZsYWdzKSk7Ci0KLSAgICBHdGtXaWRnZXQqIGJ1dHRvbiA9IEdldEJ1dHRv
bldpZGdldCgpOwotICAgIEdka1dpbmRvdyogZ2RrX3dpbmRvdyA9IHd4R2V0R2RrV2luZG93Rm9y
REMod2luZG93LCBkYyk7Ci0KLSAgICBHdGtBcnJvd1R5cGUgYXJyb3dUeXBlID0gR1RLX0FSUk9X
X1VQOwotICAgIGlmIChob3JpeikKLSAgICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX0xFRlQ7
Ci0KLSAgICBndGtfcGFpbnRfYXJyb3coIGJ1dHRvbi0+c3R5bGUsIGdka193aW5kb3csIEdUS19T
VEFURV9OT1JNQUwsIEdUS19TSEFET1dfT1VULCBOVUxMLCBidXR0b24sICJhcnJvdyIsIGFycm93
VHlwZSwgZmFsc2UsIHggKyA0LCB5ICsgNCwgOCwgOCk7Ci0KLSAgICB3eFJlY3QgYnV0dG9uUmVj
dCA9IHJlY3Q7Ci0gICAgaW50IHBoeXNpY2FsTGVuZ3RoID0gaG9yaXogPyByZWN0LndpZHRoIDog
cmVjdC5oZWlnaHQ7Ci0gICAgcGh5c2ljYWxMZW5ndGggLT0gYnV0dG9uTGVuZ3RoKjI7Ci0gICAg
aW50IHRodW1iU3RhcnQgPSAwOwotICAgIGludCB0aHVtYkxlbmd0aCA9IDA7Ci0gICAgY2FsY1Ro
dW1iU3RhcnRBbmRMZW5ndGgocGh5c2ljYWxMZW5ndGgsIG1heCwgY3VycmVudCwgc3RlcCwgJnRo
dW1iU3RhcnQsICZ0aHVtYkxlbmd0aCk7Ci0KLSAgICBpZiAoaG9yaXopIHsKLSAgICAgICAgYnV0
dG9uUmVjdC54ID0geCArIHRodW1iU3RhcnQgKyBidXR0b25MZW5ndGg7Ci0gICAgICAgIGJ1dHRv
blJlY3QueSA9IHk7Ci0gICAgICAgIGJ1dHRvblJlY3Qud2lkdGggPSB0aHVtYkxlbmd0aDsKLSAg
ICB9IGVsc2UgewotICAgICAgICBidXR0b25SZWN0LnggPSB4OwotICAgICAgICBidXR0b25SZWN0
LnkgPSB5ICsgdGh1bWJTdGFydCArIGJ1dHRvbkxlbmd0aDsKLSAgICAgICAgYnV0dG9uUmVjdC5o
ZWlnaHQgPSB0aHVtYkxlbmd0aDsKLSAgICB9Ci0KLSAgICByZW5kZXJlci5EcmF3UHVzaEJ1dHRv
bih3aW5kb3csIGRjLCBidXR0b25SZWN0LCB3eFN0eWxlRm9yUGFydCh3eFNDUk9MTFBBUlRfVEhV
TUIsIGZvY3VzUGFydCwgaG92ZXJQYXJ0LCBmbGFncykpOwotCi0gICAgaWYgKGhvcml6KQotICAg
ICAgICB4ICs9IHJlY3Qud2lkdGggLSBidXR0b25MZW5ndGg7Ci0gICAgZWxzZQotICAgICAgICB5
ICs9IHJlY3QuaGVpZ2h0IC0gYnV0dG9uTGVuZ3RoOwotCi0gICAgcmVuZGVyZXIuRHJhd1B1c2hC
dXR0b24od2luZG93LCBkYywgd3hSZWN0KHgseSxidXR0b25MZW5ndGgsYnV0dG9uTGVuZ3RoKSwg
d3hTdHlsZUZvclBhcnQod3hTQ1JPTExQQVJUX0ZXREJUTkVORCwgZm9jdXNQYXJ0LCBob3ZlclBh
cnQsIGZsYWdzKSk7Ci0gICAgCi0gICAgaWYgKGhvcml6KQotICAgICAgICBhcnJvd1R5cGUgPSBH
VEtfQVJST1dfUklHSFQ7Ci0gICAgZWxzZQotICAgICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1df
RE9XTjsKLQotICAgIGd0a19wYWludF9hcnJvdyggYnV0dG9uLT5zdHlsZSwgZ2RrX3dpbmRvdywg
R1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19PVVQsIE5VTEwsIGJ1dHRvbiwgImFycm93Iiwg
YXJyb3dUeXBlLCBmYWxzZSwgeCArIDQsIHkgKyA0LCA4LCA4KTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL2ZvbnRwcm9wcy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL2ZvbnRwcm9wcy5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmMzQ4NDFjYjFkNzI5MmU1NjYxMTcy
MzIyMzg5MjBjYzhjYTVjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9mb250
cHJvcHMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotLy8gdGhpcyBuZWVkcyB0byBiZSBpbmNsdWRlZCBiZWZv
cmUgZm9udHByb3BzLmggZm9yIFVDaGFyKiB0byBiZSBkZWZpbmVkLgotI2luY2x1ZGUgPHd0Zi91
bmljb2RlL1VuaWNvZGUuaD4KLQotI2luY2x1ZGUgImZvbnRwcm9wcy5oIgotI2luY2x1ZGUgIldl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUg
PHd4L2dkaWNtbi5oPgotI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+Ci0KLWNvbnN0IGZsb2F0IHNt
YWxsQ2Fwc0ZvbnRTaXplTXVsdGlwbGllciA9IDAuN2Y7Ci1jb25zdCBmbG9hdCBjb250ZXh0RFBJ
ID0gNzIuMGY7Ci1zdGF0aWMgaW5saW5lIGZsb2F0IHNjYWxlRW1Ub1VuaXRzKGZsb2F0IHgsIHVu
c2lnbmVkIHVuaXRzUGVyRW0pIHsgcmV0dXJuIHggKiAoY29udGV4dERQSSAvIChjb250ZXh0RFBJ
ICogdW5pdHNQZXJFbSkpOyB9Ci0KLXd4Rm9udFByb3BlcnRpZXM6Ond4Rm9udFByb3BlcnRpZXMo
d3hGb250KiBmb250KToKLW1fYXNjZW50KDApLCBtX2Rlc2NlbnQoMCksIG1fbGluZUdhcCgwKSwg
bV9saW5lU3BhY2luZygwKSwgbV94SGVpZ2h0KDApCi17Ci0gICAgQ0dGb250UmVmIGNnRm9udDsK
LQotI2lmZGVmIHd4T1NYX1VTRV9DT1JFX1RFWFQgJiYgd3hPU1hfVVNFX0NPUkVfVEVYVAotICAg
IGNnRm9udCA9IENURm9udENvcHlHcmFwaGljc0ZvbnQoKENURm9udFJlZilmb250LT5PU1hHZXRD
VEZvbnQoKSwgTlVMTCk7Ci0jZWxzZQotICAgIEFUU0ZvbnRSZWYgZm9udFJlZjsKLSAgICAKLSAg
ICBmb250UmVmID0gRk1HZXRBVFNGb250UmVmRnJvbUZvbnQoZm9udC0+TWFjR2V0QVRTVUZvbnRJ
RCgpKTsKLSAgICAKLSAgICBpZiAoZm9udFJlZikKLSAgICAgICAgY2dGb250ID0gQ0dGb250Q3Jl
YXRlV2l0aFBsYXRmb3JtRm9udCgodm9pZCopJmZvbnRSZWYpOwotI2VuZGlmCi0KLSAgICBpZiAo
Y2dGb250KSB7Ci0gICAgICAgIGludCBpQXNjZW50OwotICAgICAgICBpbnQgaURlc2NlbnQ7Ci0g
ICAgICAgIGludCBpTGluZUdhcDsKLSAgICAgICAgdW5zaWduZWQgdW5pdHNQZXJFbTsKLSAgICAg
ICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChjZ0ZvbnQpOwotICAgICAgICBpRGVzY2VudCA9
IENHRm9udEdldERlc2NlbnQoY2dGb250KTsKLSAgICAgICAgaUxpbmVHYXAgPSBDR0ZvbnRHZXRM
ZWFkaW5nKGNnRm9udCk7Ci0gICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVt
KGNnRm9udCk7Ci0gICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IGZvbnQtPkdldFBvaW50U2l6ZSgp
OwotICAgICAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgIGZsb2F0IGZEZXNjZW50ID0gLXNjYWxlRW1Ub1Vu
aXRzKGlEZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICAgICAgZmxvYXQgZkxp
bmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
Ci0KLSAgICAgICAgbV9hc2NlbnQgPSBscm91bmRmKGZBc2NlbnQpOwotICAgICAgICBtX2Rlc2Nl
bnQgPSBscm91bmRmKGZEZXNjZW50KTsKLSAgICAgICAgbV9saW5lR2FwID0gbHJvdW5kZihmTGlu
ZUdhcCk7Ci0gICAgICAgIHd4Q29vcmQgeEhlaWdodCA9IDA7Ci0gICAgICAgIEdldFRleHRFeHRl
bnQoKmZvbnQsIHd4VCgieCIpLCBOVUxMLCAmeEhlaWdodCwgTlVMTCwgTlVMTCk7Ci0gICAgICAg
IG1feEhlaWdodCA9IGxyb3VuZGYoeEhlaWdodCk7Ci0gICAgICAgIG1fbGluZVNwYWNpbmcgPSBt
X2FzY2VudCArIG1fZGVzY2VudCArIG1fbGluZUdhcDsKLQotICAgIH0KLSAgICAKLSAgICBpZiAo
Y2dGb250KQotICAgICAgICBDR0ZvbnRSZWxlYXNlKGNnRm9udCk7Ci0KLX0KLQotYm9vbCB3eEZv
bnRDb250YWluc0NoYXJhY3RlcnModm9pZCogZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IGludCBsZW5ndGgpCi17Ci0gICAgTlNTdHJpbmcqIHN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PHVuaWNoYXIqPihjaGFyYWN0ZXJz
KSBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT107Ci0gICAgTlNDaGFyYWN0ZXJTZXQqIHNl
dCA9IFtbKE5TRm9udCopZm9udCBjb3ZlcmVkQ2hhcmFjdGVyU2V0XSBpbnZlcnRlZFNldF07Ci0g
ICAgYm9vbCByZXN1bHQgPSBzZXQgJiYgW3N0cmluZyByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpz
ZXRdLmxvY2F0aW9uID09IE5TTm90Rm91bmQ7Ci0gICAgW3N0cmluZyByZWxlYXNlXTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdldFRleHRFeHRlbnQoIGNvbnN0IHd4Rm9udCYgZm9u
dCwgY29uc3Qgd3hTdHJpbmcmIHN0ciwgd3hDb29yZCAqd2lkdGgsIHd4Q29vcmQgKmhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENvb3JkICpkZXNjZW50LCB3eENvb3JkICpl
eHRlcm5hbExlYWRpbmcgKQotewotICAgIHd4R3JhcGhpY3NDb250ZXh0ICogY29uc3QgZ2MgPSB3
eEdyYXBoaWNzQ29udGV4dDo6Q3JlYXRlKCk7Ci0gICAgCi0gICAgZ2MtPlNldEZvbnQoZm9udCwg
Knd4QkxBQ0spOyAvLyBjb2xvdXIgZG9lc24ndCBtYXR0ZXIgYnV0IG11c3QgYmUgc3BlY2lmaWVk
Ci0gICAgc3RydWN0IEdDVGV4dEV4dGVudAotICAgIHsKLSAgICAgICAgd3hEb3VibGUgd2lkdGgs
IGhlaWdodCwgZGVzY2VudCwgZXh0ZXJuYWxMZWFkaW5nOwotICAgIH0gZTsKLSAgICBnYy0+R2V0
VGV4dEV4dGVudChzdHIsICZlLndpZHRoLCAmZS5oZWlnaHQsICZlLmRlc2NlbnQsICZlLmV4dGVy
bmFsTGVhZGluZyk7Ci0gICAgaWYgKCB3aWR0aCApCi0gICAgICAgICp3aWR0aCA9IHd4Q29vcmQo
ZS53aWR0aCArIC41KTsKLSAgICBpZiAoIGhlaWdodCApCi0gICAgICAgICpoZWlnaHQgPSB3eENv
b3JkKGUuaGVpZ2h0ICsgLjUpOwotICAgIGlmICggZGVzY2VudCApCi0gICAgICAgICpkZXNjZW50
ID0gd3hDb29yZChlLmRlc2NlbnQgKyAuNSk7Ci0gICAgaWYgKCBleHRlcm5hbExlYWRpbmcgKQot
ICAgICAgICAqZXh0ZXJuYWxMZWFkaW5nID0gd3hDb29yZChlLmV4dGVybmFsTGVhZGluZyArIC41
KTsKLQotICAgIGRlbGV0ZSBnYzsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9ub24ta2VybmVkLWRyYXdpbmcu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmE1ZDA3NTNlODEwOGUxMjY5N2Jm
OGVmMjUxOGRlOWE4OTM4YWQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL25v
bi1rZXJuZWQtZHJhd2luZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmluIFdhdHRlcnMsIEtldmluIE9sbGl2aWVyLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgotCi0jaW5jbHVkZSA8ZGxmY24uaD4KLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNp
bmNsdWRlIDx3eC9kY2NsaWVudC5oPgotI2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4KLSNpbmNsdWRl
IDx3eC9nZGljbW4uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIGRyYXdUZXh0V2l0
aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQotewotICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgIAotICAgIHd4R0NEQyog
ZGMgPSBzdGF0aWNfY2FzdDx3eEdDREMqPihncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpKTsKLQotICAgIHd4Rm9udCogd3hmb250ID0gZm9udC0+Z2V0V3hGb250KCk7Ci0gICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKSwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihkYy0+R2V0R3JhcGhpY3NDb250ZXh0KCktPkdldE5hdGl2
ZUNvbnRleHQoKSk7Ci0KLSAgICBDR0ZvbnRSZWYgY2dGb250ID0gZm9udC0+cGxhdGZvcm1EYXRh
KCkuY2dGb250KCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQsIGNnRm9u
dCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHd4Zm9udC0+R2V0UG9p
bnRTaXplKCkpOwotCi0gICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKLSAgICBn
cmFwaGljc0NvbnRleHQtPmZpbGxDb2xvcigpLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjZ0NvbnRleHQsIHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtSWRlbnRpdHk7Ci0gICAgbWF0cml4LmIgPSAtbWF0cml4LmI7Ci0gICAgbWF0cml4
LmQgPSAtbWF0cml4LmQ7Ci0gICAgCi0gICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRl
eHQsIG1hdHJpeCk7Ci0KLSAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBw
b2ludC54KCksIHBvaW50LnkoKSk7Ci0gICAgCi0gICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgCi0gICAgaWYgKGNnRm9udCkKLSAgICAg
ICAgQ0dGb250UmVsZWFzZShjZ0ZvbnQpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgp
OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUv
bWFjL2NhcmJvbi9zY3JvbGxiYXJfcmVuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3d4L3d4Y29kZS9tYWMvY2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1MTY5NjAxMTBmNmE0ZDY5NDA1MmI3YWJjNjQ0M2YxMWUxNTQ1M2Uw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgS2V2aW4gT2xsaXZpZXIgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAic2Nyb2xsYmFyX3JlbmRlci5oIgotCi0jaW5jbHVk
ZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2RjLmg+Ci0jaW5jbHVkZSA8d3gvZGNncmFwaC5o
PgotI2luY2x1ZGUgPHd4L3JlbmRlcmVyLmg+Ci0KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+
Ci0KLXN0YXRpYyBpbnQgd3hTY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZSh3eFNjcm9sbGJh
clBhcnQgcGFydCkKLXsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICAgICAgY2FzZSB3eFNDUk9M
TFBBUlRfQkFDS0JUTlNUQVJUOgotICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcE91dHNpZGVB
cnJvd1ByZXNzZWQ7Ci0gICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX0JBQ0tCVE5FTkQ6Ci0gICAg
ICAgICAgICByZXR1cm4ga1RoZW1lVG9wT3V0c2lkZUFycm93UHJlc3NlZDsgLy8gVGhpcyBkb2Vz
IG5vdCBtYWtlIG11Y2ggc2Vuc2UuICBGb3Igc29tZSByZWFzb24gdGhlIG91dHNpZGUgY29uc3Rh
bnQgaXMgcmVxdWlyZWQuCi0gICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX0ZXREJUTlNUQVJUOgot
ICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcEluc2lkZUFycm93UHJlc3NlZDsKLSAgICAgICAg
Y2FzZSB3eFNDUk9MTFBBUlRfRldEQlRORU5EOgotICAgICAgICAgICAgcmV0dXJuIGtUaGVtZUJv
dHRvbU91dHNpZGVBcnJvd1ByZXNzZWQ7Ci0gICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX1RIVU1C
OgotICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRodW1iUHJlc3NlZDsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCB3eFJlbmRlcmVyX0Ry
YXdTY3JvbGxiYXIod3hXaW5kb3cqIFdYVU5VU0VEKHdpbmRvdyksIHd4REMmIGRjLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFJlY3QmIHJlY3QsIHd4T3JpZW50YXRpb24g
b3JpZW50LCBpbnQgY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hTY3Jv
bGxiYXJQYXJ0IGZvY3VzUGFydCwgd3hTY3JvbGxiYXJQYXJ0IGhvdmVyUGFydCwgaW50IG1heCwg
aW50IHN0ZXAsIGludCBmbGFncykKLXsKLSAgICBjb25zdCB3eENvb3JkIHggPSByZWN0Lng7Ci0g
ICAgY29uc3Qgd3hDb29yZCB5ID0gcmVjdC55OwotICAgIGNvbnN0IHd4Q29vcmQgdyA9IHJlY3Qu
d2lkdGg7Ci0gICAgY29uc3Qgd3hDb29yZCBoID0gcmVjdC5oZWlnaHQ7Ci0KLSAgICBkYy5TZXRC
cnVzaCggKnd4V0hJVEVfQlJVU0ggKTsKLSAgICBkYy5TZXRQZW4oICp3eFRSQU5TUEFSRU5UX1BF
TiApOwotICAgIGRjLkRyYXdSZWN0YW5nbGUocmVjdCk7Ci0gICAgCi0gICAgZGMuU2V0QnJ1c2go
ICp3eFRSQU5TUEFSRU5UX0JSVVNIICk7Ci0KLSAgICBISVJlY3QgaGlSZWN0ID0gQ0dSZWN0TWFr
ZSggeCwgeSwgdywgaCApOwotCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IE5VTEw7Ci0g
ICAgd3hHcmFwaGljc0NvbnRleHQqIGdjID0gTlVMTDsKLSNpZiB3eENIRUNLX1ZFUlNJT04oMiw5
LDApCi0gICAgd3hHQ0RDSW1wbCAqaW1wbCA9IGR5bmFtaWNfY2FzdDx3eEdDRENJbXBsKj4gKGRj
LkdldEltcGwoKSk7Ci0gICAgaWYgKGltcGwpCi0gICAgICAgIGdjID0gaW1wbC0+R2V0R3JhcGhp
Y3NDb250ZXh0KCk7Ci0jZWxzZQotICAgIGdjID0gZGMuR2V0R3JhcGhpY3NDb250ZXh0KCk7Ci0j
ZW5kaWYKLSAgICBpZiAoZ2MpCi0gICAgICAgIGNnQ29udGV4dCA9IChDR0NvbnRleHRSZWYpIGdj
LT5HZXROYXRpdmVDb250ZXh0KCk7Ci0gICAgCi0gICAgaWYgKGNnQ29udGV4dCkKLSAgICB7Ci0g
ICAgICAgIEhJVGhlbWVUcmFja0RyYXdJbmZvIHRyYWNrSW5mbzsKLSAgICAgICAgdHJhY2tJbmZv
LnZlcnNpb24gPSAwOwotICAgICAgICB0cmFja0luZm8ua2luZCA9IGtUaGVtZU1lZGl1bVNjcm9s
bEJhcjsKLSAgICAgICAgdHJhY2tJbmZvLmJvdW5kcyA9IGhpUmVjdDsKLSAgICAgICAgdHJhY2tJ
bmZvLm1pbiA9IDA7Ci0gICAgICAgIHRyYWNrSW5mby5tYXggPSBtYXg7Ci0gICAgICAgIHRyYWNr
SW5mby52YWx1ZSA9IGN1cnJlbnQ7Ci0gICAgICAgIHRyYWNrSW5mby50cmFja0luZm8uc2Nyb2xs
YmFyLnZpZXdzaXplID0gc3RlcDsKLSAgICAgICAgdHJhY2tJbmZvLmF0dHJpYnV0ZXMgPSAwOwot
ICAgICAgICBpZiAob3JpZW50ID09IHd4SE9SSVpPTlRBTCkKLSAgICAgICAgICAgIHRyYWNrSW5m
by5hdHRyaWJ1dGVzIHw9IGtUaGVtZVRyYWNrSG9yaXpvbnRhbDsKLSAgICAgICAgdHJhY2tJbmZv
LmVuYWJsZVN0YXRlID0gKGZsYWdzICYgd3hDT05UUk9MX0ZPQ1VTRUQpID8ga1RoZW1lVHJhY2tB
Y3RpdmUgOiBrVGhlbWVUcmFja0luYWN0aXZlOwotICAgICAgICB0cmFja0luZm8udHJhY2tJbmZv
LnNjcm9sbGJhci5wcmVzc1N0YXRlID0gd3hTY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShm
b2N1c1BhcnQpOwotICAgICAgICB0cmFja0luZm8uYXR0cmlidXRlcyB8PSBrVGhlbWVUcmFja1No
b3dUaHVtYjsKLSAgICAgICAgCi0gICAgICAgIGlmIChmbGFncyAmIHd4Q09OVFJPTF9ESVNBQkxF
RCkKLSAgICAgICAgICAgIHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IGtUaGVtZVRyYWNrRGlzYWJs
ZWQ7Ci0gICAgICAgIAotICAgICAgICBISVRoZW1lRHJhd1RyYWNrKCZ0cmFja0luZm8sIDAsIGNn
Q29udGV4dCwga0hJVGhlbWVPcmllbnRhdGlvbk5vcm1hbCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL25vbi1rZXJuZWQtZHJhd2luZy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL25vbi1rZXJuZWQtZHJhd2luZy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTlkMmRmMGU4MjMxOWVlMTQ1Yzg0NzVj
ZDNlNmUzYzJlYjI4YjdlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9ub24ta2VybmVkLWRyYXdp
bmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgS2V2aW4gV2F0dGVycywgS2V2aW4gT2xsaXZpZXIuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLQot
I2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9kY2NsaWVudC5oPgotCi0jaWYgX19X
WEdUS19fICYmIFVTRShXWEdDKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8cGFuZ28v
cGFuZ28uaD4KLSNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1leHRlcm4gdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29u
c3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7Ci0KLSNpZiBfX1dY
R1RLX18gJiYgVVNFKFdYR0MpCi1QYW5nb0ZvbnRNYXAqIHBhbmdvRm9udE1hcCgpOwotCi1QYW5n
b0ZvbnQqIGNyZWF0ZVBhbmdvRm9udEZvckZvbnQoY29uc3Qgd3hGb250KiB3eGZvbnQpOwotY2Fp
cm9fc2NhbGVkX2ZvbnRfdCogY3JlYXRlU2NhbGVkRm9udEZvckZvbnQoY29uc3Qgd3hGb250KiB3
eGZvbnQpOwotUGFuZ29HbHlwaCBwYW5nb19mb250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQs
IFBhbmdvQ29udGV4dCogY29udGV4dCwgZ3VuaWNoYXIgd2MpOwotCi0jZW5kaWYKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3Njcm9sbGJhcl9yZW5k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9zY3JvbGxiYXJfcmVuZGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMGVhOGU3NjBjNzc3MDZkNDMzM2Uw
NzgxMTA4YTA1YmQ2ZTY0Y2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3Njcm9sbGJhcl9yZW5k
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgS2V2aW4gT2xsaXZpZXIgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgc2Nyb2xsYmFyX3JlbmRlcl9oCi0jZGVmaW5lIHNjcm9sbGJhcl9yZW5kZXJfaAotCi0jaW5j
bHVkZSA8d3gvZGVmcy5oPgotI2luY2x1ZGUgPHd4L2RjLmg+Ci0jaW5jbHVkZSA8d3gvcmVuZGVy
ZXIuaD4KLQotZW51bSB3eFNjcm9sbGJhclBhcnQgewotICAgIHd4U0NST0xMUEFSVF9OT05FID0g
MCwKLSAgICB3eFNDUk9MTFBBUlRfQkFDS0JUTlNUQVJUID0gMSwKLSAgICB3eFNDUk9MTFBBUlRf
RldEQlROU1RBUlQgPSAxIDw8IDEsCi0gICAgd3hTQ1JPTExQQVJUX0JBQ0tUUkFDSyA9IDEgPDwg
MiwKLSAgICB3eFNDUk9MTFBBUlRfVEhVTUIgPSAxIDw8IDMsCi0gICAgd3hTQ1JPTExQQVJUX0ZX
RFRSQUNLID0gMSA8PCA0LAotICAgIHd4U0NST0xMUEFSVF9CQUNLQlRORU5EID0gMSA8PCA1LAot
ICAgIHd4U0NST0xMUEFSVF9GV0RCVE5FTkQgPSAxIDw8IDYsCi0gICAgd3hTQ1JPTExQQVJUX1ND
Uk9MTEJBUkJHID0gMSA8PCA3LAotICAgIHd4U0NST0xMUEFSVF9UUkFDS0JHID0gMSA8PCA4LAot
ICAgIHd4U0NST0xMUEFSVF9BTEwgPSAweGZmZmZmZmZmLAotfTsKLQotdm9pZCB3eFJlbmRlcmVy
X0RyYXdTY3JvbGxiYXIod3hXaW5kb3cqIHdpbmRvdywgd3hEQyYgZGMsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hSZWN0JiByZWN0LCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4T3JpZW50YXRpb24gb3JpZW50YXRpb24s
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnJlbnQsIHd4
U2Nyb2xsYmFyUGFydCBmb2N1c1BhcnQsIHd4U2Nyb2xsYmFyUGFydCBob3ZlclBhcnQsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heCwgaW50IHN0ZXAsIGlu
dCBmbGFncz0wKTsKLQotaW5saW5lIHZvaWQgY2FsY1RodW1iU3RhcnRBbmRMZW5ndGgoaW50IHBo
eXNpY2FsTGVuZ3RoLCBpbnQgbWF4LCBpbnQgY3VycmVudCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzdGVwLCBpbnQgKnRodW1iU3RhcnQsIGludCAqdGh1bWJMZW5ndGgp
Ci17Ci0gICAgICAgIGZsb2F0IHByb3BvcnRpb24gPSAoKGZsb2F0KXBoeXNpY2FsTGVuZ3RoIC0g
OCkvIChtYXggKyBzdGVwKTsKLSAgICAgICAgZmxvYXQgdGh1bWJTaXplID0gIHByb3BvcnRpb24g
KiAoZmxvYXQpcGh5c2ljYWxMZW5ndGg7Ci0gICAgICAgIGlmICh0aHVtYlNpemUgPCAyMCkKLSAg
ICAgICAgICAgIHRodW1iU2l6ZSA9IDIwOwotCi0gICAgICAgIGZsb2F0IHRodW1iUG9zID0gKChm
bG9hdCljdXJyZW50IC8gKGZsb2F0KW1heCkgKiAoKGZsb2F0KXBoeXNpY2FsTGVuZ3RoIC0gdGh1
bWJTaXplKTsKLSAgICAgICAgaWYgKHRodW1iU3RhcnQpCi0gICAgICAgICAgICAqdGh1bWJTdGFy
dCA9IHRodW1iUG9zOwotICAgICAgICAKLSAgICAgICAgaWYgKHRodW1iTGVuZ3RoKQotICAgICAg
ICAgICAgKnRodW1iTGVuZ3RoID0gdGh1bWJTaXplOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL2ZvbnRwcm9wcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL2ZvbnRwcm9wcy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMDJiOTQ5Mjg0NjU3ZDYxZDFmMjMxMWU1MGFiOTkyNjk3
NWIyYTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9mb250cHJvcHMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4g
T2xsaXZpZXIgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0vLyBVbmljb2RlLmggbmVlZHMg
dG8gYmUgaW5jbHVkZWQgYmVmb3JlIGZvbnRwcm9wcy5oIGZvciBVQ2hhciogdG8gYmUgZGVmaW5l
ZC4KLS8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLCBmb250cHJvcHMuaCBzaG91bGQganVzdCBmb3J3
YXJkLWRlY2xhcmUgVUNoYXIuCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgotCi0j
aW5jbHVkZSAiZm9udHByb3BzLmgiCi0jaW5jbHVkZSAibWF0aC5oIgotCi0jaW5jbHVkZSA8d3gv
ZGVmcy5oPgotI2luY2x1ZGUgPHd4L2dkaWNtbi5oPgotI2luY2x1ZGUgPHd4L3d4Lmg+Ci0jaW5j
bHVkZSAid3gvbXN3L3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgPG1sYW5nLmg+Ci0jaW5jbHVkZSA8
dXNwMTAuaD4KLQotaW5saW5lIGxvbmcgIG15X3JvdW5kKGRvdWJsZSB4KQotewotICAgIHJldHVy
biAobG9uZykoeCA8IDAgPyB4IC0gMC41IDogeCArIDAuNSk7Ci19Ci0KLXd4Rm9udFByb3BlcnRp
ZXM6Ond4Rm9udFByb3BlcnRpZXMod3hGb250KiBmb250KToKLW1fYXNjZW50KDApLCBtX2Rlc2Nl
bnQoMCksIG1fbGluZUdhcCgwKSwgbV9saW5lU3BhY2luZygwKSwgbV94SGVpZ2h0KDApCi17Ci0g
ICAgSERDIGRjID0gR2V0REMoMCk7Ci0gICAgV1hIRk9OVCBoRm9udCA9IGZvbnQtPkdldEhGT05U
KCk7Ci0gICAgOjpTZWxlY3RPYmplY3QoZGMsIGhGb250KTsKLSAgICBpZiAoZm9udCl7Ci0gICAg
ICAgCi0gICAgICAgIGludCBoZWlnaHQgPSBmb250LT5HZXRQb2ludFNpemUoKTsKLQotICAgICAg
ICBURVhUTUVUUklDIHRtOwotICAgICAgICBHZXRUZXh0TWV0cmljcyhkYywgJnRtKTsKLSAgICAg
ICAgbV9hc2NlbnQgPSBscm91bmRmKHRtLnRtQXNjZW50KTsKLSAgICAgICAgbV9kZXNjZW50ID0g
bHJvdW5kZih0bS50bURlc2NlbnQpOwotICAgICAgICBtX3hIZWlnaHQgPSBtX2FzY2VudCAqIDAu
NTZmOyAgLy8gQmVzdCBndWVzcyBmb3IgeEhlaWdodCBmb3Igbm9uLVRydWV0eXBlIGZvbnRzLgot
ICAgICAgICBtX2xpbmVHYXAgPSBscm91bmRmKHRtLnRtRXh0ZXJuYWxMZWFkaW5nKTsKLSAgICAg
ICAgbV9saW5lU3BhY2luZyA9IG1fbGluZUdhcCArIG1fYXNjZW50ICsgbV9kZXNjZW50OwotICAg
IH0KLSAgICBSZXN0b3JlREMoZGMsIC0xKTsKLSAgICBSZWxlYXNlREMoMCwgZGMpOwotfQotCi1i
b29sIHd4Rm9udENvbnRhaW5zQ2hhcmFjdGVycyh2b2lkKiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogTWljcm9zb2Z0IGRvY3VtZW50
YXRpb24gc2VlbXMgdG8gaW1wbHkgdGhhdCBjaGFyYWN0ZXJzIGNhbiBiZSBvdXRwdXQgdXNpbmcg
YSBnaXZlbiBmb250IGFuZCBEQwotICAgIC8vIG1lcmVseSBieSB0ZXN0aW5nIGNvZGUgcGFnZSBp
bnRlcnNlY3Rpb24uICBUaGlzIHNlZW1zIHN1c3BlY3QgdGhvdWdoLiAgQ2FuJ3QgYSBmb250IG9u
bHkgcGFydGlhbGx5Ci0gICAgLy8gY292ZXIgYSBnaXZlbiBjb2RlIHBhZ2U/Ci0gICAgc3RhdGlj
IElNdWx0aUxhbmd1YWdlICptdWx0aUxhbmd1YWdlOwotICAgIGlmICghbXVsdGlMYW5ndWFnZSkg
ewotICAgICAgICBpZiAoQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9DTXVsdGlMYW5ndWFnZSwgMCwg
Q0xTQ1RYX0FMTCwgSUlEX0lNdWx0aUxhbmd1YWdlLCAodm9pZCoqKSZtdWx0aUxhbmd1YWdlKSAh
PSBTX09LKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljIElN
TGFuZ0ZvbnRMaW5rMiogbGFuZ0ZvbnRMaW5rOwotICAgIGlmICghbGFuZ0ZvbnRMaW5rKSB7Ci0g
ICAgICAgIGlmIChtdWx0aUxhbmd1YWdlLT5RdWVyeUludGVyZmFjZSgmbGFuZ0ZvbnRMaW5rKSAh
PSBTX09LKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgSERDIGRjID0g
R2V0REMoMCk7Ci0gICAgCi0gICAgRFdPUkQgYWNwQ29kZVBhZ2VzOwotICAgIGxhbmdGb250TGlu
ay0+Q29kZVBhZ2VUb0NvZGVQYWdlcyhDUF9BQ1AsICZhY3BDb2RlUGFnZXMpOwotCi0gICAgRFdP
UkQgZm9udENvZGVQYWdlczsKLSAgICBsYW5nRm9udExpbmstPkdldEZvbnRDb2RlUGFnZXMoZGMs
IChIRk9OVClmb250LCAmZm9udENvZGVQYWdlcyk7Ci0KLSAgICBEV09SRCBhY3R1YWxDb2RlUGFn
ZXM7Ci0gICAgbG9uZyBudW1DaGFyYWN0ZXJzUHJvY2Vzc2VkOwotICAgIGxvbmcgb2Zmc2V0ID0g
MDsKLSAgICB3aGlsZSAob2Zmc2V0IDwgbGVuZ3RoKSB7Ci0gICAgICAgIGxhbmdGb250TGluay0+
R2V0U3RyQ29kZVBhZ2VzKGNoYXJhY3RlcnMsIGxlbmd0aCwgYWNwQ29kZVBhZ2VzLCAmYWN0dWFs
Q29kZVBhZ2VzLCAmbnVtQ2hhcmFjdGVyc1Byb2Nlc3NlZCk7Ci0gICAgICAgIGlmICgoYWN0dWFs
Q29kZVBhZ2VzICYgZm9udENvZGVQYWdlcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIG9mZnNldCArPSBudW1DaGFyYWN0ZXJzUHJvY2Vzc2VkOwotICAgIH0KLQotICAgIFJl
bGVhc2VEQygwLCBkYyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHZXRUZXh0RXh0
ZW50KCBjb25zdCB3eEZvbnQmIGZvbnQsIGNvbnN0IHd4U3RyaW5nJiBzdHIsIHd4Q29vcmQgKndp
ZHRoLCB3eENvb3JkICpoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29y
ZCAqZGVzY2VudCwgd3hDb29yZCAqZXh0ZXJuYWxMZWFkaW5nICkKLXsKLSAgICBIREMgZGMgPSBH
ZXREQygwKTsKLSAgICBXWEhGT05UIGhGb250ID0gZm9udC5HZXRIRk9OVCgpOwotICAgIDo6U2Vs
ZWN0T2JqZWN0KGRjLCBoRm9udCk7Ci0KLSAgICBIRk9OVCBoZm9udE9sZDsKLSAgICBpZiAoIGZv
bnQgIT0gd3hOdWxsRm9udCApCi0gICAgewotICAgICAgICB3eEFTU0VSVF9NU0coIGZvbnQuT2so
KSwgX1QoImludmFsaWQgZm9udCBpbiB3eERDOjpHZXRUZXh0RXh0ZW50IikgKTsKLQotICAgICAg
ICBoZm9udE9sZCA9IChIRk9OVCk6OlNlbGVjdE9iamVjdChkYywgaEZvbnQpOwotICAgIH0KLSAg
ICBlbHNlIC8vIGRvbid0IGNoYW5nZSB0aGUgZm9udAotICAgIHsKLSAgICAgICAgaGZvbnRPbGQg
PSAwOwotICAgIH0KLQotICAgIFNJWkUgc2l6ZVJlY3Q7Ci0gICAgY29uc3Qgc2l6ZV90IGxlbiA9
IHN0ci5sZW5ndGgoKTsKLSAgICBpZiAoICE6OkdldFRleHRFeHRlbnRQb2ludDMyKGRjLCBzdHIs
IGxlbiwgJnNpemVSZWN0KSApCi0gICAgewotICAgICAgICB3eExvZ0xhc3RFcnJvcihfVCgiR2V0
VGV4dEV4dGVudFBvaW50MzIoKSIpKTsKLSAgICB9Ci0KLSNpZiAhZGVmaW5lZChfV0lOMzJfV0NF
KSB8fCAoX1dJTjMyX1dDRSA+PSA0MDApCi0gICAgLy8gdGhlIHJlc3VsdCBjb21wdXRlZCBieSBH
ZXRUZXh0RXh0ZW50UG9pbnQzMigpIG1heSBiZSB0b28gc21hbGwgYXMgaXQKLSAgICAvLyBhY2Nv
dW50cyBmb3IgdW5kZXIvb3Zlcmhhbmcgb2YgdGhlIGZpcnN0L2xhc3QgY2hhcmFjdGVyIHdoaWxl
IHdlIHdhbnQKLSAgICAvLyBqdXN0IHRoZSBib3VuZGluZyByZWN0IGZvciB0aGlzIHN0cmluZyBz
byBhZGp1c3QgdGhlIHdpZHRoIGFzIG5lZWRlZAotICAgIC8vICh1c2luZyBBUEkgbm90IGF2YWls
YWJsZSBpbiAyMDAyIFNES3Mgb2YgV2luQ0UpCi0gICAgaWYgKCBsZW4gPiAxICkKLSAgICB7Ci0g
ICAgICAgIEFCQyB3aWR0aDsKLSAgICAgICAgY29uc3Qgd3hDaGFyIGNoRmlyc3QgPSAqc3RyLmJl
Z2luKCk7Ci0gICAgICAgIGlmICggOjpHZXRDaGFyQUJDV2lkdGhzKGRjLCBjaEZpcnN0LCBjaEZp
cnN0LCAmd2lkdGgpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCB3aWR0aC5hYmNBIDwg
MCApCi0gICAgICAgICAgICAgICAgc2l6ZVJlY3QuY3ggLT0gd2lkdGguYWJjQTsKLQotICAgICAg
ICAgICAgaWYgKCBsZW4gPiAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25z
dCB3eENoYXIgY2hMYXN0ID0gKnN0ci5yYmVnaW4oKTsKLSAgICAgICAgICAgICAgICA6OkdldENo
YXJBQkNXaWR0aHMoZGMsIGNoTGFzdCwgY2hMYXN0LCAmd2lkdGgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgLy9lbHNlOiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHdpZHRoIG9mIHRoZSBsYXN0
IGNoYXJhY3RlcgotCi0gICAgICAgICAgICBpZiAoIHdpZHRoLmFiY0MgPCAwICkKLSAgICAgICAg
ICAgICAgICBzaXplUmVjdC5jeCAtPSB3aWR0aC5hYmNDOwotICAgICAgICB9Ci0gICAgICAgIC8v
ZWxzZTogR2V0Q2hhckFCQ1dpZHRocygpIGZhaWxlZCwgbm90IGEgVHJ1ZVR5cGUgZm9udD8KLSAg
ICB9Ci0jZW5kaWYgLy8gIWRlZmluZWQoX1dJTjMyX1dDRSkgfHwgKF9XSU4zMl9XQ0UgPj0gNDAw
KQotCi0gICAgVEVYVE1FVFJJQyB0bTsKLSAgICA6OkdldFRleHRNZXRyaWNzKGRjLCAmdG0pOwot
Ci0gICAgaWYgKHdpZHRoKQotICAgICAgICAqd2lkdGggPSBzaXplUmVjdC5jeDsKLSAgICBpZiAo
aGVpZ2h0KQotICAgICAgICAqaGVpZ2h0ID0gc2l6ZVJlY3QuY3k7Ci0gICAgaWYgKGRlc2NlbnQp
Ci0gICAgICAgICpkZXNjZW50ID0gdG0udG1EZXNjZW50OwotICAgIGlmIChleHRlcm5hbExlYWRp
bmcpCi0gICAgICAgICpleHRlcm5hbExlYWRpbmcgPSB0bS50bUV4dGVybmFsTGVhZGluZzsKLQot
ICAgIGlmICggaGZvbnRPbGQgKQotICAgIHsKLSAgICAgICAgOjpTZWxlY3RPYmplY3QoZGMsIGhm
b250T2xkKTsKLSAgICB9Ci0gICAgCi0gICAgUmVsZWFzZURDKDAsIGRjKTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5l
ZC1kcmF3aW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOWJiMmQx
ZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hj
b2RlL3dpbi9zY3JvbGxiYXJfcmVuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L3d4Y29kZS93aW4vc2Nyb2xsYmFyX3JlbmRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGFmYTgwOGU4Y2NmODQzNzBhMzIxNmQ1ZTVkNGE4OWQyNjQ4OWViMGIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvd3hjb2RlL3dpbi9zY3JvbGxiYXJfcmVuZGVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDIxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtldmluIE9sbGl2aWVy
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJzY3JvbGxiYXJfcmVuZGVyLmgiCi0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+Ci0KLSNp
bmNsdWRlIDx3eC9kYy5oPgotI2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4KLSNpbmNsdWRlIDx3eC9n
cmFwaGljcy5oPgotI2luY2x1ZGUgPHd4L3JlbmRlcmVyLmg+Ci0jaW5jbHVkZSA8d3gvd2luZG93
Lmg+Ci0KLSNpbmNsdWRlIDx3eC9tc3cvcHJpdmF0ZS5oPgotI2luY2x1ZGUgPHd4L21zdy91eHRo
ZW1lLmg+Ci0KLS8vIGNvbnN0YW50cwotI2RlZmluZSBTUF9CVVRUT04gICAgICAgICAgMQotI2Rl
ZmluZSBTUF9USFVNQkhPUiAgICAgICAgMgotI2RlZmluZSBTUF9USFVNQlZFUlQgICAgICAgMwot
I2RlZmluZSBTUF9UUkFDS0VOREhPUiAgICAgIDQKLSNkZWZpbmUgU1BfVFJBQ0tFTkRWRVJUICAg
ICA3Ci0jZGVmaW5lIFNQX0dSSVBQRVJIT1IgICAgICAgOAotI2RlZmluZSBTUF9HUklQUEVSVkVS
VCAgICAgIDkKLQotI2RlZmluZSBUU19OT1JNQUwgICAgICAgICAgIDEKLSNkZWZpbmUgVFNfSE9W
RVIgICAgICAgICAgICAyCi0jZGVmaW5lIFRTX0FDVElWRSAgICAgICAgICAgMwotI2RlZmluZSBU
U19ESVNBQkxFRCAgICAgICAgIDQKLQotI2RlZmluZSBUU19VUF9CVVRUT04gICAgICAgMAotI2Rl
ZmluZSBUU19ET1dOX0JVVFRPTiAgICAgNAotI2RlZmluZSBUU19MRUZUX0JVVFRPTiAgICAgOAot
I2RlZmluZSBUU19SSUdIVF9CVVRUT04gICAgMTIKLQotI2lmIHd4VVNFX0dSQVBISUNTX0NPTlRF
WFQKLS8vIFRPRE8gcmVtb3ZlIHRoaXMgZGVwZW5kZW5jeSAoZ2RpcGx1cyBuZWVkcyB0aGUgbWFj
cm9zKQotLy8gd2UgbmVlZCB0byB1bmRlZiBiZWNhdXNlIHRoZSBtYWNyb3MgYXJlIGJlaW5nIGRl
ZmluZWQgaW4gV2ViQ29yZVByZWZpeC5oCi0vLyBidXQgR2RpUGx1cy5oIGlzIG5vdCBhY2NlcHRp
bmcgdGhlbQotI3VuZGVmIG1heAotI2RlZmluZSBtYXgoYSxiKSAgICAgICAgICAgICgoKGEpID4g
KGIpKSA/IChhKSA6IChiKSkKLQotI3VuZGVmIG1pbgotI2RlZmluZSBtaW4oYSxiKSAgICAgICAg
ICAgICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKLQotI2luY2x1ZGUgPHd4L2RjZ3JhcGguaD4K
LSNpbmNsdWRlICJnZGlwbHVzLmgiCi11c2luZyBuYW1lc3BhY2UgR2RpcGx1czsKLSNlbmRpZiAv
LyB3eFVTRV9HUkFQSElDU19DT05URVhUCi0KLWNsYXNzIEdyYXBoaWNzSERDCi17Ci1wdWJsaWM6
Ci0gICAgR3JhcGhpY3NIREMod3hEQyogZGMpCi0gICAgewotI2lmIHd4VVNFX0dSQVBISUNTX0NP
TlRFWFQgJiYgKCFkZWZpbmVkKHd4VVNFX0NBSVJPKSB8fCAhd3hVU0VfQ0FJUk8pCi0gICAgICAg
IG1fZ3JhcGhpY3MgPSBOVUxMOwotICAgICAgICB3eEdDREMqIGdjZGMgPSB3eER5bmFtaWNDYXN0
KGRjLCB3eEdDREMpOwotICAgICAgICBpZiAoZ2NkYykgewotICAgICAgICAgICAgbV9ncmFwaGlj
cyA9IChHcmFwaGljcyopZ2NkYy0+R2V0R3JhcGhpY3NDb250ZXh0KCktPkdldE5hdGl2ZUNvbnRl
eHQoKTsKLSAgICAgICAgICAgIG1faGRjID0gbV9ncmFwaGljcy0+R2V0SERDKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBtX2hkYyA9IEdldEhkY09mKCpk
Yyk7Ci0gICAgfQotCi0gICAgfkdyYXBoaWNzSERDKCkKLSAgICB7Ci0jaWYgd3hVU0VfR1JBUEhJ
Q1NfQ09OVEVYVCAgJiYgKCFkZWZpbmVkKHd4VVNFX0NBSVJPKSB8fCAhd3hVU0VfQ0FJUk8pCi0g
ICAgICAgIGlmIChtX2dyYXBoaWNzKQotICAgICAgICAgICAgbV9ncmFwaGljcy0+UmVsZWFzZUhE
QyhtX2hkYyk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBIREMoKSBjb25zdCB7IHJl
dHVybiBtX2hkYzsgfQotCi1wcml2YXRlOgotICAgIEhEQyAgICAgICAgIG1faGRjOwotI2lmIHd4
VVNFX0dSQVBISUNTX0NPTlRFWFQgICYmICghZGVmaW5lZCh3eFVTRV9DQUlSTykgfHwgIXd4VVNF
X0NBSVJPKQotICAgIEdyYXBoaWNzKiAgIG1fZ3JhcGhpY3M7Ci0jZW5kaWYKLX07Ci0KLWludCBn
ZXRUU1N0YXRlRm9yUGFydCh3eFNjcm9sbGJhclBhcnQgcGFydCwgd3hTY3JvbGxiYXJQYXJ0IGZv
Y3VzUGFydCwgd3hTY3JvbGxiYXJQYXJ0IGhvdmVyUGFydCwgaW50IGZsYWdzID0gMCkKLXsKLSAg
ICBpbnQgeHBTdGF0ZSA9IFRTX05PUk1BTDsKLSAgICBpZiAoZmxhZ3MgJiB3eENPTlRST0xfRElT
QUJMRUQpCi0gICAgICAgIHhwU3RhdGUgPSBUU19ESVNBQkxFRDsKLSAgICBlbHNlIGlmIChwYXJ0
ID09IGZvY3VzUGFydCkKLSAgICAgICAgeHBTdGF0ZSA9IFRTX0FDVElWRTsKLSAgICBlbHNlIGlm
IChwYXJ0ID09IGhvdmVyUGFydCkKLSAgICAgICAgeHBTdGF0ZSA9IFRTX0hPVkVSOwotICAgICAg
ICAKLSAgICByZXR1cm4geHBTdGF0ZTsKLX0KLQotdm9pZCB3eFJlbmRlcmVyX0RyYXdTY3JvbGxi
YXIod3hXaW5kb3cqIHdpbmRvdywgd3hEQyYgZGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHd4UmVjdCYgcmVjdCwgd3hPcmllbnRhdGlvbiBvcmllbnQsIGludCBjdXJyZW50
LCB3eFNjcm9sbGJhclBhcnQgZm9jdXNQYXJ0LCB3eFNjcm9sbGJhclBhcnQgaG92ZXJQYXJ0LCBp
bnQgbWF4LCBpbnQgc3RlcCwgaW50IGZsYWdzKQotewotICAgIHd4VXhUaGVtZUVuZ2luZSAqZW5n
aW5lID0gd3hVeFRoZW1lRW5naW5lOjpHZXQoKTsKLSAgICBIVEhFTUUgaFRoZW1lID0gKEhUSEVN
RSllbmdpbmUtPk9wZW5UaGVtZURhdGEoMCwgTCJTQ1JPTExCQVIiKTsKLQotICAgIGJvb2wgaG9y
aXogPSBvcmllbnQgPT0gd3hIT1JJWk9OVEFMOwotICAgIGludCBwYXJ0ID0gMDsKLSAgICBpZiAo
aG9yaXopCi0gICAgICAgIHBhcnQgPSBTUF9UUkFDS0VOREhPUjsKLSAgICBlbHNlCi0gICAgICAg
IHBhcnQgPSBTUF9UUkFDS0VORFZFUlQ7Ci0KLSAgICBpbnQgeHBTdGF0ZSA9IFRTX05PUk1BTDsK
LSAgICB3eFJlY3QgdHJhbnNSZWN0ID0gcmVjdDsKLQotI2lmIFVTRShXWEdDKSAmJiAhZGVmaW5l
ZCh3eFVTRV9DQUlSTykgfHwgIXd4VVNFX0NBSVJPCi0gICAgLy8gd2hlbiBnb2luZyBmcm9tIEdk
aVBsdXMgLT4gR2RpLCBhbnkgR2RpUGx1cyB0cmFuc2Zvcm1hdGlvbnMgYXJlIGxvc3QKLSAgICAv
LyBzbyB3ZSBuZWVkIHRvIGFsdGVyIHRoZSBjb29yZGluYXRlcyB0byByZWZsZWN0IHRoZWlyIHRy
YW5zZm9ybWVkIHBvaW50LgotICAgIGRvdWJsZSB4dHJhbnMgPSAwOwotICAgIGRvdWJsZSB5dHJh
bnMgPSAwOwotICAgIAotICAgIHd4R0NEQyogZ2NkYyA9IHd4RHluYW1pY0Nhc3QoJmRjLCB3eEdD
REMpOwotICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IGdjZGMtPkdldEdyYXBoaWNzQ29udGV4
dCgpOwotICAgIGdjLT5HZXRUcmFuc2Zvcm0oKS5UcmFuc2Zvcm1Qb2ludCgmeHRyYW5zLCAmeXRy
YW5zKTsKLQotICAgIHRyYW5zUmVjdC54ICs9IChpbnQpeHRyYW5zOwotICAgIHRyYW5zUmVjdC55
ICs9IChpbnQpeXRyYW5zOwotI2Vsc2UKLQotI2VuZGlmCi0KLSAgICBSRUNUIHI7Ci0gICAgd3hD
b3B5UmVjdFRvUkVDVCh0cmFuc1JlY3QsIHIpOwotCi0gICAgLy8gVW5saWtlIE1hYywgb24gTVNX
IHlvdSBkcmF3IHRoZSBzY3JvbGxiYXIgcGllY2UgYnkgcGllY2UuCi0gICAgLy8gc28gd2UgZHJh
dyB0aGUgdHJhY2sgZmlyc3QsIHRoZW4gdGhlIGJ1dHRvbnMKLSAgICBpZiAoaFRoZW1lKQotICAg
IHsKLSAgICAgICAgZW5naW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NI
REMoJmRjKSwgcGFydCwgeHBTdGF0ZSwgJnIsIDApOwotCi0gICAgICAgIGludCBidXR0b25TaXpl
ID0gMTY7Ci0gICAgICAgICAgICAKLSAgICAgICAgcGFydCA9IFNQX0JVVFRPTjsKLSAgICAgICAg
eHBTdGF0ZSA9IGdldFRTU3RhdGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9CQUNLQlROU1RBUlQsIGZv
Y3VzUGFydCwgaG92ZXJQYXJ0LCBmbGFncyk7Ci0gICAgICAgIHhwU3RhdGUgKz0gaG9yaXogPyBU
U19MRUZUX0JVVFRPTiA6IFRTX1VQX0JVVFRPTjsKLSAgICAgICAgUkVDVCBidXR0b25SZWN0ID0g
cjsKLSAgICAgICAgYnV0dG9uUmVjdC5ib3R0b20gPSBidXR0b25SZWN0LnRvcCArIGJ1dHRvblNp
emU7Ci0gICAgICAgIGJ1dHRvblJlY3QucmlnaHQgPSBidXR0b25SZWN0LmxlZnQgKyBidXR0b25T
aXplOwotICAgICAgICBlbmdpbmUtPkRyYXdUaGVtZUJhY2tncm91bmQoaFRoZW1lLCBHcmFwaGlj
c0hEQygmZGMpLCBwYXJ0LCB4cFN0YXRlLCAmYnV0dG9uUmVjdCwgMCk7Ci0KLSAgICAgICAgeHBT
dGF0ZSA9IGdldFRTU3RhdGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9GV0RCVE5FTkQsIGZvY3VzUGFy
dCwgaG92ZXJQYXJ0LCBmbGFncyk7Ci0gICAgICAgIHhwU3RhdGUgKz0gaG9yaXogPyBUU19SSUdI
VF9CVVRUT04gOiBUU19ET1dOX0JVVFRPTjsKLSAgICAgICAgYnV0dG9uUmVjdCA9IHI7Ci0gICAg
ICAgIGJ1dHRvblJlY3QudG9wID0gYnV0dG9uUmVjdC5ib3R0b20gLSBidXR0b25TaXplOwotICAg
ICAgICBidXR0b25SZWN0LmxlZnQgPSBidXR0b25SZWN0LnJpZ2h0IC0gYnV0dG9uU2l6ZTsKLSAg
ICAgICAgZW5naW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NIREMoJmRj
KSwgcGFydCwgeHBTdGF0ZSwgJmJ1dHRvblJlY3QsIDApOwotCi0gICAgICAgIHBhcnQgPSBob3Jp
eiA/IFNQX1RIVU1CSE9SIDogU1BfVEhVTUJWRVJUOwotCi0gICAgICAgIGludCBwaHlzaWNhbExl
bmd0aCA9IGhvcml6ID8gcmVjdC53aWR0aCA6IHJlY3QuaGVpZ2h0OwotICAgICAgICBwaHlzaWNh
bExlbmd0aCAtPSBidXR0b25TaXplKjI7Ci0gICAgICAgIGludCB0aHVtYlN0YXJ0ID0gMDsKLSAg
ICAgICAgaW50IHRodW1iTGVuZ3RoID0gMDsKLSAgICAgICAgY2FsY1RodW1iU3RhcnRBbmRMZW5n
dGgocGh5c2ljYWxMZW5ndGgsIG1heCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudCwgc3RlcCwgJnRodW1iU3RhcnQsICZ0aHVtYkxlbmd0aCk7Ci0gICAgICAgIGJ1dHRvblJl
Y3QgPSByOwotICAgICAgICBpZiAoaG9yaXopIHsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QubGVm
dCA9IGJ1dHRvblJlY3QubGVmdCArIHRodW1iU3RhcnQgKyBidXR0b25TaXplOwotICAgICAgICAg
ICAgYnV0dG9uUmVjdC5yaWdodCA9IGJ1dHRvblJlY3QubGVmdCArIHRodW1iTGVuZ3RoOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYnV0dG9uUmVjdC50b3AgPSBidXR0b25SZWN0LnRv
cCArIHRodW1iU3RhcnQgKyBidXR0b25TaXplOwotICAgICAgICAgICAgYnV0dG9uUmVjdC5ib3R0
b20gPSBidXR0b25SZWN0LnRvcCArIHRodW1iTGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAg
eHBTdGF0ZSA9IGdldFRTU3RhdGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9USFVNQiwgZm9jdXNQYXJ0
LCBob3ZlclBhcnQsIGZsYWdzKTsKLSAgICAgICAgZW5naW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5k
KGhUaGVtZSwgR3JhcGhpY3NIREMoJmRjKSwgcGFydCwgeHBTdGF0ZSwgJmJ1dHRvblJlY3QsIDAp
OwotICAgICAgICAKLSAgICAgICAgLy8gZHJhdyB0aGUgZ3JpcHBlcgotICAgICAgICBpbnQgdGhp
Y2tuZXNzID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCkgLyAyOwotICAgICAgICAK
LSAgICAgICAgYnV0dG9uUmVjdC5sZWZ0ICs9ICgoYnV0dG9uUmVjdC5yaWdodCAtIGJ1dHRvblJl
Y3QubGVmdCkgLSB0aGlja25lc3MpIC8gMjsKLSAgICAgICAgYnV0dG9uUmVjdC50b3AgKz0gKChi
dXR0b25SZWN0LmJvdHRvbSAtIGJ1dHRvblJlY3QudG9wKSAtIHRoaWNrbmVzcykgLyAyOwotICAg
ICAgICBidXR0b25SZWN0LnJpZ2h0ID0gYnV0dG9uUmVjdC5sZWZ0ICsgdGhpY2tuZXNzOwotICAg
ICAgICBidXR0b25SZWN0LmJvdHRvbSA9IGJ1dHRvblJlY3QudG9wICsgdGhpY2tuZXNzOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGhvcml6KQotICAgICAgICAgICAgcGFydCA9IFNQX0dSSVBQRVJI
T1I7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnQgPSBTUF9HUklQUEVSVkVSVDsKLSAg
ICAgICAgCi0KLQotICAgICAgICBlbmdpbmUtPkRyYXdUaGVtZUJhY2tncm91bmQoaFRoZW1lLCBH
cmFwaGljc0hEQygmZGMpLCBwYXJ0LCB4cFN0YXRlLCAmYnV0dG9uUmVjdCwgMCk7Ci0gICAgfQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5EYXRhV3guY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNzk1MmM0YWU4YmZhNDllOThiMTFhZTk5NTlmYzc1NGU0ZGIy
M2JlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd3gvUGx1Z2luRGF0YVd4LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIgPGtl
dmlub0B0aGVvbGxpdmllcnMuY29tPiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbHVnaW5EYXRhLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoY29uc3Qg
UGFnZSopCi17Ci0gICAgUGx1Z2luRGF0YWJhc2UqIGRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3Rh
bGxlZFBsdWdpbnMoKTsKLSAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+ICZwbHVnaW5z
ID0gZGItPnBsdWdpbnMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1
Z2lucy5zaXplKCk7ICsraSkgewotICAgICAgICBQbHVnaW5JbmZvIGluZm87Ci0gICAgICAgIFBs
dWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOwotCi0gICAgICAgIGluZm8ubmFtZSA9
IHBhY2thZ2UtPm5hbWUoKTsKLSAgICAgICAgaW5mby5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUo
KTsKLSAgICAgICAgaW5mby5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKLQotICAgICAg
ICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2th
Z2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKLSAgICAgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyBtaW1lOwotCi0gICAgICAgICAgICBtaW1lLnR5cGUgPSBpdC0+a2V5OwotICAgICAg
ICAgICAgbWltZS5kZXNjID0gaXQtPnZhbHVlOwotICAgICAgICAgICAgbWltZS5leHRlbnNpb25z
ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLnR5cGUpOwotCi0gICAgICAg
ICAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcGx1
Z2lucy5hcHBlbmQoaW5mbyk7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2go
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX07Cg==
</data>
<flag name="review"
          id="220805"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>