<?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>168592</bug_id>
          
          <creation_ts>2017-02-20 04:26:00 -0800</creation_ts>
          <short_desc>Remove code under USE(GRAPHICS_SURFACE)</short_desc>
          <delta_ts>2017-02-20 08:54:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local 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="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1278901</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-20 04:26:00 -0800</bug_when>
    <thetext>This was only used by EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278903</commentid>
    <comment_count>1</comment_count>
      <attachid>302136</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-20 04:27:58 -0800</bug_when>
    <thetext>Created attachment 302136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278943</commentid>
    <comment_count>2</comment_count>
      <attachid>302136</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-20 08:54:31 -0800</bug_when>
    <thetext>Comment on attachment 302136
Patch

Clearing flags on attachment: 302136

Committed r212638: &lt;http://trac.webkit.org/changeset/212638&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278944</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-20 08:54:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302136</attachid>
            <date>2017-02-20 04:27:58 -0800</date>
            <delta_ts>2017-02-20 08:54:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-remove-graphics-surface.diff</filename>
            <type>text/plain</type>
            <size>148986</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNzJjMzdkMTM5NC4uYzA0MzViYWZiZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAxNy0wMi0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvZGUgdW5kZXIgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg1
OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHdhcyBvbmx5IHVzZWQgYnkgRUZMIHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0dXJl
TWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRm
b3JtU3VyZmFjZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBo
aWNzU3VyZmFjZVRva2VuLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TENvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMSGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1
cmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29uZmlnU2VsZWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2Uu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
SGVscGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExSGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6c2V0Q2xpZW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY1BsYXRm
b3JtTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGUpOgorCiAyMDE3LTAyLTIwICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8
cmVnb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZ3JpZF0gUmVtb3ZlIGNvbXBpbGF0aW9u
IGZsYWcgRU5BQkxFX0NTU19HUklEX0xBWU9VVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UKaW5kZXggZDY1NmI5NTkyYzEuLjEwOTFhNDY0MzhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTExLDcgKzExLDYg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJUaWxlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUuY3BwCiApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9y
bVN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1TdXJmYWNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZiZmU4
MThjZGYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIK
LQotI2lmIFVTRShHTFgpCi0jaW5jbHVkZSAiR0xYU3VyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBV
U0UoRUdMKQotI2luY2x1ZGUgIkVHTFN1cmZhY2UuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8
R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZTY3JlZW5TdXJm
YWNlKFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlOwotI2lmIFVTRShHTFgpCi0gICAgc3VyZmFjZSA9
IHN0ZDo6bWFrZV91bmlxdWU8R0xYT2ZmU2NyZWVuU3VyZmFjZT4oYXR0cmlidXRlcyk7Ci0jZWxp
ZiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBzdXJmYWNlID0gRUdMT2Zm
U2NyZWVuU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShhdHRyaWJ1dGVzKTsKLSNlbHNl
Ci0gICAgLy8gRklYTUU6IE5lZWQgV0dMIGltcGxlbWVudGF0aW9uIGZvciBXaW5kb3dzCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgotCi0gICAgaWYgKHN1cmZhY2UgJiYgc3VyZmFjZS0+
ZHJhd2FibGUoKSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotR0xQbGF0Zm9ybVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNlKFN1cmZhY2VBdHRy
aWJ1dGVzKQotICAgIDogbV9kcmF3YWJsZSgwKQotICAgICwgbV9idWZmZXJIYW5kbGUoMCkKLXsK
LX0KLQotR0xQbGF0Zm9ybVN1cmZhY2U6On5HTFBsYXRmb3JtU3VyZmFjZSgpCi17Ci19Ci0KLVBs
YXRmb3JtQnVmZmVySGFuZGxlIEdMUGxhdGZvcm1TdXJmYWNlOjpoYW5kbGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2J1ZmZlckhhbmRsZTsKLX0KLQotUGxhdGZvcm1EcmF3YWJsZSBHTFBsYXRm
b3JtU3VyZmFjZTo6ZHJhd2FibGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RyYXdhYmxlOwot
fQotCi1jb25zdCBJbnRSZWN0JiBHTFBsYXRmb3JtU3VyZmFjZTo6Z2VvbWV0cnkoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3JlY3Q7Ci19Ci0KLVBsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFBsYXRm
b3JtU3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
R0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpvbk1ha2VDdXJyZW50KCkKLXsKLX0KLQot
dm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QpCi17
Ci19Ci0KLXZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3Qm
KQotewotfQotCi12b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCkKLXsKLX0KLQotR0xQ
bGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIEdMUGxhdGZvcm1TdXJmYWNlOjphdHRy
aWJ1dGVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xQbGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQ7
Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVmNTJkYzAyODkuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3VyZmFj
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdMVHJhbnNwb3J0U3VyZmFjZS5oIgot
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpZiBVU0UoR0xYKQotI2luY2x1ZGUgIkdMWFN1
cmZhY2UuaCIKLSNlbmRpZgotCi0jaWYgVVNFKEVHTCkKLSNpbmNsdWRlICJFR0xTdXJmYWNlLmgi
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBHTGZsb2F0IHZlcnRpY2Vz
W10gPSB7IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEgfTsKLXN0YXRpYyBib29sIHZlcnRleEFycmF5
T2JqZWN0U3VwcG9ydGVkID0gZmFsc2U7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHTFRyYW5zcG9ydFN1
cmZhY2U+IEdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZShjb25zdCBJ
bnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotewotICAgIHN0ZDo6
dW5pcXVlX3B0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZhY2U7Ci0jaWYgVVNFKEdMWCkKLSAg
ICBzdXJmYWNlID0gc3RkOjptYWtlX3VuaXF1ZTxHTFhUcmFuc3BvcnRTdXJmYWNlPihzaXplLCBh
dHRyaWJ1dGVzKTsKLSNlbGlmIFVTRShFR0wpCi0gICAgc3VyZmFjZSA9IEVHTFRyYW5zcG9ydFN1
cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcyk7Ci0jZW5kaWYK
LQotICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdh
YmxlKCkpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUdMVHJhbnNwb3J0U3VyZmFjZTo6R0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUm
IHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBHTFBsYXRmb3JtU3Vy
ZmFjZShhdHRyaWJ1dGVzKQotICAgICwgbV92Ym8oMCkKLSAgICAsIG1fdmVydGV4SGFuZGxlKDAp
Ci0gICAgLCBtX2JvdW5kVGV4dHVyZSgwKQotewotICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9p
bnQoKSwgc2l6ZSk7Ci19Ci0KLUdMVHJhbnNwb3J0U3VyZmFjZTo6fkdMVHJhbnNwb3J0U3VyZmFj
ZSgpCi17Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25z
dCB1aW50MzJfdCB0ZXh0dXJlKQotewotICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQotICAgICAg
ICBpbml0aWFsaXplU2hhZGVyUHJvZ3JhbSgpOwotCi0gICAgZHJhdyh0ZXh0dXJlKTsKLSAgICBz
d2FwQnVmZmVycygpOwotfQotCi12b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnko
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKLXsKLSAgICBtX3JlY3QgPSBuZXdSZWN0OwotCi0gICAg
aWYgKCFtX3NoYWRlclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVRyYW5z
Zm9ybWF0aW9uTWF0cml4KCk7Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95
KCkKLXsKLSAgICBtX3JlY3QgPSBJbnRSZWN0KCk7Ci0KLSAgICBpZiAoIW1fc2hhZGVyUHJvZ3Jh
bSB8fCAhbV9jb250ZXh0M0QpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKLSAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApOwotCi0gICAg
aWYgKG1fdmJvKQotICAgICAgICA6OmdsRGVsZXRlQnVmZmVycygxLCAmbV92Ym8pOwotCi0gICAg
aWYgKG1fdmVydGV4SGFuZGxlKSB7Ci0gICAgICAgIG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25z
KCkuYmluZFZlcnRleEFycmF5T0VTKDApOwotICAgICAgICBtX2NvbnRleHQzRC0+Z2V0RXh0ZW5z
aW9ucygpLmRlbGV0ZVZlcnRleEFycmF5T0VTKG1fdmVydGV4SGFuZGxlKTsKLSAgICB9IGVsc2Ug
aWYgKG1fc2hhZGVyUHJvZ3JhbSkKLSAgICAgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotCi0gICAgOjpnbFVzZVByb2dy
YW0oMCk7Ci0KLSAgICBtX3NoYWRlclByb2dyYW0gPSBudWxscHRyOwotICAgIG1fY29udGV4dDNE
ID0gbnVsbHB0cjsKLSAgICBtX2JvdW5kVGV4dHVyZSA9IDA7Ci19Ci0KLXZvaWQgR0xUcmFuc3Bv
cnRTdXJmYWNlOjpkcmF3KGNvbnN0IHVpbnQzMl90IHRleHR1cmUpCi17Ci0gICAgaWYgKCFtX3Zl
cnRleEhhbmRsZSkKLSAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAobV9ib3Vu
ZFRleHR1cmUgIT0gdGV4dHVyZSkgewotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgdGV4dHVyZSk7Ci0gICAgICAgIG1fYm91bmRUZXh0dXJlID0gdGV4dHVyZTsKLSAgICB9
Ci0KLSAgICA6OmdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOwotfQotCi12b2lk
IEdMVHJhbnNwb3J0U3VyZmFjZTo6YmluZEFycmF5QnVmZmVyKCkgY29uc3QKLXsKLSAgICA6Omds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKLSAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fdmJvKTsKLSAgICA6Omds
VmVydGV4QXR0cmliUG9pbnRlcihtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCksIDIs
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotfQotCi12b2lkIEdMVHJh
bnNwb3J0U3VyZmFjZTo6dXBkYXRlVHJhbnNmb3JtYXRpb25NYXRyaXgoKQotewotICAgIGlmICgh
bV9zaGFkZXJQcm9ncmFtKQotICAgICAgICByZXR1cm47Ci0KLSAgICA6OmdsVmlld3BvcnQobV9y
ZWN0LngoKSwgbV9yZWN0LnkoKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSk7Ci0g
ICAgbV9ib3VuZFRleHR1cmUgPSAwOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSBGbG9h
dFJlY3QobV9yZWN0KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChp
ZGVudGl0eU1hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3Qo
RmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7Ci0gICAgbV9zaGFkZXJQcm9ncmFt
LT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT5tb2RlbFZpZXdNYXRyaXhMb2NhdGlvbigpLCBt
YXRyaXgpOwotCi0gICAgLy8gVGFrZW4gZnJvbSBUZXh0dXJlTWFwcGVyR0wuCi0gICAgY29uc3Qg
ZmxvYXQgbmVhclZhbHVlID0gOTk5OTk5OTsKLSAgICBjb25zdCBmbG9hdCBmYXJWYWx1ZSA9IC05
OTk5OTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXggPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChtX3JlY3Qud2lkdGgoKSksIDAsIDAsIDAsCi0g
ICAgICAgIDAsICgtMi4wKSAvIGZsb2F0KG1fcmVjdC5oZWlnaHQoKSksIDAsIDAsCi0gICAgICAg
IDAsIDAsIC0yLmYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpLCAwLAotICAgICAgICAtMSwgMSwg
LShmYXJWYWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpLCAxKTsKLQot
ICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+cHJvamVjdGlv
bk1hdHJpeExvY2F0aW9uKCksIHByb2plY3Rpb25NYXRyaXgpOwotfQotCi12b2lkIEdMVHJhbnNw
b3J0U3VyZmFjZTo6aW5pdGlhbGl6ZVNoYWRlclByb2dyYW0oKQotewotICAgIGlmICghbV9jb250
ZXh0M0QpCi0gICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZv
ckN1cnJlbnRHTENvbnRleHQoKTsKLQotICAgIHZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkID0g
bV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QiKTsKLQotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9w
dGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZTsKLSAgICBtX3NoYWRl
clByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKCptX2NvbnRleHQz
RCwgb3B0aW9ucyk7Ci0KLSAgICA6OmdsVXNlUHJvZ3JhbShtX3NoYWRlclByb2dyYW0tPnByb2dy
YW1JRCgpKTsKLSAgICA6OmdsVW5pZm9ybTFpKG1fc2hhZGVyUHJvZ3JhbS0+c2FtcGxlckxvY2F0
aW9uKCksIDApOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICA6OmdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZmxp
cFRyYW5zZm9ybTsKLSAgICBmbGlwVHJhbnNmb3JtLmZsaXBZKCk7Ci0gICAgZmxpcFRyYW5zZm9y
bS50cmFuc2xhdGUoMCwgLTEpOwotICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hh
ZGVyUHJvZ3JhbS0+dGV4dHVyZVNwYWNlTWF0cml4TG9jYXRpb24oKSwgZmxpcFRyYW5zZm9ybSk7
Ci0KLSAgICA6OmdsVW5pZm9ybTFmKG1fc2hhZGVyUHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCks
IDEuMCk7Ci0KLSAgICBpZiAoIW1fdmJvKSB7Ci0gICAgICAgIDo6Z2xHZW5CdWZmZXJzKDEsICZt
X3Zibyk7Ci0gICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV92Ym8pOwot
ICAgICAgICA6OmdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVvZihHQzNEZmxvYXQp
ICogOCwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUg
YW5kIHNldC11cCB2ZXJ0ZXggYXJyYXkgb2JqZWN0LgotICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dFN1cHBvcnRlZCkgewotICAgICAgICBtX3ZlcnRleEhhbmRsZSA9IG1fY29udGV4dDNELT5nZXRF
eHRlbnNpb25zKCkuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKLQotICAgICAgICBpZiAobV92ZXJ0
ZXhIYW5kbGUpIHsKLSAgICAgICAgICAgIG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCkuYmlu
ZFZlcnRleEFycmF5T0VTKG1fdmVydGV4SGFuZGxlKTsKLSAgICAgICAgICAgIGJpbmRBcnJheUJ1
ZmZlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlVHJhbnNmb3JtYXRpb25NYXRy
aXgoKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudD4gR0xU
cmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0
IFBsYXRmb3JtQnVmZmVySGFuZGxlIGhhbmRsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBo
YXNBbHBoYSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50
PiBjbGllbnQ7Ci0jaWYgVVNFKEdMWCkKLSAgICBjbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEdM
WFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+KGhhbmRsZSwgaGFzQWxwaGEpOwotICAgIFVOVVNFRF9Q
QVJBTShzaXplKTsKLSNlbHNlCi0gICAgY2xpZW50ID0gRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y3Jl
YXRlVHJhbnNwb3J0U3VyZmFjZUNsaWVudChoYW5kbGUsIHNpemUsIGhhc0FscGhhKTsKLSNlbmRp
ZgotCi0gICAgaWYgKCFjbGllbnQgfHwgIWNsaWVudC0+dGV4dHVyZSgpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIENyZWF0ZSBUcmFuc3BvcnQgU3VyZmFjZSBjbGllbnQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBjbGllbnQ7Ci19Ci0K
LQotR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoKQot
ICAgIDogbV90ZXh0dXJlKDApCi17Ci19Ci0KLUdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6fkdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudCgpCi17Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNl
Q2xpZW50OjpkZXN0cm95KCkKLXsKLSAgICBpZiAobV90ZXh0dXJlKSB7Ci0gICAgICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7Ci0gICAgICAgIG1fdGV4dHVyZSA9IDA7Ci0gICAgfQotfQotCi12b2lkIEdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6cHJlcGFyZVRleHR1cmUoKQotewotfQotCi12b2lkIEdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgOjpnbEdlblRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAgICA6Omds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3Vy
ZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGJmMzZlNzdiOS4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xU
cmFuc3BvcnRTdXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEdMVHJhbnNwb3J0U3VyZmFjZV9oCi0jZGVmaW5lIEdMVHJh
bnNwb3J0U3VyZmFjZV9oCi0KLSNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOwotCi1j
bGFzcyBHTFRyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewotCi1w
dWJsaWM6Ci0gICAgLy8gQ3JlYXRlcyBhIEdMIHN1cmZhY2Ugd2hvc2UgcmVzdWx0cyBjYW4gYmUg
dHJhbnNwb3J0ZWQgdG8gdGhlIFVJIHByb2Nlc3MgZm9yIGRpc3BsYXkuCi0gICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2Uo
Y29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRl
ZmF1bHQpOwotICAgIHZpcnR1YWwgfkdMVHJhbnNwb3J0U3VyZmFjZSgpOwotICAgIHZvaWQgdXBk
YXRlQ29udGVudHMoY29uc3QgdWludDMyX3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0R2VvbWV0
cnkoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveSgpIG92ZXJyaWRl
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgR0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmLCBT
dXJmYWNlQXR0cmlidXRlcyk7Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
OwotICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0aWFsaXpl
U2hhZGVyUHJvZ3JhbSgpOwotICAgIHZvaWQgZHJhdyhjb25zdCB1aW50MzJfdCk7Ci0KLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwotICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gbV9zaGFkZXJQcm9ncmFtOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV92Ym87Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleEhhbmRsZTsKLSAgICBHTHVp
bnQgbV9ib3VuZFRleHR1cmU7Ci19OwotCi1jbGFzcyBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQg
ewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHTFRyYW5zcG9ydFN1cmZh
Y2VDbGllbnQ+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2VDbGllbnQoY29uc3QgUGxhdGZvcm1CdWZm
ZXJIYW5kbGUsIGNvbnN0IEludFNpemUmLCBib29sKTsKLSAgICB2aXJ0dWFsIH5HTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIEdMdWludCB0ZXh0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0dXJlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBHTFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQoKTsKLSAgICB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTHVpbnQgbV90ZXh0dXJl
OwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4ZmE1YWI1ZDlkMi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJm
YWNlLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBm
bGFncywgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQotewotICAgIHJldHVybiBw
bGF0Zm9ybUltcG9ydChzaXplLCBmbGFncywgdG9rZW4pOwotfQotCi1QYXNzUmVmUHRyPEdyYXBo
aWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
R3JhcGhpY3NTdXJmYWNlOjpGbGFncyBmbGFncywgY29uc3QgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBzaGFyZUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlKHNpemUsIGZs
YWdzLCBzaGFyZUNvbnRleHQpOwotfQotCi1HcmFwaGljc1N1cmZhY2VUb2tlbiBHcmFwaGljc1N1
cmZhY2U6OmV4cG9ydFRva2VuKCkKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1FeHBvcnQoKTsKLX0K
LQotdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpnZXRUZXh0dXJlSUQoKQotewotICAgIHJldHVy
biBwbGF0Zm9ybUdldFRleHR1cmVJRCgpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiBHcmFwaGljc1N1cmZhY2U6OmJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwg
TG9ja09wdGlvbnMgbG9ja09wdGlvbnMpCi17Ci0gICAgaW50IHN0cmlkZSA9IDA7Ci0gICAgY2hh
ciogYml0cyA9IHBsYXRmb3JtTG9jayhyZWN0LCAmc3RyaWRlLCBsb2NrT3B0aW9ucyk7Ci0gICAg
YXV0byBncmFwaGljc0NvbnRleHQgPSBwbGF0Zm9ybUJlZ2luUGFpbnQocmVjdC5zaXplKCksIGJp
dHMsIHN0cmlkZSk7Ci0gICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dDsKLX0KLQotdm9pZCBHcmFw
aGljc1N1cmZhY2U6OmNvcHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRl
eHR1cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQp
Ci17Ci0gICAgcGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLCB0YXJnZXRS
ZWN0LCBvZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzU3VyZmFjZTo6Y29weUZyb21UZXh0dXJl
KHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpCi17Ci0gICAgcGxh
dGZvcm1Db3B5RnJvbVRleHR1cmUodGV4dHVyZSwgc291cmNlUmVjdCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NTdXJmYWNlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgcGxhdGZvcm1QYWludFRv
VGV4dHVyZU1hcHBlcih0ZXh0dXJlTWFwcGVyLCB0YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wYWNp
dHkpOwotfQotCi11aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OmZyb250QnVmZmVyKCkKLXsKLSAg
ICByZXR1cm4gcGxhdGZvcm1Gcm9udEJ1ZmZlcigpOwotfQotCi11aW50MzJfdCBHcmFwaGljc1N1
cmZhY2U6OnN3YXBCdWZmZXJzKCkKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Td2FwQnVmZmVycygp
OwotfQotCi1JbnRTaXplIEdyYXBoaWNzU3VyZmFjZTo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHBsYXRmb3JtU2l6ZSgpOwotfQotCi1HcmFwaGljc1N1cmZhY2U6OkdyYXBoaWNzU3VyZmFj
ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2ZsYWdzKGZsYWdzKQotICAg
ICwgbV9mYm8oMCkKLSAgICAsIG1fcHJpdmF0ZSgwKQotewotfQotCi1HcmFwaGljc1N1cmZhY2U6
On5HcmFwaGljc1N1cmZhY2UoKQotewotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL0dyYXBoaWNzU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDc0ZDhmMTU0ZTlhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEy
MiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBHcmFwaGljc1N1cmZhY2VfaAotI2RlZmluZSBHcmFwaGljc1N1cmZhY2VfaAotCi0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2Vu
LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBzdHJ1Y3Qg
X19JT1N1cmZhY2UqIElPU3VyZmFjZVJlZjsKLXR5cGVkZWYgSU9TdXJmYWNlUmVmIFBsYXRmb3Jt
R3JhcGhpY3NTdXJmYWNlOwotI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkKLXR5cGVkZWYgdWludDMy
X3QgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2U7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpCi10
eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTsKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVy
Owotc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGU7Ci0KLWNsYXNzIEdyYXBoaWNzU3VyZmFj
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYXBoaWNzU3VyZmFjZT4gewotcHVibGljOgotICAgIGVu
dW0gRmxhZyB7Ci0gICAgICAgIFN1cHBvcnRzQWxwaGEgPSAweDAxLAotICAgICAgICBTdXBwb3J0
c1NvZnR3YXJlV3JpdGUgPSAweDAyLAotICAgICAgICBTdXBwb3J0c1NvZnR3YXJlUmVhZCA9IDB4
MDQsCi0gICAgICAgIFN1cHBvcnRzVGV4dHVyZVRhcmdldCA9IDB4MDgsCi0gICAgICAgIFN1cHBv
cnRzVGV4dHVyZVNvdXJjZSA9IDB4MTAsCi0gICAgICAgIFN1cHBvcnRzQ29weVRvVGV4dHVyZSA9
IDB4MjAsCi0gICAgICAgIFN1cHBvcnRzQ29weUZyb21UZXh0dXJlID0gMHg0MCwKLSAgICAgICAg
U3VwcG9ydHNTaGFyaW5nID0gMHg4MCwKLSAgICAgICAgU3VwcG9ydHNTaW5nbGVCdWZmZXJlZCA9
IDB4MTAwCi0gICAgfTsKLQotICAgIGVudW0gTG9ja09wdGlvbiB7Ci0gICAgICAgIFJldGFpblBp
eGVscyA9IDB4MDEsCi0gICAgICAgIFJlYWRPbmx5ID0gMHgwMgotICAgIH07Ci0KLSAgICB0eXBl
ZGVmIGludCBGbGFnczsKLSAgICB0eXBlZGVmIGludCBMb2NrT3B0aW9uczsKLQotICAgIEZsYWdz
IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQotICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYsIEZsYWdzLCBjb25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJl
Q29udGV4dCA9IDApOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3Jl
YXRlKGNvbnN0IEludFNpemUmLCBGbGFncywgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsK
LSAgICB2b2lkIGNvcHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZz
ZXQpOwotICAgIHZvaWQgY29weUZyb21UZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QpOwotICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcigpOwot
ICAgIHVpbnQzMl90IHN3YXBCdWZmZXJzKCk7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gZXhw
b3J0VG9rZW4oKTsKLSAgICB1aW50MzJfdCBnZXRUZXh0dXJlSUQoKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50KGNvbnN0IEludFJlY3QmLCBMb2NrT3B0
aW9ucyk7Ci0gICAgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgfkdyYXBoaWNzU3VyZmFjZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRT
aXplJiwgRmxhZ3MsIGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOwotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gcGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6
ZSYsIEZsYWdzLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwotICAgIEdyYXBoaWNzU3Vy
ZmFjZVRva2VuIHBsYXRmb3JtRXhwb3J0KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsK
LQotICAgIHVpbnQzMl90IHBsYXRmb3JtR2V0VGV4dHVyZUlEKCk7Ci0gICAgY2hhciogcGxhdGZv
cm1Mb2NrKGNvbnN0IEludFJlY3QmLCBpbnQqIHN0cmlkZSwgTG9ja09wdGlvbnMpOwotICAgIHZv
aWQgcGxhdGZvcm1VbmxvY2soKTsKLSAgICB2b2lkIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVp
bnQzMl90IHRhcmdldCwgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybUNvcHlGcm9tVGV4dHVyZSh1aW50MzJfdCB0ZXh0
dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKLSAgICB2b2lkIHBsYXRmb3JtUGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSAgICB1aW50
MzJfdCBwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3Q7Ci0gICAgdWludDMyX3QgcGxhdGZvcm1T
d2FwQnVmZmVycygpOwotICAgIEludFNpemUgcGxhdGZvcm1TaXplKCkgY29uc3Q7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBwbGF0Zm9ybUJlZ2luUGFpbnQoY29uc3Qg
SW50U2l6ZSYsIGNoYXIqIGJpdHMsIGludCBzdHJpZGUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgTG9j
a09wdGlvbnMgbV9sb2NrT3B0aW9uczsKLSAgICBGbGFncyBtX2ZsYWdzOwotCi1wcml2YXRlOgot
ICAgIEdyYXBoaWNzU3VyZmFjZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOwotCi1wcml2YXRlOgot
ICAgIHVpbnQzMl90IG1fZmJvOwotICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUqIG1fcHJpdmF0
ZTsKLX07Ci0KLX0KLSNlbmRpZiAvLyBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLQotI2VuZGlmIC8v
IEdyYXBoaWNzU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2VUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzZjI0Mjk5MzcuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZVRv
a2VuLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykg
MjAxMiBEaWdpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc1N1cmZhY2VUb2tlbl9oCi0jZGVm
aW5lIEdyYXBoaWNzU3VyZmFjZVRva2VuX2gKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBHcmFwaGljc1N1cmZhY2VUb2tlbiB7Ci0KLSNp
ZiBPUyhEQVJXSU4pCi0gICAgdHlwZWRlZiBtYWNoX3BvcnRfdCBCdWZmZXJIYW5kbGU7Ci0jZWxp
ZiBPUyhMSU5VWCkKLSAgICB0eXBlZGVmIHVpbnQzMl90IEJ1ZmZlckhhbmRsZTsKLSNlbGlmIE9T
KFdJTkRPV1MpCi0gICAgdHlwZWRlZiBIQU5ETEUgQnVmZmVySGFuZGxlOwotI2VuZGlmCi0KLSNp
ZiBPUyhEQVJXSU4pIHx8IE9TKFdJTkRPV1MpCi0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4oQnVm
ZmVySGFuZGxlIGZyb250QnVmZmVyID0gMCwgQnVmZmVySGFuZGxlIGJhY2tCdWZmZXIgPSAwKQot
ICAgICAgICA6IGZyb250QnVmZmVySGFuZGxlKGZyb250QnVmZmVyKQotICAgICAgICAsIGJhY2tC
dWZmZXJIYW5kbGUoYmFja0J1ZmZlcikKLSAgICB7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiAmcmhzKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIChmcm9udEJ1ZmZlckhhbmRsZSAhPSByaHMuZnJvbnRCdWZmZXJIYW5kbGUgfHwgYmFja0J1
ZmZlckhhbmRsZSAhPSByaHMuYmFja0J1ZmZlckhhbmRsZSk7Ci0gICAgfQotCi0gICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9udEJ1ZmZlckhhbmRsZSAm
JiBiYWNrQnVmZmVySGFuZGxlOwotICAgIH0KLQotICAgIEJ1ZmZlckhhbmRsZSBiYWNrQnVmZmVy
SGFuZGxlOwotI2Vsc2UKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbih1aW50MzJfdCB3aW5kb3dJ
RCA9IDApCi0gICAgICAgIDogZnJvbnRCdWZmZXJIYW5kbGUod2luZG93SUQpCi0gICAgeyB9Ci0K
LSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4gJnJocykgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9udEJ1ZmZlckhhbmRsZSAhPSByaHMuZnJvbnRC
dWZmZXJIYW5kbGU7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmcm9udEJ1ZmZlckhhbmRsZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEJ1
ZmZlckhhbmRsZSBmcm9udEJ1ZmZlckhhbmRsZTsKLX07Ci0KLX0KLSNlbmRpZiAvLyBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLQotI2VuZGlmIC8vIEdyYXBoaWNzU3VyZmFjZVRva2VuX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xD
b25maWdTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYTQzNjc0ZjY0MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKLQotI2lmIFVTRShFR0wpCi0K
LSNpbmNsdWRlICJFR0xIZWxwZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1FR0xDb25m
aWdTZWxlY3Rvcjo6RUdMQ29uZmlnU2VsZWN0b3IoR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBtX3BpeG1hcEZCQ29uZmlnKDApCi0gICAgLCBt
X3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVz
KQotewotICAgIG1fc2hhcmVkRGlzcGxheSA9IEVHTEhlbHBlcjo6ZWdsRGlzcGxheSgpOwotfQot
Ci1FR0xDb25maWdTZWxlY3Rvcjo6fkVHTENvbmZpZ1NlbGVjdG9yKCkKLXsKLX0KLQotRUdMQ29u
ZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKCkKLXsKLSAgICBpZiAo
IW1fcGl4bWFwRkJDb25maWcpCi0gICAgICAgIG1fcGl4bWFwRkJDb25maWcgPSBjcmVhdGVDb25m
aWcoRUdMX1BJWE1BUF9CSVQpOwotCi0gICAgcmV0dXJuIG1fcGl4bWFwRkJDb25maWc7Ci19Ci0K
LUVHTENvbmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6c3VyZmFjZUNvbnRleHRDb25maWcoKQotewot
ICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQotICAgICAgICBtX3N1cmZhY2VDb250
ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoRUdMX1dJTkRPV19CSVQpOwotCi0gICAgcmV0dXJu
IG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLX0KLQotRUdMaW50IEVHTENvbmZpZ1NlbGVjdG9y
OjpuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmIGNvbmZpZykgY29uc3QKLXsKLSAgICBp
ZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLSAgICBFR0xpbnQgZWdsVmFsdWUgPSAwOwotICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3No
YXJlZERpc3BsYXksIGNvbmZpZywgRUdMX05BVElWRV9WSVNVQUxfSUQsICZlZ2xWYWx1ZSk7Ci0K
LSAgICByZXR1cm4gZWdsVmFsdWU7Ci19Ci0KLUdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0
cmlidXRlcyBFR0xDb25maWdTZWxlY3Rvcjo6YXR0cmlidXRlcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fYXR0cmlidXRlczsKLX0KLQotdm9pZCBFR0xDb25maWdTZWxlY3Rvcjo6cmVzZXQoKQot
ewotICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgbV9waXhtYXBGQkNvbmZp
ZyA9IDA7Ci19Ci0KLUVHTENvbmZpZyBFR0xDb25maWdTZWxlY3Rvcjo6Y3JlYXRlQ29uZmlnKEVH
TGludCBleHBlY3RlZFN1cmZhY2VUeXBlKQotewotICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0g
RUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRUdMaW50IG51bUNvbmZp
Z3M7Ci0KLSAgICBlZ2xHZXRDb25maWdzKG1fc2hhcmVkRGlzcGxheSwgMCwgMCwgJm51bUNvbmZp
Z3MpOwotCi0gICAgaWYgKCFudW1Db25maWdzKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHJldHJpZXZlIG51bWJlciBvZiBFR0wgY29uZmlncy4iKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgRUdMQ29uZmlnIGNvbmZpZ3NbbnVtQ29uZmlnc107Ci0gICAgZWdsR2V0
Q29uZmlncyhtX3NoYXJlZERpc3BsYXksIGNvbmZpZ3MsIG51bUNvbmZpZ3MsICZudW1Db25maWdz
KTsKLQotICAgIGlmICghbnVtQ29uZmlncykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byByZXRyaWV2ZSBhbnkgRUdMIGNvbmZpZ3MuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIEVHTENvbmZpZyBjb25maWcgPSAwOwotICAgIEVHTGludCBhbHBoYSwgc3VyZmFjZSwg
cmVkLCBncmVlbiwgYmx1ZSwgcmVuZGVyVHlwZTsKLSAgICBFR0xpbnQgZXhwZWN0ZWRBbHBoYSA9
IG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEgPyA4IDogMDsK
LSAgICBFR0xpbnQgZXhwZWN0ZWRSZWQgPSA4OwotICAgIEVHTGludCBleHBlY3RlZEJsdWUgPSA4
OwotICAgIEVHTGludCBleHBlY3RlZEdyZWVuID0gODsKLSNpZiBVU0UoT1BFTkdMX0VTXzIpCi0g
ICAgRUdMaW50IGV4cGVjdGVkUmVuZGVyVHlwZSA9IEVHTF9PUEVOR0xfRVMyX0JJVDsKLSNlbHNl
Ci0gICAgRUdMaW50IGV4cGVjdGVkUmVuZGVyVHlwZSA9IEVHTF9PUEVOR0xfQklUOwotI2VuZGlm
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkrKykgewotICAgICAgICBF
R0xDb25maWcgdGVtcENvbmZpZyA9IGNvbmZpZ3NbaV07Ci0gICAgICAgIGVnbEdldENvbmZpZ0F0
dHJpYihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9SRU5ERVJBQkxFX1RZUEUsICZy
ZW5kZXJUeXBlKTsKLQotICAgICAgICBpZiAoIShyZW5kZXJUeXBlICYgZXhwZWN0ZWRSZW5kZXJU
eXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGVnbEdldENvbmZpZ0F0dHJp
YihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9BTFBIQV9TSVpFLCAmYWxwaGEpOwot
Ci0gICAgICAgIGlmIChhbHBoYSAhPSBleHBlY3RlZEFscGhhKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENv
bmZpZywgRUdMX1JFRF9TSVpFLCAmcmVkKTsKLQotICAgICAgICBpZiAocmVkICE9IGV4cGVjdGVk
UmVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmli
KG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX0dSRUVOX1NJWkUsICZncmVlbik7Ci0K
LSAgICAgICAgaWYgKGdyZWVuICE9IGV4cGVjdGVkR3JlZW4pCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9zaGFyZWREaXNwbGF5LCB0ZW1wQ29u
ZmlnLCBFR0xfQkxVRV9TSVpFLCAmYmx1ZSk7Ci0KLSAgICAgICAgaWYgKGJsdWUgIT0gZXhwZWN0
ZWRCbHVlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZWdsR2V0Q29uZmlnQXR0
cmliKG1fc2hhcmVkRGlzcGxheSwgdGVtcENvbmZpZywgRUdMX1NVUkZBQ0VfVFlQRSwgJnN1cmZh
Y2UpOwotCi0gICAgICAgIGlmIChzdXJmYWNlICYgZXhwZWN0ZWRTdXJmYWNlVHlwZSkgewotICAg
ICAgICAgICAgY29uZmlnID0gY29uZmlnc1tpXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKChtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3VyZmFjZTo6
U3VwcG9ydEFscGhhKSAmJiAhY29uZmlnKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJldHJpZXZlIEVHTCBDb25maWd1cmF0aW9uIHdpdGggYWxwaGEuIFRyeWluZyB0byBmaW5kIG9u
ZSB3aXRob3V0IGFscGhhIHN1cHBvcnQuIik7Ci0gICAgICAgIG1fYXR0cmlidXRlcyAmPSB+R0xQ
bGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYTsKLSAgICAgICAgY29uZmlnID0gY3JlYXRlQ29u
ZmlnKGV4cGVjdGVkU3VyZmFjZVR5cGUpOwotICAgIH0KLQotICAgIGlmICghY29uZmlnKQotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIGEgdmFsaWQgRUdMIENvbmZpZ3VyYXRpb24u
Iik7Ci0KLSAgICByZXR1cm4gY29uZmlnOwotfQotCi0jaWYgUExBVEZPUk0oWDExKQotRUdMQ29u
ZmlnIEVHTENvbmZpZ1NlbGVjdG9yOjpzdXJmYWNlQ2xpZW50Q29uZmlnKE5hdGl2ZVZpc3VhbElk
IGlkKQotewotICAgIEVHTENvbmZpZyBjb25maWcgPSBmaW5kTWF0Y2hpbmdDb25maWdXaXRoVmlz
dWFsSWQoaWQpOwotCi0gICAgaWYgKCFjb25maWcpCi0gICAgICAgIGNvbmZpZyA9IGNyZWF0ZUNv
bmZpZyhFR0xfUElYTUFQX0JJVCk7Ci0KLSAgICByZXR1cm4gY29uZmlnOwotfQotCi1FR0xDb25m
aWcgRUdMQ29uZmlnU2VsZWN0b3I6OmZpbmRNYXRjaGluZ0NvbmZpZ1dpdGhWaXN1YWxJZChOYXRp
dmVWaXN1YWxJZCBpZCkKLXsKLSAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQ
TEFZKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEVHTGludCBudW1Db25maWdzOwotICAgIEVH
TGludCBpOwotICAgIEVHTGludCB2aXN1YWxJZDsKLSAgICBFR0xDb25maWcgY29uZmlnID0gMDsK
LQotICAgIGVnbEdldENvbmZpZ3MobV9zaGFyZWREaXNwbGF5LCAwLCAwLCAmbnVtQ29uZmlncyk7
Ci0KLSAgICBpZiAoIW51bUNvbmZpZ3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cmV0cmlldmUgYW55IEVHTCBjb25maWdzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBFR0xDb25maWcgY29uZmlnc1tudW1Db25maWdzXTsKLSAgICBlZ2xHZXRDb25maWdzKG1f
c2hhcmVkRGlzcGxheSwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3MpOwotCi0gICAg
aWYgKCFudW1Db25maWdzKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZl
IGFueSBFR0wgY29uZmlncy4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaW50
IGFscGhhQ2hhbm5lbFJlcXVpcmVkID0gbV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6
OlN1cHBvcnRBbHBoYSA/IDggOiAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db25maWdzOyBp
KyspIHsKLSAgICAgICAgRUdMaW50IGFscGhhLCBzdXJmYWNlczsKLSAgICAgICAgRUdMQ29uZmln
IHRlbXBDb25maWcgPSBjb25maWdzW2ldOwotICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9z
aGFyZWREaXNwbGF5LCB0ZW1wQ29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJnZpc3VhbElk
KTsKLQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8TmF0aXZlVmlzdWFsSWQ+KHZpc3VhbElkKSAh
PSBpZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGVnbEdldENvbmZpZ0F0dHJp
YihtX3NoYXJlZERpc3BsYXksIHRlbXBDb25maWcsIEVHTF9BTFBIQV9TSVpFLCAmYWxwaGEpOwot
Ci0gICAgICAgIGlmIChhbHBoYUNoYW5uZWxSZXF1aXJlZCAhPSBhbHBoYSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGVnbEdldENvbmZpZ0F0dHJpYihtX3NoYXJlZERpc3BsYXks
IHRlbXBDb25maWcsIEVHTF9TVVJGQUNFX1RZUEUsICZzdXJmYWNlcyk7Ci0KLSAgICAgICAgaWYg
KHN1cmZhY2VzICYgRUdMX1BJWE1BUF9CSVQpIHsKLSAgICAgICAgICAgIGNvbmZpZyA9IHRlbXBD
b25maWc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBjb25maWc7Ci19Ci0jZW5kaWYKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdTZWxlY3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZp
Z1NlbGVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOWMwYjVkNzZjLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRUdMQ29uZmlnU2VsZWN0b3JfaAotI2RlZmlu
ZSBFR0xDb25maWdTZWxlY3Rvcl9oCi0KLSNpZiBVU0UoRUdMKQotCi0jaW5jbHVkZSA8b3Blbmds
L0dMRGVmcy5oPgotI2luY2x1ZGUgPG9wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oPgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0jaWYgUExBVEZP
Uk0oWDExKQotdHlwZWRlZiBWaXN1YWxJRCBOYXRpdmVWaXN1YWxJZDsKLSNlbmRpZgotCi1jbGFz
cyBFR0xDb25maWdTZWxlY3RvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmln
U2VsZWN0b3IpOwotcHVibGljOgotICAgIEVHTENvbmZpZ1NlbGVjdG9yKEdMUGxhdGZvcm1TdXJm
YWNlOjpTdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAgdmlydHVhbCB+RUdMQ29uZmlnU2VsZWN0b3Io
KTsKLSAgICB2aXJ0dWFsIEVHTENvbmZpZyBwaXhtYXBDb250ZXh0Q29uZmlnKCk7Ci0gICAgdmly
dHVhbCBFR0xDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKLSAgICBFR0xpbnQgbmF0aXZl
VmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJikgY29uc3Q7Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6
OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlc2V0KCk7
Ci0jaWYgUExBVEZPUk0oWDExKQotICAgIHZpcnR1YWwgRUdMQ29uZmlnIHN1cmZhY2VDbGllbnRD
b25maWcoTmF0aXZlVmlzdWFsSWQpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0jaWYgUExBVEZPUk0o
WDExKQotICAgIEVHTENvbmZpZyBmaW5kTWF0Y2hpbmdDb25maWdXaXRoVmlzdWFsSWQoTmF0aXZl
VmlzdWFsSWQpOwotI2VuZGlmCi0gICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhFR0xpbnQgZXhw
ZWN0ZWRTdXJmYWNlVHlwZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBFR0xDb25maWcgbV9waXhtYXBG
QkNvbmZpZzsKLSAgICBFR0xDb25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOwotICAgIHVu
c2lnbmVkIG1fYXR0cmlidXRlcyA6IDM7Ci0gICAgRUdMRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7
Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZlN2EzMjM3NGMuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRUdMQ29udGV4dC5oIgotCi0jaWYgVVNF
KEVHTCkKLQotI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBFR0xp
bnQgY29udGV4dEF0dHJpYnV0ZXNbXSA9IHsKLSNpZiBVU0UoT1BFTkdMX0VTXzIpCi0gICAgRUdM
X0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsCi0jZW5kaWYKLSAgICBFR0xfTk9ORQotfTsKLQot
c3RhdGljIGNvbnN0IEVHTGludCBjb250ZXh0Um9idXN0bmVzc0F0dHJpYnV0ZXNbXSA9IHsKLSNp
ZiBVU0UoT1BFTkdMX0VTXzIpCi0gICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsCi0j
ZW5kaWYKLSAgICBFR0xfQ09OVEVYVF9PUEVOR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZ
X0VYVCwKLSAgICBFR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCwKLSAgICBFR0xfTk9ORQot
fTsKLQotc3RhdGljIGJvb2wgaXNSb2J1c3RuZXNzRXh0U3VwcG9ydGVkKEVHTERpc3BsYXkgZGlz
cGxheSkKLXsKLSAgICBzdGF0aWMgYm9vbCBkaWRRdWVyeUZvclJvYnVzdG5lc3NFeHRlbnNpb24g
PSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBpc1JvYnVzdG5lc3NFeHRlbnNpb25TdXBwb3J0ZWQg
PSBmYWxzZTsKLQotICAgIGlmICghZGlkUXVlcnlGb3JSb2J1c3RuZXNzRXh0ZW5zaW9uKSB7Ci0g
ICAgICAgIGRpZFF1ZXJ5Rm9yUm9idXN0bmVzc0V4dGVuc2lvbiA9IHRydWU7Ci0gICAgICAgIGlz
Um9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZCA9IEdMUGxhdGZvcm1Db250ZXh0OjpzdXBwb3J0
c0VHTEV4dGVuc2lvbihkaXNwbGF5LCAiRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNz
Iik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZDsK
LX0KLQotRUdMT2ZmU2NyZWVuQ29udGV4dDo6RUdMT2ZmU2NyZWVuQ29udGV4dCgpCi0gICAgOiBH
TFBsYXRmb3JtQ29udGV4dCgpCi0gICAgLCBtX2Rpc3BsYXkoMCkKLXsKLX0KLQotYm9vbCBFR0xP
ZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlLCBQ
bGF0Zm9ybUNvbnRleHQgc2hhcmVkQ29udGV4dCkKLXsKLSAgICBpZiAoIXN1cmZhY2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hh
cmVkRGlzcGxheSgpLmVnbERpc3BsYXkoKTsKLSAgICBpZiAoIW1fZGlzcGxheSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgRUdMQ29uZmlnIGNvbmZpZyA9IHN1cmZhY2UtPmNvbmZpZ3Vy
YXRpb24oKTsKLSAgICBpZiAoIWNvbmZpZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKGlzUm9idXN0bmVzc0V4dFN1cHBvcnRlZChtX2Rpc3BsYXkpKQotICAgICAgICBtX2NvbnRl
eHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBzaGFyZWRDb250
ZXh0LCBjb250ZXh0Um9idXN0bmVzc0F0dHJpYnV0ZXMpOwotCi0gICAgaWYgKG1fY29udGV4dEhh
bmRsZSAhPSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICAvLyBUaGUgRUdMX0VYVF9jcmVhdGVf
Y29udGV4dF9yb2J1c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRlZCB3
aXRoCi0gICAgICAgIC8vIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RS
QVRFR1lfRVhUIGJpdCBzZXQgbXVzdCBhbHNvIHN1cHBvcnQgR0xfRVhUX3JvYnVzdG5lc3Mgb3IK
LSAgICAgICAgLy8gYSB2ZXJzaW9uIG9mIE9wZW5HTCBpbmNvcnBvcmF0aW5nIGVxdWl2YWxlbnQg
ZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgLy8gVGhlIHNwZWMgYWxzbyBkZWZpbmVzIHNpbWlsYXIg
cmVxdWlyZW1lbnRzIGZvciBhdHRyaWJ1dGUgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQu
Ci0gICAgICAgIGlmIChwbGF0Zm9ybU1ha2VDdXJyZW50KHN1cmZhY2UpICYmIChHTFBsYXRmb3Jt
Q29udGV4dDo6c3VwcG9ydHNHTEV4dGVuc2lvbigiR0xfRVhUX3JvYnVzdG5lc3MiKSkpCi0gICAg
ICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBlZ2xEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7Ci0gICAg
fQotCi0gICAgaWYgKG1fY29udGV4dEhhbmRsZSA9PSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAg
ICBtX2NvbnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBz
aGFyZWRDb250ZXh0LCBjb250ZXh0QXR0cmlidXRlcyk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1N
YWtlQ3VycmVudChzdXJmYWNlKSkKLSAgICAgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KG1fZGlz
cGxheSwgbV9jb250ZXh0SGFuZGxlKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jb250ZXh0SGFuZGxl
ICE9IEVHTF9OT19DT05URVhUKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotRUdMT2ZmU2NyZWVuQ29udGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRleHQoKQot
ewotfQotCi1ib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmlzQ3VycmVudENvbnRleHQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUgPT0gZWdsR2V0Q3VycmVudENvbnRleHQo
KTsKLX0KLQotYm9vbCBFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdM
UGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQotewotICAgIGlmICghZWdsTWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBzdXJmYWNlLT5kcmF3YWJsZSgpLCBzdXJmYWNlLT5kcmF3YWJsZSgpLCBtX2NvbnRl
eHRIYW5kbGUpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2UgY29udGV4dCBj
dXJyZW50KCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsKLQotICAgICAgICBpZiAobV9yZXNldExvc3RD
b250ZXh0ICYmIGVnbEdldEVycm9yKCkgPT0gRUdMX0NPTlRFWFRfTE9TVCkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJMb3N0IGN1cnJlbnQgY29udGV4dC4iKTsKLSAgICAgICAgICAgIG1fY29u
dGV4dExvc3QgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVHTE9mZlNjcmVlbkNvbnRleHQ6OnBs
YXRmb3JtUmVsZWFzZUN1cnJlbnQoKQotewotICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci19Ci0KLXZv
aWQgRUdMT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCi17Ci0gICAgaWYgKG1fY29u
dGV4dEhhbmRsZSA9PSBFR0xfTk9fQ09OVEVYVCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWds
RGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOwotICAgIG1fY29udGV4
dEhhbmRsZSA9IEVHTF9OT19DT05URVhUOwotICAgIG1fZGlzcGxheSA9IDA7Ci19Ci0KLXZvaWQg
RUdMT2ZmU2NyZWVuQ29udGV4dDo6ZGVzdHJveSgpCi17Ci0gICAgR0xQbGF0Zm9ybUNvbnRleHQ6
OmRlc3Ryb3koKTsKLSAgICBmcmVlUmVzb3VyY2VzKCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWds
L0VHTENvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRlYzI4YWJkODEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEVHTENvbnRleHRfaAotI2RlZmluZSBFR0xDb250ZXh0
X2gKLQotI2lmIFVTRShFR0wpCi0KLSNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEVHTE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMg
R0xQbGF0Zm9ybUNvbnRleHQgewotCi1wdWJsaWM6Ci0gICAgRUdMT2ZmU2NyZWVuQ29udGV4dCgp
OwotICAgIHZpcnR1YWwgfkVHTE9mZlNjcmVlbkNvbnRleHQoKTsKLSAgICBib29sIGluaXRpYWxp
emUoR0xQbGF0Zm9ybVN1cmZhY2UqLCBQbGF0Zm9ybUNvbnRleHQpIG92ZXJyaWRlOwotICAgIGJv
b2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopIG92ZXJyaWRlOwotICAg
IHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJv
eSgpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwotICAgIEVHTERpc3BsYXkg
bV9kaXNwbGF5OwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMSGVscGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xIZWxwZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDE1ZTgzYjBiZS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TEhlbHBlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkVHTEhlbHBlci5oIgotCi0j
aWYgVVNFKEVHTCkKLQotI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgotI2luY2x1ZGUgPG9w
ZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIFBGTkVHTENSRUFURUlNQUdFS0hSUFJPQyBlZ2xDcmVhdGVJbWFnZUtIUiA9IDA7Ci1zdGF0
aWMgUEZORUdMREVTVFJPWUlNQUdFS0hSUFJPQyBlZ2xEZXN0cm95SW1hZ2VLSFIgPSAwOwotc3Rh
dGljIFBGTkdMRUdMSU1BR0VUQVJHRVRURVhUVVJFMkRPRVNQUk9DIGVnbEltYWdlVGFyZ2V0VGV4
dHVyZTJET0VTID0gMDsKLQotRUdMRGlzcGxheSBFR0xIZWxwZXI6OmVnbERpc3BsYXkoKQotewot
ICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLmVnbERpc3BsYXkoKTsKLX0KLQot
RUdMRGlzcGxheSBFR0xIZWxwZXI6OmN1cnJlbnREaXNwbGF5KCkKLXsKLSAgICBFR0xEaXNwbGF5
IGRpc3BsYXkgPSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOwotCi0gICAgaWYgKGRpc3BsYXkgPT0g
RUdMX05PX0RJU1BMQVkpCi0gICAgICAgIGRpc3BsYXkgPSBFR0xIZWxwZXI6OmVnbERpc3BsYXko
KTsKLQotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi12b2lkIEVHTEhlbHBlcjo6cmVzb2x2ZUVH
TEJpbmRpbmdzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotCi0g
ICAgaWYgKGluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0aWFsaXplZCA9
IHRydWU7Ci0KLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBjdXJyZW50RGlzcGxheSgpOwotCi0g
ICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNFR0xFeHRlbnNpb24oZGlzcGxheSwgIkVH
TF9LSFJfaW1hZ2UiKSAmJiBHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNFR0xFeHRlbnNpb24o
ZGlzcGxheSwgIkVHTF9LSFJfaW1hZ2VfcGl4bWFwIikgJiYgR0xQbGF0Zm9ybUNvbnRleHQ6OnN1
cHBvcnRzR0xFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2UiKSkgewotICAgICAgICBlZ2xDcmVh
dGVJbWFnZUtIUiA9IChQRk5FR0xDUkVBVEVJTUFHRUtIUlBST0MpIGVnbEdldFByb2NBZGRyZXNz
KCJlZ2xDcmVhdGVJbWFnZUtIUiIpOwotICAgICAgICBlZ2xEZXN0cm95SW1hZ2VLSFIgPSAoUEZO
RUdMREVTVFJPWUlNQUdFS0hSUFJPQykgZWdsR2V0UHJvY0FkZHJlc3MoImVnbERlc3Ryb3lJbWFn
ZUtIUiIpOwotICAgICAgICBlZ2xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyA9IChQRk5HTEVHTElN
QUdFVEFSR0VUVEVYVFVSRTJET0VTUFJPQyllZ2xHZXRQcm9jQWRkcmVzcygiZ2xFR0xJbWFnZVRh
cmdldFRleHR1cmUyRE9FUyIpOwotICAgIH0KLX0KLQotdm9pZCBFR0xIZWxwZXI6OmNyZWF0ZUVH
TEltYWdlKEVHTEltYWdlS0hSKiBpbWFnZSwgR0xlbnVtIHRhcmdldCwgY29uc3QgRUdMQ2xpZW50
QnVmZmVyIGNsaWVudEJ1ZmZlciwgY29uc3QgRUdMaW50IGF0dHJpYnV0ZXNbXSkKLXsKLSAgICBF
R0xEaXNwbGF5IGRpc3BsYXkgPSBjdXJyZW50RGlzcGxheSgpOwotCi0gICAgaWYgKGRpc3BsYXkg
PT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVHTEltYWdlS0hSIHRl
bXBIYW5kbGUgPSBFR0xfTk9fSU1BR0VfS0hSOwotCi0gICAgaWYgKGVnbENyZWF0ZUltYWdlS0hS
ICYmIGVnbEltYWdlVGFyZ2V0VGV4dHVyZTJET0VTICYmIGVnbERlc3Ryb3lJbWFnZUtIUikKLSAg
ICAgICAgdGVtcEhhbmRsZSA9IGVnbENyZWF0ZUltYWdlS0hSKGRpc3BsYXksIEVHTF9OT19DT05U
RVhULCB0YXJnZXQsIGNsaWVudEJ1ZmZlciwgYXR0cmlidXRlcyk7Ci0KLSAgICAqaW1hZ2UgPSB0
ZW1wSGFuZGxlOwotfQotCi12b2lkIEVHTEhlbHBlcjo6ZGVzdHJveUVHTEltYWdlKGNvbnN0IEVH
TEltYWdlS0hSIGltYWdlKQotewotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IGN1cnJlbnREaXNw
bGF5KCk7Ci0KLSAgICBpZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGVnbERlc3Ryb3lJbWFnZUtIUikKLSAgICAgICAgZWdsRGVzdHJveUlt
YWdlS0hSKGRpc3BsYXksIGltYWdlKTsKLX0KLQotdm9pZCBFR0xIZWxwZXI6OmltYWdlVGFyZ2V0
VGV4dHVyZTJET0VTKGNvbnN0IEVHTEltYWdlS0hSIGltYWdlKQotewotICAgIGVnbEltYWdlVGFy
Z2V0VGV4dHVyZTJET0VTKEdMX1RFWFRVUkVfMkQsIHN0YXRpY19jYXN0PEdMZWdsSW1hZ2VPRVM+
KGltYWdlKSk7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4ODIyMmE3YzAwYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTEhlbHBlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFR0xI
ZWxwZXJfaAotI2RlZmluZSBFR0xIZWxwZXJfaAotCi0jaWYgVVNFKEVHTCkKLQotI2luY2x1ZGUg
PG9wZW5nbC9HTERlZnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFR0xIZWxw
ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBFR0xEaXNwbGF5IGVnbERpc3BsYXkoKTsKLSAgICBz
dGF0aWMgRUdMRGlzcGxheSBjdXJyZW50RGlzcGxheSgpOwotICAgIHN0YXRpYyB2b2lkIHJlc29s
dmVFR0xCaW5kaW5ncygpOwotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUVHTEltYWdlKEVHTEltYWdl
S0hSKiwgR0xlbnVtLCBjb25zdCBFR0xDbGllbnRCdWZmZXIsIGNvbnN0IEVHTGludCogPSAwKTsK
LSAgICBzdGF0aWMgdm9pZCBkZXN0cm95RUdMSW1hZ2UoY29uc3QgRUdMSW1hZ2VLSFIpOwotICAg
IHN0YXRpYyB2b2lkIGltYWdlVGFyZ2V0VGV4dHVyZTJET0VTKGNvbnN0IEVHTEltYWdlS0hSKTsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmJlZDIyODgwZi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFR0xTdXJmYWNlLmgiCi0KLSNpZiBVU0Uo
RUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLQotI2luY2x1ZGUgIkVHTENvbmZpZ1NlbGVj
dG9yLmgiCi0jaW5jbHVkZSAiRUdMSGVscGVyLmgiCi0jaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRl
eHQuaCIKLQotI2lmIFBMQVRGT1JNKFgxMSkKLSNpbmNsdWRlICJFR0xYU3VyZmFjZS5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEdMVHJhbnNwb3J0
U3VyZmFjZT4gRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZShjb25z
dCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotewotICAgIHN0
ZDo6dW5pcXVlX3B0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IHN1cmZhY2U7Ci0jaWYgUExBVEZPUk0o
WDExKQotICAgIHN1cmZhY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPEVHTFdpbmRvd1RyYW5zcG9ydFN1
cmZhY2U+KHNpemUsIGF0dHJpYnV0ZXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGF0dHJpYnV0ZXMpOwotI2VuZGlmCi0KLSAgICBpZiAoc3VyZmFj
ZSkKLSAgICAgICAgcmV0dXJuIFdURk1vdmUoc3VyZmFjZSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudD4gRUdMVHJh
bnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25zdCBQbGF0Zm9y
bUJ1ZmZlckhhbmRsZSBoYW5kbGUsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgaGFzQWxwaGEp
Ci17Ci0gICAgRUdMSGVscGVyOjpyZXNvbHZlRUdMQmluZGluZ3MoKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50PiBjbGllbnQ7Ci0jaWYgUExBVEZPUk0oWDEx
KQotICAgIGNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8RUdMWFRyYW5zcG9ydFN1cmZhY2VDbGll
bnQ+KGhhbmRsZSwgc2l6ZSwgaGFzQWxwaGEpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGhhc0FscGhh
KTsKLSNlbmRpZgotCi0gICAgaWYgKGNsaWVudCkKLSAgICAgICAgcmV0dXJuIFdURk1vdmUoY2xp
ZW50KTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1FR0xUcmFuc3BvcnRTdXJmYWNlOjpF
R0xUcmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMpCi0gICAgOiBHTFRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcykK
LXsKLSAgICBpZiAoRUdMSGVscGVyOjplZ2xEaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVl
PEVHTENvbmZpZ1NlbGVjdG9yPihhdHRyaWJ1dGVzKTsKLX0KLQotR0xQbGF0Zm9ybVN1cmZhY2U6
OlN1cmZhY2VBdHRyaWJ1dGVzIEVHTFRyYW5zcG9ydFN1cmZhY2U6OmF0dHJpYnV0ZXMoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5hdHRyaWJ1dGVzKCk7Ci19Ci0KLWJv
b2wgRUdMVHJhbnNwb3J0U3VyZmFjZTo6aXNDdXJyZW50RHJhd2FibGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX2RyYXdhYmxlID09IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9EUkFXKTsKLX0K
LQotRUdMVHJhbnNwb3J0U3VyZmFjZTo6fkVHTFRyYW5zcG9ydFN1cmZhY2UoKQotewotfQotCi12
b2lkIEVHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQotewotICAgIGlmIChtX2RyYXdhYmxl
ID09IEVHTF9OT19TVVJGQUNFIHx8IEVHTEhlbHBlcjo6ZWdsRGlzcGxheSgpID09IEVHTF9OT19E
SVNQTEFZKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ry
b3koKTsKLQotICAgIGlmIChtX2RyYXdhYmxlKSB7Ci0gICAgICAgIGVnbERlc3Ryb3lTdXJmYWNl
KEVHTEhlbHBlcjo6ZWdsRGlzcGxheSgpLCBtX2RyYXdhYmxlKTsKLSAgICAgICAgbV9kcmF3YWJs
ZSA9IEVHTF9OT19TVVJGQUNFOwotICAgIH0KLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxs
cHRyOwotfQotCi1QbGF0Zm9ybVN1cmZhY2VDb25maWcgRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29u
ZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250
ZXh0Q29uZmlnKCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxHTFBsYXRmb3JtU3VyZmFjZT4gRUdM
T2ZmU2NyZWVuU3VyZmFjZTo6Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShTdXJmYWNlQXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotewotI2lmIFBMQVRGT1JNKFgxMSkKLSAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxFR0xQaXhtYXBTdXJmYWNlPihhdHRyaWJ1dGVzKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi19Ci0KLUVH
TE9mZlNjcmVlblN1cmZhY2U6OkVHTE9mZlNjcmVlblN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMg
c3VyZmFjZUF0dHJpYnV0ZXMpCi0gICAgOiBHTFBsYXRmb3JtU3VyZmFjZShzdXJmYWNlQXR0cmli
dXRlcykKLXsKLSAgICBpZiAoRUdMSGVscGVyOjplZ2xEaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BM
QVkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEVHTENvbmZpZ1NlbGVjdG9yPihzdXJmYWNlQXR0cmlidXRlcyk7Ci19Ci0KLUVHTE9m
ZlNjcmVlblN1cmZhY2U6On5FR0xPZmZTY3JlZW5TdXJmYWNlKCkKLXsKLX0KLQotR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIEVHTE9mZlNjcmVlblN1cmZhY2U6OmF0dHJpYnV0
ZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5hdHRyaWJ1dGVzKCk7
Ci19Ci0KLWJvb2wgRUdMT2ZmU2NyZWVuU3VyZmFjZTo6aXNDdXJyZW50RHJhd2FibGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX2RyYXdhYmxlID09IGVnbEdldEN1cnJlbnRTdXJmYWNlKEVHTF9E
UkFXKTsKLX0KLQotUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTE9mZlNjcmVlblN1cmZhY2U6OmNv
bmZpZ3VyYXRpb24oKQotewotICAgIHJldHVybiBtX2NvbmZpZ1NlbGVjdG9yLT5waXhtYXBDb250
ZXh0Q29uZmlnKCk7Ci19Ci0KLXZvaWQgRUdMT2ZmU2NyZWVuU3VyZmFjZTo6ZGVzdHJveSgpCi17
Ci0gICAgaWYgKEVHTEhlbHBlcjo6ZWdsRGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZIHx8IG1f
ZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2RyYXdhYmxlKSB7Ci0gICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKEVHTEhlbHBlcjo6ZWdsRGlz
cGxheSgpLCBtX2RyYXdhYmxlKTsKLSAgICAgICAgbV9kcmF3YWJsZSA9IEVHTF9OT19TVVJGQUNF
OwotICAgIH0KLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwotfQotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFl
YWRiNzY2OTZhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFR0xTdXJmYWNlX2gKLSNkZWZpbmUg
RUdMU3VyZmFjZV9oCi0KLSNpZiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLQot
I2luY2x1ZGUgIkdMVHJhbnNwb3J0U3VyZmFjZS5oIgotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRUdMQ29uZmlnU2VsZWN0b3I7
Ci0KLWNsYXNzIEVHTFRyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJmYWNl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdMVHJhbnNwb3J0U3VyZmFj
ZT4gY3JlYXRlVHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0
ZXMpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50
PiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0IFBsYXRmb3JtQnVmZmVySGFuZGxl
LCBjb25zdCBJbnRTaXplJiwgYm9vbCk7Ci0gICAgdmlydHVhbCB+RUdMVHJhbnNwb3J0U3VyZmFj
ZSgpOwotICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1
cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlz
Q3VycmVudERyYXdhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBFR0xU
cmFuc3BvcnRTdXJmYWNlKGNvbnN0IEludFNpemUmLCBTdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEVHTENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwotfTsK
LQotY2xhc3MgRUdMT2ZmU2NyZWVuU3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHTFBsYXRmb3JtU3VyZmFjZT4g
Y3JlYXRlT2ZmU2NyZWVuU3VyZmFjZShTdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAgdmlydHVhbCB+
RUdMT2ZmU2NyZWVuU3VyZmFjZSgpOwotICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1
cmF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0gICAgR0xQ
bGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGlzQ3VycmVudERyYXdhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXBy
b3RlY3RlZDoKLSAgICBFR0xPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RUdMQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7Ci19
OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xYU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1cmZhY2UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjc3NTY4MDZiMi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRUdMWFN1cmZhY2UuaCIKLQotI2lmIFBM
QVRGT1JNKFgxMSkgJiYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0KLSNpbmNs
dWRlICJFR0xDb25maWdTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkVHTEhlbHBlci5oIgotI2luY2x1
ZGUgIkdMUGxhdGZvcm1Db250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBHTFBsYXRmb3JtU3VyZmFj
ZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IEVHTFRyYW5zcG9ydFN1cmZh
Y2Uoc2l6ZSwgYXR0cmlidXRlcykKLXsKLSAgICBpZiAoIW1fY29uZmlnU2VsZWN0b3IpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRD
b25maWcoKSkgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBFR0xpbnQgdmlzdWFsSWQgPSBtX2NvbmZpZ1NlbGVjdG9yLT5uYXRpdmVWaXN1YWxJZCht
X2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpKTsKLQotICAgIGlmICh2aXN1
YWxJZCA9PSAtMSkgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFu
ZGxlLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRlcygpICYgR0xQbGF0Zm9y
bVN1cmZhY2U6OlN1cHBvcnRBbHBoYSwgc2l6ZSk7Ci0KLSAgICBpZiAoIW1fYnVmZmVySGFuZGxl
KSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
ZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheSgpLmVnbERpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRD
b25maWcoKSwgc3RhdGljX2Nhc3Q8RUdMTmF0aXZlV2luZG93VHlwZT4obV9idWZmZXJIYW5kbGUp
LCAwKTsKLQotICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuIiwgZWdsR2V0RXJy
b3IoKSk7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICB9Ci19Ci0KLUVHTFdpbmRvd1RyYW5zcG9y
dFN1cmZhY2U6On5FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCkKLXsKLX0KLQotdm9pZCBFR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCi17Ci0gICAgaWYgKCFlZ2xTd2Fw
QnVmZmVycyhQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS5lZ2xEaXNwbGF5KCksIG1f
ZHJhd2FibGUpKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBTd2FwQnVmZmVycyglZCku
IiwgZWdsR2V0RXJyb3IoKSk7Ci19Ci0KLXZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6
ZGVzdHJveSgpCi17Ci0gICAgRUdMVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpOwotCi0gICAg
aWYgKG1fYnVmZmVySGFuZGxlKSB7Ci0gICAgICAgIE5hdGl2ZVdyYXBwZXI6OmRlc3Ryb3lXaW5k
b3cobV9idWZmZXJIYW5kbGUpOwotICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7Ci0gICAgfQot
fQotCi1FR0xQaXhtYXBTdXJmYWNlOjpFR0xQaXhtYXBTdXJmYWNlKEdMUGxhdGZvcm1TdXJmYWNl
OjpTdXJmYWNlQXR0cmlidXRlcyBzdXJmYWNlQXR0cmlidXRlcykKLSAgICA6IEVHTE9mZlNjcmVl
blN1cmZhY2Uoc3VyZmFjZUF0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9y
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFR0xDb25maWcgY29uZmlnID0gbV9jb25maWdTZWxl
Y3Rvci0+cGl4bWFwQ29udGV4dENvbmZpZygpOwotCi0gICAgaWYgKCFjb25maWcpIHsKLSAgICAg
ICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRUdMaW50IHZpc3Vh
bElkID0gbV9jb25maWdTZWxlY3Rvci0+bmF0aXZlVmlzdWFsSWQoY29uZmlnKTsKLQotICAgIGlm
ICh2aXN1YWxJZCA9PSAtMSkgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBOYXRpdmVQaXhtYXAgcGl4bWFwOwotICAgIE5hdGl2ZVdyYXBwZXI6OmNy
ZWF0ZVBpeG1hcCgmcGl4bWFwLCB2aXN1YWxJZCwgbV9jb25maWdTZWxlY3Rvci0+YXR0cmlidXRl
cygpICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSk7Ci0gICAgbV9idWZmZXJIYW5k
bGUgPSBwaXhtYXA7Ci0KLSAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7Ci0gICAgICAgIGRlc3Ry
b3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVh
dGVQaXhtYXBTdXJmYWNlKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLmVnbERpc3Bs
YXkoKSwgY29uZmlnLCBzdGF0aWNfY2FzdDxFR0xOYXRpdmVQaXhtYXBUeXBlPihtX2J1ZmZlckhh
bmRsZSksIDApOwotCi0gICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNlKCVkKS4iLCBlZ2xH
ZXRFcnJvcigpKTsKLSAgICAgICAgZGVzdHJveSgpOwotICAgIH0KLX0KLQotRUdMUGl4bWFwU3Vy
ZmFjZTo6fkVHTFBpeG1hcFN1cmZhY2UoKQotewotfQotCi12b2lkIEVHTFBpeG1hcFN1cmZhY2U6
OmRlc3Ryb3koKQotewotICAgIEVHTE9mZlNjcmVlblN1cmZhY2U6OmRlc3Ryb3koKTsKLQotICAg
IGlmIChtX2J1ZmZlckhhbmRsZSkgewotICAgICAgICBOYXRpdmVXcmFwcGVyOjpkZXN0cm95UGl4
bWFwKG1fYnVmZmVySGFuZGxlKTsKLSAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOwotICAgIH0K
LX0KLQotRUdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OkVHTFhUcmFuc3BvcnRTdXJmYWNlQ2xp
ZW50KGNvbnN0IFBsYXRmb3JtQnVmZmVySGFuZGxlIGhhbmRsZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBoYXNBbHBoYSkKLSAgICA6IEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCgpCi0gICAg
LCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fdG90YWxCeXRlcygwKQotewotICAgIGlmICghaGFuZGxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBYV2luZG93
QXR0cmlidXRlcyBhdHRyOwotCi0gICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhOYXRpdmVX
cmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIG1faGFuZGxlLCAmYXR0cikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFj
ZUF0dHJpYnV0ZXMgc2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6
RGVmYXVsdDsKLQotICAgIGlmIChoYXNBbHBoYSkKLSAgICAgICAgc2hhcmVkU3VyZmFjZUF0dHJp
YnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhhOwotCi0gICAgRUdMQ29uZmln
U2VsZWN0b3IgY29uZmlnU2VsZWN0b3Ioc2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIEVH
TENvbmZpZyBjb25maWcgPSBjb25maWdTZWxlY3Rvci5zdXJmYWNlQ2xpZW50Q29uZmlnKFhWaXN1
YWxJREZyb21WaXN1YWwoYXR0ci52aXN1YWwpKTsKLSAgICBtX2VnbEltYWdlID0gc3RkOjptYWtl
X3VuaXF1ZTxFR0xUZXh0dXJlRnJvbVBpeG1hcD4obV9oYW5kbGUsIGhhc0FscGhhLCBjb25maWcp
OwotCi0gICAgaWYgKCFtX2VnbEltYWdlLT5pc1ZhbGlkKCkgfHwgZWdsR2V0RXJyb3IoKSAhPSBF
R0xfU1VDQ0VTUykKLSAgICAgICAgZGVzdHJveSgpOwotCi0gICAgaWYgKG1fZWdsSW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fdG90YWxCeXRlcyA9IG1fc2l6ZS53aWR0aCgpICogbV9z
aXplLmhlaWdodCgpICogNDsKLQotI2lmIFVTRShPUEVOR0xfRVNfMikKLSAgICBtX2Zvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAgIHN0YXRpYyBib29sIGJncmFTdXBwb3J0ZWQg
PSBHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTEV4dGVuc2lvbigiR0xfRVhUX3RleHR1cmVf
Zm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgaWYgKGJncmFTdXBwb3J0ZWQpCi0gICAgICAgIG1fZm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkE7Ci0jZW5kaWYKLQotICAgIGNyZWF0ZVRleHR1
cmUoKTsKLSAgICBwcmVwYXJlVGV4dHVyZSgpOwotfQotCi1FR0xYVHJhbnNwb3J0U3VyZmFjZUNs
aWVudDo6fkVHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KCkKLXsKLX0KLQotdm9pZCBFR0xYVHJh
bnNwb3J0U3VyZmFjZUNsaWVudDo6ZGVzdHJveSgpCi17Ci0gICAgR0xUcmFuc3BvcnRTdXJmYWNl
Q2xpZW50OjpkZXN0cm95KCk7Ci0KLSAgICBpZiAobV9lZ2xJbWFnZSkgewotICAgICAgICBtX2Vn
bEltYWdlLT5kZXN0cm95KCk7Ci0gICAgICAgIG1fZWdsSW1hZ2UgPSBudWxscHRyOwotICAgIH0K
LQotICAgIGVnbFdhaXRHTCgpOwotICAgIG1faW1hZ2UgPSBudWxscHRyOwotfQotCi12b2lkIEVH
TFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0KLSAgICBpZiAobV9lZ2xJbWFn
ZSkgewotICAgICAgICBtX2VnbEltYWdlLT5yZUJpbmRUZXhJbWFnZSgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gdXNlIFhJbWFnZSBpbiBjYXNlIEVHTElt
YWdlIGFuZCBUZXh0dXJlVG9QaXhtYXAgYXJlIG5vdCBzdXBwb3J0ZWQuCi0gICAgbV9pbWFnZS5y
ZXNldChYR2V0SW1hZ2UoTmF0aXZlV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCBtX2hhbmRsZSwg
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgQWxsUGxhbmVzLCBaUGl4bWFw
KSk7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTXzIpCi0gICAgaWYgKG1fZm9ybWF0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpCR1JBKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Rv
dGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgICAgIHN0ZDo6c3dhcChtX2ltYWdlLT5kYXRhW2ld
LCBtX2ltYWdlLT5kYXRhW2kgKyAyXSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBnbFRleEltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9mb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCksIDAsIG1fZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBtX2ltYWdlLT5kYXRhKTsKLQot
ICAgIG1faW1hZ2UgPSBudWxscHRyOwotfQotCi1FR0xUZXh0dXJlRnJvbVBpeG1hcDo6RUdMVGV4
dHVyZUZyb21QaXhtYXAoY29uc3QgTmF0aXZlUGl4bWFwIGhhbmRsZSwgYm9vbCBoYXNBbHBoYSwg
RUdMQ29uZmlnIGNvbmZpZykKLSAgICA6IG1fZWdsSW1hZ2UoMCkKLSAgICAsIG1fc3VyZmFjZShF
R0xfTk9fU1VSRkFDRSkKLXsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc3RhdGljIGJvb2wgdGV4dHVyZUZyb21QaXhtYXBTdXBwb3J0ZWQgPSBHTFBsYXRmb3JtQ29u
dGV4dDo6c3VwcG9ydHNFR0xFeHRlbnNpb24oRUdMSGVscGVyOjplZ2xEaXNwbGF5KCksICJFR0xf
Tk9LX3RleHR1cmVfZnJvbV9waXhtYXAiKTsKLQotICAgIGlmICh0ZXh0dXJlRnJvbVBpeG1hcFN1
cHBvcnRlZCkgewotICAgICAgICBjb25zdCBFR0xpbnQgcGl4bWFwQXR0cmlic1tdID0geyBFR0xf
VEVYVFVSRV9GT1JNQVQsIGhhc0FscGhhID8gRUdMX1RFWFRVUkVfUkdCQSA6IEVHTF9URVhUVVJF
X1JHQiwgRUdMX1RFWFRVUkVfVEFSR0VULCBFR0xfVEVYVFVSRV8yRCwgRUdMX05PTkUgfTsKLSAg
ICAgICAgbV9zdXJmYWNlID0gZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShFR0xIZWxwZXI6OmVnbERp
c3BsYXkoKSwgY29uZmlnLCBoYW5kbGUsIHBpeG1hcEF0dHJpYnMpOwotCi0gICAgICAgIGlmICht
X3N1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UgJiYgIWVnbEJpbmRUZXhJbWFnZShFR0xIZWxwZXI6
OmVnbERpc3BsYXkoKSwgbV9zdXJmYWNlLCBFR0xfQkFDS19CVUZGRVIpKQotICAgICAgICAgICAg
ZGVzdHJveSgpOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyBjb25zdCBFR0xpbnQgaW1hZ2VBdHRyc1td
ID0geyBFR0xfSU1BR0VfUFJFU0VSVkVEX0tIUiwgRUdMX1RSVUUsIEVHTF9OT05FIH07Ci0gICAg
RUdMSGVscGVyOjpjcmVhdGVFR0xJbWFnZSgmbV9lZ2xJbWFnZSwgRUdMX05BVElWRV9QSVhNQVBf
S0hSLCAoRUdMQ2xpZW50QnVmZmVyKShoYW5kbGUpLCBpbWFnZUF0dHJzKTsKLQotICAgIGlmICht
X2VnbEltYWdlKSB7Ci0gICAgICAgIEVHTEhlbHBlcjo6aW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMo
bV9lZ2xJbWFnZSk7Ci0gICAgICAgIEVHTGludCBlcnJvciA9IGVnbEdldEVycm9yKCk7Ci0KLSAg
ICAgICAgaWYgKGVycm9yICE9IEVHTF9TVUNDRVNTKQotICAgICAgICAgICAgZGVzdHJveSgpOwot
ICAgIH0KLX0KLQotRUdMVGV4dHVyZUZyb21QaXhtYXA6On5FR0xUZXh0dXJlRnJvbVBpeG1hcCgp
Ci17Ci19Ci0KLXZvaWQgRUdMVGV4dHVyZUZyb21QaXhtYXA6OmRlc3Ryb3koKQotewotICAgIGVn
bFdhaXROYXRpdmUoRUdMX0NPUkVfTkFUSVZFX0VOR0lORSk7Ci0KLSAgICBpZiAobV9zdXJmYWNl
ICE9IEVHTF9OT19TVVJGQUNFKQotICAgICAgICBlZ2xSZWxlYXNlVGV4SW1hZ2UoRUdMSGVscGVy
OjplZ2xEaXNwbGF5KCksIG1fc3VyZmFjZSwgRUdMX0JBQ0tfQlVGRkVSKTsKLQotICAgIGlmICht
X2VnbEltYWdlKSB7Ci0gICAgICAgIEVHTEhlbHBlcjo6ZGVzdHJveUVHTEltYWdlKG1fZWdsSW1h
Z2UpOwotICAgICAgICBtX2VnbEltYWdlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9zdXJmYWNl
ICE9IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKEVHTEhlbHBl
cjo6ZWdsRGlzcGxheSgpLCBtX3N1cmZhY2UpOwotICAgICAgICBtX3N1cmZhY2UgPSBFR0xfTk9f
U1VSRkFDRTsKLSAgICB9Ci0KLSAgICBlZ2xXYWl0R0woKTsKLX0KLQotYm9vbCBFR0xUZXh0dXJl
RnJvbVBpeG1hcDo6aXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3VyZmFjZSB8fCBtX2Vn
bEltYWdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBFR0xUZXh0dXJlRnJvbVBpeG1hcDo6YmluZFRleEltYWdlKCkKLXsKLSAgICBpZiAobV9z
dXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGVnbEJp
bmRUZXhJbWFnZShFR0xIZWxwZXI6OmVnbERpc3BsYXkoKSwgbV9zdXJmYWNlLCBFR0xfQkFDS19C
VUZGRVIpOwotICAgICAgICByZXR1cm4gc3VjY2VzczsKLSAgICB9Ci0KLSAgICBpZiAobV9lZ2xJ
bWFnZSkgewotICAgICAgICBFR0xIZWxwZXI6OmltYWdlVGFyZ2V0VGV4dHVyZTJET0VTKG1fZWds
SW1hZ2UpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgRUdMVGV4dHVyZUZyb21QaXhtYXA6OnJlQmluZFRleEltYWdlKCkKLXsKLSAg
ICBpZiAobV9zdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgIGJvb2wgc3VjY2Vz
cyA9IGVnbFJlbGVhc2VUZXhJbWFnZShFR0xIZWxwZXI6OmVnbERpc3BsYXkoKSwgbV9zdXJmYWNl
LCBFR0xfQkFDS19CVUZGRVIpOwotCi0gICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAg
c3VjY2VzcyA9IGVnbEJpbmRUZXhJbWFnZShFR0xIZWxwZXI6OmVnbERpc3BsYXkoKSwgbV9zdXJm
YWNlLCBFR0xfQkFDS19CVUZGRVIpOwotCi0gICAgICAgIHJldHVybiBzdWNjZXNzOwotICAgIH0K
LQotICAgIGlmIChtX2VnbEltYWdlKSB7Ci0gICAgICAgIEVHTEhlbHBlcjo6aW1hZ2VUYXJnZXRU
ZXh0dXJlMkRPRVMobV9lZ2xJbWFnZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xYU3VyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFhTdXJmYWNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MDBlY2ZkMmUyLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMWFN1
cmZhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgRUdMWFN1cmZhY2VfaAotI2RlZmluZSBFR0xYU3VyZmFjZV9oCi0KLSNpZiBQ
TEFURk9STShYMTEpICYmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQotCi0jaW5j
bHVkZSAiRUdMU3VyZmFjZS5oIgotI2luY2x1ZGUgIlhVbmlxdWVQdHIuaCIKLSNpbmNsdWRlIDxn
bHgvWDExSGVscGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBQaXhtYXAg
TmF0aXZlUGl4bWFwOwotCi0vLyBDb250ZW50cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFja2VkIGJ5
IG5hdGl2ZSB3aW5kb3cuCi1jbGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGlj
IEVHTFRyYW5zcG9ydFN1cmZhY2UgewotcHVibGljOgotICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1
cmZhY2UoY29uc3QgSW50U2l6ZSYsIEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRl
cyk7Ci0gICAgdmlydHVhbCB+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpOwotICAgIHZvaWQg
c3dhcEJ1ZmZlcnMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlc3Ryb3koKSBvdmVycmlkZTsKLX07
Ci0KLWNsYXNzIEVHTFBpeG1hcFN1cmZhY2UgOiBwdWJsaWMgRUdMT2ZmU2NyZWVuU3VyZmFjZSB7
Ci1wdWJsaWM6Ci0gICAgRUdMUGl4bWFwU3VyZmFjZShHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFj
ZUF0dHJpYnV0ZXMpOwotICAgIHZpcnR1YWwgfkVHTFBpeG1hcFN1cmZhY2UoKTsKLSAgICB2b2lk
IGRlc3Ryb3koKSBvdmVycmlkZTsKLX07Ci0KLWNsYXNzIEVHTFRleHR1cmVGcm9tUGl4bWFwIHsK
LXB1YmxpYzoKLSAgICBFR0xUZXh0dXJlRnJvbVBpeG1hcChjb25zdCBOYXRpdmVQaXhtYXAsIGJv
b2wsIEVHTENvbmZpZyk7Ci0gICAgdmlydHVhbCB+RUdMVGV4dHVyZUZyb21QaXhtYXAoKTsKLSAg
ICBib29sIGJpbmRUZXhJbWFnZSgpOwotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotICAgIGJv
b2wgcmVCaW5kVGV4SW1hZ2UoKTsKLSAgICB2b2lkIGRlc3Ryb3koKTsKLQotcHJpdmF0ZToKLSAg
ICBFR0xJbWFnZUtIUiBtX2VnbEltYWdlOwotICAgIEVHTFN1cmZhY2UgbV9zdXJmYWNlOwotfTsK
LQotY2xhc3MgRUdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQgOiBwdWJsaWMgR0xUcmFuc3BvcnRT
dXJmYWNlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBFR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudChj
b25zdCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSwgY29uc3QgSW50U2l6ZSYsIGJvb2wpOwotICAgIHZp
cnR1YWwgfkVHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KCk7Ci0gICAgdm9pZCBwcmVwYXJlVGV4
dHVyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveSgpIG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIFhVbmlxdWVQdHI8WEltYWdlPiBtX2ltYWdlOwotICAgIEludFNpemUgbV9zaXplOwot
ICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIG1faGFuZGxlOwotICAgIEdMdWludCBtX2Zvcm1hdDsK
LSAgICB1bnNpZ25lZCBtX3RvdGFsQnl0ZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVHTFRleHR1
cmVGcm9tUGl4bWFwPiBtX2VnbEltYWdlOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYQ29uZmlnU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNDU4MzFkNzIxZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHTFhDb25m
aWdTZWxlY3Rvcl9oCi0jZGVmaW5lIEdMWENvbmZpZ1NlbGVjdG9yX2gKLQotI2lmIFVTRShHTFgp
Ci0KLSNpbmNsdWRlICJYMTFIZWxwZXIuaCIKLSNpbmNsdWRlICJYVW5pcXVlUHRyLmgiCi0jaW5j
bHVkZSA8b3BlbmdsL0dMRGVmcy5oPgotI2luY2x1ZGUgPG9wZW5nbC9HTFBsYXRmb3JtU3VyZmFj
ZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbnQgY2xpZW50QXR0cmlidXRl
c1tdID0gewotICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgc2V0IGtleSB2YWx1ZSBwYWly
cyBzdG9yZWQgaW4gYSBzaW1wbGUgYXJyYXkuCi0gICAgR0xYX0xFVkVMLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwKLSAgICBzdGF0aWNfY2FzdDxpbnQ+KEdMWF9WSVNVQUxfSUQpLCAgICAw
LAotICAgIEdMWF9EUkFXQUJMRV9UWVBFLCAgICAgICAgICAgICAgICAgIEdMWF9QSVhNQVBfQklU
LAotICAgIEdMWF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUU19FWFQsICAgIEdMWF9URVhUVVJFXzJE
X0JJVF9FWFQsCi0gICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JBX0VYVCwgICAgICAgVFJVRSwK
LSAgICAwCi19OwotCi1zdGF0aWMgaW50IGdseFN1cmZhY2VBdHRyaWJ1dGVzW10gPSB7Ci0gICAg
R0xYX0xFVkVMLCAwLAotICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUElYTUFQX0JJVCwKLSAg
ICBHTFhfUkVOREVSX1RZUEUsICAgMCwKLSAgICBHTFhfUkVEX1NJWkUsICAgICAgMSwKLSAgICBH
TFhfR1JFRU5fU0laRSwgICAgMSwKLSAgICBHTFhfQkxVRV9TSVpFLCAgICAgMSwKLSAgICBHTFhf
QUxQSEFfU0laRSwgICAgMCwKLSAgICBHTFhfRE9VQkxFQlVGRkVSLCAgR0xfRkFMU0UsCi0gICAg
Tm9uZQotfTsKLQotY2xhc3MgR0xYQ29uZmlnU2VsZWN0b3IgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEdMWENvbmZpZ1NlbGVjdG9yKTsKLQotcHVibGljOgotICAgIEdMWENvbmZpZ1NlbGVj
dG9yKEdMUGxhdGZvcm1TdXJmYWNlOjpTdXJmYWNlQXR0cmlidXRlcyBhdHRyID0gR0xQbGF0Zm9y
bVN1cmZhY2U6OkRlZmF1bHQpCi0gICAgICAgIDogbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKDAp
Ci0gICAgICAgICwgbV9waXhtYXBDb250ZXh0RkJDb25maWcoMCkKLSAgICAgICAgLCBtX2F0dHJp
YnV0ZXMoYXR0cikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+R0xYQ29uZmlnU2VsZWN0
b3IoKQotICAgIHsKLSAgICB9Ci0KLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyhjb25zdCBH
TFhGQkNvbmZpZyYgY29uZmlnKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZy
b21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgY29uZmlnKTsKLSAgICB9Ci0K
LSAgICBHTFhGQkNvbmZpZyBwaXhtYXBDb250ZXh0Q29uZmlnKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9waXhtYXBDb250ZXh0RkJDb25maWcpIHsKLSAgICAgICAgICAgIHZhbGlkYXRlQXR0cmli
dXRlcygpOwotICAgICAgICAgICAgbV9waXhtYXBDb250ZXh0RkJDb25maWcgPSBmaW5kTWF0Y2hp
bmdDb25maWcoZ2x4U3VyZmFjZUF0dHJpYnV0ZXMsIG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1T
dXJmYWNlOjpTdXBwb3J0QWxwaGEgPyAzMiA6IDI0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBtX3BpeG1hcENvbnRleHRGQkNvbmZpZzsKLSAgICB9Ci0KLQotICAgIEdMWEZCQ29uZmln
IHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdXJmYWNlQ29u
dGV4dEZCQ29uZmlnKSB7Ci0gICAgICAgICAgICBnbHhTdXJmYWNlQXR0cmlidXRlc1szXSA9IEdM
WF9XSU5ET1dfQklUOwotICAgICAgICAgICAgZ2x4U3VyZmFjZUF0dHJpYnV0ZXNbN10gPSA4Owot
ICAgICAgICAgICAgZ2x4U3VyZmFjZUF0dHJpYnV0ZXNbOV0gPSA4OwotICAgICAgICAgICAgZ2x4
U3VyZmFjZUF0dHJpYnV0ZXNbMTFdID0gODsKLSAgICAgICAgICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwotICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gZmluZE1hdGNoaW5n
Q29uZmlnKGdseFN1cmZhY2VBdHRyaWJ1dGVzLCBtX2F0dHJpYnV0ZXMgJiBHTFBsYXRmb3JtU3Vy
ZmFjZTo6U3VwcG9ydEFscGhhID8gMzIgOiAyNCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOwotICAgIH0KLQotICAgIEdMWEZCQ29uZmlnIHN1
cmZhY2VDbGllbnRDb25maWcoaW50IGRlcHRoLCBWaXN1YWxJRCBpZCkKLSAgICB7Ci0gICAgICAg
IGNsaWVudEF0dHJpYnV0ZXNbM10gPSBzdGF0aWNfY2FzdDxpbnQ+KGlkKTsKLSAgICAgICAgY2xp
ZW50QXR0cmlidXRlc1s4XSA9IGRlcHRoID09IDMyID8gR0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JB
X0VYVCA6IEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdCX0VYVDsKLSAgICAgICAgLy8gUHJlZmVyIHRv
IG1hdGNoIHdpdGggVmlzdWFsIElkLgotICAgICAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBmaW5k
TWF0Y2hpbmdDb25maWdXaXRoVmlzdWFsSWQoY2xpZW50QXR0cmlidXRlcywgZGVwdGgsIGlkKTsK
LQotICAgICAgICBpZiAoIWNvbmZpZykKLSAgICAgICAgICAgIGNvbmZpZyA9IGZpbmRNYXRjaGlu
Z0NvbmZpZyhjbGllbnRBdHRyaWJ1dGVzLCBkZXB0aCk7Ci0KLSAgICAgICAgcmV0dXJuIGNvbmZp
ZzsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fc3VyZmFjZUNv
bnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgICAgIG1fcGl4bWFwQ29udGV4dEZCQ29uZmlnID0gMDsK
LSAgICB9Ci0KLSAgICBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmli
dXRlcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpCi0gICAgewotICAgICAg
ICBpZiAobV9hdHRyaWJ1dGVzICYgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cHBvcnRBbHBoYSkgewot
ICAgICAgICAgICAgZ2x4U3VyZmFjZUF0dHJpYnV0ZXNbMTNdID0gODsKLSAgICAgICAgICAgIGds
eFN1cmZhY2VBdHRyaWJ1dGVzWzVdID0gR0xYX1JHQkFfQklUOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1TdXJmYWNlOjpEb3VibGVCdWZmZXJlZCkK
LSAgICAgICAgICAgIGdseFN1cmZhY2VBdHRyaWJ1dGVzWzE1XSA9IEdMX1RSVUU7Ci0gICAgfQot
Ci0gICAgR0xYRkJDb25maWcgZmluZE1hdGNoaW5nQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVz
W10sIGludCBkZXB0aCA9IDMyKQotICAgIHsKLSAgICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZp
Z3M7Ci0gICAgICAgIFhVbmlxdWVQdHI8R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJDb25m
aWcoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oWDExSGVscGVyOjpu
YXRpdmVEaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncykpOwotCi0g
ICAgICAgIGlmICghbnVtQXZhaWxhYmxlQ29uZmlncyB8fCAhdGVtcC5nZXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXZhaWxhYmxl
Q29uZmlnczsgKytpKSB7Ci0gICAgICAgICAgICBYVW5pcXVlUHRyPFhWaXN1YWxJbmZvPiBzY29w
ZWRWaXN1YWxJbmZvIHsgZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKFgxMUhlbHBlcjo6bmF0aXZl
RGlzcGxheSgpLCB0ZW1wLmdldCgpW2ldKSB9OwotICAgICAgICAgICAgaWYgKCFzY29wZWRWaXN1
YWxJbmZvLmdldCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpICYmIFVTRShHTFgpCi0gICAgICAgICAgICBpZiAoWDExSGVscGVyOjppc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0
Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChYMTFIZWxwZXI6Om5hdGl2
ZURpc3BsYXkoKSwgc2NvcGVkVmlzdWFsSW5mby0+dmlzdWFsKTsKLQotICAgICAgICAgICAgICAg
IGlmIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcyAmIEdM
UGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCA9PSBkZXB0aCAmJiBmb3JtYXQtPmRpcmVjdC5h
bHBoYU1hc2sgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wLmdl
dCgpW2ldOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmb3JtYXQtPmRpcmVjdC5h
bHBoYU1hc2spCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcC5nZXQoKVtpXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGlm
IChzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCA9PSBkZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGVtcC5nZXQoKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERpZCBub3QgZmluZCBh
bnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxwaGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNv
bmZpZy4KLSAgICAgICAgWFVuaXF1ZVB0cjxYVmlzdWFsSW5mbz4gc2NvcGVkVmlzdWFsSW5mbyB7
IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgdGVt
cC5nZXQoKVswXSkgfTsKLQotICAgICAgICBpZiAoKG1fYXR0cmlidXRlcyAmIEdMUGxhdGZvcm1T
dXJmYWNlOjpTdXBwb3J0QWxwaGEpICYmIChzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCAhPSAzMikp
Ci0gICAgICAgICAgICBtX2F0dHJpYnV0ZXMgJj0gfkdMUGxhdGZvcm1TdXJmYWNlOjpTdXBwb3J0
QWxwaGE7Ci0KLSAgICAgICAgcmV0dXJuIHRlbXAuZ2V0KClbMF07Ci0gICAgfQotCi0gICAgR0xY
RkJDb25maWcgZmluZE1hdGNoaW5nQ29uZmlnV2l0aFZpc3VhbElkKGNvbnN0IGludCBhdHRyaWJ1
dGVzW10sIGludCBkZXB0aCwgVmlzdWFsSUQgaWQpCi0gICAgewotICAgICAgICBpbnQgbnVtQXZh
aWxhYmxlQ29uZmlnczsKLSAgICAgICAgWFVuaXF1ZVB0cjxHTFhGQkNvbmZpZz4gdGVtcChnbFhD
aG9vc2VGQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihY
MTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFibGVDb25m
aWdzKSk7Ci0KLSAgICAgICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzIHx8ICF0ZW1wLmdldCgp
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1BdmFpbGFibGVDb25maWdzOyArK2kpIHsKLSAgICAgICAgICAgIFhVbmlxdWVQdHI8WFZpc3Vh
bEluZm8+IHNjb3BlZFZpc3VhbEluZm8geyBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExSGVs
cGVyOjpuYXRpdmVEaXNwbGF5KCksIHRlbXAuZ2V0KClbaV0pIH07Ci0gICAgICAgICAgICBpZiAo
IXNjb3BlZFZpc3VhbEluZm8uZ2V0KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIGlmIChpZCAmJiBzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCA9PSBkZXB0aCAmJiBz
Y29wZWRWaXN1YWxJbmZvLT52aXN1YWxpZCA9PSBpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGVtcC5nZXQoKVtpXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIEdMWEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBHTFhGQkNvbmZp
ZyBtX3BpeG1hcENvbnRleHRGQkNvbmZpZzsKLSAgICBHTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFj
ZUF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzIDogMzsKLX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRp
ZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY5NDEyYmZkODgzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdMWENvbnRleHQuaCIKLQotI2lmIFVTRShHTFgpCi0KLSNpbmNsdWRlICJYMTFIZWxw
ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEdMWENvbnRleHQgKCpHTFhD
UkVBVEVDT05URVhUQVRUUklCU0FSQlBST0MpKERpc3BsYXkqLCBHTFhGQkNvbmZpZywgR0xYQ29u
dGV4dCwgQm9vbCwgY29uc3QgaW50Kik7Ci1zdGF0aWMgR0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNB
UkJQUk9DIGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCID0gMDsKLQotc3RhdGljIGludCBBdHRy
aWJzW10gPSB7Ci0gICAgR0xYX0NPTlRFWFRfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0FS
QiwKLSAgICBHTFhfTE9TRV9DT05URVhUX09OX1JFU0VUX0FSQiwKLSAgICAwIH07Ci0KLXN0YXRp
YyB2b2lkIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0
aWFsaXplZCA9IGZhbHNlOwotICAgIGlmIChpbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIGlmIChHTFBsYXRmb3JtQ29udGV4dDo6c3Vw
cG9ydHNHTFhFeHRlbnNpb24oWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksICJHTFhfQVJCX2Ny
ZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKSkKLSAgICAgICAgZ2xYQ3JlYXRlQ29udGV4dEF0dHJp
YnNBUkIgPSByZWludGVycHJldF9jYXN0PEdMWENSRUFURUNPTlRFWFRBVFRSSUJTQVJCUFJPQz4o
Z2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsWENy
ZWF0ZUNvbnRleHRBdHRyaWJzQVJCIikpKTsKLX0KLQotR0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xY
T2ZmU2NyZWVuQ29udGV4dCgpCi0gICAgOiBHTFBsYXRmb3JtQ29udGV4dCgpCi17Ci19Ci0KLWJv
b2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3Vy
ZmFjZSwgUGxhdGZvcm1Db250ZXh0IHNoYXJlZENvbnRleHQpCi17Ci0gICAgaWYgKCFzdXJmYWNl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEaXNwbGF5KiB4MTFEaXNwbGF5ID0gWDEx
SGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7Ci0gICAgaWYgKCF4MTFEaXNwbGF5KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1
cmF0aW9uKCk7Ci0KLSAgICBpZiAoY29uZmlnKSB7Ci0gICAgICAgIGluaXRpYWxpemVBUkJFeHRl
bnNpb25zKCk7Ci0KLSAgICAgICAgaWYgKGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKQotICAg
ICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIoeDEx
RGlzcGxheSwgY29uZmlnLCBzaGFyZWRDb250ZXh0LCB0cnVlLCBBdHRyaWJzKTsKLQotICAgICAg
ICBpZiAobV9jb250ZXh0SGFuZGxlKSB7Ci0gICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVh
dGVfY29udGV4dF9yb2J1c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRl
ZCB3aXRoCi0gICAgICAgICAgICAvLyBHTFhfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0JJVF9BUkIg
Yml0IHNldCBtdXN0IGFsc28gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBvcgotICAgICAgICAg
ICAgLy8gYSB2ZXJzaW9uIG9mIE9wZW5HTCBpbmNvcnBvcmF0aW5nIGVxdWl2YWxlbnQgZnVuY3Rp
b25hbGl0eS4KLSAgICAgICAgICAgIC8vIFRoZSBzcGVjIGFsc28gZGVmaW5lcyBzaW1pbGFyIHJl
cXVpcmVtZW50cyBmb3IgYXR0cmlidXRlIEdMWF9DT05URVhUX1JFU0VUX05PVElGSUNBVElPTl9T
VFJBVEVHWV9BUkIuCi0gICAgICAgICAgICBpZiAocGxhdGZvcm1NYWtlQ3VycmVudChzdXJmYWNl
KSAmJiBHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTEV4dGVuc2lvbigiR0xfQVJCX3JvYnVz
dG5lc3MiKSkKLSAgICAgICAgICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KHgxMURpc3Bs
YXksIG1fY29udGV4dEhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHN1cHBvcnRz
QWxwaGEgPSBzdXJmYWNlLT5hdHRyaWJ1dGVzKCkgJiBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9y
dEFscGhhOwotICAgICAgICBpZiAoIW1fY29udGV4dEhhbmRsZSkKLSAgICAgICAgICAgIG1fY29u
dGV4dEhhbmRsZSA9IGdsWENyZWF0ZU5ld0NvbnRleHQoeDExRGlzcGxheSwgY29uZmlnLCBzdXBw
b3J0c0FscGhhID8gR0xYX1JHQkFfVFlQRSA6IDAsIHNoYXJlZENvbnRleHQsIHRydWUpOwotCi0g
ICAgICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUdMWE9mZlNjcmVlbkNvbnRleHQ6On5HTFhP
ZmZTY3JlZW5Db250ZXh0KCkKLXsKLX0KLQotYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppc0N1
cnJlbnRDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0SGFuZGxlID09IGds
WEdldEN1cnJlbnRDb250ZXh0KCk7Ci19Ci0KLWJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxh
dGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKLXsKLSAgICByZXR1
cm4gZ2xYTWFrZUN1cnJlbnQoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIHN1cmZhY2UtPmRy
YXdhYmxlKCksIG1fY29udGV4dEhhbmRsZSk7Ci19Ci0KLXZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4
dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpCi17Ci0gICAgRGlzcGxheSogeDExRGlzcGxheSA9
IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOwotICAgIGlmICgheDExRGlzcGxheSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZ2xYTWFrZUN1cnJlbnQoeDExRGlzcGxheSwgMCwgMCk7Ci19Ci0K
LXZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCi17Ci0gICAgRGlzcGxh
eSogeDExRGlzcGxheSA9IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOwotICAgIGlmICgheDEx
RGlzcGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY29udGV4dEhhbmRsZSkKLSAg
ICAgICAgZ2xYRGVzdHJveUNvbnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKLQot
ICAgIG1fY29udGV4dEhhbmRsZSA9IDA7Ci19Ci0KLXZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6
ZGVzdHJveSgpCi17Ci0gICAgZnJlZVJlc291cmNlcygpOwotICAgIEdMUGxhdGZvcm1Db250ZXh0
OjpkZXN0cm95KCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5MDg1MTFhOWMuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEdMWENvbnRleHRfaAotI2RlZmluZSBHTFhDb250ZXh0X2gKLQotI2lmIFVTRShHTFgpCi0K
LSNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEdMWE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgewot
Ci1wdWJsaWM6Ci0gICAgR0xYT2ZmU2NyZWVuQ29udGV4dCgpOwotICAgIHZpcnR1YWwgfkdMWE9m
ZlNjcmVlbkNvbnRleHQoKTsKLSAgICBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2Uq
LCBQbGF0Zm9ybUNvbnRleHQpIG92ZXJyaWRlOwotICAgIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVu
dChHTFBsYXRmb3JtU3VyZmFjZSopIG92ZXJyaWRlOwotICAgIHZvaWQgcGxhdGZvcm1SZWxlYXNl
Q3VycmVudCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVzdHJveSgpIG92ZXJyaWRlOwotICAgIGJv
b2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZv
aWQgZnJlZVJlc291cmNlcygpOwotfTsKLQotfQotCi0jZW5kaWYgLy8gR0xYQ1VSUkVOVENPTlRF
WFdSQVBQRVJfSAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDE4MzdmNjFkNjQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR0xYU3VyZmFjZS5oIgotCi0jaWYgVVNFKEdMWCkKLQot
I2luY2x1ZGUgIlhVbmlxdWVQdHIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
UEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmluZFRleEltYWdlRVhUID0gMDsKLXN0YXRp
YyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSAw
OwotCi1zdGF0aWMgYm9vbCByZXNvbHZlR0xNZXRob2RzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBy
ZXNvbHZlZCA9IGZhbHNlOwotICAgIGlmIChyZXNvbHZlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBwR2xYQmluZFRleEltYWdlRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhCSU5E
VEVYSU1BR0VFWFRQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IEdMdWJ5dGUqPigiZ2xYQmluZFRleEltYWdlRVhUIikpKTsKLSAgICBwR2xYUmVsZWFzZVRleElt
YWdlRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DPihn
bFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYUmVs
ZWFzZVRleEltYWdlRVhUIikpKTsKLQotICAgIHJlc29sdmVkID0gcEdsWEJpbmRUZXhJbWFnZUVY
VCAmJiBwR2xYUmVsZWFzZVRleEltYWdlRVhUOwotCi0gICAgcmV0dXJuIHJlc29sdmVkOwotfQot
Ci1zdGF0aWMgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKLSAgICBHTFhfVEVYVFVSRV9GT1JNQVRf
RVhULAotICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JBX0VYVCwKLSAgICBHTFhfVEVYVFVSRV9U
QVJHRVRfRVhULAotICAgIEdMWF9URVhUVVJFXzJEX0VYVCwKLSAgICAwCi19OwotCi1zdGF0aWMg
Ym9vbCBpc01lc2FHTFgoKQotewotICAgIHN0YXRpYyBib29sIGlzTWVzYSA9ICEhc3Ryc3RyKGds
WEdldENsaWVudFN0cmluZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgR0xYX1ZFTkRPUiks
ICJNZXNhIik7Ci0gICAgcmV0dXJuIGlzTWVzYTsKLX0KLQotR0xYVHJhbnNwb3J0U3VyZmFjZTo6
R0xYVHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMp
Ci17Ci0gICAgYXR0cmlidXRlcyB8PSBHTFBsYXRmb3JtU3VyZmFjZTo6RG91YmxlQnVmZmVyZWQ7
Ci0gICAgbV9jb25maWdTZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8R0xYQ29uZmlnU2VsZWN0
b3I+KGF0dHJpYnV0ZXMpOwotICAgIFhVbmlxdWVQdHI8WFZpc3VhbEluZm8+IHZpc0luZm8obV9j
b25maWdTZWxlY3Rvci0+dmlzdWFsSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4
dENvbmZpZygpKSk7Ci0KLSAgICBpZiAoIXZpc0luZm8uZ2V0KCkpIHsKLSAgICAgICAgZGVzdHJv
eSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgWDExSGVscGVyOjpjcmVhdGVPZmZT
Y3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCAqdmlzSW5mby5nZXQoKSwgc2l6ZSk7Ci0KLSAg
ICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZHJhd2FibGUgPSBtX2J1ZmZlckhhbmRsZTsKLX0KLQotR0xY
VHJhbnNwb3J0U3VyZmFjZTo6fkdMWFRyYW5zcG9ydFN1cmZhY2UoKQotewotfQotCi1QbGF0Zm9y
bVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCi17Ci0g
ICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Ci19Ci0K
LXZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3
UmVjdCkKLXsKLSAgICBHTFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwot
ICAgIFgxMUhlbHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fZHJhd2FibGUpOwotICAgIC8v
IEZvcmNlIHJlc2l6ZSBvZiBHTCBzdXJmYWNlIGFmdGVyIHdpbmRvdyByZXNpemUuCi0gICAgZ2xY
U3dhcEJ1ZmZlcnMoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIG1fZHJhd2FibGUpOwotfQot
Ci12b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKLXsKLSAgICBpZiAoIW1f
ZHJhd2FibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdsWFN3YXBCdWZmZXJzKFgxMUhlbHBl
cjo6bmF0aXZlRGlzcGxheSgpLCBtX2RyYXdhYmxlKTsKLX0KLQotdm9pZCBHTFhUcmFuc3BvcnRT
dXJmYWNlOjpkZXN0cm95KCkKLXsKLSAgICBHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKTsK
LQotICAgIGlmIChtX2J1ZmZlckhhbmRsZSkgewotICAgICAgICBYMTFIZWxwZXI6OmRlc3Ryb3lX
aW5kb3cobV9idWZmZXJIYW5kbGUpOwotICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7Ci0gICAg
ICAgIG1fZHJhd2FibGUgPSAwOwotICAgIH0KLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxs
cHRyOwotfQotCi1HTFBsYXRmb3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgR0xYVHJhbnNw
b3J0U3VyZmFjZTo6YXR0cmlidXRlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29uZmlnU2Vs
ZWN0b3ItPmF0dHJpYnV0ZXMoKTsKLX0KLQotYm9vbCBHTFhUcmFuc3BvcnRTdXJmYWNlOjppc0N1
cnJlbnREcmF3YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHJhd2FibGUgPT0gZ2xYR2V0
Q3VycmVudERyYXdhYmxlKCk7Ci19Ci0KLUdMWE9mZlNjcmVlblN1cmZhY2U6OkdMWE9mZlNjcmVl
blN1cmZhY2UoU3VyZmFjZUF0dHJpYnV0ZXMgc3VyZmFjZUF0dHJpYnV0ZXMpCi0gICAgOiBHTFBs
YXRmb3JtU3VyZmFjZShzdXJmYWNlQXR0cmlidXRlcykKLSAgICAsIG1fcGl4bWFwKDApCi0gICAg
LCBtX2dseFBpeG1hcCgwKQotewotICAgIGluaXRpYWxpemUoc3VyZmFjZUF0dHJpYnV0ZXMpOwot
fQotCi1HTFhPZmZTY3JlZW5TdXJmYWNlOjp+R0xYT2ZmU2NyZWVuU3VyZmFjZSgpCi17Ci19Ci0K
LXZvaWQgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6aW5pdGlhbGl6ZShTdXJmYWNlQXR0cmlidXRlcyBh
dHRyaWJ1dGVzKQotewotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEdM
WENvbmZpZ1NlbGVjdG9yPihhdHRyaWJ1dGVzKTsKLQotICAgIFhVbmlxdWVQdHI8WFZpc3VhbElu
Zm8+IHZpc3VhbEluZm8obV9jb25maWdTZWxlY3Rvci0+dmlzdWFsSW5mbyhtX2NvbmZpZ1NlbGVj
dG9yLT5waXhtYXBDb250ZXh0Q29uZmlnKCkpKTsKLSAgICBYMTFIZWxwZXI6OmNyZWF0ZVBpeG1h
cCgmbV9waXhtYXAsICp2aXN1YWxJbmZvLmdldCgpKTsKLQotICAgIGlmICghbV9waXhtYXApIHsK
LSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9nbHhQ
aXhtYXAgPSBnbFhDcmVhdGVHTFhQaXhtYXAoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIHZp
c3VhbEluZm8uZ2V0KCksIG1fcGl4bWFwKTsKLQotICAgIGlmICghbV9nbHhQaXhtYXApIHsKLSAg
ICAgICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kcmF3YWJs
ZSA9IG1fZ2x4UGl4bWFwOwotfQotCi1QbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYT2ZmU2NyZWVu
U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCi17Ci0gICAgcmV0dXJuIG1fY29uZmlnU2VsZWN0b3It
PnBpeG1hcENvbnRleHRDb25maWcoKTsKLX0KLQotYm9vbCBHTFhPZmZTY3JlZW5TdXJmYWNlOjpp
c0N1cnJlbnREcmF3YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHJhd2FibGUgPT0gZ2xY
R2V0Q3VycmVudERyYXdhYmxlKCk7Ci19Ci0KLXZvaWQgR0xYT2ZmU2NyZWVuU3VyZmFjZTo6ZGVz
dHJveSgpCi17Ci0gICAgZnJlZVJlc291cmNlcygpOwotfQotCi12b2lkIEdMWE9mZlNjcmVlblN1
cmZhY2U6OmZyZWVSZXNvdXJjZXMoKQotewotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBYMTFIZWxw
ZXI6Om5hdGl2ZURpc3BsYXkoKTsKLQotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fZ2x4UGl4bWFwKSB7Ci0gICAgICAgIGdsWERlc3Ryb3lHTFhQaXhtYXAo
ZGlzcGxheSwgbV9nbHhQaXhtYXApOwotICAgICAgICBnbFhXYWl0R0woKTsKLSAgICAgICAgbV9n
bHhQaXhtYXAgPSAwOwotICAgIH0KLQotICAgIGlmIChtX3BpeG1hcCkgewotICAgICAgICBYMTFI
ZWxwZXI6OmRlc3Ryb3lQaXhtYXAobV9waXhtYXApOwotICAgICAgICBtX3BpeG1hcCA9IDA7Ci0g
ICAgfQotCi0gICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7Ci0gICAgbV9kcmF3YWJsZSA9
IDA7Ci19Ci0KLUdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OkdMWFRyYW5zcG9ydFN1cmZhY2VD
bGllbnQoY29uc3QgUGxhdGZvcm1CdWZmZXJIYW5kbGUgaGFuZGxlLCBib29sIGhhc0FscGhhKQot
ICAgIDogR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KCkKLXsKLSAgICBpZiAoIXJlc29sdmVHTE1l
dGhvZHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsK
LSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7Ci0gICAg
aWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhkaXNwbGF5LCBoYW5kbGUsICZhdHRyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhlIHdpbmRvdyBpcyBtYXBwZWQuCi0g
ICAgaWYgKGF0dHIubWFwX3N0YXRlID09IElzVW5tYXBwZWQgfHwgYXR0ci5tYXBfc3RhdGUgPT0g
SXNVbnZpZXdhYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY29wZWRYUGl4bWFwQ3JlYXRp
b25FcnJvckhhbmRsZXIgaGFuZGxlcjsKLQotICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQg
PSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5LCBhdHRyLnZpc3VhbCk7Ci0gICAgbV94
UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAoZGlzcGxheSwgaGFuZGxlKTsKLQot
ICAgIGlmICghbV94UGl4bWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnbHhBdHRyaWJ1dGVz
WzFdID0gKGZvcm1hdC0+ZGVwdGggPT0gMzIgJiYgaGFzQWxwaGEpID8gR0xYX1RFWFRVUkVfRk9S
TUFUX1JHQkFfRVhUIDogR0xYX1RFWFRVUkVfRk9STUFUX1JHQl9FWFQ7Ci0KLSAgICBHTFBsYXRm
b3JtU3VyZmFjZTo6U3VyZmFjZUF0dHJpYnV0ZXMgc2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMgPSBH
TFBsYXRmb3JtU3VyZmFjZTo6RGVmYXVsdDsKLQotICAgIGlmIChoYXNBbHBoYSkKLSAgICAgICAg
c2hhcmVkU3VyZmFjZUF0dHJpYnV0ZXMgPSBHTFBsYXRmb3JtU3VyZmFjZTo6U3VwcG9ydEFscGhh
OwotCi0gICAgR0xYQ29uZmlnU2VsZWN0b3IgY29uZmlnU2VsZWN0b3Ioc2hhcmVkU3VyZmFjZUF0
dHJpYnV0ZXMpOwotCi0gICAgbV9nbHhQaXhtYXAgPSBnbFhDcmVhdGVQaXhtYXAoZGlzcGxheSwg
Y29uZmlnU2VsZWN0b3Iuc3VyZmFjZUNsaWVudENvbmZpZyhmb3JtYXQtPmRlcHRoLCBYVmlzdWFs
SURGcm9tVmlzdWFsKGF0dHIudmlzdWFsKSksIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7Ci0K
LSAgICBpZiAoIW1fZ2x4UGl4bWFwIHx8ICFoYW5kbGVyLmlzVmFsaWRPcGVyYXRpb24oKSkgewot
ICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgZ2xYV2FpdFgoKTsKLSAgICBwR2xYQmluZFRleEltYWdlRVhUKGRpc3Bs
YXksIG1fZ2x4UGl4bWFwLCBHTFhfRlJPTlRfRVhULCAwKTsKLX0KLQotR0xYVHJhbnNwb3J0U3Vy
ZmFjZUNsaWVudDo6fkdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoKQotewotfQotCi12b2lkIEdM
WFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6OmRlc3Ryb3koKQotewotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX3RleHR1cmUpIHsKLSAgICAgICAgcEdsWFJlbGVhc2VU
ZXhJbWFnZUVYVChkaXNwbGF5LCBtX2dseFBpeG1hcCwgR0xYX0ZST05UX0VYVCk7Ci0gICAgICAg
IEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6ZGVzdHJveSgpOwotICAgIH0KLQotICAgIGlmICht
X2dseFBpeG1hcCkgewotICAgICAgICBnbFhEZXN0cm95UGl4bWFwKGRpc3BsYXksIG1fZ2x4UGl4
bWFwKTsKLSAgICAgICAgbV9nbHhQaXhtYXAgPSAwOwotICAgICAgICBnbFhXYWl0R0woKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV94UGl4bWFwKSB7Ci0gICAgICAgIFgxMUhlbHBlcjo6ZGVzdHJveVBp
eG1hcChtX3hQaXhtYXApOwotICAgICAgICBtX3hQaXhtYXAgPSAwOwotICAgIH0KLX0KLQotdm9p
ZCBHTFhUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYg
KGlzTWVzYUdMWCgpICYmIG1fdGV4dHVyZSkgewotICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
WDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7Ci0gICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICAgICAgLy8gTWVzYSBkb2Vzbid0IHJlLWJpbmQgdGV4
dHVyZSB0byB0aGUgZnJvbnQgYnVmZmVyIG9uIGdsWFN3YXBCdWZlcgotICAgICAgICAvLyBNYW51
YWxseSByZWxlYXNlIHByZXZpb3VzIGxvY2sgYW5kIHJlYmluZCB0ZXh0dXJlIHRvIHN1cmZhY2Ug
dG8gZW5zdXJlIGZyYW1lIHVwZGF0ZXMuCi0gICAgICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQo
ZGlzcGxheSwgbV9nbHhQaXhtYXAsIEdMWF9GUk9OVF9FWFQpOwotICAgICAgICBwR2xYQmluZFRl
eEltYWdlRVhUKGRpc3BsYXksIG1fZ2x4UGl4bWFwLCBHTFhfRlJPTlRfRVhULCAwKTsKLSAgICB9
Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDkyZDllZjQyN2QuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdMWFN1cmZh
Y2VfaAotI2RlZmluZSBHTFhTdXJmYWNlX2gKLQotI2lmIFVTRShHTFgpCi0KLSNpbmNsdWRlICJH
TFRyYW5zcG9ydFN1cmZhY2UuaCIKLSNpbmNsdWRlICJHTFhDb25maWdTZWxlY3Rvci5oIgotI2lu
Y2x1ZGUgIlgxMUhlbHBlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdMWFRy
YW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJmYWNlIHsKLQotcHVibGljOgot
ICAgIEdMWFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVz
KTsKLSAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJmYWNlKCk7Ci0gICAgUGxhdGZvcm1TdXJm
YWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKSBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJz
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6OlN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzQ3VycmVudERyYXdhYmxlKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwotfTsKLQot
Y2xhc3MgR0xYT2ZmU2NyZWVuU3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7Ci0K
LXB1YmxpYzoKLSAgICBHTFhPZmZTY3JlZW5TdXJmYWNlKFN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAg
ICB2aXJ0dWFsIH5HTFhPZmZTY3JlZW5TdXJmYWNlKCk7Ci0gICAgUGxhdGZvcm1TdXJmYWNlQ29u
ZmlnIGNvbmZpZ3VyYXRpb24oKSBvdmVycmlkZTsKLSAgICBib29sIGlzQ3VycmVudERyYXdhYmxl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBpbml0aWFsaXplKFN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGZy
ZWVSZXNvdXJjZXMoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1f
Y29uZmlnU2VsZWN0b3I7Ci0gICAgUGl4bWFwIG1fcGl4bWFwOwotICAgIEdMWFBpeG1hcCBtX2ds
eFBpeG1hcDsKLX07Ci0KLWNsYXNzIEdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQgOiBwdWJsaWMg
R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50IHsKLQotcHVibGljOgotICAgIEdMWFRyYW5zcG9ydFN1
cmZhY2VDbGllbnQoY29uc3QgUGxhdGZvcm1CdWZmZXJIYW5kbGUsIGJvb2wpOwotICAgIHZpcnR1
YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoKTsKLSAgICB2b2lkIHByZXBhcmVUZXh0dXJl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95KCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0g
ICAgUGl4bWFwIG1feFBpeG1hcDsKLSAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Ci19OwotCi19
Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIwZmVjNmJhZmFiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiWDExSGVscGVyLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybURp
c3BsYXlYMTEuaCIKLSNpbmNsdWRlICJYVW5pcXVlUHRyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gVXNlZCBmb3IgaGFuZGxpbmcgWEVycm9yLgotc3RhdGljIGJvb2wgdmFsaWRPcGVy
YXRpb24gPSB0cnVlOwotc3RhdGljIGludCBoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJvcihEaXNw
bGF5KiwgWEVycm9yRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+ZXJyb3JfY29kZSA9
PSBCYWRNYXRjaCB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRXaW5kb3cgfHwgZXZlbnQtPmVy
cm9yX2NvZGUgPT0gQmFkQWxsb2MpIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24gPSBmYWxzZTsK
LQotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5lcnJvcl9jb2RlKSB7Ci0gICAgICAgIGNhc2UgQmFk
TWF0Y2g6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZE1hdGNoLiIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkV2luZG93OgotICAgICAgICAgICAgTE9HX0VSUk9SKCJC
YWRXaW5kb3cuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCYWRBbGxvYzoK
LSAgICAgICAgICAgIExPR19FUlJPUigiQmFkQWxsb2MuIik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBPZmZTY3JlZW5Sb290V2luZG93IHsKLQotICAg
IE9mZlNjcmVlblJvb3RXaW5kb3coKQotICAgIHsKLSAgICAgICAgbV93aW5kb3cgPSAwOwotICAg
ICAgICBEaXNwbGF5KiBkcHkgPSBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKLSAgICAgICAg
aWYgKCFkcHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgWFNldFdpbmRvd0F0dHJp
YnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9
IHRydWU7Ci0gICAgICAgIG1fd2luZG93ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZh
dWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwg
V2hpdGVQaXhlbChkcHksIDApKTsKLSAgICAgICAgLy8gRnJvbSBodHRwOi8vdHJvbmNoZS5jb20v
Z3VpL3gveGxpYi93aW5kb3cvYXR0cmlidXRlcy8KLSAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJp
YnV0ZXMoZHB5LCBtX3dpbmRvdywgQ1dPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0g
ICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0KLSAgICAgICAgaWYgKCFtX3dpbmRv
dykKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gcm9v
dCB3aW5kb3cuIik7Ci0gICAgfQotCi0gICAgfk9mZlNjcmVlblJvb3RXaW5kb3coKQotICAgIHsK
LSAgICAgICAgaWYgKCFYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgICAgIFhVbm1hcFdpbmRv
dyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgbV93aW5kb3cpOwotICAgICAgICAgICAgWERl
c3Ryb3lXaW5kb3coWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIG1fd2luZG93KTsKLSAgICAg
ICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdpbmRvdyByb290
V2luZG93KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3dpbmRvdzsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgV2luZG93IG1fd2luZG93OwotfTsKLQotU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJy
b3JIYW5kbGVyOjpTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQotewotICAgIC8v
IFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1cnJlbnQgZXJyb3JzIGFyZSBo
YW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgIFhTeW5jKFgxMUhlbHBlcjo6bmF0
aXZlRGlzcGxheSgpLCBmYWxzZSk7Ci0gICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9IFhTZXRF
cnJvckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOwotfQotCi1TY29wZWRYUGl4
bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6On5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRs
ZXIoKQotewotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGhhbmRsZXIuCi0gICAgWFNldEVy
cm9ySGFuZGxlcihtX3ByZXZpb3VzRXJyb3JIYW5kbGVyKTsKLX0KLQotYm9vbCBTY29wZWRYUGl4
bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24oKSBjb25zdAotewotICAg
IHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2gg
cG9zc2libGUgZXJyb3JzIGFzIHRoZXkgYXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KLSAg
ICBYU3luYyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgZmFsc2UpOwotICAgIHJldHVybiB2
YWxpZE9wZXJhdGlvbjsKLX0KLQotdm9pZCBYMTFIZWxwZXI6OnJlc2l6ZVdpbmRvdyhjb25zdCBJ
bnRSZWN0JiBuZXdSZWN0LCBjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKLXsKLSAgICBYUmVzaXpl
V2luZG93KG5hdGl2ZURpc3BsYXkoKSwgd2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVj
dC5oZWlnaHQoKSk7Ci0gICAgWEZsdXNoKG5hdGl2ZURpc3BsYXkoKSk7Ci19Ci0KLXZvaWQgWDEx
SGVscGVyOjpjcmVhdGVQaXhtYXAoUGl4bWFwKiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8m
IHZpc3VhbEluZm8sIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgKmhhbmRsZUlkID0gMDsK
LSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOwotICAgIGlmICghZGlzcGxh
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2aXN1YWxJbmZvLnZpc3VhbCkgewotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwuIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBXaW5kb3cgeFdpbmRvdyA9IG9mZnNjcmVlblJvb3RXaW5k
b3coKTsKLSAgICBpZiAoIXhXaW5kb3cpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFBpeG1hcCB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIHhXaW5k
b3csIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdmlzdWFsSW5mby5kZXB0aCk7Ci0KLSAg
ICBpZiAoIXRlbXBIYW5kbGVJZCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgb2Zmc2NyZWVuIHBpeG1hcC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICpo
YW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKLSAgICBYU3luYyhYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkoKSwgZmFsc2UpOwotfQotCi12b2lkIFgxMUhlbHBlcjo6ZGVzdHJveVBpeG1hcChjb25zdCB1
aW50MzJfdCBwaXhtYXBJZCkKLXsKLSAgICBpZiAoIXBpeG1hcElkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOwotICAgIGlmICghZGlz
cGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWEZyZWVQaXhtYXAoZGlzcGxheSwgcGl4bWFw
SWQpOwotICAgIFhTeW5jKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBmYWxzZSk7Ci19Ci0K
LXZvaWQgWDExSGVscGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlk
LCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlz
cGxheSgpOwotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2
aXNJbmZvLnZpc3VhbCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlk
IFhWaXN1YWwuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXaW5kb3cgeFdpbmRv
dyA9IG9mZnNjcmVlblJvb3RXaW5kb3coKTsKLSAgICBpZiAoIXhXaW5kb3cpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdp
bmRvdywgdmlzSW5mby52aXN1YWwsIEFsbG9jTm9uZSk7Ci0gICAgWFNldFdpbmRvd0F0dHJpYnV0
ZXMgYXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhl
bChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChk
aXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFwOwotI2lmIFVTRShHTFgp
Ci0gICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBSZXNpemVSZWRpcmVjdE1hc2s7Ci0jZW5kaWYK
LSAgICB1aW50MzJfdCB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5k
b3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwg
SW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwg
fCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKLQotICAgIGlmICghdGVtcEhhbmRsZUlkKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAo
ZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKLSNpZiBVU0UoR0xYKQotICAgIFhDb21wb3NpdGVS
ZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0ZVJlZGlyZWN0TWFu
dWFsKTsKLSNlbmRpZgotICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkKTsKLSAg
ICAqaGFuZGxlSWQgPSB0ZW1wSGFuZGxlSWQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShoYW5k
bGVJZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZpc0luZm8pOwotICAgIFVOVVNFRF9QQVJBTShzaXpl
KTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKEVHTCkKLXZvaWQgWDExSGVscGVyOjpjcmVhdGVPZmZT
Y3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBFR0xpbnQgaWQsIGJvb2wgc3Vw
cG9ydHNBbHBoYSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICBWaXN1YWxJRCB2aXN1YWxJZCA9IHN0YXRpY19jYXN0PFZpc3VhbElEPihpZCk7
Ci0KLSAgICBpZiAoIXZpc3VhbElkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFR0wgaGFz
IHN1Z2dlc3RlZCBhIHZpc3VhbCBpZCwgc28gZ2V0IHRoZSByZXN0IG9mIHRoZSB2aXN1YWwgaW5m
byBmb3IgdGhhdCBpZC4KLSAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZvVGVtcGxhdGU7Ci0gICAg
bWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5mbykpOwotICAg
IHZpc3VhbEluZm9UZW1wbGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOwotICAgIGludCBtYXRjaGlu
Z0NvdW50ID0gMDsKLSAgICBYVW5pcXVlUHRyPFhWaXN1YWxJbmZvPiBtYXRjaGluZ1Zpc3VhbHMo
WEdldFZpc3VhbEluZm8obmF0aXZlRGlzcGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZv
VGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KSk7Ci0gICAgWFZpc3VhbEluZm8qIGZvdW5kVmlzdWFs
ID0gMDsKLQotICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGk8IG1hdGNoaW5nQ291bnQ7IGkrKykgewotICAgICAgICAgICAgWFZpc3VhbEluZm8qIHRl
bXAgPSAmbWF0Y2hpbmdWaXN1YWxzW2ldOwotICAgICAgICAgICAgaW50IG1hdGNoaW5nZGVwdGgg
PSBzdXBwb3J0c0FscGhhID8gMzIgOiAyNDsKLQotICAgICAgICAgICAgaWYgKHRlbXAtPnZpc3Vh
bGlkID09IHZpc3VhbElkICYmIHRlbXAtPmRlcHRoID09IG1hdGNoaW5nZGVwdGgpIHsKLSAgICAg
ICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm91bmRWaXN1YWwpCi0gICAg
ICAgICAgICBjcmVhdGVPZmZTY3JlZW5XaW5kb3coaGFuZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6
ZSk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaGFuZGxlSWQpOwotICAgIFVOVVNF
RF9QQVJBTShpZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotI2VuZGlmCi19Ci0KLXZvaWQg
WDExSGVscGVyOjpjcmVhdGVQaXhtYXAoUGl4bWFwKiBoYW5kbGVJZCwgY29uc3QgRUdMaW50IGlk
LCBib29sIGhhc0FscGhhLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgICpoYW5kbGVJZCA9
IDA7Ci0gICAgVmlzdWFsSUQgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQpOwot
Ci0gICAgaWYgKCF2aXN1YWxJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRUdMIGhhcyBz
dWdnZXN0ZWQgYSB2aXN1YWwgaWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8g
Zm9yIHRoYXQgaWQuCi0gICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOwotICAgIG1l
bXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKLSAgICB2
aXN1YWxJbmZvVGVtcGxhdGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKLSAgICBpbnQgbWF0Y2hpbmdD
b3VudCA9IDA7Ci0gICAgWFVuaXF1ZVB0cjxYVmlzdWFsSW5mbz4gbWF0Y2hpbmdWaXN1YWxzKFhH
ZXRWaXN1YWxJbmZvKG5hdGl2ZURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAmdmlzdWFsSW5mb1Rl
bXBsYXRlLCAmbWF0Y2hpbmdDb3VudCkpOwotICAgIFhWaXN1YWxJbmZvKiBmb3VuZFZpc3VhbCA9
IDA7Ci0gICAgaW50IHJlcXVpcmVkRGVwdGggPSBoYXNBbHBoYSA/IDMyIDogMjQ7Ci0KLSAgICBp
ZiAobWF0Y2hpbmdWaXN1YWxzKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpPCBtYXRjaGlu
Z0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFhWaXN1YWxJbmZvKiB0ZW1wID0gJm1hdGNoaW5n
VmlzdWFsc1tpXTsKLQotICAgICAgICAgICAgaWYgKHRlbXAtPnZpc3VhbGlkID09IHZpc3VhbElk
ICYmIHRlbXAtPmRlcHRoID09IHJlcXVpcmVkRGVwdGgpIHsKLSAgICAgICAgICAgICAgICBmb3Vu
ZFZpc3VhbCA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZm91bmRWaXN1YWwpCi0gICAgICAgICAgICBjcmVhdGVQ
aXhtYXAoaGFuZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6ZSk7Ci0gICAgfQotfQotI2VuZGlmCi0K
LXZvaWQgWDExSGVscGVyOjpkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90IHdpbmRvd0lkKQot
ewotICAgIGlmICghd2luZG93SWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpc3BsYXkqIGRp
c3BsYXkgPSBuYXRpdmVEaXNwbGF5KCk7Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7Ci0gICAgWEdldFdpbmRvd0F0
dHJpYnV0ZXMoZGlzcGxheSwgd2luZG93SWQsICZhdHRyaWJ1dGUpOwotCi0gICAgWEZyZWVDb2xv
cm1hcChkaXNwbGF5LCBhdHRyaWJ1dGUuY29sb3JtYXApOwotICAgIFhEZXN0cm95V2luZG93KGRp
c3BsYXksIHdpbmRvd0lkKTsKLX0KLQotYm9vbCBYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lv
blN1cHBvcnRlZCgpCi17Ci0gICAgc3RhdGljIGJvb2wgcXVlcnlEb25lID0gZmFsc2U7Ci0gICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gZmFsc2U7Ci0KLSAgICBpZiAo
IXF1ZXJ5RG9uZSkgewotICAgICAgICBxdWVyeURvbmUgPSB0cnVlOwotI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKSAmJiBVU0UoR0xYKQotICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZl
RGlzcGxheSgpOwotCi0gICAgICAgIGlmIChkaXNwbGF5KSB7Ci0gICAgICAgICAgICBpbnQgZXZl
bnRCYXNlcCwgZXJyb3JCYXNlcDsKLSAgICAgICAgICAgIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lv
biA9IFhSZW5kZXJRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9yQmFz
ZXApOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VwcG9ydHNYUmVu
ZGVyRXh0ZW5zaW9uOwotfQotCi1EaXNwbGF5KiBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKQot
ewotICAgIHJldHVybiBkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheSgpKS5uYXRpdmUoKTsKLX0KLQotV2luZG93IFgxMUhlbHBlcjo6b2Zm
c2NyZWVuUm9vdFdpbmRvdygpCi17Ci0gICAgc3RhdGljIE9mZlNjcmVlblJvb3RXaW5kb3cgb2Zm
c2NyZWVuV2luZG93OwotICAgIHJldHVybiBvZmZzY3JlZW5XaW5kb3cucm9vdFdpbmRvdygpOwot
fQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvWDExSGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdm
NWU0YzBiMTU2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFgxMUhlbHBlcl9oCi0jZGVmaW5lIFgx
MUhlbHBlcl9oCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1
ZGUgPG9wZW5nbC9HTERlZnMuaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
ICYmIFVTRShHTFgpCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KLSNlbHNlCi0jaW5jbHVkZSA8WDExL1hs
aWIuaD4KLSNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFgxMUhlbHBlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRl
UGl4bWFwKFBpeG1hcCosIGNvbnN0IFhWaXN1YWxJbmZvJiwgY29uc3QgSW50U2l6ZSYgPSBJbnRT
aXplKDEsIDEpKTsKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMy
X3QqLCBjb25zdCBYVmlzdWFsSW5mbyYsIGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7
Ci0jaWYgVVNFKEVHTCkKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVQaXhtYXAoUGl4bWFwKiwgY29u
c3QgRUdMaW50LCBib29sLCBjb25zdCBJbnRTaXplJiAgPSBJbnRTaXplKDEsIDEpKTsKLSAgICBz
dGF0aWMgdm9pZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBFR0xpbnQs
IGJvb2wsIGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7Ci0jZW5kaWYKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90KTsKLSAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95UGl4bWFwKGNvbnN0IHVpbnQzMl90KTsKLSAgICBzdGF0aWMgdm9pZCByZXNpemVXaW5k
b3coY29uc3QgSW50UmVjdCYsIGNvbnN0IHVpbnQzMl90KTsKLSAgICBzdGF0aWMgYm9vbCBpc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKLSAgICBzdGF0aWMgRGlzcGxheSogbmF0aXZlRGlz
cGxheSgpOwotICAgIHN0YXRpYyBXaW5kb3cgb2Zmc2NyZWVuUm9vdFdpbmRvdygpOwotfTsKLQot
Y2xhc3MgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBT
Y29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKTsKLSAgICB+U2NvcGVkWFBpeG1hcENy
ZWF0aW9uRXJyb3JIYW5kbGVyKCk7Ci0gICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOwot
fTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cAppbmRleCA5ZTIyYjllMDQ5Yi4uZWJlZDE5YTg5MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5jcHAKQEAgLTI1LDExICsyNSw2IEBACiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAKLSNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKLSNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVuc2lnbmVkIFRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmU6OmNhbGN1bGF0ZUV4cG9zZWRUaWxlRWRnZXMoY29uc3Qg
RmxvYXRSZWN0JiB0b3RhbFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAppbmRleCBmNDJhZGVmYTdmMy4uOTE0NjA0MTcx
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaApAQCAtMjYsMTAgKzI2
LDYgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotI2luY2x1ZGUgIkdy
YXBoaWNzU3VyZmFjZS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
R3JhcGhpY3NMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKaW5k
ZXggNDExNjg1ZDdmMDEuLmRkYWNiZmQwYTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaApAQCAtMjIsMTAgKzIyLDYgQEAKIAogI2lmIFVTRShURVhUVVJFX01BUFBF
UikKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFj
ZS5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtNTEsMTIgKzQ3LDYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV9jbGllbnQgPSBjbGllbnQ7CiAgICAgfQotI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQotICAgIHZpcnR1YWwgSW50U2l6ZSBwbGF0Zm9ybUxheWVyU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIEludFNpemUoKTsgfQotICAgIHZpcnR1YWwgdWludDMyX3QgY29weVRvR3JhcGhpY3NTdXJm
YWNlKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgR3JhcGhpY3NTdXJmYWNlVG9rZW4gZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1N1cmZhY2VUb2tlbigp
OyB9Ci0gICAgdmlydHVhbCBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIGdyYXBoaWNzU3VyZmFjZUZs
YWdzKCkgY29uc3QgeyByZXR1cm4gIEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFy
Z2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7IH0KLSNlbmRpZgogCiBwcm90
ZWN0ZWQ6CiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXI6OkNsaWVudCogY2xpZW50KCkg
eyByZXR1cm4gbV9jbGllbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclN1cmZh
Y2VCYWNraW5nU3RvcmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmU4ZjQ4
NTRlNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5oIgotCi0jaW5jbHVkZSAiR3Jh
cGhpY3NTdXJmYWNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBUZXh0dXJlTWFw
cGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBzdXJmYWNlKQotewotICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gc3VyZmFj
ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCh1aW50MzJfdCkKLXsKLSAgICBpZiAobV9ncmFwaGljc1N1cmZhY2UpCi0gICAg
ICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5zd2FwQnVmZmVycygpOwotfQotCi1SZWZQdHI8Qml0bWFw
VGV4dHVyZT4gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIGFuIGVtcHR5IHRl
eHR1cmUsIHdlIHNob3VsZCB3cmFwIHRoZSB0ZXh0dXJlIGNvbnRlbnRzIGludG8gYSBCaXRtYXBU
ZXh0dXJlLgotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBlbXB0eVRleHR1cmU7Ci0gICAgcmV0
dXJuIGVtcHR5VGV4dHVyZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdT
dG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChtX2dyYXBoaWNzU3VyZmFjZSkK
LSAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UtPnBhaW50VG9UZXh0dXJlTWFwcGVyKHRleHR1cmVN
YXBwZXIsIHRhcmdldFJlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkzMWRiN2QyOWEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmVfaAotI2RlZmluZSBUZXh0dXJlTWFw
cGVyU3VyZmFjZUJhY2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLQot
I2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgVGV4dHVyZU1hcHBlcjsKLWNsYXNzIEZsb2F0UmVjdDsKLQotY2xhc3MgVGV4
dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclN1
cmZhY2VCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk7IH0KLSAgICB2b2lkIHNldEdyYXBoaWNzU3VyZmFj
ZShQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4pOwotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5l
ZWRlZCh1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdmlydHVhbCBSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCk7Ci0gICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNr
aW5nU3RvcmUoKSB7IH0KLQotcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZSgpCi0gICAgICAgIDogVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSgpCi0gICAgICAg
IHsgfQotCi0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7Ci19
OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMmVmYWE2MDNjMmUuLjI1NWU3
YmI1MWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcApAQCAtMTIwLDEwICsxMjAsNiBAQCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NM
YXllcgogICAgICwgbV9tb3ZpbmdWaXNpYmxlUmVjdChmYWxzZSkKICAgICAsIG1fcGVuZGluZ0Nv
bnRlbnRzU2NhbGVBZGp1c3RtZW50KGZhbHNlKQogICAgICwgbV9wZW5kaW5nVmlzaWJsZVJlY3RB
ZGp1c3RtZW50KGZhbHNlKQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgICwgbV9pc1Zh
bGlkUGxhdGZvcm1MYXllcihmYWxzZSkKLSAgICAsIG1fcGVuZGluZ1BsYXRmb3JtTGF5ZXJPcGVy
YXRpb24oTm9uZSkKLSNlbmRpZgogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURF
RCkKICAgICAsIG1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIoZmFsc2UpCiAgICAgLCBtX3Nob3Vs
ZFVwZGF0ZVBsYXRmb3JtTGF5ZXIoZmFsc2UpCkBAIC0zNzksMTAgKzM3NSw3IEBAIGJvb2wgR3Jh
cGhpY3NMYXllcjo6c3VwcG9ydHNDb250ZW50c1RpbGluZygpCiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fcGxhdGZvcm1MYXllcikKLSAgICAgICAgbV9wZW5kaW5n
UGxhdGZvcm1MYXllck9wZXJhdGlvbiB8PSBTeW5jUGxhdGZvcm1MYXllcjsKLSNlbGlmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1NfVEhSRUFERUQpCiAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKICAgICAgICAgbV9zaG91bGRV
cGRhdGVQbGF0Zm9ybUxheWVyID0gdHJ1ZTsKICNlbmRpZgpAQCAtMzkzLDMwICszODYsNyBAQCB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQog
CiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5
ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVudHNMYXllclB1cnBvc2UpCiB7
Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fcGxhdGZvcm1MYXllcikgewot
ICAgICAgICBBU1NFUlQobV9wbGF0Zm9ybUxheWVyVG9rZW4uaXNWYWxpZCgpKTsKLSAgICAgICAg
aWYgKCFwbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdQbGF0Zm9ybUxheWVy
T3BlcmF0aW9uIHw9IERlc3Ryb3lQbGF0Zm9ybUxheWVyOwotICAgICAgICAgICAgbV9wZW5kaW5n
UGxhdGZvcm1MYXllck9wZXJhdGlvbiAmPSB+Q3JlYXRlUGxhdGZvcm1MYXllcjsKLSAgICAgICAg
fSAgZWxzZSBpZiAoKG1fcGxhdGZvcm1MYXllclNpemUgIT0gcGxhdGZvcm1MYXllci0+cGxhdGZv
cm1MYXllclNpemUoKSkgfHwgKG1fcGxhdGZvcm1MYXllclRva2VuICE9IHBsYXRmb3JtTGF5ZXIt
PmdyYXBoaWNzU3VyZmFjZVRva2VuKCkpKSB7Ci0gICAgICAgICAgICAvLyBtX3BsYXRmb3JtTGF5
ZXJUb2tlbiBjYW4gYmUgZGlmZmVyZW50IHRvIHBsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFj
ZVRva2VuKCksIGV2ZW4gaWYgbV9wbGF0Zm9ybUxheWVyIGVxdWFscyBwbGF0Zm9ybUxheWVyLgot
ICAgICAgICAgICAgbV9wZW5kaW5nUGxhdGZvcm1MYXllck9wZXJhdGlvbiB8PSBSZWNyZWF0ZVBs
YXRmb3JtTGF5ZXI7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocGxhdGZv
cm1MYXllcikKLSAgICAgICAgICAgIG1fcGVuZGluZ1BsYXRmb3JtTGF5ZXJPcGVyYXRpb24gfD0g
Q3JlYXRlQW5kU3luY1BsYXRmb3JtTGF5ZXI7Ci0gICAgfQotCi0gICAgbV9wbGF0Zm9ybUxheWVy
ID0gcGxhdGZvcm1MYXllcjsKLSAgICAvLyBtX3BsYXRmb3JtTGF5ZXJUb2tlbiBpcyB1cGRhdGVk
IG9ubHkgaGVyZS4gCi0gICAgLy8gSW4gZGV0YWlsLCB3aGVuIEdyYXBoaWNzQ29udGV4dDNEIGlz
IGNoYW5nZWQgb3IgcmVzaGFwZWQsIG1fcGxhdGZvcm1MYXllclRva2VuIGlzIGNoYW5nZWQgYW5k
IHNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKCkgaXMgYWx3YXlzIGNhbGxlZC4KLSAgICBtX3Bs
YXRmb3JtTGF5ZXJTaXplID0gbV9wbGF0Zm9ybUxheWVyID8gbV9wbGF0Zm9ybUxheWVyLT5wbGF0
Zm9ybUxheWVyU2l6ZSgpIDogSW50U2l6ZSgpOwotICAgIG1fcGxhdGZvcm1MYXllclRva2VuID0g
bV9wbGF0Zm9ybUxheWVyID8gbV9wbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigp
IDogR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBBU1NFUlQoISghbV9wbGF0Zm9ybUxheWVy
VG9rZW4uaXNWYWxpZCgpICYmIG1fcGxhdGZvcm1MYXllcikpOwotCi0gICAgbm90aWZ5Rmx1c2hS
ZXF1aXJlZCgpOwotI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKICAgICBpZiAobV9wbGF0Zm9ybUxh
eWVyICE9IHBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIG1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIg
PSB0cnVlOwogCkBAIC03MjQsMjIgKzY5NCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
eW5jUGxhdGZvcm1MYXllcigpCiB7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgZGVz
dHJveVBsYXRmb3JtTGF5ZXJJZk5lZWRlZCgpOwotICAgIGNyZWF0ZVBsYXRmb3JtTGF5ZXJJZk5l
ZWRlZCgpOwotCi0gICAgaWYgKCEobV9wZW5kaW5nUGxhdGZvcm1MYXllck9wZXJhdGlvbiAmIFN5
bmNQbGF0Zm9ybUxheWVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wZW5kaW5nUGxhdGZv
cm1MYXllck9wZXJhdGlvbiAmPSB+U3luY1BsYXRmb3JtTGF5ZXI7Ci0KLSAgICBpZiAoIW1faXNW
YWxpZFBsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3BsYXRm
b3JtTGF5ZXIpOwotICAgIG1fbGF5ZXJTdGF0ZS5wbGF0Zm9ybUxheWVyRnJvbnRCdWZmZXIgPSBt
X3BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIG1fbGF5ZXJTdGF0
ZS5wbGF0Zm9ybUxheWVyU2hvdWxkU3dhcEJ1ZmZlcnMgPSB0cnVlOwotI2VsaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19U
SFJFQURFRCkKICAgICBpZiAoIW1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNzYyLDM5ICs3MTcsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6dXBkYXRlUGxhdGZvcm1MYXllcigpCiAjZW5kaWYKIH0KIAotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lQbGF0Zm9ybUxh
eWVySWZOZWVkZWQoKQotewotICAgIGlmICghKG1fcGVuZGluZ1BsYXRmb3JtTGF5ZXJPcGVyYXRp
b24gJiBEZXN0cm95UGxhdGZvcm1MYXllcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2lzVmFsaWRQbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1faXNWYWxpZFBsYXRmb3JtTGF5ZXIg
PSBmYWxzZTsKLSAgICAgICAgbV9sYXllclN0YXRlLnBsYXRmb3JtTGF5ZXJUb2tlbiA9IEdyYXBo
aWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgICAgIG1fbGF5ZXJTdGF0ZS5wbGF0Zm9ybUxheWVyQ2hh
bmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgbV9wZW5kaW5nUGxhdGZvcm1MYXllck9wZXJhdGlv
biAmPSB+RGVzdHJveVBsYXRmb3JtTGF5ZXI7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpjcmVhdGVQbGF0Zm9ybUxheWVySWZOZWVkZWQoKQotewotICAgIGlmICghKG1fcGVu
ZGluZ1BsYXRmb3JtTGF5ZXJPcGVyYXRpb24gJiBDcmVhdGVQbGF0Zm9ybUxheWVyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcGxhdGZvcm1MYXllcik7Ci0gICAgaWYgKCFtX2lz
VmFsaWRQbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIG1fbGF5ZXJTdGF0ZS5wbGF0Zm9ybUxheWVy
U2l6ZSA9IG1fcGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKLSAgICAgICAgbV9s
YXllclN0YXRlLnBsYXRmb3JtTGF5ZXJUb2tlbiA9IG1fcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NT
dXJmYWNlVG9rZW4oKTsKLSAgICAgICAgbV9sYXllclN0YXRlLnBsYXRmb3JtTGF5ZXJTdXJmYWNl
RmxhZ3MgPSBtX3BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZUZsYWdzKCk7Ci0gICAgICAg
IG1fbGF5ZXJTdGF0ZS5wbGF0Zm9ybUxheWVyQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIG1faXNW
YWxpZFBsYXRmb3JtTGF5ZXIgPSB0cnVlOwotICAgIH0KLQotICAgIG1fcGVuZGluZ1BsYXRmb3Jt
TGF5ZXJPcGVyYXRpb24gJj0gfkNyZWF0ZVBsYXRmb3JtTGF5ZXI7Ci19Ci0jZW5kaWYKLQogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKQogewogICAgIC8vIFdoZW4gd2UgaGF2ZSBhIHRyYW5zZm9ybSBhbmltYXRpb24s
IHdlIG5lZWQgdG8gdXBkYXRlIHZpc2libGUgcmVjdCBldmVyeSBmcmFtZSB0byBhZGp1c3QgdGhl
IHZpc2libGUgcmVjdCBvZiBhIGJhY2tpbmcgc3RvcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggNzA1YmM3ODc4MGUuLjAy
MTUwYjA3OTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oCkBAIC0zNSw5ICszNSw2IEBACiAjaW5jbHVkZSAiVGlsZWRCYWNraW5n
U3RvcmUuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgogI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0jaW5j
bHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9rZW4uaCIKLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTUxLDE5ICsxNDgsNiBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICBlbnVtIFBlbmRpbmdQbGF0Zm9ybUxheWVyT3BlcmF0aW9uIHsKLSAgICAgICAg
Tm9uZSA9IDB4MDAsCi0gICAgICAgIENyZWF0ZVBsYXRmb3JtTGF5ZXIgPSAweDAxLAotICAgICAg
ICBEZXN0cm95UGxhdGZvcm1MYXllciA9IDB4MDIsCi0gICAgICAgIFN5bmNQbGF0Zm9ybUxheWVy
ID0gMHgwNCwKLSAgICAgICAgQ3JlYXRlQW5kU3luY1BsYXRmb3JtTGF5ZXIgPSBDcmVhdGVQbGF0
Zm9ybUxheWVyIHwgU3luY1BsYXRmb3JtTGF5ZXIsCi0gICAgICAgIFJlY3JlYXRlUGxhdGZvcm1M
YXllciA9IENyZWF0ZUFuZFN5bmNQbGF0Zm9ybUxheWVyIHwgRGVzdHJveVBsYXRmb3JtTGF5ZXIK
LSAgICB9OwotCi0gICAgdm9pZCBkZXN0cm95UGxhdGZvcm1MYXllcklmTmVlZGVkKCk7Ci0gICAg
dm9pZCBjcmVhdGVQbGF0Zm9ybUxheWVySWZOZWVkZWQoKTsKLSNlbmRpZgogICAgIHZvaWQgc3lu
Y1BsYXRmb3JtTGF5ZXIoKTsKICAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtTGF5ZXIoKTsKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCkBAIC0yMzIsMTAgKzIxNiw2IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX21vdmluZ1Zpc2libGVSZWN0IDogMTsKICAgICBib29sIG1fcGVu
ZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50IDogMTsKICAgICBib29sIG1fcGVuZGluZ1Zpc2li
bGVSZWN0QWRqdXN0bWVudCA6IDE7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgYm9v
bCBtX2lzVmFsaWRQbGF0Zm9ybUxheWVyIDogMTsKLSAgICB1bnNpZ25lZCBtX3BlbmRpbmdQbGF0
Zm9ybUxheWVyT3BlcmF0aW9uIDogMzsKLSNlbmRpZgogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19USFJFQURFRCkKICAgICBib29sIG1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIgOiAxOwog
ICAgIGJvb2wgbV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyIDogMTsKQEAgLTI1MCwxMCArMjMw
LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc7CiAKICAgICBQbGF0Zm9ybUxheWVyKiBtX3BsYXRmb3JtTGF5
ZXI7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSW50U2l6ZSBtX3BsYXRmb3JtTGF5
ZXJTaXplOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIG1fcGxhdGZvcm1MYXllclRva2VuOwot
I2VuZGlmCiAgICAgVGltZXIgbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAgICAgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25T
dGFydFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlLmgKaW5kZXggODRlN2IyNzRjMWEuLmI2YjMwZGMyN2FiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCkBAIC0zOSwx
MSArMzksNiBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0j
aW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9r
ZW4uaCIKLSNlbmRpZgotCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKICNlbmRpZgpAQCAt
MTMxLDkgKzEyNiw2IEBAIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7CiAg
ICAgICAgICwgcmVwbGljYShJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQogICAgICAgICAsIG1h
c2soSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKICAgICAgICAgLCBpbWFnZUlEKEludmFsaWRD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
ICAgICAsIHBsYXRmb3JtTGF5ZXJGcm9udEJ1ZmZlcigwKQotI2VuZGlmCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogICAgICAgICAsIHBsYXRmb3JtTGF5ZXJQcm94eSgw
KQogI2VuZGlmCkBAIC0xNjQsMTMgKzE1Niw2IEBAIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSB7CiAgICAgdW5zaWduZWQgcmVwYWludENvdW50OwogICAgIFZlY3RvcjxUaWxl
VXBkYXRlSW5mbz4gdGlsZXNUb1VwZGF0ZTsKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
ICAgIEludFNpemUgcGxhdGZvcm1MYXllclNpemU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
cGxhdGZvcm1MYXllclRva2VuOwotICAgIHVpbnQzMl90IHBsYXRmb3JtTGF5ZXJGcm9udEJ1ZmZl
cjsKLSAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHBsYXRmb3JtTGF5ZXJTdXJmYWNlRmxhZ3M7
Ci0jZW5kaWYKLQogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKICAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcGxhdGZvcm1MYXllclByb3h5
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmViNWU0NTZlYWEuLjcwNzQwOTg0MzEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDUgKzEsMzMgQEAKIDIwMTctMDItMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCisgICAgICAgIFJlbW92ZSBjb2RlIHVuZGVyIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY4NTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyB3YXMgb25seSB1c2VkIGJ5IEVGTCBwb3J0LgorCisgICAgICAgICogU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNw
cDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGU+OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oOgorICAgICAgICAq
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1BsYXRmb3Jt
TGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAqIFNoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAgICAgICAq
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjplbmNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlSGFuZGxlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjb3B5VG9UZXh0dXJlKToK
KyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZh
Y2UuaDoKKworMjAxNy0wMi0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKICAgICAgICAgUmVkdWNlIHBsYXRmb3JtIGlmZGVmcyBpbiBXZWJLaXQyIGN1c3Rv
bSBwcm90b2NvbHMgaW1wbGVtZW50YXRpb24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTAyOAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBkZjFhNTdiYTQ5NC4uOTQ5MmQ4
MjZmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmNwcApAQCAtNTEsMTAgKzUxLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaD4KIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC01ODUsMTcgKzU4MSw2IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucz46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBUZXh0dXJlTWFwCiAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGFuaW1hdGlvbnMuYW5p
bWF0aW9ucygpKTsKIH0KIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSNp
ZiBPUyhEQVJXSU4pCi0gICAgZW5jb2RlciA8PCBBdHRhY2htZW50KHRva2VuLmZyb250QnVmZmVy
SGFuZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7Ci0gICAgZW5jb2RlciA8PCBBdHRhY2ht
ZW50KHRva2VuLmJhY2tCdWZmZXJIYW5kbGUsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKLSNl
bGlmIE9TKExJTlVYKQotICAgIGVuY29kZXIgPDwgdG9rZW4uZnJvbnRCdWZmZXJIYW5kbGU7Ci0j
ZW5kaWYKLX0KLQogYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRv
a2VuPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRv
a2VuJiB0b2tlbikKIHsKICNpZiBPUyhEQVJXSU4pCkBAIC02OTIsMTUgKzY3Nyw2IEBAIHZvaWQg
QXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zCiAKICAgICBlbmNvZGVyIDw8IHN0YXRlLnRpbGVzVG9VcGRhdGU7
CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAoc3RhdGUucGxhdGZvcm1MYXll
ckNoYW5nZWQpIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5wbGF0Zm9ybUxheWVyU2l6ZTsK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5wbGF0Zm9ybUxheWVyVG9rZW47Ci0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUucGxhdGZvcm1MYXllckZyb250QnVmZmVyOwotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnBsYXRmb3JtTGF5ZXJTdXJmYWNlRmxhZ3M7Ci0gICAgfQotI2VuZGlmCi0KICAg
ICBpZiAoc3RhdGUuY29tbWl0dGVkU2Nyb2xsT2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXQ7CiB9CkBAIC03ODAsMjIgKzc1Niw2IEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBDb29yCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50
aWxlc1RvVXBkYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgaWYgKHN0YXRlLnBsYXRmb3JtTGF5ZXJDaGFuZ2VkKSB7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUucGxhdGZvcm1MYXllclNpemUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUucGxh
dGZvcm1MYXllclRva2VuKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnBsYXRmb3JtTGF5ZXJGcm9udEJ1ZmZlcikpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0
ZS5wbGF0Zm9ybUxheWVyU3VyZmFjZUZsYWdzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0jZW5kaWYKLQogICAgIGlmIChzdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXRDaGFu
Z2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5jb21taXR0ZWRTY3JvbGxPZmZzZXQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggZjcyNGFhYWVkMDIuLmRkMGMxMGI1OTA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApA
QCAtNDUsMTAgKzQ1LDYgQEAgY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKIHN0cnVjdCBMZW5n
dGg7CiAKIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXN0cnVjdCBHcmFwaGljc1N1cmZhY2VUb2tlbjsKLSNlbmRpZgogfQogCiBuYW1lc3BhY2Ug
SVBDIHsKQEAgLTczLDEzICs2OSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gewogICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwogfTsKIAotI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7
Ci19OwotI2VuZGlmCi0KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
U3VyZmFjZVVwZGF0ZUluZm8+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKaW5kZXggMWFmYjMyMzVmODguLjFhY2ExMGUwMjM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTE3Nywy
MSArMTc3LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFkanVzdFBvc2l0aW9u
Rm9yRml4ZWRMYXllcnMoY29uc3QgRmxvYXRQb2ludCYgY28KIAogdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnN5bmNQbGF0Zm9ybUxheWVySWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVy
KiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewot
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwot
Ci0gICAgaWYgKHN0YXRlLnBsYXRmb3JtTGF5ZXJDaGFuZ2VkKSB7Ci0gICAgICAgIGRlc3Ryb3lQ
bGF0Zm9ybUxheWVySWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKLSAgICAgICAgY3JlYXRlUGxhdGZv
cm1MYXllcklmTmVlZGVkKGxheWVyLCBzdGF0ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlLnBs
YXRmb3JtTGF5ZXJTaG91bGRTd2FwQnVmZmVycykgewotICAgICAgICBBU1NFUlQobV9zdXJmYWNl
QmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOwotICAgICAgICBTdXJmYWNlQmFja2luZ1N0
b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChsYXllcik7
Ci0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gcGxhdGZv
cm1MYXllckJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgcGxhdGZvcm1MYXllckJh
Y2tpbmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChzdGF0ZS5wbGF0Zm9ybUxheWVyRnJvbnRC
dWZmZXIpOwotICAgIH0KLSNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAgaWYgKCFzdGF0ZS5w
bGF0Zm9ybUxheWVyQ2hhbmdlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTMsMjggKzE5OSw2
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpvbk5ld0J1ZmZlckF2YWlsYWJsZSgp
CiB9CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVBsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVy
TGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUp
Ci17Ci0gICAgaWYgKCFzdGF0ZS5wbGF0Zm9ybUxheWVyVG9rZW4uaXNWYWxpZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+
IHBsYXRmb3JtTGF5ZXJCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU6OmNyZWF0ZSgpKTsKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChsYXllciwgcGxh
dGZvcm1MYXllckJhY2tpbmdTdG9yZSk7Ci0gICAgcGxhdGZvcm1MYXllckJhY2tpbmdTdG9yZS0+
c2V0R3JhcGhpY3NTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLnBsYXRmb3Jt
TGF5ZXJTaXplLCBzdGF0ZS5wbGF0Zm9ybUxheWVyU3VyZmFjZUZsYWdzLCBzdGF0ZS5wbGF0Zm9y
bUxheWVyVG9rZW4pKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNMYXllcihwbGF0Zm9ybUxheWVy
QmFja2luZ1N0b3JlLmdldCgpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmRlc3Ryb3lQbGF0Zm9ybUxheWVySWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChz
dGF0ZS5wbGF0Zm9ybUxheWVyVG9rZW4uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcik7Ci0gICAgbGF5ZXItPnNldENv
bnRlbnRzTGF5ZXIoMCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnNldExheWVyUmVwYWludENvdW50SWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXll
ciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewogICAgIGlm
ICghbGF5ZXItPmlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgfHwgIXN0YXRlLnJlcGFpbnRDb3Vu
dENoYW5nZWQpCkBAIC0zODAsOSArMzQ0LDYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQogCiAgICAgbV9iYWNr
aW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7CiAgICAgbV9maXhlZExheWVycy5yZW1vdmUo
bGF5ZXJJRCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2lu
Z1N0b3Jlcy5yZW1vdmUobGF5ZXIuZ2V0KCkpOwotI2VuZGlmCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTX1RIUkVBREVEKQogICAgIGlmIChhdXRvIHBsYXRmb3JtTGF5ZXJQcm94eSA9IG1f
cGxhdGZvcm1MYXllclByb3hpZXMudGFrZShsYXllci5nZXQoKSkpCiAgICAgICAgIHBsYXRmb3Jt
TGF5ZXJQcm94eS0+aW52YWxpZGF0ZSgpOwpAQCAtNTY4LDExICs1MjksNiBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZwogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1h
Z2VCYWNraW5nVG9MYXllcihUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
aWYgKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMobGF5ZXIpKQotICAgICAgICByZXR1
cm47Ci0jZW5kaWYKLQogICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSB7CiAgICAgICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKDApOwogICAgICAg
ICByZXR1cm47CkBAIC02NzIsOSArNjI4LDYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnB1cmdlR0xSZXNvdXJjZXMoKQogCiAgICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7CiAg
ICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuY2xlYXIoKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7Ci0jZW5kaWYKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAgZm9yIChhdXRvJiBwcm94eSA6
IG1fcGxhdGZvcm1MYXllclByb3hpZXMudmFsdWVzKCkpCiAgICAgICAgIHByb3h5LT5pbnZhbGlk
YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDQxZDU5
OWE4NGUxLi5hNDZjYjE1ZDBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmgKQEAgLTQwLDExICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUuaD4KLSNlbmRpZgotCiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oPgogI2VuZGlmCkBAIC0xMDIsMTAgKzk3LDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJik7CiAgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpOwogICAgIHZvaWQgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlUGxhdGZv
cm1MYXllcklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCBkZXN0cm95UGxh
dGZvcm1MYXllcklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0jZW5kaWYKICAgICB2b2lk
IHNldExheWVyUmVwYWludENvdW50SWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
KiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKIAogICAg
IHZvaWQgc3luY1VwZGF0ZUF0bGFzZXMoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlJik7CkBAIC0xNjcsMTEgKzE1OCw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PFJl
ZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVyczsKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHR5cGVkZWYgSGFzaE1h
cDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlclN1cmZhY2VCYWNraW5nU3RvcmU+PiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwotICAgIFN1
cmZhY2VCYWNraW5nU3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKLSNlbmRpZgotCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogICAgIHR5cGVkZWYgSGFzaE1h
cDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+IFBsYXRmb3JtTGF5ZXJQcm94eU1hcDsKICAgICBQbGF0
Zm9ybUxheWVyUHJveHlNYXAgbV9wbGF0Zm9ybUxheWVyUHJveGllczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3Vy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJD
b29yZGluYXRlZFN1cmZhY2UuY3BwCmluZGV4IGZkYmM4NzlmMDhkLi4wYWQxZTdmODYwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCkBAIC00MywxMSArNDMsNiBAQCBX
ZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6SGFuZGxlKCkKIHZvaWQgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
CiAgICAgZW5jb2RlciA8PCBtX3NpemUgPDwgbV9mbGFnczsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICBlbmNvZGVyIDw8IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47Ci0gICAgaWYgKG1f
Z3JhcGhpY3NTdXJmYWNlVG9rZW4uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYK
ICAgICBlbmNvZGVyIDw8IG1fYml0bWFwSGFuZGxlOwogfQogCkBAIC01NywxMiArNTIsNiBAQCBi
b29sIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyLCBIYW5kbGUmIGhhbmRsZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShoYW5kbGUubV9mbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZS5t
X2dyYXBoaWNzU3VyZmFjZVRva2VuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICho
YW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbi5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotI2VuZGlmCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUubV9iaXRtYXBIYW5k
bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTcxLDQ1ICs2MCwxNCBAQCBib29sIFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVy
LCBIYW5kbGUmIGhhbmRsZQogCiBSZWZQdHI8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlPiBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzIGZsYWdzKQogewotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBjcmVhdGVXaXRoU3VyZmFjZShzaXplLCBmbGFncykpCi0gICAgICAg
IHJldHVybiBzdXJmYWNlOwotI2VuZGlmCi0KICAgICBpZiAoYXV0byBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzaXplLCAoZmxhZ3MgJiBTdXBwb3J0c0FscGhhKSA/
IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IFNoYXJlYWJsZUJpdG1hcDo6Tm9GbGFn
cykpCiAgICAgICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgZmxhZ3MsIFdURk1vdmUoYml0bWFwKSk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
UmVmUHRyPFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4gV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVh
dGVXaXRoU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZs
YWdzIGZsYWdzKQotewotICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0K
LSAgICAgICAgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NvZnR3YXJlV3JpdGUKLSAgICAgICAg
fCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzQ29weVRvVGV4dHVyZQotICAgICAgICB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotCi0gICAgaWYgKGZsYWdzICYgU3VwcG9ydHNB
bHBoYSkKLSAgICAgICAgc3VyZmFjZUZsYWdzIHw9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNB
bHBoYTsKLQotICAgIC8vIFRoaXMgbWlnaHQgcmV0dXJuIG51bGwsIGlmIHRoZSBzeXN0ZW0gaXMg
dW5hYmxlIHRvIHByb3ZpZGUgYSBuZXcgZ3JhcGhpY3Mgc3VyZmFjZS4KLSAgICAvLyBJbiB0aGF0
IGNhc2UsIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuIG51bGwgYW5kIGFsbG93IGZhbGxpbmcg
YmFjayB0byBTaGFyZWFibGVCaXRtYXAuCi0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3Vy
ZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHNpemUsIHN1cmZhY2VGbGFncyk7Ci0gICAg
aWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKHNpemUsIGZsYWdzLCBXVEZNb3ZlKHN1cmZh
Y2UpKSk7Ci19Ci0jZW5kaWYKLQogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAoaXNCYWNrZWRCeUdy
YXBoaWNzU3VyZmFjZSgpKQotICAgICAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPmJlZ2lu
UGFpbnQocmVjdCwgMCAvKiBXcml0ZSB3aXRob3V0IHJldGFpbmluZyBwaXhlbHMqLyk7Ci0jZW5k
aWYKLQogICAgIEFTU0VSVChtX2JpdG1hcCk7CiAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBt
X2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGlwKHJlY3QpOwpAQCAtMTI4LDM2ICs4NiwxMiBAQCBXZWJDb29yZGluYXRlZFN1cmZhY2U6Oldl
YkNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cgog
ewogfQogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi1XZWJDb29yZGluYXRlZFN1cmZhY2U6
OldlYkNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBDb29y
ZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlPiBzdXJmYWNlKQotICAgIDogQ29vcmRpbmF0ZWRTdXJmYWNlKHNpemUsIGZsYWdzKQotICAg
ICwgbV9ncmFwaGljc1N1cmZhY2Uoc3VyZmFjZSkKLXsKLX0KLQotUmVmPFdlYkNvb3JkaW5hdGVk
U3VyZmFjZT4gV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncywgUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4gc3VyZmFjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb29yZGluYXRlZFN1
cmZhY2Uoc2l6ZSwgZmxhZ3MsIHN1cmZhY2UpKTsKLX0KLSNlbmRpZgotCiBXZWJDb29yZGluYXRl
ZFN1cmZhY2U6On5XZWJDb29yZGluYXRlZFN1cmZhY2UoKQogewogfQogCiBSZWZQdHI8V2ViQ29v
cmRpbmF0ZWRTdXJmYWNlPiBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShjb25zdCBIYW5k
bGUmIGhhbmRsZSkKIHsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAoaGFuZGxl
LmdyYXBoaWNzU3VyZmFjZVRva2VuKCkuaXNWYWxpZCgpKSB7Ci0gICAgICAgIEdyYXBoaWNzU3Vy
ZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gMDsKLSAgICAgICAgaWYgKGhhbmRsZS5tX2ZsYWdz
ICYgU3VwcG9ydHNBbHBoYSkKLSAgICAgICAgICAgIHN1cmZhY2VGbGFncyB8PSBHcmFwaGljc1N1
cmZhY2U6OlN1cHBvcnRzQWxwaGE7Ci0gICAgICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1
cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShoYW5kbGUubV9zaXplLCBzdXJmYWNlRmxh
Z3MsIGhhbmRsZS5tX2dyYXBoaWNzU3VyZmFjZVRva2VuKTsKLSAgICAgICAgaWYgKHN1cmZhY2Up
Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvb3JkaW5hdGVkU3VyZmFjZSho
YW5kbGUubV9zaXplLCBoYW5kbGUubV9mbGFncywgV1RGTW92ZShzdXJmYWNlKSkpOwotICAgIH0K
LSNlbmRpZgotCiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUoaGFuZGxlLm1fYml0bWFwSGFuZGxlKTsKICAgICBpZiAoIWJpdG1hcCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNzAsMTEgKzEwNCw2IEBAIGJvb2wgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUpCiAgICAgaGFuZGxl
Lm1fc2l6ZSA9IG1fc2l6ZTsKICAgICBoYW5kbGUubV9mbGFncyA9IG1fZmxhZ3M7CiAKLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9
IG1fZ3JhcGhpY3NTdXJmYWNlID8gbV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCkgOiBH
cmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIGlmIChoYW5kbGUubV9ncmFwaGljc1N1cmZhY2VU
b2tlbi5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCiAgICAgaWYgKCFt
X2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZS5tX2JpdG1hcEhhbmRsZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTkyLDIyICsxMjEsNiBAQCB2b2lkIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6Y29weVRvVGV4dHVyZShSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gcGFzc1Rl
eAogewogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKHBhc3NUZXh0dXJlKTsKIAot
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGlmIChpc0JhY2tlZEJ5R3JhcGhpY3NTdXJm
YWNlKCkpIHsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmVHTD4gdGV4dHVyZUdMID0gdG9C
aXRtYXBUZXh0dXJlR0wodGV4dHVyZS5nZXQoKSk7Ci0gICAgICAgIGlmICh0ZXh0dXJlR0wpIHsK
LSAgICAgICAgICAgIHVpbnQzMl90IHRleHR1cmVJRCA9IHRleHR1cmVHTC0+aWQoKTsKLSAgICAg
ICAgICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQgPSB0ZXh0dXJlR0wtPnRleHR1cmVUYXJnZXQo
KTsKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5VG9HTFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgdGV4dHVyZUlELCB0YXJnZXQsIHNvdXJjZU9mZnNldCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9ncmFw
aGljc1N1cmZhY2UtPmNyZWF0ZVJlYWRPbmx5SW1hZ2UoSW50UmVjdChzb3VyY2VPZmZzZXQsIHRh
cmdldC5zaXplKCkpKTsKLSAgICAgICAgdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UuZ2V0
KCksIHRhcmdldCwgSW50UG9pbnQ6Onplcm8oKSwgQml0bWFwVGV4dHVyZTo6VXBkYXRlQ2FuTW9k
aWZ5T3JpZ2luYWxJbWFnZURhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
ICAgICBBU1NFUlQobV9iaXRtYXApOwogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2JpdG1h
cC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB0ZXh0dXJlLT51cGRhdGVDb250ZW50cyhpbWFnZS5nZXQo
KSwgdGFyZ2V0LCBzb3VyY2VPZmZzZXQsIEJpdG1hcFRleHR1cmU6OlVwZGF0ZUNhbk1vZGlmeU9y
aWdpbmFsSW1hZ2VEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgKaW5kZXgg
NmFiN2M2NDBlOGQuLjg4YTBjMTA1OTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZh
Y2UuaApAQCAtMjUsMTAgKzI1LDYgQEAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkU3VyZmFjZS5oPgogCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCi0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQml0bWFwVGV4dHVyZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKQEAgLTQ2LDE2ICs0Miw5IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpF
bmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXIm
LCBIYW5kbGUmKTsKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VUb2tlbiBncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0IHsgcmV0
dXJuIG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47IH0KLSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTsKICAgICAgICAgbXV0YWJs
ZSBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBtX2JpdG1hcEhhbmRsZTsKLSNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gbV9ncmFw
aGljc1N1cmZhY2VUb2tlbjsKLSNlbmRpZgogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6
ZTsKICAgICAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBtX2ZsYWdzOwog
ICAgIH07CkBAIC04NCwyMSArNzMsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBSZWY8V2ViQ29v
cmRpbmF0ZWRTdXJmYWNlPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzLCBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgRmxhZ3MsIFJlZlB0cjxXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U+KTsKLSAgICAvLyBDcmVhdGUgYSBzaGFyZWFibGUgYml0bWFwIGJhY2tlZCBi
eSBhIGdyYXBoaWNzIHN1cmZhY2UuCi0gICAgc3RhdGljIFJlZlB0cjxXZWJDb29yZGluYXRlZFN1
cmZhY2U+IGNyZWF0ZVdpdGhTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncyk7
Ci0gICAgLy8gQ3JlYXRlIGEgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlIHJlZmVyZW5jaW5nIGFuIGV4
aXN0aW5nIEdyYXBoaWNzU3VyZmFjZS4KLSAgICBzdGF0aWMgUmVmPFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncywgUmVmUHRyPFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZT4pOwotCi0gICAgYm9vbCBpc0JhY2tlZEJ5R3JhcGhpY3NTdXJm
YWNlKCkgY29uc3QgeyByZXR1cm4gISFtX2dyYXBoaWNzU3VyZmFjZTsgfQotI2VuZGlmCiAKICAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKLQotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NT
dXJmYWNlOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>