<?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>201343</bug_id>
          
          <creation_ts>2019-08-30 09:03:18 -0700</creation_ts>
          <short_desc>[LFC] Make Geometry/Quirk/MarginCollapse subclasses stateful.</short_desc>
          <delta_ts>2019-08-30 10:02:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1566675</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-08-30 09:03:18 -0700</bug_when>
    <thetext>This is in preparation for &quot;sandboxing&quot; LFC subtrees.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566676</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-30 09:03:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/54883787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566677</commentid>
    <comment_count>2</comment_count>
      <attachid>377716</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-08-30 09:10:17 -0700</bug_when>
    <thetext>Created attachment 377716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566707</commentid>
    <comment_count>3</comment_count>
      <attachid>377716</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-30 10:02:38 -0700</bug_when>
    <thetext>Comment on attachment 377716
Patch

Clearing flags on attachment: 377716

Committed r249331: &lt;https://trac.webkit.org/changeset/249331&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566708</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-30 10:02:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377716</attachid>
            <date>2019-08-30 09:10:17 -0700</date>
            <delta_ts>2019-08-30 10:02:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201343-20190830091010.patch</filename>
            <type>text/plain</type>
            <size>180398</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3MTAzN2Q4MjAyZmY0
MTdmYjZmNTE2Zjk3YjA2M2ZkYWQyZGQ0NC4uNmM2ZGI5MmIwYTJjNDU5MjczZTFiOGViMzhhZDc5
YWQwNjZhMjI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0OCBAQAorMjAxOS0wOC0zMCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIE1ha2UgR2VvbWV0
cnkvUXVpcmsvTWFyZ2luQ29sbGFwc2Ugc3ViY2xhc3NlcyBzdGF0ZWZ1bC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTM0MworICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTQ4ODM3ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBmb3IgZW5mb3JjaW5nIExGQyB0
byBub3QgY2FsbCBvdXRzaWRlIG9mIHRoZSBmb3JtYXR0aW5nIGNvbnRleHQuCisKKyAgICAgICAg
KiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0
T2ZGbG93VmVydGljYWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZs
b3dIb3Jpem9udGFsR2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0
cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29u
dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6bGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmxheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGF5b3V0U3RhdGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjps
YXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
OjpxdWlya3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6UXVpcmtzKToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29udGVu
dEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWYWx1ZUlmTm90
QXV0byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6Zml4ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNv
bXB1dGVkTWluSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9z
aXRpb25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0
aWNhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBs
YWNlZEhvcml6b250YWxHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcGxpY2F0ZWRDYXNlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zmxv
YXRpbmdOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0QW5k
TWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9m
Rmxvd1ZlcnRpY2FsR2VvbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
ZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nV2lkdGhBbmRNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Omlu
bGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5k
TWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1
dGVkQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFBhZGRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29uc3RyYWluQnlN
aW5NYXhXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29udGVudEhl
aWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWYWx1ZUlmTm90
QXV0byk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6Zml4ZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVkTWluSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25G
b3JPdXRPZkZsb3dQb3NpdGlvbmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRp
Y2FsR2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNv
bXBsaWNhdGVkQ2FzZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRXaWR0aEFuZE1hcmdpbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93VmVydGljYWxHZW9tZXRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkQm9yZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFBhZGRpbmcpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNh
bE1hcmdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0aCk6IERlbGV0ZWQuCisgICAg
ICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFsdWVPZk5lYXJl
c3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQpOgorICAgICAgICAqIGxheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250
ZXh0Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlU3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1Bvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVzdGlt
YXRlZFZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckFuY2Vz
dG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRm9ybWF0dGluZ1Jvb3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0
aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFy
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpzZXRFc3RpbWF0ZWRNYXJnaW5CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dFJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVTdGF0aWNWZXJ0aWNhbFBvc2l0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0
YXRpY0hvcml6b250YWxQb3NpdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNQb3NpdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JBbmNlc3RvcnMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckZvcm1hdHRpbmdSb290IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGbG9hdENsZWFyIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUZsb2F0aW5nUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lk
RmxvYXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUhlaWdodEFuZE1hcmdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OnNldEVzdGltYXRlZE1hcmdpbkJlZm9yZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OmxheW91dFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2lu
Q29sbGFwc2U6OmxheW91dFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bWFyZ2luQ29sbGFwc2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpxdWlya3MgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpyZW1vdmVF
c3RpbWF0ZWRNYXJnaW5CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OlF1aXJrcyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNl
OjpNYXJnaW5Db2xsYXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OnJlbW92ZUVzdGltYXRlZE1hcmdpbkJlZm9yZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dSZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dXaWR0aEFuZE1h
cmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRXaWR0aEFuZE1h
cmdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbik6
IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0UXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6UXVpcmtzOjpuZWVkc1N0cmV0Y2hpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OnN0cmV0Y2hl
ZEluRmxvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OlF1aXJrczo6c2hvdWxkSWdub3JlQ29sbGFwc2VkUXVpcmtNYXJnaW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWly
a3M6Om5lZWRzU3RyZXRjaGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c2hvdWxkSWdub3JlQ29sbGFwc2VkUXVp
cmtNYXJnaW4pOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxv
Y2tNYXJnaW5Db2xsYXBzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRo
UGFyZW50TWFyZ2luQWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2Vz
V2l0aFBhcmVudE1hcmdpbkJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xs
YXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFy
Z2luQmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG93Q2hpbGRNYXJnaW5CZWZvcmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJn
aW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmdpbkJlZm9yZVdp
dGhDbGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFy
ZW50TWFyZ2luQmVmb3JlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0
aFBhcmVudE1hcmdpbkFmdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2Vz
V2l0aExhc3RJbkZsb3dDaGlsZE1hcmdpbkFmdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFm
dGVyQ29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6
Om1hcmdpbnNDb2xsYXBzZVRocm91Z2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0
ZXJGb3JQcmV2aW91c1NpYmxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZVZh
bHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Ok1hcmdpbkNvbGxhcHNlOjpwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6
OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjplc3RpbWF0ZWRNYXJnaW5C
ZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlSWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdp
bkNvbGxhcHNlOjp1cGRhdGVQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luVmFsdWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6
OmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNl
c1dpdGhQYXJlbnRNYXJnaW5BZnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVD
b2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdp
bkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdp
bkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdp
bkJlZm9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhTaWJs
aW5nTWFyZ2luQmVmb3JlV2l0aENsZWFyYW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5B
ZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTmV4dFNpYmxpbmdN
YXJnaW5CZWZvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luc0NvbGxhcHNlVGhyb3VnaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZyk6
IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXpl
TWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJvcmRl
ckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0
dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWln
aHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZEhlaWdodEZv
clJlcGxhY2VkSW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdG
b3JHZW5lcmljSW5saW5lQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRk
aW5nRm9ySW5saW5lQ29udGFpbmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZv
ckZvcm1hdHRpbmdSb290IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2luIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5k
TWFyZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnF1aXJrcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpRdWlya3Mp
OgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Omlu
bGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdodEFu
ZE1hcmdpbik6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUxheW91dDo6TGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmxheW91dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVM
YXlvdXQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpjcmVhdGVEaXNw
bGF5UnVucyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2lu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpRdWlya3M6OmxpbmVIZWlnaHRDb25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmxpbmVEZXNjZW50
TmVlZHNDb2xsYXBzaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZUhlaWdodENvbnN0cmFpbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OmNsb3NlKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lLmg6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZv
cm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3Jt
YXR0aW5nQ29udGV4dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6ZW5zdXJlVGFi
bGVHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmRpc3RyaWJ1dGVB
dmFpbGFibGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9y
bWF0dGluZ0NvbnRleHQ6OmVuc3VyZVRhYmxlR3JpZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQcmVmZXJy
ZWRXaWR0aEZvckNvbHVtbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFRhYmxlV2lkdGggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0
OjpkaXN0cmlidXRlQXZhaWxhYmxlV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxh
eW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpHZW9tZXRyeSk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
YWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6dGFibGVDZWxsSGVpZ2h0QW5kTWFyZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OnRhYmxlQ2VsbEhlaWdodEFuZE1hcmdpbik6IERlbGV0ZWQuCisKIDIwMTkt
MDgtMzAgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDkzYmY4MmMwYjM2MjFkZGRmYmM4YTQ0Mjcw
MTNlZGU4MTI4OThjZDIuLmRmNzJhODU0YzAxZThjZTljNTljYWFmYTc1NTlkOTNmZGE5ZjVlNmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNjQs
MjQgKzY0LDI0IEBAIExheW91dFN0YXRlJiBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0U3RhdGUo
KSBjb25zdAogICAgIHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZS5sYXlvdXRTdGF0ZSgpOwogfQog
Ci12b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21l
dHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCkK
IHsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0
byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkucGFkZGluZ0JveFdpZHRoKCk7CiAKICAg
ICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoKSB7CiAg
ICAgICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgY29udGFpbmlu
Z0Jsb2NrV2lkdGgsIHVzZWRXaWR0aCwgeyB9IH07Ci0gICAgICAgIHJldHVybiBHZW9tZXRyeTo6
b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRW
YWx1ZXMpOworICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5vdXRPZkZsb3dIb3Jpem9udGFsR2Vv
bWV0cnkobGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICB9OwogCiAgICAgYXV0byBob3Jpem9u
dGFsR2VvbWV0cnkgPSBjb21wdXRlKHsgfSk7Ci0gICAgaWYgKGF1dG8gbWF4V2lkdGggPSBHZW9t
ZXRyeTo6Y29tcHV0ZWRWYWx1ZUlmTm90QXV0byhsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsTWF4
V2lkdGgoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7CisgICAgaWYgKGF1dG8gbWF4V2lkdGgg
PSBnZW9tZXRyeSgpLmNvbXB1dGVkVmFsdWVJZk5vdEF1dG8obGF5b3V0Qm94LnN0eWxlKCkubG9n
aWNhbE1heFdpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSkgewogICAgICAgICBhdXRvIG1h
eEhvcml6b250YWxHZW9tZXRyeSA9IGNvbXB1dGUobWF4V2lkdGgpOwogICAgICAgICBpZiAoaG9y
aXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2luLndpZHRoID4gbWF4SG9yaXpvbnRhbEdlb21l
dHJ5LndpZHRoQW5kTWFyZ2luLndpZHRoKQogICAgICAgICAgICAgaG9yaXpvbnRhbEdlb21ldHJ5
ID0gbWF4SG9yaXpvbnRhbEdlb21ldHJ5OwogICAgIH0KIAotICAgIGlmIChhdXRvIG1pbldpZHRo
ID0gR2VvbWV0cnk6OmNvbXB1dGVkVmFsdWVJZk5vdEF1dG8obGF5b3V0Qm94LnN0eWxlKCkubG9n
aWNhbE1pbldpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSkgeworICAgIGlmIChhdXRvIG1p
bldpZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZFZhbHVlSWZOb3RBdXRvKGxheW91dEJveC5zdHls
ZSgpLmxvZ2ljYWxNaW5XaWR0aCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkpIHsKICAgICAgICAg
YXV0byBtaW5Ib3Jpem9udGFsR2VvbWV0cnkgPSBjb21wdXRlKG1pbldpZHRoKTsKICAgICAgICAg
aWYgKGhvcml6b250YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi53aWR0aCA8IG1pbkhvcml6b250
YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi53aWR0aCkKICAgICAgICAgICAgIGhvcml6b250YWxH
ZW9tZXRyeSA9IG1pbkhvcml6b250YWxHZW9tZXRyeTsKQEAgLTk0LDIyICs5NCwyMiBAQCB2b2lk
IEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNv
bnN0IEJveCYgbGF5b3V0Qm94KQogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbENvbXB1dGVk
TWFyZ2luKGhvcml6b250YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi5jb21wdXRlZE1hcmdpbik7
CiB9CiAKLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdl
b21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gp
CiB7CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogCiAgICAg
YXV0byBjb21wdXRlID0gWyZdKFVzZWRWZXJ0aWNhbFZhbHVlcyB1c2VkVmFsdWVzKSB7Ci0gICAg
ICAgIHJldHVybiBHZW9tZXRyeTo6b3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShsYXlvdXRTdGF0
ZSwgbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkub3V0
T2ZGbG93VmVydGljYWxHZW9tZXRyeShsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIH07CiAK
ICAgICBhdXRvIHZlcnRpY2FsR2VvbWV0cnkgPSBjb21wdXRlKHsgfSk7Ci0gICAgaWYgKGF1dG8g
bWF4SGVpZ2h0ID0gR2VvbWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dFN0YXRlLCBsYXlv
dXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1h
eEhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGF1dG8gbWF4VmVydGljYWxHZW9tZXRyeSA9
IGNvbXB1dGUoeyAqbWF4SGVpZ2h0IH0pOwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5o
ZWlnaHRBbmRNYXJnaW4uaGVpZ2h0ID4gbWF4VmVydGljYWxHZW9tZXRyeS5oZWlnaHRBbmRNYXJn
aW4uaGVpZ2h0KQogICAgICAgICAgICAgdmVydGljYWxHZW9tZXRyeSA9IG1heFZlcnRpY2FsR2Vv
bWV0cnk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gR2VvbWV0cnk6OmNvbXB1
dGVkTWluSGVpZ2h0KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWlu
SGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAg
ICAgIGF1dG8gbWluVmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUoeyAqbWluSGVpZ2h0IH0pOwog
ICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5oZWlnaHRBbmRNYXJnaW4uaGVpZ2h0IDwgbWlu
VmVydGljYWxHZW9tZXRyeS5oZWlnaHRBbmRNYXJnaW4uaGVpZ2h0KQogICAgICAgICAgICAgdmVy
dGljYWxHZW9tZXRyeSA9IG1pblZlcnRpY2FsR2VvbWV0cnk7CkBAIC0xMjMsMTcgKzEyMywxNyBA
QCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRy
eShjb25zdCBCb3gmIGxheW91dEJveCkgYwogICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJn
aW4oeyBub25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiwgeyB9IH0pOwogfQogCi12b2lkIEZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8VXNlZEhvcml6b250YWxWYWx1ZXM+IHVzZWRWYWx1ZXMpIGNvbnN0Cit2b2lk
IEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb25zdCBCb3gmIGxh
eW91dEJveCwgT3B0aW9uYWw8VXNlZEhvcml6b250YWxWYWx1ZXM+IHVzZWRWYWx1ZXMpCiB7CiAg
ICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlmICghdXNl
ZFZhbHVlcykKICAgICAgICAgdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5
b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRT
dGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgZGlzcGxheUJveC5z
ZXRCb3JkZXIoR2VvbWV0cnk6OmNvbXB1dGVkQm9yZGVyKGxheW91dEJveCkpOwotICAgIGRpc3Bs
YXlCb3guc2V0UGFkZGluZyhHZW9tZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGxheW91dEJveCwgKnVz
ZWRWYWx1ZXMpKTsKKyAgICBkaXNwbGF5Qm94LnNldEJvcmRlcihnZW9tZXRyeSgpLmNvbXB1dGVk
Qm9yZGVyKGxheW91dEJveCkpOworICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgp
LmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsICp1c2VkVmFsdWVzKSk7CiB9CiAKLXZvaWQgRm9y
bWF0dGluZ0NvbnRleHQ6OmxheW91dE91dE9mRmxvd0NvbnRlbnQoKSBjb25zdAordm9pZCBGb3Jt
YXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29udGVudCgpCiB7CiAgICAgTE9HX1dJVEhf
U1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIlN0YXJ0OiBsYXlvdXQg
b3V0LW9mLWZsb3cgY29udGVudCAtPiBjb250ZXh0OiAiIDw8ICZsYXlvdXRTdGF0ZSgpIDw8ICIg
cm9vdDogIiA8PCAmcm9vdCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0Nv
bnRleHQuaAppbmRleCAzNzBiNzJiNWY1NjQyYWViYzYzZjI5YzI5NmVmZjM0Y2UyNTRkNDExLi4z
YTY1N2NlZDcxY2M3YWY4NGFlMDA2Y2M2MGRkOTZiYjFjNDhhZjhlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDksOCArNDksOCBAQCBwdWJsaWM6CiAg
ICAgRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEZv
cm1hdHRpbmdTdGF0ZSYpOwogICAgIHZpcnR1YWwgfkZvcm1hdHRpbmdDb250ZXh0KCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgY29uc3QgPSAwOwotICAgIHZvaWQgbGF5b3V0T3V0T2ZG
bG93Q29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CisgICAg
dm9pZCBsYXlvdXRPdXRPZkZsb3dDb250ZW50KCk7CiAKICAgICBzdHJ1Y3QgSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyB7CiAgICAgICAgIHZvaWQgZXhwYW5kKExheW91dFVuaXQgaG9yaXpvbnRh
bFZhbHVlKTsKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAgICBMYXlvdXRVbml0IG1p
bmltdW07CiAgICAgICAgIExheW91dFVuaXQgbWF4aW11bTsKICAgICB9OwotICAgIHZpcnR1YWwg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpID0gMDsKIAogICAgIHN0YXRpYyBEaXNw
bGF5OjpCb3ggbWFwQm94VG9BbmNlc3Rvcihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYs
IGNvbnN0IENvbnRhaW5lciYgYW5jZXN0b3IpOwogICAgIHN0YXRpYyBMYXlvdXRVbml0IG1hcFRv
cFRvQW5jZXN0b3IoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBjb25zdCBDb250YWlu
ZXImIGFuY2VzdG9yKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHJvdGVjdGVkOgogICAgIEZvcm1hdHRp
bmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nU3Rh
dGU7IH0KICAgICBjb25zdCBCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiAqbV9yb290OyB9CiAK
LSAgICB2b2lkIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNvbnN0IEJveCYsIE9wdGlvbmFsPFVz
ZWRIb3Jpem9udGFsVmFsdWVzPiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CisgICAgdm9pZCBjb21w
dXRlQm9yZGVyQW5kUGFkZGluZyhjb25zdCBCb3gmLCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZh
bHVlcz4gPSBXVEY6Om51bGxvcHQpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgdm9p
ZCB2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dCgpIGNvbnN0OwpAQCAtODQs
NjYgKzg0LDk2IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ2Vu
ZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgogICAgIGNsYXNzIEdlb21ldHJ5IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1ZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBVc2VkVmVydGljYWxWYWx1
ZXMpOwotICAgICAgICBzdGF0aWMgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd0hvcml6b250
YWxHZW9tZXRyeShMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVz
KTsKKyAgICAgICAgR2VvbWV0cnkoTGF5b3V0U3RhdGUmKTsKIAotICAgICAgICBzdGF0aWMgSGVp
Z2h0QW5kTWFyZ2luIGZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwg
Y29uc3QgQm94JiwgVXNlZFZlcnRpY2FsVmFsdWVzLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0g
ICAgICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKExheW91
dFN0YXRlJiwgY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgICAgICBWZXJ0
aWNhbEdlb21ldHJ5IG91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiwgVXNlZFZl
cnRpY2FsVmFsdWVzKSBjb25zdDsKKyAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxv
d0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAK
LSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1h
cmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbFZhbHVlcyk7
Ci0gICAgICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFy
Z2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMp
OworICAgICAgICBIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiwgVXNlZFZlcnRpY2FsVmFsdWVzLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7Cisg
ICAgICAgIFdpZHRoQW5kTWFyZ2luIGZsb2F0aW5nV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94Jiwg
VXNlZEhvcml6b250YWxWYWx1ZXMpOwogCi0gICAgICAgIHN0YXRpYyBMYXlvdXRTaXplIGluRmxv
d1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYp
OworICAgICAgICBIZWlnaHRBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4o
Y29uc3QgQm94JiwgVXNlZFZlcnRpY2FsVmFsdWVzKSBjb25zdDsKKyAgICAgICAgV2lkdGhBbmRN
YXJnaW4gaW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpv
bnRhbFZhbHVlcykgY29uc3Q7CiAKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBjb21w
bGljYXRlZENhc2VzKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94JiwgVXNlZFZlcnRpY2Fs
VmFsdWVzLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgICAgIHN0YXRpYyBMYXlvdXRVbml0
IHNocmlua1RvRml0V2lkdGgoTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyk7CisgICAgICAgIExheW91dFNpemUgaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGNvbnN0IEJveCYpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBFZGdlcyBjb21wdXRlZEJv
cmRlcihjb25zdCBCb3gmKTsKLSAgICAgICAgc3RhdGljIE9wdGlvbmFsPEVkZ2VzPiBjb21wdXRl
ZFBhZGRpbmcoY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgICAgICBIZWln
aHRBbmRNYXJnaW4gY29tcGxpY2F0ZWRDYXNlcyhjb25zdCBCb3gmLCBVc2VkVmVydGljYWxWYWx1
ZXMsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKKyAgICAgICAgTGF5b3V0VW5pdCBzaHJp
bmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAotICAgICAg
ICBzdGF0aWMgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7Ci0gICAgICAgIHN0YXRpYyBDb21w
dXRlZFZlcnRpY2FsTWFyZ2luIGNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiwgVXNl
ZEhvcml6b250YWxWYWx1ZXMpOworICAgICAgICBFZGdlcyBjb21wdXRlZEJvcmRlcihjb25zdCBC
b3gmKSBjb25zdDsKKyAgICAgICAgT3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25z
dCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7CiAKLSAgICAgICAgc3RhdGljIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oY29uc3QgTGVuZ3RoJiBn
ZW9tZXRyeVByb3BlcnR5LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICAg
ICAgc3RhdGljIE9wdGlvbmFsPExheW91dFVuaXQ+IGZpeGVkVmFsdWUoY29uc3QgTGVuZ3RoJiBn
ZW9tZXRyeVByb3BlcnR5KTsKKyAgICAgICAgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29u
c3Q7CisgICAgICAgIENvbXB1dGVkVmVydGljYWxNYXJnaW4gY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7CiAKLSAgICAgICAgc3Rh
dGljIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluSGVpZ2h0KGNvbnN0IExheW91dFN0
YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyBPcHRpb25hbDxMYXlvdXRVbml0PiBj
b21wdXRlZE1heEhlaWdodChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOworICAgICAg
ICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKGNvbnN0IExlbmd0
aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29u
c3Q7CisgICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGZpeGVkVmFsdWUoY29uc3QgTGVuZ3Ro
JiBnZW9tZXRyeVByb3BlcnR5KSBjb25zdDsKIAotICAgICAgICBzdGF0aWMgRm9ybWF0dGluZ0Nv
bnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3RyYWluQnlNaW5NYXhXaWR0aChj
b25zdCBCb3gmLCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKTsKKyAgICAgICAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gY29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgQm94JikgY29uc3Q7CisgICAgICAg
IE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWF4SGVpZ2h0KGNvbnN0IEJveCYpIGNvbnN0
OwogCi0gICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5n
Q29udGV4dFJvb3QoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgRm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29uc3RyYWluQnlNaW5N
YXhXaWR0aChjb25zdCBCb3gmLCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKSBjb25zdDsKKwor
ICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
Y29uc3QgQm94JikgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGVudW0gY2xhc3Mg
SGVpZ2h0VHlwZSB7IE1pbiwgTWF4LCBOb3JtYWwgfTsKLSAgICAgICAgc3RhdGljIE9wdGlvbmFs
PExheW91dFVuaXQ+IGNvbXB1dGVkSGVpZ2h0VmFsdWUoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25z
dCBCb3gmLCBIZWlnaHRUeXBlKTsKKyAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRIZWlnaHRWYWx1ZShjb25zdCBCb3gmLCBIZWlnaHRUeXBlKSBjb25zdDsKKworICAgICAgICBj
b25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFN0
YXRlOyB9CisgICAgICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIHsgcmV0dXJuIG1fbGF5
b3V0U3RhdGU7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBWZXJ0aWNhbEdlb21l
dHJ5IG91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBMYXlvdXRTdGF0ZSYs
IGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbFZhbHVlcyk7Ci0gICAgICAgIHN0YXRpYyBIb3Jpem9u
dGFsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgTGF5
b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIFZl
cnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJv
eCYsIFVzZWRWZXJ0aWNhbFZhbHVlcykgY29uc3Q7CisgICAgICAgIEhvcml6b250YWxHZW9tZXRy
eSBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBVc2VkSG9y
aXpvbnRhbFZhbHVlcykgY29uc3Q7CisKKyAgICAgICAgVmVydGljYWxHZW9tZXRyeSBvdXRPZkZs
b3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiwgVXNlZFZlcnRpY2FsVmFs
dWVzKSBjb25zdDsKKyAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd05vblJlcGxh
Y2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsK
KworICAgICAgICBIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdSZXBsYWNlZEhlaWdodEFuZE1hcmdp
bihjb25zdCBCb3gmLCBVc2VkVmVydGljYWxWYWx1ZXMpIGNvbnN0OworICAgICAgICBXaWR0aEFu
ZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgVXNlZEhv
cml6b250YWxWYWx1ZXMpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBWZXJ0aWNhbEdlb21ldHJ5
IG91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBMYXlvdXRTdGF0ZSYs
IGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNhbFZhbHVlcyk7Ci0gICAgICAgIHN0YXRpYyBIb3Jpem9u
dGFsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoTGF5b3V0
U3RhdGUmLCBjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIFdpZHRo
QW5kTWFyZ2luIGZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBm
bG9hdGluZ1JlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3Qg
Qm94JiwgVXNlZFZlcnRpY2FsVmFsdWVzKTsKLSAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2lu
IGZsb2F0aW5nUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0
IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmKSBjb25zdDsK
KyAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKGNvbnN0IEJveCYpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBXaWR0aEFuZE1h
cmdpbiBmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oTGF5b3V0U3RhdGUmLCBjb25z
dCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIExheW91dFN0YXRlJiBtX2xh
eW91dFN0YXRlOwogICAgIH07CisgICAgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21l
dHJ5KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnkobGF5b3V0U3RhdGUoKSk7IH0KIAogICAgIGNs
YXNzIFF1aXJrcyB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBoZWln
aHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChjb25zdCBMYXlv
dXRTdGF0ZSYsIGNvbnN0IEJveCYpOworICAgICAgICBRdWlya3MoTGF5b3V0U3RhdGUmKTsKKwor
ICAgICAgICBMYXlvdXRVbml0IGhlaWdodFZhbHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0
aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFN0YXRl
OyB9CisgICAgICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIHsgcmV0dXJuIG1fbGF5b3V0
U3RhdGU7IH0KKworICAgICAgICBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKICAgICB9Owor
ICAgIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVp
cmtzKGxheW91dFN0YXRlKCkpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb21wdXRlT3V0T2ZG
bG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVP
dXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JikgY29uc3Q7CisgICAgdm9pZCBj
b21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmKTsKKyAgICB2b2lkIGNv
bXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94Jik7CiAKICAgICBXZWFr
UHRyPGNvbnN0IEJveD4gbV9yb290OwogICAgIEZvcm1hdHRpbmdTdGF0ZSYgbV9mb3JtYXR0aW5n
U3RhdGU7CiB9OwogCitpbmxpbmUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRy
eShMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCisgICAgOiBtX2xheW91dFN0YXRlKGxheW91dFN0
YXRlKQoreworfQorCitpbmxpbmUgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6UXVpcmtzKExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKKyAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUp
Cit7Cit9CisKIGlubGluZSB2b2lkIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzOjpleHBhbmQoTGF5b3V0VW5pdCBob3Jpem9udGFsVmFsdWUpCiB7CiAgICAgbWlu
aW11bSArPSBob3Jpem9udGFsVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggZWI4YjNlMzQwYmVkMjUzYmI5YmQ0
YTdkZjk1YjM2ZjJhNDVlNjY1MC4uMTU4MjVkYTg1MDMzMzA3Mjc3NDgxN2JjNjJiZjM2N2ExNTMx
NTlhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcApAQCAtNTksOCArNTksOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZWln
aHRBdXRvKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT3B0
aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhl
aWdodFZhbHVlKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlv
dXRCb3gsIEhlaWdodFR5cGUgaGVpZ2h0VHlwZSkKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1ZShjb25zdCBCb3gmIGxh
eW91dEJveCwgSGVpZ2h0VHlwZSBoZWlnaHRUeXBlKSBjb25zdAogeworICAgIGF1dG8mIGxheW91
dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOwogICAgIGF1dG8gaGVpZ2h0ID0gaGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpO
b3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkgOiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6
Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQoKSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQo
KTsKICAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVkKCkgfHwgaGVpZ2h0LmlzQXV0bygpKQpAQCAt
NzUsNyArNzYsNyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUoY29uc3QgTGF5bwogICAgICAgICBjb250YWluaW5n
QmxvY2tIZWlnaHRWYWx1ZSA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSkuaGVpZ2h0KCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKGxheW91dFN0YXRlLmluUXVpcmtzTW9kZSgpKQotICAgICAgICAgICAgY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0VmFsdWUgPSBGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1
ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94KTsKKyAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0gUXVpcmtz
KGNvbnN0X2Nhc3Q8TGF5b3V0U3RhdGUmPihsYXlvdXRTdGF0ZSkpLmhlaWdodFZhbHVlT2ZOZWFy
ZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGxheW91dEJveCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBsYXlvdXRCb3gu
Y29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkubG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAg
aWYgKGNvbnRhaW5pbmdCbG9ja0hlaWdodC5pc0ZpeGVkKCkpCkBAIC04OSw3ICs5MCw3IEBAIE9w
dGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRI
ZWlnaHRWYWx1ZShjb25zdCBMYXlvCiAgICAgcmV0dXJuIHZhbHVlRm9yTGVuZ3RoKGhlaWdodCwg
KmNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlKTsKIH0KIAotTGF5b3V0VW5pdCBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
Y29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKK0xh
eW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9y
bWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIEFT
U0VSVChpc0hlaWdodEF1dG8obGF5b3V0Qm94KSAmJiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9y
bWF0dGluZ0NvbnRleHQoKSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSk7CiAKQEAgLTEw
NSw2ICsxMDYsNyBAQCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29u
dGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChjbwogICAgIGlmICghaXM8Q29udGFp
bmVyPihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkuaGFzSW5G
bG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKKyAgICBhdXRvJiBs
YXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0byYgZGlzcGxheUJveCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBhdXRv
IGJvcmRlckFuZFBhZGRpbmdUb3AgPSBkaXNwbGF5Qm94LmJvcmRlclRvcCgpICsgZGlzcGxheUJv
eC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKICAgICBhdXRvIHRvcCA9IGJvcmRlckFuZFBhZGRp
bmdUb3A7CkBAIC0xNTMsNyArMTU1LDcgQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY28KICAgICBy
ZXR1cm4gY29tcHV0ZWRIZWlnaHQ7CiB9CiAKLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWYWx1ZUlmTm90QXV0byhjb25zdCBMZW5ndGgm
IGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCitPcHRp
b25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8oY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5LCBMYXlvdXRVbml0IGNv
bnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdAogewogICAgIGlmIChnZW9tZXRyeVByb3BlcnR5Lmlz
VW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xNjQsNyArMTY2
LDcgQEAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKGNvbnN0IEwKICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgo
Z2VvbWV0cnlQcm9wZXJ0eSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogfQogCi1PcHRpb25hbDxM
YXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZpeGVkVmFsdWUoY29uc3Qg
TGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5KQorT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpmaXhlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9w
ZXJ0eSkgY29uc3QKIHsKICAgICBpZiAoIWdlb21ldHJ5UHJvcGVydHkuaXNGaXhlZCgpKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTc1LDIwICsxNzcsMjAgQEAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmaXhlZFZhbHVlKGNvbnN0
IExlbmd0aCYgZ2VvbWUKIC8vIFNwZWNpZmllcyBhIHBlcmNlbnRhZ2UgZm9yIGRldGVybWluaW5n
IHRoZSB1c2VkIHZhbHVlLiBUaGUgcGVyY2VudGFnZSBpcyBjYWxjdWxhdGVkIHdpdGggcmVzcGVj
dCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBnZW5lcmF0ZWQgYm94J3MgY29udGFpbmluZyBibG9jay4K
IC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmll
ZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwgYW5kIHRo
aXMgZWxlbWVudCBpcyBub3QgYWJzb2x1dGVseSBwb3NpdGlvbmVkLAogLy8gdGhlIHBlcmNlbnRh
Z2UgdmFsdWUgaXMgdHJlYXRlZCBhcyAnMCcgKGZvciAnbWluLWhlaWdodCcpIG9yICdub25lJyAo
Zm9yICdtYXgtaGVpZ2h0JykuCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGNvbnN0IEJveCYgbGF5b3V0
Qm94KSBjb25zdAogewotICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dFN0YXRl
LCBsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok1heCk7CisgICAgcmV0dXJuIGNvbXB1dGVkSGVpZ2h0
VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpNYXgpOwogfQogCi1PcHRpb25hbDxMYXlvdXRV
bml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluSGVpZ2h0KGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitPcHRpb25h
bDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluSGVp
Z2h0KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewotICAgIGlmIChhdXRvIG1pbkhlaWdo
dFZhbHVlID0gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBIZWln
aHRUeXBlOjpNaW4pKQorICAgIGlmIChhdXRvIG1pbkhlaWdodFZhbHVlID0gY29tcHV0ZWRIZWln
aHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok1pbikpCiAgICAgICAgIHJldHVybiBtaW5I
ZWlnaHRWYWx1ZTsKIAogICAgIHJldHVybiB7IDAgfTsKIH0KIAotc3RhdGljIExheW91dFVuaXQg
c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKK0xheW91dFVuaXQgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKIApAQCAtMTk5LDYgKzIwMSw3IEBA
IHN0YXRpYyBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3Np
dGlvbmVkKGNvbnN0IExheW91dFN0YXRlCiAgICAgLy8gY29tcHV0ZWQgdmFsdWUgZm9yICdkaXNw
bGF5Jy4pIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSBpZiB0aGUgaHlwb3RoZXRpY2FsIGJveCBpcyBh
Ym92ZSB0aGUgY29udGFpbmluZyBibG9jay4KIAogICAgIC8vIFN0YXJ0IHdpdGggdGhpcyBib3gn
cyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRoZSBwYXJlbnQncyBib3JkZXIgYm94LgorICAgIGF1
dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBMYXlvdXRVbml0IHRv
cDsKICAgICBpZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZp
b3VzSW5GbG93U2libGluZygpKSB7CiAgICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldApAQCAt
MjIzLDEyICsyMjYsMTMgQEAgc3RhdGljIExheW91dFVuaXQgc3RhdGljVmVydGljYWxQb3NpdGlv
bkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgTGF5b3V0U3RhdGUKICAgICByZXR1cm4gdG9w
IC0gcGFkZGluZ0JveFRvcDsKIH0KIAotc3RhdGljIExheW91dFVuaXQgc3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9u
ZWQoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CiAgICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9zaXRp
b25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RhdGlj
IHBvc2l0aW9uLgogCiAgICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3ggb2Zm
c2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRlciBib3guCisgICAgYXV0byYgbGF5b3V0U3RhdGUg
PSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIEFTU0VSVChsYXlvdXRCb3gucGFyZW50KCkpOwog
ICAgIGF1dG8gbGVmdCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91
dEJveC5wYXJlbnQoKSkuY29udGVudEJveExlZnQoKTsKIApAQCAtMjQ2LDcgKzI1MCw3IEBAIHN0
YXRpYyBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0
aW9uZWQoY29uc3QgTGF5b3V0U3RhCiAgICAgcmV0dXJuIGxlZnQgLSBwYWRkaW5nQm94TGVmdDsK
IH0KIAotTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnNocmlua1RvRml0
V2lkdGgoTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290
LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQorTGF5b3V0VW5pdCBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OnNocmlua1RvRml0V2lkdGgoY29uc3QgQm94JiBmb3JtYXR0aW5n
Um9vdCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykKIHsKICAgICBMT0dfV0lUSF9T
VFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJp
bmsgdG8gZml0IC0+IHVuc3VwcG9ydGVkIC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwg
InB4KSBsYXlvdXRCb3g6ICIgPDwgJmZvcm1hdHRpbmdSb290IDw8ICIpIik7CiAgICAgQVNTRVJU
KGZvcm1hdHRpbmdSb290LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CkBAIC0yNTks
NiArMjYzLDcgQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnNocmlu
a1RvRml0V2lkdGgoTGF5b3V0U3RhdGUmIGxheW91dFN0YXQKICAgICAvLyAncGFkZGluZy1sZWZ0
JywgJ3BhZGRpbmctcmlnaHQnLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJywgJ21hcmdpbi1yaWdodCcs
IGFuZCB0aGUgd2lkdGhzIG9mIGFueSByZWxldmFudCBzY3JvbGwgYmFycy4KIAogICAgIC8vIFRo
ZW4gdGhlIHNocmluay10by1maXQgd2lkdGggaXM6IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0g
d2lkdGgsIGF2YWlsYWJsZSB3aWR0aCksIHByZWZlcnJlZCB3aWR0aCkuCisgICAgYXV0byYgbGF5
b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0
ZUZvclJvb3QgPSBsYXlvdXRTdGF0ZS5jcmVhdGVGb3JtYXR0aW5nU3RhdGVGb3JGb3JtYXR0aW5n
Um9vdElmTmVlZGVkKGZvcm1hdHRpbmdSb290KTsKICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGVGb3JSb290LmludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKTsKICAgICBpZiAoIWludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpCkBAIC0yNjcsNyArMjcy
LDcgQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnNocmlua1RvRml0
V2lkdGgoTGF5b3V0U3RhdGUmIGxheW91dFN0YXQKICAgICByZXR1cm4gc3RkOjptaW4oc3RkOjpt
YXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy0+bWluaW11bSwgYXZhaWxhYmxlV2lkdGgpLCBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLT5tYXhpbXVtKTsKIH0KIAotVmVydGljYWxHZW9tZXRy
eSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVydGlj
YWxHZW9tZXRyeShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBVc2VkVmVydGljYWxWYWx1ZXMgdXNlZFZhbHVlcykKK1ZlcnRpY2FsR2VvbWV0cnkg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbFZhbHVlcyB1c2VkVmFs
dWVzKSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgIWxheW91dEJveC5yZXBsYWNlZCgpKTsKIApAQCAtMjk1LDYgKzMwMCw3IEBAIFZlcnRp
Y2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBs
YWNlZFZlcnRpY2FsR2VvbWV0CiAgICAgLy8gNS4gJ2hlaWdodCcgaXMgJ2F1dG8nLCAndG9wJyBh
bmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdp
bi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHNldCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hl
aWdodCcKICAgICAvLyA2LiAnYm90dG9tJyBpcyAnYXV0bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBh
cmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFu
ZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29sdmUgZm9yICdib3R0b20nCiAKKyAgICBhdXRv
JiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
a0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpOwpAQCAtMzAzLDcgKzMwOSw3IEBAIFZlcnRpY2FsR2VvbWV0
cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRp
Y2FsR2VvbWV0CiAKICAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUu
bG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byBib3R0b20gPSBj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOwotICAgIGF1dG8gaGVpZ2h0ID0gdXNlZFZhbHVlcy5oZWlnaHQgPyB1c2VkVmFs
dWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOworICAgIGF1dG8gaGVpZ2h0ID0gdXNlZFZhbHVl
cy5oZWlnaHQgPyB1c2VkVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHRWYWx1
ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok5vcm1hbCk7CiAgICAgYXV0byBjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBV
c2VkSG9yaXpvbnRhbFZhbHVlcyB7IGNvbnRhaW5pbmdCbG9ja1dpZHRoIH0pOwogICAgIFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHVzZWRWZXJ0aWNhbE1hcmdpbjsgCiAg
ICAgYXV0byBwYWRkaW5nVG9wID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsK
QEAgLTMxNiw3ICszMjIsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAogICAgIH07CiAKICAg
ICBpZiAoIXRvcCAmJiAhaGVpZ2h0ICYmICFib3R0b20pCi0gICAgICAgIHRvcCA9IHN0YXRpY1Zl
cnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dFN0YXRlLCBsYXlvdXRC
b3gpOworICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9z
aXRpb25lZChsYXlvdXRCb3gpOwogCiAgICAgaWYgKHRvcCAmJiBoZWlnaHQgJiYgYm90dG9tKSB7
CiAgICAgICAgIGlmICghY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgJiYgIWNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIpIHsKQEAgLTMzOCwyMSArMzQ0LDIxIEBAIFZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0CiAKICAgICBpZiAoIXRvcCAmJiAhaGVpZ2h0ICYmIGJvdHRvbSkgewogICAg
ICAgICAvLyAjMQotICAgICAgICBoZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0Nv
bnRleHRSb290KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICBoZWlnaHQgPSBjb250
ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dEJveCk7CiAgICAgICAgIHVz
ZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVP
cigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CiAgICAgICAg
IHRvcCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3Jl
ICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7IAogICAgIH0K
IAogICAgIGlmICghdG9wICYmICFib3R0b20gJiYgaGVpZ2h0KSB7CiAgICAgICAgIC8vICMyCi0g
ICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVk
KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gpOwogICAgICAgICB1c2VkVmVy
dGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCks
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwogICAgICAgICBib3R0
b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgY29udGVudEhlaWdodCgpICsgcGFkZGlu
Z0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7CiAgICAg
fQogCiAgICAgaWYgKCFoZWlnaHQgJiYgIWJvdHRvbSAmJiB0b3ApIHsKICAgICAgICAgLy8gIzMK
LSAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKKyAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpOwogICAgICAgICB1c2VkVmVydGljYWxN
YXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1
dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwogICAgICAgICBib3R0b20gPSBj
b250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUg
KyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3Jk
ZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwogICAgIH0KQEAgLTM4OSw3ICsz
OTUsNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldAogICAgIHJldHVybiB7ICp0b3AsICpib3R0
b20sIHsgY29udGVudEhlaWdodCgpLCB1c2VkVmVydGljYWxNYXJnaW4gfSB9OwogfQogCi1Ib3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25S
ZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQorSG9yaXpv
bnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVw
bGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzIHVzZWRWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogICAgIApAQCAtNDE5LDYg
KzQyNSw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgLy8gNS4gJ3dpZHRoJyBpcyAn
YXV0bycsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3Ig
J3dpZHRoJwogICAgIC8vIDYuICdyaWdodCcgaXMgJ2F1dG8nLCAnbGVmdCcgYW5kICd3aWR0aCcg
YXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdyaWdodCcKIAorICAgIGF1dG8mIGxheW91
dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKTsKQEAgLTQ0Niw3ICs0NTMsNyBAQCBIb3Jpem9udGFs
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNl
ZEhvcml6b250YWxHZQogICAgICAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIg
dGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlv
biBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgogICAgICAgICB1c2VkSG9yaXpvbnRh
bE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwogCi0gICAgICAgIGF1dG8g
c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0
T2ZGbG93UG9zaXRpb25lZChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byBz
dGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCk7CiAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKQogICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKICAg
ICAgICAgZWxzZQpAQCAtNDk0LDExICs1MDEsMTEgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UK
ICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmluZyBmb3Ig
J3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAoaW4gY2FzZSAxKSB0byAwCiAgICAgICAgIGxl
ZnQgPSBMYXlvdXRVbml0IHsgMCB9OwogICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAr
IGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsg
dXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJp
bmtUb0ZpdFdpZHRoKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVz
IHsgYXZhaWxhYmxlV2lkdGgsIHVzZWRWYWx1ZXMud2lkdGgsIHVzZWRWYWx1ZXMubWFyZ2luIH0p
OworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGF2YWlsYWJsZVdpZHRoLCB1c2VkVmFsdWVzLndpZHRoLCB1c2VkVmFsdWVz
Lm1hcmdpbiB9KTsKICAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRo
ICsgcGFkZGluZ1JpZ2h0ICArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5k
ICsgKnJpZ2h0KTsKICAgICB9IGVsc2UgaWYgKCFsZWZ0ICYmICFyaWdodCAmJiB3aWR0aCkgewog
ICAgICAgICAvLyAjMgotICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0
YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0U3RhdGUs
IGxheW91dEJveCk7CisgICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gpOwog
ICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikgewogICAgICAgICAgICAgbGVmdCA9
IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKICAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmlu
Z0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArIGNvbnRlbnRXaWR0aCgpICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwpAQCAtNTExLDcgKzUxOCw3IEBA
IEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxv
d05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYXZhaWxh
YmxlIHdpZHRoIGJ5IHNvbHZpbmcgZm9yICd3aWR0aCcgYWZ0ZXIgc2V0dGluZyAncmlnaHQnIChp
biBjYXNlIDMpIHRvIDAKICAgICAgICAgcmlnaHQgPSBMYXlvdXRVbml0IHsgMCB9OwogICAgICAg
ICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJp
Z2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dFN0YXRlLCBsYXlv
dXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGgsIHVzZWRWYWx1ZXMu
d2lkdGgsIHVzZWRWYWx1ZXMubWFyZ2luIH0pOworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0
V2lkdGgobGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGF2YWlsYWJsZVdpZHRoLCB1
c2VkVmFsdWVzLndpZHRoLCB1c2VkVmFsdWVzLm1hcmdpbiB9KTsKICAgICAgICAgcmlnaHQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwogICAgIH0gZWxzZSBpZiAoIWxl
ZnQgJiYgd2lkdGggJiYgcmlnaHQpIHsKICAgICAgICAgLy8gIzQKQEAgLTUzOCw3ICs1NDUsNyBA
QCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZs
b3dOb25SZXBsYWNlZEhvcml6b250YWxHZQogICAgIHJldHVybiB7ICpsZWZ0LCAqcmlnaHQsIHsg
Y29udGVudFdpZHRoKCksIHVzZWRIb3Jpem9udGFsTWFyZ2luLCBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4gfSB9OwogfQogCi1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbFZhbHVlcyB1
c2VkVmFsdWVzKQorVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91
dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAK
QEAgLTU1Miw2ICs1NTksNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KAogICAgIC8vIDQuIElm
IGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgb25seSBvbmUgJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KICAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20n
IGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KIAorICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhp
cy0+bGF5b3V0U3RhdGUoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwog
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KGxheW91dEJveCk7CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGxheW91
dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KSk7CkBAIC01NjAsNyArNTY4LDcgQEAgVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeSgKIAogICAgIGF1
dG8gdG9wID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dpY2FsVG9wKCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1
dG8oc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0
byBoZWlnaHQgPSBpbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94LCB1c2VkVmFsdWVzKS5oZWlnaHQ7CisgICAgYXV0byBoZWlnaHQgPSBpbmxpbmVSZXBs
YWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpLmhlaWdodDsKICAgICBh
dXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbihsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgY29udGFpbmluZ0Jsb2NrV2lk
dGggfSk7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkJlZm9yZSA9IGNvbXB1
dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRN
YXJnaW5BZnRlciA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXI7CkBAIC01NzEsNyArNTc5
LDcgQEAgVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9m
Rmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeSgKIAogICAgIGlmICghdG9wICYmICFib3R0b20p
IHsKICAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQb3NpdGlvbkZv
ck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgICAgIHRv
cCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJv
eCk7CiAgICAgfQogCiAgICAgaWYgKCFib3R0b20pIHsKQEAgLTYxOSw3ICs2MjcsNyBAQCBWZXJ0
aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFj
ZWRWZXJ0aWNhbEdlb21ldHJ5KAogICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgaGVpZ2h0
LCB7ICp1c2VkTWFyZ2luQmVmb3JlLCAqdXNlZE1hcmdpbkFmdGVyIH0gfSB9OwogfQogCi1Ib3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBs
YWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQorSG9y
aXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9u
dGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CiAKQEAgLTYzNyw2
ICs2NDUsNyBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZQogICAgIC8vIDUuIElmIGF0IHRoaXMg
cG9pbnQgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBm
b3IgZWl0aGVyICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yCiAgICAgLy8gICAncmlnaHQnIChpbiBjYXNl
ICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCiAKKyAgICBh
dXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7CkBAIC02NDgsNyArNjU3LDcgQEAg
SG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
biA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFs
dWVzKTsKICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luU3RhcnQgPSBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1h
cmdpbkVuZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7Ci0gICAgYXV0byB3aWR0aCA9
IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNl
ZFZhbHVlcykud2lkdGg7CisgICAgYXV0byB3aWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRN
YXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKS53aWR0aDsKICAgICBhdXRvIHBhZGRpbmdMZWZ0
ID0gZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byBwYWRkaW5n
UmlnaHQgPSBkaXNwbGF5Qm94LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byBi
b3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0KCk7CkBAIC02NTYsNyArNjY1LDcgQEAg
SG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKIAogICAgIGlmICghbGVmdCAmJiAhcmlnaHQpIHsKICAg
ICAgICAgLy8gIzEKLSAgICAgICAgYXV0byBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dFN0YXRlLCBs
YXlvdXRCb3gpOworICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRp
Y0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94KTsKICAg
ICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCiAgICAgICAgICAgICBsZWZ0ID0gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uOwogICAgICAgICBlbHNlCkBAIC03MjMsNyArNzMyLDcgQEAg
SG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKICAgICByZXR1cm4geyAqbGVmdCwgKnJpZ2h0LCB7IHdp
ZHRoLCB7ICp1c2VkTWFyZ2luU3RhcnQsICp1c2VkTWFyZ2luRW5kIH0sIGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbiB9IH07CiB9CiAKLUhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWYWx1ZXMsIFVz
ZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKQorSGVpZ2h0QW5kTWFyZ2lu
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcGxpY2F0ZWRDYXNlcyhjb25zdCBCb3gm
IGxheW91dEJveCwgVXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWYWx1ZXMsIFVzZWRIb3Jpem9udGFs
VmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAogewogICAgIEFTU0VSVCghbGF5b3V0
Qm94LnJlcGxhY2VkKCkpOwogICAgIC8vIFRPRE86IFVzZSBjb21wbGljYXRlZC1jYXNlIGZvciBk
b2N1bWVudCByZW5kZXJlciBmb3Igbm93IChzZWUgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbikuCkBAIC03MzgsMTQgKzc0NywxNCBAQCBIZWln
aHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2Vz
KGNvbnN0IExheW91dFN0YXRlJgogICAgIC8vIDEuIElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdp
bi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWUgaXMgMC4KICAgICAvLyAyLiBJ
ZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdz
IGRlc2NlbmRhbnRzIHBlciAxMC42LjcuCiAKLSAgICBhdXRvIGhlaWdodCA9IHVzZWRWYWx1ZXMu
aGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0VmFsdWUo
bGF5b3V0U3RhdGUsIGxheW91dEJveCwgSGVpZ2h0VHlwZTo6Tm9ybWFsKTsKKyAgICBhdXRvIGhl
aWdodCA9IHVzZWRWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNv
bXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwogICAgIGF1
dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFy
Z2luKGxheW91dEJveCwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIC8vICMxCiAgICAgYXV0
byB1c2VkVmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZh
bHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKICAgICAvLyAjMgogICAgIGlmICgh
aGVpZ2h0KSB7CiAgICAgICAgIEFTU0VSVChpc0hlaWdodEF1dG8obGF5b3V0Qm94KSk7Ci0gICAg
ICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0
U3RhdGUsIGxheW91dEJveCk7CisgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3Jt
YXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Qm94KTsKICAgICB9CiAKICAgICBBU1NFUlQoaGVpZ2h0
KTsKQEAgLTc1NCw3ICs3NjMsNyBAQCBIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IExheW91dFN0YXRlJgogICAgIHJldHVy
biBIZWlnaHRBbmRNYXJnaW4geyAqaGVpZ2h0LCB1c2VkVmVydGljYWxNYXJnaW4gfTsKIH0KIAot
V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ05vblJl
cGxhY2VkV2lkdGhBbmRNYXJnaW4oTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gm
IGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykKK1dpZHRoQW5kTWFy
Z2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRo
QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2Vk
VmFsdWVzKQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSAm
JiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC03NzAsMjMgKzc3OSwyMyBAQCBXaWR0aEFu
ZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihMYQogICAgIC8vICMyCiAgICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFs
dWVJZk5vdEF1dG8odXNlZFZhbHVlcy53aWR0aCA/IExlbmd0aCB7IHVzZWRWYWx1ZXMud2lkdGgu
dmFsdWUoKSwgRml4ZWQgfSA6IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLCB1c2Vk
VmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCkpOwogICAgIGlmICghd2lkdGgp
Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJv
eCwgdXNlZFZhbHVlcyk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGZsb2F0aW5nIG5vbi1yZXBsYWNl
ZCAtPiB3aWR0aCgiIDw8ICp3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jpem9udGFs
bE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLmVuZCA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKICAgICByZXR1cm4gV2lk
dGhBbmRNYXJnaW4geyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsbE1hcmdpbiwgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luIH07CiB9CiAKLUhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsVmFsdWVz
IHVzZWRWYWx1ZXMpCitIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBV
c2VkVmVydGljYWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0
Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCiAg
ICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFj
ZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCiAgICAgLy8gcmVwbGFj
ZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRz
CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwg
IltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0byBp
bmxpbmUgcmVwbGFjZWQiKTsKLSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJn
aW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgcmV0dXJuIGlubGlu
ZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiB9CiAKLVdp
ZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94
JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpCitXaWR0aEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZh
bHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVk
KCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC03OTcsNDcgKzgwNiw0NyBAQCBXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihjb25zdAogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
R2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMp
OwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0g
PDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0
byBpbmxpbmUgcmVwbGFjZWQiKTsKLSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRXaWR0aEFuZE1h
cmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IHVzZWRW
YWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFsdWVPcigwKSwKKyAgICByZXR1cm4gaW5saW5l
UmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsg
dXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9yKDApLAogICAgICAgICB1c2Vk
VmFsdWVzLndpZHRoLCBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVl
T3IoMCkgfSB9KTsKIH0KIAotVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Om91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWYWx1
ZXMpCitWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZG
bG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsVmFs
dWVzIHVzZWRWYWx1ZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSk7CiAKICAgICBpZiAoIWxheW91dEJveC5yZXBsYWNlZCgpKQotICAgICAg
ICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KGxheW91dFN0YXRl
LCBsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAgIHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkobGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAg
ICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkobGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKKyAgICByZXR1cm4gb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiB9CiAKLUhvcml6b250YWxHZW9tZXRyeSBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyB1c2VkVmFsdWVzKQorSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQogewogICAgIEFTU0VSVChsYXlv
dXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwogCiAgICAgaWYgKCFsYXlvdXRCb3gucmVw
bGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIG91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdl
b21ldHJ5KGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAgIHJldHVybiBv
dXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94
LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIG91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpv
bnRhbEdlb21ldHJ5KGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgcmV0dXJuIG91dE9mRmxv
d1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiB9CiAK
LUhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nSGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBs
YXlvdXRCb3gsIFVzZWRWZXJ0aWNhbFZhbHVlcyB1c2VkVmVydGljYWxWYWx1ZXMsIFVzZWRIb3Jp
em9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKQorSGVpZ2h0QW5kTWFyZ2luIEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbFZhbHVlcyB1c2VkVmVydGljYWxWYWx1ZXMsIFVzZWRI
b3Jpem9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdAogewogICAgIEFTU0VS
VChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7CiAKICAgICBpZiAoIWxheW91dEJv
eC5yZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRTdGF0
ZSwgbGF5b3V0Qm94LCB1c2VkVmVydGljYWxWYWx1ZXMsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsK
LSAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwg
bGF5b3V0Qm94LCB1c2VkVmVydGljYWxWYWx1ZXMpOworICAgICAgICByZXR1cm4gY29tcGxpY2F0
ZWRDYXNlcyhsYXlvdXRCb3gsIHVzZWRWZXJ0aWNhbFZhbHVlcywgdXNlZEhvcml6b250YWxWYWx1
ZXMpOworICAgIHJldHVybiBmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJv
eCwgdXNlZFZlcnRpY2FsVmFsdWVzKTsKIH0KIAotV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRW
YWx1ZXMpCitXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0
aW5nV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFs
dWVzIHVzZWRWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRp
b25lZCgpKTsKIAogICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2VkKCkpCi0gICAgICAgIHJldHVy
biBmbG9hdGluZ05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJv
eCwgdXNlZFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRXaWR0aEFuZE1hcmdp
bihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIGZs
b2F0aW5nTm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwor
ICAgIHJldHVybiBmbG9hdGluZ1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
VmFsdWVzKTsKIH0KIAotSGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWYWx1
ZXMpCitIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVS
ZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRpY2Fs
VmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKChsYXlvdXRCb3guaXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwg
bGF5b3V0Qm94LmlzSW5GbG93KCkpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKIApAQCAtODUy
LDEzICs4NjEsMTQgQEAgSGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QKICAgICAvLyAgICB0aGUgaGVp
Z2h0IG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbywgaGFzIGEg
aGVpZ2h0IG5vdCBncmVhdGVyIHRoYW4gMTUwcHgsIGFuZCBoYXMgYSB3aWR0aCBub3QgZ3JlYXRl
ciB0aGFuIHRoZSBkZXZpY2Ugd2lkdGguCiAKICAgICAvLyAjMQorICAgIGF1dG8mIGxheW91dFN0
YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRo
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKTsKICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIFVzZWRI
b3Jpem9udGFsVmFsdWVzIHsgY29udGFpbmluZ0Jsb2NrV2lkdGggfSk7CiAgICAgYXV0byB1c2Vk
VmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7CiAgICAgYXV0byByZXBsYWNlZCA9IGxheW91dEJveC5yZXBsYWNlZCgpOwogCi0g
ICAgYXV0byBoZWlnaHQgPSB1c2VkVmFsdWVzLmhlaWdodCA/IHVzZWRWYWx1ZXMuaGVpZ2h0LnZh
bHVlKCkgOiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIEhlaWdo
dFR5cGU6Ok5vcm1hbCk7CisgICAgYXV0byBoZWlnaHQgPSB1c2VkVmFsdWVzLmhlaWdodCA/IHVz
ZWRWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwg
SGVpZ2h0VHlwZTo6Tm9ybWFsKTsKICAgICBhdXRvIGhlaWdodElzQXV0byA9ICF1c2VkVmFsdWVz
LmhlaWdodCAmJiBpc0hlaWdodEF1dG8obGF5b3V0Qm94KTsKICAgICBhdXRvIHdpZHRoSXNBdXRv
ID0gc3R5bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7CiAKQEAgLTg4Myw3ICs4OTMsNyBAQCBI
ZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNl
ZEhlaWdodEFuZE1hcmdpbihjb25zdAogICAgIHJldHVybiB7ICpoZWlnaHQsIHVzZWRWZXJ0aWNh
bE1hcmdpbiB9OwogfQogCi1XaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZh
bHVlcykKK1dpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5l
UmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250
YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQoKGxheW91dEJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8
fCBsYXlvdXRCb3guaXNJbkZsb3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCkBAIC05
MjcsNyArOTM3LDcgQEAgV2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGNvbnN0IEwKIAogICAgIGF1dG8gd2lkdGgg
PSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHVzZWRWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2Vk
VmFsdWVzLndpZHRoLnZhbHVlKCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpOwogICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gaXNIZWlnaHRBdXRv
KGxheW91dEJveCk7Ci0gICAgYXV0byBoZWlnaHQgPSBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91
dFN0YXRlLCBsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok5vcm1hbCk7CisgICAgYXV0byBoZWlnaHQg
PSBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0VHlwZTo6Tm9ybWFsKTsKIAog
ICAgIGlmICghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNX
aWR0aCgpKSB7CiAgICAgICAgIC8vICMxCkBAIC05NTQsNyArOTY0LDcgQEAgV2lkdGhBbmRNYXJn
aW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEwKICAgICByZXR1cm4geyAqd2lkdGgsIHsgdXNlZE1hcmdpblN0YXJ0KCksIHVz
ZWRNYXJnaW5FbmQoKSB9LCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gfTsKIH0KIAotTGF5b3V0
U2l6ZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlv
bk9mZnNldChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0
Qm94KQorTGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0
aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBB
U1NFUlQobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKTsKIApAQCAtOTY5LDcgKzk3OSw3
IEBAIExheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlv
bmVkUG9zaXRpb25PZmZzZXQoY29uc3QgTGF5CiAKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJv
eC5zdHlsZSgpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5jb250ZW50Qm94V2lkdGgo
KTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAKICAg
ICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZO
b3RBdXRvKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpAQCAt
MTAzMCw3ICsxMDQwLDcgQEAgTGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBMYXkKICAgICByZXR1cm4geyBs
ZWZ0UG9zaXRpb25PZmZzZXQsIHRvcFBvc2l0aW9uT2Zmc2V0IH07CiB9CiAKLUVkZ2VzIEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRCb3JkZXIoY29uc3QgQm94JiBsYXlvdXRC
b3gpCitFZGdlcyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkQm9yZGVyKGNv
bnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIltCb3JkZXJdIC0+IGxheW91dEJveDogIiA8PCAmbGF5b3V0Qm94KTsKQEAgLTEw
NDAsNyArMTA1MCw3IEBAIEVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0
ZWRCb3JkZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpCiAgICAgfTsKIH0KIAotT3B0aW9uYWw8RWRn
ZXM+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJv
eCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQorT3B0aW9uYWw8
RWRnZXM+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKSBjb25zdAog
ewogICAgIGlmICghbGF5b3V0Qm94LmlzUGFkZGluZ0FwcGxpY2FibGUoKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKQEAgLTEwNTQsMjEgKzEwNjQsMjEgQEAgT3B0aW9uYWw8RWRnZXM+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYg
bGF5b3V0Qm8KICAgICB9OwogfQogCi1Db21wdXRlZEhvcml6b250YWxNYXJnaW4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiBs
YXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpCitDb21wdXRlZEhvcml6
b250YWxNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRW
YWx1ZXMpIGNvbnN0CiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tX
aWR0aC52YWx1ZU9yKDApOwogICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5
bGUubWFyZ2luU3RhcnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlSWZO
b3RBdXRvKHN0eWxlLm1hcmdpbkVuZCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfTsKIH0KIAot
Q29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1
dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFs
dWVzIHVzZWRWYWx1ZXMpCitDb21wdXRlZFZlcnRpY2FsTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwg
VXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKIHsKICAgICBhdXRvJiBzdHls
ZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1
c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7CiAgICAgcmV0dXJuIHsg
Y29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5tYXJnaW5CZWZvcmUoKSwgY29udGFpbmluZ0Js
b2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLm1hcmdpbkFmdGVyKCksIGNv
bnRhaW5pbmdCbG9ja1dpZHRoKSB9OwogfQogCi1Gb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbnN0cmFpbkJ5
TWluTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgaW50cmluc2ljV2lkdGgpCitGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbnN0cmFpbkJ5TWluTWF4V2lk
dGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmlu
c2ljV2lkdGgpIGNvbnN0CiB7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
ICAgICBhdXRvIG1pbldpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5sb2dpY2FsTWluV2lkdGgoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAppbmRleCAzZmFhZDIxMWM1Njk0NTRlOTkzZTg3YjNjYmRjNzlhYWVjNTZiZTdlLi45NmNlODVi
OGZhZjUyZDIyZWI5Y2UwNTBkMGRmYWUyMWQ2MDM0YmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTM1LDEwICszNSwxMSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLUxheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5n
QmxvY2tXaXRoRml4ZWRIZWlnaHQoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25z
dCBCb3gmIGxheW91dEJveCkKK0xheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6
aGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQoY29uc3Qg
Qm94JiBsYXlvdXRCb3gpCiB7CiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIGdvIGFuZCB0cmF2
ZXJzIHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluIHRvIGZpbmQgYSBibG9jayBsZXZlbCBib3gg
d2l0aCBmaXhlZCBoZWlnaHQgdmFsdWUsIGV2ZW4gaWYgaXQgbWVhbnMgbGVhdmluZwogICAgIC8v
IHRoZSBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dC4gRklYTUU6IHN1cmVseSB3ZSBuZWVkIHRv
IGRvIHNvbWUgdHJpY2tzIGhlcmUgd2hlbiBibG9jayBkaXJlY3Rpb24gc3VwcG9ydCBpcyBhZGRl
ZC4KKyAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0
byogY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwogICAgIExh
eW91dFVuaXQgYm9keUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOwog
ICAgIHdoaWxlIChjb250YWluaW5nQmxvY2spIHsKQEAgLTUyLDcgKzUzLDcgQEAgTGF5b3V0VW5p
dCBGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXgKICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5nQmxvY2spOwogCiAgICAgICAgICAg
ICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkp
LmNvbnRlbnRCb3hXaWR0aCgpIH07Ci0gICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0g
R2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmNvbnRhaW5pbmdCbG9jaywgdXNlZFZh
bHVlcyk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnkobGF5b3V0
U3RhdGUpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmNvbnRhaW5pbmdCbG9jaywgdXNlZFZhbHVl
cyk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGRpc3BsYXlCb3gucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDAp
OwogICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEJvcmRlciA9IGRpc3BsYXlCb3guYm9yZGVyVG9w
KCkgKyBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgpOwogICAgICAgICAgICAgYm9keUFuZERvY3Vt
ZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyICs9IHZlcnRpY2FsTWFyZ2luLmJlZm9y
ZS52YWx1ZU9yKDApICsgdmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSArIHZlcnRpY2Fs
UGFkZGluZyArIHZlcnRpY2FsQm9yZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggYjVmMGZkYTA2Y2M1OGVkYTJmZmRhMTBiYzhlYzYxZmE3OTkxNGE3My4uYWQ1ZTVkYzE2
MzhiZTQ2MTA1OWY0N2Y1N2JmOGVjOWZjODk4ODQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCkBAIC00OSw3ICs0OSw3IEBAIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OkJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsCiB7CiB9
CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KCkgY29uc3QKK3ZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KCkKIHsKICAgICAvLyA5LjQuMSBCbG9jayBmb3Jt
YXR0aW5nIGNvbnRleHRzCiAgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJv
eGVzIGFyZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5p
bmcgYXQgdGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCkBAIC0xNTQsNyArMTU0LDcgQEAg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dXNlZEF2YWlsYWJs
ZVdpZHRoRm9yRmxvYXRBdm9pZGVyKGMKICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7CiB9CiAK
LXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290
KEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkg
Y29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRl
eHRSb290KEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91
dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRl
eHQoKSk7CiAgICAgLy8gU3RhcnQgbGF5aW5nIG91dCB0aGlzIGZvcm1hdHRpbmcgcm9vdCBpbiB0
aGUgZm9ybWF0dGluZyBjb250ZW54dCBpdCBsaXZlcyBpbi4KQEAgLTE4Niw3ICsxODYsNyBAQCB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChG
bG9hdGluZ0NvbnRleHQmIGZsb2F0aQogICAgICAgICBjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxv
YXRzKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94KTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBCb3gmIGxheW91
dEJveCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3Np
dGlvbmVkQ2hpbGRyZW4oY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgaWYgKCFpczxDb250
YWluZXI+KGxheW91dEJveCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5OSw3ICsxOTksNyBAQCB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVu
KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogCiAgICAgICAgIGF1dG8gY29tcHV0ZUluRmxvd1Bvc2l0
aW9uZWRQb3NpdGlvbiA9IFsmXSB7CiAgICAgICAgICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRo
aXMtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBhdXRvIHBvc2l0aW9uT2Zmc2V0ID0gR2Vv
bWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRTdGF0ZSwgY2hpbGRC
b3gpOworICAgICAgICAgICAgYXV0byBwb3NpdGlvbk9mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93
UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGNoaWxkQm94KTsKIAogICAgICAgICAgICAgYXV0byYg
ZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY2hpbGRCb3gp
OwogICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gZGlzcGxheUJveC50b3BMZWZ0KCk7CkBAIC0y
MTQsMzEgKzIxNCwzMSBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93
UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgIExPR19XSVRIX1NU
UkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJFbmQ6IG1vdmUgaW4tZmxv
dyBwb3NpdGlvbmVkIGNoaWxkcmVuIC0+IHBhcmVudDogIiA8PCAmbGF5b3V0Qm94KTsKIH0KIAot
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlv
bihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBj
b25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxh
eW91dFN0YXRlKCk7Ci0gICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLnNldFRvcChHZW9tZXRyeTo6c3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRTdGF0
ZSwgbGF5b3V0Qm94KSk7CisgICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0
Qm94KSk7CiAgICAgaWYgKGxheW91dEJveC5oYXNGbG9hdENsZWFyKCkpCiAgICAgICAgIGNvbXB1
dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihmbG9hdGluZ0NvbnRleHQs
IGxheW91dEJveCk7CiAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSkKICAgICAgICAgY29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JG
b3JtYXR0aW5nUm9vdChsYXlvdXRCb3gpOwogfQogCi12b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gp
IGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAgbGF5b3V0U3RhdGUoKS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0TGVmdChHZW9tZXRyeTo6c3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uKGxheW91dFN0YXRlKCksIGxheW91dEJveCkpOworICAgIGxheW91
dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0
cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94KSk7CiB9CiAKLXZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGNvbnN0IEZsb2F0aW5n
Q29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3Zv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGNvbnN0IEZs
b2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKIHsK
ICAgICBjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbihmbG9hdGluZ0NvbnRleHQsIGxheW91
dEJveCk7CiAgICAgY29tcHV0ZVN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gpOwog
fQogCi12b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNh
bFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxh
eW91dEJveCkKIHsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7
Ci0gICAgYXV0byBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUgPSBNYXJnaW5Db2xsYXBzZTo6ZXN0aW1h
dGVkTWFyZ2luQmVmb3JlKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgIGF1dG8gZXN0aW1h
dGVkTWFyZ2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5lc3RpbWF0ZWRNYXJnaW5CZWZvcmUo
bGF5b3V0Qm94KTsKICAgICBzZXRFc3RpbWF0ZWRNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCBlc3Rp
bWF0ZWRNYXJnaW5CZWZvcmUpOwogCiAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0
aW9uKGNvbnN0IEJveCYgbGF5b3V0QgogI2VuZGlmCiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JBbmNlc3RvcnMoY29u
c3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yQW5jZXN0b3JzKGNvbnN0IEJveCYgbGF5
b3V0Qm94KQogewogICAgIC8vIFdlIG9ubHkgbmVlZCB0byBlc3RpbWF0ZSBtYXJnaW4gdG9wIGZv
ciBmbG9hdCByZWxhdGVkIGxheW91dCAoZm9ybWF0dGluZyBjb250ZXh0IHJvb3RzIGF2b2lkIGZs
b2F0cykuCiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0QXZvaWRlcigpIHx8IGxheW91dEJv
eC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpOwpAQCAtMjc0LDcgKzI3NCw3
IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVzdGltYXRlZFZlcnRpY2Fs
UG9zaXRpb25Gb3JBbmNlc3RvcnMoY29uc3QKICAgICB9CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5n
Um9vdChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5nUm9vdChj
b25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmVzdGFibGlzaGVz
Rm9ybWF0dGluZ0NvbnRleHQoKSk7CiAgICAgQVNTRVJUKCFsYXlvdXRCb3guaGFzRmxvYXRDbGVh
cigpKTsKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRm9ybWF0dGluZ1Jvb3QoYwogICAgIH0K
IH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGlj
YWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIoY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0Nv
bnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIoY29u
c3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94
KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaGFzRmxvYXRDbGVhcigpKTsKICAgICBpZiAoZmxv
YXRpbmdDb250ZXh0LmZsb2F0aW5nU3RhdGUoKS5pc0VtcHR5KCkpCkBAIC0zMjksMTQgKzMyOSwx
NCBAQCBib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Omhhc1ByZWNvbXB1dGVkTWFyZ2luQmVm
b3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjbwogfQogI2VuZGlmCiAKLXZvaWQgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0aW5nUG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250
ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAordm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihjb25zdCBGbG9h
dGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAg
ICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKICAgICBBU1NFUlQo
aGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUobGF5b3V0Qm94KSk7CiAgICAgbGF5b3V0U3RhdGUo
KS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0Nv
bnRleHQucG9zaXRpb25Gb3JGbG9hdChsYXlvdXRCb3gpKTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0aW5n
Q29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3Zv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyhj
b25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRC
b3gpCiB7CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAg
IC8vIEZvcm1hdHRpbmcgY29udGV4dCByb290cyBhdm9pZCBmbG9hdHMuCkBAIC0zNTIsMTAgKzM1
Miw5IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9p
ZEZsb2F0cyhjb25zdCBGbG9hdGluZ0NvbnRleHQmCiAgICAgICAgIGxheW91dFN0YXRlLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KCphZGp1c3RlZFBvc2l0aW9u
KTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJn
aW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRBdmFpbGFi
bGVXaWR0aCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRo
QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2Vk
QXZhaWxhYmxlV2lkdGgpCiB7CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRT
dGF0ZSgpOwotCiAgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aDsKICAgICBpZiAodXNlZEF2
YWlsYWJsZVdpZHRoKQogICAgICAgICBhdmFpbGFibGVXaWR0aCA9ICp1c2VkQXZhaWxhYmxlV2lk
dGg7CkBAIC0zNjUsMTAgKzM2NCwxMCBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYQogICAgIGF1
dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpIC0+IFdpZHRo
QW5kTWFyZ2luIHsKICAgICAgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1
ZXMgeyBhdmFpbGFibGVXaWR0aCwgdXNlZFdpZHRoLCB7IH0gfTsKICAgICAgICAgaWYgKGxheW91
dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIEdlb21ldHJ5OjppbkZsb3dXaWR0
aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAg
ICAgIHJldHVybiBnZW9tZXRyeSgpLmluRmxvd1dpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgdXNl
ZFZhbHVlcyk7CiAKICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgcmV0dXJuIEdlb21ldHJ5OjpmbG9hdGluZ1dpZHRoQW5kTWFyZ2luKGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOworICAgICAgICAgICAgcmV0dXJuIGdl
b21ldHJ5KCkuZmxvYXRpbmdXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwog
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAt
Mzc2LDEzICszNzUsMTMgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lk
dGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIE9wdGlvbmEKIAogICAgIGF1dG8gd2lk
dGhBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7CiAKLSAgICBpZiAoYXV0byBtYXhXaWR0aCA9IEdl
b21ldHJ5Ojpjb21wdXRlZFZhbHVlSWZOb3RBdXRvKGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxN
YXhXaWR0aCgpLCBhdmFpbGFibGVXaWR0aCkpIHsKKyAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGdl
b21ldHJ5KCkuY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2Fs
TWF4V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgpKSB7CiAgICAgICAgIGF1dG8gbWF4V2lkdGhBbmRN
YXJnaW4gPSBjb21wdXRlKG1heFdpZHRoKTsKICAgICAgICAgaWYgKHdpZHRoQW5kTWFyZ2luLndp
ZHRoID4gbWF4V2lkdGhBbmRNYXJnaW4ud2lkdGgpCiAgICAgICAgICAgICB3aWR0aEFuZE1hcmdp
biA9IG1heFdpZHRoQW5kTWFyZ2luOwogICAgIH0KIAotICAgIGF1dG8gbWluV2lkdGggPSBHZW9t
ZXRyeTo6Y29tcHV0ZWRWYWx1ZUlmTm90QXV0byhsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsTWlu
V2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBtaW5XaWR0aCA9
IGdlb21ldHJ5KCkuY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhsYXlvdXRCb3guc3R5bGUoKS5sb2dp
Y2FsTWluV2lkdGgoKSwgYXZhaWxhYmxlV2lkdGgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byBtaW5X
aWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUobWluV2lkdGgpOwogICAgIGlmICh3aWR0aEFuZE1hcmdp
bi53aWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLndpZHRoKQogICAgICAgICB3aWR0aEFuZE1hcmdp
biA9IG1pbldpZHRoQW5kTWFyZ2luOwpAQCAtMzkzLDI0ICszOTIsMjQgQEAgdm9pZCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRC
b3gsIE9wdGlvbmEKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxDb21wdXRlZE1hcmdpbih3
aWR0aEFuZE1hcmdpbi5jb21wdXRlZE1hcmdpbik7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCkgY29u
c3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihj
b25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxh
eW91dFN0YXRlKCk7CiAKICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oVXNlZFZlcnRpY2FsVmFsdWVz
IHVzZWRWYWx1ZXMpIC0+IEhlaWdodEFuZE1hcmdpbiB7CiAKICAgICAgICAgaWYgKGxheW91dEJv
eC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIEdlb21ldHJ5OjppbkZsb3dIZWlnaHRB
bmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgICAgICAg
ICByZXR1cm4gZ2VvbWV0cnkoKS5pbkZsb3dIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
VmFsdWVzKTsKIAogICAgICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2VvbWV0cnk6OmZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gsIHVzZWRWYWx1ZXMsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsg
bGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdC
bG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRy
eSgpLmZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcywgVXNlZEhv
cml6b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH0pOwogCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKICAg
ICBhdXRvIGhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUoeyB9KTsKLSAgICBpZiAoYXV0byBtYXhI
ZWlnaHQgPSBHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQobGF5b3V0U3RhdGUsIGxheW91dEJv
eCkpIHsKKyAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVp
Z2h0KGxheW91dEJveCkpIHsKICAgICAgICAgaWYgKGhlaWdodEFuZE1hcmdpbi5oZWlnaHQgPiAq
bWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1
dGUoeyAqbWF4SGVpZ2h0IH0pOwogICAgICAgICAgICAgLy8gVXNlZCBoZWlnaHQgc2hvdWxkIHJl
bWFpbiB0aGUgc2FtZS4KQEAgLTQxOSw3ICs0MTgsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBHZW9tZXRyeTo6
Y29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0U3RhdGUsIGxheW91dEJveCkpIHsKKyAgICBpZiAoYXV0
byBtaW5IZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWluSGVpZ2h0KGxheW91dEJveCkpIHsK
ICAgICAgICAgaWYgKGhlaWdodEFuZE1hcmdpbi5oZWlnaHQgPCAqbWluSGVpZ2h0KSB7CiAgICAg
ICAgICAgICBhdXRvIG1pbkhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUoeyAqbWluSGVpZ2h0IH0p
OwogICAgICAgICAgICAgLy8gVXNlZCBoZWlnaHQgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KQEAg
LTQzMSw3ICs0MzAsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWln
aHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiAgICAgLy8gMS4gQ29tcHV0
ZSBjb2xsYXBzZWQgbWFyZ2lucy4KICAgICAvLyAyLiBBZGp1c3QgdmVydGljYWwgcG9zaXRpb24g
dXNpbmcgdGhlIGNvbGxhcHNlZCB2YWx1ZXMKICAgICAvLyAzLiBBZGp1c3QgcHJldmlvdXMgaW4t
ZmxvdyBzaWJsaW5nIG1hcmdpbiBhZnRlciB1c2luZyB0aGlzIG1hcmdpbi4KLSAgICBhdXRvIGNv
bGxhcHNlZE1hcmdpbiA9IE1hcmdpbkNvbGxhcHNlOjpjb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBoZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2lu
KTsKKyAgICBhdXRvIGNvbGxhcHNlZE1hcmdpbiA9IG1hcmdpbkNvbGxhcHNlKCkuY29sbGFwc2Vk
VmVydGljYWxWYWx1ZXMobGF5b3V0Qm94LCBoZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFy
Z2luKTsKICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luIHsgaGVp
Z2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbiwgY29sbGFwc2VkTWFyZ2luIH07CiAgICAg
YXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5
b3V0Qm94KTsKIApAQCAtNDQ5LDE0ICs0NDgsMTMgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAog
ICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChoZWlnaHRBbmRNYXJnaW4uaGVpZ2h0
KTsKICAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHZlcnRpY2FsTWFyZ2luKTsKIAot
ICAgIE1hcmdpbkNvbGxhcHNlOjp1cGRhdGVQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luVmFsdWVzKGxh
eW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgIG1hcmdpbkNvbGxhcHNlKCkudXBkYXRlUG9zaXRp
dmVOZWdhdGl2ZU1hcmdpblZhbHVlcyhsYXlvdXRCb3gpOwogICAgIC8vIEFkanVzdCB0aGUgcHJl
dmlvdXMgc2libGluZydzIG1hcmdpbiBib3R0b20gbm93IHRoYXQgdGhpcyBib3gncyB2ZXJ0aWNh
bCBtYXJnaW4gaXMgY29tcHV0ZWQuCi0gICAgTWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFm
dGVyRm9yUHJldmlvdXNTaWJsaW5nKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOworICAgIG1hcmdp
bkNvbGxhcHNlKCkudXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcobGF5b3V0Qm94
KTsKIH0KIAotRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkg
Y29uc3QKK0Zvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpCiB7
Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIGF1dG8m
IGZvcm1hdHRpbmdSb290ID0gcm9vdCgpOwogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRo
aXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwogICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRlLmludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKSk7CkBAIC00ODUsNyArNDgzLDcgQEAgRm9ybWF0dGluZ0Nv
bnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZWRJbnQKICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9ICpxdWV1ZS50YWtlTGFz
dCgpOwogICAgICAgICAgICAgYXV0byBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBmb3JtYXR0aW5n
U3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRCb3gpOyAKICAgICAg
ICAgICAgIGlmICghZGVzZGVuZGFudENvbnN0cmFpbnRzKSB7Ci0gICAgICAgICAgICAgICAgZGVz
ZGVuZGFudENvbnN0cmFpbnRzID0gR2VvbWV0cnk6OmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
bGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgZGVzZGVuZGFudENvbnN0
cmFpbnRzID0gZ2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGxheW91dEJveCk7
CiAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHNGb3JCb3gobGF5b3V0Qm94LCAqZGVzZGVuZGFudENvbnN0cmFpbnRzKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNvbnN0cmFpbnRzLm1pbmltdW0gPSBzdGQ6Om1heChjb25zdHJh
aW50cy5taW5pbXVtLCBkZXNkZW5kYW50Q29uc3RyYWludHMtPm1pbmltdW0pOwpAQCAtNTE5LDEy
ICs1MTcsMTIgQEAgTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBv
c2l0aW9uV2l0aE1hcmdpbihjb25zdCBCb3gmIGxheW91dEIKICAgICAgICAgaWYgKCFjdXJyZW50
TGF5b3V0Qm94LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSAqY3VycmVudExheW91dEJveC0+
cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7Ci0gICAgICAgIGlmICghTWFyZ2luQ29sbGFwc2U6Om1h
cmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcihsYXlvdXRT
dGF0ZSwgKmN1cnJlbnRMYXlvdXRCb3gpKSB7CisgICAgICAgIGlmICghbWFyZ2luQ29sbGFwc2Uo
KS5tYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0ZXIoKmN1
cnJlbnRMYXlvdXRCb3gpKSB7CiAgICAgICAgICAgICBhdXRvJiBwcmV2aW91c0Rpc3BsYXlCb3gg
PSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHByZXZpb3VzSW5GbG93U2libGlu
Zyk7CiAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNEaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2lu
KCkuYm90dG9tKCkgKyB2ZXJ0aWNhbE1hcmdpbi5iZWZvcmUoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghTWFyZ2luQ29sbGFwc2U6Om1hcmdpbnNDb2xsYXBzZVRocm91Z2gobGF5b3V0U3Rh
dGUsIHByZXZpb3VzSW5GbG93U2libGluZykpIHsKKyAgICAgICAgaWYgKCFtYXJnaW5Db2xsYXBz
ZSgpLm1hcmdpbnNDb2xsYXBzZVRocm91Z2gocHJldmlvdXNJbkZsb3dTaWJsaW5nKSkgewogICAg
ICAgICAgICAgYXV0byYgcHJldmlvdXNEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveChwcmV2aW91c0luRmxvd1NpYmxpbmcpOwogICAgICAgICAgICAgcmV0dXJu
IHByZXZpb3VzRGlzcGxheUJveC5ib3R0b20oKSArIHZlcnRpY2FsTWFyZ2luLmJlZm9yZSgpOwog
ICAgICAgICB9CkBAIC01NDAsMTUgKzUzOCwxNSBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qgog
ICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkZXBl
bmRzIG9uIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgb3RoZXIgZWxlbWVudHMgd2hvc2UgbWFy
Z2lucyBhcmUgYmVpbmcgY29sbGFwc2VkLgogICAgICAgICBpZiAodmVydGljYWxNYXJnaW4uY29s
bGFwc2VkVmFsdWVzKCkuaXNDb2xsYXBzZWRUaHJvdWdoKSB7CiAgICAgICAgICAgICAvLyBJZiB0
aGUgZWxlbWVudCdzIG1hcmdpbnMgYXJlIGNvbGxhcHNlZCB3aXRoIGl0cyBwYXJlbnQncyB0b3Ag
bWFyZ2luLCB0aGUgdG9wIGJvcmRlciBlZGdlIG9mIHRoZSBib3ggaXMgZGVmaW5lZCB0byBiZSB0
aGUgc2FtZSBhcyB0aGUgcGFyZW50J3MuCi0gICAgICAgICAgICBpZiAoTWFyZ2luQ29sbGFwc2U6
Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUobGF5b3V0U3RhdGUs
IGxheW91dEJveCkpCisgICAgICAgICAgICBpZiAobWFyZ2luQ29sbGFwc2UoKS5tYXJnaW5CZWZv
cmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGxheW91dEJveCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hUb3A7CiAgICAgICAgICAgICAv
LyBPdGhlcndpc2UsIGVpdGhlciB0aGUgZWxlbWVudCdzIHBhcmVudCBpcyBub3QgdGFraW5nIHBh
cnQgaW4gdGhlIG1hcmdpbiBjb2xsYXBzaW5nLCBvciBvbmx5IHRoZSBwYXJlbnQncyBib3R0b20g
bWFyZ2luIGlzIGludm9sdmVkLgogICAgICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBl
bGVtZW50J3MgdG9wIGJvcmRlciBlZGdlIGlzIHRoZSBzYW1lIGFzIGl0IHdvdWxkIGhhdmUgYmVl
biBpZiB0aGUgZWxlbWVudCBoYWQgYSBub24temVybyBib3R0b20gYm9yZGVyLgotICAgICAgICAg
ICAgYXV0byBiZWZvcmVNYXJnaW5XaXRoQm90dG9tQm9yZGVyID0gTWFyZ2luQ29sbGFwc2U6Om1h
cmdpbkJlZm9yZUlnbm9yaW5nQ29sbGFwc2luZ1Rocm91Z2gobGF5b3V0U3RhdGUsIGxheW91dEJv
eCwgdmVydGljYWxNYXJnaW4ubm9uQ29sbGFwc2VkVmFsdWVzKCkpOworICAgICAgICAgICAgYXV0
byBiZWZvcmVNYXJnaW5XaXRoQm90dG9tQm9yZGVyID0gbWFyZ2luQ29sbGFwc2UoKS5tYXJnaW5C
ZWZvcmVJZ25vcmluZ0NvbGxhcHNpbmdUaHJvdWdoKGxheW91dEJveCwgdmVydGljYWxNYXJnaW4u
bm9uQ29sbGFwc2VkVmFsdWVzKCkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRCb3hUb3AgKyBiZWZvcmVNYXJnaW5XaXRoQm90dG9tQm9yZGVyOwogICAgICAgICB9
CiAgICAgICAgIC8vIE5vbi1jb2xsYXBzZWQgdGhyb3VnaCBib3ggdmVydGljYWwgcG9zaXRpb24g
ZGVwZW5kaW5nIHdoZXRoZXIgdGhlIG1hcmdpbiBjb2xsYXBzZXMuCi0gICAgICAgIGlmIChNYXJn
aW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZShs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSkKKyAgICAgICAgaWYgKG1hcmdpbkNvbGxhcHNlKCkubWFy
Z2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKQogICAg
ICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hUb3A7CiAKICAgICAgICAg
cmV0dXJuIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hUb3AgKyB2ZXJ0aWNhbE1hcmdpbi5iZWZv
cmUoKTsKQEAgLTU1NiwxMyArNTU0LDEzIEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCCiAgICAg
Ly8gQXQgdGhpcyBwb2ludCB0aGlzIGJveCBpbmRpcmVjdGx5ICh2aWEgY29sbGFwc2VkIHRocm91
Z2ggcHJldmlvdXMgaW4tZmxvdyBzaWJsaW5ncykgYWRqb2lucyB0aGUgcGFyZW50LiBMZXQncyBj
aGVjayBpZiBpdCBtYXJnaW4gY29sbGFwc2VzIHdpdGggdGhlIHBhcmVudC4KICAgICBBU1NFUlQo
Y29udGFpbmluZ0Jsb2NrLmZpcnN0SW5GbG93Q2hpbGQoKSk7CiAgICAgQVNTRVJUKGNvbnRhaW5p
bmdCbG9jay5maXJzdEluRmxvd0NoaWxkKCkgIT0gJmxheW91dEJveCk7Ci0gICAgaWYgKE1hcmdp
bkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGxh
eW91dFN0YXRlLCAqY29udGFpbmluZ0Jsb2NrLmZpcnN0SW5GbG93Q2hpbGQoKSkpCisgICAgaWYg
KG1hcmdpbkNvbGxhcHNlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJl
Zm9yZSgqY29udGFpbmluZ0Jsb2NrLmZpcnN0SW5GbG93Q2hpbGQoKSkpCiAgICAgICAgIHJldHVy
biBjb250YWluaW5nQmxvY2tDb250ZW50Qm94VG9wOwogCiAgICAgcmV0dXJuIGNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRCb3hUb3AgKyB2ZXJ0aWNhbE1hcmdpbi5iZWZvcmUoKTsKIH0KIAotdm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpzZXRFc3RpbWF0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEVzdGltYXRlZE1hcmdpbkJlZm9yZSYgZXN0aW1hdGVkTWFyZ2lu
QmVmb3JlKSBjb25zdAordm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpzZXRFc3RpbWF0ZWRN
YXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEVzdGltYXRlZE1hcmdpbkJl
Zm9yZSYgZXN0aW1hdGVkTWFyZ2luQmVmb3JlKQogewogICAgIC8vIENhbid0IGNyb3NzIGZvcm1h
dHRpbmcgY29udGV4dCBib3VuZGFyeS4KICAgICBBU1NFUlQoJmxheW91dFN0YXRlKCkuZm9ybWF0
dGluZ1N0YXRlRm9yQm94KGxheW91dEJveCkgPT0gJmZvcm1hdHRpbmdTdGF0ZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0
aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMmI2NmI4Yzg5NGI0NzZkMzc2NzQwMThlZmIxYWI2
NjcwMGYxYTQ2Yi4uNzUyNzMyZTk3YTYzNzA0YTQwM2RiYjUzMTYzMzRiOGFlMmJjMzI5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGlu
Zy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTQ5LDkwICs0OSwxMDQgQEAgY2xhc3MgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dCA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dCB7CiBwdWJsaWM6
CiAgICAgQmxvY2tGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0
Um9vdCwgQmxvY2tGb3JtYXR0aW5nU3RhdGUmKTsKIAotICAgIHZvaWQgbGF5b3V0KCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2
b2lkIGxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChGbG9hdGluZ0NvbnRleHQmLCBjb25zdCBC
b3gmKSBjb25zdDsKLSAgICB2b2lkIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0
IEJveCYpIGNvbnN0OworICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KEZsb2F0
aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIHZvaWQgcGxhY2VJbkZsb3dQb3NpdGlvbmVk
Q2hpbGRyZW4oY29uc3QgQm94Jik7CiAKLSAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihj
b25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkQXZhaWxhYmxlV2lkdGggPSB7IH0p
IGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmKSBjb25z
dDsKKyAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBPcHRpb25hbDxM
YXlvdXRVbml0PiB1c2VkQXZhaWxhYmxlV2lkdGggPSB7IH0pOworICAgIHZvaWQgY29tcHV0ZUhl
aWdodEFuZE1hcmdpbihjb25zdCBCb3gmKTsKIAotICAgIHZvaWQgY29tcHV0ZVN0YXRpY0hvcml6
b250YWxQb3NpdGlvbihjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVTdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0
OwotICAgIHZvaWQgY29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYs
IGNvbnN0IEJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUZsb2F0aW5nUG9zaXRpb24oY29u
c3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgQm94JikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRl
UG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYp
IGNvbnN0OworICAgIHZvaWQgY29tcHV0ZVN0YXRpY0hvcml6b250YWxQb3NpdGlvbihjb25zdCBC
b3gmKTsKKyAgICB2b2lkIGNvbXB1dGVTdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0
aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIHZvaWQgY29tcHV0ZVN0YXRpY1Bvc2l0aW9u
KGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIHZvaWQgY29tcHV0ZUZs
b2F0aW5nUG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgY29uc3QgQm94Jik7CisgICAg
dm9pZCBjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYs
IGNvbnN0IEJveCYpOwogCi0gICAgdm9pZCBjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlv
bihjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBv
c2l0aW9uRm9yQW5jZXN0b3JzKGNvbnN0IEJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUVz
dGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0aW5nUm9vdChjb25zdCBCb3gmKSBjb25z
dDsKLSAgICB2b2lkIGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVh
cihjb25zdCBGbG9hdGluZ0NvbnRleHQmLCBjb25zdCBCb3gmKSBjb25zdDsKKyAgICB2b2lkIGNv
bXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYpOworICAgIHZvaWQgY29t
cHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JBbmNlc3RvcnMoY29uc3QgQm94Jik7Cisg
ICAgdm9pZCBjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckZvcm1hdHRpbmdSb290
KGNvbnN0IEJveCYpOworICAgIHZvaWQgY29tcHV0ZUVzdGltYXRlZFZlcnRpY2FsUG9zaXRpb25G
b3JGbG9hdENsZWFyKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpOwogCi0gICAg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbXB1
dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOwogICAgIExheW91dFVuaXQg
dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgVXNlZFZlcnRpY2Fs
TWFyZ2luJikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRpb25p
bmcgYW5kIHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2NrIGZvcm1hdHRp
bmcgY29udGV4dC4KICAgICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnkgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdp
biBpbkZsb3dIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBV
c2VkVmVydGljYWxWYWx1ZXMpOwotICAgICAgICBzdGF0aWMgV2lkdGhBbmRNYXJnaW4gaW5GbG93
V2lkdGhBbmRNYXJnaW4oTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyk7CisgICAgICAgIEdlb21ldHJ5KExheW91dFN0YXRlJik7CiAKLSAgICAgICAgc3RhdGlj
IFBvaW50IHN0YXRpY1Bvc2l0aW9uKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0g
ICAgICAgIHN0YXRpYyBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgTGF5
b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKLSAgICAgICAgc3RhdGljIExheW91dFVuaXQgc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAg
ICAgIEhlaWdodEFuZE1hcmdpbiBpbkZsb3dIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgVXNl
ZFZlcnRpY2FsVmFsdWVzKTsKKyAgICAgICAgV2lkdGhBbmRNYXJnaW4gaW5GbG93V2lkdGhBbmRN
YXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpOwogCi0gICAgICAgIHN0YXRp
YyBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoTGF5
b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgUG9pbnQgc3RhdGljUG9zaXRpb24oY29u
c3QgQm94JikgY29uc3Q7CisgICAgICAgIExheW91dFVuaXQgc3RhdGljVmVydGljYWxQb3NpdGlv
bihjb25zdCBCb3gmKSBjb25zdDsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNIb3Jpem9udGFs
UG9zaXRpb24oY29uc3QgQm94JikgY29uc3Q7CisKKyAgICAgICAgSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0IEJveCYpOwogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZEhl
aWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIFVzZWRWZXJ0aWNh
bFZhbHVlcyk7Ci0gICAgICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNl
ZFdpZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94JiwgVXNlZEhvcml6
b250YWxWYWx1ZXMpOwotICAgICAgICBzdGF0aWMgV2lkdGhBbmRNYXJnaW4gaW5GbG93UmVwbGFj
ZWRXaWR0aEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYsIFVzZWRIb3Jp
em9udGFsVmFsdWVzKTsKLSAgICAgICAgc3RhdGljIFBvaW50IHN0YXRpY1Bvc2l0aW9uRm9yT3V0
T2ZGbG93UG9zaXRpb25lZChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOworICAgICAg
ICBIZWlnaHRBbmRNYXJnaW4gaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiwgVXNlZFZlcnRpY2FsVmFsdWVzKTsKKyAgICAgICAgV2lkdGhBbmRNYXJnaW4gaW5GbG93
Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVl
cykgY29uc3Q7CisgICAgICAgIFdpZHRoQW5kTWFyZ2luIGluRmxvd1JlcGxhY2VkV2lkdGhBbmRN
YXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpIGNvbnN0OworICAgICAgICBQ
b2ludCBzdGF0aWNQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94JikgY29u
c3Q7CiAgICAgfTsKKyAgICBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSBnZW9tZXRy
eSgpIGNvbnN0IHsgcmV0dXJuIEdlb21ldHJ5KGxheW91dFN0YXRlKCkpOyB9CiAKICAgICAvLyBU
aGlzIGNsYXNzIGltcGxlbWVudHMgbWFyZ2luIGNvbGxhcHNpbmcgZm9yIGJsb2NrIGZvcm1hdHRp
bmcgY29udGV4dC4KICAgICBjbGFzcyBNYXJnaW5Db2xsYXBzZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgVXNlZFZlcnRpY2FsTWFyZ2luOjpDb2xsYXBzZWRWYWx1ZXMgY29sbGFwc2Vk
VmVydGljYWxWYWx1ZXMoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBjb25zdCBVc2Vk
VmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyYpOworICAgICAgICBNYXJnaW5Db2xs
YXBzZShMYXlvdXRTdGF0ZSYpOworCisgICAgICAgIFVzZWRWZXJ0aWNhbE1hcmdpbjo6Q29sbGFw
c2VkVmFsdWVzIGNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzJik7CiAKLSAgICAgICAgc3RhdGljIEVz
dGltYXRlZE1hcmdpbkJlZm9yZSBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUoY29uc3QgTGF5b3V0U3Rh
dGUmLCBjb25zdCBCb3gmKTsKLSAgICAgICAgc3RhdGljIExheW91dFVuaXQgbWFyZ2luQmVmb3Jl
SWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYs
IGNvbnN0IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzJik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIHVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKGNvbnN0IExh
eW91dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0
aXZlTmVnYXRpdmVNYXJnaW5WYWx1ZXMoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsK
KyAgICAgICAgRXN0aW1hdGVkTWFyZ2luQmVmb3JlIGVzdGltYXRlZE1hcmdpbkJlZm9yZShjb25z
dCBCb3gmKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmVJZ25vcmluZ0NvbGxhcHNp
bmdUaHJvdWdoKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFw
c2VkVmFsdWVzJik7CisgICAgICAgIHZvaWQgdXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1Np
YmxpbmcoY29uc3QgQm94JikgY29uc3Q7CisgICAgICAgIHZvaWQgdXBkYXRlUG9zaXRpdmVOZWdh
dGl2ZU1hcmdpblZhbHVlcyhjb25zdCBCb3gmKTsKIAotICAgICAgICBzdGF0aWMgYm9vbCBtYXJn
aW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IExheW91dFN0YXRl
JiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNl
c1dpdGhGaXJzdEluRmxvd0NoaWxkTWFyZ2luQmVmb3JlKGNvbnN0IExheW91dFN0YXRlJiwgY29u
c3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQ
YXJlbnRNYXJnaW5BZnRlcihjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOwotICAgICAg
ICBzdGF0aWMgYm9vbCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFy
Z2luQWZ0ZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgYm9vbCBt
YXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYpIGNv
bnN0OworICAgICAgICBib29sIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhGaXJzdEluRmxvd0No
aWxkTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYpIGNvbnN0OworICAgICAgICBib29sIG1hcmdpbkJl
Zm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gmKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2lu
QWZ0ZXIoY29uc3QgQm94JikgY29uc3Q7CiAKLSAgICAgICAgc3RhdGljIGJvb2wgbWFyZ2luQWZ0
ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25z
dCBCb3gmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFz
dEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2lu
QmVmb3JlKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyBi
b29sIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlKGNvbnN0
IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIG1hcmdpbkFm
dGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGNvbnN0IExh
eW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAgIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBz
ZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgQm94JikgY29uc3Q7CisgICAgICAgIGJvb2wg
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIoY29uc3Qg
Qm94JikgY29uc3Q7CisgICAgICAgIGJvb2wgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50
TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYpIGNvbnN0OworICAgICAgICBib29sIG1hcmdpbkFmdGVy
Q29sbGFwc2VzV2l0aE5leHRTaWJsaW5nTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYpIGNvbnN0Owor
ICAgICAgICBib29sIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnaW5CZWZvcmVX
aXRoQ2xlYXJhbmNlKGNvbnN0IEJveCYpIGNvbnN0OwogCi0gICAgICAgIHN0YXRpYyBib29sIG1h
cmdpbnNDb2xsYXBzZVRocm91Z2goY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAg
ICAgICAgYm9vbCBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGNvbnN0IEJveCYpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBjbGFzcyBNYXJnaW5UeXBlIHsgQmVmb3JlLCBBZnRl
ciB9OwotICAgICAgICBzdGF0aWMgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luOjpW
YWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJv
eCYsIE1hcmdpblR5cGUpOwotICAgICAgICBzdGF0aWMgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRp
Y2FsTWFyZ2luOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShjb25zdCBMYXlv
dXRTdGF0ZSYsIGNvbnN0IEJveCYsIGNvbnN0IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFw
c2VkVmFsdWVzJik7Ci0gICAgICAgIHN0YXRpYyBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxN
YXJnaW46OlZhbHVlcyBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIoY29uc3QgTGF5b3V0U3Rh
dGUmLCBjb25zdCBCb3gmLCBjb25zdCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZh
bHVlcyYpOworICAgICAgICBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVl
cyBwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0IEJveCYsIE1hcmdpblR5cGUpOworICAgICAg
ICBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBwb3NpdGl2ZU5lZ2F0
aXZlTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYsIGNvbnN0IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9u
Q29sbGFwc2VkVmFsdWVzJik7CisgICAgICAgIFBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1h
cmdpbjo6VmFsdWVzIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcihjb25zdCBCb3gmLCBjb25z
dCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyYpOworCisgICAgICAgIExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIHsgcmV0dXJuIG1fbGF5b3V0U3RhdGU7IH0KKyAgICAg
ICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXlv
dXRTdGF0ZTsgfQorCisgICAgICAgIExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOwogICAgIH07
CisgICAgTWFyZ2luQ29sbGFwc2UgbWFyZ2luQ29sbGFwc2UoKSBjb25zdCB7IHJldHVybiBNYXJn
aW5Db2xsYXBzZShsYXlvdXRTdGF0ZSgpKTsgfQogCi0gICAgY2xhc3MgUXVpcmtzIHsKKyAgICBj
bGFzcyBRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgYm9vbCBuZWVkc1N0cmV0Y2hpbmcoY29uc3QgTGF5b3V0U3Rh
dGUmLCBjb25zdCBCb3gmKTsKLSAgICAgICAgc3RhdGljIEhlaWdodEFuZE1hcmdpbiBzdHJldGNo
ZWRJbkZsb3dIZWlnaHQoY29uc3QgTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmLCBIZWlnaHRBbmRN
YXJnaW4pOworICAgICAgICBRdWlya3MoTGF5b3V0U3RhdGUmKTsKKworICAgICAgICBib29sIG5l
ZWRzU3RyZXRjaGluZyhjb25zdCBCb3gmKSBjb25zdDsKKyAgICAgICAgSGVpZ2h0QW5kTWFyZ2lu
IHN0cmV0Y2hlZEluRmxvd0hlaWdodChjb25zdCBCb3gmLCBIZWlnaHRBbmRNYXJnaW4pOwogCi0g
ICAgICAgIHN0YXRpYyBib29sIHNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFyZ2luKGNvbnN0
IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIHNob3VsZEln
bm9yZU1hcmdpbkJlZm9yZShjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOwotICAgICAg
ICBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVNYXJnaW5BZnRlcihjb25zdCBMYXlvdXRTdGF0ZSYs
IGNvbnN0IEJveCYpOworICAgICAgICBib29sIHNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFy
Z2luKGNvbnN0IEJveCYpIGNvbnN0OworICAgICAgICBib29sIHNob3VsZElnbm9yZU1hcmdpbkJl
Zm9yZShjb25zdCBCb3gmKSBjb25zdDsKKyAgICAgICAgYm9vbCBzaG91bGRJZ25vcmVNYXJnaW5B
ZnRlcihjb25zdCBCb3gmKSBjb25zdDsKICAgICB9OworICAgIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7IHJldHVybiBRdWlya3MobGF5b3V0U3RhdGUoKSk7
IH0KIAotICAgIHZvaWQgc2V0RXN0aW1hdGVkTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYsIGNvbnN0
IEVzdGltYXRlZE1hcmdpbkJlZm9yZSYpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlRXN0aW1hdGVk
TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IG1fZXN0aW1hdGVkTWFy
Z2luQmVmb3JlTGlzdC5yZW1vdmUoJmxheW91dEJveCk7IH0KKyAgICB2b2lkIHNldEVzdGltYXRl
ZE1hcmdpbkJlZm9yZShjb25zdCBCb3gmLCBjb25zdCBFc3RpbWF0ZWRNYXJnaW5CZWZvcmUmKTsK
KyAgICB2b2lkIHJlbW92ZUVzdGltYXRlZE1hcmdpbkJlZm9yZShjb25zdCBCb3gmIGxheW91dEJv
eCkgeyBtX2VzdGltYXRlZE1hcmdpbkJlZm9yZUxpc3QucmVtb3ZlKCZsYXlvdXRCb3gpOyB9CiAg
ICAgYm9vbCBoYXNFc3RpbWF0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94JikgY29uc3Q7CiAgICAg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEF2YWlsYWJsZVdpZHRoRm9yRmxvYXRBdm9pZGVyKGNv
bnN0IEZsb2F0aW5nQ29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0OwogI2lmbmRlZiBOREVCVUcK
QEAgLTE0Myw5ICsxNTcsMjQgQEAgcHJpdmF0ZToKICAgICBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYg
Zm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5n
U3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KIAogcHJpdmF0
ZToKLSAgICBtdXRhYmxlIEhhc2hNYXA8Y29uc3QgQm94KiwgRXN0aW1hdGVkTWFyZ2luQmVmb3Jl
PiBtX2VzdGltYXRlZE1hcmdpbkJlZm9yZUxpc3Q7CisgICAgSGFzaE1hcDxjb25zdCBCb3gqLCBF
c3RpbWF0ZWRNYXJnaW5CZWZvcmU+IG1fZXN0aW1hdGVkTWFyZ2luQmVmb3JlTGlzdDsKIH07CiAK
K2lubGluZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkoTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlKQorICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGxh
eW91dFN0YXRlKQoreworfQorCitpbmxpbmUgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtz
OjpRdWlya3MoTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQorICAgIDogRm9ybWF0dGluZ0NvbnRl
eHQ6OlF1aXJrcyhsYXlvdXRTdGF0ZSkKK3sKK30KKworaW5saW5lIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpNYXJnaW5Db2xsYXBzZShMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUpCisgICAgOiBtX2xheW91dFN0YXRlKGxheW91dFN0YXRlKQoreworfQorCiB9CiB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRl
eCBjOGVhOGI0NDQwOGQ5NDg2MTJkY2Y3Njk2N2I0NGY2MDYxOWMyZGNjLi4wZDYyY2I2YTkyNzY1
YzY0ZWU3MzdiZWE4OGZmNDhmYjcyY2ZmYmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkVmVy
dGljYWxWYWx1ZXMgdXNlZFZhbHVlcykKK0hlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFVzZWRWZXJ0aWNhbFZhbHVlcyB1c2VkVmFsdWVzKQogewogICAgIEFT
U0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogICAg
IEFTU0VSVChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSk7CkBAIC01NywxMiArNTcsMTMg
QEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcKICAgICAgICAgLy8gT25seSBjaGlsZHJlbiBpbiB0
aGUgbm9ybWFsIGZsb3cgYXJlIHRha2VuIGludG8gYWNjb3VudCAoaS5lLiwgZmxvYXRpbmcgYm94
ZXMgYW5kIGFic29sdXRlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgaWdub3JlZCwKICAgICAgICAg
Ly8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lkZXJlZCB3aXRob3V0
IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBiZSBhbiBhbm9ueW1v
dXMgYmxvY2sgYm94LgogCisgICAgICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0
U3RhdGUoKTsKICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tX
aWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250
YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCk7CiAgICAgICAgIGF1dG8gY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJv
eCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBjb250YWluaW5nQmxvY2tXaWR0aCB9KTsKICAgICAg
ICAgYXV0byBub25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxh
cHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKICAgICAgICAgYXV0byBi
b3JkZXJBbmRQYWRkaW5nVG9wID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSArIGRpc3BsYXlCb3gu
cGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgIGF1dG8gaGVpZ2h0ID0gdXNlZFZhbHVl
cy5oZWlnaHQgPyB1c2VkVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHRWYWx1
ZShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOworICAgICAgICBh
dXRvIGhlaWdodCA9IHVzZWRWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUo
KSA6IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwog
CiAgICAgICAgIGlmIChoZWlnaHQpIHsKICAgICAgICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGlu
Z0JvdHRvbSA9IGRpc3BsYXlCb3guYm9yZGVyQm90dG9tKCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdC
b3R0b20oKS52YWx1ZU9yKDApOwpAQCAtODQsNyArODUsOCBAQCBIZWlnaHRBbmRNYXJnaW4gQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5k
TWFyZwogICAgICAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2li
bHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNo
aWxkJ3MgYm90dG9tIG1hcmdpbi4uLgogICAgICAgICBhdXRvKiBsYXN0SW5GbG93Q2hpbGQgPSBk
b3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkubGFzdEluRmxvd0NoaWxkKCk7CiAgICAgICAg
IEFTU0VSVChsYXN0SW5GbG93Q2hpbGQpOwotICAgICAgICBpZiAoIU1hcmdpbkNvbGxhcHNlOjpt
YXJnaW5BZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihsYXlvdXRTdGF0ZSwgKmxh
c3RJbkZsb3dDaGlsZCkpIHsKKyAgICAgICAgYXV0byBtYXJnaW5Db2xsYXBzZSA9IE1hcmdpbkNv
bGxhcHNlKGxheW91dFN0YXRlKTsKKyAgICAgICAgaWYgKCFtYXJnaW5Db2xsYXBzZS5tYXJnaW5B
ZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcigqbGFzdEluRmxvd0NoaWxkKSkgewog
ICAgICAgICAgICAgYXV0byYgbGFzdEluRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXN0SW5GbG93Q2hpbGQpOwogICAgICAgICAgICAgYXV0byBi
b3R0b21FZGdlT2ZCb3R0b21NYXJnaW4gPSBsYXN0SW5GbG93RGlzcGxheUJveC5ib3R0b20oKSAr
IChsYXN0SW5GbG93RGlzcGxheUJveC5oYXNDb2xsYXBzZWRUaHJvdWdoTWFyZ2luKCkgPyBMYXlv
dXRVbml0KCkgOiBsYXN0SW5GbG93RGlzcGxheUJveC5tYXJnaW5BZnRlcigpKTsgCiAgICAgICAg
ICAgICByZXR1cm4geyBib3R0b21FZGdlT2ZCb3R0b21NYXJnaW4gLSBib3JkZXJBbmRQYWRkaW5n
VG9wLCBub25Db2xsYXBzZWRNYXJnaW4gfTsKQEAgLTkyLDcgKzk0LDcgQEAgSGVpZ2h0QW5kTWFy
Z2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhl
aWdodEFuZE1hcmcKIAogICAgICAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRo
ZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdp
dGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCiAgICAgICAgIGF1dG8qIGluRmxvd0NoaWxk
ID0gbGFzdEluRmxvd0NoaWxkOwotICAgICAgICB3aGlsZSAoaW5GbG93Q2hpbGQgJiYgTWFyZ2lu
Q29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihsYXlv
dXRTdGF0ZSwgKmluRmxvd0NoaWxkKSkKKyAgICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIG1h
cmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcigq
aW5GbG93Q2hpbGQpKQogICAgICAgICAgICAgaW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJl
dmlvdXNJbkZsb3dTaWJsaW5nKCk7CiAgICAgICAgIGlmIChpbkZsb3dDaGlsZCkgewogICAgICAg
ICAgICAgYXV0byYgaW5GbG93RGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmluRmxvd0NoaWxkKTsKQEAgLTEwOCw3ICsxMTAsNyBAQCBIZWlnaHRBbmRNYXJn
aW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVp
Z2h0QW5kTWFyZwogICAgIHJldHVybiBoZWlnaHRBbmRNYXJnaW47CiB9CiAKLVdpZHRoQW5kTWFy
Z2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZFdp
ZHRoQW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBs
YXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpCitXaWR0aEFuZE1hcmdp
biBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0
aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNl
ZFZhbHVlcykgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwogCkBA
IC0xMzgsNyArMTQwLDcgQEAgV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4KICAgICAgICAgYXV0byYg
c3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2Nr
ID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9yKDApOwot
ICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUo
KS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAKICAgICAgICAgYXV0byB3aWR0
aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8odXNlZFZhbHVlcy53aWR0aCA/IExlbmd0aCB7IHVz
ZWRWYWx1ZXMud2lkdGgudmFsdWUoKSwgRml4ZWQgfSA6IHN0eWxlLmxvZ2ljYWxXaWR0aCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRW
YWx1ZXMpOwpAQCAtMjA0LDcgKzIwNiw3IEBAIFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luCiAgICAg
cmV0dXJuIHdpZHRoQW5kTWFyZ2luOwogfQogCi1XaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRXaWR0aEFuZE1hcmdpbihjb25zdCBM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB1c2VkVmFsdWVzKQorV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmluRmxvd1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBs
YXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1ZXMpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKIApA
QCAtMjE0LDczICsyMTYsNzQgQEAgV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd1JlcGxhY2VkV2lkdGhBbmRNYXJnaW4oY28KICAgICAvLyAyLiBU
aGVuIHRoZSBydWxlcyBmb3Igbm9uLXJlcGxhY2VkIGJsb2NrLWxldmVsIGVsZW1lbnRzIGFyZSBh
cHBsaWVkIHRvIGRldGVybWluZSB0aGUgbWFyZ2lucy4KIAogICAgIC8vICMxCi0gICAgdXNlZFZh
bHVlcy53aWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxh
eW91dEJveCwgdXNlZFZhbHVlcykud2lkdGg7CisgICAgdXNlZFZhbHVlcy53aWR0aCA9IGlubGlu
ZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKS53aWR0aDsKICAg
ICAvLyAjMgotICAgIGF1dG8gbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbiA9IGluRmxvd05vblJl
cGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFZhbHVlcyk7
CisgICAgYXV0byBub25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogCiAgICAgTE9HX1dJVEhfU1RS
RUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAt
PiBpbmZsb3cgcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqdXNlZFZhbHVlcy53aWR0aCA8PCAicHgp
IG1hcmdpbigiIDw8IG5vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCA8
PCAicHgsICIgPDwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKICAgICByZXR1cm4geyAq
dXNlZFZhbHVlcy53aWR0aCwgbm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLCBu
b25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luLmNvbXB1dGVkTWFyZ2luIH07CiB9CiAKLUxheW91dFVu
aXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRp
b24oY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkK
K0xheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRp
Y2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCiAgICAg
Ly8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBvbmUg
YWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNv
bnRhaW5pbmcgYmxvY2suCiAgICAgLy8gVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdv
IHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGllcy4K
ICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwgYm94
ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2UuCiAgICAgaWYgKGF1dG8q
IHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmco
KSkgewotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0
ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAg
ICBhdXRvJiBwcmV2aW91c0luRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goKnByZXZpb3VzSW5GbG93U2libGluZyk7CiAgICAgICAgIHJldHVybiBw
cmV2aW91c0luRmxvd0Rpc3BsYXlCb3guYm90dG9tKCkgKyBwcmV2aW91c0luRmxvd0Rpc3BsYXlC
b3gubWFyZ2luQWZ0ZXIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGxheW91dFN0YXRlLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFRv
cCgpOworICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFRvcCgpOwogfQogCi1MYXlvdXRV
bml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9udGFsUG9z
aXRpb24oY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJv
eCkKK0xheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hv
cml6b250YWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICAvLyBo
dHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRpbmcK
ICAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgZWFjaCBib3gncyBsZWZ0IG91
dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIChm
b3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0aW5nLCByaWdodCBlZGdlcyB0b3VjaCkuCi0gICAgcmV0
dXJuIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWlu
aW5nQmxvY2soKSkuY29udGVudEJveExlZnQoKSArIGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KS5tYXJnaW5TdGFydCgpOworICAgIHJldHVybiBsYXlvdXRTdGF0
ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSku
Y29udGVudEJveExlZnQoKSArIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7CiB9CiAKLVBvaW50IEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorUG9pbnQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewot
ICAgIHJldHVybiB7IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRTdGF0ZSwgbGF5b3V0
Qm94KSwgc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSB9Owor
ICAgIHJldHVybiB7IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gpLCBzdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCkgfTsKIH0KIAotSGVpZ2h0QW5kTWFyZ2luIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZFZlcnRp
Y2FsVmFsdWVzIHVzZWRWYWx1ZXMpCitIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCwgVXNlZFZlcnRpY2FsVmFsdWVzIHVzZWRWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJv
eC5pc0luRmxvdygpKTsKIAogICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMs
IGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJs
b2NrJwogICAgIC8vIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGlu
ZyByZXBsYWNlZCBlbGVtZW50cwogICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dFN0YXRlLCBsYXlv
dXRCb3gsIHVzZWRWYWx1ZXMpOworICAgICAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRIZWlnaHRB
bmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKIAogICAgIEhlaWdodEFuZE1hcmdpbiBo
ZWlnaHRBbmRNYXJnaW47CiAgICAgLy8gRklYTUU6IExldCdzIHNwZWNpYWwgY2FzZSB0aGUgdGFi
bGUgaGVpZ2h0IGNvbXB1dGF0aW9uIGZvciBub3cgLT4gZmlndXJlIG91dCB3aGV0aGVyIHRhYmxl
cyBmYWxsIGludG8gdGhlICJpbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbiIgY2F0ZWdv
cnkuCiAgICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQo
KSkgewotICAgICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxW
YWx1ZXMgeyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07Ci0gICAgICAgIGhlaWdodEFuZE1h
cmdpbiA9IGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0U3RhdGUsIGxheW91dEJveCwgdXNlZFZhbHVl
cywgdXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFs
dWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkg
fTsKKyAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICB9IGVsc2UgaWYgKGxheW91
dEJveC5pc092ZXJmbG93VmlzaWJsZSgpICYmICFsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSB7
CiAgICAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgdGhlIGNhc2UgZm9yIHRoZSBkb2N1bWVudCBl
bGVtZW50LiBMZXQncyBqdXN0IGNvbXBsaWNhdGVkLWNhc2UgaXQgZm9yIG5vdy4KLSAgICAgICAg
aGVpZ2h0QW5kTWFyZ2luID0gaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4obGF5b3V0
U3RhdGUsIGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgICAgIGhlaWdodEFuZE1hcmdpbiA9
IGluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCiAgICAg
ICAgIC8vIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cg
d2hlbiAnb3ZlcmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYg
dGhlICdvdmVyZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRo
ZSB2aWV3cG9ydCkuCi0gICAgICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9y
aXpvbnRhbFZhbHVlcyB7IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKLSAgICAgICAgaGVp
Z2h0QW5kTWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1
c2VkVmFsdWVzLCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgICAgIGF1dG8gdXNlZEhvcml6
b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGxheW91dFN0YXRlKCkuZGlzcGxh
eUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94
V2lkdGgoKSB9OworICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2VzKGxh
eW91dEJveCwgdXNlZFZhbHVlcywgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIH0KIAotICAg
IGlmICghUXVpcmtzOjpuZWVkc1N0cmV0Y2hpbmcobGF5b3V0U3RhdGUsIGxheW91dEJveCkpCisg
ICAgYXV0byBxdWlya3MgPSBRdWlya3MobGF5b3V0U3RhdGUoKSk7CisgICAgaWYgKCFxdWlya3Mu
bmVlZHNTdHJldGNoaW5nKGxheW91dEJveCkpCiAgICAgICAgIHJldHVybiBoZWlnaHRBbmRNYXJn
aW47CiAKLSAgICBoZWlnaHRBbmRNYXJnaW4gPSBRdWlya3M6OnN0cmV0Y2hlZEluRmxvd0hlaWdo
dChsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBoZWlnaHRBbmRNYXJnaW4pOworICAgIGhlaWdodEFu
ZE1hcmdpbiA9IHF1aXJrcy5zdHJldGNoZWRJbkZsb3dIZWlnaHQobGF5b3V0Qm94LCBoZWlnaHRB
bmRNYXJnaW4pOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0
LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gaW5mbG93IG5vbi1yZXBsYWNlZCAtPiBz
dHJlY2hlZCB0byB2aWV3cG9ydCAtPiBoZWlnaHQoIiA8PCBoZWlnaHRBbmRNYXJnaW4uaGVpZ2h0
IDw8ICJweCkgbWFyZ2luKCIgPDwgaGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5i
ZWZvcmUgPDwgInB4LCAiIDw8IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYWZ0
ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CiAgICAgcmV0
dXJuIGhlaWdodEFuZE1hcmdpbjsKIH0KIAotV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1dpZHRoQW5kTWFyZ2luKExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRW
YWx1ZXMpCitXaWR0aEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5GbG93V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFs
VmFsdWVzIHVzZWRWYWx1ZXMpCiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsK
IApAQCAtMjg4LDE0ICsyOTEsMTQgQEAgV2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmluRmxvd1dpZHRoQW5kTWFyZ2luKExheW91dFN0YXQKICAgICAgICAg
aWYgKGxheW91dEJveC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgdGFibGUgImZpdC1jb250ZW50IHNpemUiIGJl
aGF2aW9yIGhhbmRsaW5nLiBOb3QgaW4gdGhlIHNwZWMgdGhvdWdoLgogICAgICAgICAgICAgLy8g
VGFibGUgcmV0dXJucyBpdHMgZmluYWwgd2lkdGggYXMgbWluL21heC4gVXNlIHRoaXMgZmluYWwg
d2lkdGggdmFsdWUgdG8gY29tcHV0ZWQgaG9yaXpvbnRhbCBtYXJnaW5zIGV0Yy4KLSAgICAgICAg
ICAgIHVzZWRWYWx1ZXMud2lkdGggPSBHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aChsYXlvdXRT
dGF0ZSwgbGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgIHVzZWRWYWx1ZXMud2lk
dGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGluRmxvd05vblJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0U3Rh
dGUsIGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisgICAgICAgIHJldHVybiBpbkZsb3dOb25SZXBs
YWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgfQotICAgIHJl
dHVybiBpbkZsb3dSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dFN0YXRlLCBsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMpOworICAgIHJldHVybiBpbkZsb3dSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxh
eW91dEJveCwgdXNlZFZhbHVlcyk7CiB9CiAKLUZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBs
YXlvdXRCb3gpCitGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyhjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBhdXRvIGZpeGVkTWFyZ2luQm9yZGVyQW5k
UGFkZGluZyA9IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKICAgICAgICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKQEAgLTMyNSwxMyArMzI4LDEzIEBAIEZvcm1hdHRpbmdDb250ZXh0
OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9y
bWF0dGluZ0NvbnRleHQoKSkKLSAgICAgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZS5jcmVhdGVG
b3JtYXR0aW5nQ29udGV4dChsYXlvdXRCb3gpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoKTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRp
bmdDb250ZXh0KGxheW91dEJveCktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygp
OwogCiAgICAgICAgIGlmICghaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxD
b250YWluZXI+KGxheW91dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgICAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gobGF5b3V0Qm94KTsK
KyAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5mb3JtYXR0aW5n
U3RhdGVGb3JCb3gobGF5b3V0Qm94KTsKICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuT2ZUeXBlPEJveD4oZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpKSkgewogICAgICAg
ICAgICAgaWYgKGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0
dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5k
ZXggMDA0NGI2ZmRlNGE5NDk4YzI3ZmUxNzcxMjU5ZjgwMzk3Zjc1OGU0MC4uOTFiNjA4YjMzZmVj
ZTI0MDc2MzBlNjI4N2Y0OWYyMGVjMzZlYTJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRRdWlya3MuY3BwCkBAIC00OCwxMCArNDgsMTAgQEAgc3RhdGljIGJvb2wgaXNRdWly
a0NvbnRhaW5lcihjb25zdCBCb3gmIGxheW91dEJveCkKICAgICByZXR1cm4gbGF5b3V0Qm94Lmlz
Qm9keUJveCgpIHx8IGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgfHwgbGF5b3V0Qm94LmlzVGFi
bGVDZWxsKCk7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpuZWVk
c1N0cmV0Y2hpbmcoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxh
eW91dEJveCkKK2Jvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpuZWVkc1N0cmV0
Y2hpbmcoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gSW4gcXVpcmtzIG1v
ZGUsIGJvZHkgc3RyZXRjaGVzIHRvIGh0bWwgYW5kIGh0bWwgdG8gdGhlIGluaXRpYWwgY29udGFp
bmluZyBibG9jayAoaGVpZ2h0OiBhdXRvIG9ubHkpLgotICAgIGlmICghbGF5b3V0U3RhdGUuaW5R
dWlya3NNb2RlKCkpCisgICAgaWYgKCFsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWxheW91dEJveC5pc0RvY3VtZW50Qm94KCkg
JiYgIWxheW91dEJveC5pc0JvZHlCb3goKSkKQEAgLTYwLDExICs2MCwxMiBAQCBib29sIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bmVlZHNTdHJldGNoaW5nKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdAogICAgIHJldHVybiBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0
KCkuaXNBdXRvKCk7CiB9CiAKLUhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpRdWlya3M6OnN0cmV0Y2hlZEluRmxvd0hlaWdodChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRBbmRNYXJnaW4gaGVpZ2h0QW5kTWFy
Z2luKQorSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3Ry
ZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRBbmRNYXJnaW4g
aGVpZ2h0QW5kTWFyZ2luKQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJbkZsb3coKSk7CiAg
ICAgQVNTRVJUKGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgfHwgbGF5b3V0Qm94LmlzQm9keUJv
eCgpKTsKIAorICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAg
ICBhdXRvJiBkb2N1bWVudEJveCA9IGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgPyBsYXlvdXRC
b3ggOiAqbGF5b3V0Qm94LnBhcmVudCgpOwogICAgIGF1dG8mIGRvY3VtZW50Qm94RGlzcGxheUJv
eCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZG9jdW1lbnRCb3gpOwogCkBA
IC04MSwxNCArODIsMTQgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IExheW8KICAgICAgICAgLy8gSGVy
ZSBpcyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94OgogICAgICAgICAvLyBTdHJldGNoIHRo
ZSBib2R5IHVzaW5nIHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sncyBoZWlnaHQgYW5kIHNo
cmluayBpdCB3aXRoIGRvY3VtZW50IGJveCdzIG1hcmdpbi9ib3JkZXIvcGFkZGluZy4KICAgICAg
ICAgLy8gVGhpcyBsb29rcyBleHRyZW1lbHkgb2RkIHdoZW4gaHRtbCBoYXMgbm9uLWF1dG8gaGVp
Z2h0LgotICAgICAgICBhdXRvIGRvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMg
eyBpbml0aWFsQ29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKSB9KTsK
KyAgICAgICAgYXV0byBkb2N1bWVudEJveFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnkobGF5b3V0
U3RhdGUpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIFVzZWRIb3Jpem9udGFs
VmFsdWVzIHsgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJveFdpZHRo
KCkgfSk7CiAgICAgICAgIHN0cmVjaGVkSGVpZ2h0IC09IChkb2N1bWVudEJveFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApICsgZG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5hZnRlci52
YWx1ZU9yKDApKTsKIAogICAgICAgICBhdXRvJiBib2R5Qm94RGlzcGxheUJveCA9IGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAgc3RyZWNoZWRI
ZWlnaHQgLT0gYm9keUJveERpc3BsYXlCb3gudmVydGljYWxCb3JkZXIoKSArIGJvZHlCb3hEaXNw
bGF5Qm94LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CiAKICAgICAgICAgYXV0byBub25D
b2xsYXBzZWRNYXJnaW4gPSBoZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOwotICAg
ICAgICBhdXRvIGNvbGxhcHNlZE1hcmdpbiA9IE1hcmdpbkNvbGxhcHNlOjpjb2xsYXBzZWRWZXJ0
aWNhbFZhbHVlcyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBub25Db2xsYXBzZWRNYXJnaW4pOwor
ICAgICAgICBhdXRvIGNvbGxhcHNlZE1hcmdpbiA9IE1hcmdpbkNvbGxhcHNlKGxheW91dFN0YXRl
KS5jb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZE1hcmdpbik7
CiAgICAgICAgIHRvdGFsVmVydGljYWxNYXJnaW4gPSBjb2xsYXBzZWRNYXJnaW4uYmVmb3JlLnZh
bHVlT3Iobm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSk7CiAgICAgICAgIHRvdGFsVmVydGljYWxN
YXJnaW4gKz0gY29sbGFwc2VkTWFyZ2luLmlzQ29sbGFwc2VkVGhyb3VnaCA/IG5vbkNvbGxhcHNl
ZE1hcmdpbi5hZnRlciA6IGNvbGxhcHNlZE1hcmdpbi5hZnRlci52YWx1ZU9yKG5vbkNvbGxhcHNl
ZE1hcmdpbi5hZnRlcik7CiAgICAgfQpAQCAtMTAwLDkgKzEwMSw5IEBAIEhlaWdodEFuZE1hcmdp
biBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OnN0cmV0Y2hlZEluRmxvd0hlaWdodChj
b25zdCBMYXlvCiAgICAgcmV0dXJuIGhlaWdodEFuZE1hcmdpbjsKIH0KIAotYm9vbCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OnNob3VsZElnbm9yZUNvbGxhcHNlZFF1aXJrTWFyZ2lu
KGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiti
b29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c2hvdWxkSWdub3JlQ29sbGFwc2Vk
UXVpcmtNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGxh
eW91dFN0YXRlLmluUXVpcmtzTW9kZSgpICYmIGlzUXVpcmtDb250YWluZXIobGF5b3V0Qm94KTsK
KyAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSAmJiBpc1F1aXJrQ29udGFp
bmVyKGxheW91dEJveCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCmluZGV4IGY3
NWI3MGJkOGJkNzU5ZWViZWUwNTYxNmQ0MTU3YjQzMTllODVhOTYuLmIxZjg4MzQwNjAxNzcwOTA5
MmZlN2U4YjM1NjY5Mzc3NzMxNTAyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcApAQCAt
ODYsMjUgKzg2LDI1IEBAIHN0YXRpYyBib29sIGVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dChjb25zdCBCb3gmIGxheW91dEJveCkKICAgICByZXR1cm4gbGF5b3V0Qm94LmVzdGFibGlz
aGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFy
Z2luQWZ0ZXIoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91
dEJveCkKK2Jvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdp
bkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gmIGxheW91dEJv
eCkgY29uc3QKIHsKICAgICAvLyAxLiBUaGlzIGlzIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgYW5k
IGl0cyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2ggYW5kIHRoZSBtYXJnaW4gYWZ0ZXIgY29sbGFw
c2VzIHdpdGggcGFyZW50J3MgbWFyZ2luIGFmdGVyIG9yCiAgICAgLy8gMi4gVGhpcyBib3gncyBt
YXJnaW4gYWZ0ZXIgY29sbGFwc2VzIHdpdGggdGhlIG5leHQgc2libGluZydzIG1hcmdpbiBiZWZv
cmUgYW5kIHRoYXQgc2libGluZyBjb2xsYXBzZXMgdGhyb3VnaCBhbmQKICAgICAvLyB3ZSBjYW4g
Z2V0IHRvIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgbGlrZSB0aGF0LgogICAgIGF1dG8qIGxhc3RJ
bkZsb3dDaGlsZCA9IGxheW91dEJveC5wYXJlbnQoKS0+bGFzdEluRmxvd0NoaWxkKCk7CiAgICAg
Zm9yIChhdXRvKiBjdXJyZW50Qm94ID0gJmxheW91dEJveDsgY3VycmVudEJveDsgY3VycmVudEJv
eCA9IGN1cnJlbnRCb3gtPm5leHRJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFtYXJn
aW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dFN0YXRlLCAqY3VycmVudEJveCkpCisgICAgICAgIGlm
ICghbWFyZ2luc0NvbGxhcHNlVGhyb3VnaCgqY3VycmVudEJveCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChjdXJyZW50Qm94ID09IGxhc3RJbkZsb3dDaGlsZCkKLSAg
ICAgICAgICAgIHJldHVybiBtYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRl
cihsYXlvdXRTdGF0ZSwgKmN1cnJlbnRCb3gpOyAKLSAgICAgICAgaWYgKCFtYXJnaW5BZnRlckNv
bGxhcHNlc1dpdGhOZXh0U2libGluZ01hcmdpbkJlZm9yZShsYXlvdXRTdGF0ZSwgKmN1cnJlbnRC
b3gpKQorICAgICAgICAgICAgcmV0dXJuIG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1h
cmdpbkFmdGVyKCpjdXJyZW50Qm94KTsgCisgICAgICAgIGlmICghbWFyZ2luQWZ0ZXJDb2xsYXBz
ZXNXaXRoTmV4dFNpYmxpbmdNYXJnaW5CZWZvcmUoKmN1cnJlbnRCb3gpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKK2Jvb2wgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQYXJlbnRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAg
Ly8gVGhlIGZpcnN0IGluZmxvdyBjaGlsZCBjb3VsZCBwcm9wYWdhdGUgaXRzIHRvcCBtYXJnaW4g
dG8gcGFyZW50LgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9ib3guaHRtbCNj
b2xsYXBzaW5nLW1hcmdpbnMKQEAgLTE0MSwxMyArMTQxLDEzIEBAIGJvb2wgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJl
bnRNYXJnCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIC4uLmFuZCB0aGUgY2hpbGQg
aGFzIG5vIGNsZWFyYW5jZS4KLSAgICBpZiAoaGFzQ2xlYXJhbmNlKGxheW91dFN0YXRlLCBsYXlv
dXRCb3gpKQorICAgIGlmIChoYXNDbGVhcmFuY2UobGF5b3V0U3RhdGUoKSwgbGF5b3V0Qm94KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNl
c1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcihjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2libGlu
Z01hcmdpbkFmdGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIEFTU0VSVChs
YXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpOwogCkBAIC0xNzYsMTMgKzE3NiwxMyBAQCBib29s
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xs
YXBzZXNXaXRoUHJldmlvdXNTaQogCiAgICAgLy8gVGhlIGJvdHRvbSBtYXJnaW4gb2YgYW4gaW4t
ZmxvdyBibG9jay1sZXZlbCBlbGVtZW50IGFsd2F5cyBjb2xsYXBzZXMgd2l0aCB0aGUgdG9wIG1h
cmdpbiBvZgogICAgIC8vIGl0cyBuZXh0IGluLWZsb3cgYmxvY2stbGV2ZWwgc2libGluZywgdW5s
ZXNzIHRoYXQgc2libGluZyBoYXMgY2xlYXJhbmNlLgotICAgIGlmIChoYXNDbGVhcmFuY2UobGF5
b3V0U3RhdGUsIGxheW91dEJveCkpCisgICAgaWYgKGhhc0NsZWFyYW5jZShsYXlvdXRTdGF0ZSgp
LCBsYXlvdXRCb3gpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2lu
QmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG93Q2hpbGRNYXJnaW5CZWZvcmUoY29uc3QgTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKK2Jvb2wgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhGaXJzdEluRmxvd0NoaWxkTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25z
dAogewogICAgIGlmIChsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjA5LDcgKzIwOSw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFy
Z2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhGaXJzdEluRmxvCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIC4uLmFuZCB0aGUgY2hpbGQgaGFzIG5vIGNsZWFyYW5j
ZS4KLSAgICBpZiAoaGFzQ2xlYXJhbmNlKGxheW91dFN0YXRlLCBmaXJzdEluRmxvd0NoaWxkKSkK
KyAgICBpZiAoaGFzQ2xlYXJhbmNlKGxheW91dFN0YXRlKCksIGZpcnN0SW5GbG93Q2hpbGQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNYXJnaW5zIG9mIGlubGluZS1ibG9jayBi
b3hlcyBkbyBub3QgY29sbGFwc2UuCkBAIC0yMTksNDEgKzIxOSw0MSBAQCBib29sIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRo
Rmlyc3RJbkZsbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhTaWJsaW5nTWFy
Z2luQmVmb3JlV2l0aENsZWFyYW5jZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNv
bnN0IEJveCYgbGF5b3V0Qm94KQorYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmdpbkJlZm9yZVdpdGhD
bGVhcmFuY2UoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHRv
cCBhbmQgYm90dG9tIG1hcmdpbnMgb2YgYW4gZWxlbWVudCB3aXRoIGNsZWFyYW5jZSBhcmUgYWRq
b2luaW5nLCBpdHMgbWFyZ2lucyBjb2xsYXBzZSB3aXRoIHRoZSBhZGpvaW5pbmcgbWFyZ2lucwog
ICAgIC8vIG9mIGZvbGxvd2luZyBzaWJsaW5ncyBidXQgdGhhdCByZXN1bHRpbmcgbWFyZ2luIGRv
ZXMgbm90IGNvbGxhcHNlIHdpdGggdGhlIGJvdHRvbSBtYXJnaW4gb2YgdGhlIHBhcmVudCBibG9j
ay4KLSAgICBpZiAoIW1hcmdpbnNDb2xsYXBzZVRocm91Z2gobGF5b3V0U3RhdGUsIGxheW91dEJv
eCkpCisgICAgaWYgKCFtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dEJveCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoYXV0byogcHJldmlvdXNTaWJsaW5nID0gbGF5b3V0
Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpOyBwcmV2aW91c1NpYmxpbmc7IHByZXZpb3VzU2li
bGluZyA9IHByZXZpb3VzU2libGluZy0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAg
ICAgaWYgKCFtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dFN0YXRlLCAqcHJldmlvdXNTaWJs
aW5nKSkKKyAgICAgICAgaWYgKCFtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKCpwcmV2aW91c1NpYmxp
bmcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaGFzQ2xlYXJhbmNl
KGxheW91dFN0YXRlLCAqcHJldmlvdXNTaWJsaW5nKSkKKyAgICAgICAgaWYgKGhhc0NsZWFyYW5j
ZShsYXlvdXRTdGF0ZSgpLCAqcHJldmlvdXNTaWJsaW5nKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1h
cmdpbkJlZm9yZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5
b3V0Qm94KQorYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFy
Z2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0
Qm94KSBjb25zdAogewogICAgIC8vIDEuIFRoaXMgaXMgdGhlIGZpcnN0IGluLWZsb3cgY2hpbGQg
YW5kIGl0cyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2ggYW5kIHRoZSBtYXJnaW4gYmVmb3JlIGNv
bGxhcHNlcyB3aXRoIHBhcmVudCdzIG1hcmdpbiBiZWZvcmUgb3IKICAgICAvLyAyLiBUaGlzIGJv
eCdzIG1hcmdpbiBiZWZvcmUgY29sbGFwc2VzIHdpdGggdGhlIHByZXZpb3VzIHNpYmxpbmcncyBt
YXJnaW4gYWZ0ZXIgYW5kIHRoYXQgc2libGluZyBjb2xsYXBzZXMgdGhyb3VnaCBhbmQKICAgICAv
LyB3ZSBjYW4gZ2V0IHRvIHRoZSBmaXJzdCBpbi1mbG93IGNoaWxkIGxpa2UgdGhhdC4KICAgICBh
dXRvKiBmaXJzdEluRmxvd0NoaWxkID0gbGF5b3V0Qm94LnBhcmVudCgpLT5maXJzdEluRmxvd0No
aWxkKCk7CiAgICAgZm9yIChhdXRvKiBjdXJyZW50Qm94ID0gJmxheW91dEJveDsgY3VycmVudEJv
eDsgY3VycmVudEJveCA9IGN1cnJlbnRCb3gtPnByZXZpb3VzSW5GbG93U2libGluZygpKSB7Ci0g
ICAgICAgIGlmICghbWFyZ2luc0NvbGxhcHNlVGhyb3VnaChsYXlvdXRTdGF0ZSwgKmN1cnJlbnRC
b3gpKQorICAgICAgICBpZiAoIW1hcmdpbnNDb2xsYXBzZVRocm91Z2goKmN1cnJlbnRCb3gpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoY3VycmVudEJveCA9PSBmaXJz
dEluRmxvd0NoaWxkKQotICAgICAgICAgICAgcmV0dXJuIG1hcmdpbkJlZm9yZUNvbGxhcHNlc1dp
dGhQYXJlbnRNYXJnaW5CZWZvcmUobGF5b3V0U3RhdGUsICpjdXJyZW50Qm94KTsgCi0gICAgICAg
IGlmICghbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2libGluZ01hcmdpbkFmdGVy
KGxheW91dFN0YXRlLCAqY3VycmVudEJveCkpCisgICAgICAgICAgICByZXR1cm4gbWFyZ2luQmVm
b3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZSgqY3VycmVudEJveCk7IAorICAgICAg
ICBpZiAoIW1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRl
cigqY3VycmVudEJveCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRo
UGFyZW50TWFyZ2luQWZ0ZXIoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBC
b3gmIGxheW91dEJveCkKK2Jvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKGNvbnN0IEJveCYg
bGF5b3V0Qm94KSBjb25zdAogewogICAgIGlmIChsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk0LDE4ICsyOTQsMTggQEAgYm9vbCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFy
ZW50TWFyZ2kKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gdGhlIGNoaWxkJ3MgYm90
dG9tIG1hcmdpbiBuZWl0aGVyIGNvbGxhcHNlcyB3aXRoIGEgdG9wIG1hcmdpbiB0aGF0IGhhcyBj
bGVhcmFuY2UuLi4KLSAgICBpZiAobWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmdp
bkJlZm9yZVdpdGhDbGVhcmFuY2UobGF5b3V0U3RhdGUsIGxheW91dEJveCkpCisgICAgaWYgKG1h
cmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGxh
eW91dEJveCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIG5vciAoaWYgdGhlIGJv
eCdzIG1pbi1oZWlnaHQgaXMgbm9uLXplcm8pIHdpdGggdGhlIGJveCdzIHRvcCBtYXJnaW4uCiAg
ICAgYXV0byBjb21wdXRlZE1pbkhlaWdodCA9IHBhcmVudC5zdHlsZSgpLmxvZ2ljYWxNaW5IZWln
aHQoKTsKLSAgICBpZiAoIWNvbXB1dGVkTWluSGVpZ2h0LmlzQXV0bygpICYmIGNvbXB1dGVkTWlu
SGVpZ2h0LnZhbHVlKCkgJiYgbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVm
b3JlKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKQorICAgIGlmICghY29tcHV0ZWRNaW5IZWlnaHQu
aXNBdXRvKCkgJiYgY29tcHV0ZWRNaW5IZWlnaHQudmFsdWUoKSAmJiBtYXJnaW5BZnRlckNvbGxh
cHNlc1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUobGF5b3V0Qm94KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDaGls
ZE1hcmdpbkFmdGVyKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBs
YXlvdXRCb3gpCitib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpt
YXJnaW5BZnRlckNvbGxhcHNlc1dpdGhMYXN0SW5GbG93Q2hpbGRNYXJnaW5BZnRlcihjb25zdCBC
b3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZl
bEJveCgpKTsKIApAQCAtMzMzLDEzICszMzMsMTMgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0MK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdp
biBuZWl0aGVyIGNvbGxhcHNlcyB3aXRoIGEgdG9wIG1hcmdpbiB0aGF0IGhhcyBjbGVhcmFuY2Uu
Li4KLSAgICBpZiAobWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmdpbkJlZm9yZVdp
dGhDbGVhcmFuY2UobGF5b3V0U3RhdGUsIGxhc3RJbkZsb3dDaGlsZCkpCisgICAgaWYgKG1hcmdp
bkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlKGxhc3RJ
bkZsb3dDaGlsZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIG5vciAoaWYgdGhl
IGJveCdzIG1pbi1oZWlnaHQgaXMgbm9uLXplcm8pIHdpdGggdGhlIGJveCdzIHRvcCBtYXJnaW4u
CiAgICAgYXV0byBjb21wdXRlZE1pbkhlaWdodCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxN
aW5IZWlnaHQoKTsKICAgICBpZiAoIWNvbXB1dGVkTWluSGVpZ2h0LmlzQXV0bygpICYmIGNvbXB1
dGVkTWluSGVpZ2h0LnZhbHVlKCkKLSAgICAgICAgJiYgKG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0
aFBhcmVudE1hcmdpbkJlZm9yZShsYXlvdXRTdGF0ZSwgbGFzdEluRmxvd0NoaWxkKSB8fCBoYXND
bGVhcmFuY2UobGF5b3V0U3RhdGUsIGxhc3RJbkZsb3dDaGlsZCkpKQorICAgICAgICAmJiAobWFy
Z2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGxhc3RJbkZsb3dDaGlsZCkg
fHwgaGFzQ2xlYXJhbmNlKGxheW91dFN0YXRlKCksIGxhc3RJbkZsb3dDaGlsZCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNYXJnaW5zIG9mIGlubGluZS1ibG9jayBib3hlcyBk
byBub3QgY29sbGFwc2UuCkBAIC0zNDksMTcgKzM0OSwxNyBAQCBib29sIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhMYXN0SW5G
bG93QwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5BZnRlckNvbGxhcHNlc1dpdGhOZXh0U2libGluZ01hcmdp
bkJlZm9yZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0
Qm94KQorYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2lu
QWZ0ZXJDb2xsYXBzZXNXaXRoTmV4dFNpYmxpbmdNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlv
dXRCb3gpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSk7
CiAKICAgICBpZiAoIWxheW91dEJveC5uZXh0SW5GbG93U2libGluZygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3Vz
U2libGluZ01hcmdpbkFmdGVyKGxheW91dFN0YXRlLCAqbGF5b3V0Qm94Lm5leHRJbkZsb3dTaWJs
aW5nKCkpOworICAgIHJldHVybiBtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJs
aW5nTWFyZ2luQWZ0ZXIoKmxheW91dEJveC5uZXh0SW5GbG93U2libGluZygpKTsKIH0KIAotYm9v
bCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luc0NvbGxhcHNl
VGhyb3VnaChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0
Qm94KQorYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2lu
c0NvbGxhcHNlVGhyb3VnaChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NF
UlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKIApAQCAtMzkyLDYgKzM5Miw3IEBAIGJv
b2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbnNDb2xsYXBz
ZVRocm91Z2goY29uc3QgTGF5b3V0CiAKICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9y
bWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgYXV0byYgbGF5b3V0U3RhdGUg
PSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhy
b3VnaCBtYXJnaW4gZXN0aW1hdGlvbiwgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhbiBhY3R1
YWwgc3RhdGUgZm9yIHRoaXMgbGF5b3V0IGJveCBzaW5jZQogICAgICAgICAgICAgLy8gd2UgaGF2
ZW4ndCBzdGFydGVkIGxheWluZyBpdCBvdXQgeWV0LgogICAgICAgICAgICAgaWYgKCFsYXlvdXRT
dGF0ZS5oYXNGb3JtYXR0aW5nU3RhdGUobGF5b3V0Qm94KSkKQEAgLTQxNSw3ICs0MTYsNyBAQCBi
b29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5zQ29sbGFw
c2VUaHJvdWdoKGNvbnN0IExheW91dAogICAgIGZvciAoYXV0byogaW5mbG93Q2hpbGQgPSBkb3du
Y2FzdDxDb250YWluZXI+KGxheW91dEJveCkuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsg
aW5mbG93Q2hpbGQ7IGluZmxvd0NoaWxkID0gaW5mbG93Q2hpbGQtPm5leHRJbkZsb3dPckZsb2F0
aW5nU2libGluZygpKSB7CiAgICAgICAgIGlmIChlc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0Nv
bnRleHQoKmluZmxvd0NoaWxkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dFN0YXRlLCAqaW5mbG93Q2hpbGQpKQor
ICAgICAgICBpZiAoIW1hcmdpbnNDb2xsYXBzZVRocm91Z2goKmluZmxvd0NoaWxkKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTgsNyAr
NDU5LDcgQEAgc3RhdGljIE9wdGlvbmFsPExheW91dFVuaXQ+IG1hcmdpblZhbHVlKFBvc2l0aXZl
QW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbjo6VmFsdWUKICAgICByZXR1cm4gKm1hcmdpblZhbHVl
cy5wb3NpdGl2ZSArICptYXJnaW5WYWx1ZXMubmVnYXRpdmU7CiB9CiAKLXZvaWQgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlv
dXNTaWJsaW5nKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlv
dXRCb3gpCit2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRh
dGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZyhjb25zdCBCb3gmIGxheW91dEJveCkgY29u
c3QKIHsKICAgICAvLyAxLiBHZXQgdGhlIG1hcmdpbiBiZWZvcmUgdmFsdWUgZnJvbSB0aGUgbmV4
dCBpbi1mbG93IHNpYmxpbmcuIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhpcyBib3gncyBtYXJnaW4g
YWZ0ZXIgdmFsdWUgbm93IHNpbmNlIHRoZXkgYXJlIGNvbGxhcHNlZC4KICAgICAvLyAyLiBVcGRh
dGUgdGhlIGNvbGxhcHNlZCBtYXJnaW4gYWZ0ZXIgdmFsdWUgYXMgd2VsbCBhcyB0aGUgcG9zaXRp
dmUvbmVnYXRpdmUgY2FjaGUuCkBAIC00NjcsOCArNDY4LDkgQEAgdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1Np
YmxpbmcKICAgICAvLyA1LiBJbiBjYXNlIG9mIGNvbGxhcHNlZCB0aHJvdWdoIG1hcmdpbnMgY2hl
Y2sgaWYgdGhlIGJlZm9yZSBtYXJnaW4gY29sbGFwZXMgd2l0aCB0aGUgcHJldmlvdXMgaW5mbG93
IHNpYmxpbmcncyBhZnRlciBtYXJnaW4uCiAgICAgLy8gNi4gSWYgc28sIGp1bXAgdG8gIzIuCiAg
ICAgLy8gNy4gTm8gbmVlZCB0byBwcm9wYWdhdGUgdG8gcGFyZW50IGJlY2F1c2UgaXRzIG1hcmdp
biBpcyBub3QgY29tcHV0ZWQgeWV0IChlc3RpbWF0ZWQgYXQgbW9zdCkuCisgICAgYXV0byYgbGF5
b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIGF1dG8qIGN1cnJlbnRCb3ggPSAm
bGF5b3V0Qm94OwotICAgIHdoaWxlIChtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNT
aWJsaW5nTWFyZ2luQWZ0ZXIobGF5b3V0U3RhdGUsICpjdXJyZW50Qm94KSkgeworICAgIHdoaWxl
IChtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0ZXIoKmN1
cnJlbnRCb3gpKSB7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzU2libGluZyA9ICpjdXJyZW50Qm94
LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICAgICAgYXV0byYgcHJldmlvdXNTaWJsaW5n
RGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocHJldmlvdXNT
aWJsaW5nKTsKICAgICAgICAgYXV0byBwcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbiA9IHBy
ZXZpb3VzU2libGluZ0Rpc3BsYXlCb3gudmVydGljYWxNYXJnaW4oKTsKQEAgLTQ3Niw3ICs0Nzgs
NyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVN
YXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZwogICAgICAgICBhdXRvIGNvbGxhcHNlZFZlcnRp
Y2FsTWFyZ2luQmVmb3JlID0gcHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4uY29sbGFwc2Vk
VmFsdWVzKCkuYmVmb3JlOwogICAgICAgICBhdXRvIGNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luQWZ0
ZXIgPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjdXJyZW50Qm94KS52ZXJ0
aWNhbE1hcmdpbigpLmJlZm9yZSgpOwogCi0gICAgICAgIGF1dG8gbWFyZ2luc0NvbGxhcHNlVGhy
b3VnaCA9IE1hcmdpbkNvbGxhcHNlOjptYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dFN0YXRl
LCBwcmV2aW91c1NpYmxpbmcpOworICAgICAgICBhdXRvIG1hcmdpbnNDb2xsYXBzZVRocm91Z2gg
PSB0aGlzLT5tYXJnaW5zQ29sbGFwc2VUaHJvdWdoKHByZXZpb3VzU2libGluZyk7CiAgICAgICAg
IGlmIChtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKQogICAgICAgICAgICAgY29sbGFwc2VkVmVydGlj
YWxNYXJnaW5CZWZvcmUgPSBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkFmdGVyOwogCkBAIC01MDMs
OCArNTA1LDkgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6
dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcKICAgICB9CiB9CiAKLVBvc2l0aXZl
QW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbjo6VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Ok1hcmdpbkNvbGxhcHNlOjpwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIE1hcmdpblR5cGUgbWFyZ2luVHlw
ZSkKK1Bvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbjo6VmFsdWVzIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBNYXJnaW5UeXBlIG1hcmdpblR5cGUpCiB7CisgICAgYXV0byYgbGF5
b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIGF1dG8mIGJsb2NrRm9ybWF0dGlu
Z1N0YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmZvcm1h
dHRpbmdTdGF0ZUZvckJveChsYXlvdXRCb3gpKTsKICAgICBpZiAoYmxvY2tGb3JtYXR0aW5nU3Rh
dGUuaGFzUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luKGxheW91dEJveCkpIHsKICAg
ICAgICAgYXV0byBwb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW4gPSBibG9ja0Zvcm1h
dHRpbmdTdGF0ZS5wb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW4obGF5b3V0Qm94KTsK
QEAgLTUxMiwzMyArNTE1LDMzIEBAIFBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbjo6
VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlCiAgICAgfQogICAg
IC8vIFRoaXMgaXMgdGhlIGVzdGltYXRlIHBhdGguIFdlIGRvbid0IHlldCBoYXZlIHBvc2l0aXZl
L25lZ2F0aXZlIG1hcmdpbiBjb21wdXRlZC4KICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9y
aXpvbnRhbFZhbHVlcyB7IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKLSAgICBhdXRvIGNv
bXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihs
YXlvdXRCb3gsIHVzZWRWYWx1ZXMpOworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9
IEdlb21ldHJ5KGxheW91dFN0YXRlKS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwg
dXNlZFZhbHVlcyk7CiAgICAgYXV0byBub25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxN
YXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAK
IAogICAgIGlmIChtYXJnaW5UeXBlID09IE1hcmdpblR5cGU6OkJlZm9yZSkKLSAgICAgICAgcmV0
dXJuIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0U3RhdGUsIGxheW91dEJveCwg
bm9uQ29sbGFwc2VkTWFyZ2luKTsKLSAgICByZXR1cm4gcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFm
dGVyKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZE1hcmdpbik7CisgICAgICAg
IHJldHVybiBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGxheW91dEJveCwgbm9uQ29sbGFw
c2VkTWFyZ2luKTsKKyAgICByZXR1cm4gcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFmdGVyKGxheW91
dEJveCwgbm9uQ29sbGFwc2VkTWFyZ2luKTsKIH0KIAotUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRp
Y2FsTWFyZ2luOjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6
OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMmIG5vbkNvbGxhcHNlZFZhbHVlcykKK1Bvc2l0aXZlQW5kTmVnYXRpdmVW
ZXJ0aWNhbE1hcmdpbjo6VmFsdWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxh
cHNlOjpwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyYgbm9uQ29sbGFwc2Vk
VmFsdWVzKQogewogICAgIGF1dG8gZmlyc3RDaGlsZENvbGxhcHNlZE1hcmdpbkJlZm9yZSA9IFsm
XSgpIC0+IFBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbjo6VmFsdWVzIHsKLSAgICAg
ICAgaWYgKCFtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdpbkJl
Zm9yZShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KSkKKyAgICAgICAgaWYgKCFtYXJnaW5CZWZvcmVD
b2xsYXBzZXNXaXRoRmlyc3RJbkZsb3dDaGlsZE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHBvc2l0aXZlTmVnYXRpdmVWYWx1
ZXMobGF5b3V0U3RhdGUsICpkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkuZmlyc3RJbkZs
b3dDaGlsZCgpLCBNYXJnaW5UeXBlOjpCZWZvcmUpOworICAgICAgICByZXR1cm4gcG9zaXRpdmVO
ZWdhdGl2ZVZhbHVlcygqZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmZpcnN0SW5GbG93
Q2hpbGQoKSwgTWFyZ2luVHlwZTo6QmVmb3JlKTsKICAgICB9OwogCiAgICAgYXV0byBwcmV2aW91
U2libGluZ0NvbGxhcHNlZE1hcmdpbkFmdGVyID0gWyZdKCkgLT4gUG9zaXRpdmVBbmROZWdhdGl2
ZVZlcnRpY2FsTWFyZ2luOjpWYWx1ZXMgewotICAgICAgICBpZiAoIW1hcmdpbkJlZm9yZUNvbGxh
cHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94
KSkKKyAgICAgICAgaWYgKCFtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5n
TWFyZ2luQWZ0ZXIobGF5b3V0Qm94KSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
IHJldHVybiBwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKGxheW91dFN0YXRlLCAqbGF5b3V0Qm94LnBy
ZXZpb3VzSW5GbG93U2libGluZygpLCBNYXJnaW5UeXBlOjpBZnRlcik7CisgICAgICAgIHJldHVy
biBwb3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKCpsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5n
KCksIE1hcmdpblR5cGU6OkFmdGVyKTsKICAgICB9OwogCiAgICAgLy8gMS4gR2F0aGVyIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFsdWVzIGZyb20gZmlyc3QgY2hpbGQgaWYgbWFyZ2lu
cyBhcmUgYWRqb2luaW5nLgogICAgIC8vIDIuIEdhdGhlciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUg
bWFyZ2luIHZhbHVlcyBmcm9tIHByZXZpb3VzIGluZmxvdyBzaWJsaW5nIGlmIG1hcmdpbnMgYXJl
IGFkam9pbmluZy4KICAgICAvLyAzLiBDb21wdXRlIG1pbi9tYXggcG9zaXRpdmUgYW5kIG5lZ2F0
aXZlIGNvbGxhcHNlZCBtYXJnaW4gdmFsdWVzIHVzaW5nIG5vbi1jb2xscGFzZWQgY29tcHV0ZWQg
bWFyZ2luIGJlZm9yZS4KICAgICBhdXRvIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSA9IGNvbXB1dGVk
UG9zaXRpdmVBbmROZWdhdGl2ZU1hcmdpbihmaXJzdENoaWxkQ29sbGFwc2VkTWFyZ2luQmVmb3Jl
KCksIHByZXZpb3VTaWJsaW5nQ29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSk7Ci0gICAgaWYgKGNvbGxh
cHNlZE1hcmdpbkJlZm9yZS5pc1F1aXJrICYmIFF1aXJrczo6c2hvdWxkSWdub3JlQ29sbGFwc2Vk
UXVpcmtNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCkpCisgICAgaWYgKGNvbGxhcHNlZE1h
cmdpbkJlZm9yZS5pc1F1aXJrICYmIFF1aXJrcyhsYXlvdXRTdGF0ZSgpKS5zaG91bGRJZ25vcmVD
b2xsYXBzZWRRdWlya01hcmdpbihsYXlvdXRCb3gpKQogICAgICAgICBjb2xsYXBzZWRNYXJnaW5C
ZWZvcmUgPSB7IH07CiAKICAgICBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZh
bHVlcyBub25Db2xsYXBzZWRCZWZvcmU7CkBAIC01NTAsMTIgKzU1MywxMiBAQCBQb3NpdGl2ZUFu
ZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpN
YXJnaW5Db2xsYXBzZQogICAgIHJldHVybiBjb21wdXRlZFBvc2l0aXZlQW5kTmVnYXRpdmVNYXJn
aW4oY29sbGFwc2VkTWFyZ2luQmVmb3JlLCBub25Db2xsYXBzZWRCZWZvcmUpOwogfQogCi1Qb3Np
dGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFmdGVyKGNvbnN0IExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzJiBub25Db2xsYXBzZWRWYWx1ZXMpCitQ
b3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFmdGVyKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZh
bHVlcyYgbm9uQ29sbGFwc2VkVmFsdWVzKQogewogICAgIGF1dG8gbGFzdENoaWxkQ29sbGFwc2Vk
TWFyZ2luQWZ0ZXIgPSBbJl0oKSAtPiBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46
OlZhbHVlcyB7Ci0gICAgICAgIGlmICghbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxv
d0NoaWxkTWFyZ2luQWZ0ZXIobGF5b3V0U3RhdGUsIGxheW91dEJveCkpCisgICAgICAgIGlmICgh
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIobGF5b3V0
Qm94KSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBwb3NpdGl2ZU5l
Z2F0aXZlVmFsdWVzKGxheW91dFN0YXRlLCAqZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gp
Lmxhc3RJbkZsb3dDaGlsZCgpLCBNYXJnaW5UeXBlOjpBZnRlcik7CisgICAgICAgIHJldHVybiBw
b3NpdGl2ZU5lZ2F0aXZlVmFsdWVzKCpkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkubGFz
dEluRmxvd0NoaWxkKCksIE1hcmdpblR5cGU6OkFmdGVyKTsKICAgICB9OwogCiAgICAgLy8gV2Ug
ZG9uJ3Qga25vdyB5ZXQgdGhlIG1hcmdpbiBiZWZvcmUgdmFsdWUgb2YgdGhlIG5leHQgc2libGlu
Zy4gTGV0J3MganVzdCBwcmV0ZW5kIGl0IGRvZXMgbm90IGhhdmUgb25lIGFuZCAKQEAgLTU2OSw3
ICs1NzIsNyBAQCBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZQogICAgIHJldHVybiBjb21wdXRlZFBv
c2l0aXZlQW5kTmVnYXRpdmVNYXJnaW4obGFzdENoaWxkQ29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSwg
bm9uQ29sbGFwc2VkQWZ0ZXIpOwogfQogCi1Fc3RpbWF0ZWRNYXJnaW5CZWZvcmUgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OmVzdGltYXRlZE1hcmdpbkJlZm9yZShjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorRXN0aW1h
dGVkTWFyZ2luQmVmb3JlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpl
c3RpbWF0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgaWYgKGxh
eW91dEJveC5pc0Fub255bW91cygpKQogICAgICAgICByZXR1cm4geyB9OwpAQCAtNTc4LDQzICs1
ODEsNDMgQEAgRXN0aW1hdGVkTWFyZ2luQmVmb3JlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1h
cmdpbkNvbGxhcHNlOjplc3RpbWF0ZWRNYXJnaW5CZWYKICAgICAvLyBEb24ndCBlc3RpbWF0ZSB2
ZXJ0aWNhbCBtYXJnaW5zIGZvciBvdXQgb2YgZmxvdyBib3hlcy4KICAgICBBU1NFUlQobGF5b3V0
Qm94LmlzSW5GbG93KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwogICAg
IEFTU0VSVCghbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwotICAgIAotICAgIGF1dG8gdXNlZFZhbHVl
cyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9Owot
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CisKKyAgICBhdXRvIHVzZWRWYWx1ZXMg
PSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91
dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9Owor
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5KGxheW91dFN0YXRlKCkp
LmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRv
IG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFs
dWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAgYXV0byBtYXJnaW5zQ29sbGFw
c2VUaHJvdWdoID0gTWFyZ2luQ29sbGFwc2U6Om1hcmdpbnNDb2xsYXBzZVRocm91Z2gobGF5b3V0
U3RhdGUsIGxheW91dEJveCk7Ci0gICAgYXV0byBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3Jl
ID0gTWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUobGF5b3V0U3Rh
dGUsIGxheW91dEJveCwgbm9uQ29sbGFwc2VkTWFyZ2luKTsKKyAgICBhdXRvIG1hcmdpbnNDb2xs
YXBzZVRocm91Z2ggPSB0aGlzLT5tYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dEJveCk7Cisg
ICAgYXV0byBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gdGhpcy0+cG9zaXRpdmVOZWdh
dGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZE1hcmdpbik7CiAKICAgICBh
dXRvIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSA9IG1hcmdpblZhbHVlKCFtYXJnaW5zQ29sbGFwc2VU
aHJvdWdoID8gcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZQotICAgICAgICA6IGNvbXB1dGVk
UG9zaXRpdmVBbmROZWdhdGl2ZU1hcmdpbihwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlLCBw
b3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIobGF5b3V0U3RhdGUsIGxheW91dEJveCwgbm9uQ29s
bGFwc2VkTWFyZ2luKSkpOworICAgICAgICA6IGNvbXB1dGVkUG9zaXRpdmVBbmROZWdhdGl2ZU1h
cmdpbihwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlLCBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2lu
QWZ0ZXIobGF5b3V0Qm94LCBub25Db2xsYXBzZWRNYXJnaW4pKSk7CiAKICAgICByZXR1cm4geyBu
b25Db2xsYXBzZWRNYXJnaW4uYmVmb3JlLCBjb2xsYXBzZWRNYXJnaW5CZWZvcmUsIG1hcmdpbnND
b2xsYXBzZVRocm91Z2ggfTsKIH0KIAotTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlSWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChj
b25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyYgbm9uQ29sbGFwc2VkVmFs
dWVzKQorTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6
bWFyZ2luQmVmb3JlSWdub3JpbmdDb2xsYXBzaW5nVGhyb3VnaChjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMmIG5vbkNvbGxh
cHNlZFZhbHVlcykKIHsKICAgICBBU1NFUlQoIWxheW91dEJveC5pc0Fub255bW91cygpKTsKICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpKTsKLSAgICByZXR1cm4gbWFyZ2lu
VmFsdWUocG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94
LCBub25Db2xsYXBzZWRWYWx1ZXMpKS52YWx1ZU9yKG5vbkNvbGxhcHNlZFZhbHVlcy5iZWZvcmUp
OworICAgIHJldHVybiBtYXJnaW5WYWx1ZShwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGxh
eW91dEJveCwgbm9uQ29sbGFwc2VkVmFsdWVzKSkudmFsdWVPcihub25Db2xsYXBzZWRWYWx1ZXMu
YmVmb3JlKTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBz
ZTo6dXBkYXRlUG9zaXRpdmVOZWdhdGl2ZU1hcmdpblZhbHVlcyhjb25zdCBMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQordm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6dXBkYXRlUG9zaXRpdmVOZWdhdGl2ZU1hcmdpblZhbHVl
cyhjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxvY2tM
ZXZlbEJveCgpKTsKLSAgICBhdXRvIG5vbkNvbGxhcHNlZFZhbHVlcyA9IGxheW91dFN0YXRlLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS52ZXJ0aWNhbE1hcmdpbigpLm5vbkNvbGxh
cHNlZFZhbHVlcygpOworICAgIGF1dG8gbm9uQ29sbGFwc2VkVmFsdWVzID0gbGF5b3V0U3RhdGUo
KS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkudmVydGljYWxNYXJnaW4oKS5ub25D
b2xsYXBzZWRWYWx1ZXMoKTsKIAotICAgIGF1dG8gcG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9y
ZSA9IE1hcmdpbkNvbGxhcHNlOjpwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGxheW91dFN0
YXRlLCBsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcyk7Ci0gICAgYXV0byBwb3NpdGl2ZU5l
Z2F0aXZlTWFyZ2luQWZ0ZXIgPSBNYXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZU1hcmdp
bkFmdGVyKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcyk7CisgICAg
YXV0byBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gdGhpcy0+cG9zaXRpdmVOZWdhdGl2
ZU1hcmdpbkJlZm9yZShsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcyk7CisgICAgYXV0byBw
b3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIgPSB0aGlzLT5wb3NpdGl2ZU5lZ2F0aXZlTWFyZ2lu
QWZ0ZXIobGF5b3V0Qm94LCBub25Db2xsYXBzZWRWYWx1ZXMpOwogCi0gICAgaWYgKE1hcmdpbkNv
bGxhcHNlOjptYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpKSB7
CisgICAgaWYgKG1hcmdpbnNDb2xsYXBzZVRocm91Z2gobGF5b3V0Qm94KSkgewogICAgICAgICBw
b3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gY29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZl
TWFyZ2luKHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUsIHBvc2l0aXZlTmVnYXRpdmVNYXJn
aW5BZnRlcik7CiAgICAgICAgIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlciA9IHBvc2l0aXZl
TmVnYXRpdmVNYXJnaW5CZWZvcmU7CiAgICAgfQotICAgIGF1dG8mIGJsb2NrRm9ybWF0dGluZ1N0
YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmZvcm1hdHRp
bmdTdGF0ZUZvckJveChsYXlvdXRCb3gpKTsKKyAgICBhdXRvJiBibG9ja0Zvcm1hdHRpbmdTdGF0
ZSA9IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZSgpLmZvcm1hdHRp
bmdTdGF0ZUZvckJveChsYXlvdXRCb3gpKTsKICAgICBibG9ja0Zvcm1hdHRpbmdTdGF0ZS5zZXRQ
b3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCB7IHBvc2l0aXZlTmVn
YXRpdmVNYXJnaW5CZWZvcmUsIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlciB9KTsKIH0KIAot
VXNlZFZlcnRpY2FsTWFyZ2luOjpDb2xsYXBzZWRWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6OmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFVzZWRWZXJ0aWNh
bE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzJiBub25Db2xsYXBzZWRWYWx1ZXMpCitVc2VkVmVy
dGljYWxNYXJnaW46OkNvbGxhcHNlZFZhbHVlcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJn
aW5Db2xsYXBzZTo6Y29sbGFwc2VkVmVydGljYWxWYWx1ZXMoY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzJiBub25Db2xsYXBz
ZWRWYWx1ZXMpCiB7CiAgICAgaWYgKGxheW91dEJveC5pc0Fub255bW91cygpKQogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtNjI0LDE3ICs2MjcsMTcgQEAgVXNlZFZlcnRpY2FsTWFyZ2luOjpDb2xs
YXBzZWRWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OmNvbGwK
ICAgICAvLyAyLiBHZXQgbWluL21heCBtYXJnaW4gdG9wIHZhbHVlcyBmcm9tIHRoZSBwcmV2aW91
cyBpbi1mbG93IHNpYmxpbmcsIGlmIHdlIGFyZSBjb2xsYXBzaW5nIG1hcmdpbiB0b3Agd2l0aCBp
dC4KICAgICAvLyAzLiBHZXQgdGhpcyBsYXlvdXQgYm94J3MgY29tcHV0ZWQgbWFyZ2luIHRvcCB2
YWx1ZS4KICAgICAvLyA0LiBVcGRhdGUgdGhlIG1pbi9tYXggdmFsdWUgYW5kIGNvbXB1dGUgdGhl
IGZpbmFsIG1hcmdpbi4KLSAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBN
YXJnaW5Db2xsYXBzZTo6cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRTdGF0ZSwg
bGF5b3V0Qm94LCBub25Db2xsYXBzZWRWYWx1ZXMpOwotICAgIGF1dG8gcG9zaXRpdmVOZWdhdGl2
ZU1hcmdpbkFmdGVyID0gTWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRl
cihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCBub25Db2xsYXBzZWRWYWx1ZXMpOworICAgIGF1dG8g
cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IHRoaXMtPnBvc2l0aXZlTmVnYXRpdmVNYXJn
aW5CZWZvcmUobGF5b3V0Qm94LCBub25Db2xsYXBzZWRWYWx1ZXMpOworICAgIGF1dG8gcG9zaXRp
dmVOZWdhdGl2ZU1hcmdpbkFmdGVyID0gdGhpcy0+cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFmdGVy
KGxheW91dEJveCwgbm9uQ29sbGFwc2VkVmFsdWVzKTsKIAotICAgIGF1dG8gbWFyZ2luc0NvbGxh
cHNlVGhyb3VnaCA9IE1hcmdpbkNvbGxhcHNlOjptYXJnaW5zQ29sbGFwc2VUaHJvdWdoKGxheW91
dFN0YXRlLCBsYXlvdXRCb3gpOworICAgIGF1dG8gbWFyZ2luc0NvbGxhcHNlVGhyb3VnaCA9IHRo
aXMtPm1hcmdpbnNDb2xsYXBzZVRocm91Z2gobGF5b3V0Qm94KTsKICAgICBpZiAobWFyZ2luc0Nv
bGxhcHNlVGhyb3VnaCkgewogICAgICAgICBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlID0g
Y29tcHV0ZWRQb3NpdGl2ZUFuZE5lZ2F0aXZlTWFyZ2luKHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5C
ZWZvcmUsIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcik7CiAgICAgICAgIHBvc2l0aXZlTmVn
YXRpdmVNYXJnaW5BZnRlciA9IHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZvcmU7CiAgICAgfQog
Ci0gICAgYXV0byBiZWZvcmVNYXJnaW5Jc0NvbGxhcHNlZFZhbHVlID0gbWFyZ2luQmVmb3JlQ29s
bGFwc2VzV2l0aEZpcnN0SW5GbG93Q2hpbGRNYXJnaW5CZWZvcmUobGF5b3V0U3RhdGUsIGxheW91
dEJveCkgfHwgbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2libGluZ01hcmdpbkFm
dGVyKGxheW91dFN0YXRlLCBsYXlvdXRCb3gpOwotICAgIGF1dG8gYWZ0ZXJNYXJnaW5Jc0NvbGxh
cHNlZFZhbHVlID0gbWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2lu
QWZ0ZXIobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CisgICAgYXV0byBiZWZvcmVNYXJnaW5Jc0Nv
bGxhcHNlZFZhbHVlID0gbWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG93Q2hpbGRN
YXJnaW5CZWZvcmUobGF5b3V0Qm94KSB8fCBtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlv
dXNTaWJsaW5nTWFyZ2luQWZ0ZXIobGF5b3V0Qm94KTsKKyAgICBhdXRvIGFmdGVyTWFyZ2luSXND
b2xsYXBzZWRWYWx1ZSA9IG1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDaGlsZE1h
cmdpbkFmdGVyKGxheW91dEJveCk7CiAKICAgICBpZiAoKGJlZm9yZU1hcmdpbklzQ29sbGFwc2Vk
VmFsdWUgJiYgYWZ0ZXJNYXJnaW5Jc0NvbGxhcHNlZFZhbHVlKSB8fCBtYXJnaW5zQ29sbGFwc2VU
aHJvdWdoKQogICAgICAgICByZXR1cm4geyBtYXJnaW5WYWx1ZShwb3NpdGl2ZU5lZ2F0aXZlTWFy
Z2luQmVmb3JlKSwgbWFyZ2luVmFsdWUocG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkFmdGVyKSwgbWFy
Z2luc0NvbGxhcHNlVGhyb3VnaCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CmluZGV4IDUwOGQ2NjEyOWQxNDg3YzRlODQ0MDkzOTNkYTMzNDA5MTllYTdmODkuLjBkZDFiYzBi
YTQ5OThhOTY1MWU1MWI3ZDA4ZDFmZTFmYzQ4YWJhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gq
IG5leHRJblByZU9yZGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBDb250YWluZXImIHMK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0KCkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCgpCiB7
CiAgICAgaWYgKCFpczxDb250YWluZXI+KHJvb3QoKSkpCiAgICAgICAgIHJldHVybjsKQEAgLTk5
LDEzICs5OSwxMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKSBjb25z
dAogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8
ICJbRW5kXSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgi
IDw8ICZyb290IDw8ICIpIik7CiB9CiAKLUZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoKSBjb25zdAorRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpCiB7CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRT
dGF0ZSgpOwogICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRlKCkuaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpKTsKIAogICAgIGlmICghaXM8Q29udGFpbmVyPihyb290KCkpIHx8ICFkb3duY2Fz
dDxDb250YWluZXI+KHJvb3QoKSkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpIHsKLSAgICAg
ICAgYXV0byBjb25zdHJhaW50cyA9IEdlb21ldHJ5Ojpjb25zdHJhaW5CeU1pbk1heFdpZHRoKHJv
b3QoKSwgeyB9KTsKKyAgICAgICAgYXV0byBjb25zdHJhaW50cyA9IGdlb21ldHJ5KCkuY29uc3Ry
YWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgfSk7CiAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3RyYWludHMpOwogICAgICAgICByZXR1
cm4gY29uc3RyYWludHM7CiAgICAgfQpAQCAtMTQ1LDEyICsxNDUsMTIgQEAgRm9ybWF0dGluZ0Nv
bnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkSW4KICAgICAgICAgcmV0dXJuIElubGluZUxheW91dCgqdGhpcykuY29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aChmb3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpLCBhdmFpbGFibGVX
aWR0aCk7CiAgICAgfTsKIAotICAgIGF1dG8gY29uc3RyYWludHMgPSBHZW9tZXRyeTo6Y29uc3Ry
YWluQnlNaW5NYXhXaWR0aChyb290LCB7IG1heGltdW1MaW5lV2lkdGgoMCksIG1heGltdW1MaW5l
V2lkdGgoTGF5b3V0VW5pdDo6bWF4KCkpIH0pOworICAgIGF1dG8gY29uc3RyYWludHMgPSBnZW9t
ZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCwgeyBtYXhpbXVtTGluZVdpZHRoKDAp
LCBtYXhpbXVtTGluZVdpZHRoKExheW91dFVuaXQ6Om1heCgpKSB9KTsKICAgICBmb3JtYXR0aW5n
U3RhdGUoKS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKICAgICBy
ZXR1cm4gY29uc3RyYWludHM7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omlu
aXRpYWxpemVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9yR2VuZXJpY0lubGluZUJveChjb25zdCBC
b3gmIGxheW91dEJveCkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRp
YWxpemVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9yR2VuZXJpY0lubGluZUJveChjb25zdCBCb3gm
IGxheW91dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQW5vbnltb3VzKCkgfHwgbGF5
b3V0Qm94LmlzTGluZUJyZWFrQm94KCkpOwogICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRT
dGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFyZ2luQm9yZGVy
QW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCbwogICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyh7
IH0pOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlTWFyZ2luQm9y
ZGVyQW5kUGFkZGluZ0ZvcklubGluZUNvbnRhaW5lcihjb25zdCBDb250YWluZXImIGNvbnRhaW5l
ciwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykgY29uc3QKK3ZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9ySW5saW5lQ29u
dGFpbmVyKGNvbnN0IENvbnRhaW5lciYgY29udGFpbmVyLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1
c2VkVmFsdWVzKQogewogICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnRhaW5lciwgdXNl
ZFZhbHVlcyk7CiAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoY29udGFpbmVyLCB1c2VkVmFs
dWVzKTsKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvcklubGluZUNvbnRhaW5lcihjbwogICAgIGxh
eW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpLnNldFZlcnRpY2Fs
TWFyZ2luKHsgeyB9LCB7IH0gfSk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYgZm9ybWF0
dGluZ1Jvb3QpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50
cmluc2ljV2lkdGhGb3JGb3JtYXR0aW5nUm9vdChjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290KQog
ewogICAgIEFTU0VSVChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0
KCkpOwogICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKQEAgLTE3
OSwzMyArMTc5LDMzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRy
aW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYKICAgICBjb21wdXRlSG9yaXpv
bnRhbE1hcmdpbihmb3JtYXR0aW5nUm9vdCwgdXNlZFZhbHVlcyk7CiAKICAgICBJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOwotICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBH
ZW9tZXRyeTo6Zml4ZWRWYWx1ZShmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgp
KSkKKyAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0gZ2VvbWV0cnkoKS5maXhlZFZhbHVlKGZvcm1h
dHRpbmdSb290LnN0eWxlKCkubG9naWNhbFdpZHRoKCkpKQogICAgICAgICBjb25zdHJhaW50cyA9
IHsgKmZpeGVkV2lkdGgsICpmaXhlZFdpZHRoIH07CiAgICAgZWxzZQogICAgICAgICBjb25zdHJh
aW50cyA9IGxheW91dFN0YXRlLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdSb290
KS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgY29uc3RyYWludHMg
PSBHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0aChmb3JtYXR0aW5nUm9vdCwgY29uc3Ry
YWludHMpOworICAgIGNvbnN0cmFpbnRzID0gZ2VvbWV0cnkoKS5jb25zdHJhaW5CeU1pbk1heFdp
ZHRoKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cyk7CiAgICAgY29uc3RyYWludHMuZXhwYW5k
KGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZm9ybWF0dGluZ1Jvb3QpLmhvcml6
b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNl
dEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFp
bnRzKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250
YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRW
YWx1ZXMpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpv
bnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNl
ZFZhbHVlcykKIHsKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKKyAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IGdlb21ldHJ5KCkuY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgYXV0byYgZGlzcGxheUJveCA9
IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIGRp
c3BsYXlCb3guc2V0SG9yaXpvbnRhbENvbXB1dGVkTWFyZ2luKGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbik7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQudmFsdWVPcigwKSB9KTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkVmFsdWVzKSBjb25zdAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkVmFsdWVzKQogewogICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0
U3RhdGUoKTsKICAgICBXaWR0aEFuZE1hcmdpbiB3aWR0aEFuZE1hcmdpbjsKICAgICBpZiAobGF5
b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHdpZHRoQW5kTWFyZ2luID0g
R2VvbWV0cnk6OmZsb2F0aW5nV2lkdGhBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwg
dXNlZFZhbHVlcyk7CisgICAgICAgIHdpZHRoQW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5mbG9hdGlu
Z1dpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgZWxzZSBpZiAobGF5
b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAgICAgICAgd2lkdGhBbmRNYXJnaW4gPSBHZW9t
ZXRyeTo6aW5saW5lQmxvY2tXaWR0aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1
c2VkVmFsdWVzKTsKKyAgICAgICAgd2lkdGhBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmlubGluZUJs
b2NrV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBlbHNlIGlmIChs
YXlvdXRCb3gucmVwbGFjZWQoKSkKLSAgICAgICAgd2lkdGhBbmRNYXJnaW4gPSBHZW9tZXRyeTo6
aW5saW5lUmVwbGFjZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94LCB1c2Vk
VmFsdWVzKTsKKyAgICAgICAgd2lkdGhBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmlubGluZVJlcGxh
Y2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBlbHNlCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0yMTUsMTcgKzIxNSwxNyBAQCB2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBs
YXlvdXRCb3gsIFVzZWRIbwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbENvbXB1dGVkTWFy
Z2luKHdpZHRoQW5kTWFyZ2luLmNvbXB1dGVkTWFyZ2luKTsKIH0KIAotdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJv
eCkgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRN
YXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0
aGlzLT5sYXlvdXRTdGF0ZSgpOwogCiAgICAgSGVpZ2h0QW5kTWFyZ2luIGhlaWdodEFuZE1hcmdp
bjsKICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIGhl
aWdodEFuZE1hcmdpbiA9IEdlb21ldHJ5OjpmbG9hdGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRT
dGF0ZSwgbGF5b3V0Qm94LCB7IH0sIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94V2lkdGgoKSB9KTsKKyAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5m
bG9hdGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHsgfSwgVXNlZEhvcml6b250YWxWYWx1
ZXMgeyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH0pOwogICAgIGVsc2UgaWYgKGxheW91dEJv
eC5pc0lubGluZUJsb2NrQm94KCkpCi0gICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IEdlb21ldHJ5
OjppbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKKyAg
ICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5pbmxpbmVCbG9ja0hlaWdodEFuZE1h
cmdpbihsYXlvdXRCb3gpOwogICAgIGVsc2UgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQotICAg
ICAgICBoZWlnaHRBbmRNYXJnaW4gPSBHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRIZWlnaHRBbmRN
YXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgeyB9KTsKKyAgICAgICAgaGVpZ2h0QW5kTWFy
Z2luID0gZ2VvbWV0cnkoKS5pbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gs
IHsgfSk7CiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtMjM0
LDcgKzIzNCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRB
bmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiAgICAgZGlzcGxheUJveC5zZXRW
ZXJ0aWNhbE1hcmdpbih7IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4sIHsgfSB9
KTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRSb290KGNvbnN0IEJveCYgcm9vdCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVl
cykgY29uc3QKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdD
b250ZXh0Um9vdChjb25zdCBCb3gmIHJvb3QsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRWYWx1
ZXMpCiB7CiAgICAgQVNTRVJUKHJvb3QuaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCByb290Lmlz
SW5saW5lQmxvY2tCb3goKSk7CiAgICAgQVNTRVJUKHVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIHJvb3QsIFVzZWRICiAgICAg
Zm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxvd0NvbnRlbnQoKTsKIH0KIAotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJ
bmxpbmVCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRW
YWx1ZXMpIGNvbnN0Cit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhB
bmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhv
cml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykKIHsKICAgICBBU1NFUlQoIWxheW91dEJveC5pc0Nv
bnRhaW5lcigpKTsKICAgICBBU1NFUlQoIWxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdD
b250ZXh0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggZmZjNDkyZDBk
MmI3NGFiZTEyNzkzOTM0MmNiNTczYjczY2Q4YmQzZS4uZTI1MzQ4NTAzZTZhNzA0NGM1NGM4NTYw
YmQyZjFmYmYxZmJiMGY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC00
NiwxMCArNDYsMTAgQEAgY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQgOiBwdWJsaWMgRm9y
bWF0dGluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQpOwogcHVibGljOgogICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0KGNvbnN0
IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmKTsKLSAg
ICB2b2lkIGxheW91dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJy
aWRlOwogCiAgICAgY2xhc3MgSW5saW5lTGF5b3V0IHsKICAgICBwdWJsaWM6CkBAIC02OCwyNiAr
NjgsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgQ29udGFpbmVyJiBtX2Zvcm1hdHRpbmdS
b290OwogICAgIH07CiAKLSAgICBjbGFzcyBRdWlya3MgeworICAgIGNsYXNzIFF1aXJrcyA6IHB1
YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBib29sIGxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExheW91dFN0YXRlJiwg
Y29uc3QgTGluZTo6Q29udGVudCYpOwotICAgICAgICBzdGF0aWMgTGluZTo6SW5pdGlhbENvbnN0
cmFpbnRzOjpIZWlnaHRBbmRCYXNlbGluZSBsaW5lSGVpZ2h0Q29uc3RyYWludHMoY29uc3QgTGF5
b3V0U3RhdGUmLCBjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgUXVpcmtzKExh
eW91dFN0YXRlJik7CisKKyAgICAgICAgYm9vbCBsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhj
b25zdCBMaW5lOjpDb250ZW50JikgY29uc3Q7CisgICAgICAgIExpbmU6OkluaXRpYWxDb25zdHJh
aW50czo6SGVpZ2h0QW5kQmFzZWxpbmUgbGluZUhlaWdodENvbnN0cmFpbnRzKGNvbnN0IEJveCYg
Zm9ybWF0dGluZ1Jvb3QpIGNvbnN0OwogICAgIH07CisgICAgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7IHJldHVybiBRdWlya3MobGF5b3V0U3RhdGUoKSk7
IH0KIAogICAgIGNsYXNzIEdlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGlubGlu
ZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0g
ICAgICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBpbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKExh
eW91dFN0YXRlJiwgY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1ZXMpOworICAgICAgICBH
ZW9tZXRyeShMYXlvdXRTdGF0ZSYpOworCisgICAgICAgIEhlaWdodEFuZE1hcmdpbiBpbmxpbmVC
bG9ja0hlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmKSBjb25zdDsKKyAgICAgICAgV2lkdGhBbmRN
YXJnaW4gaW5saW5lQmxvY2tXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyk7CiAgICAgfTsKKyAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkg
Z2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBHZW9tZXRyeShsYXlvdXRTdGF0ZSgpKTsgfQogCi0g
ICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiwgVXNlZEhvcml6
b250YWxWYWx1ZXMpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZU1hcmdpbkJvcmRlckFuZFBhZGRp
bmdGb3JJbmxpbmVDb250YWluZXIoY29uc3QgQ29udGFpbmVyJiwgVXNlZEhvcml6b250YWxWYWx1
ZXMpIGNvbnN0OwotICAgIHZvaWQgaW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JH
ZW5lcmljSW5saW5lQm94KGNvbnN0IEJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUludHJp
bnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JikgY29uc3Q7Ci0gICAgdm9pZCBj
b21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmLCBVc2Vk
SG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bihjb25zdCBCb3gmLCBVc2VkSG9yaXpvbnRhbFZhbHVlcykgY29uc3Q7Ci0gICAgdm9pZCBjb21w
dXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZVdp
ZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKSBjb25zdDsKKyAg
ICB2b2lkIGxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmLCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyk7CisgICAgdm9pZCBjb21wdXRlTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0Zvcklu
bGluZUNvbnRhaW5lcihjb25zdCBDb250YWluZXImLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyk7Cisg
ICAgdm9pZCBpbml0aWFsaXplTWFyZ2luQm9yZGVyQW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVC
b3goY29uc3QgQm94Jik7CisgICAgdm9pZCBjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGb3JtYXR0
aW5nUm9vdChjb25zdCBCb3gmKTsKKyAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZEhlaWdodEZvclJl
cGxhY2VkSW5saW5lQm94KGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFsdWVzKTsKKyAgICB2
b2lkIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYsIFVzZWRIb3Jpem9udGFsVmFs
dWVzKTsKKyAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94Jik7CisgICAg
dm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgVXNlZEhvcml6b250YWxWYWx1
ZXMpOwogCiAgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudCgpIGNvbnN0OwogCkBAIC05Niw2
ICsxMDIsMTYgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGluZTsKIH07CiAKK2lubGlu
ZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSkKKyAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShsYXlvdXRT
dGF0ZSkKK3sKK30KKworaW5saW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OlF1
aXJrcyhMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCisgICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzKGxheW91dFN0YXRlKQoreworfQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggOTMyMjFhMzZmNmY0N2U4
Yzg0NTBkZDUxNDgyNGMxZWMyNzQwMjdkOS4uNDk3NzIxNzI0YmE3OGNiZjgzN2U2Mzk3NmRhZjVj
ZTE2MjEyZDYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBMYXlvdXQgewogCi1XaWR0aEFuZE1hcmdpbiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4oTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgVXNlZEhvcml6b250YWxWYWx1ZXMg
dXNlZFZhbHVlcykKK1dpZHRoQW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lQmxvY2tXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250
ZXh0Um9vdCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykKIHsKICAgICBBU1NFUlQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LmlzSW5GbG93KCkpOwogCkBAIC00Niw3ICs0Niw3IEBAIFdp
ZHRoQW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxv
Y2tXaWR0aEFuZE1hcmdpbihMYXlvCiAKICAgICAvLyBFeGFjdGx5IGFzIGlubGluZSByZXBsYWNl
ZCBlbGVtZW50cy4KICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290LnJlcGxhY2VkKCkpCi0g
ICAgICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZFdpZHRoQW5kTWFyZ2luKGxheW91dFN0YXRlLCBm
b3JtYXR0aW5nQ29udGV4dFJvb3QsIHVzZWRWYWx1ZXMpOworICAgICAgICByZXR1cm4gaW5saW5l
UmVwbGFjZWRXaWR0aEFuZE1hcmdpbihmb3JtYXR0aW5nQ29udGV4dFJvb3QsIHVzZWRWYWx1ZXMp
OwogCiAgICAgLy8gMTAuMy45ICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMg
aW4gbm9ybWFsIGZsb3cKIApAQCAtNTUsNyArNTUsNyBAQCBXaWR0aEFuZE1hcmdpbiBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrV2lkdGhBbmRNYXJnaW4oTGF5
bwogICAgIC8vICMxCiAgICAgYXV0byB3aWR0aCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oZm9y
bWF0dGluZ0NvbnRleHRSb290LnN0eWxlKCkubG9naWNhbFdpZHRoKCksIHVzZWRWYWx1ZXMuY29u
dGFpbmluZ0Jsb2NrV2lkdGgudmFsdWVPcigwKSk7CiAgICAgaWYgKCF3aWR0aCkKLSAgICAgICAg
d2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dFN0YXRlLCBmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIHVzZWRWYWx1ZXMpOworICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0
dGluZ0NvbnRleHRSb290LCB1c2VkVmFsdWVzKTsKIAogICAgIC8vICMyCiAgICAgYXV0byBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgdXNlZFZhbHVlcyk7CkBAIC02MywxOCArNjMsMTggQEAg
V2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVC
bG9ja1dpZHRoQW5kTWFyZ2luKExheW8KICAgICByZXR1cm4gV2lkdGhBbmRNYXJnaW4geyAqd2lk
dGgsIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSksIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1KSB9LCBjb21wdXRlZEhvcml6b250
YWxNYXJnaW4gfTsKIH0KIAotSGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKK0hlaWdodEFuZE1hcmdpbiBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNJ
bkZsb3coKSk7CiAKICAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9j
ay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycg
cmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVs
ZW1lbnRzCiAgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4gaW5s
aW5lUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4obGF5b3V0U3RhdGUsIGxheW91dEJveCwgeyB9KTsK
KyAgICAgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwg
eyB9KTsKIAogICAgIC8vIDEwLjYuNiBDb21wbGljYXRlZCBjYXNlcwogICAgIC8vIC0gJ0lubGlu
ZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KLSAgICBhdXRvIHVzZWRIb3Jpem9udGFs
VmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgp
IH07Ci0gICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0U3RhdGUsIGxheW91dEJveCwg
eyB9LCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVl
cyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07
CisgICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0Qm94LCB7IH0sIHVzZWRIb3Jpem9u
dGFsVmFsdWVzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0TGluZUxheW91dC5jcHAKaW5kZXggMGEyMTMwMjEzZjEyNGVlYjVmN2Y3MTEyZTg4NmQ3MTJj
NTMxZGEwNi4uOWNmYzNlYzZiOTNhZWNhNzY4ZTRjNzEyZmM4Y2I4ZWNmZjY5MTJhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC0x
MDAsNyArMTAwLDcgQEAgc3RydWN0IExpbmVDb250ZW50IHsKIAogY2xhc3MgTGluZUxheW91dCB7
CiBwdWJsaWM6Ci0gICAgTGluZUxheW91dChjb25zdCBMYXlvdXRTdGF0ZSYsIGNvbnN0IExpbmVJ
bnB1dCYpOworICAgIExpbmVMYXlvdXQoTGF5b3V0U3RhdGUmLCBjb25zdCBMaW5lSW5wdXQmKTsK
IAogICAgIExpbmVDb250ZW50IGxheW91dCgpOwogCkBAIC0xMjksNyArMTI5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgTGF5b3V0VW5pdCBtX3dpZHRoOwogICAgIH07CiAKLSAgICBjb25zdCBMYXlv
dXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsKKyAgICBMYXlvdXRTdGF0ZSYgbV9sYXlvdXRTdGF0ZTsK
ICAgICBjb25zdCBMaW5lSW5wdXQmIG1fbGluZUlucHV0OwogICAgIExpbmUgbV9saW5lOwogICAg
IExpbmVCcmVha2VyIG1fbGluZUJyZWFrZXI7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBMaW5l
TGF5b3V0OjpVbmNvbW1pdHRlZENvbnRlbnQ6OnJlc2V0KCkKICAgICBtX3dpZHRoID0gMDsKIH0K
IAotTGluZUxheW91dDo6TGluZUxheW91dChjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IGNvbnN0IExpbmVJbnB1dCYgbGluZUlucHV0KQorTGluZUxheW91dDo6TGluZUxheW91dChMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IExpbmVJbnB1dCYgbGluZUlucHV0KQogICAgIDog
bV9sYXlvdXRTdGF0ZShsYXlvdXRTdGF0ZSkKICAgICAsIG1fbGluZUlucHV0KGxpbmVJbnB1dCkK
ICAgICAsIG1fbGluZShsYXlvdXRTdGF0ZSwgbGluZUlucHV0LmluaXRpYWxDb25zdHJhaW50cywg
bGluZUlucHV0LnNraXBWZXJ0aWNhbEFsaWdtZW50KQpAQCAtMjc5LDggKzI3OSw5IEBAIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OklubGluZUxheW91dChjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGlu
ZUxheW91dDo6bGF5b3V0KGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGF5b3V0VW5p
dCB3aWR0aENvbnN0cmFpbnQpIGNvbnN0CiB7Ci0gICAgYXV0byYgZm9ybWF0dGluZ1Jvb3REaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KG1fZm9ybWF0dGlu
Z1Jvb3QpOwotICAgIGF1dG8mIGZsb2F0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlz
aGVkRm9ybWF0dGluZ1N0YXRlKG1fZm9ybWF0dGluZ1Jvb3QpLmZsb2F0aW5nU3RhdGUoKTsKKyAg
ICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZm9y
bWF0dGluZ1Jvb3REaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJv
eChtX2Zvcm1hdHRpbmdSb290KTsKKyAgICBhdXRvJiBmbG9hdGluZ1N0YXRlID0gbGF5b3V0U3Rh
dGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUobV9mb3JtYXR0aW5nUm9vdCkuZmxvYXRpbmdT
dGF0ZSgpOwogCiAgICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGZvcm1hdHRpbmdSb290RGlzcGxh
eUJveC5jb250ZW50Qm94VG9wKCk7CiAgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBmb3JtYXR0
aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveExlZnQoKTsKQEAgLTMyMiwxMCArMzIzLDExIEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6bGF5b3V0KGNvbnN0
IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtCiAgICAgfTsKIAogICAgIEluZGV4QW5kUmFuZ2UgY3Vy
cmVudElubGluZUl0ZW07CisgICAgYXV0byBxdWlya3MgPSBRdWlya3MobGF5b3V0U3RhdGUpOwog
ICAgIHdoaWxlIChjdXJyZW50SW5saW5lSXRlbS5pbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkg
ewotICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExpbmVJbnB1dCB7IHsgeyBsaW5lTG9naWNhbExl
ZnQsIGxpbmVMb2dpY2FsVG9wIH0sIHdpZHRoQ29uc3RyYWludCwgUXVpcmtzOjpsaW5lSGVpZ2h0
Q29uc3RyYWludHMobGF5b3V0U3RhdGUoKSwgbV9mb3JtYXR0aW5nUm9vdCkgfSwgTGluZTo6U2tp
cFZlcnRpY2FsQWxpZ21lbnQ6Ok5vLCBjdXJyZW50SW5saW5lSXRlbSwgaW5saW5lSXRlbXMgfTsK
KyAgICAgICAgYXV0byBsaW5lSW5wdXQgPSBMaW5lSW5wdXQgeyB7IHsgbGluZUxvZ2ljYWxMZWZ0
LCBsaW5lTG9naWNhbFRvcCB9LCB3aWR0aENvbnN0cmFpbnQsIHF1aXJrcy5saW5lSGVpZ2h0Q29u
c3RyYWludHMobV9mb3JtYXR0aW5nUm9vdCkgfSwgTGluZTo6U2tpcFZlcnRpY2FsQWxpZ21lbnQ6
Ok5vLCBjdXJyZW50SW5saW5lSXRlbSwgaW5saW5lSXRlbXMgfTsKICAgICAgICAgYXBwbHlGbG9h
dENvbnN0cmFpbnQobGluZUlucHV0KTsKLSAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IExpbmVM
YXlvdXQobGF5b3V0U3RhdGUoKSwgbGluZUlucHV0KS5sYXlvdXQoKTsKKyAgICAgICAgYXV0byBs
aW5lQ29udGVudCA9IExpbmVMYXlvdXQobGF5b3V0U3RhdGUsIGxpbmVJbnB1dCkubGF5b3V0KCk7
CiAgICAgICAgIGNyZWF0ZURpc3BsYXlSdW5zKCpsaW5lQ29udGVudC5ydW5zLCBsaW5lQ29udGVu
dC5mbG9hdHMsIHdpZHRoQ29uc3RyYWludCk7CiAgICAgICAgIGlmICghbGluZUNvbnRlbnQubGFz
dENvbW1pdHRlZCkgewogICAgICAgICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwdXR0aW5n
IGFueSBjb250ZW50IG9uIHRoZSBsaW5lLgpAQCAtMzQxLDE0ICszNDMsMTYgQEAgdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lSXRl
bXMmIGlubGluZUl0ZW0KIAogTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5s
aW5lTGF5b3V0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IElubGluZUl0ZW1zJiBpbmxp
bmVJdGVtcywgTGF5b3V0VW5pdCB3aWR0aENvbnN0cmFpbnQpIGNvbnN0CiB7CisgICAgYXV0byYg
bGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwogICAgIExheW91dFVuaXQgbWF4aW11
bUxpbmVXaWR0aDsKICAgICBJbmRleEFuZFJhbmdlIGN1cnJlbnRJbmxpbmVJdGVtOworICAgIGF1
dG8gcXVpcmtzID0gUXVpcmtzKGxheW91dFN0YXRlKTsKICAgICB3aGlsZSAoY3VycmVudElubGlu
ZUl0ZW0uaW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkpIHsKLSAgICAgICAgYXV0byBsaW5lQ29u
dGVudCA9IExpbmVMYXlvdXQobGF5b3V0U3RhdGUoKSwgeyB7IHsgfSwgd2lkdGhDb25zdHJhaW50
LCBRdWlya3M6OmxpbmVIZWlnaHRDb25zdHJhaW50cyhsYXlvdXRTdGF0ZSgpLCBtX2Zvcm1hdHRp
bmdSb290KSB9LCBMaW5lOjpTa2lwVmVydGljYWxBbGlnbWVudDo6WWVzLCBjdXJyZW50SW5saW5l
SXRlbSwgaW5saW5lSXRlbXMgfSkubGF5b3V0KCk7CisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQg
PSBMaW5lTGF5b3V0KGxheW91dFN0YXRlLCB7IHsgeyB9LCB3aWR0aENvbnN0cmFpbnQsIHF1aXJr
cy5saW5lSGVpZ2h0Q29uc3RyYWludHMobV9mb3JtYXR0aW5nUm9vdCkgfSwgTGluZTo6U2tpcFZl
cnRpY2FsQWxpZ21lbnQ6OlllcywgY3VycmVudElubGluZUl0ZW0sIGlubGluZUl0ZW1zIH0pLmxh
eW91dCgpOwogICAgICAgICBjdXJyZW50SW5saW5lSXRlbSA9IHsgbGluZUNvbnRlbnQubGFzdENv
bW1pdHRlZC0+aW5kZXggKyAxLCBXVEY6Om51bGxvcHQgfTsKICAgICAgICAgTGF5b3V0VW5pdCBm
bG9hdHNXaWR0aDsKICAgICAgICAgZm9yIChhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVudC5m
bG9hdHMpCi0gICAgICAgICAgICBmbG9hdHNXaWR0aCArPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goZmxvYXRJdGVtLT5sYXlvdXRCb3goKSkubWFyZ2luQm94V2lkdGgoKTsK
KyAgICAgICAgICAgIGZsb2F0c1dpZHRoICs9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goZmxvYXRJdGVtLT5sYXlvdXRCb3goKSkubWFyZ2luQm94V2lkdGgoKTsKICAgICAgICAg
bWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGZsb2F0c1dpZHRo
ICsgbGluZUNvbnRlbnQucnVucy0+bG9naWNhbFdpZHRoKCkpOwogICAgIH0KICAgICByZXR1cm4g
bWF4aW11bUxpbmVXaWR0aDsKQEAgLTM1NiwxNSArMzYwLDE2IEBAIExheW91dFVuaXQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aChj
b25zdCBJCiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6Y3Jl
YXRlRGlzcGxheVJ1bnMoY29uc3QgTGluZTo6Q29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IFZl
Y3RvcjxXZWFrUHRyPElubGluZUl0ZW0+PiYgZmxvYXRzLCBMYXlvdXRVbml0IHdpZHRoQ29uc3Ry
YWludCkgY29uc3QKIHsKLSAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxp
bmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3Rh
dGUobV9mb3JtYXR0aW5nUm9vdCkpOworICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxpbmVG
b3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKG1f
Zm9ybWF0dGluZ1Jvb3QpKTsKICAgICBhdXRvJiBmbG9hdGluZ1N0YXRlID0gZm9ybWF0dGluZ1N0
YXRlLmZsb2F0aW5nU3RhdGUoKTsKICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5n
Q29udGV4dCB7IGZsb2F0aW5nU3RhdGUgfTsKIAogICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWly
IGZpbmFsIHBvc2l0aW9uLgogICAgIGZvciAoYXV0byBmbG9hdEl0ZW0gOiBmbG9hdHMpIHsKICAg
ICAgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0tPmxheW91dEJveCgpOwotICAgICAgICBB
U1NFUlQobGF5b3V0U3RhdGUoKS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7Ci0gICAgICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxv
YXRCb3gpOworICAgICAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChmbG9hdEJv
eCkpOworICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZv
ckxheW91dEJveChmbG9hdEJveCk7CiAgICAgICAgIC8vIFNldCBzdGF0aWMgcG9zaXRpb24gZmly
c3QuCiAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmVDb250ZW50LmxvZ2ljYWxM
ZWZ0KCksIGxpbmVDb250ZW50LmxvZ2ljYWxUb3AoKSB9KTsKICAgICAgICAgLy8gRmxvYXQgaXQu
CkBAIC0zODYsMTEgKzM5MSwxMiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxp
bmVMYXlvdXQ6OmNyZWF0ZURpc3BsYXlSdW5zKGNvbnN0IExpbmU6OkNvbnRlbgogICAgIGF1dG8g
bGluZUJveFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgbGluZUNvbnRlbnQubG9naWNhbFRvcCgpLCBs
aW5lQ29udGVudC5sb2dpY2FsTGVmdCgpLCAwLCBsaW5lQ29udGVudC5sb2dpY2FsSGVpZ2h0KCl9
OwogICAgIC8vIENyZWF0ZSBmaW5hbCBkaXNwbGF5IHJ1bnMuCiAgICAgYXV0byYgbGluZVJ1bnMg
PSBsaW5lQ29udGVudC5ydW5zKCk7CisgICAgYXV0byBnZW9tZXRyeSA9IEdlb21ldHJ5KGxheW91
dFN0YXRlKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5z
aXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgbGluZVJ1biA9IGxpbmVSdW5zLmF0KGlu
ZGV4KTsKICAgICAgICAgYXV0byYgbG9naWNhbFJlY3QgPSBsaW5lUnVuLT5sb2dpY2FsUmVjdCgp
OwogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLT5sYXlvdXRCb3goKTsKLSAgICAg
ICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOworICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogCiAgICAgICAgIGlmIChsaW5lUnVuLT5p
c0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQobG9naWNh
bFJlY3QudG9wTGVmdCgpKTsKQEAgLTQwNCw3ICs0MTAsNyBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNyZWF0ZURpc3BsYXlSdW5zKGNvbnN0IExpbmU6OkNv
bnRlbgogICAgICAgICBpZiAobGluZVJ1bi0+aXNCb3goKSkgewogICAgICAgICAgICAgYXV0byB0
b3BMZWZ0ID0gbG9naWNhbFJlY3QudG9wTGVmdCgpOwogICAgICAgICAgICAgaWYgKGxheW91dEJv
eC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICB0b3BMZWZ0ICs9IEdlb21l
dHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0U3RhdGUoKSwgbGF5b3V0
Qm94KTsKKyAgICAgICAgICAgICAgICB0b3BMZWZ0ICs9IGdlb21ldHJ5LmluRmxvd1Bvc2l0aW9u
ZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gpOwogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRU
b3BMZWZ0KHRvcExlZnQpOwogICAgICAgICAgICAgbGluZUJveFJlY3QuZXhwYW5kSG9yaXpvbnRh
bGx5KGxvZ2ljYWxSZWN0LndpZHRoKCkpOwogICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFk
ZElubGluZVJ1bihtYWtlVW5pcXVlPERpc3BsYXk6OlJ1bj4obG9naWNhbFJlY3QpKTsKQEAgLTQy
MSw3ICs0MjcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6
OmNyZWF0ZURpc3BsYXlSdW5zKGNvbnN0IExpbmU6OkNvbnRlbgogICAgICAgICAvLyBJbmxpbmUg
bGV2ZWwgY29udGFpbmVyIGVuZCAoPC9zcGFuPikKICAgICAgICAgaWYgKGxpbmVSdW4tPmlzQ29u
dGFpbmVyRW5kKCkpIHsKICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlv
bmVkKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZmxvd09mZnNldCA9IEdlb21ldHJ5Ojpp
bkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0U3RhdGUoKSwgbGF5b3V0Qm94KTsK
KyAgICAgICAgICAgICAgICBhdXRvIGluZmxvd09mZnNldCA9IGdlb21ldHJ5LmluRmxvd1Bvc2l0
aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gpOwogICAgICAgICAgICAgICAgIGRpc3BsYXlC
b3gubW92ZUhvcml6b250YWxseShpbmZsb3dPZmZzZXQud2lkdGgoKSk7CiAgICAgICAgICAgICAg
ICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShpbmZsb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
CmluZGV4IDlkMmU4YWI2MGM3OTMxMmM0MzNiZjY3YjM3YTBkMGQ1MjUxNzBiZTguLjFlMDM3YTY4
Y2Q0NDE4OGE4ZDFhZGU5YjY4ZTRjNDc3MTU2M2IyOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTM2LDEwICszNiwxMSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWJvb2wgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcoY29uc3QgTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBjb25zdCBMaW5lOjpDb250ZW50JiBsaW5lQ29udGVudCkKK2Jvb2wg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNp
bmcoY29uc3QgTGluZTo6Q29udGVudCYgbGluZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgLy8gQ29s
bGFwc2UgbGluZSBkZXNjZW50IGluIGxpbWl0ZWQgYW5kIGZ1bGwgcXVpcmsgbW9kZSB3aGVuIHRo
ZXJlJ3Mgbm8gYmFzZWxpbmUgYWxpZ25lZCBjb250ZW50IG9yCiAgICAgLy8gdGhlIGJhc2VsaW5l
IGFsaWduZWQgY29udGVudCBoYXMgbm8gZGVzY2VudC4KKyAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9
IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgaWYgKCFsYXlvdXRTdGF0ZS5pblF1aXJrc01vZGUo
KSAmJiAhbGF5b3V0U3RhdGUuaW5MaW1pdGVkUXVpcmtzTW9kZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTgxLDEzICs4MiwxMyBAQCBib29sIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpRdWlya3M6OmxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExheW91dFN0YQogICAg
IHJldHVybiB0cnVlOwogfQogCi1MaW5lOjpJbml0aWFsQ29uc3RyYWludHM6OkhlaWdodEFuZEJh
c2VsaW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmxpbmVIZWlnaHRDb25zdHJh
aW50cyhjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgZm9ybWF0dGlu
Z1Jvb3QpCitMaW5lOjpJbml0aWFsQ29uc3RyYWludHM6OkhlaWdodEFuZEJhc2VsaW5lIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmxpbmVIZWlnaHRDb25zdHJhaW50cyhjb25zdCBC
b3gmIGZvcm1hdHRpbmdSb290KSBjb25zdAogewogICAgIC8vIGNvbXB1dGVkTGluZUhlaWdodCB0
YWtlcyBmb250LXNpemUgaW50byBhY2NvdW50IHdoZW4gbGluZS1oZWlnaHQgaXMgbm90IHNldC4K
ICAgICAvLyBTdHJ1dCBpcyB0aGUgaW1hZ2luYXJ5IGJveCB0aGF0IHdlIHB1dCBvbiBldmVyeSBs
aW5lLiBJdCBzZXRzIHRoZSBpbml0aWFsIHZlcnRpY2FsIGNvbnN0cmFpbnRzIGZvciBlYWNoIG5l
dyBsaW5lLgogICAgIGF1dG8gc3RydXRIZWlnaHQgPSBmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNv
bXB1dGVkTGluZUhlaWdodCgpOwogICAgIGF1dG8gc3RydXRCYXNlbGluZU9mZnNldCA9IExpbmU6
OmhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmZvbnRNZXRyaWNzKCks
IHN0cnV0SGVpZ2h0KS5hc2NlbnQ7Ci0gICAgaWYgKGxheW91dFN0YXRlLmluTm9RdWlya3NNb2Rl
KCkpCisgICAgaWYgKGxheW91dFN0YXRlKCkuaW5Ob1F1aXJrc01vZGUoKSkKICAgICAgICAgcmV0
dXJuIHsgc3RydXRIZWlnaHQsIHN0cnV0QmFzZWxpbmVPZmZzZXQsIHsgfSB9OwogCiAgICAgYXV0
byBsaW5lSGVpZ2h0ID0gZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5saW5lSGVpZ2h0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUu
Y3BwCmluZGV4IGVkNjUyMDViN2RiOTliMGY2YWIxMGYzZWVlYWEwN2M0NDZiN2Y4ZDAuLjIwY2Nm
NTY5ZDIzNDlmZjM4OTNkYWViNGRlOWY3NzFmOTM4NzIzYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCkBAIC01Miw3
ICs1Miw3IEBAIExpbmU6OkNvbnRlbnQ6OlJ1bjo6UnVuKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIGNvbnN0IFRleHRDb250ZXh0JiB0ZXh0Q29uCiB7CiB9CiAKLUxpbmU6OkxpbmUoY29u
c3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbml0aWFsQ29uc3RyYWludHMmIGlu
aXRpYWxDb25zdHJhaW50cywgU2tpcFZlcnRpY2FsQWxpZ21lbnQgc2tpcFZlcnRpY2FsQWxpZ21l
bnQpCitMaW5lOjpMaW5lKExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5pdGlhbENv
bnN0cmFpbnRzJiBpbml0aWFsQ29uc3RyYWludHMsIFNraXBWZXJ0aWNhbEFsaWdtZW50IHNraXBW
ZXJ0aWNhbEFsaWdtZW50KQogICAgIDogbV9sYXlvdXRTdGF0ZShsYXlvdXRTdGF0ZSkKICAgICAs
IG1fY29udGVudChtYWtlVW5pcXVlPExpbmU6OkNvbnRlbnQ+KCkpCiAgICAgLCBtX2xvZ2ljYWxU
b3BMZWZ0KGluaXRpYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCkKQEAgLTEwOSw3ICsxMDks
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TGluZTo6Q29udGVudD4gTGluZTo6Y2xvc2UoKQogICAgICAg
ICB9CiAKICAgICAgICAgLy8gUmVtb3ZlIGRlc2NlbnQgd2hlbiBhbGwgY29udGVudCBpcyBiYXNl
bGluZSBhbGlnbmVkIGJ1dCBub25lIG9mIHRoZW0gaGF2ZSBkZXNjZW50LgotICAgICAgICBpZiAo
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnROZWVkc0NvbGxhcHNp
bmcobV9sYXlvdXRTdGF0ZSwgKm1fY29udGVudCkpIHsKKyAgICAgICAgaWYgKElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpRdWlya3MobV9sYXlvdXRTdGF0ZSkubGluZURlc2NlbnROZWVkc0NvbGxh
cHNpbmcoKm1fY29udGVudCkpIHsKICAgICAgICAgICAgIG1fbGluZUxvZ2ljYWxIZWlnaHQgLT0g
bV9iYXNlbGluZS5kZXNjZW50OwogICAgICAgICAgICAgbV9iYXNlbGluZS5kZXNjZW50ID0geyB9
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lLmgKaW5kZXggNzM3YTA3YjAzMmFmNmZmMTE5OTA5NmY3YTM3NTc1N2U2
ZGE5ZjFiNS4uMGYyYmNlZTkzOGQxNjk4ZmQ2MDc5MDNjMzcwY2M1MGIzOTkyYWIxNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUu
aApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIEhlaWdodEFuZEJhc2VsaW5lIGhl
aWdodEFuZEJhc2VsaW5lOwogICAgIH07CiAgICAgZW51bSBjbGFzcyBTa2lwVmVydGljYWxBbGln
bWVudCB7IE5vLCBZZXMgfTsKLSAgICBMaW5lKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgSW5p
dGlhbENvbnN0cmFpbnRzJiwgU2tpcFZlcnRpY2FsQWxpZ21lbnQpOworICAgIExpbmUoTGF5b3V0
U3RhdGUmLCBjb25zdCBJbml0aWFsQ29uc3RyYWludHMmLCBTa2lwVmVydGljYWxBbGlnbWVudCk7
CiAKICAgICBjbGFzcyBDb250ZW50IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC0xNTYsNyArMTU2LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGlubGluZUl0ZW1D
b250ZW50SGVpZ2h0KGNvbnN0IElubGluZUl0ZW0mKSBjb25zdDsKICAgICBib29sIGlzVmlzdWFs
bHlFbXB0eSgpIGNvbnN0OwogCi0gICAgY29uc3QgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7
CisgICAgTGF5b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENv
bnRlbnQ+IG1fY29udGVudDsKICAgICBMaXN0SGFzaFNldDxDb250ZW50OjpSdW4qPiBtX3RyaW1t
YWJsZUNvbnRlbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZv
cm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDZlZTcx
MWEzMzRhYTg4ZmNjZjAxMGVmYzhhN2I5NzgyNmE3MTBmN2UuLmExZmVmY2YzYTE4YjMwNzUwZGE2
YzNiN2Y3ZDc5YTJhZWQ1YzVmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90
YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApA
QCAtNTcsNyArNTcsNyBAQCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUYWJsZUZvcm1hdHRpbmdD
b250ZXh0KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LAogewogfQogCi12b2lkIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCgpIGNvbnN0Cit2b2lkIFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dCgpCiB7CiAgICAgYXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgp
LnRhYmxlR3JpZCgpOwogICAgIGF1dG8mIGNlbGxMaXN0ID0gZ3JpZC5jZWxscygpOwpAQCAtODgs
NyArODgsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCgpIGNvbnN0CiAg
ICAgICAgIGxheW91dFN0YXRlLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNlbGxMYXlvdXRCb3gp
LT5sYXlvdXQoKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhpcyByZXF1aXJlcyBhIDIgcGFzcyBs
YXlvdXQuCi0gICAgICAgIGF1dG8gaGVpZ2h0QW5kTWFyZ2luID0gR2VvbWV0cnk6OnRhYmxlQ2Vs
bEhlaWdodEFuZE1hcmdpbihsYXlvdXRTdGF0ZSwgY2VsbExheW91dEJveCk7CisgICAgICAgIGF1
dG8gaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS50YWJsZUNlbGxIZWlnaHRBbmRNYXJnaW4o
Y2VsbExheW91dEJveCk7CiAgICAgICAgIGNlbGxEaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWln
aHQoaGVpZ2h0QW5kTWFyZ2luLmhlaWdodCk7CiAgICAgICAgIGNlbGxEaXNwbGF5Qm94LnNldFZl
cnRpY2FsTWFyZ2luKHsgaGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbiwgeyB9IH0p
OwogCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXQoKSBjb25zdAogICAgIH0KIH0KIAotRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzKCkgY29uc3QKK0Zvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cygpCiB7CiAgICAgLy8gVGFibGVzIGhhdmUgYSBzbGlnaHR5IGRpZmZlcmVudCBj
b25jZXB0IG9mIHNocmluayB0byBmaXQuIEl0J3MgcmVhbGx5IG9ubHkgZGlmZmVyZW50IHdpdGgg
bm9uLWF1dG8gIndpZHRoIiB2YWx1ZXMsIHdoZXJlCiAgICAgLy8gYSBnZW5lcmljIHNocmluay10
byBmaXQgYmxvY2sgbGV2ZWwgYm94IGxpa2UgYSBmbG9hdCBib3ggd291bGQgYmUganVzdCBzaXpl
ZCB0byB0aGUgY29tcHV0ZWQgdmFsdWUgb2YgIndpZHRoIiwgdGFibGVzCkBAIC0xMTgsNyArMTE4
LDcgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgVGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnQKICAgICByZXR1cm4geyB3aWR0aCwgd2lkdGgg
fTsKIH0KIAotdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjplbnN1cmVUYWJsZUdyaWQoKSBj
b25zdAordm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjplbnN1cmVUYWJsZUdyaWQoKQogewog
ICAgIGF1dG8mIHRhYmxlV3JhcHBlckJveCA9IGRvd25jYXN0PENvbnRhaW5lcj4ocm9vdCgpKTsK
ICAgICBhdXRvJiB0YWJsZUdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsKQEAg
LTEzNSw3ICsxMzUsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmVuc3VyZVRhYmxl
R3JpZCgpIGNvbnN0CiAgICAgfQogfQogCi12b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKSBjb25zdAordm9pZCBUYWJsZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCkKIHsKICAgICBhdXRv
JiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKICAgICBhdXRvJiBn
cmlkID0gZm9ybWF0dGluZ1N0YXRlLnRhYmxlR3JpZCgpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZv
aWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29sdW1u
cygpIGNvbnN0CiAgICAgICAgIEFTU0VSVChjZWxsLT50YWJsZUNlbGxCb3guZXN0YWJsaXNoZXNG
b3JtYXR0aW5nQ29udGV4dCgpKTsKIAogICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoID0gbGF5
b3V0U3RhdGUoKS5jcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjZWxsLT50YWJsZUNlbGxCb3gpLT5j
b21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgaW50cmluc2ljV2lk
dGggPSBHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0aChjZWxsLT50YWJsZUNlbGxCb3gs
IGludHJpbnNpY1dpZHRoKTsKKyAgICAgICAgaW50cmluc2ljV2lkdGggPSBnZW9tZXRyeSgpLmNv
bnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbC0+dGFibGVDZWxsQm94LCBpbnRyaW5zaWNXaWR0aCk7
CiAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGlu
dHJpbnNpY1dpZHRoKTsKIAogICAgICAgICBhdXRvIGNvbHVtblNwYW4gPSBjZWxsLT5zaXplLndp
ZHRoKCk7CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCkgY29uc3QKICAgICAvLyBGSVhNRTogVGFr
ZSBjb2x1bW4gZ3JvdXAgZWxlbWVudHMgaW50byBhY2NvdW50LgogfQogCi1MYXlvdXRVbml0IFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCgpIGNvbnN0CitMYXlvdXRV
bml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCgpCiB7CiAgICAg
Ly8gQ29sdW1uIGFuZCBjYXB0aW9uIHdpZHRocyBpbmZsdWVuY2UgdGhlIGZpbmFsIHRhYmxlIHdp
ZHRoIGFzIGZvbGxvd3M6CiAgICAgLy8gSWYgdGhlICd0YWJsZScgb3IgJ2lubGluZS10YWJsZScg
ZWxlbWVudCdzICd3aWR0aCcgcHJvcGVydHkgaGFzIGEgY29tcHV0ZWQgdmFsdWUgKFcpIG90aGVy
IHRoYW4gJ2F1dG8nLCB0aGUgdXNlZCB3aWR0aCBpcyB0aGUgZ3JlYXRlciBvZgpAQCAtMTk1LDcg
KzE5NSw3IEBAIExheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRUYWJs
ZVdpZHRoKCkgY29uc3QKICAgICBhdXRvJiBjb2x1bW5zQ29udGV4dCA9IGdyaWQuY29sdW1uc0Nv
bnRleHQoKTsKICAgICBhdXRvIHRhYmxlV2lkdGhDb25zdHJhaW50cyA9IGdyaWQud2lkdGhDb25z
dHJhaW50cygpOwogCi0gICAgYXV0byB3aWR0aCA9IEdlb21ldHJ5Ojpjb21wdXRlZFZhbHVlSWZO
b3RBdXRvKHN0eWxlLndpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIHdp
ZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLndpZHRoKCksIGNv
bnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBMYXlvdXRVbml0IHVzZWRXaWR0aDsKICAgICBpZiAo
d2lkdGgpIHsKICAgICAgICAgaWYgKCp3aWR0aCA+IHRhYmxlV2lkdGhDb25zdHJhaW50cy5taW5p
bXVtKSB7CkBAIC0yMjcsNyArMjI3LDcgQEAgTGF5b3V0VW5pdCBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlZFRhYmxlV2lkdGgoKSBjb25zdAogICAgIHJldHVybiB1c2VkV2lkdGg7CiB9
CiAKLXZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6ZGlzdHJpYnV0ZUF2YWlsYWJsZVdpZHRo
KExheW91dFVuaXQgZXh0cmFIb3Jpem9udGFsU3BhY2UpIGNvbnN0Cit2b2lkIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OmRpc3RyaWJ1dGVBdmFpbGFibGVXaWR0aChMYXlvdXRVbml0IGV4dHJhSG9y
aXpvbnRhbFNwYWNlKQogewogICAgIC8vIEZJWE1FOiBSaWdodCBub3cganVzdCBkaXN0cmlidXRl
IHRoZSBleHRyYSBzcGFjZSBlcXVhbHkgYW1vbmcgdGhlIGNvbHVtbnMuCiAgICAgYXV0byYgY29s
dW1ucyA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpLmNvbHVtbnNDb250ZXh0KCkuY29s
dW1ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGlu
Zy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVm
b3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBkOGVkMjRhZjEzMzMyMjA0
OGI0NjBhNzM0MjU5NGU3M2Y1YzI3MTZmLi5mZWVlZmM5Yzk3YjQyNWQxZWZhMDRkNzczYTA4ZjFk
OGFkZDZhZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0
aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDAsMjYgKzQwLDM0
IEBAIGNsYXNzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRl
eHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoVGFibGVGb3JtYXR0aW5nQ29udGV4dCk7
CiBwdWJsaWM6CiAgICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCwgVGFibGVGb3JtYXR0aW5nU3RhdGUmKTsKLSAgICB2b2lkIGxheW91dCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6
CiAgICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBIZWlnaHRBbmRNYXJnaW4gdGFibGVDZWxs
SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CisgICAgICAg
IEdlb21ldHJ5KExheW91dFN0YXRlJik7CisKKyAgICAgICAgSGVpZ2h0QW5kTWFyZ2luIHRhYmxl
Q2VsbEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmKSBjb25zdDsKICAgICB9OworICAgIFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2Vv
bWV0cnkobGF5b3V0U3RhdGUoKSk7IH0KIAotICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
TGF5b3V0VW5pdCBjb21wdXRlZFRhYmxlV2lkdGgoKSBjb25zdDsKKyAgICBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRl
OworICAgIExheW91dFVuaXQgY29tcHV0ZWRUYWJsZVdpZHRoKCk7CiAKLSAgICB2b2lkIGVuc3Vy
ZVRhYmxlR3JpZCgpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZFdpZHRoRm9yQ29s
dW1ucygpIGNvbnN0OwotICAgIHZvaWQgZGlzdHJpYnV0ZUF2YWlsYWJsZVdpZHRoKExheW91dFVu
aXQgZXh0cmFIb3Jpem9udGFsU3BhY2UpIGNvbnN0OworICAgIHZvaWQgZW5zdXJlVGFibGVHcmlk
KCk7CisgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zKCk7CisgICAgdm9p
ZCBkaXN0cmlidXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5pdCBleHRyYUhvcml6b250YWxTcGFj
ZSk7CiAKICAgICB2b2lkIGluaXRpYWxpemVEaXNwbGF5Qm94VG9CbGFuayhEaXNwbGF5OjpCb3gm
KSBjb25zdDsKIAogICAgIFRhYmxlRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0Nv
bnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogfTsKIAoraW5saW5lIFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCisg
ICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkobGF5b3V0U3RhdGUpCit7Cit9CisKIH0K
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0
dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CmluZGV4IDQ0MDk4NWMwNDY5NzE1MmY1MTU0NDliNTEwZDQyMjU4M2E4ZTNlYzYuLjM4MDZlMDc0
YTI1OWY3M2E4MDZmODFhODRkOTA4MTk5MGEwMDE0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTM1LDEzICszNSwxMyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLUhlaWdodEFuZE1hcmdpbiBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6dGFibGVDZWxsSGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitIZWlnaHRB
bmRNYXJnaW4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnRhYmxlQ2VsbEhlaWdo
dEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5
b3V0Qm94LmlzSW5GbG93KCkpOwogCi0gICAgYXV0byBoZWlnaHQgPSBjb21wdXRlZEhlaWdodFZh
bHVlKGxheW91dFN0YXRlLCBsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok5vcm1hbCk7CisgICAgYXV0
byBoZWlnaHQgPSBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0VHlwZTo6Tm9y
bWFsKTsKICAgICBpZiAoIWhlaWdodCkKLSAgICAgICAgaGVpZ2h0ID0gR2VvbWV0cnk6OmNvbnRl
bnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0U3RhdGUsIGxheW91dEJveCk7
CisgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
bGF5b3V0Qm94KTsKIAogICAgIC8vIEZJWE1FOiBDb21wdXRlIHZlcnRpY2FsIG1hcmdpbiB2YWx1
ZXMuCiAgICAgcmV0dXJuIEhlaWdodEFuZE1hcmdpbiB7ICpoZWlnaHQsIHsgfSB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>