<?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>185898</bug_id>
          
          <creation_ts>2018-05-22 19:21:55 -0700</creation_ts>
          <short_desc>[LFC] Move sizing/positioning logic to helper classes</short_desc>
          <delta_ts>2018-05-23 09:57:22 -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>sam</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>1426456</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-05-22 19:21:55 -0700</bug_when>
    <thetext>with static functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426471</commentid>
    <comment_count>1</comment_count>
      <attachid>341064</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-05-22 20:24:55 -0700</bug_when>
    <thetext>Created attachment 341064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426473</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-05-22 20:37:40 -0700</bug_when>
    <thetext>Not sure about the class names though. Suggestions are welcome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426562</commentid>
    <comment_count>3</comment_count>
      <attachid>341064</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-05-23 07:21:35 -0700</bug_when>
    <thetext>Comment on attachment 341064
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=341064&amp;action=review

&gt; Source/WebCore/layout/FormattingContext.cpp:66
&gt; +        computedTopLeft = FormattingContextGeometry::outOfFlowReplacedPosition(layoutContext, layoutBox);

Maybe FormattingContextGeometry could be an inner class of FormattingContext (FormattingContext::Geometry)?

This way you could just write Geometry::outOfFlowReplacedPosition(...) here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426607</commentid>
    <comment_count>4</comment_count>
      <attachid>341096</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-05-23 09:17:16 -0700</bug_when>
    <thetext>Created attachment 341096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426608</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-05-23 09:17:34 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 341064 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=341064&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/FormattingContext.cpp:66
&gt; &gt; +        computedTopLeft = FormattingContextGeometry::outOfFlowReplacedPosition(layoutContext, layoutBox);
&gt; 
&gt; Maybe FormattingContextGeometry could be an inner class of FormattingContext
&gt; (FormattingContext::Geometry)?
&gt; 
&gt; This way you could just write Geometry::outOfFlowReplacedPosition(...) here.
Good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426615</commentid>
    <comment_count>6</comment_count>
      <attachid>341096</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-23 09:56:18 -0700</bug_when>
    <thetext>Comment on attachment 341096
Patch

Clearing flags on attachment: 341096

Committed r232114: &lt;https://trac.webkit.org/changeset/232114&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426616</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-23 09:56:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426617</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-23 09:57:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/40488646&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341064</attachid>
            <date>2018-05-22 20:24:55 -0700</date>
            <delta_ts>2018-05-23 09:17:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185898-20180522202454.patch</filename>
            <type>text/plain</type>
            <size>87675</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNhYzQ0ZDQ5ZTk1ODRj
ZDc4YmMwOTg3ZmFjMDdjYjZmZjE3YjIwZS4uNjYzYjQ2NmZkMGIxMjQyMGVmZGUyMDQyMTBhY2Rl
MWZmZWY3MWEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDE4LTA1LTIyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gTW92ZSBzaXppbmcv
cG9zaXRpb25pbmcgbG9naWMgdG8gaGVscGVyIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTg5OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBpZGVhIGhlcmUgaXMgdG8gbW92ZSBhbGwg
dGhlIHNpemluZyBhbmQgcG9zaXRpb25pbmcgbG9naWMgdG8gaGVscGVyIGNsYXNzZXMgc28gdGhh
dAorICAgICAgICB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGNvZGUgc3RheXMgbGVhbi4KKyAgICAg
ICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBkZWRpY2F0ZWQgQmxvY2tNYXJnaW5Db2xsYXBzZSBj
bGFzcyBmb3IgdGhlIGNvbGxhcHNpbmcgbG9naWMuCisgICAgICAgIFRoZSBoZWxwZXIgY2xhc3Nl
cyBoYXZlIG9ubHkgc3RhdGljIGZ1bmN0aW9ucy4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBkbyBu
b3QgbXV0YXRlIHRoZSBhc3NvY2lhdGVkIERpc3BsYXlCb3hlcywKKyAgICAgICAgYnV0IGluc3Rl
YWQgdGhleSBzaW1wbHkgcmV0dW4gdGhlIGNvbXB1dGVkIHZhbHVlcy4KKworICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1Bvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVPdXRPZkZsb3dXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVGbG9hdGluZ0hlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUZsb2F0aW5nTm9uUmVwbGFjZWRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVJlcGxhY2VkSGVpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVSZXBsYWNlZFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93
UmVwbGFjZWRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1JlcGxhY2VkV2lkdGggY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2VkUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxv
d1JlcGxhY2VkUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6c2hyaW5rVG9GaXRXaWR0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6c2hyaW5rVG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
OjpmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0T2ZGbG93Tm9u
UmVwbGFjZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpyZXBsYWNlZEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6OnJl
cGxhY2VkV2lkdGgpOgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5oLgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbkZs
b3dIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlSW5GbG93V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93Tm9uUmVwbGFjZWRX
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbkZsb3dOb25SZXBsYWNlZEhlaWdodCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Omlu
Rmxvd1JlcGxhY2VkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9uKToKKyAgICAgICAgKiBsYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuaC4KKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oOgor
CiAyMDE4LTA1LTIyICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlIHNob3VsZCBoYXZlIGEgQ29XIHN0b3JhZ2UgZm9yIE5ld0FycmF5QnVmZmVyIGFy
cmF5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZGIzMTA2NWUyZmU3YTI2YzA4MzExOTRmMzNlYmM2N2I4
ZDMyNmE3Yi4uNWFlMWZhYTdlZWM0OGU2N2IwMWM4NzhjMjY2MWNhYzI4NzJjZDM2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTEyMTYsOSArMTIxNiwxMSBAQCBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJSdW50aW1lQWdlbnQuY3BwCiBsYXlvdXQvRmxvYXRpbmdDb250ZXh0LmNwcAogbGF5b3V0
L0Zsb2F0aW5nU3RhdGUuY3BwCiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCitsYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKIGxheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3Bw
CiBsYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5jcHAKK2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1h
dHRpbmdTdGF0ZS5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBz
ZS5jcHAKIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tJbnZhbGlkYXRpb24uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NTNhNDk5YmYzN2ZlNzc4ZWYyYjlmZTg4OWQ0NWJhMWJjYzc0ZjhjZC4uZWQ4MzQxYmY0MzYwN2Uz
YzM2NzE5ODgzZTYwYmJjMGE3YzBlZGJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODg4Niw2ICs4ODg2LDggQEAKIAkJNkVE
OEMzNzgxODNCRkY4QzAwOUU1M0JEIC8qIEJveFNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJveFNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
RThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3NzExMEY4MDNGMzAw
NUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkYwODMwREUyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYwODMwREYyMEI0Njk1
MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzUxQUI1MkQ4QTAw
OTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExh
eW91dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Q29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODkxNyw2ICs4OTE5LDggQEAKIAkJNkY5OTVBMkUxQTcwODMz
NzAwQTczNUY0IC8qIEpTV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkY5OTVBMkYxQTcwODMzNzAwQTczNUY0IC8qIEpTV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2Rjk5NUEzMDFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RkJCODYwNDIwQjQ2NEI2MDBEQUQ5
MzggLyogRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGQkI4
NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MDlBMDFGRDFFM0QwQkNDMDA2QjBENEMgLyogTW9kdWxlRmV0
Y2hGYWlsdXJlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVG
ZXRjaEZhaWx1cmVLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxMDA0QjlE
MURDMTM5ODgwMEE1MkEzOCAvKiBwbGF5YmFjay1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInBsYXliYWNrLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MTAyNUVDMjFGOTlGMDk2MDA0QTI1MEMgLyogV2ViQW5pbWF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTU2NzgsNiArMTU2ODIsOCBAQAogCQkJCTExNUNGQTgwMjA4QjhFREEwMDFF
Njk5MSAvKiBGbG9hdGluZ1N0YXRlLmggKi8sCiAJCQkJMTE1Q0ZBNjkyMDhBRjdEMDAwMUU2OTkx
IC8qIEZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQkxMTVDRkE2ODIwOEFGN0QwMDAxRTY5
OTEgLyogRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKKwkJCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5
MzggLyogRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkZCQjg2MDQyMEI0
NjRCNjAwREFEOTM4IC8qIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuaCAqLywKIAkJCQkxMTVD
RkE3NTIwOEFGRTMwMDAxRTY5OTEgLyogRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkxMTVD
RkE3NDIwOEFGRTMwMDAxRTY5OTEgLyogRm9ybWF0dGluZ1N0YXRlLmggKi8sCiAJCQkJMTE1Rjc4
MDUyMDlDQkNCRDAwNzM5QzEzIC8qIEludmFsaWRhdGlvbi5oICovLApAQCAtMTU3MTcsNiArMTU3
MjMsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMTE1Q0ZBNkQyMDhBRkFCNjAwMUU2OTkxIC8q
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTExNUNGQTZDMjA4QUZBQjYwMDFF
Njk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggKi8sCisJCQkJNkYwODMwREYyMEI0Njk1
MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJ
NkYwODMwREUyMEI0Njk1MTAwOEE5NDVCIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5oICovLAogCQkJCTExNUNGQTc5MjA4QjhEOUQwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5jcHAgKi8sCiAJCQkJMTE1Q0ZBNzgyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0
dGluZ1N0YXRlLmggKi8sCiAJCQkJMTEyM0FGREEyMDlBQkIyMDAwNzM2QUNDIC8qIEJsb2NrSW52
YWxpZGF0aW9uLmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCmluZGV4IGJhM2Q2Mzg3YTkxOTgwZGNiMjc0NWMyZjY0ZGY2YjRmYzNlYjE5YTcuLjJj
YzUzMmQwNzQyNmZjZWI4YzU3MmYxM2U2OGFmYWIwMGJmMmM5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRGlzcGxheUJveC5o
IgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlv
dXRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXIuaCIKICNpbmNsdWRlICJMYXlvdXRD
b250ZXh0LmgiCkBAIC01OSwxMSArNjAsMTQgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbihjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gKIAog
dm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1Bvc2l0aW9uKExheW91dENv
bnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gm
IGRpc3BsYXlCb3gpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQoKSkgewot
ICAgICAgICBjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRQb3NpdGlvbihsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gsIGRpc3BsYXlCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
bXB1dGVPdXRPZkZsb3dSZXBsYWNlZFBvc2l0aW9uKGxheW91dENvbnRleHQsIGxheW91dEJveCwg
ZGlzcGxheUJveCk7CisgICAgTGF5b3V0UG9pbnQgY29tcHV0ZWRUb3BMZWZ0OworCisgICAgaWYg
KGxheW91dEJveC5yZXBsYWNlZCgpKQorICAgICAgICBjb21wdXRlZFRvcExlZnQgPSBGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFBvc2l0aW9uKGxheW91dENvbnRl
eHQsIGxheW91dEJveCk7CisgICAgZWxzZQorICAgICAgICBjb21wdXRlZFRvcExlZnQgPSBGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFBvc2l0aW9uKGxheW91
dENvbnRleHQsIGxheW91dEJveCk7CisKKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoY29tcHV0
ZWRUb3BMZWZ0KTsKIH0KIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoKExh
eW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5
OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0CkBAIC04NiwzOCArOTAsNTAgQEAgdm9pZCBGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBj
b25zdCBCb3gmIGwKIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1dp
ZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBE
aXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVw
bGFjZWQoKSkgewotICAgICAgICBjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aChsYXlv
dXRDb250ZXh0LCBsYXlvdXRCb3gsIGRpc3BsYXlCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbXB1dGVPdXRPZkZsb3dSZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91
dEJveCwgZGlzcGxheUJveCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlZFdpZHRoOworCisgICAg
aWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQorICAgICAgICBjb21wdXRlZFdpZHRoID0gRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRXaWR0aChsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gpOworICAgIGVsc2UgCisgICAgICAgIGNvbXB1dGVkV2lkdGggPSBGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFdpZHRoKGxheW91dENvbnRl
eHQsIGxheW91dEJveCk7CisKKyAgICBkaXNwbGF5Qm94LnNldFdpZHRoKGNvbXB1dGVkV2lkdGgp
OwogfQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdXaWR0aChMYXlv
dXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6
Qm94JiBkaXNwbGF5Qm94KSBjb25zdAogewotICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2VkKCkp
IHsKLSAgICAgICAgY29tcHV0ZUZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aChsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gsIGRpc3BsYXlCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
bXB1dGVSZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7
CisgICAgTGF5b3V0VW5pdCBjb21wdXRlZFdpZHRoOworCisgICAgaWYgKGxheW91dEJveC5yZXBs
YWNlZCgpKQorICAgICAgICBjb21wdXRlZFdpZHRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eTo6ZmxvYXRpbmdSZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAg
ZWxzZQorICAgICAgICBjb21wdXRlZFdpZHRoID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6
ZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisKKyAg
ICBkaXNwbGF5Qm94LnNldFdpZHRoKGNvbXB1dGVkV2lkdGgpOwogfQogCiB2b2lkIEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SGVpZ2h0KExheW91dENvbnRleHQmIGxheW91dENv
bnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNv
bnN0CiB7Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQoKSkgewotICAgICAgICBjb21wdXRl
T3V0T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNw
bGF5Qm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb21wdXRlT3V0T2ZGbG93UmVw
bGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKKyAgICBM
YXlvdXRVbml0IGNvbXB1dGVkSGVpZ2h0OworCisgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgp
KQorICAgICAgICBjb21wdXRlZEhlaWdodCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Om91
dE9mRmxvd1JlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgZWxz
ZQorICAgICAgICBjb21wdXRlZEhlaWdodCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Om91
dE9mRmxvd05vblJlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisKKyAg
ICBkaXNwbGF5Qm94LnNldEhlaWdodChjb21wdXRlZEhlaWdodCk7CiB9CiAKIHZvaWQgRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdGluZ0hlaWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRD
b250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6Qm94JiBkaXNwbGF5Qm94KSBj
b25zdAogewotICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2VkKCkpIHsKLSAgICAgICAgY29tcHV0
ZUZsb2F0aW5nTm9uUmVwbGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNw
bGF5Qm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb21wdXRlUmVwbGFjZWRIZWln
aHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKKyAgICBMYXlvdXRVbml0
IGNvbXB1dGVkSGVpZ2h0OworCisgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQorICAgICAg
ICBjb21wdXRlZEhlaWdodCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6OmZsb2F0aW5nUmVw
bGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICBlbHNlCisgICAgICAg
IGNvbXB1dGVkSGVpZ2h0ID0gRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6ZmxvYXRpbmdOb25S
ZXBsYWNlZEhlaWdodChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworCisgICAgZGlzcGxheUJv
eC5zZXRIZWlnaHQoY29tcHV0ZWRIZWlnaHQpOwogfQogCiBMYXlvdXRVbml0IEZvcm1hdHRpbmdD
b250ZXh0OjptYXJnaW5Ub3AoY29uc3QgQm94JikgY29uc3QKQEAgLTE2OCwzOTEgKzE4NCw2IEBA
IHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dE91dE9mRmxvd0Rlc2NlbmRhbnRzKExheW91
dENvbnRleHQmIGxheW91dENvbnRleHQpCiAgICAgfQogfQogCi12b2lkIEZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJv
eCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7Ci0KLSAgICAvLyAxMC42LjQgQWJzb2x1dGVseSBw
b3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIEZvciBhYnNv
bHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHMsIHRoZSB1c2VkIHZhbHVlcyBvZiB0aGUgdmVydGlj
YWwgZGltZW5zaW9ucyBtdXN0IHNhdGlzZnkgdGhpcyBjb25zdHJhaW50OgotICAgIC8vICd0b3An
ICsgJ21hcmdpbi10b3AnICsgJ2JvcmRlci10b3Atd2lkdGgnICsgJ3BhZGRpbmctdG9wJyArICdo
ZWlnaHQnICsgJ3BhZGRpbmctYm90dG9tJyArICdib3JkZXItYm90dG9tLXdpZHRoJyArICdtYXJn
aW4tYm90dG9tJyArICdib3R0b20nCi0gICAgLy8gPSBoZWlnaHQgb2YgY29udGFpbmluZyBibG9j
awotCi0gICAgLy8gSWYgYWxsIHRocmVlIG9mICd0b3AnLCAnaGVpZ2h0JywgYW5kICdib3R0b20n
IGFyZSBhdXRvLCBzZXQgJ3RvcCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVs
ZSBudW1iZXIgdGhyZWUgYmVsb3cuCi0KLSAgICAvLyBJZiBub25lIG9mIHRoZSB0aHJlZSBhcmUg
J2F1dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0
bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEKLSAgICAvLyBjb25zdHJhaW50
IHRoYXQgdGhlIHR3byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMuIElmIG9uZSBvZiAnbWFyZ2lu
LXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZv
ciB0aGF0IHZhbHVlLgotICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQs
IGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20nIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4K
LQotICAgIC8vIE90aGVyd2lzZSwgcGljayB0aGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2l4IHJ1
bGVzIHRoYXQgYXBwbGllcy4KLQotICAgIC8vIDEuICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgJ2F1
dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQg
b24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywKLSAgICAvLyAgICAgc2V0ICdhdXRvJyB2YWx1ZXMg
Zm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3Ig
J3RvcCcKLSAgICAvLyAyLiAndG9wJyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ2hlaWdo
dCcgaXMgbm90ICdhdXRvJywgdGhlbiBzZXQgJ3RvcCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwg
c2V0ICdhdXRvJyB2YWx1ZXMgZm9yCi0gICAgLy8gICAgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2lu
LWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90dG9tJwotICAgIC8vIDMuICdoZWlnaHQn
IGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAndG9wJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRo
ZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywgc2V0ICdhdXRvJwot
ICAgIC8vICAgICB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRv
IDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAvLyA0LiAndG9wJyBpcyAnYXV0bycsICdo
ZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVl
cyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZv
ciAndG9wJwotICAgIC8vIDUuICdoZWlnaHQnIGlzICdhdXRvJywgJ3RvcCcgYW5kICdib3R0b20n
IGFyZSBub3QgJ2F1dG8nLCB0aGVuICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQg
J21hcmdpbi1ib3R0b20nIGFyZSBzZXQgdG8gMCBhbmQgc29sdmUgZm9yICdoZWlnaHQnCi0gICAg
Ly8gNi4gJ2JvdHRvbScgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2hlaWdodCcgYXJlIG5vdCAnYXV0
bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1i
b3R0b20nIHRvIDAgYW5kIHNvbHZlIGZvciAnYm90dG9tJwotICAgIGF1dG8mIHN0eWxlID0gbGF5
b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byB0b3AgPSBzdHlsZS5sb2dpY2FsVG9wKCk7Ci0gICAg
YXV0byBib3R0b20gPSBzdHlsZS5sb2dpY2FsQm90dG9tKCk7Ci0gICAgYXV0byBoZWlnaHQgPSBz
dHlsZS5sb2dpY2FsSGVpZ2h0KCk7IAotCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQg
PSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWlu
aW5nQmxvY2soKSktPmhlaWdodCgpOwotICAgIExheW91dFVuaXQgY29tcHV0ZWRIZWlnaHRWYWx1
ZTsKLQotICAgIGlmICgodG9wLmlzQXV0bygpICYmIGhlaWdodC5pc0F1dG8oKSAmJiBib3R0b20u
aXNBdXRvKCkpCi0gICAgICAgIHx8ICh0b3AuaXNBdXRvKCkgJiYgaGVpZ2h0LmlzQXV0bygpICYm
ICFib3R0b20uaXNBdXRvKCkpCi0gICAgICAgIHx8ICghdG9wLmlzQXV0bygpICYmIGhlaWdodC5p
c0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKSB7Ci0gICAgICAgIC8vIEFsbCBhdXRvICgjMyks
ICMxIGFuZCAjMwotICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVlID0gY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOwotICAgIH0g
ZWxzZSBpZiAoIXRvcC5pc0F1dG8oKSAmJiBoZWlnaHQuaXNBdXRvKCkgJiYgIWJvdHRvbS5pc0F1
dG8oKSkgewotICAgICAgICAvLyAjNQotICAgICAgICBhdXRvIG1hcmdpblRvcCA9IGRpc3BsYXlC
b3gubWFyZ2luVG9wKCk7Ci0gICAgICAgIGF1dG8gbWFyZ2luQm90dG9tID0gZGlzcGxheUJveC5t
YXJnaW5Cb3R0b20oKTsKLSAgICAKLSAgICAgICAgYXV0byBwYWRkaW5nVG9wID0gZGlzcGxheUJv
eC5wYWRkaW5nVG9wKCk7Ci0gICAgICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGRpc3BsYXlCb3gu
cGFkZGluZ0JvdHRvbSgpOwotCi0gICAgICAgIGF1dG8gYm9yZGVyVG9wID0gZGlzcGxheUJveC5i
b3JkZXJUb3AoKTsKLSAgICAgICAgYXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJvcmRl
ckJvdHRvbSgpOwotCi0gICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSBjb250YWluaW5nQmxv
Y2tIZWlnaHQgLSAodG9wLnZhbHVlKCkgKyBtYXJnaW5Ub3AgKyBib3JkZXJUb3AgKyBwYWRkaW5n
VG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIG1hcmdpbkJvdHRvbSArIGJvdHRv
bS52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKCFoZWlnaHQuaXNBdXRvKCkpCi0gICAgICAgIGNv
bXB1dGVkSGVpZ2h0VmFsdWUgPSB2YWx1ZUZvckxlbmd0aChoZWlnaHQsIGNvbnRhaW5pbmdCbG9j
a0hlaWdodCk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAg
IGRpc3BsYXlCb3guc2V0SGVpZ2h0KGNvbXB1dGVkSGVpZ2h0VmFsdWUpOwotfQotCi12b2lkIEZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdOb25SZXBsYWNlZEhlaWdodChMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6Qm94
JiBkaXNwbGF5Qm94KSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bv
c2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwotICAgIC8vIDEwLjYuNiBDb21w
bGljYXRlZCBjYXNlcwotICAgIC8vCi0gICAgLy8gRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cy4KLSAgICAvLwotICAgIC8vIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhlIGhlaWdodCBk
ZXBlbmRzIG9uIHRoZSBlbGVtZW50J3MgZGVzY2VuZGFudHMgcGVyIDEwLjYuNy4KLSAgICBhdXRv
IGhlaWdodCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKLSAgICBkaXNwbGF5
Qm94LnNldEhlaWdodChoZWlnaHQuaXNBdXRvKCkgPyBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGxheW91dENvbnRleHQsIGxheW91dEJveCkgOiBMYXlvdXRVbml0KGhlaWdo
dC52YWx1ZSgpKSk7Ci19Ci0KLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVSZXBsYWNl
ZEhlaWdodChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJv
eCYgZGlzcGxheUJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQoKGxheW91dEJveC5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlv
dXRCb3guaXNJbkZsb3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwotICAgIC8vIDEwLjYu
NSBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzLiBUaGUgdXNlZCB2YWx1
ZSBvZiAnaGVpZ2h0JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMuCi0KLSAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9jay1sZXZl
bCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycgcmVwbGFj
ZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRz
Ci0gICAgLy8KLSAgICAvLyAxLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29t
cHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmlu
c2ljIGhlaWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUg
b2YgJ2hlaWdodCcuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhh
cyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRy
aW5zaWMgcmF0aW8gdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpczoKLSAgICAvLyAg
ICAodXNlZCB3aWR0aCkgLyAoaW50cmluc2ljIHJhdGlvKQotICAgIC8vCi0gICAgLy8gMy4gT3Ro
ZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0
aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBo
ZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcuCi0gICAgLy8KLSAgICAvLyA0LiBP
dGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0
IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1
ZSBvZiAnaGVpZ2h0JyBtdXN0IGJlIHNldCB0bwotICAgIC8vICAgIHRoZSBoZWlnaHQgb2YgdGhl
IGxhcmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEgMjoxIHJhdGlvLCBoYXMgYSBoZWlnaHQgbm90
IGdyZWF0ZXIgdGhhbiAxNTBweCwgYW5kIGhhcyBhIHdpZHRoIG5vdCBncmVhdGVyIHRoYW4gdGhl
IGRldmljZSB3aWR0aC4KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
IGF1dG8gd2lkdGggPSBzdHlsZS5sb2dpY2FsV2lkdGgoKTsKLSAgICBhdXRvIGhlaWdodCA9IHN0
eWxlLmxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIExheW91dFVuaXQgY29tcHV0ZWRIZWlnaHRWYWx1
ZTsKLSAgICBhdXRvIHJlcGxhY2VkID0gbGF5b3V0Qm94LnJlcGxhY2VkKCk7Ci0gICAgQVNTRVJU
KHJlcGxhY2VkKTsKLQotICAgIGlmIChoZWlnaHQuaXNBdXRvKCkpIHsKLSAgICAgICAgaWYgKHdp
ZHRoLmlzQXV0bygpICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgewotICAgICAg
ICAgICAgLy8gIzEKLSAgICAgICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSByZXBsYWNlZC0+
aW50cmluc2ljSGVpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZWQtPmhhc0ludHJp
bnNpY1JhdGlvKCkpIHsKLSAgICAgICAgICAgIC8vICMyCi0gICAgICAgICAgICBjb21wdXRlZEhl
aWdodFZhbHVlID0gd2lkdGgudmFsdWUoKSAvIHJlcGxhY2VkLT5pbnRyaW5zaWNSYXRpbygpOwot
ICAgICAgICB9IGVsc2UgaWYgKHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgewotICAg
ICAgICAgICAgLy8gIzMKLSAgICAgICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSByZXBsYWNl
ZC0+aW50cmluc2ljSGVpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyAj
NAotICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHRWYWx1ZSA9IDE1MDsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVlID0gaGVpZ2h0LnZhbHVlKCk7Ci0K
LSAgICBkaXNwbGF5Qm94LnNldEhlaWdodChjb21wdXRlZEhlaWdodFZhbHVlKTsKLX0KLQotdm9p
ZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYs
IGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgbGF5b3V0
Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzSW5GbG93KCkpICYmIGxh
eW91dEJveC5yZXBsYWNlZCgpKTsKLQotICAgIC8vIDEwLjMuNCBCbG9jay1sZXZlbCwgcmVwbGFj
ZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3c6IFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMg
ZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgIC8vIDEwLjMu
NiBGbG9hdGluZywgcmVwbGFjZWQgZWxlbWVudHM6IFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcg
aXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgIC8vIDEw
LjMuOCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzOiBUaGUgdXNlZCB2
YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVt
ZW50cy4KLQotICAgIC8vIDEwLjMuMiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8K
LSAgICAvLyAxLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQgdmFs
dWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIHdpZHRo
LCB0aGVuIHRoYXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcu
Ci0gICAgLy8KLSAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29t
cHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgaGFzIG5vIGludHJpbnNpYyB3
aWR0aCwgYnV0IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgaGVpZ2h0IGFuZCBpbnRyaW5zaWMgcmF0
aW87IAotICAgIC8vICAgIG9yIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1
dG8nLCAnaGVpZ2h0JyBoYXMgc29tZSBvdGhlciBjb21wdXRlZCB2YWx1ZSwgYW5kIHRoZSBlbGVt
ZW50IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgcmF0aW87Ci0gICAgLy8gICAgdGhlbiB0aGUgdXNl
ZCB2YWx1ZSBvZiAnd2lkdGgnIGlzOiAodXNlZCBoZWlnaHQpICogKGludHJpbnNpYyByYXRpbykK
LSAgICAvLwotICAgIC8vIDMuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21w
dXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJh
dGlvIGJ1dCBubyBpbnRyaW5zaWMgaGVpZ2h0IG9yIHdpZHRoLAotICAgIC8vICAgIHRoZW4gdGhl
IHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyB1bmRlZmluZWQgaW4gQ1NTIDIuMi4gSG93ZXZlciwg
aXQgaXMgc3VnZ2VzdGVkIHRoYXQsIGlmIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgd2lkdGggZG9l
cyBub3QgaXRzZWxmIGRlcGVuZCBvbiB0aGUgcmVwbGFjZWQgCi0gICAgLy8gICAgZWxlbWVudCdz
IHdpZHRoLCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgY2FsY3VsYXRlZCBmcm9t
IHRoZSBjb25zdHJhaW50IGVxdWF0aW9uIHVzZWQgZm9yIGJsb2NrLWxldmVsLCBub24tcmVwbGFj
ZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cuCi0gICAgLy8KLSAgICAvLyA0LiBPdGhlcndpc2Us
IGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1l
bnQgaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgotICAgIC8vIAotICAgIC8vIDUuIE90aGVyd2lzZSwg
aWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGJ1dCBub25lIG9mIHRo
ZSBjb25kaXRpb25zIGFib3ZlIGFyZSBtZXQsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRo
JyBiZWNvbWVzIDMwMHB4LiAKLSAgICAvLyAgICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQg
dGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3Rh
bmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCi0g
ICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIHdpZHRoID0gc3R5
bGUubG9naWNhbFdpZHRoKCk7Ci0gICAgYXV0byBoZWlnaHQgPSBzdHlsZS5sb2dpY2FsSGVpZ2h0
KCk7Ci0KLSAgICBMYXlvdXRVbml0IGNvbXB1dGVkV2lkdGhWYWx1ZTsKLSAgICBhdXRvIHJlcGxh
Y2VkID0gbGF5b3V0Qm94LnJlcGxhY2VkKCk7Ci0gICAgQVNTRVJUKHJlcGxhY2VkKTsKLQotICAg
IGlmICh3aWR0aC5pc0F1dG8oKSAmJiBoZWlnaHQuaXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0lu
dHJpbnNpY1dpZHRoKCkpIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgY29tcHV0ZWRXaWR0aFZh
bHVlID0gcmVwbGFjZWQtPmludHJpbnNpY1dpZHRoKCk7Ci0gICAgfSBlbHNlIGlmICh3aWR0aC5p
c0F1dG8oKSAmJiAoaGVpZ2h0LmlzQ2FsY3VsYXRlZCgpIHx8IHJlcGxhY2VkLT5oYXNJbnRyaW5z
aWNIZWlnaHQoKSkgJiYgcmVwbGFjZWQtPmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKLSAgICAgICAg
Ly8gIzIKLSAgICAgICAgYXV0byB1c2VkSGVpZ2h0ID0gaGVpZ2h0LmlzQ2FsY3VsYXRlZCgpID8g
TGF5b3V0VW5pdChoZWlnaHQudmFsdWUoKSkgOiByZXBsYWNlZC0+aW50cmluc2ljSGVpZ2h0KCk7
ICAgCi0gICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHVzZWRIZWlnaHQgKiByZXBsYWNlZC0+
aW50cmluc2ljUmF0aW8oKTsKLSAgICB9IGVsc2UgaWYgKHdpZHRoLmlzQXV0bygpICYmIGhlaWdo
dC5pc0F1dG8oKSAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljUmF0aW8oKSkgewotICAgICAgICAv
LyAjMwotICAgICAgICAvLyBGSVhNRTogdW5kZWZpbmVkIGJ1dCBzdXJlbHkgZG9hYmxlLgotICAg
ICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgIH0gZWxzZSBpZiAod2lkdGgu
aXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKLSAgICAgICAgLy8g
IzQKLSAgICAgICAgY29tcHV0ZWRXaWR0aFZhbHVlID0gcmVwbGFjZWQtPmludHJpbnNpY1dpZHRo
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gIzUKLSAgICAgICAgY29tcHV0ZWRXaWR0aFZh
bHVlID0gMzAwOwotICAgIH0KLQotICAgIGRpc3BsYXlCb3guc2V0V2lkdGgoY29tcHV0ZWRXaWR0
aFZhbHVlKTsKLX0KLQotTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6Y29udGVudEhlaWdo
dEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBj
b25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LnN0eWxl
KCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1h
dHRpbmdDb250ZXh0KCkpOwotICAgIC8vIDEwLjYuNyAnQXV0bycgaGVpZ2h0cyBmb3IgYmxvY2sg
Zm9ybWF0dGluZyBjb250ZXh0IHJvb3RzCi0KLSAgICAvLyBJZiBpdCBvbmx5IGhhcyBpbmxpbmUt
bGV2ZWwgY2hpbGRyZW4sIHRoZSBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRv
cCBvZiB0aGUgdG9wbW9zdCBsaW5lIGJveCBhbmQgdGhlIGJvdHRvbSBvZiB0aGUgYm90dG9tbW9z
dCBsaW5lIGJveC4KLSAgICAvLyBJZiBpdCBoYXMgYmxvY2stbGV2ZWwgY2hpbGRyZW4sIHRoZSBo
ZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRvcCBtYXJnaW4tZWRnZSBvZiB0aGUg
dG9wbW9zdCBibG9jay1sZXZlbAotICAgIC8vIGNoaWxkIGJveCBhbmQgdGhlIGJvdHRvbSBtYXJn
aW4tZWRnZSBvZiB0aGUgYm90dG9tbW9zdCBibG9jay1sZXZlbCBjaGlsZCBib3guCi0KLSAgICAv
LyBJbiBhZGRpdGlvbiwgaWYgdGhlIGVsZW1lbnQgaGFzIGFueSBmbG9hdGluZyBkZXNjZW5kYW50
cyB3aG9zZSBib3R0b20gbWFyZ2luIGVkZ2UgaXMgYmVsb3cgdGhlIGVsZW1lbnQncyBib3R0b20g
Y29udGVudCBlZGdlLAotICAgIC8vIHRoZW4gdGhlIGhlaWdodCBpcyBpbmNyZWFzZWQgdG8gaW5j
bHVkZSB0aG9zZSBlZGdlcy4gT25seSBmbG9hdHMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiB0aGlzIGJs
b2NrIGZvcm1hdHRpbmcgY29udGV4dCBhcmUgdGFrZW4KLSAgICAvLyBpbnRvIGFjY291bnQsIGUu
Zy4sIGZsb2F0cyBpbnNpZGUgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzIG9yIG90
aGVyIGZsb2F0cyBhcmUgbm90LgotICAgIGlmICghaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpIHx8
ICFkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxk
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byYgZm9ybWF0dGluZ1Jvb3RDb250YWlu
ZXIgPSBkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCk7Ci0gICAgaWYgKGZvcm1hdHRpbmdS
b290Q29udGFpbmVyLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvKiBmaXJzdERpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmZpcnN0SW5G
bG93Q2hpbGQoKSk7Ci0gICAgYXV0byogbGFzdERpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmxhc3RJbkZsb3dD
aGlsZCgpKTsKLQotICAgIGF1dG8gdG9wID0gZmlyc3REaXNwbGF5Qm94LT5tYXJnaW5Cb3goKS55
KCk7Ci0gICAgYXV0byBib3R0b20gPSBsYXN0RGlzcGxheUJveC0+bWFyZ2luQm94KCkubWF4WSgp
OwotICAgIC8vIEZJWE1FOiBhZGQgZmxvYXRpbmcgc3VwcG9ydC4KLSAgICByZXR1cm4gYm90dG9t
IC0gdG9wOwotfQotCi12b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdOb25S
ZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7
Ci0gICAgLy8gMTAuMy41IEZsb2F0aW5nLCBub24tcmVwbGFjZWQgZWxlbWVudHMKLQotICAgIC8v
IElmICd3aWR0aCcgaXMgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGUgdXNlZCB2YWx1ZSBpcyB0aGUg
InNocmluay10by1maXQiIHdpZHRoLgotICAgIGF1dG8gd2lkdGggPSBsYXlvdXRCb3guc3R5bGUo
KS5sb2dpY2FsV2lkdGgoKTsKLSAgICBkaXNwbGF5Qm94LnNldFdpZHRoKHdpZHRoLmlzQXV0bygp
ID8gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpIDogTGF5b3V0VW5p
dCh3aWR0aC52YWx1ZSgpKSk7Ci19Ci0KLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVP
dXRPZkZsb3dOb25SZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94
LnJlcGxhY2VkKCkpOwotICAgIAotICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQs
IG5vbi1yZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gJ2xlZnQnICsgJ21hcmdpbi1s
ZWZ0JyArICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcgKyAn
cGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQnICsg
J3JpZ2h0JwotICAgIC8vID0gd2lkdGggb2YgY29udGFpbmluZyBibG9jawotCi0gICAgLy8gSWYg
YWxsIHRocmVlIG9mICdsZWZ0JywgJ3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdhdXRvJzogRmly
c3Qgc2V0IGFueSAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJp
Z2h0JyB0byAwLgotICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0
aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJs
b2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYwotICAgIC8vIHBvc2l0aW9uIGFu
ZCBhcHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQgJ3JpZ2h0JyB0
byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUgYmVsb3cuCi0K
LSAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBu
b3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZv
ciAnbGVmdCcKLSAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ3dp
ZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0
aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiAKLSAgICAvLyAgICBj
b250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlv
biwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCi0gICAgLy8g
ICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmln
aHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCi0gICAgLy8gMy4gJ3dpZHRoJyBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGgg
aXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKLSAgICAvLyA0LiAnbGVm
dCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNv
bHZlIGZvciAnbGVmdCcKLSAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAn
cmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCi0gICAgLy8gNi4g
J3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhl
biBzb2x2ZSBmb3IgJ3JpZ2h0JwotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7
Ci0gICAgYXV0byBsZWZ0ID0gc3R5bGUubG9naWNhbExlZnQoKTsKLSAgICBhdXRvIHJpZ2h0ID0g
c3R5bGUubG9naWNhbFJpZ2h0KCk7Ci0gICAgYXV0byB3aWR0aCA9IHN0eWxlLmxvZ2ljYWxXaWR0
aCgpOwotCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlz
cGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS0+d2lkdGgo
KTsKLSAgICBMYXlvdXRVbml0IGNvbXB1dGVkV2lkdGhWYWx1ZTsKLQotICAgIGlmICgobGVmdC5p
c0F1dG8oKSAmJiB3aWR0aC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkKLSAgICAgICAgfHwg
KGxlZnQuaXNBdXRvKCkgJiYgd2lkdGguaXNBdXRvKCkgJiYgIXJpZ2h0LmlzQXV0bygpKQotICAg
ICAgICB8fCAoIWxlZnQuaXNBdXRvKCkgJiYgd2lkdGguaXNBdXRvKCkgJiYgcmlnaHQuaXNBdXRv
KCkpKSB7Ci0gICAgICAgIC8vIEFsbCBhdXRvICgjMSksICMxIGFuZCAjMwotICAgICAgICBjb21w
dXRlZFdpZHRoVmFsdWUgPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJv
eCk7Ci0gICAgfSBlbHNlIGlmICghbGVmdC5pc0F1dG8oKSAmJiB3aWR0aC5pc0F1dG8oKSAmJiAh
cmlnaHQuaXNBdXRvKCkpIHsKLSAgICAgICAgLy8gIzUKLSAgICAgICAgYXV0byBtYXJnaW5MZWZ0
ID0gZGlzcGxheUJveC5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBk
aXNwbGF5Qm94Lm1hcmdpblJpZ2h0KCk7Ci0gICAgCi0gICAgICAgIGF1dG8gcGFkZGluZ0xlZnQg
PSBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0g
ZGlzcGxheUJveC5wYWRkaW5nUmlnaHQoKTsKLQotICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBk
aXNwbGF5Qm94LmJvcmRlckxlZnQoKTsKLSAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3Bs
YXlCb3guYm9yZGVyUmlnaHQoKTsKLQotICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb250
YWluaW5nQmxvY2tXaWR0aCAtIChsZWZ0LnZhbHVlKCkgKyBtYXJnaW5MZWZ0ICsgYm9yZGVyTGVm
dCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBtYXJnaW5SaWdo
dCArIHJpZ2h0LnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoIXdpZHRoLmlzQXV0bygpKQotICAg
ICAgICBjb21wdXRlZFdpZHRoVmFsdWUgPSB2YWx1ZUZvckxlbmd0aCh3aWR0aCwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0K
LSAgICBkaXNwbGF5Qm94LnNldFdpZHRoKGNvbXB1dGVkV2lkdGhWYWx1ZSk7Ci19Ci0KLXZvaWQg
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dSZXBsYWNlZEhlaWdodChMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6Qm94
JiBkaXNwbGF5Qm94KSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwotICAgIC8vIDEwLjYuNSBBYnNv
bHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyBUaGUg
dXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFj
ZWQgZWxlbWVudHMuCi0gICAgY29tcHV0ZVJlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxh
eW91dEJveCwgZGlzcGxheUJveCk7Ci19Ci0KLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVPdXRPZkZsb3dSZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gu
cmVwbGFjZWQoKSk7Ci0gICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFj
ZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMg
ZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgIGNvbXB1dGVS
ZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7Ci19Ci0K
LXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dOb25SZXBsYWNlZFBvc2l0
aW9uKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBE
aXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17Ci0gICAgLy8gMTAuMy43IEFic29sdXRl
bHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIChsZWZ0L3JpZ2h0KQotICAgIC8v
IDEwLjYuNCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyAodG9w
L2JvdHRvbSkKLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UndmUgdGhlIHNpemUgY29tcHV0ZWQu
Ci0gICAgYXV0byBzaXplID0gZGlzcGxheUJveC5zaXplKCk7Ci0gICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKLQotICAgIC8vIDEwLjYuNCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQs
IG5vbi1yZXBsYWNlZCBlbGVtZW50cwotICAgIGF1dG8gdG9wID0gc3R5bGUubG9naWNhbFRvcCgp
OwotICAgIGF1dG8gYm90dG9tID0gc3R5bGUubG9naWNhbEJvdHRvbSgpOwotICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLT5oZWlnaHQoKTsKLQotICAgIC8vICd0b3An
ICsgJ21hcmdpbi10b3AnICsgJ2JvcmRlci10b3Atd2lkdGgnICsgJ3BhZGRpbmctdG9wJyArICdo
ZWlnaHQnICsgJ3BhZGRpbmctYm90dG9tJyArICdib3JkZXItYm90dG9tLXdpZHRoJyArICdtYXJn
aW4tYm90dG9tJyArICdib3R0b20nCi0gICAgLy8gPSBoZWlnaHQgb2YgY29udGFpbmluZyBibG9j
awotICAgIC8vCi0gICAgLy8gMS4gJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSAnYXV0bycgYW5kICdi
b3R0b20nIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29u
dGVudCBwZXIgMTAuNi43LAotICAgIC8vICAgICBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdp
bi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9wJwotICAg
IC8vIDIuICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAnaGVpZ2h0JyBpcyBub3Qg
J2F1dG8nLCB0aGVuIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBzZXQgJ2F1dG8n
IHZhbHVlcyBmb3IKLSAgICAvLyAgICAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0
byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgLy8gMy4gJ2hlaWdodCcgYW5kICdib3R0
b20nIGFyZSAnYXV0bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBp
cyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAuNi43LCBzZXQgJ2F1dG8nCi0gICAgLy8gICAg
IHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNv
bHZlIGZvciAnYm90dG9tJwotICAgIC8vIDQuICd0b3AnIGlzICdhdXRvJywgJ2hlaWdodCcgYW5k
ICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFy
Z2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCi0g
ICAgLy8gNS4gJ2hlaWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAn
YXV0bycsIHRoZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJv
dHRvbScgYXJlIHNldCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKLSAgICAvLyA2LiAnYm90
dG9tJyBpcyAnYXV0bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBz
ZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8g
MCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgTGF5b3V0VW5pdCBjb21wdXRlZFRvcFZhbHVl
OwotICAgIGlmICh0b3AuaXNBdXRvKCkgJiYgIWJvdHRvbS5pc0F1dG8oKSkgewotICAgICAgICAv
LyAjMSAjNAotICAgICAgICBhdXRvIG1hcmdpblRvcCA9IGRpc3BsYXlCb3gubWFyZ2luVG9wKCk7
Ci0gICAgICAgIGF1dG8gbWFyZ2luQm90dG9tID0gZGlzcGxheUJveC5tYXJnaW5Cb3R0b20oKTsK
LSAgICAKLSAgICAgICAgYXV0byBwYWRkaW5nVG9wID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCk7
Ci0gICAgICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGRpc3BsYXlCb3gucGFkZGluZ0JvdHRvbSgp
OwotCi0gICAgICAgIGF1dG8gYm9yZGVyVG9wID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKTsKLSAg
ICAgICAgYXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgpOwotCi0g
ICAgICAgIGNvbXB1dGVkVG9wVmFsdWUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAobWFyZ2lu
VG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIHNpemUuaGVpZ2h0KCkgKyBwYWRkaW5nQm90
dG9tICsgYm9yZGVyQm90dG9tICsgbWFyZ2luQm90dG9tICsgYm90dG9tLnZhbHVlKCkpOwotICAg
IH0gZWxzZSBpZiAodG9wLmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkgewotICAgICAgICAv
LyAjMgotICAgICAgICAvLyBBbHJlYWR5IGNvbXB1dGVkIGFzIHBhcnQgb2YgdGhlIGNvbXB1dGVT
dGF0aWNQb3NpdGlvbigpOwotICAgICAgICBjb21wdXRlZFRvcFZhbHVlID0gZGlzcGxheUJveC50
b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyAjMyAjNSAjNiBoYXZlIHRvcCAhPSBhdXRv
Ci0gICAgICAgIGNvbXB1dGVkVG9wVmFsdWUgPSB2YWx1ZUZvckxlbmd0aCh0b3AsIGNvbnRhaW5p
bmdCbG9ja0hlaWdodCk7Ci0gICAgfQotCi0gICAgZGlzcGxheUJveC5zZXRUb3AoY29tcHV0ZWRU
b3BWYWx1ZSk7Ci0KLSAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVw
bGFjZWQgZWxlbWVudHMKLSAgICBhdXRvIGxlZnQgPSBzdHlsZS5sb2dpY2FsTGVmdCgpOwotICAg
IGF1dG8gcmlnaHQgPSBzdHlsZS5sb2dpY2FsUmlnaHQoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpLT53aWR0aCgpOwotCi0gICAgLy8gJ2xlZnQnICsgJ21hcmdp
bi1sZWZ0JyArICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcg
KyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQn
ICsgJ3JpZ2h0JwotICAgIC8vID0gd2lkdGggb2YgY29udGFpbmluZyBibG9jawotICAgIC8vCi0g
ICAgLy8gSWYgYWxsIHRocmVlIG9mICdsZWZ0JywgJ3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdh
dXRvJzogRmlyc3Qgc2V0IGFueSAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAn
bWFyZ2luLXJpZ2h0JyB0byAwLgotICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9w
ZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250
YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYwotICAgIC8vIHBv
c2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQg
J3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUg
YmVsb3cuCi0KLSAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3Jp
Z2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVu
IHNvbHZlIGZvciAnbGVmdCcKLSAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRv
JyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9w
ZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiAKLSAg
ICAvLyAgICBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24u
Ci0gICAgLy8gICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwn
KSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCi0gICAgLy8gMy4gJ3dpZHRo
JyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdhdXRvJywgdGhlbiB0
aGUgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKLSAgICAv
LyA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8n
LCB0aGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xl
ZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCi0g
ICAgLy8gNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgbm90ICdh
dXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JwotICAgIExheW91dFVuaXQgY29tcHV0ZWRMZWZ0
VmFsdWU7Ci0gICAgaWYgKGxlZnQuaXNBdXRvKCkgJiYgIXJpZ2h0LmlzQXV0bygpKSB7Ci0gICAg
ICAgIC8vICMxICM0Ci0gICAgICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRpc3BsYXlCb3gubWFyZ2lu
TGVmdCgpOwotICAgICAgICBhdXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxheUJveC5tYXJnaW5SaWdo
dCgpOwotICAgIAotICAgICAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5n
TGVmdCgpOwotICAgICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1Jp
Z2h0KCk7Ci0KLSAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0
KCk7Ci0gICAgICAgIGF1dG8gYm9yZGVyUmlnaHQgPSBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCk7
Ci0KLSAgICAgICAgY29tcHV0ZWRMZWZ0VmFsdWUgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICht
YXJnaW5MZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgc2l6ZS53aWR0aCgpICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBtYXJnaW5SaWdodCArIHJpZ2h0LnZhbHVlKCkpOwot
ICAgIH0gZWxzZSBpZiAobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkgewotICAgICAg
ICAvLyAjMgotICAgICAgICAvLyBGSVhNRTogcnRsCi0gICAgICAgIGNvbXB1dGVkTGVmdFZhbHVl
ID0gZGlzcGxheUJveC5sZWZ0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gIzMgIzUgIzYg
aGF2ZSBsZWZ0ICE9IGF1dG8KLSAgICAgICAgY29tcHV0ZWRMZWZ0VmFsdWUgPSB2YWx1ZUZvckxl
bmd0aChsZWZ0LCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgfQotCi0gICAgZGlzcGxheUJv
eC5zZXRMZWZ0KGNvbXB1dGVkTGVmdFZhbHVlKTsKLX0KLQotdm9pZCBGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZU91dE9mRmxvd1JlcGxhY2VkUG9zaXRpb24oTGF5b3V0Q29udGV4dCYsIGNvbnN0
IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0Ci17Ci0KLX0KLQotTGF5b3V0VW5pdCBGb3JtYXR0
aW5nQ29udGV4dDo6c2hyaW5rVG9GaXRXaWR0aChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jikg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQogI2lmbmRlZiBOREVCVUcKIHZvaWQgRm9ybWF0
dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVyTGF5b3V0KGNvbnN0
IExheW91dENvbnRleHQmIGxheW91dENvbnRleHQpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDNlYzJlZjc3YzkwNjNiOWQ0MzRmNDFiNzE4
MWIyZDE1MTY1MjBkZjcuLmQ2MTM3ZTIwYzY5NzQzNjU1NDYyNDc4MzI1NGQ1MWQzMDU5M2VkZTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC04NywyOCAr
ODcsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRy
ZW4oY29uc3QgQ29udGFpbmVyJikgY29uc3Q7CiAgICAgdm9pZCBsYXlvdXRPdXRPZkZsb3dEZXNj
ZW5kYW50cyhMYXlvdXRDb250ZXh0JnMpIGNvbnN0OwogCi0gICAgdm9pZCBjb21wdXRlUmVwbGFj
ZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0
OwotICAgIHZvaWQgY29tcHV0ZVJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJv
eCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OwotCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwg
dm9pZCB2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dChjb25zdCBMYXlvdXRD
b250ZXh0JikgY29uc3Q7CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1dGVPdXRP
ZkZsb3dOb25SZXBsYWNlZEhlaWdodChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiwgRGlzcGxh
eTo6Qm94JikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRXaWR0
aChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiwgRGlzcGxheTo6Qm94JikgY29uc3Q7Ci0gICAg
dm9pZCBjb21wdXRlT3V0T2ZGbG93UmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0
IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd1Jl
cGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNv
bnN0OwotCi0gICAgdm9pZCBjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRQb3NpdGlvbihMYXlv
dXRDb250ZXh0JiwgY29uc3QgQm94JiwgRGlzcGxheTo6Qm94JikgY29uc3Q7Ci0gICAgdm9pZCBj
b21wdXRlT3V0T2ZGbG93UmVwbGFjZWRQb3NpdGlvbihMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94
JiwgRGlzcGxheTo6Qm94JikgY29uc3Q7Ci0KLSAgICB2b2lkIGNvbXB1dGVGbG9hdGluZ05vblJl
cGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gmKSBj
b25zdDsKLSAgICB2b2lkIGNvbXB1dGVGbG9hdGluZ05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29u
dGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5p
dCBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KExheW91dENvbnRleHQmLCBj
b25zdCBCb3gmKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHNocmlua1RvRml0V2lkdGgoTGF5b3V0
Q29udGV4dCYsIGNvbnN0IEJveCYpIGNvbnN0OwotCiAgICAgV2Vha1B0cjxCb3g+IG1fcm9vdDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTZiZjU4YTNiYTg2NDcxNGIzZjI5ZmI2Y2Q1NzFhNDQ4
OWNlMjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsNDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuaCIK
KworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworc3RhdGljIExheW91dFVuaXQgY29udGVudEhl
aWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0
LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LnN0eWxlKCku
bG9naWNhbEhlaWdodCgpLmlzQXV0bygpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRp
bmdDb250ZXh0KCkpOworICAgIC8vIDEwLjYuNyAnQXV0bycgaGVpZ2h0cyBmb3IgYmxvY2sgZm9y
bWF0dGluZyBjb250ZXh0IHJvb3RzCisKKyAgICAvLyBJZiBpdCBvbmx5IGhhcyBpbmxpbmUtbGV2
ZWwgY2hpbGRyZW4sIHRoZSBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRvcCBv
ZiB0aGUgdG9wbW9zdCBsaW5lIGJveCBhbmQgdGhlIGJvdHRvbSBvZiB0aGUgYm90dG9tbW9zdCBs
aW5lIGJveC4KKyAgICAvLyBJZiBpdCBoYXMgYmxvY2stbGV2ZWwgY2hpbGRyZW4sIHRoZSBoZWln
aHQgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRvcCBtYXJnaW4tZWRnZSBvZiB0aGUgdG9w
bW9zdCBibG9jay1sZXZlbAorICAgIC8vIGNoaWxkIGJveCBhbmQgdGhlIGJvdHRvbSBtYXJnaW4t
ZWRnZSBvZiB0aGUgYm90dG9tbW9zdCBibG9jay1sZXZlbCBjaGlsZCBib3guCisKKyAgICAvLyBJ
biBhZGRpdGlvbiwgaWYgdGhlIGVsZW1lbnQgaGFzIGFueSBmbG9hdGluZyBkZXNjZW5kYW50cyB3
aG9zZSBib3R0b20gbWFyZ2luIGVkZ2UgaXMgYmVsb3cgdGhlIGVsZW1lbnQncyBib3R0b20gY29u
dGVudCBlZGdlLAorICAgIC8vIHRoZW4gdGhlIGhlaWdodCBpcyBpbmNyZWFzZWQgdG8gaW5jbHVk
ZSB0aG9zZSBlZGdlcy4gT25seSBmbG9hdHMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiB0aGlzIGJsb2Nr
IGZvcm1hdHRpbmcgY29udGV4dCBhcmUgdGFrZW4KKyAgICAvLyBpbnRvIGFjY291bnQsIGUuZy4s
IGZsb2F0cyBpbnNpZGUgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzIG9yIG90aGVy
IGZsb2F0cyBhcmUgbm90LgorICAgIGlmICghaXM8Q29udGFpbmVyPihsYXlvdXRCb3gpIHx8ICFk
b3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3RDb250YWluZXIg
PSBkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCk7CisgICAgaWYgKGZvcm1hdHRpbmdSb290
Q29udGFpbmVyLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBhdXRvKiBmaXJzdERpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmZpcnN0SW5GbG93
Q2hpbGQoKSk7CisgICAgYXV0byogbGFzdERpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmxhc3RJbkZsb3dDaGls
ZCgpKTsKKworICAgIGF1dG8gdG9wID0gZmlyc3REaXNwbGF5Qm94LT5tYXJnaW5Cb3goKS55KCk7
CisgICAgYXV0byBib3R0b20gPSBsYXN0RGlzcGxheUJveC0+bWFyZ2luQm94KCkubWF4WSgpOwor
ICAgIC8vIEZJWE1FOiBhZGQgZmxvYXRpbmcgc3VwcG9ydC4KKyAgICByZXR1cm4gYm90dG9tIC0g
dG9wOworfQorCitzdGF0aWMgTGF5b3V0VW5pdCBzaHJpbmtUb0ZpdFdpZHRoKExheW91dENvbnRl
eHQmLCBjb25zdCBCb3gmKQoreworICAgIHJldHVybiB7IH07Cit9CisKK0xheW91dFVuaXQgRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNT
RVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxh
Y2VkKCkpOworCisgICAgLy8gMTAuNi40IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxh
Y2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVs
ZW1lbnRzLCB0aGUgdXNlZCB2YWx1ZXMgb2YgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBz
YXRpc2Z5IHRoaXMgY29uc3RyYWludDoKKyAgICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdi
b3JkZXItdG9wLXdpZHRoJyArICdwYWRkaW5nLXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJv
dHRvbScgKyAnYm9yZGVyLWJvdHRvbS13aWR0aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9t
JworICAgIC8vID0gaGVpZ2h0IG9mIGNvbnRhaW5pbmcgYmxvY2sKKworICAgIC8vIElmIGFsbCB0
aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFuZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3An
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93
LgorCisgICAgLy8gSWYgbm9uZSBvZiB0aGUgdGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFy
Z2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gdW5kZXIgdGhlIGV4dHJhCisgICAgLy8gY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lu
cyBnZXQgZXF1YWwgdmFsdWVzLiBJZiBvbmUgb2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90
dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KKyAgICAv
LyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisKKyAgICAvLyBPdGhlcndpc2Us
IHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCisK
KyAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMg
bm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAx
MC42LjcsCisgICAgLy8gICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCisgICAgLy8gMi4gJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRo
ZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZv
cgorICAgIC8vICAgICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBz
b2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAvLyAzLiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdh
dXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9u
IHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNldCAnYXV0bycKKyAgICAvLyAgICAgdmFsdWVzIGZv
ciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdi
b3R0b20nCisgICAgLy8gNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScg
YXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAvLyA1LiAn
aGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhl
biAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUg
c2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVpZ2h0JworICAgIC8vIDYuICdib3R0b20nIGlzICdh
dXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycg
dmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2
ZSBmb3IgJ2JvdHRvbScKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAg
IGF1dG8gdG9wID0gc3R5bGUubG9naWNhbFRvcCgpOworICAgIGF1dG8gYm90dG9tID0gc3R5bGUu
bG9naWNhbEJvdHRvbSgpOworICAgIGF1dG8gaGVpZ2h0ID0gc3R5bGUubG9naWNhbEhlaWdodCgp
OyAKKworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gbGF5b3V0Q29udGV4dC5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLT5oZWlnaHQo
KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVkSGVpZ2h0VmFsdWU7CisKKyAgICBpZiAoIWhlaWdo
dC5pc0F1dG8oKSkKKyAgICAgICAgY29tcHV0ZWRIZWlnaHRWYWx1ZSA9IHZhbHVlRm9yTGVuZ3Ro
KGhlaWdodCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKKyAgICBlbHNlIGlmICgodG9wLmlzQXV0
bygpICYmIGJvdHRvbS5pc0F1dG8oKSkKKyAgICAgICAgfHwgKHRvcC5pc0F1dG8oKSAmJiAhYm90
dG9tLmlzQXV0bygpKQorICAgICAgICB8fCAoIXRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRv
KCkpKSB7CisgICAgICAgIC8vIEFsbCBhdXRvICgjMyksICMxIGFuZCAjMworICAgICAgICBjb21w
dXRlZEhlaWdodFZhbHVlID0gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChs
YXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgIH0gZWxzZSBpZiAoIXRvcC5pc0F1dG8oKSAm
JiAhYm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIC8vICM1CisgICAgICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSAqbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CisKKyAgICAgICAgYXV0byBtYXJnaW5Ub3AgPSBkaXNwbGF5Qm94Lm1hcmdpblRvcCgpOworICAg
ICAgICBhdXRvIG1hcmdpbkJvdHRvbSA9IGRpc3BsYXlCb3gubWFyZ2luQm90dG9tKCk7CisgICAg
CisgICAgICAgIGF1dG8gcGFkZGluZ1RvcCA9IGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpOworICAg
ICAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBkaXNwbGF5Qm94LnBhZGRpbmdCb3R0b20oKTsKKwor
ICAgICAgICBhdXRvIGJvcmRlclRvcCA9IGRpc3BsYXlCb3guYm9yZGVyVG9wKCk7CisgICAgICAg
IGF1dG8gYm9yZGVyQm90dG9tID0gZGlzcGxheUJveC5ib3JkZXJCb3R0b20oKTsKKworICAgICAg
ICBjb21wdXRlZEhlaWdodFZhbHVlID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKHRvcC52YWx1
ZSgpICsgbWFyZ2luVG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20g
KyBib3JkZXJCb3R0b20gKyBtYXJnaW5Cb3R0b20gKyBib3R0b20udmFsdWUoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gIzIgIzQgIzYgaGF2ZSBoZWlnaHQgIT0gYXV0bworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRW
YWx1ZTsKK30KKworTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpvdXRPZkZs
b3dOb25SZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkgJiYgIWxheW91dEJveC5yZXBsYWNlZCgpKTsKKyAgICAKKyAgICAvLyAxMC4zLjcgQWJz
b2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8v
ICdsZWZ0JyArICdtYXJnaW4tbGVmdCcgKyAnYm9yZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmct
bGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcg
KyAnbWFyZ2luLXJpZ2h0JyArICdyaWdodCcKKyAgICAvLyA9IHdpZHRoIG9mIGNvbnRhaW5pbmcg
YmxvY2sKKworICAgIC8vIElmIGFsbCB0aHJlZSBvZiAnbGVmdCcsICd3aWR0aCcsIGFuZCAncmln
aHQnIGFyZSAnYXV0byc6IEZpcnN0IHNldCBhbnkgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1s
ZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMC4KKyAgICAvLyBUaGVuLCBpZiB0aGUgJ2RpcmVj
dGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJsaXNoaW5nIHRoZSBzdGF0aWMtcG9z
aXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQgJ2xlZnQnIHRvIHRoZSBzdGF0aWMK
KyAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVy
d2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBu
dW1iZXIgb25lIGJlbG93LgorCisgICAgLy8gMS4gJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSAnYXV0
bycgYW5kICdyaWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5rLXRv
LWZpdC4gVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnCisgICAgLy8gMi4gJ2xlZnQnIGFuZCAncmlnaHQn
IGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMgbm90ICdhdXRvJywgdGhlbiBpZiB0aGUgJ2RpcmVj
dGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJsaXNoaW5nIHRoZSBzdGF0aWMtcG9z
aXRpb24gCisgICAgLy8gICAgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQgJ2xlZnQnIHRv
IHRoZSBzdGF0aWMgcG9zaXRpb24sIG90aGVyd2lzZSBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGlj
IHBvc2l0aW9uLgorICAgIC8vICAgIFRoZW4gc29sdmUgZm9yICdsZWZ0JyAoaWYgJ2RpcmVjdGlv
biBpcyAncnRsJykgb3IgJ3JpZ2h0JyAoaWYgJ2RpcmVjdGlvbicgaXMgJ2x0cicpLgorICAgIC8v
IDMuICd3aWR0aCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ2xlZnQnIGlzIG5vdCAnYXV0
bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQgLiBUaGVuIHNvbHZlIGZvciAncmln
aHQnCisgICAgLy8gNC4gJ2xlZnQnIGlzICdhdXRvJywgJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUg
bm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ2xlZnQnCisgICAgLy8gNS4gJ3dpZHRoJyBpcyAn
YXV0bycsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3Ig
J3dpZHRoJworICAgIC8vIDYuICdyaWdodCcgaXMgJ2F1dG8nLCAnbGVmdCcgYW5kICd3aWR0aCcg
YXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdyaWdodCcKKyAgICBhdXRvJiBzdHlsZSA9
IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gbGVmdCA9IHN0eWxlLmxvZ2ljYWxMZWZ0KCk7
CisgICAgYXV0byByaWdodCA9IHN0eWxlLmxvZ2ljYWxSaWdodCgpOworICAgIGF1dG8gd2lkdGgg
PSBzdHlsZS5sb2dpY2FsV2lkdGgoKTsKKworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGgg
PSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWlu
aW5nQmxvY2soKSktPndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlZFdpZHRoVmFsdWU7
CisKKyAgICBpZiAoIXdpZHRoLmlzQXV0bygpKQorICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUg
PSB2YWx1ZUZvckxlbmd0aCh3aWR0aCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGVsc2Ug
aWYgKChsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygpKQorICAgICAgICB8fCAobGVmdC5p
c0F1dG8oKSAmJiAhcmlnaHQuaXNBdXRvKCkpCisgICAgICAgIHx8ICghbGVmdC5pc0F1dG8oKSAm
JiByaWdodC5pc0F1dG8oKSkpIHsKKyAgICAgICAgLy8gQWxsIGF1dG8gKCMxKSwgIzEgYW5kICMz
CisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsKKyAgICB9IGVsc2UgaWYgKCFsZWZ0LmlzQXV0bygpICYmICFyaWdo
dC5pc0F1dG8oKSkgeworICAgICAgICAvLyAjNQorICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
KmxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworCisgICAg
ICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRpc3BsYXlCb3gubWFyZ2luTGVmdCgpOworICAgICAgICBh
dXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxheUJveC5tYXJnaW5SaWdodCgpOworICAgIAorICAgICAg
ICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpOworICAgICAgICBh
dXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCk7CisKKyAgICAgICAg
YXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0KCk7CisgICAgICAgIGF1dG8g
Ym9yZGVyUmlnaHQgPSBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCk7CisKKyAgICAgICAgY29tcHV0
ZWRXaWR0aFZhbHVlID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAobGVmdC52YWx1ZSgpICsgbWFy
Z2luTGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRl
clJpZ2h0ICsgbWFyZ2luUmlnaHQgKyByaWdodC52YWx1ZSgpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyAjMiAjNCAjNiBoYXZlIHdpZHRoICE9IGF1dG8KKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1ZTsKK30KKwor
TGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhl
aWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkK
K3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIGxheW91
dEJveC5yZXBsYWNlZCgpKTsKKyAgICAvLyAxMC42LjUgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBy
ZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gVGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdo
dCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIHJl
dHVybiByZXBsYWNlZEhlaWdodChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworfQorCitMYXlv
dXRVbml0IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkV2lkdGgo
TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7Cisg
ICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gu
cmVwbGFjZWQoKSk7CisgICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFj
ZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMg
ZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIHJldHVybiBy
ZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCk7Cit9CisKK0xheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6ZmxvYXRpbmdOb25SZXBsYWNlZEhlaWdodChMYXlv
dXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBB
U1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5yZXBs
YWNlZCgpKTsKKyAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKKyAgICAvLworICAgIC8v
IEZsb2F0aW5nLCBub24tcmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8KKyAgICAvLyBJZiAnaGVp
Z2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2Nl
bmRhbnRzIHBlciAxMC42LjcuCisgICAgYXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodC5pc0F1dG8oKSA/IGNvbnRlbnRIZWln
aHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KSA6IExh
eW91dFVuaXQoaGVpZ2h0LnZhbHVlKCkpOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aChMYXlvdXRDb250ZXh0JiBsYXlv
dXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94
LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5yZXBsYWNlZCgpKTsKKyAgICAv
LyAxMC4zLjUgRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cworCisgICAgLy8gSWYgJ3dp
ZHRoJyBpcyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5r
LXRvLWZpdCIgd2lkdGguCisgICAgYXV0byB3aWR0aCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2lj
YWxXaWR0aCgpOworICAgIHJldHVybiB3aWR0aC5pc0F1dG8oKSA/IHNocmlua1RvRml0V2lkdGgo
bGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KSA6IExheW91dFVuaXQod2lkdGgudmFsdWUoKSk7Cit9
CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNl
ZEhlaWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJv
eCkKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgbGF5
b3V0Qm94LnJlcGxhY2VkKCkpOworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5l
LWJsb2NrJworICAgIC8vIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9h
dGluZyByZXBsYWNlZCBlbGVtZW50cworICAgIHJldHVybiByZXBsYWNlZEhlaWdodChsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gpOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRXaWR0aChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0
LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRp
bmdQb3NpdGlvbmVkKCkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOworICAgIC8vIDEwLjMuNiBG
bG9hdGluZywgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIFRoZSB1c2VkIHZhbHVl
IG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRz
LgorICAgIHJldHVybiByZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCk7Cit9
CisKK0xheW91dFBvaW50IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd05vblJl
cGxhY2VkUG9zaXRpb24oTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBs
YXlvdXRCb3gpCit7CisgICAgLy8gMTAuMy43IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJl
cGxhY2VkIGVsZW1lbnRzIChsZWZ0L3JpZ2h0KQorICAgIC8vIDEwLjYuNCBBYnNvbHV0ZWx5IHBv
c2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyAodG9wL2JvdHRvbSkKKworICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2UndmUgdGhlIHNpemUgY29tcHV0ZWQuCisgICAgYXV0byYgZGlzcGxheUJv
eCA9ICpsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAg
ICBhdXRvIHNpemUgPSBkaXNwbGF5Qm94LnNpemUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91
dEJveC5zdHlsZSgpOworCisgICAgLy8gMTAuNi40IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9u
LXJlcGxhY2VkIGVsZW1lbnRzCisgICAgYXV0byB0b3AgPSBzdHlsZS5sb2dpY2FsVG9wKCk7Cisg
ICAgYXV0byBib3R0b20gPSBzdHlsZS5sb2dpY2FsQm90dG9tKCk7CisgICAgYXV0byBjb250YWlu
aW5nQmxvY2tIZWlnaHQgPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSktPmhlaWdodCgpOworCisgICAgLy8gJ3RvcCcgKyAn
bWFyZ2luLXRvcCcgKyAnYm9yZGVyLXRvcC13aWR0aCcgKyAncGFkZGluZy10b3AnICsgJ2hlaWdo
dCcgKyAncGFkZGluZy1ib3R0b20nICsgJ2JvcmRlci1ib3R0b20td2lkdGgnICsgJ21hcmdpbi1i
b3R0b20nICsgJ2JvdHRvbScKKyAgICAvLyA9IGhlaWdodCBvZiBjb250YWluaW5nIGJsb2NrCisg
ICAgLy8KKyAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRv
bScgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50
IHBlciAxMC42LjcsCisgICAgLy8gICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRv
cCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCisgICAgLy8g
Mi4gJ3RvcCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0
bycsIHRoZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFs
dWVzIGZvcgorICAgIC8vICAgICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAs
IGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAvLyAzLiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScg
YXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJh
c2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNldCAnYXV0bycKKyAgICAvLyAgICAgdmFs
dWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUg
Zm9yICdib3R0b20nCisgICAgLy8gNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2Jv
dHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4t
dG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAv
LyA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRv
JywgdGhlbiAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyBhcmUgc2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVpZ2h0JworICAgIC8vIDYuICdib3R0b20n
IGlzICdhdXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAn
YXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFu
ZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVkVG9wVmFsdWU7Cisg
ICAgaWYgKHRvcC5pc0F1dG8oKSAmJiAhYm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIC8vICMx
ICM0CisgICAgICAgIGF1dG8gbWFyZ2luVG9wID0gZGlzcGxheUJveC5tYXJnaW5Ub3AoKTsKKyAg
ICAgICAgYXV0byBtYXJnaW5Cb3R0b20gPSBkaXNwbGF5Qm94Lm1hcmdpbkJvdHRvbSgpOworICAg
IAorICAgICAgICBhdXRvIHBhZGRpbmdUb3AgPSBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKTsKKyAg
ICAgICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJveC5wYWRkaW5nQm90dG9tKCk7CisK
KyAgICAgICAgYXV0byBib3JkZXJUb3AgPSBkaXNwbGF5Qm94LmJvcmRlclRvcCgpOworICAgICAg
ICBhdXRvIGJvcmRlckJvdHRvbSA9IGRpc3BsYXlCb3guYm9yZGVyQm90dG9tKCk7CisKKyAgICAg
ICAgY29tcHV0ZWRUb3BWYWx1ZSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtIChtYXJnaW5Ub3Ag
KyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgc2l6ZS5oZWlnaHQoKSArIHBhZGRpbmdCb3R0b20g
KyBib3JkZXJCb3R0b20gKyBtYXJnaW5Cb3R0b20gKyBib3R0b20udmFsdWUoKSk7CisgICAgfSBl
bHNlIGlmICh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIC8vICMy
CisgICAgICAgIC8vIEFscmVhZHkgY29tcHV0ZWQgYXMgcGFydCBvZiB0aGUgY29tcHV0ZVN0YXRp
Y1Bvc2l0aW9uKCk7CisgICAgICAgIGNvbXB1dGVkVG9wVmFsdWUgPSBkaXNwbGF5Qm94LnRvcCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICMzICM1ICM2IGhhdmUgdG9wICE9IGF1dG8KKyAg
ICAgICAgY29tcHV0ZWRUb3BWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKHRvcCwgY29udGFpbmluZ0Js
b2NrSGVpZ2h0KTsKKyAgICB9CisKKworICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cworICAgIGF1dG8gbGVmdCA9IHN0eWxlLmxvZ2ljYWxM
ZWZ0KCk7CisgICAgYXV0byByaWdodCA9IHN0eWxlLmxvZ2ljYWxSaWdodCgpOworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPndpZHRoKCk7CisKKyAgICAvLyAnbGVm
dCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQn
ICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsgJ21h
cmdpbi1yaWdodCcgKyAncmlnaHQnCisgICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2Nr
CisgICAgLy8KKyAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4t
bGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCisgICAgLy8gVGhlbiwgaWYgdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBv
c2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGlj
CisgICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhl
cndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUg
bnVtYmVyIG9uZSBiZWxvdy4KKworICAgIC8vIDEuICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgJ2F1
dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10
by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0JworICAgIC8vIDIuICdsZWZ0JyBhbmQgJ3JpZ2h0
JyBhcmUgJ2F1dG8nIGFuZCAnd2lkdGgnIGlzIG5vdCAnYXV0bycsIHRoZW4gaWYgdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBv
c2l0aW9uIAorICAgIC8vICAgIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0
byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndpc2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbi4KKyAgICAvLyAgICBUaGVuIHNvbHZlIGZvciAnbGVmdCcgKGlmICdkaXJlY3Rp
b24gaXMgJ3J0bCcpIG9yICdyaWdodCcgKGlmICdkaXJlY3Rpb24nIGlzICdsdHInKS4KKyAgICAv
LyAzLiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1
dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3Jp
Z2h0JworICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0bycsICd3aWR0aCcgYW5kICdyaWdodCcgYXJl
IG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdsZWZ0JworICAgIC8vIDUuICd3aWR0aCcgaXMg
J2F1dG8nLCAnbGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9y
ICd3aWR0aCcKKyAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgn
IGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQnCisgICAgTGF5b3V0VW5pdCBj
b21wdXRlZExlZnRWYWx1ZTsKKyAgICBpZiAobGVmdC5pc0F1dG8oKSAmJiAhcmlnaHQuaXNBdXRv
KCkpIHsKKyAgICAgICAgLy8gIzEgIzQKKyAgICAgICAgYXV0byBtYXJnaW5MZWZ0ID0gZGlzcGxh
eUJveC5tYXJnaW5MZWZ0KCk7CisgICAgICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBkaXNwbGF5Qm94
Lm1hcmdpblJpZ2h0KCk7CisgICAgCisgICAgICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBkaXNwbGF5
Qm94LnBhZGRpbmdMZWZ0KCk7CisgICAgICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gZGlzcGxheUJv
eC5wYWRkaW5nUmlnaHQoKTsKKworICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5Qm94
LmJvcmRlckxlZnQoKTsKKyAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3BsYXlCb3guYm9y
ZGVyUmlnaHQoKTsKKworICAgICAgICBjb21wdXRlZExlZnRWYWx1ZSA9IGNvbnRhaW5pbmdCbG9j
a1dpZHRoIC0gKG1hcmdpbkxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBzaXplLndp
ZHRoKCkgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIG1hcmdpblJpZ2h0ICsgcmlnaHQu
dmFsdWUoKSk7CisgICAgfSBlbHNlIGlmIChsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygp
KSB7CisgICAgICAgIC8vICMyCisgICAgICAgIC8vIEZJWE1FOiBydGwKKyAgICAgICAgY29tcHV0
ZWRMZWZ0VmFsdWUgPSBkaXNwbGF5Qm94LmxlZnQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyAjMyAjNSAjNiBoYXZlIGxlZnQgIT0gYXV0bworICAgICAgICBjb21wdXRlZExlZnRWYWx1ZSA9
IHZhbHVlRm9yTGVuZ3RoKGxlZnQsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4geyBjb21wdXRlZExlZnRWYWx1ZSwgY29tcHV0ZWRUb3BWYWx1ZSB9OworfQorCitM
YXlvdXRQb2ludCBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFBv
c2l0aW9uKExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKQoreworICAgIHJldHVybiB7IH07Cit9
CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6cmVwbGFjZWRIZWlnaHQo
TGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIEFTU0VSVCgobGF5
b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpIHx8IGxheW91dEJveC5pc0luRmxvdygpKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQo
KSk7CisgICAgLy8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVu
dHMuIFRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGlu
ZSByZXBsYWNlZCBlbGVtZW50cy4KKworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxl
bWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5s
aW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcg
cmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdoZWlnaHQnIGFuZCAnd2lk
dGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBh
bHNvIGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBp
cyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lz
ZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVs
ZW1lbnQgaGFzIGFuIGludHJpbnNpYyByYXRpbyB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWln
aHQnIGlzOgorICAgIC8vICAgICh1c2VkIHdpZHRoKSAvIChpbnRyaW5zaWMgcmF0aW8pCisgICAg
Ly8KKyAgICAvLyAzLiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVl
IG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVu
IHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KKyAg
ICAvLworICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFs
dWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0
aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIG11c3QgYmUgc2V0IHRvCisgICAgLy8gICAg
dGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8s
IGhhcyBhIGhlaWdodCBub3QgZ3JlYXRlciB0aGFuIDE1MHB4LCBhbmQgaGFzIGEgd2lkdGggbm90
IGdyZWF0ZXIgdGhhbiB0aGUgZGV2aWNlIHdpZHRoLgorICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0
Qm94LnN0eWxlKCk7CisgICAgYXV0byB3aWR0aCA9IHN0eWxlLmxvZ2ljYWxXaWR0aCgpOworICAg
IGF1dG8gaGVpZ2h0ID0gc3R5bGUubG9naWNhbEhlaWdodCgpOworCisgICAgTGF5b3V0VW5pdCBj
b21wdXRlZEhlaWdodFZhbHVlOworICAgIGF1dG8gcmVwbGFjZWQgPSBsYXlvdXRCb3gucmVwbGFj
ZWQoKTsKKyAgICBBU1NFUlQocmVwbGFjZWQpOworCisgICAgaWYgKGhlaWdodC5pc0F1dG8oKSkg
eworICAgICAgICBpZiAod2lkdGguaXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0ludHJpbnNpY0hl
aWdodCgpKSB7CisgICAgICAgICAgICAvLyAjMQorICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHRW
YWx1ZSA9IHJlcGxhY2VkLT5pbnRyaW5zaWNIZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChy
ZXBsYWNlZC0+aGFzSW50cmluc2ljUmF0aW8oKSkgeworICAgICAgICAgICAgLy8gIzIKKyAgICAg
ICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSB3aWR0aC52YWx1ZSgpIC8gcmVwbGFjZWQtPmlu
dHJpbnNpY1JhdGlvKCk7CisgICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZWQtPmhhc0ludHJpbnNp
Y0hlaWdodCgpKSB7CisgICAgICAgICAgICAvLyAjMworICAgICAgICAgICAgY29tcHV0ZWRIZWln
aHRWYWx1ZSA9IHJlcGxhY2VkLT5pbnRyaW5zaWNIZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vICM0CisgICAgICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVlID0gMTUw
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSBo
ZWlnaHQudmFsdWUoKTsKKworICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlOworfQorCitM
YXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6OnJlcGxhY2VkV2lkdGgoTGF5b3V0
Q29udGV4dCYsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIEFTU0VSVCgobGF5b3V0Qm94
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpIHx8IGxheW91dEJveC5pc0luRmxvdygpKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CisK
KyAgICAvLyAxMC4zLjQgQmxvY2stbGV2ZWwsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBm
bG93OiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGlu
ZSByZXBsYWNlZCBlbGVtZW50cy4KKyAgICAvLyAxMC4zLjYgRmxvYXRpbmcsIHJlcGxhY2VkIGVs
ZW1lbnRzOiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlu
bGluZSByZXBsYWNlZCBlbGVtZW50cy4KKyAgICAvLyAxMC4zLjggQWJzb2x1dGVseSBwb3NpdGlv
bmVkLCByZXBsYWNlZCBlbGVtZW50czogVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRl
cm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisKKyAgICAvLyAxMC4zLjIg
SW5saW5lLCByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gMS4gSWYgJ2hlaWdodCcg
YW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBl
bGVtZW50IGFsc28gaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3
aWR0aCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgorICAgIC8vCisgICAgLy8gMi4gSWYg
J2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycg
YW5kIHRoZSBlbGVtZW50IGhhcyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBkb2VzIGhhdmUgYW4g
aW50cmluc2ljIGhlaWdodCBhbmQgaW50cmluc2ljIHJhdGlvOworICAgIC8vICAgIG9yIGlmICd3
aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0JyBoYXMgc29tZSBv
dGhlciBjb21wdXRlZCB2YWx1ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2ZSBhbiBpbnRyaW5z
aWMgcmF0aW87CisgICAgLy8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzOiAo
dXNlZCBoZWlnaHQpICogKGludHJpbnNpYyByYXRpbykKKyAgICAvLworICAgIC8vIDMuIElmICdo
ZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFu
ZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBpbnRyaW5zaWMgaGVp
Z2h0IG9yIHdpZHRoLAorICAgIC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBp
cyB1bmRlZmluZWQgaW4gQ1NTIDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQsIGlm
IHRoZSBjb250YWluaW5nIGJsb2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxmIGRlcGVuZCBvbiB0
aGUgcmVwbGFjZWQKKyAgICAvLyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4gdGhlIHVzZWQgdmFs
dWUgb2YgJ3dpZHRoJyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24g
dXNlZCBmb3IgYmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxv
dy4KKyAgICAvLworICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRl
ZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHdpZHRo
LCB0aGVuIHRoYXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcu
CisgICAgLy8KKyAgICAvLyA1LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQg
dmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0
LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBweC4KKyAgICAvLyAg
ICBJZiAzMDBweCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2Ug
dGhlIHdpZHRoIG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBh
bmQgZml0cyB0aGUgZGV2aWNlIGluc3RlYWQuCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
c3R5bGUoKTsKKyAgICBhdXRvIHdpZHRoID0gc3R5bGUubG9naWNhbFdpZHRoKCk7CisgICAgYXV0
byBoZWlnaHQgPSBzdHlsZS5sb2dpY2FsSGVpZ2h0KCk7CisKKyAgICBMYXlvdXRVbml0IGNvbXB1
dGVkV2lkdGhWYWx1ZTsKKyAgICBhdXRvIHJlcGxhY2VkID0gbGF5b3V0Qm94LnJlcGxhY2VkKCk7
CisgICAgQVNTRVJUKHJlcGxhY2VkKTsKKworICAgIGlmICh3aWR0aC5pc0F1dG8oKSAmJiBoZWln
aHQuaXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKKyAgICAgICAg
Ly8gIzEKKyAgICAgICAgY29tcHV0ZWRXaWR0aFZhbHVlID0gcmVwbGFjZWQtPmludHJpbnNpY1dp
ZHRoKCk7CisgICAgfSBlbHNlIGlmICh3aWR0aC5pc0F1dG8oKSAmJiAoaGVpZ2h0LmlzQ2FsY3Vs
YXRlZCgpIHx8IHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgJiYgcmVwbGFjZWQtPmhh
c0ludHJpbnNpY1JhdGlvKCkpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgYXV0byB1c2VkSGVp
Z2h0ID0gaGVpZ2h0LmlzQ2FsY3VsYXRlZCgpID8gTGF5b3V0VW5pdChoZWlnaHQudmFsdWUoKSkg
OiByZXBsYWNlZC0+aW50cmluc2ljSGVpZ2h0KCk7CisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1
ZSA9IHVzZWRIZWlnaHQgKiByZXBsYWNlZC0+aW50cmluc2ljUmF0aW8oKTsKKyAgICB9IGVsc2Ug
aWYgKHdpZHRoLmlzQXV0bygpICYmIGhlaWdodC5pc0F1dG8oKSAmJiByZXBsYWNlZC0+aGFzSW50
cmluc2ljUmF0aW8oKSkgeworICAgICAgICAvLyAjMworICAgICAgICAvLyBGSVhNRTogdW5kZWZp
bmVkIGJ1dCBzdXJlbHkgZG9hYmxlLgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOworICAgIH0gZWxzZSBpZiAod2lkdGguaXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0ludHJp
bnNpY1dpZHRoKCkpIHsKKyAgICAgICAgLy8gIzQKKyAgICAgICAgY29tcHV0ZWRXaWR0aFZhbHVl
ID0gcmVwbGFjZWQtPmludHJpbnNpY1dpZHRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
IzUKKyAgICAgICAgY29tcHV0ZWRXaWR0aFZhbHVlID0gMzAwOworICAgIH0KKworICAgIHJldHVy
biBjb21wdXRlZFdpZHRoVmFsdWU7Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDlm
NzAzMmY3MTIyNGVkNmM0YTQ1Y2RjYTViMTM1YjU1MGVkYzBlZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmgKQEAgLTAs
MCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5
b3V0VW5pdDsKKworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeTsKK2NsYXNzIEJveDsKK2NsYXNzIEZvcm1hdHRpbmdDb250ZXh0OworY2xh
c3MgTGF5b3V0Q29udGV4dDsKKworLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGdlbmVyaWMgcG9z
aXRpb25pbmcgYW5kIHNpemluZy4KK2NsYXNzIEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkgewor
ICAgIGZyaWVuZCBjbGFzcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk7CitwdWJsaWM6
CisgICAgc3RhdGljIExheW91dFVuaXQgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0
Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IG91dE9mRmxvd05v
blJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworCisgICAgc3RhdGlj
IExheW91dFVuaXQgb3V0T2ZGbG93UmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0
IEJveCYpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IG91dE9mRmxvd1JlcGxhY2VkV2lkdGgoTGF5
b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworCisgICAgc3RhdGljIExheW91dFVuaXQgZmxvYXRp
bmdOb25SZXBsYWNlZEhlaWdodChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisgICAgc3Rh
dGljIExheW91dFVuaXQgZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmLCBj
b25zdCBCb3gmKTsKKworICAgIHN0YXRpYyBMYXlvdXRVbml0IGZsb2F0aW5nUmVwbGFjZWRIZWln
aHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IGZs
b2F0aW5nUmVwbGFjZWRXaWR0aChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisKKyAgICBz
dGF0aWMgTGF5b3V0UG9pbnQgb3V0T2ZGbG93Tm9uUmVwbGFjZWRQb3NpdGlvbihMYXlvdXRDb250
ZXh0JiwgY29uc3QgQm94Jik7CisgICAgc3RhdGljIExheW91dFBvaW50IG91dE9mRmxvd1JlcGxh
Y2VkUG9zaXRpb24oTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworCitwcml2YXRlOgorICAg
IHN0YXRpYyBMYXlvdXRVbml0IHJlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBC
b3gmKTsKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCByZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQm
LCBjb25zdCBCb3gmKTsKK307CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKaW5kZXggY2QwNDhmYmIzYWIwZjlmNzIzYTBmYzZjZTVlYWIzZTAwNDQ1OTQ0MC4u
ZGNmYTFkMGMxZjVhZjhmMWU3ZmE1NDUzNTAzYTA2MDM1YjBhOTZhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9y
bWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCwxMSArMjgsMTMgQEAKIAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRl
ICJCbG9ja01hcmdpbkNvbGxhcHNlLmgiCiAjaW5jbHVkZSAiRGlzcGxheUJveC5oIgogI2luY2x1
ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKKyNpbmNs
dWRlICJGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5o
IgpAQCAtMTMwLDY5ICsxMzIsMzIgQEAgUmVmPEZsb2F0aW5nU3RhdGU+IEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNyZWF0ZU9yRmluZEZsb2F0aW5nU3RhdGUoTGF5b3V0Q29udGUKIAogdm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb24oTGF5b3V0Q29udGV4
dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlz
cGxheUJveCkgY29uc3QKIHsKLSAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlz
dXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRpbmcKLSAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcg
Y29udGV4dCwgYm94ZXMgYXJlIGxhaWQgb3V0IG9uZSBhZnRlciB0aGUgb3RoZXIsIHZlcnRpY2Fs
bHksIGJlZ2lubmluZyBhdCB0aGUgdG9wIG9mIGEgY29udGFpbmluZyBibG9jay4KLSAgICAvLyBU
aGUgdmVydGljYWwgZGlzdGFuY2UgYmV0d2VlbiB0d28gc2libGluZyBib3hlcyBpcyBkZXRlcm1p
bmVkIGJ5IHRoZSAnbWFyZ2luJyBwcm9wZXJ0aWVzLgotICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMg
YmV0d2VlbiBhZGphY2VudCBibG9jay1sZXZlbCBib3hlcyBpbiBhIGJsb2NrIGZvcm1hdHRpbmcg
Y29udGV4dCBjb2xsYXBzZS4KLSAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwg
ZWFjaCBib3gncyBsZWZ0IG91dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVmdCBlZGdlIG9mIHRoZSBj
b250YWluaW5nIGJsb2NrIChmb3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0aW5nLCByaWdodCBlZGdl
cyB0b3VjaCkuCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tDb250ZW50Qm94ID0gbGF5b3V0Q29u
dGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkp
LT5jb250ZW50Qm94KCk7Ci0gICAgLy8gU3RhcnQgZnJvbSB0aGUgdG9wIG9mIHRoZSBjb250YWlu
ZXIncyBjb250ZW50IGJveC4KLSAgICBhdXRvIHRvcCA9IGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRC
b3gueSgpOwotICAgIGF1dG8gbGVmdCA9IGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3gueCgpOwot
ICAgIGlmIChhdXRvKiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJ
bkZsb3dTaWJsaW5nKCkpCi0gICAgICAgIHRvcCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZv
ckxheW91dEJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKS0+Ym90dG9tKCkgKyBtYXJnaW5Cb3R0
b20oKnByZXZpb3VzSW5GbG93U2libGluZyk7Ci0gICAgTGF5b3V0UG9pbnQgdG9wTGVmdCA9IHsg
dG9wLCBsZWZ0IH07Ci0gICAgdG9wTGVmdC5tb3ZlQnkoeyBtYXJnaW5MZWZ0KGxheW91dEJveCks
IG1hcmdpblRvcChsYXlvdXRCb3gpIH0pOworICAgIGF1dG8gdG9wTGVmdCA9IEJsb2NrRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeTo6c3RhdGljUG9zaXRpb24obGF5b3V0Q29udGV4dCwgbGF5b3V0
Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9wTGVmdCk7CiB9CiAKLXZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUluRmxvd1dpZHRoKExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlC
b3gpIGNvbnN0Ci17Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQoKSkgewotICAgICAgICBj
b21wdXRlSW5GbG93Tm9uUmVwbGFjZWRXaWR0aChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIGRp
c3BsYXlCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXB1dGVSZXBsYWNlZFdp
ZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7Ci19Ci0KLXZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUluRmxvd05vblJlcGxhY2VkV2lkdGgoTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJv
eCYgZGlzcGxheUJveCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUluRmxvd0hlaWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxh
eW91dEJveCwgRGlzcGxheTo6Qm94JiBkaXNwbGF5Qm94KSBjb25zdAogewotICAgIEFTU0VSVChs
YXlvdXRCb3guaXNJbkZsb3coKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOworICAgIExheW91
dFVuaXQgY29tcHV0ZWRIZWlnaHQ7CiAKLSAgICAvLyAxMC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1y
ZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwotICAgIC8vIFRoZSBmb2xsb3dpbmcgY29u
c3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRoZSB1c2VkIHZhbHVlcyBvZiB0aGUgb3RoZXIgcHJv
cGVydGllczoKLSAgICAvLyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdw
YWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQt
d2lkdGgnICsgJ21hcmdpbi1yaWdodCcgPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2NrCisgICAg
aWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQorICAgICAgICBjb21wdXRlZEhlaWdodCA9IEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRIZWlnaHQobGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsKKyAgICBlbHNlCisgICAgICAgIGNvbXB1dGVkSGVpZ2h0ID0gQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodChsYXlv
dXRDb250ZXh0LCBsYXlvdXRCb3gpOwogCi0gICAgLy8gSWYgJ3dpZHRoJyBpcyBzZXQgdG8gJ2F1
dG8nLCBhbnkgb3RoZXIgJ2F1dG8nIHZhbHVlcyBiZWNvbWUgJzAnIGFuZCAnd2lkdGgnIGZvbGxv
d3MgZnJvbSB0aGUgcmVzdWx0aW5nIGVxdWFsaXR5LgotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0
Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRl
eHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS0+
d2lkdGgoKTsKLQotICAgIExheW91dFVuaXQgY29tcHV0ZWRXaWR0aFZhbHVlOwotICAgIGF1dG8g
d2lkdGggPSBzdHlsZS5sb2dpY2FsV2lkdGgoKTsKLSAgICBpZiAod2lkdGguaXNBdXRvKCkpIHsK
LSAgICAgICAgYXV0byBtYXJnaW5MZWZ0ID0gZGlzcGxheUJveC5tYXJnaW5MZWZ0KCk7Ci0gICAg
ICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBkaXNwbGF5Qm94Lm1hcmdpblJpZ2h0KCk7Ci0KLSAgICAg
ICAgYXV0byBwYWRkaW5nTGVmdCA9IGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKTsKLSAgICAgICAg
YXV0byBwYWRkaW5nUmlnaHQgPSBkaXNwbGF5Qm94LnBhZGRpbmdSaWdodCgpOwotCi0gICAgICAg
IGF1dG8gYm9yZGVyTGVmdCA9IGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpOwotICAgICAgICBhdXRv
IGJvcmRlclJpZ2h0ID0gZGlzcGxheUJveC5ib3JkZXJSaWdodCgpOwotCi0gICAgICAgIGNvbXB1
dGVkV2lkdGhWYWx1ZSA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKG1hcmdpbkxlZnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIG1hcmdp
blJpZ2h0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29tcHV0ZWRXaWR0aFZhbHVlID0gdmFsdWVG
b3JMZW5ndGgod2lkdGgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLQotICAgIGRpc3BsYXlCb3gu
c2V0V2lkdGgoY29tcHV0ZWRXaWR0aFZhbHVlKTsKKyAgICBkaXNwbGF5Qm94LnNldEhlaWdodChj
b21wdXRlZEhlaWdodCk7CiB9CiAKLXZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUluRmxvd0hlaWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxh
eW91dEJveCwgRGlzcGxheTo6Qm94JiBkaXNwbGF5Qm94KSBjb25zdAordm9pZCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93V2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29u
dGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJveCkgY29u
c3QKIHsKLSAgICBpZiAoIWxheW91dEJveC5yZXBsYWNlZCgpKSB7Ci0gICAgICAgIGNvbXB1dGVJ
bkZsb3dOb25SZXBsYWNlZEhlaWdodChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIGRpc3BsYXlC
b3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXB1dGVSZXBsYWNlZEhlaWdodChs
YXlvdXRDb250ZXh0LCBsYXlvdXRCb3gsIGRpc3BsYXlCb3gpOworICAgIExheW91dFVuaXQgY29t
cHV0ZWRXaWR0aDsKKworICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKKyAgICAgICAgY29t
cHV0ZWRXaWR0aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93UmVwbGFj
ZWRXaWR0aChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgIGVsc2UKKyAgICAgICAgY29t
cHV0ZWRXaWR0aCA9IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93Tm9uUmVw
bGFjZWRXaWR0aChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworCisgICAgZGlzcGxheUJveC5z
ZXRXaWR0aChjb21wdXRlZFdpZHRoKTsKIH0KIAogTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjptYXJnaW5Ub3AoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CkBAIC0yMDUsNjMg
KzE3MCw2IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bWFyZ2luQm90dG9t
KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogICAgIHJldHVybiBCbG9ja01hcmdpbkNvbGxh
cHNlOjptYXJnaW5Cb3R0b20obGF5b3V0Qm94KTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSW5GbG93Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJv
eCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxheW91dEJv
eC5yZXBsYWNlZCgpKTsKLQotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1
ZGV0Lmh0bWwKLSAgICAvLyBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5k
cyBvbiB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyBhbnkgYmxvY2stbGV2ZWwgY2hpbGRyZW4gYW5k
IHdoZXRoZXIgaXQgaGFzIHBhZGRpbmcgb3IgYm9yZGVyczoKLSAgICAvLyBUaGUgZWxlbWVudCdz
IGhlaWdodCBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpdHMgdG9wIGNvbnRlbnQgZWRnZSB0byB0aGUg
Zmlyc3QgYXBwbGljYWJsZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC8vIDEuIHRoZSBib3R0b20g
ZWRnZSBvZiB0aGUgbGFzdCBsaW5lIGJveCwgaWYgdGhlIGJveCBlc3RhYmxpc2hlcyBhIGlubGlu
ZSBmb3JtYXR0aW5nIGNvbnRleHQgd2l0aCBvbmUgb3IgbW9yZSBsaW5lcwotICAgIC8vIDIuIHRo
ZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdpbiBv
ZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2luCi0g
ICAgLy8gICAgZG9lcyBub3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJn
aW4KLSAgICAvLyAzLiB0aGUgYm90dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cg
Y2hpbGQgd2hvc2UgdG9wIG1hcmdpbiBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQn
cyBib3R0b20gbWFyZ2luCi0gICAgLy8gNC4gemVybywgb3RoZXJ3aXNlCi0gICAgLy8gT25seSBj
aGlsZHJlbiBpbiB0aGUgbm9ybWFsIGZsb3cgYXJlIHRha2VuIGludG8gYWNjb3VudCAoaS5lLiwg
ZmxvYXRpbmcgYm94ZXMgYW5kIGFic29sdXRlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgaWdub3Jl
ZCwKLSAgICAvLyBhbmQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVk
IHdpdGhvdXQgdGhlaXIgb2Zmc2V0KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFu
IGFub255bW91cyBibG9jayBib3guCi0gICAgaWYgKCFsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2Fs
SGVpZ2h0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IE9ubHkgZml4ZWQgdmFsdWVz
IHlldC4KLSAgICAgICAgZGlzcGxheUJveC5zZXRIZWlnaHQobGF5b3V0Qm94LnN0eWxlKCkubG9n
aWNhbEhlaWdodCgpLnZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFpczxDb250YWluZXI+KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lcj4obGF5b3V0
Qm94KS5oYXNJbkZsb3dDaGlsZCgpKSB7Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0SGVpZ2h0KDAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9m
IHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1h
dHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCi0gICAgaWYgKGxheW91dEJveC5l
c3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgLy8gaGVpZ2h0
ID0gbGFzdExpbmVCb3goKS5ib3R0b20oKTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRIZWlnaHQo
MCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ug
b2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4t
ZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdpbi4uLgotICAgIGF1dG8qIGxh
c3RJbkZsb3dDaGlsZCA9IGRvd25jYXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KS5sYXN0SW5GbG93
Q2hpbGQoKTsKLSAgICBBU1NFUlQobGFzdEluRmxvd0NoaWxkKTsKLSAgICBpZiAoIUJsb2NrTWFy
Z2luQ29sbGFwc2U6OmlzTWFyZ2luQm90dG9tQ29sbGFwc2VkV2l0aFBhcmVudCgqbGFzdEluRmxv
d0NoaWxkKSkgewotICAgICAgICBhdXRvKiBsYXN0SW5GbG93RGlzcGxheUJveCA9IGxheW91dENv
bnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGFzdEluRmxvd0NoaWxkKTsKLSAgICAgICAg
QVNTRVJUKGxhc3RJbkZsb3dEaXNwbGF5Qm94KTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRIZWln
aHQobGFzdEluRmxvd0Rpc3BsYXlCb3gtPmJvdHRvbSgpICsgbGFzdEluRmxvd0Rpc3BsYXlCb3gt
Pm1hcmdpbkJvdHRvbSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDMuIHRo
ZSBib3R0b20gYm9yZGVyIGVkZ2Ugb2YgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3Ag
bWFyZ2luIGRvZXNuJ3QgY29sbGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4K
LSAgICBhdXRvKiBpbkZsb3dDaGlsZCA9IGxhc3RJbkZsb3dDaGlsZDsKLSAgICB3aGlsZSAoaW5G
bG93Q2hpbGQgJiYgQmxvY2tNYXJnaW5Db2xsYXBzZTo6aXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRo
UGFyZW50TWFyZ2luQm90dG9tKCppbkZsb3dDaGlsZCkpCi0gICAgICAgIGluRmxvd0NoaWxkID0g
aW5GbG93Q2hpbGQtPnByZXZpb3VzSW5GbG93U2libGluZygpOwotICAgIGlmIChpbkZsb3dDaGls
ZCkgewotICAgICAgICBhdXRvKiBpbkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCppbkZsb3dDaGlsZCk7Ci0gICAgICAgIEFTU0VSVChpbkZsb3dE
aXNwbGF5Qm94KTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRIZWlnaHQoaW5GbG93RGlzcGxheUJv
eC0+dG9wKCkgKyBpbkZsb3dEaXNwbGF5Qm94LT5ib3JkZXJCb3goKS5oZWlnaHQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKLSAgICBkaXNw
bGF5Qm94LnNldEhlaWdodCgwKTsKLX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5oCmluZGV4IDA0MTlmNmIzOTRmZWE5MmY1OGM3MThkY2U1ZmU4MThlZDg1NjE3OGMuLjQ2MGU1
OGI1NjRhZDJmOTU0ZDI0YzdhMWE5MDlkMjkwMWNlNTEwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5oCkBAIC01MSwxMiArNTEsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBjb21wdXRlU3RhdGljUG9zaXRpb24oTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3Bs
YXk6OkJveCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgdm9pZCBjb21wdXRlSW5GbG93V2lkdGgo
TGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgY29tcHV0ZUluRmxvd05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYs
IGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OwotCiAgICAgdm9pZCBjb21wdXRlSW5G
bG93SGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gmKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIGNvbXB1dGVJbkZsb3dOb25SZXBsYWNlZEhlaWdodChMYXlv
dXRDb250ZXh0JiwgY29uc3QgQm94JiwgRGlzcGxheTo6Qm94JikgY29uc3Q7CiAKICAgICBMYXlv
dXRVbml0IG1hcmdpblRvcChjb25zdCBCb3gmKSBjb25zdCBvdmVycmlkZTsKICAgICBMYXlvdXRV
bml0IG1hcmdpbkJvdHRvbShjb25zdCBCb3gmKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NmNkODA2YTU5
ZTQ2NjYzNDczZjU4MmYyOTkwYzg4ZWRjNDZmMDFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5oIgorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlv
dXQgeworCitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93
Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlv
dXRCb3gucmVwbGFjZWQoKSk7CisKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIv
dmlzdWRldC5odG1sCisgICAgLy8gSWYgJ2hlaWdodCcgaXMgJ2F1dG8nLCB0aGUgaGVpZ2h0IGRl
cGVuZHMgb24gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgYW55IGJsb2NrLWxldmVsIGNoaWxkcmVu
IGFuZCB3aGV0aGVyIGl0IGhhcyBwYWRkaW5nIG9yIGJvcmRlcnM6CisgICAgLy8gVGhlIGVsZW1l
bnQncyBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRvcCBjb250ZW50IGVkZ2UgdG8g
dGhlIGZpcnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAxLiB0aGUgYm90
dG9tIGVkZ2Ugb2YgdGhlIGxhc3QgbGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMgYSBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKKyAgICAvLyAy
LiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJn
aW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdp
bgorICAgIC8vICAgIGRvZXMgbm90IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20g
bWFyZ2luCisgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0aGUgbGFzdCBpbi1m
bG93IGNoaWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVt
ZW50J3MgYm90dG9tIG1hcmdpbgorICAgIC8vIDQuIHplcm8sIG90aGVyd2lzZQorICAgIC8vIE9u
bHkgY2hpbGRyZW4gaW4gdGhlIG5vcm1hbCBmbG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGku
ZS4sIGZsb2F0aW5nIGJveGVzIGFuZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGln
bm9yZWQsCisgICAgLy8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lk
ZXJlZCB3aXRob3V0IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBi
ZSBhbiBhbm9ueW1vdXMgYmxvY2sgYm94LgorICAgIGlmICghbGF5b3V0Qm94LnN0eWxlKCkubG9n
aWNhbEhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGZpeGVkIHZh
bHVlcyB5ZXQuCisgICAgICAgIHJldHVybiBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0
KCkudmFsdWUoKTsKKyAgICB9CisKKyAgICBpZiAoIWlzPENvbnRhaW5lcj4obGF5b3V0Qm94KSB8
fCAhZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmhhc0luRmxvd0NoaWxkKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxp
bmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4
dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCisgICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgLy8gaGVpZ2h0ID0gbGFzdExpbmVC
b3goKS5ib3R0b20oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gMi4gdGhl
IGJvdHRvbSBlZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2luIG9m
IGl0cyBsYXN0IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4uLi4K
KyAgICBhdXRvKiBsYXN0SW5GbG93Q2hpbGQgPSBkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJv
eCkubGFzdEluRmxvd0NoaWxkKCk7CisgICAgQVNTRVJUKGxhc3RJbkZsb3dDaGlsZCk7CisgICAg
aWYgKCFCbG9ja01hcmdpbkNvbGxhcHNlOjppc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhQYXJl
bnQoKmxhc3RJbkZsb3dDaGlsZCkpIHsKKyAgICAgICAgYXV0byogbGFzdEluRmxvd0Rpc3BsYXlC
b3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxhc3RJbkZsb3dDaGls
ZCk7CisgICAgICAgIEFTU0VSVChsYXN0SW5GbG93RGlzcGxheUJveCk7CisgICAgICAgIHJldHVy
biBsYXN0SW5GbG93RGlzcGxheUJveC0+Ym90dG9tKCkgKyBsYXN0SW5GbG93RGlzcGxheUJveC0+
bWFyZ2luQm90dG9tKCk7CisgICAgfQorCisgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRn
ZSBvZiB0aGUgbGFzdCBpbi1mbG93IGNoaWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xs
YXBzZSB3aXRoIHRoZSBlbGVtZW50J3MgYm90dG9tIG1hcmdpbgorICAgIGF1dG8qIGluRmxvd0No
aWxkID0gbGFzdEluRmxvd0NoaWxkOworICAgIHdoaWxlIChpbkZsb3dDaGlsZCAmJiBCbG9ja01h
cmdpbkNvbGxhcHNlOjppc01hcmdpblRvcENvbGxhcHNlZFdpdGhQYXJlbnRNYXJnaW5Cb3R0b20o
KmluRmxvd0NoaWxkKSkKKyAgICAgICAgaW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJldmlv
dXNJbkZsb3dTaWJsaW5nKCk7CisgICAgaWYgKGluRmxvd0NoaWxkKSB7CisgICAgICAgIGF1dG8q
IGluRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
KmluRmxvd0NoaWxkKTsKKyAgICAgICAgQVNTRVJUKGluRmxvd0Rpc3BsYXlCb3gpOworICAgICAg
ICByZXR1cm4gaW5GbG93RGlzcGxheUJveC0+dG9wKCkgKyBpbkZsb3dEaXNwbGF5Qm94LT5ib3Jk
ZXJCb3goKS5oZWlnaHQoKTsKKyAgICB9CisKKyAgICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKKyAg
ICByZXR1cm4gMDsKK30KKworTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnk6OmluRmxvd05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwg
Y29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygp
ICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7CisKKyAgICAvLyAxMC4zLjMgQmxvY2stbGV2ZWws
IG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworICAgIC8vIFRoZSBmb2xsb3dp
bmcgY29uc3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRoZSB1c2VkIHZhbHVlcyBvZiB0aGUgb3Ro
ZXIgcHJvcGVydGllczoKKyAgICAvLyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRo
JyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXIt
cmlnaHQtd2lkdGgnICsgJ21hcmdpbi1yaWdodCcgPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2Nr
CisKKyAgICAvLyBJZiAnd2lkdGgnIGlzIHNldCB0byAnYXV0bycsIGFueSBvdGhlciAnYXV0bycg
dmFsdWVzIGJlY29tZSAnMCcgYW5kICd3aWR0aCcgZm9sbG93cyBmcm9tIHRoZSByZXN1bHRpbmcg
ZXF1YWxpdHkuCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLT53aWR0aCgpOworCisgICAgTGF5b3V0
VW5pdCBjb21wdXRlZFdpZHRoVmFsdWU7CisgICAgYXV0byB3aWR0aCA9IHN0eWxlLmxvZ2ljYWxX
aWR0aCgpOworICAgIGlmICh3aWR0aC5pc0F1dG8oKSkgeworICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gKmxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwor
ICAgICAgICBhdXRvIG1hcmdpbkxlZnQgPSBkaXNwbGF5Qm94Lm1hcmdpbkxlZnQoKTsKKyAgICAg
ICAgYXV0byBtYXJnaW5SaWdodCA9IGRpc3BsYXlCb3gubWFyZ2luUmlnaHQoKTsKKworICAgICAg
ICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpOworICAgICAgICBh
dXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCk7CisKKyAgICAgICAg
YXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0KCk7CisgICAgICAgIGF1dG8g
Ym9yZGVyUmlnaHQgPSBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCk7CisKKyAgICAgICAgY29tcHV0
ZWRXaWR0aFZhbHVlID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAobWFyZ2luTGVmdCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgbWFyZ2lu
UmlnaHQpOworICAgIH0gZWxzZQorICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUgPSB2YWx1ZUZv
ckxlbmd0aCh3aWR0aCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCisgICAgcmV0dXJuIGNvbXB1
dGVkV2lkdGhWYWx1ZTsKK30KKworTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnk6OmluRmxvd1JlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmIGxheW91dENvbnRleHQs
IGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQg
ZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAn
aW5saW5lLWJsb2NrJworICAgIC8vIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFu
ZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cworICAgIHJldHVybiBGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5OjpyZXBsYWNlZEhlaWdodChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworfQor
CitMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93UmVwbGFj
ZWRXaWR0aChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJv
eCkKK3sKKyAgICAvLyAxMC4zLjQgQmxvY2stbGV2ZWwsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5v
cm1hbCBmbG93CisgICAgLy8KKyAgICAvLyBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRl
dGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cworICAgIHJldHVybiBGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5OjpyZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91
dEJveCk7Cit9CisKK0xheW91dFBvaW50IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6
c3RhdGljUG9zaXRpb24oTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBs
YXlvdXRCb3gpCit7CisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zpc3VyZW4u
aHRtbCNibG9jay1mb3JtYXR0aW5nCisgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRl
eHQsIGJveGVzIGFyZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNhbGx5LCBi
ZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCisgICAgLy8gVGhlIHZl
cnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBi
eSB0aGUgJ21hcmdpbicgcHJvcGVydGllcy4KKyAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdl
ZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRl
eHQgY29sbGFwc2UuCisgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQsIGVhY2gg
Ym94J3MgbGVmdCBvdXRlciBlZGdlIHRvdWNoZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUgY29udGFp
bmluZyBibG9jayAoZm9yIHJpZ2h0LXRvLWxlZnQgZm9ybWF0dGluZywgcmlnaHQgZWRnZXMgdG91
Y2gpLgorICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrQ29udGVudEJveCA9IGxheW91dENvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS0+Y29u
dGVudEJveCgpOworICAgIC8vIFN0YXJ0IGZyb20gdGhlIHRvcCBvZiB0aGUgY29udGFpbmVyJ3Mg
Y29udGVudCBib3guCisgICAgYXV0byB0b3AgPSBjb250YWluaW5nQmxvY2tDb250ZW50Qm94Lnko
KTsKKyAgICBhdXRvIGxlZnQgPSBjb250YWluaW5nQmxvY2tDb250ZW50Qm94LngoKTsKKyAgICBp
ZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93
U2libGluZygpKSB7CisgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93RGlzcGxheUJveCA9ICps
YXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKnByZXZpb3VzSW5GbG93U2libGlu
Zyk7CisgICAgICAgIHRvcCA9IHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20oKSArIHBy
ZXZpb3VzSW5GbG93RGlzcGxheUJveC5tYXJnaW5Cb3R0b20oKTsKKyAgICB9CisgICAgYXV0byYg
ZGlzcGxheUJveCA9ICpsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKKyAgICBMYXlvdXRQb2ludCB0b3BMZWZ0ID0geyB0b3AsIGxlZnQgfTsKKyAgICB0b3BM
ZWZ0Lm1vdmVCeSh7IGRpc3BsYXlCb3gubWFyZ2luTGVmdCgpLCBkaXNwbGF5Qm94Lm1hcmdpblRv
cCgpIH0pOworICAgIHJldHVybiB0b3BMZWZ0OworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNjMWY0MGFl
OTExMzEzMzc5NzhiYjk3NmY4MGVlYzU5OGQ3YWE5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTGF5b3V0UG9pbnQ7CitjbGFzcyBMYXlvdXRVbml0OworCituYW1lc3BhY2Ug
TGF5b3V0IHsKKworY2xhc3MgQm94OworY2xhc3MgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDsKK2Ns
YXNzIExheW91dENvbnRleHQ7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmlu
ZyBhbmQgc2l6aW5nIGZvciBib3hlcyBwYXJ0aWNpcGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0LgorY2xhc3MgQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBpbkZsb3dOb25SZXBsYWNlZEhlaWdodChMYXlvdXRD
b250ZXh0JiwgY29uc3QgQm94Jik7CisgICAgc3RhdGljIExheW91dFVuaXQgaW5GbG93Tm9uUmVw
bGFjZWRXaWR0aChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisKKyAgICBzdGF0aWMgTGF5
b3V0VW5pdCBpbkZsb3dSZXBsYWNlZEhlaWdodChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7
CisgICAgc3RhdGljIExheW91dFVuaXQgaW5GbG93UmVwbGFjZWRXaWR0aChMYXlvdXRDb250ZXh0
JiwgY29uc3QgQm94Jik7CisKKyAgICBzdGF0aWMgTGF5b3V0UG9pbnQgc3RhdGljUG9zaXRpb24o
TGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworfTsKKworfQorfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaAppbmRleCBiMTc4YmQ0
ODE4YjNiMDZjNWM5NmRmYzY2MTI1YWQ0NmE4MzgxMzY3Li5hZmVkZmI1MjcxMzAzZWY4NzBjZTVi
Y2I4OTM4ZmM2YTdkNTgwZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlz
cGxheXRyZWUvRGlzcGxheUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5
dHJlZS9EaXNwbGF5Qm94LmgKQEAgLTQ4LDkgKzQ4LDkgQEAgbmFtZXNwYWNlIERpc3BsYXkgewog
Y2xhc3MgQm94IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJveCk7CiBwdWJsaWM6Ci0g
ICAgZnJpZW5kIGNsYXNzIExheW91dDo6TGF5b3V0Q29udGV4dDsKLSAgICBmcmllbmQgY2xhc3Mg
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDsKICAgICBmcmllbmQgY2xhc3MgTGF5b3V0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OworICAgIGZyaWVuZCBjbGFzcyBMYXlvdXQ6OkxheW91dENvbnRleHQ7CiAKICAgICB+
Qm94KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341096</attachid>
            <date>2018-05-23 09:17:16 -0700</date>
            <delta_ts>2018-05-23 09:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185898-20180523091715.patch</filename>
            <type>text/plain</type>
            <size>92185</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWExNDA0MzYzYjQ3ZmI0
MzZlMDEzNDQxOGNmOTQ5ODhkNjg1MzZiNS4uMjg1ZGQwNWYxYzYzYzRiZGQyZjc3NmZhN2EyMWVj
ZmZkNTA4ZWQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDE4LTA1LTIzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gTW92ZSBzaXppbmcv
cG9zaXRpb25pbmcgbG9naWMgdG8gaGVscGVyIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTg5OAorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRoZSBpZGVhIGhlcmUgaXMgdG8gbW92ZSBhbGwg
dGhlIHNpemluZyBhbmQgcG9zaXRpb25pbmcgbG9naWMgdG8gaGVscGVyIGNsYXNzZXMgc28gdGhh
dAorICAgICAgICB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGNvZGUgc3RheXMgbGVhbi4KKyAgICAg
ICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBkZWRpY2F0ZWQgQmxvY2tNYXJnaW5Db2xsYXBzZSBj
bGFzcyBmb3IgdGhlIGNvbGxhcHNpbmcgbG9naWMuCisgICAgICAgIFRoZSBoZWxwZXIgY2xhc3Nl
cyBoYXZlIG9ubHkgc3RhdGljIGZ1bmN0aW9ucy4gVGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBkbyBu
b3QgbXV0YXRlIHRoZSBhc3NvY2lhdGVkIERpc3BsYXlCb3hlcywKKyAgICAgICAgYnV0IGluc3Rl
YWQgdGhleSBzaW1wbHkgcmV0dW4gdGhlIGNvbXB1dGVkIHZhbHVlcy4KKworICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1Bvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVPdXRPZkZsb3dXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVGbG9hdGluZ0hlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUZsb2F0aW5nTm9uUmVwbGFjZWRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVJlcGxhY2VkSGVpZ2h0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVSZXBsYWNlZFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93
UmVwbGFjZWRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1JlcGxhY2VkV2lkdGggY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2VkUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxv
d1JlcGxhY2VkUG9zaXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6c2hyaW5rVG9GaXRXaWR0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6c2hyaW5rVG9GaXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
OjpmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZFdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6b3V0T2ZGbG93Tm9u
UmVwbGFjZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjpyZXBsYWNlZEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6OnJl
cGxhY2VkV2lkdGgpOgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5oLgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbkZs
b3dIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlSW5GbG93V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93Tm9uUmVwbGFjZWRX
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbkZsb3dOb25SZXBsYWNlZEhlaWdodCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeTo6aW5GbG93UmVwbGFjZWRIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnk6Omlu
Rmxvd1JlcGxhY2VkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnk6OnN0YXRpY1Bvc2l0aW9uKToKKyAgICAgICAgKiBsYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuaC4KKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUJveC5oOgor
CiAyMDE4LTA1LTIzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W0xGQ10gSW1wbGVtZW50IHBvc2l0aW9uaW5nIGZvciByZXBsYWNlZCBvdXQtb2YtZmxvdyBlbGVt
ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBkYjMxMDY1ZTJmZTdhMjZjMDgzMTE5NGYzM2ViYzY3Yjhk
MzI2YTdiLi41YWUxZmFhN2VlYzQ4ZTY3YjAxYzg3OGMyNjYxY2FjMjg3MmNkMzYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMTIxNiw5ICsxMjE2LDExIEBAIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlclJ1bnRpbWVBZ2VudC5jcHAKIGxheW91dC9GbG9hdGluZ0NvbnRleHQuY3BwCiBsYXlvdXQv
RmxvYXRpbmdTdGF0ZS5jcHAKIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKK2xheW91dC9G
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAogbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5jcHAK
IGxheW91dC9MYXlvdXRDb250ZXh0LmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmNwcAorbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0
dGluZ1N0YXRlLmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNl
LmNwcAogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0ludmFsaWRhdGlvbi5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
M2E0OTliZjM3ZmU3NzhlZjJiOWZlODg5ZDQ1YmExYmNjNzRmOGNkLi4xN2QyODk0OWY1ZGFmMWM4
YWU5MjEzN2ZjMzFiMGFhZWFjMTg4YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04ODg2LDYgKzg4ODYsNyBAQAogCQk2RUQ4
QzM3ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQm94U2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVF
OEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc0
MUFCNTJENjQwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjIyMkI3NTFBQjUyRDhBMDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RjdDQTNDNDIwOEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0Q29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXlvdXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTE3LDYg
Kzg5MTgsNyBAQAogCQk2Rjk5NUEyRTFBNzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFRyYW5zZm9y
bUZlZWRiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xUcmFu
c2Zvcm1GZWVkYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Rjk5NUEyRjFB
NzA4MzM3MDBBNzM1RjQgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGOTk1QTMwMUE3MDgzMzcwMEE3MzVGNCAv
KiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZGQkI4NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDlBMDFGRDFFM0QwQkNDMDA2QjBENEMg
LyogTW9kdWxlRmV0Y2hGYWlsdXJlS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcxMDA0QjlEMURDMTM5ODgwMEE1MkEzOCAvKiBwbGF5YmFjay1zdXBwb3J0LmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInBsYXliYWNrLXN1cHBvcnQuanMi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MTAyNUVDMjFGOTlGMDk2MDA0QTI1MEMg
LyogV2ViQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFuaW1hdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2NzgsNiArMTU2ODAsNyBAQAogCQkJCTExNUNGQTgw
MjA4QjhFREEwMDFFNjk5MSAvKiBGbG9hdGluZ1N0YXRlLmggKi8sCiAJCQkJMTE1Q0ZBNjkyMDhB
RjdEMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQkxMTVDRkE2ODIw
OEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKKwkJCQk2RkJCODYwNTIw
QjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCiAJCQkJ
MTE1Q0ZBNzUyMDhBRkUzMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJ
MTE1Q0ZBNzQyMDhBRkUzMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdTdGF0ZS5oICovLAogCQkJCTEx
NUY3ODA1MjA5Q0JDQkQwMDczOUMxMyAvKiBJbnZhbGlkYXRpb24uaCAqLywKQEAgLTE1NzE3LDYg
KzE1NzIwLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTExNUNGQTZEMjA4QUZBQjYwMDFFNjk5
MSAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywKIAkJCQkxMTVDRkE2QzIwOEFGQUI2
MDAxRTY5OTEgLyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oICovLAorCQkJCTZGMDgzMERGMjBC
NDY5NTEwMDhBOTQ1QiAvKiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwICovLAog
CQkJCTExNUNGQTc5MjA4QjhEOUQwMDFFNjk5MSAvKiBCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5jcHAg
Ki8sCiAJCQkJMTE1Q0ZBNzgyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ1N0YXRl
LmggKi8sCiAJCQkJMTEyM0FGREEyMDlBQkIyMDAwNzM2QUNDIC8qIEJsb2NrSW52YWxpZGF0aW9u
LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmlu
ZGV4IDljNzNmNDQ2ZjU1ZmJiZmNlZmM3YjAyNDNjYTk0ZDhkN2VlMmI5MzIuLjM1YzYwNTBmN2Qy
YzE4YjU0NWE3MjI4Y2VjYmUzOTQ3M2EzYTNiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNTksMTEgKzU5LDE0IEBAIHZvaWQgRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24oY29uc3QgQm94JiwgRGlz
cGxheTo6Qm94CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dQb3Np
dGlvbihMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwg
RGlzcGxheTo6Qm94JiBkaXNwbGF5Qm94KSBjb25zdAogewotICAgIGlmICghbGF5b3V0Qm94LnJl
cGxhY2VkKCkpIHsKLSAgICAgICAgY29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2VkUG9zaXRpb24o
bGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjb21wdXRlT3V0T2ZGbG93UmVwbGFjZWRQb3NpdGlvbihsYXlvdXRDb250ZXh0
LCBsYXlvdXRCb3gsIGRpc3BsYXlCb3gpOworICAgIExheW91dFBvaW50IGNvbXB1dGVkVG9wTGVm
dDsKKworICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKKyAgICAgICAgY29tcHV0ZWRUb3BM
ZWZ0ID0gR2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkUG9zaXRpb24obGF5b3V0Q29udGV4dCwg
bGF5b3V0Qm94KTsKKyAgICBlbHNlCisgICAgICAgIGNvbXB1dGVkVG9wTGVmdCA9IEdlb21ldHJ5
OjpvdXRPZkZsb3dOb25SZXBsYWNlZFBvc2l0aW9uKGxheW91dENvbnRleHQsIGxheW91dEJveCk7
CisKKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoY29tcHV0ZWRUb3BMZWZ0KTsKIH0KIAogdm9p
ZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoKExheW91dENvbnRleHQmIGxheW91dENv
bnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNv
bnN0CkBAIC04NiwzOCArODksNTAgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhl
aWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGwKIAogdm9pZCBG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1dpZHRoKExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlC
b3gpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQoKSkgewotICAgICAgICBj
b21wdXRlT3V0T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gs
IGRpc3BsYXlCb3gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbXB1dGVPdXRPZkZs
b3dSZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7Cisg
ICAgTGF5b3V0VW5pdCBjb21wdXRlZFdpZHRoOworCisgICAgaWYgKGxheW91dEJveC5yZXBsYWNl
ZCgpKQorICAgICAgICBjb21wdXRlZFdpZHRoID0gR2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2Vk
V2lkdGgobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKKyAgICBlbHNlIAorICAgICAgICBjb21w
dXRlZFdpZHRoID0gR2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkV2lkdGgobGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsKKworICAgIGRpc3BsYXlCb3guc2V0V2lkdGgoY29tcHV0ZWRXaWR0
aCk7CiB9CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdGluZ1dpZHRoKExh
eW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBEaXNwbGF5
OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVwbGFjZWQo
KSkgewotICAgICAgICBjb21wdXRlRmxvYXRpbmdOb25SZXBsYWNlZFdpZHRoKGxheW91dENvbnRl
eHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y29tcHV0ZVJlcGxhY2VkV2lkdGgobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94
KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVkV2lkdGg7CisKKyAgICBpZiAobGF5b3V0Qm94LnJl
cGxhY2VkKCkpCisgICAgICAgIGNvbXB1dGVkV2lkdGggPSBHZW9tZXRyeTo6ZmxvYXRpbmdSZXBs
YWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgZWxzZQorICAgICAgICBj
b21wdXRlZFdpZHRoID0gR2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aChsYXlvdXRD
b250ZXh0LCBsYXlvdXRCb3gpOworCisgICAgZGlzcGxheUJveC5zZXRXaWR0aChjb21wdXRlZFdp
ZHRoKTsKIH0KIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hlaWdo
dChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlz
cGxheTo6Qm94JiBkaXNwbGF5Qm94KSBjb25zdAogewotICAgIGlmICghbGF5b3V0Qm94LnJlcGxh
Y2VkKCkpIHsKLSAgICAgICAgY29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2VkSGVpZ2h0KGxheW91
dENvbnRleHQsIGxheW91dEJveCwgZGlzcGxheUJveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY29tcHV0ZU91dE9mRmxvd1JlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxheW91
dEJveCwgZGlzcGxheUJveCk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlZEhlaWdodDsKKworICAg
IGlmIChsYXlvdXRCb3gucmVwbGFjZWQoKSkKKyAgICAgICAgY29tcHV0ZWRIZWlnaHQgPSBHZW9t
ZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsK
KyAgICBlbHNlCisgICAgICAgIGNvbXB1dGVkSGVpZ2h0ID0gR2VvbWV0cnk6Om91dE9mRmxvd05v
blJlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisKKyAgICBkaXNwbGF5
Qm94LnNldEhlaWdodChjb21wdXRlZEhlaWdodCk7CiB9CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVGbG9hdGluZ0hlaWdodChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBj
b25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6Qm94JiBkaXNwbGF5Qm94KSBjb25zdAogewot
ICAgIGlmICghbGF5b3V0Qm94LnJlcGxhY2VkKCkpIHsKLSAgICAgICAgY29tcHV0ZUZsb2F0aW5n
Tm9uUmVwbGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb21wdXRlUmVwbGFjZWRIZWlnaHQobGF5b3V0
Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVk
SGVpZ2h0OworCisgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQorICAgICAgICBjb21wdXRl
ZEhlaWdodCA9IEdlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQs
IGxheW91dEJveCk7CisgICAgZWxzZQorICAgICAgICBjb21wdXRlZEhlaWdodCA9IEdlb21ldHJ5
OjpmbG9hdGluZ05vblJlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisK
KyAgICBkaXNwbGF5Qm94LnNldEhlaWdodChjb21wdXRlZEhlaWdodCk7CiB9CiAKIExheW91dFVu
aXQgRm9ybWF0dGluZ0NvbnRleHQ6Om1hcmdpblRvcChjb25zdCBCb3gmKSBjb25zdApAQCAtMTY4
LDQ3NiArMTgzLDYgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93RGVz
Y2VuZGFudHMoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCkKICAgICB9CiB9CiAKLXZvaWQg
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dOb25SZXBsYWNlZEhlaWdodChMYXlv
dXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6
Qm94JiBkaXNwbGF5Qm94KSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5yZXBsYWNlZCgpKTsKLQotICAgIC8vIDEwLjYu
NCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0g
ICAgLy8gRm9yIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50cywgdGhlIHVzZWQgdmFsdWVz
IG9mIHRoZSB2ZXJ0aWNhbCBkaW1lbnNpb25zIG11c3Qgc2F0aXNmeSB0aGlzIGNvbnN0cmFpbnQ6
Ci0gICAgLy8gJ3RvcCcgKyAnbWFyZ2luLXRvcCcgKyAnYm9yZGVyLXRvcC13aWR0aCcgKyAncGFk
ZGluZy10b3AnICsgJ2hlaWdodCcgKyAncGFkZGluZy1ib3R0b20nICsgJ2JvcmRlci1ib3R0b20t
d2lkdGgnICsgJ21hcmdpbi1ib3R0b20nICsgJ2JvdHRvbScKLSAgICAvLyA9IGhlaWdodCBvZiBj
b250YWluaW5nIGJsb2NrCi0KLSAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ3RvcCcsICdoZWlnaHQn
LCBhbmQgJ2JvdHRvbScgYXJlIGF1dG8sIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9u
IGFuZCBhcHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdy4KLQotICAgIC8vIElmIG5vbmUgb2Yg
dGhlIHRocmVlIGFyZSAnYXV0byc6IElmIGJvdGggJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJv
dHRvbScgYXJlICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYQotICAg
IC8vIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcy4gSWYg
b25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRvbScgaXMgJ2F1dG8nLCBzb2x2ZSB0
aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCi0gICAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgb3Zl
ci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2JvdHRvbScgYW5kIHNvbHZlIGZv
ciB0aGF0IHZhbHVlLgotCi0gICAgLy8gT3RoZXJ3aXNlLCBwaWNrIHRoZSBvbmUgb2YgdGhlIGZv
bGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgotCi0gICAgLy8gMS4gJ3RvcCcgYW5kICdo
ZWlnaHQnIGFyZSAnYXV0bycgYW5kICdib3R0b20nIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhl
aWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAuNi43LAotICAgIC8vICAgICBzZXQg
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwg
YW5kIHNvbHZlIGZvciAndG9wJwotICAgIC8vIDIuICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgJ2F1
dG8nIGFuZCAnaGVpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHNldCAndG9wJyB0byB0aGUgc3Rh
dGljIHBvc2l0aW9uLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IKLSAgICAvLyAgICAnbWFyZ2luLXRv
cCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAg
Ly8gMy4gJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICd0b3AnIGlzIG5vdCAn
YXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAuNi43
LCBzZXQgJ2F1dG8nCi0gICAgLy8gICAgIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFy
Z2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90dG9tJwotICAgIC8vIDQuICd0b3An
IGlzICdhdXRvJywgJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNl
dCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAw
LCBhbmQgc29sdmUgZm9yICd0b3AnCi0gICAgLy8gNS4gJ2hlaWdodCcgaXMgJ2F1dG8nLCAndG9w
JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21h
cmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHNldCB0byAwIGFuZCBzb2x2ZSBmb3Ig
J2hlaWdodCcKLSAgICAvLyA2LiAnYm90dG9tJyBpcyAnYXV0bycsICd0b3AnIGFuZCAnaGVpZ2h0
JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3An
IGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgYXV0
byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIHRvcCA9IHN0eWxlLmxvZ2lj
YWxUb3AoKTsKLSAgICBhdXRvIGJvdHRvbSA9IHN0eWxlLmxvZ2ljYWxCb3R0b20oKTsKLSAgICBh
dXRvIGhlaWdodCA9IHN0eWxlLmxvZ2ljYWxIZWlnaHQoKTsgCi0KLSAgICBhdXRvIGNvbnRhaW5p
bmdCbG9ja0hlaWdodCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS0+aGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBjb21w
dXRlZEhlaWdodFZhbHVlOwotCi0gICAgaWYgKCh0b3AuaXNBdXRvKCkgJiYgaGVpZ2h0LmlzQXV0
bygpICYmIGJvdHRvbS5pc0F1dG8oKSkKLSAgICAgICAgfHwgKHRvcC5pc0F1dG8oKSAmJiBoZWln
aHQuaXNBdXRvKCkgJiYgIWJvdHRvbS5pc0F1dG8oKSkKLSAgICAgICAgfHwgKCF0b3AuaXNBdXRv
KCkgJiYgaGVpZ2h0LmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkpIHsKLSAgICAgICAgLy8g
QWxsIGF1dG8gKCMzKSwgIzEgYW5kICMzCi0gICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSBj
b250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dENvbnRleHQsIGxheW91
dEJveCk7Ci0gICAgfSBlbHNlIGlmICghdG9wLmlzQXV0bygpICYmIGhlaWdodC5pc0F1dG8oKSAm
JiAhYm90dG9tLmlzQXV0bygpKSB7Ci0gICAgICAgIC8vICM1Ci0gICAgICAgIGF1dG8gbWFyZ2lu
VG9wID0gZGlzcGxheUJveC5tYXJnaW5Ub3AoKTsKLSAgICAgICAgYXV0byBtYXJnaW5Cb3R0b20g
PSBkaXNwbGF5Qm94Lm1hcmdpbkJvdHRvbSgpOwotICAgIAotICAgICAgICBhdXRvIHBhZGRpbmdU
b3AgPSBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKTsKLSAgICAgICAgYXV0byBwYWRkaW5nQm90dG9t
ID0gZGlzcGxheUJveC5wYWRkaW5nQm90dG9tKCk7Ci0KLSAgICAgICAgYXV0byBib3JkZXJUb3Ag
PSBkaXNwbGF5Qm94LmJvcmRlclRvcCgpOwotICAgICAgICBhdXRvIGJvcmRlckJvdHRvbSA9IGRp
c3BsYXlCb3guYm9yZGVyQm90dG9tKCk7Ci0KLSAgICAgICAgY29tcHV0ZWRIZWlnaHRWYWx1ZSA9
IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICh0b3AudmFsdWUoKSArIG1hcmdpblRvcCArIGJvcmRl
clRvcCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgbWFyZ2lu
Qm90dG9tICsgYm90dG9tLnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoIWhlaWdodC5pc0F1dG8o
KSkKLSAgICAgICAgY29tcHV0ZWRIZWlnaHRWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKGhlaWdodCwg
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotCi0gICAgZGlzcGxheUJveC5zZXRIZWlnaHQoY29tcHV0ZWRIZWlnaHRWYWx1ZSk7
Ci19Ci0KLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdGluZ05vblJlcGxhY2Vk
SGVpZ2h0KExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJv
eC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7Ci0gICAg
Ly8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCi0gICAgLy8KLSAgICAvLyBGbG9hdGluZywgbm9u
LXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIC8vCi0gICAgLy8gSWYgJ2hlaWdodCcgaXMgJ2F1dG8n
LCB0aGUgaGVpZ2h0IGRlcGVuZHMgb24gdGhlIGVsZW1lbnQncyBkZXNjZW5kYW50cyBwZXIgMTAu
Ni43LgotICAgIGF1dG8gaGVpZ2h0ID0gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbEhlaWdodCgp
OwotICAgIGRpc3BsYXlCb3guc2V0SGVpZ2h0KGhlaWdodC5pc0F1dG8oKSA/IGNvbnRlbnRIZWln
aHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KSA6IExh
eW91dFVuaXQoaGVpZ2h0LnZhbHVlKCkpKTsKLX0KLQotdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZVJlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmIGxheW91dEJv
eCwgRGlzcGxheTo6Qm94JiBkaXNwbGF5Qm94KSBjb25zdAotewotICAgIEFTU0VSVCgobGF5b3V0
Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRp
b25lZCgpIHx8IGxheW91dEJveC5pc0luRmxvdygpKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7
Ci0gICAgLy8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMu
IFRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSBy
ZXBsYWNlZCBlbGVtZW50cy4KLQotICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5l
LWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVw
bGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgn
IGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNv
IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwg
aWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1l
bnQgaGFzIGFuIGludHJpbnNpYyByYXRpbyB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQn
IGlzOgotICAgIC8vICAgICh1c2VkIHdpZHRoKSAvIChpbnRyaW5zaWMgcmF0aW8pCi0gICAgLy8K
LSAgICAvLyAzLiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9m
ICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRo
YXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KLSAgICAv
LwotICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUg
b2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVu
IHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIG11c3QgYmUgc2V0IHRvCi0gICAgLy8gICAgdGhl
IGhlaWdodCBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8sIGhh
cyBhIGhlaWdodCBub3QgZ3JlYXRlciB0aGFuIDE1MHB4LCBhbmQgaGFzIGEgd2lkdGggbm90IGdy
ZWF0ZXIgdGhhbiB0aGUgZGV2aWNlIHdpZHRoLgotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7Ci0gICAgYXV0byB3aWR0aCA9IHN0eWxlLmxvZ2ljYWxXaWR0aCgpOwotICAgIGF1
dG8gaGVpZ2h0ID0gc3R5bGUubG9naWNhbEhlaWdodCgpOwotCi0gICAgTGF5b3V0VW5pdCBjb21w
dXRlZEhlaWdodFZhbHVlOwotICAgIGF1dG8gcmVwbGFjZWQgPSBsYXlvdXRCb3gucmVwbGFjZWQo
KTsKLSAgICBBU1NFUlQocmVwbGFjZWQpOwotCi0gICAgaWYgKGhlaWdodC5pc0F1dG8oKSkgewot
ICAgICAgICBpZiAod2lkdGguaXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0ludHJpbnNpY0hlaWdo
dCgpKSB7Ci0gICAgICAgICAgICAvLyAjMQotICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHRWYWx1
ZSA9IHJlcGxhY2VkLT5pbnRyaW5zaWNIZWlnaHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXBs
YWNlZC0+aGFzSW50cmluc2ljUmF0aW8oKSkgewotICAgICAgICAgICAgLy8gIzIKLSAgICAgICAg
ICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSB3aWR0aC52YWx1ZSgpIC8gcmVwbGFjZWQtPmludHJp
bnNpY1JhdGlvKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVwbGFjZWQtPmhhc0ludHJpbnNpY0hl
aWdodCgpKSB7Ci0gICAgICAgICAgICAvLyAjMwotICAgICAgICAgICAgY29tcHV0ZWRIZWlnaHRW
YWx1ZSA9IHJlcGxhY2VkLT5pbnRyaW5zaWNIZWlnaHQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vICM0Ci0gICAgICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVlID0gMTUwOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSBoZWln
aHQudmFsdWUoKTsKLQotICAgIGRpc3BsYXlCb3guc2V0SGVpZ2h0KGNvbXB1dGVkSGVpZ2h0VmFs
dWUpOwotfQotCi12b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUmVwbGFjZWRXaWR0aChM
YXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxh
eUJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQoKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNJ
bkZsb3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwotCi0gICAgLy8gMTAuMy40IEJsb2Nr
LWxldmVsLCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdzogVGhlIHVzZWQgdmFsdWUg
b2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMu
Ci0gICAgLy8gMTAuMy42IEZsb2F0aW5nLCByZXBsYWNlZCBlbGVtZW50czogVGhlIHVzZWQgdmFs
dWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMuCi0gICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVu
dHM6IFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5l
IHJlcGxhY2VkIGVsZW1lbnRzLgotCi0gICAgLy8gMTAuMy4yIElubGluZSwgcmVwbGFjZWQgZWxl
bWVudHMKLSAgICAvLwotICAgIC8vIDEuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2
ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNvIGhhcyBhbiBp
bnRyaW5zaWMgd2lkdGgsIHRoZW4gdGhhdCBpbnRyaW5zaWMgd2lkdGggaXMgdGhlIHVzZWQgdmFs
dWUgb2YgJ3dpZHRoJy4KLSAgICAvLwotICAgIC8vIDIuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgn
IGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMg
bm8gaW50cmluc2ljIHdpZHRoLCBidXQgZG9lcyBoYXZlIGFuIGludHJpbnNpYyBoZWlnaHQgYW5k
IGludHJpbnNpYyByYXRpbzsgCi0gICAgLy8gICAgb3IgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRl
ZCB2YWx1ZSBvZiAnYXV0bycsICdoZWlnaHQnIGhhcyBzb21lIG90aGVyIGNvbXB1dGVkIHZhbHVl
LCBhbmQgdGhlIGVsZW1lbnQgZG9lcyBoYXZlIGFuIGludHJpbnNpYyByYXRpbzsKLSAgICAvLyAg
ICB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXM6ICh1c2VkIGhlaWdodCkgKiAoaW50
cmluc2ljIHJhdGlvKQotICAgIC8vCi0gICAgLy8gMy4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcg
Ym90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhhcyBh
biBpbnRyaW5zaWMgcmF0aW8gYnV0IG5vIGludHJpbnNpYyBoZWlnaHQgb3Igd2lkdGgsCi0gICAg
Ly8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIHVuZGVmaW5lZCBpbiBDU1Mg
Mi4yLiBIb3dldmVyLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCwgaWYgdGhlIGNvbnRhaW5pbmcgYmxv
Y2sncyB3aWR0aCBkb2VzIG5vdCBpdHNlbGYgZGVwZW5kIG9uIHRoZSByZXBsYWNlZCAKLSAgICAv
LyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBj
YWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24gdXNlZCBmb3IgYmxvY2stbGV2
ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdy4KLSAgICAvLwotICAgIC8v
IDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycs
IGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmlu
c2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcuCi0gICAgLy8gCi0gICAgLy8g
NS4gT3RoZXJ3aXNlLCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywg
YnV0IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2
YWx1ZSBvZiAnd2lkdGgnIGJlY29tZXMgMzAwcHguIAotICAgIC8vICAgIElmIDMwMHB4IGlzIHRv
byB3aWRlIHRvIGZpdCB0aGUgZGV2aWNlLCBVQXMgc2hvdWxkIHVzZSB0aGUgd2lkdGggb2YgdGhl
IGxhcmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEgMjoxIHJhdGlvIGFuZCBmaXRzIHRoZSBkZXZp
Y2UgaW5zdGVhZC4KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1
dG8gd2lkdGggPSBzdHlsZS5sb2dpY2FsV2lkdGgoKTsKLSAgICBhdXRvIGhlaWdodCA9IHN0eWxl
LmxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIExheW91dFVuaXQgY29tcHV0ZWRXaWR0aFZhbHVlOwot
ICAgIGF1dG8gcmVwbGFjZWQgPSBsYXlvdXRCb3gucmVwbGFjZWQoKTsKLSAgICBBU1NFUlQocmVw
bGFjZWQpOwotCi0gICAgaWYgKHdpZHRoLmlzQXV0bygpICYmIGhlaWdodC5pc0F1dG8oKSAmJiBy
ZXBsYWNlZC0+aGFzSW50cmluc2ljV2lkdGgoKSkgewotICAgICAgICAvLyAjMQotICAgICAgICBj
b21wdXRlZFdpZHRoVmFsdWUgPSByZXBsYWNlZC0+aW50cmluc2ljV2lkdGgoKTsKLSAgICB9IGVs
c2UgaWYgKHdpZHRoLmlzQXV0bygpICYmIChoZWlnaHQuaXNDYWxjdWxhdGVkKCkgfHwgcmVwbGFj
ZWQtPmhhc0ludHJpbnNpY0hlaWdodCgpKSAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljUmF0aW8o
KSkgewotICAgICAgICAvLyAjMgotICAgICAgICBhdXRvIHVzZWRIZWlnaHQgPSBoZWlnaHQuaXND
YWxjdWxhdGVkKCkgPyBMYXlvdXRVbml0KGhlaWdodC52YWx1ZSgpKSA6IHJlcGxhY2VkLT5pbnRy
aW5zaWNIZWlnaHQoKTsgICAKLSAgICAgICAgY29tcHV0ZWRXaWR0aFZhbHVlID0gdXNlZEhlaWdo
dCAqIHJlcGxhY2VkLT5pbnRyaW5zaWNSYXRpbygpOwotICAgIH0gZWxzZSBpZiAod2lkdGguaXNB
dXRvKCkgJiYgaGVpZ2h0LmlzQXV0bygpICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNSYXRpbygp
KSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIC8vIEZJWE1FOiB1bmRlZmluZWQgYnV0IHN1cmVs
eSBkb2FibGUuCi0gICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgfSBl
bHNlIGlmICh3aWR0aC5pc0F1dG8oKSAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljV2lkdGgoKSkg
ewotICAgICAgICAvLyAjNAotICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUgPSByZXBsYWNlZC0+
aW50cmluc2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyAjNQotICAgICAgICBj
b21wdXRlZFdpZHRoVmFsdWUgPSAzMDA7Ci0gICAgfQotCi0gICAgZGlzcGxheUJveC5zZXRXaWR0
aChjb21wdXRlZFdpZHRoVmFsdWUpOwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0
Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KExheW91dENvbnRleHQmIGxh
eW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAotewotICAgIEFTU0VSVChs
YXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgbGF5b3V0Qm94LmVz
dGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgLy8gMTAuNi43ICdBdXRvJyBoZWln
aHRzIGZvciBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMKLQotICAgIC8vIElmIGl0IG9u
bHkgaGFzIGlubGluZS1sZXZlbCBjaGlsZHJlbiwgdGhlIGhlaWdodCBpcyB0aGUgZGlzdGFuY2Ug
YmV0d2VlbiB0aGUgdG9wIG9mIHRoZSB0b3Btb3N0IGxpbmUgYm94IGFuZCB0aGUgYm90dG9tIG9m
IHRoZSBib3R0b21tb3N0IGxpbmUgYm94LgotICAgIC8vIElmIGl0IGhhcyBibG9jay1sZXZlbCBj
aGlsZHJlbiwgdGhlIGhlaWdodCBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgdG9wIG1hcmdp
bi1lZGdlIG9mIHRoZSB0b3Btb3N0IGJsb2NrLWxldmVsCi0gICAgLy8gY2hpbGQgYm94IGFuZCB0
aGUgYm90dG9tIG1hcmdpbi1lZGdlIG9mIHRoZSBib3R0b21tb3N0IGJsb2NrLWxldmVsIGNoaWxk
IGJveC4KLQotICAgIC8vIEluIGFkZGl0aW9uLCBpZiB0aGUgZWxlbWVudCBoYXMgYW55IGZsb2F0
aW5nIGRlc2NlbmRhbnRzIHdob3NlIGJvdHRvbSBtYXJnaW4gZWRnZSBpcyBiZWxvdyB0aGUgZWxl
bWVudCdzIGJvdHRvbSBjb250ZW50IGVkZ2UsCi0gICAgLy8gdGhlbiB0aGUgaGVpZ2h0IGlzIGlu
Y3JlYXNlZCB0byBpbmNsdWRlIHRob3NlIGVkZ2VzLiBPbmx5IGZsb2F0cyB0aGF0IHBhcnRpY2lw
YXRlIGluIHRoaXMgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGFyZSB0YWtlbgotICAgIC8vIGlu
dG8gYWNjb3VudCwgZS5nLiwgZmxvYXRzIGluc2lkZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZGVz
Y2VuZGFudHMgb3Igb3RoZXIgZmxvYXRzIGFyZSBub3QuCi0gICAgaWYgKCFpczxDb250YWluZXI+
KGxheW91dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KS5oYXNJbkZsb3dP
ckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvJiBmb3JtYXR0
aW5nUm9vdENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KTsKLSAgICBp
ZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGF1dG8qIGZpcnN0RGlzcGxheUJveCA9
IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250
YWluZXIuZmlyc3RJbkZsb3dDaGlsZCgpKTsKLSAgICBhdXRvKiBsYXN0RGlzcGxheUJveCA9IGxh
eW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250YWlu
ZXIubGFzdEluRmxvd0NoaWxkKCkpOwotCi0gICAgYXV0byB0b3AgPSBmaXJzdERpc3BsYXlCb3gt
Pm1hcmdpbkJveCgpLnkoKTsKLSAgICBhdXRvIGJvdHRvbSA9IGxhc3REaXNwbGF5Qm94LT5tYXJn
aW5Cb3goKS5tYXhZKCk7Ci0gICAgLy8gRklYTUU6IGFkZCBmbG9hdGluZyBzdXBwb3J0LgotICAg
IHJldHVybiBib3R0b20gLSB0b3A7Ci19Ci0KLXZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVGbG9hdGluZ05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwg
Y29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJveCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJv
eC5yZXBsYWNlZCgpKTsKLSAgICAvLyAxMC4zLjUgRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cwotCi0gICAgLy8gSWYgJ3dpZHRoJyBpcyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1c2Vk
IHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lkdGguCi0gICAgYXV0byB3aWR0aCA9IGxh
eW91dEJveC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpOwotICAgIGRpc3BsYXlCb3guc2V0V2lkdGgo
d2lkdGguaXNBdXRvKCkgPyBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJv
eCkgOiBMYXlvdXRVbml0KHdpZHRoLnZhbHVlKCkpKTsKLX0KLQotdm9pZCBGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJv
eCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7Ci0gICAgCi0gICAgLy8gMTAuMy43IEFic29sdXRl
bHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyAnbGVm
dCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQn
ICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsgJ21h
cmdpbi1yaWdodCcgKyAncmlnaHQnCi0gICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2Nr
Ci0KLSAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBh
cmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcg
YW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCi0gICAgLy8gVGhlbiwgaWYgdGhlICdkaXJlY3Rpb24n
IHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9u
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljCi0gICAg
Ly8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhlcndpc2Us
IHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVy
IG9uZSBiZWxvdy4KLQotICAgIC8vIDEuICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgJ2F1dG8nIGFu
ZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQu
IFRoZW4gc29sdmUgZm9yICdsZWZ0JwotICAgIC8vIDIuICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUg
J2F1dG8nIGFuZCAnd2lkdGgnIGlzIG5vdCAnYXV0bycsIHRoZW4gaWYgdGhlICdkaXJlY3Rpb24n
IHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9u
IAotICAgIC8vICAgIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUg
c3RhdGljIHBvc2l0aW9uLCBvdGhlcndpc2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3Np
dGlvbi4KLSAgICAvLyAgICBUaGVuIHNvbHZlIGZvciAnbGVmdCcgKGlmICdkaXJlY3Rpb24gaXMg
J3J0bCcpIG9yICdyaWdodCcgKGlmICdkaXJlY3Rpb24nIGlzICdsdHInKS4KLSAgICAvLyAzLiAn
d2lkdGgnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0
aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0Jwot
ICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0bycsICd3aWR0aCcgYW5kICdyaWdodCcgYXJlIG5vdCAn
YXV0bycsIHRoZW4gc29sdmUgZm9yICdsZWZ0JwotICAgIC8vIDUuICd3aWR0aCcgaXMgJ2F1dG8n
LCAnbGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICd3aWR0
aCcKLSAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBu
b3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQnCi0gICAgYXV0byYgc3R5bGUgPSBsYXlv
dXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGxlZnQgPSBzdHlsZS5sb2dpY2FsTGVmdCgpOwotICAg
IGF1dG8gcmlnaHQgPSBzdHlsZS5sb2dpY2FsUmlnaHQoKTsKLSAgICBhdXRvIHdpZHRoID0gc3R5
bGUubG9naWNhbFdpZHRoKCk7Ci0KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5
b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCkpLT53aWR0aCgpOwotICAgIExheW91dFVuaXQgY29tcHV0ZWRXaWR0aFZhbHVlOwotCi0g
ICAgaWYgKChsZWZ0LmlzQXV0bygpICYmIHdpZHRoLmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygp
KQotICAgICAgICB8fCAobGVmdC5pc0F1dG8oKSAmJiB3aWR0aC5pc0F1dG8oKSAmJiAhcmlnaHQu
aXNBdXRvKCkpCi0gICAgICAgIHx8ICghbGVmdC5pc0F1dG8oKSAmJiB3aWR0aC5pc0F1dG8oKSAm
JiByaWdodC5pc0F1dG8oKSkpIHsKLSAgICAgICAgLy8gQWxsIGF1dG8gKCMxKSwgIzEgYW5kICMz
Ci0gICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Q29u
dGV4dCwgbGF5b3V0Qm94KTsKLSAgICB9IGVsc2UgaWYgKCFsZWZ0LmlzQXV0bygpICYmIHdpZHRo
LmlzQXV0bygpICYmICFyaWdodC5pc0F1dG8oKSkgewotICAgICAgICAvLyAjNQotICAgICAgICBh
dXRvIG1hcmdpbkxlZnQgPSBkaXNwbGF5Qm94Lm1hcmdpbkxlZnQoKTsKLSAgICAgICAgYXV0byBt
YXJnaW5SaWdodCA9IGRpc3BsYXlCb3gubWFyZ2luUmlnaHQoKTsKLSAgICAKLSAgICAgICAgYXV0
byBwYWRkaW5nTGVmdCA9IGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKTsKLSAgICAgICAgYXV0byBw
YWRkaW5nUmlnaHQgPSBkaXNwbGF5Qm94LnBhZGRpbmdSaWdodCgpOwotCi0gICAgICAgIGF1dG8g
Ym9yZGVyTGVmdCA9IGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpOwotICAgICAgICBhdXRvIGJvcmRl
clJpZ2h0ID0gZGlzcGxheUJveC5ib3JkZXJSaWdodCgpOwotCi0gICAgICAgIGNvbXB1dGVkV2lk
dGhWYWx1ZSA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKGxlZnQudmFsdWUoKSArIG1hcmdpbkxl
ZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArIG1hcmdpblJpZ2h0ICsgcmlnaHQudmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmICghd2lkdGgu
aXNBdXRvKCkpCi0gICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKHdp
ZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLQotICAgIGRpc3BsYXlCb3guc2V0V2lkdGgoY29tcHV0ZWRXaWR0aFZhbHVl
KTsKLX0KLQotdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1JlcGxhY2Vk
SGVpZ2h0KExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJv
eC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7Ci0gICAg
Ly8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAv
LwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9y
IGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4KLSAgICBjb21wdXRlUmVwbGFjZWRIZWlnaHQobGF5
b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKLX0KLQotdm9pZCBGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1JlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJv
eCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsKLSAgICAvLyAxMC4zLjggQWJzb2x1dGVseSBwb3Np
dGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gVGhlIHVzZWQgdmFsdWUg
b2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMu
Ci0gICAgY29tcHV0ZVJlcGxhY2VkV2lkdGgobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNw
bGF5Qm94KTsKLX0KLQotdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd05v
blJlcGxhY2VkUG9zaXRpb24oTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJveCkgY29uc3QKLXsKLSAgICAvLyAx
MC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMgKGxlZnQv
cmlnaHQpCi0gICAgLy8gMTAuNi40IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2Vk
IGVsZW1lbnRzICh0b3AvYm90dG9tKQotCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSd2ZSB0aGUg
c2l6ZSBjb21wdXRlZC4KLSAgICBhdXRvIHNpemUgPSBkaXNwbGF5Qm94LnNpemUoKTsKLSAgICBh
dXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotCi0gICAgLy8gMTAuNi40IEFic29sdXRl
bHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgYXV0byB0b3AgPSBzdHls
ZS5sb2dpY2FsVG9wKCk7Ci0gICAgYXV0byBib3R0b20gPSBzdHlsZS5sb2dpY2FsQm90dG9tKCk7
Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPmhlaWdodCgpOwot
Ci0gICAgLy8gJ3RvcCcgKyAnbWFyZ2luLXRvcCcgKyAnYm9yZGVyLXRvcC13aWR0aCcgKyAncGFk
ZGluZy10b3AnICsgJ2hlaWdodCcgKyAncGFkZGluZy1ib3R0b20nICsgJ2JvcmRlci1ib3R0b20t
d2lkdGgnICsgJ21hcmdpbi1ib3R0b20nICsgJ2JvdHRvbScKLSAgICAvLyA9IGhlaWdodCBvZiBj
b250YWluaW5nIGJsb2NrCi0gICAgLy8KLSAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJl
ICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJh
c2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsCi0gICAgLy8gICAgIHNldCAnYXV0bycgdmFs
dWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUg
Zm9yICd0b3AnCi0gICAgLy8gMi4gJ3RvcCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdo
ZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRp
b24sIHNldCAnYXV0bycgdmFsdWVzIGZvcgotICAgIC8vICAgICdtYXJnaW4tdG9wJyBhbmQgJ21h
cmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAvLyAzLiAnaGVp
Z2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRvJywgdGhl
biB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNldCAnYXV0
bycKLSAgICAvLyAgICAgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgLy8gNC4gJ3RvcCcgaXMgJ2F1dG8n
LCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2
YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2
ZSBmb3IgJ3RvcCcKLSAgICAvLyA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90
dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcg
YW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVpZ2h0Jwot
ICAgIC8vIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSBub3Qg
J2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJn
aW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLSAgICBMYXlvdXRVbml0IGNv
bXB1dGVkVG9wVmFsdWU7Ci0gICAgaWYgKHRvcC5pc0F1dG8oKSAmJiAhYm90dG9tLmlzQXV0bygp
KSB7Ci0gICAgICAgIC8vICMxICM0Ci0gICAgICAgIGF1dG8gbWFyZ2luVG9wID0gZGlzcGxheUJv
eC5tYXJnaW5Ub3AoKTsKLSAgICAgICAgYXV0byBtYXJnaW5Cb3R0b20gPSBkaXNwbGF5Qm94Lm1h
cmdpbkJvdHRvbSgpOwotICAgIAotICAgICAgICBhdXRvIHBhZGRpbmdUb3AgPSBkaXNwbGF5Qm94
LnBhZGRpbmdUb3AoKTsKLSAgICAgICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJveC5w
YWRkaW5nQm90dG9tKCk7Ci0KLSAgICAgICAgYXV0byBib3JkZXJUb3AgPSBkaXNwbGF5Qm94LmJv
cmRlclRvcCgpOwotICAgICAgICBhdXRvIGJvcmRlckJvdHRvbSA9IGRpc3BsYXlCb3guYm9yZGVy
Qm90dG9tKCk7Ci0KLSAgICAgICAgY29tcHV0ZWRUb3BWYWx1ZSA9IGNvbnRhaW5pbmdCbG9ja0hl
aWdodCAtIChtYXJnaW5Ub3AgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgc2l6ZS5oZWlnaHQo
KSArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyBtYXJnaW5Cb3R0b20gKyBib3R0b20u
dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmICh0b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygp
KSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIC8vIEFscmVhZHkgY29tcHV0ZWQgYXMgcGFydCBv
ZiB0aGUgY29tcHV0ZVN0YXRpY1Bvc2l0aW9uKCk7Ci0gICAgICAgIGNvbXB1dGVkVG9wVmFsdWUg
PSBkaXNwbGF5Qm94LnRvcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICMzICM1ICM2IGhh
dmUgdG9wICE9IGF1dG8KLSAgICAgICAgY29tcHV0ZWRUb3BWYWx1ZSA9IHZhbHVlRm9yTGVuZ3Ro
KHRvcCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBkaXNwbGF5Qm94LnNl
dFRvcChjb21wdXRlZFRvcFZhbHVlKTsKLQotICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0
aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cwotICAgIGF1dG8gbGVmdCA9IHN0eWxlLmxvZ2lj
YWxMZWZ0KCk7Ci0gICAgYXV0byByaWdodCA9IHN0eWxlLmxvZ2ljYWxSaWdodCgpOwotICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPndpZHRoKCk7Ci0KLSAgICAvLyAn
bGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxl
ZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsg
J21hcmdpbi1yaWdodCcgKyAncmlnaHQnCi0gICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5nIGJs
b2NrCi0gICAgLy8KLSAgICAvLyBJZiBhbGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQg
J3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJn
aW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAuCi0gICAgLy8gVGhlbiwgaWYgdGhlICdk
aXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGlj
LXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3Rh
dGljCi0gICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93OyBv
dGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1
bGUgbnVtYmVyIG9uZSBiZWxvdy4KLQotICAgIC8vIDEuICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUg
J2F1dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmlu
ay10by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0JwotICAgIC8vIDIuICdsZWZ0JyBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nIGFuZCAnd2lkdGgnIGlzIG5vdCAnYXV0bycsIHRoZW4gaWYgdGhlICdk
aXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGlj
LXBvc2l0aW9uIAotICAgIC8vICAgIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0
JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndpc2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0
YXRpYyBwb3NpdGlvbi4KLSAgICAvLyAgICBUaGVuIHNvbHZlIGZvciAnbGVmdCcgKGlmICdkaXJl
Y3Rpb24gaXMgJ3J0bCcpIG9yICdyaWdodCcgKGlmICdkaXJlY3Rpb24nIGlzICdsdHInKS4KLSAg
ICAvLyAzLiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3Qg
J2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0IC4gVGhlbiBzb2x2ZSBmb3Ig
J3JpZ2h0JwotICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0bycsICd3aWR0aCcgYW5kICdyaWdodCcg
YXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdsZWZ0JwotICAgIC8vIDUuICd3aWR0aCcg
aXMgJ2F1dG8nLCAnbGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUg
Zm9yICd3aWR0aCcKLSAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lk
dGgnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQnCi0gICAgTGF5b3V0VW5p
dCBjb21wdXRlZExlZnRWYWx1ZTsKLSAgICBpZiAobGVmdC5pc0F1dG8oKSAmJiAhcmlnaHQuaXNB
dXRvKCkpIHsKLSAgICAgICAgLy8gIzEgIzQKLSAgICAgICAgYXV0byBtYXJnaW5MZWZ0ID0gZGlz
cGxheUJveC5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBkaXNwbGF5
Qm94Lm1hcmdpblJpZ2h0KCk7Ci0gICAgCi0gICAgICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBkaXNw
bGF5Qm94LnBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gZGlzcGxh
eUJveC5wYWRkaW5nUmlnaHQoKTsKLQotICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5
Qm94LmJvcmRlckxlZnQoKTsKLSAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3BsYXlCb3gu
Ym9yZGVyUmlnaHQoKTsKLQotICAgICAgICBjb21wdXRlZExlZnRWYWx1ZSA9IGNvbnRhaW5pbmdC
bG9ja1dpZHRoIC0gKG1hcmdpbkxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBzaXpl
LndpZHRoKCkgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIG1hcmdpblJpZ2h0ICsgcmln
aHQudmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0
bygpKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIC8vIEZJWE1FOiBydGwKLSAgICAgICAgY29t
cHV0ZWRMZWZ0VmFsdWUgPSBkaXNwbGF5Qm94LmxlZnQoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyAjMyAjNSAjNiBoYXZlIGxlZnQgIT0gYXV0bwotICAgICAgICBjb21wdXRlZExlZnRWYWx1
ZSA9IHZhbHVlRm9yTGVuZ3RoKGxlZnQsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICB9Ci0K
LSAgICBkaXNwbGF5Qm94LnNldExlZnQoY29tcHV0ZWRMZWZ0VmFsdWUpOwotfQotCi12b2lkIEZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93UmVwbGFjZWRQb3NpdGlvbihMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6Qm94
JiBkaXNwbGF5Qm94KSBjb25zdAotewotICAgIC8vIDEwLjYuNSBBYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQsIHJlcGxhY2VkIGVsZW1lbnRzICh0b3AvYm90dG9tKQotICAgIC8vIDEwLjMuOCBBYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzIChsZWZ0L3JpZ2h0KQotCi0gICAgLy8g
QXQgdGhpcyBwb2ludCB3ZSd2ZSB0aGUgc2l6ZSBjb21wdXRlZC4KLSAgICBhdXRvIHNpemUgPSBk
aXNwbGF5Qm94LnNpemUoKTsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwot
Ci0gICAgLy8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMK
LSAgICAvLwotICAgIC8vIFRoaXMgc2l0dWF0aW9uIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3Vz
IG9uZSwgZXhjZXB0IHRoYXQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyBoZWlnaHQuIFRo
ZSBzZXF1ZW5jZSBvZiBzdWJzdGl0dXRpb25zIGlzIG5vdzoKLSAgICAvLyBUaGUgdXNlZCB2YWx1
ZSBvZiAnaGVpZ2h0JyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMuIElmICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRvbScgaXMgc3BlY2lmaWVkIGFzICdh
dXRvJwotICAgIC8vIGl0cyB1c2VkIHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHJ1bGVzIGJl
bG93LgotICAgIC8vCi0gICAgLy8gMS4gSWYgYm90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0
aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMg
cG9zaXRpb24uCi0gICAgLy8gMi4gSWYgJ2JvdHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAn
YXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyB3aXRoICcwJy4KLSAgICAv
LyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGggJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRv
bScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBj
b25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KLSAg
ICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBz
b2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCi0gICAgLy8gNS4gSWYgYXQgdGhpcyBw
b2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0gICAgYXV0byB0b3AgPSBzdHls
ZS5sb2dpY2FsVG9wKCk7Ci0gICAgYXV0byBib3R0b20gPSBzdHlsZS5sb2dpY2FsQm90dG9tKCk7
Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPmhlaWdodCgpOwot
ICAgIExheW91dFVuaXQgY29tcHV0ZWRUb3BWYWx1ZTsKLQotICAgIGlmICghdG9wLmlzQXV0bygp
KQotICAgICAgICBjb21wdXRlZFRvcFZhbHVlID0gdmFsdWVGb3JMZW5ndGgodG9wLCBjb250YWlu
aW5nQmxvY2tIZWlnaHQpOwotICAgIGVsc2UgaWYgKGJvdHRvbS5pc0F1dG8oKSkgewotICAgICAg
ICAvLyAjMQotICAgICAgICBjb21wdXRlZFRvcFZhbHVlID0gZGlzcGxheUJveC50b3AoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyAjNAotICAgICAgICBhdXRvIG1hcmdpblRvcCA9IGRpc3Bs
YXlCb3gubWFyZ2luVG9wKCk7Ci0gICAgICAgIGF1dG8gbWFyZ2luQm90dG9tID0gZGlzcGxheUJv
eC5tYXJnaW5Cb3R0b20oKTsKLQotICAgICAgICBhdXRvIHBhZGRpbmdUb3AgPSBkaXNwbGF5Qm94
LnBhZGRpbmdUb3AoKTsKLSAgICAgICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJveC5w
YWRkaW5nQm90dG9tKCk7Ci0KLSAgICAgICAgYXV0byBib3JkZXJUb3AgPSBkaXNwbGF5Qm94LmJv
cmRlclRvcCgpOwotICAgICAgICBhdXRvIGJvcmRlckJvdHRvbSA9IGRpc3BsYXlCb3guYm9yZGVy
Qm90dG9tKCk7Ci0KLSAgICAgICAgY29tcHV0ZWRUb3BWYWx1ZSA9IGNvbnRhaW5pbmdCbG9ja0hl
aWdodCAtIChtYXJnaW5Ub3AgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgc2l6ZS5oZWlnaHQo
KSArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyBtYXJnaW5Cb3R0b20gKyBib3R0b20u
dmFsdWUoKSk7Ci0gICAgfQotCi0gICAgZGlzcGxheUJveC5zZXRUb3AoY29tcHV0ZWRUb3BWYWx1
ZSk7Ci0KLQotICAgIC8vIDEwLjMuOCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVs
ZW1lbnRzCi0gICAgLy8KLSAgICAvLyBJbiB0aGlzIGNhc2UsIHNlY3Rpb24gMTAuMy43IGFwcGxp
ZXMgdXAgdGhyb3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uLCBidXQg
dGhlIHJlc3Qgb2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZyBy
dWxlczoKLSAgICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJt
aW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiAKLSAgICAvLwotICAgIC8vIDEu
IElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgc3BlY2lmaWVkIGFzICdhdXRv
JyBpdHMgdXNlZCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxvdy4KLSAgICAv
LyAyLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3JpZ2h0JyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHRo
ZW4gaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGlu
ZyB0aGUKLSAgICAvLyAgICBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRy
Jywgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rpb24n
IGlzICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLgotICAgIC8vIDMu
IElmICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAn
bWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIHdpdGggJzAnLgotICAgIC8vIDQuIElmIGF0
IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgc3Rp
bGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQK
LSAgICAvLyAgICB0aGF0IHRoZSB0d28gbWFyZ2lucyBtdXN0IGdldCBlcXVhbCB2YWx1ZXMsIHVu
bGVzcyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVuIHRo
ZSBkaXJlY3Rpb24gb2YKLSAgICAvLyAgICB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAo
J3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kIHNv
bHZlIGZvciAnbWFyZ2luLXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuCi0gICAgLy8gNS4gSWYgYXQg
dGhpcyBwb2ludCB0aGVyZSBpcyBhbiAnYXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9uIGZv
ciB0aGF0IHZhbHVlLgotICAgIC8vIDYuIElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUg
b3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgZWl0aGVyICdsZWZ0JyAoaW4g
Y2FzZSB0aGUgJ2RpcmVjdGlvbicKLSAgICAvLyAgICBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmlu
ZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRy
JykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgotICAgIGF1dG8gbGVmdCA9IHN0eWxlLmxvZ2lj
YWxMZWZ0KCk7Ci0gICAgYXV0byByaWdodCA9IHN0eWxlLmxvZ2ljYWxSaWdodCgpOwotICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPndpZHRoKCk7Ci0gICAgTGF5b3V0
VW5pdCBjb21wdXRlZExlZnRWYWx1ZTsKLQotICAgIGlmICghbGVmdC5pc0F1dG8oKSkgICAKLSAg
ICAgICAgY29tcHV0ZWRMZWZ0VmFsdWUgPSB2YWx1ZUZvckxlbmd0aChsZWZ0LCBjb250YWluaW5n
QmxvY2tXaWR0aCk7Ci0gICAgZWxzZSBpZiAocmlnaHQuaXNBdXRvKCkpIHsKLSAgICAgICAgLy8g
RklYTUU6IHRha2UgZGlyZWN0aW9uIGludG8gYWNjb3VudAotICAgICAgICBjb21wdXRlZExlZnRW
YWx1ZSA9IGRpc3BsYXlCb3gubGVmdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICM1Ci0g
ICAgICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRpc3BsYXlCb3gubWFyZ2luTGVmdCgpOwotICAgICAg
ICBhdXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxheUJveC5tYXJnaW5SaWdodCgpOwotICAgIAotICAg
ICAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpOwotICAgICAg
ICBhdXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCk7Ci0KLSAgICAg
ICAgYXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0KCk7Ci0gICAgICAgIGF1
dG8gYm9yZGVyUmlnaHQgPSBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCk7Ci0KLSAgICAgICAgY29t
cHV0ZWRMZWZ0VmFsdWUgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChtYXJnaW5MZWZ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgc2l6ZS53aWR0aCgpICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQgKyBtYXJnaW5SaWdodCArIHJpZ2h0LnZhbHVlKCkpOwotICAgIH0KLQotICAgIGRp
c3BsYXlCb3guc2V0TGVmdChjb21wdXRlZExlZnRWYWx1ZSk7Ci19Ci0KLUxheW91dFVuaXQgRm9y
bWF0dGluZ0NvbnRleHQ6OnNocmlua1RvRml0V2lkdGgoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJv
eCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiB2b2lkIEZv
cm1hdHRpbmdDb250ZXh0Ojp2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dChj
b25zdCBMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0KSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAzZWMyZWY3N2M5MDYzYjlkNDM0ZjQx
YjcxODFiMmQxNTE2NTIwZGY3Li5jM2QzYzljOWE3MTZjMmY0Y2RiMTM1MDYwNmJkZWJhOGNkMjIx
ZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMjgs
MTIgKzI4LDE0IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNp
bmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIExheW91dFBvaW50OworY2xhc3MgTGF5b3V0VW5pdDsKKwog
bmFtZXNwYWNlIERpc3BsYXkgewogY2xhc3MgQm94OwogfQpAQCAtODcsMjggKzg5LDMzIEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IENv
bnRhaW5lciYpIGNvbnN0OwogICAgIHZvaWQgbGF5b3V0T3V0T2ZGbG93RGVzY2VuZGFudHMoTGF5
b3V0Q29udGV4dCZzKSBjb25zdDsKIAotICAgIHZvaWQgY29tcHV0ZVJlcGxhY2VkSGVpZ2h0KExh
eW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gmKSBjb25zdDsKLSAgICB2b2lk
IGNvbXB1dGVSZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5
OjpCb3gmKSBjb25zdDsKLQogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgdmFsaWRh
dGVHZW9tZXRyeUNvbnN0cmFpbnRzQWZ0ZXJMYXlvdXQoY29uc3QgTGF5b3V0Q29udGV4dCYpIGNv
bnN0OwogI2VuZGlmCiAKLXByaXZhdGU6Ci0gICAgdm9pZCBjb21wdXRlT3V0T2ZGbG93Tm9uUmVw
bGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNv
bnN0OwotICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29u
dGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0
ZU91dE9mRmxvd1JlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNw
bGF5OjpCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dSZXBsYWNlZFdpZHRo
KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gmKSBjb25zdDsKKyAgICAv
LyBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgor
ICAgIGNsYXNzIEdlb21ldHJ5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBMYXlvdXRV
bml0IG91dE9mRmxvd05vblJlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBCb3gm
KTsKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQgb3V0T2ZGbG93Tm9uUmVwbGFjZWRXaWR0aChM
YXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQg
b3V0T2ZGbG93UmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAg
ICAgICBzdGF0aWMgTGF5b3V0VW5pdCBvdXRPZkZsb3dSZXBsYWNlZFdpZHRoKExheW91dENvbnRl
eHQmLCBjb25zdCBCb3gmKTsKIAotICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd05vblJlcGxhY2Vk
UG9zaXRpb24oTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0
OwotICAgIHZvaWQgY29tcHV0ZU91dE9mRmxvd1JlcGxhY2VkUG9zaXRpb24oTGF5b3V0Q29udGV4
dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OworICAgICAgICBzdGF0aWMgTGF5
b3V0VW5pdCBmbG9hdGluZ05vblJlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmLCBjb25zdCBC
b3gmKTsKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQgZmxvYXRpbmdOb25SZXBsYWNlZFdpZHRo
KExheW91dENvbnRleHQmLCBjb25zdCBCb3gmKTsKIAotICAgIHZvaWQgY29tcHV0ZUZsb2F0aW5n
Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJv
eCYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUZsb2F0aW5nTm9uUmVwbGFjZWRXaWR0aChMYXlv
dXRDb250ZXh0JiwgY29uc3QgQm94JiwgRGlzcGxheTo6Qm94JikgY29uc3Q7CisgICAgICAgIHN0
YXRpYyBMYXlvdXRVbml0IGZsb2F0aW5nUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNv
bnN0IEJveCYpOworICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBmbG9hdGluZ1JlcGxhY2VkV2lk
dGgoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOwogCi0gICAgTGF5b3V0VW5pdCBjb250ZW50
SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KExheW91dENvbnRleHQmLCBjb25zdCBCb3gm
KSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHNocmlua1RvRml0V2lkdGgoTGF5b3V0Q29udGV4dCYs
IGNvbnN0IEJveCYpIGNvbnN0OworICAgICAgICBzdGF0aWMgTGF5b3V0UG9pbnQgb3V0T2ZGbG93
Tm9uUmVwbGFjZWRQb3NpdGlvbihMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisgICAgICAg
IHN0YXRpYyBMYXlvdXRQb2ludCBvdXRPZkZsb3dSZXBsYWNlZFBvc2l0aW9uKExheW91dENvbnRl
eHQmLCBjb25zdCBCb3gmKTsKIAorICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCByZXBsYWNlZEhl
aWdodChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94Jik7CisgICAgICAgIHN0YXRpYyBMYXlvdXRV
bml0IHJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIH07CisK
K3ByaXZhdGU6CiAgICAgV2Vha1B0cjxCb3g+IG1fcm9vdDsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNDY0YjM4YWE5NjBmMzFlNjc3ZjczN2MyMzZjZTc5Y2I0MGY3N2U0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CkBAIC0wLDAgKzEsNTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisK
K3N0YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7Cisg
ICAgQVNTRVJUKGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAmJiBs
YXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICAvLyAxMC42Ljcg
J0F1dG8nIGhlaWdodHMgZm9yIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCByb290cworCisgICAg
Ly8gSWYgaXQgb25seSBoYXMgaW5saW5lLWxldmVsIGNoaWxkcmVuLCB0aGUgaGVpZ2h0IGlzIHRo
ZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIHRvcG1vc3QgbGluZSBib3ggYW5kIHRo
ZSBib3R0b20gb2YgdGhlIGJvdHRvbW1vc3QgbGluZSBib3guCisgICAgLy8gSWYgaXQgaGFzIGJs
b2NrLWxldmVsIGNoaWxkcmVuLCB0aGUgaGVpZ2h0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRo
ZSB0b3AgbWFyZ2luLWVkZ2Ugb2YgdGhlIHRvcG1vc3QgYmxvY2stbGV2ZWwKKyAgICAvLyBjaGls
ZCBib3ggYW5kIHRoZSBib3R0b20gbWFyZ2luLWVkZ2Ugb2YgdGhlIGJvdHRvbW1vc3QgYmxvY2st
bGV2ZWwgY2hpbGQgYm94LgorCisgICAgLy8gSW4gYWRkaXRpb24sIGlmIHRoZSBlbGVtZW50IGhh
cyBhbnkgZmxvYXRpbmcgZGVzY2VuZGFudHMgd2hvc2UgYm90dG9tIG1hcmdpbiBlZGdlIGlzIGJl
bG93IHRoZSBlbGVtZW50J3MgYm90dG9tIGNvbnRlbnQgZWRnZSwKKyAgICAvLyB0aGVuIHRoZSBo
ZWlnaHQgaXMgaW5jcmVhc2VkIHRvIGluY2x1ZGUgdGhvc2UgZWRnZXMuIE9ubHkgZmxvYXRzIHRo
YXQgcGFydGljaXBhdGUgaW4gdGhpcyBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgYXJlIHRha2Vu
CisgICAgLy8gaW50byBhY2NvdW50LCBlLmcuLCBmbG9hdHMgaW5zaWRlIGFic29sdXRlbHkgcG9z
aXRpb25lZCBkZXNjZW5kYW50cyBvciBvdGhlciBmbG9hdHMgYXJlIG5vdC4KKyAgICBpZiAoIWlz
PENvbnRhaW5lcj4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gp
Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1
dG8mIGZvcm1hdHRpbmdSb290Q29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRC
b3gpOworICAgIGlmIChmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5lc3RhYmxpc2hlc0lubGluZUZv
cm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byogZmlyc3RE
aXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0
aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxvd0NoaWxkKCkpOworICAgIGF1dG8qIGxhc3REaXNw
bGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5n
Um9vdENvbnRhaW5lci5sYXN0SW5GbG93Q2hpbGQoKSk7CisKKyAgICBhdXRvIHRvcCA9IGZpcnN0
RGlzcGxheUJveC0+bWFyZ2luQm94KCkueSgpOworICAgIGF1dG8gYm90dG9tID0gbGFzdERpc3Bs
YXlCb3gtPm1hcmdpbkJveCgpLm1heFkoKTsKKyAgICAvLyBGSVhNRTogYWRkIGZsb2F0aW5nIHN1
cHBvcnQuCisgICAgcmV0dXJuIGJvdHRvbSAtIHRvcDsKK30KKworc3RhdGljIExheW91dFVuaXQg
c2hyaW5rVG9GaXRXaWR0aChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JikKK3sKKyAgICByZXR1
cm4geyB9OworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29u
c3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOworCisgICAgLy8gMTAuNi40IEFi
c29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAv
LyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLCB0aGUgdXNlZCB2YWx1ZXMgb2Yg
dGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBzYXRpc2Z5IHRoaXMgY29uc3RyYWludDoKKyAg
ICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdib3JkZXItdG9wLXdpZHRoJyArICdwYWRkaW5n
LXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJvdHRvbScgKyAnYm9yZGVyLWJvdHRvbS13aWR0
aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9tJworICAgIC8vID0gaGVpZ2h0IG9mIGNvbnRh
aW5pbmcgYmxvY2sKKworICAgIC8vIElmIGFsbCB0aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFu
ZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5k
IGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93LgorCisgICAgLy8gSWYgbm9uZSBvZiB0aGUg
dGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhCisgICAgLy8g
Y29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLiBJZiBvbmUg
b2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KKyAgICAvLyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNv
bnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRo
YXQgdmFsdWUuCisKKyAgICAvLyBPdGhlcndpc2UsIHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93
aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCisKKyAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdo
dCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0
IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsCisgICAgLy8gICAgIHNldCAnYXV0
bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQg
c29sdmUgZm9yICd0b3AnCisgICAgLy8gMi4gJ3RvcCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycg
YW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMg
cG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZvcgorICAgIC8vICAgICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAvLyAz
LiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRv
JywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNl
dCAnYXV0bycKKyAgICAvLyAgICAgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4t
Ym90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCisgICAgLy8gNC4gJ3RvcCcgaXMg
J2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdh
dXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFu
ZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAvLyA1LiAnaGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFu
ZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2lu
LXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVp
Z2h0JworICAgIC8vIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKKyAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gdG9wID0gc3R5bGUubG9naWNhbFRv
cCgpOworICAgIGF1dG8gYm90dG9tID0gc3R5bGUubG9naWNhbEJvdHRvbSgpOworICAgIGF1dG8g
aGVpZ2h0ID0gc3R5bGUubG9naWNhbEhlaWdodCgpOyAKKworICAgIGF1dG8gY29udGFpbmluZ0Js
b2NrSGVpZ2h0ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpLT5oZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVk
SGVpZ2h0VmFsdWU7CisKKyAgICBpZiAoIWhlaWdodC5pc0F1dG8oKSkKKyAgICAgICAgY29tcHV0
ZWRIZWlnaHRWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKGhlaWdodCwgY29udGFpbmluZ0Jsb2NrSGVp
Z2h0KTsKKyAgICBlbHNlIGlmICgodG9wLmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkKKyAg
ICAgICAgfHwgKHRvcC5pc0F1dG8oKSAmJiAhYm90dG9tLmlzQXV0bygpKQorICAgICAgICB8fCAo
IXRvcC5pc0F1dG8oKSAmJiBib3R0b20uaXNBdXRvKCkpKSB7CisgICAgICAgIC8vIEFsbCBhdXRv
ICgjMyksICMxIGFuZCAjMworICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVlID0gY29udGVudEhl
aWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOwor
ICAgIH0gZWxzZSBpZiAoIXRvcC5pc0F1dG8oKSAmJiAhYm90dG9tLmlzQXV0bygpKSB7CisgICAg
ICAgIC8vICM1CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSAqbGF5b3V0Q29udGV4dC5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisKKyAgICAgICAgYXV0byBtYXJnaW5Ub3Ag
PSBkaXNwbGF5Qm94Lm1hcmdpblRvcCgpOworICAgICAgICBhdXRvIG1hcmdpbkJvdHRvbSA9IGRp
c3BsYXlCb3gubWFyZ2luQm90dG9tKCk7CisgICAgCisgICAgICAgIGF1dG8gcGFkZGluZ1RvcCA9
IGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpOworICAgICAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBk
aXNwbGF5Qm94LnBhZGRpbmdCb3R0b20oKTsKKworICAgICAgICBhdXRvIGJvcmRlclRvcCA9IGRp
c3BsYXlCb3guYm9yZGVyVG9wKCk7CisgICAgICAgIGF1dG8gYm9yZGVyQm90dG9tID0gZGlzcGxh
eUJveC5ib3JkZXJCb3R0b20oKTsKKworICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVlID0gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKHRvcC52YWx1ZSgpICsgbWFyZ2luVG9wICsgYm9yZGVyVG9w
ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyBtYXJnaW5Cb3R0
b20gKyBib3R0b20udmFsdWUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gIzIgIzQgIzYg
aGF2ZSBoZWlnaHQgIT0gYXV0bworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZTsKK30KKworTGF5b3V0VW5pdCBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkV2lkdGgoTGF5b3V0
Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNT
RVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxh
Y2VkKCkpOworICAgIAorICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1y
ZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gJ2xlZnQnICsgJ21hcmdpbi1sZWZ0JyAr
ICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcgKyAncGFkZGlu
Zy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQnICsgJ3JpZ2h0
JworICAgIC8vID0gd2lkdGggb2YgY29udGFpbmluZyBibG9jaworCisgICAgLy8gSWYgYWxsIHRo
cmVlIG9mICdsZWZ0JywgJ3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdhdXRvJzogRmlyc3Qgc2V0
IGFueSAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0
byAwLgorICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxl
bWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlz
ICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYworICAgIC8vIHBvc2l0aW9uIGFuZCBhcHBs
eSBydWxlIG51bWJlciB0aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQgJ3JpZ2h0JyB0byB0aGUg
c3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUgYmVsb3cuCisKKyAgICAv
LyAxLiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1
dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVm
dCcKKyAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBp
cyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxl
bWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiAKKyAgICAvLyAgICBjb250YWlu
aW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3Ro
ZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCisgICAgLy8gICAgVGhl
biBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChp
ZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCisgICAgLy8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBh
cmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hy
aW5rLXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKKyAgICAvLyA0LiAnbGVmdCcgaXMg
J2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZv
ciAnbGVmdCcKKyAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQn
IGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCisgICAgLy8gNi4gJ3JpZ2h0
JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2
ZSBmb3IgJ3JpZ2h0JworICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAg
YXV0byBsZWZ0ID0gc3R5bGUubG9naWNhbExlZnQoKTsKKyAgICBhdXRvIHJpZ2h0ID0gc3R5bGUu
bG9naWNhbFJpZ2h0KCk7CisgICAgYXV0byB3aWR0aCA9IHN0eWxlLmxvZ2ljYWxXaWR0aCgpOwor
CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dENvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS0+d2lkdGgoKTsKKyAg
ICBMYXlvdXRVbml0IGNvbXB1dGVkV2lkdGhWYWx1ZTsKKworICAgIGlmICghd2lkdGguaXNBdXRv
KCkpCisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHZhbHVlRm9yTGVuZ3RoKHdpZHRoLCBj
b250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgZWxzZSBpZiAoKGxlZnQuaXNBdXRvKCkgJiYgcmln
aHQuaXNBdXRvKCkpCisgICAgICAgIHx8IChsZWZ0LmlzQXV0bygpICYmICFyaWdodC5pc0F1dG8o
KSkKKyAgICAgICAgfHwgKCFsZWZ0LmlzQXV0bygpICYmIHJpZ2h0LmlzQXV0bygpKSkgeworICAg
ICAgICAvLyBBbGwgYXV0byAoIzEpLCAjMSBhbmQgIzMKKyAgICAgICAgY29tcHV0ZWRXaWR0aFZh
bHVlID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpOworICAgIH0g
ZWxzZSBpZiAoIWxlZnQuaXNBdXRvKCkgJiYgIXJpZ2h0LmlzQXV0bygpKSB7CisgICAgICAgIC8v
ICM1CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSAqbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisKKyAgICAgICAgYXV0byBtYXJnaW5MZWZ0ID0gZGlz
cGxheUJveC5tYXJnaW5MZWZ0KCk7CisgICAgICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBkaXNwbGF5
Qm94Lm1hcmdpblJpZ2h0KCk7CisgICAgCisgICAgICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBkaXNw
bGF5Qm94LnBhZGRpbmdMZWZ0KCk7CisgICAgICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gZGlzcGxh
eUJveC5wYWRkaW5nUmlnaHQoKTsKKworICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5
Qm94LmJvcmRlckxlZnQoKTsKKyAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3BsYXlCb3gu
Ym9yZGVyUmlnaHQoKTsKKworICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb250YWluaW5n
QmxvY2tXaWR0aCAtIChsZWZ0LnZhbHVlKCkgKyBtYXJnaW5MZWZ0ICsgYm9yZGVyTGVmdCArIHBh
ZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBtYXJnaW5SaWdodCArIHJp
Z2h0LnZhbHVlKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICMyICM0ICM2IGhhdmUgd2lk
dGggIT0gYXV0bworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gY29tcHV0ZWRXaWR0aFZhbHVlOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJv
eC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CisgICAg
Ly8gMTAuNi41IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAv
LworICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9y
IGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4KKyAgICByZXR1cm4gcmVwbGFjZWRIZWlnaHQobGF5
b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKK30KKworTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5b3V0
Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CisgICAgLy8g
MTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLwor
ICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5s
aW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIHJldHVybiByZXBsYWNlZFdpZHRoKGxheW91dENv
bnRleHQsIGxheW91dEJveCk7Cit9CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkSGVpZ2h0KExheW91dENvbnRleHQmIGxheW91dENv
bnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJlcGxhY2VkKCkpOworICAgIC8vIDEw
LjYuNiBDb21wbGljYXRlZCBjYXNlcworICAgIC8vCisgICAgLy8gRmxvYXRpbmcsIG5vbi1yZXBs
YWNlZCBlbGVtZW50cy4KKyAgICAvLworICAgIC8vIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhl
IGhlaWdodCBkZXBlbmRzIG9uIHRoZSBlbGVtZW50J3MgZGVzY2VuZGFudHMgcGVyIDEwLjYuNy4K
KyAgICBhdXRvIGhlaWdodCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAg
ICByZXR1cm4gaGVpZ2h0LmlzQXV0bygpID8gY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250
ZXh0Um9vdChsYXlvdXRDb250ZXh0LCBsYXlvdXRCb3gpIDogTGF5b3V0VW5pdChoZWlnaHQudmFs
dWUoKSk7Cit9CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9h
dGluZ05vblJlcGxhY2VkV2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3Qg
Qm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRp
b25lZCgpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7CisgICAgLy8gMTAuMy41IEZsb2F0aW5n
LCBub24tcmVwbGFjZWQgZWxlbWVudHMKKworICAgIC8vIElmICd3aWR0aCcgaXMgY29tcHV0ZWQg
YXMgJ2F1dG8nLCB0aGUgdXNlZCB2YWx1ZSBpcyB0aGUgInNocmluay10by1maXQiIHdpZHRoLgor
ICAgIGF1dG8gd2lkdGggPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsV2lkdGgoKTsKKyAgICBy
ZXR1cm4gd2lkdGguaXNBdXRvKCkgPyBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dENvbnRleHQsIGxh
eW91dEJveCkgOiBMYXlvdXRVbml0KHdpZHRoLnZhbHVlKCkpOworfQorCitMYXlvdXRVbml0IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZEhlaWdodChMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBBU1NF
UlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgJiYgbGF5b3V0Qm94LnJlcGxhY2Vk
KCkpOworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVs
IHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJworICAgIC8v
IHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBl
bGVtZW50cworICAgIHJldHVybiByZXBsYWNlZEhlaWdodChsYXlvdXRDb250ZXh0LCBsYXlvdXRC
b3gpOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRp
bmdSZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYg
bGF5b3V0Qm94KQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSAmJiBsYXlvdXRCb3gucmVwbGFjZWQoKSk7CisgICAgLy8gMTAuMy42IEZsb2F0aW5nLCByZXBs
YWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBp
cyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgcmV0dXJu
IHJlcGxhY2VkV2lkdGgobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94KTsKK30KKworTGF5b3V0UG9p
bnQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFBvc2l0
aW9uKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQor
eworICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVt
ZW50cyAobGVmdC9yaWdodCkKKyAgICAvLyAxMC42LjQgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBu
b24tcmVwbGFjZWQgZWxlbWVudHMgKHRvcC9ib3R0b20pCisKKyAgICAvLyBBdCB0aGlzIHBvaW50
IHdlJ3ZlIHRoZSBzaXplIGNvbXB1dGVkLgorICAgIGF1dG8mIGRpc3BsYXlCb3ggPSAqbGF5b3V0
Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byBzaXpl
ID0gZGlzcGxheUJveC5zaXplKCk7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUo
KTsKKworICAgIC8vIDEwLjYuNCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBl
bGVtZW50cworICAgIGF1dG8gdG9wID0gc3R5bGUubG9naWNhbFRvcCgpOworICAgIGF1dG8gYm90
dG9tID0gc3R5bGUubG9naWNhbEJvdHRvbSgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpLT5oZWlnaHQoKTsKKworICAgIC8vICd0b3AnICsgJ21hcmdpbi10b3An
ICsgJ2JvcmRlci10b3Atd2lkdGgnICsgJ3BhZGRpbmctdG9wJyArICdoZWlnaHQnICsgJ3BhZGRp
bmctYm90dG9tJyArICdib3JkZXItYm90dG9tLXdpZHRoJyArICdtYXJnaW4tYm90dG9tJyArICdi
b3R0b20nCisgICAgLy8gPSBoZWlnaHQgb2YgY29udGFpbmluZyBibG9jaworICAgIC8vCisgICAg
Ly8gMS4gJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSAnYXV0bycgYW5kICdib3R0b20nIGlzIG5vdCAn
YXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAuNi43
LAorICAgIC8vICAgICBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFy
Z2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9wJworICAgIC8vIDIuICd0b3AnIGFu
ZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAnaGVpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHNl
dCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IKKyAg
ICAvLyAgICAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUg
Zm9yICdib3R0b20nCisgICAgLy8gMy4gJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycg
YW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUg
Y29udGVudCBwZXIgMTAuNi43LCBzZXQgJ2F1dG8nCisgICAgLy8gICAgIHZhbHVlcyBmb3IgJ21h
cmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90dG9t
JworICAgIC8vIDQuICd0b3AnIGlzICdhdXRvJywgJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSBu
b3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdt
YXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCisgICAgLy8gNS4gJ2hlaWdo
dCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gJ2F1
dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHNldCB0
byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKKyAgICAvLyA2LiAnYm90dG9tJyBpcyAnYXV0bycs
ICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVl
cyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29sdmUgZm9y
ICdib3R0b20nCisgICAgTGF5b3V0VW5pdCBjb21wdXRlZFRvcFZhbHVlOworICAgIGlmICh0b3Au
aXNBdXRvKCkgJiYgIWJvdHRvbS5pc0F1dG8oKSkgeworICAgICAgICAvLyAjMSAjNAorICAgICAg
ICBhdXRvIG1hcmdpblRvcCA9IGRpc3BsYXlCb3gubWFyZ2luVG9wKCk7CisgICAgICAgIGF1dG8g
bWFyZ2luQm90dG9tID0gZGlzcGxheUJveC5tYXJnaW5Cb3R0b20oKTsKKyAgICAKKyAgICAgICAg
YXV0byBwYWRkaW5nVG9wID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCk7CisgICAgICAgIGF1dG8g
cGFkZGluZ0JvdHRvbSA9IGRpc3BsYXlCb3gucGFkZGluZ0JvdHRvbSgpOworCisgICAgICAgIGF1
dG8gYm9yZGVyVG9wID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKTsKKyAgICAgICAgYXV0byBib3Jk
ZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgpOworCisgICAgICAgIGNvbXB1dGVk
VG9wVmFsdWUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAobWFyZ2luVG9wICsgYm9yZGVyVG9w
ICsgcGFkZGluZ1RvcCArIHNpemUuaGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90
dG9tICsgbWFyZ2luQm90dG9tICsgYm90dG9tLnZhbHVlKCkpOworICAgIH0gZWxzZSBpZiAodG9w
LmlzQXV0bygpICYmIGJvdHRvbS5pc0F1dG8oKSkgeworICAgICAgICAvLyAjMgorICAgICAgICAv
LyBBbHJlYWR5IGNvbXB1dGVkIGFzIHBhcnQgb2YgdGhlIGNvbXB1dGVTdGF0aWNQb3NpdGlvbigp
OworICAgICAgICBjb21wdXRlZFRvcFZhbHVlID0gZGlzcGxheUJveC50b3AoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyAjMyAjNSAjNiBoYXZlIHRvcCAhPSBhdXRvCisgICAgICAgIGNvbXB1
dGVkVG9wVmFsdWUgPSB2YWx1ZUZvckxlbmd0aCh0b3AsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7
CisgICAgfQorCisKKyAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVw
bGFjZWQgZWxlbWVudHMKKyAgICBhdXRvIGxlZnQgPSBzdHlsZS5sb2dpY2FsTGVmdCgpOworICAg
IGF1dG8gcmlnaHQgPSBzdHlsZS5sb2dpY2FsUmlnaHQoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1dpZHRoID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpLT53aWR0aCgpOworCisgICAgLy8gJ2xlZnQnICsgJ21hcmdp
bi1sZWZ0JyArICdib3JkZXItbGVmdC13aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcg
KyAncGFkZGluZy1yaWdodCcgKyAnYm9yZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQn
ICsgJ3JpZ2h0JworICAgIC8vID0gd2lkdGggb2YgY29udGFpbmluZyBibG9jaworICAgIC8vCisg
ICAgLy8gSWYgYWxsIHRocmVlIG9mICdsZWZ0JywgJ3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdh
dXRvJzogRmlyc3Qgc2V0IGFueSAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAn
bWFyZ2luLXJpZ2h0JyB0byAwLgorICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9w
ZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250
YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYworICAgIC8vIHBv
c2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQg
J3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUg
YmVsb3cuCisKKyAgICAvLyAxLiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3Jp
Z2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVu
IHNvbHZlIGZvciAnbGVmdCcKKyAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRv
JyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9w
ZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiAKKyAg
ICAvLyAgICBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbiwgb3RoZXJ3aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24u
CisgICAgLy8gICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwn
KSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAnbHRyJykuCisgICAgLy8gMy4gJ3dpZHRo
JyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdhdXRvJywgdGhlbiB0
aGUgd2lkdGggaXMgc2hyaW5rLXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKKyAgICAv
LyA0LiAnbGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8n
LCB0aGVuIHNvbHZlIGZvciAnbGVmdCcKKyAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xl
ZnQnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCisg
ICAgLy8gNi4gJ3JpZ2h0JyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgbm90ICdh
dXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JworICAgIExheW91dFVuaXQgY29tcHV0ZWRMZWZ0
VmFsdWU7CisgICAgaWYgKGxlZnQuaXNBdXRvKCkgJiYgIXJpZ2h0LmlzQXV0bygpKSB7CisgICAg
ICAgIC8vICMxICM0CisgICAgICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRpc3BsYXlCb3gubWFyZ2lu
TGVmdCgpOworICAgICAgICBhdXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxheUJveC5tYXJnaW5SaWdo
dCgpOworICAgIAorICAgICAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5n
TGVmdCgpOworICAgICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1Jp
Z2h0KCk7CisKKyAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0
KCk7CisgICAgICAgIGF1dG8gYm9yZGVyUmlnaHQgPSBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCk7
CisKKyAgICAgICAgY29tcHV0ZWRMZWZ0VmFsdWUgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICht
YXJnaW5MZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgc2l6ZS53aWR0aCgpICsgcGFk
ZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBtYXJnaW5SaWdodCArIHJpZ2h0LnZhbHVlKCkpOwor
ICAgIH0gZWxzZSBpZiAobGVmdC5pc0F1dG8oKSAmJiByaWdodC5pc0F1dG8oKSkgeworICAgICAg
ICAvLyAjMgorICAgICAgICAvLyBGSVhNRTogcnRsCisgICAgICAgIGNvbXB1dGVkTGVmdFZhbHVl
ID0gZGlzcGxheUJveC5sZWZ0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gIzMgIzUgIzYg
aGF2ZSBsZWZ0ICE9IGF1dG8KKyAgICAgICAgY29tcHV0ZWRMZWZ0VmFsdWUgPSB2YWx1ZUZvckxl
bmd0aChsZWZ0LCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgfQorCisgICAgcmV0dXJuIHsg
Y29tcHV0ZWRMZWZ0VmFsdWUsIGNvbXB1dGVkVG9wVmFsdWUgfTsKK30KKworTGF5b3V0UG9pbnQg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFBvc2l0aW9uKExh
eW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAg
IC8vIDEwLjYuNSBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzICh0b3Av
Ym90dG9tKQorICAgIC8vIDEwLjMuOCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVs
ZW1lbnRzIChsZWZ0L3JpZ2h0KQorCisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSd2ZSB0aGUgc2l6
ZSBjb21wdXRlZC4KKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gKmxheW91dENvbnRleHQuZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8gc2l6ZSA9IGRpc3BsYXlCb3gu
c2l6ZSgpOworICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisKKyAgICAvLyAx
MC42LjUgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisg
ICAgLy8gVGhpcyBzaXR1YXRpb24gaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgb25lLCBleGNl
cHQgdGhhdCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIGhlaWdodC4gVGhlIHNlcXVlbmNl
IG9mIHN1YnN0aXR1dGlvbnMgaXMgbm93OgorICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICdoZWln
aHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4gSWYgJ21h
cmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8nCisgICAg
Ly8gaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcnVsZXMgYmVsb3cuCisgICAg
Ly8KKyAgICAvLyAxLiBJZiBib3RoICd0b3AnIGFuZCAnYm90dG9tJyBoYXZlIHRoZSB2YWx1ZSAn
YXV0bycsIHJlcGxhY2UgJ3RvcCcgd2l0aCB0aGUgZWxlbWVudCdzIHN0YXRpYyBwb3NpdGlvbi4K
KyAgICAvLyAyLiBJZiAnYm90dG9tJyBpcyAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAn
bWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIHdpdGggJzAnLgorICAgIC8vIDMuIElmIGF0
IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc3Rp
bGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLgorICAgIC8vIDQuIElm
IGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgb25seSBvbmUgJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KKyAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20n
IGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKyAgICBhdXRvIHRvcCA9IHN0eWxlLmxvZ2ljYWxU
b3AoKTsKKyAgICBhdXRvIGJvdHRvbSA9IHN0eWxlLmxvZ2ljYWxCb3R0b20oKTsKKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxheW91
dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS0+aGVpZ2h0KCk7CisgICAgTGF5b3V0
VW5pdCBjb21wdXRlZFRvcFZhbHVlOworCisgICAgaWYgKCF0b3AuaXNBdXRvKCkpCisgICAgICAg
IGNvbXB1dGVkVG9wVmFsdWUgPSB2YWx1ZUZvckxlbmd0aCh0b3AsIGNvbnRhaW5pbmdCbG9ja0hl
aWdodCk7CisgICAgZWxzZSBpZiAoYm90dG9tLmlzQXV0bygpKSB7CisgICAgICAgIC8vICMxCisg
ICAgICAgIGNvbXB1dGVkVG9wVmFsdWUgPSBkaXNwbGF5Qm94LnRvcCgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vICM0CisgICAgICAgIGF1dG8gbWFyZ2luVG9wID0gZGlzcGxheUJveC5tYXJn
aW5Ub3AoKTsKKyAgICAgICAgYXV0byBtYXJnaW5Cb3R0b20gPSBkaXNwbGF5Qm94Lm1hcmdpbkJv
dHRvbSgpOworCisgICAgICAgIGF1dG8gcGFkZGluZ1RvcCA9IGRpc3BsYXlCb3gucGFkZGluZ1Rv
cCgpOworICAgICAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBkaXNwbGF5Qm94LnBhZGRpbmdCb3R0
b20oKTsKKworICAgICAgICBhdXRvIGJvcmRlclRvcCA9IGRpc3BsYXlCb3guYm9yZGVyVG9wKCk7
CisgICAgICAgIGF1dG8gYm9yZGVyQm90dG9tID0gZGlzcGxheUJveC5ib3JkZXJCb3R0b20oKTsK
KworICAgICAgICBjb21wdXRlZFRvcFZhbHVlID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKG1h
cmdpblRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBzaXplLmhlaWdodCgpICsgcGFkZGlu
Z0JvdHRvbSArIGJvcmRlckJvdHRvbSArIG1hcmdpbkJvdHRvbSArIGJvdHRvbS52YWx1ZSgpKTsK
KyAgICB9CisKKworICAgIC8vIDEwLjMuOCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2Vk
IGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyBJbiB0aGlzIGNhc2UsIHNlY3Rpb24gMTAuMy43IGFw
cGxpZXMgdXAgdGhyb3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uLCBi
dXQgdGhlIHJlc3Qgb2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2lu
ZyBydWxlczoKKyAgICAvLworICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0
ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiAKKyAgICAvLworICAgIC8v
IDEuIElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgc3BlY2lmaWVkIGFzICdh
dXRvJyBpdHMgdXNlZCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxvdy4KKyAg
ICAvLyAyLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3JpZ2h0JyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycs
IHRoZW4gaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlz
aGluZyB0aGUKKyAgICAvLyAgICBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAn
bHRyJywgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rp
b24nIGlzICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLgorICAgIC8v
IDMuIElmICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBv
biAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIHdpdGggJzAnLgorICAgIC8vIDQuIElm
IGF0IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUg
c3RpbGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFp
bnQKKyAgICAvLyAgICB0aGF0IHRoZSB0d28gbWFyZ2lucyBtdXN0IGdldCBlcXVhbCB2YWx1ZXMs
IHVubGVzcyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVu
IHRoZSBkaXJlY3Rpb24gb2YKKyAgICAvLyAgICB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRy
JyAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5k
IHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuCisgICAgLy8gNS4gSWYg
YXQgdGhpcyBwb2ludCB0aGVyZSBpcyBhbiAnYXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9u
IGZvciB0aGF0IHZhbHVlLgorICAgIC8vIDYuIElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBh
cmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgZWl0aGVyICdsZWZ0JyAo
aW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicKKyAgICAvLyAgICBwcm9wZXJ0eSBvZiB0aGUgY29udGFp
bmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAn
bHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorICAgIGF1dG8gbGVmdCA9IHN0eWxlLmxv
Z2ljYWxMZWZ0KCk7CisgICAgYXV0byByaWdodCA9IHN0eWxlLmxvZ2ljYWxSaWdodCgpOworICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPndpZHRoKCk7CisgICAgTGF5
b3V0VW5pdCBjb21wdXRlZExlZnRWYWx1ZTsKKworICAgIGlmICghbGVmdC5pc0F1dG8oKSkgICAK
KyAgICAgICAgY29tcHV0ZWRMZWZ0VmFsdWUgPSB2YWx1ZUZvckxlbmd0aChsZWZ0LCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CisgICAgZWxzZSBpZiAocmlnaHQuaXNBdXRvKCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IHRha2UgZGlyZWN0aW9uIGludG8gYWNjb3VudAorICAgICAgICBjb21wdXRlZExl
ZnRWYWx1ZSA9IGRpc3BsYXlCb3gubGVmdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICM1
CisgICAgICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRpc3BsYXlCb3gubWFyZ2luTGVmdCgpOworICAg
ICAgICBhdXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxheUJveC5tYXJnaW5SaWdodCgpOworICAgIAor
ICAgICAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpOworICAg
ICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCk7CisKKyAg
ICAgICAgYXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0KCk7CisgICAgICAg
IGF1dG8gYm9yZGVyUmlnaHQgPSBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCk7CisKKyAgICAgICAg
Y29tcHV0ZWRMZWZ0VmFsdWUgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChtYXJnaW5MZWZ0ICsg
Ym9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgc2l6ZS53aWR0aCgpICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyBtYXJnaW5SaWdodCArIHJpZ2h0LnZhbHVlKCkpOworICAgIH0KKworICAg
IHJldHVybiB7IGNvbXB1dGVkTGVmdFZhbHVlLCBjb21wdXRlZFRvcFZhbHVlIH07Cit9CisKK0xh
eW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpyZXBsYWNlZEhlaWdodChMYXlv
dXRDb250ZXh0JiwgY29uc3QgQm94JiBsYXlvdXRCb3gpCit7CisgICAgQVNTRVJUKChsYXlvdXRC
b3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlv
bmVkKCkgfHwgbGF5b3V0Qm94LmlzSW5GbG93KCkpICYmIGxheW91dEJveC5yZXBsYWNlZCgpKTsK
KyAgICAvLyAxMC42LjUgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cy4g
VGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJl
cGxhY2VkIGVsZW1lbnRzLgorCisgICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50
cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUt
YmxvY2snIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBs
YWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gMS4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcg
Ym90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGFsc28g
aGFzIGFuIGludHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBpbnRyaW5zaWMgaGVpZ2h0IGlzIHRo
ZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBp
ZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVu
dCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcg
aXM6CisgICAgLy8gICAgKHVzZWQgd2lkdGgpIC8gKGludHJpbnNpYyByYXRpbykKKyAgICAvLwor
ICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2Yg
J2F1dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhh
dCBpbnRyaW5zaWMgaGVpZ2h0IGlzIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnLgorICAgIC8v
CisgICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBv
ZiAnYXV0bycsIGJ1dCBub25lIG9mIHRoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBtZXQsIHRoZW4g
dGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgbXVzdCBiZSBzZXQgdG8KKyAgICAvLyAgICB0aGUg
aGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbywgaGFz
IGEgaGVpZ2h0IG5vdCBncmVhdGVyIHRoYW4gMTUwcHgsIGFuZCBoYXMgYSB3aWR0aCBub3QgZ3Jl
YXRlciB0aGFuIHRoZSBkZXZpY2Ugd2lkdGguCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
c3R5bGUoKTsKKyAgICBhdXRvIHdpZHRoID0gc3R5bGUubG9naWNhbFdpZHRoKCk7CisgICAgYXV0
byBoZWlnaHQgPSBzdHlsZS5sb2dpY2FsSGVpZ2h0KCk7CisKKyAgICBMYXlvdXRVbml0IGNvbXB1
dGVkSGVpZ2h0VmFsdWU7CisgICAgYXV0byByZXBsYWNlZCA9IGxheW91dEJveC5yZXBsYWNlZCgp
OworICAgIEFTU0VSVChyZXBsYWNlZCk7CisKKyAgICBpZiAoaGVpZ2h0LmlzQXV0bygpKSB7Cisg
ICAgICAgIGlmICh3aWR0aC5pc0F1dG8oKSAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljSGVpZ2h0
KCkpIHsKKyAgICAgICAgICAgIC8vICMxCisgICAgICAgICAgICBjb21wdXRlZEhlaWdodFZhbHVl
ID0gcmVwbGFjZWQtPmludHJpbnNpY0hlaWdodCgpOworICAgICAgICB9IGVsc2UgaWYgKHJlcGxh
Y2VkLT5oYXNJbnRyaW5zaWNSYXRpbygpKSB7CisgICAgICAgICAgICAvLyAjMgorICAgICAgICAg
ICAgY29tcHV0ZWRIZWlnaHRWYWx1ZSA9IHdpZHRoLnZhbHVlKCkgLyByZXBsYWNlZC0+aW50cmlu
c2ljUmF0aW8oKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXBsYWNlZC0+aGFzSW50cmluc2ljSGVp
Z2h0KCkpIHsKKyAgICAgICAgICAgIC8vICMzCisgICAgICAgICAgICBjb21wdXRlZEhlaWdodFZh
bHVlID0gcmVwbGFjZWQtPmludHJpbnNpY0hlaWdodCgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gIzQKKyAgICAgICAgICAgIGNvbXB1dGVkSGVpZ2h0VmFsdWUgPSAxNTA7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY29tcHV0ZWRIZWlnaHRWYWx1ZSA9IGhlaWdo
dC52YWx1ZSgpOworCisgICAgcmV0dXJuIGNvbXB1dGVkSGVpZ2h0VmFsdWU7Cit9CisKK0xheW91
dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpyZXBsYWNlZFdpZHRoKExheW91dENv
bnRleHQmLCBjb25zdCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBBU1NFUlQoKGxheW91dEJveC5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNJbkZsb3coKSkgJiYgbGF5b3V0Qm94LnJlcGxhY2VkKCkpOworCisg
ICAgLy8gMTAuMy40IEJsb2NrLWxldmVsLCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxv
dzogVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUg
cmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8gMTAuMy42IEZsb2F0aW5nLCByZXBsYWNlZCBlbGVt
ZW50czogVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxp
bmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRpb25l
ZCwgcmVwbGFjZWQgZWxlbWVudHM6IFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJt
aW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorCisgICAgLy8gMTAuMy4yIElu
bGluZSwgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdoZWlnaHQnIGFu
ZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxl
bWVudCBhbHNvIGhhcyBhbiBpbnRyaW5zaWMgd2lkdGgsIHRoZW4gdGhhdCBpbnRyaW5zaWMgd2lk
dGggaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJy4KKyAgICAvLworICAgIC8vIDIuIElmICdo
ZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFu
ZCB0aGUgZWxlbWVudCBoYXMgbm8gaW50cmluc2ljIHdpZHRoLCBidXQgZG9lcyBoYXZlIGFuIGlu
dHJpbnNpYyBoZWlnaHQgYW5kIGludHJpbnNpYyByYXRpbzsKKyAgICAvLyAgICBvciBpZiAnd2lk
dGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgJ2hlaWdodCcgaGFzIHNvbWUgb3Ro
ZXIgY29tcHV0ZWQgdmFsdWUsIGFuZCB0aGUgZWxlbWVudCBkb2VzIGhhdmUgYW4gaW50cmluc2lj
IHJhdGlvOworICAgIC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpczogKHVz
ZWQgaGVpZ2h0KSAqIChpbnRyaW5zaWMgcmF0aW8pCisgICAgLy8KKyAgICAvLyAzLiBJZiAnaGVp
Z2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQg
dGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyByYXRpbyBidXQgbm8gaW50cmluc2ljIGhlaWdo
dCBvciB3aWR0aCwKKyAgICAvLyAgICB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMg
dW5kZWZpbmVkIGluIENTUyAyLjIuIEhvd2V2ZXIsIGl0IGlzIHN1Z2dlc3RlZCB0aGF0LCBpZiB0
aGUgY29udGFpbmluZyBibG9jaydzIHdpZHRoIGRvZXMgbm90IGl0c2VsZiBkZXBlbmQgb24gdGhl
IHJlcGxhY2VkCisgICAgLy8gICAgZWxlbWVudCdzIHdpZHRoLCB0aGVuIHRoZSB1c2VkIHZhbHVl
IG9mICd3aWR0aCcgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBjb25zdHJhaW50IGVxdWF0aW9uIHVz
ZWQgZm9yIGJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cu
CisgICAgLy8KKyAgICAvLyA0LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQg
dmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyB3aWR0aCwg
dGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgor
ICAgIC8vCisgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZh
bHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwg
dGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGJlY29tZXMgMzAwcHguCisgICAgLy8gICAg
SWYgMzAwcHggaXMgdG9vIHdpZGUgdG8gZml0IHRoZSBkZXZpY2UsIFVBcyBzaG91bGQgdXNlIHRo
ZSB3aWR0aCBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8gYW5k
IGZpdHMgdGhlIGRldmljZSBpbnN0ZWFkLgorICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0
eWxlKCk7CisgICAgYXV0byB3aWR0aCA9IHN0eWxlLmxvZ2ljYWxXaWR0aCgpOworICAgIGF1dG8g
aGVpZ2h0ID0gc3R5bGUubG9naWNhbEhlaWdodCgpOworCisgICAgTGF5b3V0VW5pdCBjb21wdXRl
ZFdpZHRoVmFsdWU7CisgICAgYXV0byByZXBsYWNlZCA9IGxheW91dEJveC5yZXBsYWNlZCgpOwor
ICAgIEFTU0VSVChyZXBsYWNlZCk7CisKKyAgICBpZiAod2lkdGguaXNBdXRvKCkgJiYgaGVpZ2h0
LmlzQXV0bygpICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7CisgICAgICAgIC8v
ICMxCisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHJlcGxhY2VkLT5pbnRyaW5zaWNXaWR0
aCgpOworICAgIH0gZWxzZSBpZiAod2lkdGguaXNBdXRvKCkgJiYgKGhlaWdodC5pc0NhbGN1bGF0
ZWQoKSB8fCByZXBsYWNlZC0+aGFzSW50cmluc2ljSGVpZ2h0KCkpICYmIHJlcGxhY2VkLT5oYXNJ
bnRyaW5zaWNSYXRpbygpKSB7CisgICAgICAgIC8vICMyCisgICAgICAgIGF1dG8gdXNlZEhlaWdo
dCA9IGhlaWdodC5pc0NhbGN1bGF0ZWQoKSA/IExheW91dFVuaXQoaGVpZ2h0LnZhbHVlKCkpIDog
cmVwbGFjZWQtPmludHJpbnNpY0hlaWdodCgpOworICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUg
PSB1c2VkSGVpZ2h0ICogcmVwbGFjZWQtPmludHJpbnNpY1JhdGlvKCk7CisgICAgfSBlbHNlIGlm
ICh3aWR0aC5pc0F1dG8oKSAmJiBoZWlnaHQuaXNBdXRvKCkgJiYgcmVwbGFjZWQtPmhhc0ludHJp
bnNpY1JhdGlvKCkpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgLy8gRklYTUU6IHVuZGVmaW5l
ZCBidXQgc3VyZWx5IGRvYWJsZS4KKyAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQo
KTsKKyAgICB9IGVsc2UgaWYgKHdpZHRoLmlzQXV0bygpICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5z
aWNXaWR0aCgpKSB7CisgICAgICAgIC8vICM0CisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9
IHJlcGxhY2VkLT5pbnRyaW5zaWNXaWR0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vICM1
CisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IDMwMDsKKyAgICB9CisKKyAgICByZXR1cm4g
Y29tcHV0ZWRXaWR0aFZhbHVlOworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IGNkMDQ4ZmJiM2FiMGY5ZjcyM2EwZmM2Y2U1ZWFiM2UwMDQ0NTk0
NDAuLmJkZWM0M2Q1ODBkOWFjMTAyM2JlODk0ZjcyY2FiMWJlYzQ3MTQ2MTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMTMwLDY5ICsxMzAsMzYgQEAgUmVmPEZsb2F0aW5n
U3RhdGU+IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZU9yRmluZEZsb2F0aW5nU3RhdGUo
TGF5b3V0Q29udGUKIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGlj
UG9zaXRpb24oTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRC
b3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJveCkgY29uc3QKIHsKLSAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvQ1NTMjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRpbmcKLSAgICAvLyBJ
biBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgYm94ZXMgYXJlIGxhaWQgb3V0IG9uZSBhZnRl
ciB0aGUgb3RoZXIsIHZlcnRpY2FsbHksIGJlZ2lubmluZyBhdCB0aGUgdG9wIG9mIGEgY29udGFp
bmluZyBibG9jay4KLSAgICAvLyBUaGUgdmVydGljYWwgZGlzdGFuY2UgYmV0d2VlbiB0d28gc2li
bGluZyBib3hlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSAnbWFyZ2luJyBwcm9wZXJ0aWVzLgotICAg
IC8vIFZlcnRpY2FsIG1hcmdpbnMgYmV0d2VlbiBhZGphY2VudCBibG9jay1sZXZlbCBib3hlcyBp
biBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBjb2xsYXBzZS4KLSAgICAvLyBJbiBhIGJsb2Nr
IGZvcm1hdHRpbmcgY29udGV4dCwgZWFjaCBib3gncyBsZWZ0IG91dGVyIGVkZ2UgdG91Y2hlcyB0
aGUgbGVmdCBlZGdlIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIChmb3IgcmlnaHQtdG8tbGVmdCBm
b3JtYXR0aW5nLCByaWdodCBlZGdlcyB0b3VjaCkuCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tD
b250ZW50Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpLT5jb250ZW50Qm94KCk7Ci0gICAgLy8gU3RhcnQgZnJvbSB0
aGUgdG9wIG9mIHRoZSBjb250YWluZXIncyBjb250ZW50IGJveC4KLSAgICBhdXRvIHRvcCA9IGNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRCb3gueSgpOwotICAgIGF1dG8gbGVmdCA9IGNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRCb3gueCgpOwotICAgIGlmIChhdXRvKiBwcmV2aW91c0luRmxvd1NpYmxpbmcg
PSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpCi0gICAgICAgIHRvcCA9IGxheW91
dENvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKS0+
Ym90dG9tKCkgKyBtYXJnaW5Cb3R0b20oKnByZXZpb3VzSW5GbG93U2libGluZyk7Ci0gICAgTGF5
b3V0UG9pbnQgdG9wTGVmdCA9IHsgdG9wLCBsZWZ0IH07Ci0gICAgdG9wTGVmdC5tb3ZlQnkoeyBt
YXJnaW5MZWZ0KGxheW91dEJveCksIG1hcmdpblRvcChsYXlvdXRCb3gpIH0pOworICAgIGF1dG8g
dG9wTGVmdCA9IEdlb21ldHJ5OjpzdGF0aWNQb3NpdGlvbihsYXlvdXRDb250ZXh0LCBsYXlvdXRC
b3gpOwogICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh0b3BMZWZ0KTsKIH0KIAotdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93V2lkdGgoTGF5b3V0Q29udGV4dCYgbGF5
b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJv
eCkgY29uc3QKLXsKLSAgICBpZiAoIWxheW91dEJveC5yZXBsYWNlZCgpKSB7Ci0gICAgICAgIGNv
bXB1dGVJbkZsb3dOb25SZXBsYWNlZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCwgZGlz
cGxheUJveCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29tcHV0ZVJlcGxhY2VkV2lk
dGgobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKLX0KLQotdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93Tm9uUmVwbGFjZWRXaWR0aChMYXlvdXRD
b250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCwgRGlzcGxheTo6Qm94
JiBkaXNwbGF5Qm94KSBjb25zdAordm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
SW5GbG93SGVpZ2h0KExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGxh
eW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSk7Ci0KLSAgICAvLyAx
MC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwot
ICAgIC8vIFRoZSBmb2xsb3dpbmcgY29uc3RyYWludHMgbXVzdCBob2xkIGFtb25nIHRoZSB1c2Vk
IHZhbHVlcyBvZiB0aGUgb3RoZXIgcHJvcGVydGllczoKLSAgICAvLyAnbWFyZ2luLWxlZnQnICsg
J2JvcmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5n
LXJpZ2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsgJ21hcmdpbi1yaWdodCcgPSB3aWR0aCBv
ZiBjb250YWluaW5nIGJsb2NrCisgICAgTGF5b3V0VW5pdCBjb21wdXRlZEhlaWdodDsKIAotICAg
IC8vIElmICd3aWR0aCcgaXMgc2V0IHRvICdhdXRvJywgYW55IG90aGVyICdhdXRvJyB2YWx1ZXMg
YmVjb21lICcwJyBhbmQgJ3dpZHRoJyBmb2xsb3dzIGZyb20gdGhlIHJlc3VsdGluZyBlcXVhbGl0
eS4KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gY29udGFp
bmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSktPndpZHRoKCk7Ci0KLSAgICBMYXlvdXRVbml0IGNv
bXB1dGVkV2lkdGhWYWx1ZTsKLSAgICBhdXRvIHdpZHRoID0gc3R5bGUubG9naWNhbFdpZHRoKCk7
Ci0gICAgaWYgKHdpZHRoLmlzQXV0bygpKSB7Ci0gICAgICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRp
c3BsYXlCb3gubWFyZ2luTGVmdCgpOwotICAgICAgICBhdXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxh
eUJveC5tYXJnaW5SaWdodCgpOwotCi0gICAgICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBkaXNwbGF5
Qm94LnBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gZGlzcGxheUJv
eC5wYWRkaW5nUmlnaHQoKTsKLQotICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5Qm94
LmJvcmRlckxlZnQoKTsKLSAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3BsYXlCb3guYm9y
ZGVyUmlnaHQoKTsKLQotICAgICAgICBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb250YWluaW5nQmxv
Y2tXaWR0aCAtIChtYXJnaW5MZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBtYXJnaW5SaWdodCk7CisgICAgaWYgKGxheW91dEJveC5y
ZXBsYWNlZCgpKSB7CisgICAgICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMs
IGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJs
b2NrJworICAgICAgICAvLyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxv
YXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAgICAgY29tcHV0ZWRIZWlnaHQgPSBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnJlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxheW91
dEJveCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHZhbHVlRm9y
TGVuZ3RoKHdpZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgICAgIGNvbXB1dGVkSGVp
Z2h0ID0gR2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0KGxheW91dENvbnRleHQsIGxh
eW91dEJveCk7CiAKLSAgICBkaXNwbGF5Qm94LnNldFdpZHRoKGNvbXB1dGVkV2lkdGhWYWx1ZSk7
CisgICAgZGlzcGxheUJveC5zZXRIZWlnaHQoY29tcHV0ZWRIZWlnaHQpOwogfQogCi12b2lkIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbkZsb3dIZWlnaHQoTGF5b3V0Q29udGV4dCYg
bGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxh
eUJveCkgY29uc3QKK3ZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUluRmxvd1dp
ZHRoKExheW91dENvbnRleHQmIGxheW91dENvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBE
aXNwbGF5OjpCb3gmIGRpc3BsYXlCb3gpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXlvdXRCb3gucmVw
bGFjZWQoKSkgewotICAgICAgICBjb21wdXRlSW5GbG93Tm9uUmVwbGFjZWRIZWlnaHQobGF5b3V0
Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNwbGF5Qm94KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjb21wdXRlUmVwbGFjZWRIZWlnaHQobGF5b3V0Q29udGV4dCwgbGF5b3V0Qm94LCBkaXNw
bGF5Qm94KTsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVkV2lkdGg7CisKKyAgICBpZiAobGF5b3V0
Qm94LnJlcGxhY2VkKCkpIHsKKyAgICAgICAgLy8gMTAuMy40IEJsb2NrLWxldmVsLCByZXBsYWNl
ZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdworICAgICAgICAvLyBUaGUgdXNlZCB2YWx1ZSBvZiAn
d2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cworICAg
ICAgICBjb21wdXRlZFdpZHRoID0gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpyZXBsYWNl
ZFdpZHRoKGxheW91dENvbnRleHQsIGxheW91dEJveCk7CisgICAgfSBlbHNlCisgICAgICAgIGNv
bXB1dGVkV2lkdGggPSBHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0aChsYXlvdXRDb250
ZXh0LCBsYXlvdXRCb3gpOworCisgICAgZGlzcGxheUJveC5zZXRXaWR0aChjb21wdXRlZFdpZHRo
KTsKIH0KIAogTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjptYXJnaW5Ub3AoY29u
c3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CkBAIC0yMDUsNjMgKzE3Miw2IEBAIExheW91dFVuaXQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bWFyZ2luQm90dG9tKGNvbnN0IEJveCYgbGF5b3V0Qm94
KSBjb25zdAogICAgIHJldHVybiBCbG9ja01hcmdpbkNvbGxhcHNlOjptYXJnaW5Cb3R0b20obGF5
b3V0Qm94KTsKIH0KIAotdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW5GbG93
Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gsIERpc3BsYXk6OkJveCYgZGlzcGxheUJveCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYgIWxheW91dEJveC5yZXBsYWNlZCgpKTsKLQotICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1ZGV0Lmh0bWwKLSAgICAvLyBJZiAn
aGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBlbGVt
ZW50IGhhcyBhbnkgYmxvY2stbGV2ZWwgY2hpbGRyZW4gYW5kIHdoZXRoZXIgaXQgaGFzIHBhZGRp
bmcgb3IgYm9yZGVyczoKLSAgICAvLyBUaGUgZWxlbWVudCdzIGhlaWdodCBpcyB0aGUgZGlzdGFu
Y2UgZnJvbSBpdHMgdG9wIGNvbnRlbnQgZWRnZSB0byB0aGUgZmlyc3QgYXBwbGljYWJsZSBvZiB0
aGUgZm9sbG93aW5nOgotICAgIC8vIDEuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgbGFzdCBsaW5l
IGJveCwgaWYgdGhlIGJveCBlc3RhYmxpc2hlcyBhIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQg
d2l0aCBvbmUgb3IgbW9yZSBsaW5lcwotICAgIC8vIDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUg
Ym90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1hcmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNo
aWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFyZ2luCi0gICAgLy8gICAgZG9lcyBub3QgY29s
bGFwc2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KLSAgICAvLyAzLiB0aGUgYm90
dG9tIGJvcmRlciBlZGdlIG9mIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgd2hvc2UgdG9wIG1hcmdp
biBkb2Vzbid0IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2luCi0gICAg
Ly8gNC4gemVybywgb3RoZXJ3aXNlCi0gICAgLy8gT25seSBjaGlsZHJlbiBpbiB0aGUgbm9ybWFs
IGZsb3cgYXJlIHRha2VuIGludG8gYWNjb3VudCAoaS5lLiwgZmxvYXRpbmcgYm94ZXMgYW5kIGFi
c29sdXRlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgaWdub3JlZCwKLSAgICAvLyBhbmQgcmVsYXRp
dmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVkIHdpdGhvdXQgdGhlaXIgb2Zmc2V0
KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFuIGFub255bW91cyBibG9jayBib3gu
Ci0gICAgaWYgKCFsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IE9ubHkgZml4ZWQgdmFsdWVzIHlldC4KLSAgICAgICAgZGlzcGxh
eUJveC5zZXRIZWlnaHQobGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbEhlaWdodCgpLnZhbHVlKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFpczxDb250YWluZXI+KGxheW91
dEJveCkgfHwgIWRvd25jYXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KS5oYXNJbkZsb3dDaGlsZCgp
KSB7Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0SGVpZ2h0KDApOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBp
ZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9u
ZSBvciBtb3JlIGxpbmVzCi0gICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1h
dHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgLy8gaGVpZ2h0ID0gbGFzdExpbmVCb3goKS5ib3R0
b20oKTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRIZWlnaHQoMCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyAyLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2li
bHkgY29sbGFwc2VkKSBtYXJnaW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNo
aWxkJ3MgYm90dG9tIG1hcmdpbi4uLgotICAgIGF1dG8qIGxhc3RJbkZsb3dDaGlsZCA9IGRvd25j
YXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KS5sYXN0SW5GbG93Q2hpbGQoKTsKLSAgICBBU1NFUlQo
bGFzdEluRmxvd0NoaWxkKTsKLSAgICBpZiAoIUJsb2NrTWFyZ2luQ29sbGFwc2U6OmlzTWFyZ2lu
Qm90dG9tQ29sbGFwc2VkV2l0aFBhcmVudCgqbGFzdEluRmxvd0NoaWxkKSkgewotICAgICAgICBh
dXRvKiBsYXN0SW5GbG93RGlzcGxheUJveCA9IGxheW91dENvbnRleHQuZGlzcGxheUJveEZvckxh
eW91dEJveCgqbGFzdEluRmxvd0NoaWxkKTsKLSAgICAgICAgQVNTRVJUKGxhc3RJbkZsb3dEaXNw
bGF5Qm94KTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRIZWlnaHQobGFzdEluRmxvd0Rpc3BsYXlC
b3gtPmJvdHRvbSgpICsgbGFzdEluRmxvd0Rpc3BsYXlCb3gtPm1hcmdpbkJvdHRvbSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDMuIHRoZSBib3R0b20gYm9yZGVyIGVkZ2Ug
b2YgdGhlIGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNuJ3QgY29sbGFw
c2Ugd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KLSAgICBhdXRvKiBpbkZsb3dDaGls
ZCA9IGxhc3RJbkZsb3dDaGlsZDsKLSAgICB3aGlsZSAoaW5GbG93Q2hpbGQgJiYgQmxvY2tNYXJn
aW5Db2xsYXBzZTo6aXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFyZW50TWFyZ2luQm90dG9tKCpp
bkZsb3dDaGlsZCkpCi0gICAgICAgIGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQtPnByZXZpb3Vz
SW5GbG93U2libGluZygpOwotICAgIGlmIChpbkZsb3dDaGlsZCkgewotICAgICAgICBhdXRvKiBp
bkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpp
bkZsb3dDaGlsZCk7Ci0gICAgICAgIEFTU0VSVChpbkZsb3dEaXNwbGF5Qm94KTsKLSAgICAgICAg
ZGlzcGxheUJveC5zZXRIZWlnaHQoaW5GbG93RGlzcGxheUJveC0+dG9wKCkgKyBpbkZsb3dEaXNw
bGF5Qm94LT5ib3JkZXJCb3goKS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKLSAgICBkaXNwbGF5Qm94LnNldEhlaWdodCgwKTsK
LX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3Jt
YXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9i
bG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDA0MTlmNmIzOTRm
ZWE5MmY1OGM3MThkY2U1ZmU4MThlZDg1NjE3OGMuLmZlZDFhNjAxYTliZWZjOTVhOWMyODIyMDJj
MjdiOTVhY2I1Njc3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zv
cm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0yOCwxMSAr
MjgsMTIgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1
ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBMYXlv
dXRVbml0OworCiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQmxvY2tGb3JtYXR0aW5nU3Rh
dGU7CkBAIC01MSwxOCArNTIsMjIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY29t
cHV0ZVN0YXRpY1Bvc2l0aW9uKExheW91dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5OjpC
b3gmKSBjb25zdCBvdmVycmlkZTsKLQogICAgIHZvaWQgY29tcHV0ZUluRmxvd1dpZHRoKExheW91
dENvbnRleHQmLCBjb25zdCBCb3gmLCBEaXNwbGF5OjpCb3gmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2b2lkIGNvbXB1dGVJbkZsb3dOb25SZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmLCBjb25z
dCBCb3gmLCBEaXNwbGF5OjpCb3gmKSBjb25zdDsKLQogICAgIHZvaWQgY29tcHV0ZUluRmxvd0hl
aWdodChMYXlvdXRDb250ZXh0JiwgY29uc3QgQm94JiwgRGlzcGxheTo6Qm94JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjb21wdXRlSW5GbG93Tm9uUmVwbGFjZWRIZWlnaHQoTGF5b3V0Q29u
dGV4dCYsIGNvbnN0IEJveCYsIERpc3BsYXk6OkJveCYpIGNvbnN0OwogCiAgICAgTGF5b3V0VW5p
dCBtYXJnaW5Ub3AoY29uc3QgQm94JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBt
YXJnaW5Cb3R0b20oY29uc3QgQm94JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgLy8gVGhp
cyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGJveGVzIHBhcnRp
Y2lwYXRpbmcgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCisgICAgY2xhc3MgR2VvbWV0
cnkgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIExheW91dFVuaXQgaW5GbG93Tm9uUmVw
bGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgICAgICBzdGF0aWMg
TGF5b3V0VW5pdCBpbkZsb3dOb25SZXBsYWNlZFdpZHRoKExheW91dENvbnRleHQmLCBjb25zdCBC
b3gmKTsKKworICAgICAgICBzdGF0aWMgTGF5b3V0UG9pbnQgc3RhdGljUG9zaXRpb24oTGF5b3V0
Q29udGV4dCYsIGNvbnN0IEJveCYpOworICAgIH07CiB9OwogCiB9CiB9CiAjZW5kaWYKLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZm
NGNmZDFkOTRmYzU3NTA0ZmIzYmJlOTRhOTc3YzI0YWU5NjM0YjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIgorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5n
Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKwor
TGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVw
bGFjZWRIZWlnaHQoTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgQm94JiBsYXlv
dXRCb3gpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpICYmICFsYXlvdXRCb3gu
cmVwbGFjZWQoKSk7CisKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjIvdmlzdWRl
dC5odG1sCisgICAgLy8gSWYgJ2hlaWdodCcgaXMgJ2F1dG8nLCB0aGUgaGVpZ2h0IGRlcGVuZHMg
b24gd2hldGhlciB0aGUgZWxlbWVudCBoYXMgYW55IGJsb2NrLWxldmVsIGNoaWxkcmVuIGFuZCB3
aGV0aGVyIGl0IGhhcyBwYWRkaW5nIG9yIGJvcmRlcnM6CisgICAgLy8gVGhlIGVsZW1lbnQncyBo
ZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRvcCBjb250ZW50IGVkZ2UgdG8gdGhlIGZp
cnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLyAxLiB0aGUgYm90dG9tIGVk
Z2Ugb2YgdGhlIGxhc3QgbGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMgYSBpbmxpbmUg
Zm9ybWF0dGluZyBjb250ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKKyAgICAvLyAyLiB0aGUg
Ym90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJnaW4gb2Yg
aXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdpbgorICAg
IC8vICAgIGRvZXMgbm90IGNvbGxhcHNlIHdpdGggdGhlIGVsZW1lbnQncyBib3R0b20gbWFyZ2lu
CisgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0aGUgbGFzdCBpbi1mbG93IGNo
aWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50J3Mg
Ym90dG9tIG1hcmdpbgorICAgIC8vIDQuIHplcm8sIG90aGVyd2lzZQorICAgIC8vIE9ubHkgY2hp
bGRyZW4gaW4gdGhlIG5vcm1hbCBmbG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGkuZS4sIGZs
b2F0aW5nIGJveGVzIGFuZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGlnbm9yZWQs
CisgICAgLy8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lkZXJlZCB3
aXRob3V0IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBiZSBhbiBh
bm9ueW1vdXMgYmxvY2sgYm94LgorICAgIGlmICghbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbEhl
aWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGZpeGVkIHZhbHVlcyB5
ZXQuCisgICAgICAgIHJldHVybiBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkudmFs
dWUoKTsKKyAgICB9CisKKyAgICBpZiAoIWlzPENvbnRhaW5lcj4obGF5b3V0Qm94KSB8fCAhZG93
bmNhc3Q8Q29udGFpbmVyPihsYXlvdXRCb3gpLmhhc0luRmxvd0NoaWxkKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94
LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRo
IG9uZSBvciBtb3JlIGxpbmVzCisgICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZv
cm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgLy8gaGVpZ2h0ID0gbGFzdExpbmVCb3goKS5i
b3R0b20oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gMi4gdGhlIGJvdHRv
bSBlZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2luIG9mIGl0cyBs
YXN0IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4uLi4KKyAgICBh
dXRvKiBsYXN0SW5GbG93Q2hpbGQgPSBkb3duY2FzdDxDb250YWluZXI+KGxheW91dEJveCkubGFz
dEluRmxvd0NoaWxkKCk7CisgICAgQVNTRVJUKGxhc3RJbkZsb3dDaGlsZCk7CisgICAgaWYgKCFC
bG9ja01hcmdpbkNvbGxhcHNlOjppc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhQYXJlbnQoKmxh
c3RJbkZsb3dDaGlsZCkpIHsKKyAgICAgICAgYXV0byogbGFzdEluRmxvd0Rpc3BsYXlCb3ggPSBs
YXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxhc3RJbkZsb3dDaGlsZCk7Cisg
ICAgICAgIEFTU0VSVChsYXN0SW5GbG93RGlzcGxheUJveCk7CisgICAgICAgIHJldHVybiBsYXN0
SW5GbG93RGlzcGxheUJveC0+Ym90dG9tKCkgKyBsYXN0SW5GbG93RGlzcGxheUJveC0+bWFyZ2lu
Qm90dG9tKCk7CisgICAgfQorCisgICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0
aGUgbGFzdCBpbi1mbG93IGNoaWxkIHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3
aXRoIHRoZSBlbGVtZW50J3MgYm90dG9tIG1hcmdpbgorICAgIGF1dG8qIGluRmxvd0NoaWxkID0g
bGFzdEluRmxvd0NoaWxkOworICAgIHdoaWxlIChpbkZsb3dDaGlsZCAmJiBCbG9ja01hcmdpbkNv
bGxhcHNlOjppc01hcmdpblRvcENvbGxhcHNlZFdpdGhQYXJlbnRNYXJnaW5Cb3R0b20oKmluRmxv
d0NoaWxkKSkKKyAgICAgICAgaW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJldmlvdXNJbkZs
b3dTaWJsaW5nKCk7CisgICAgaWYgKGluRmxvd0NoaWxkKSB7CisgICAgICAgIGF1dG8qIGluRmxv
d0Rpc3BsYXlCb3ggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmluRmxv
d0NoaWxkKTsKKyAgICAgICAgQVNTRVJUKGluRmxvd0Rpc3BsYXlCb3gpOworICAgICAgICByZXR1
cm4gaW5GbG93RGlzcGxheUJveC0+dG9wKCkgKyBpbkZsb3dEaXNwbGF5Qm94LT5ib3JkZXJCb3go
KS5oZWlnaHQoKTsKKyAgICB9CisKKyAgICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKKyAgICByZXR1
cm4gMDsKK30KKworTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5GbG93Tm9uUmVwbGFjZWRXaWR0aChMYXlvdXRDb250ZXh0JiBsYXlvdXRDb250ZXh0LCBjb25z
dCBCb3gmIGxheW91dEJveCkKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgJiYg
IWxheW91dEJveC5yZXBsYWNlZCgpKTsKKworICAgIC8vIDEwLjMuMyBCbG9jay1sZXZlbCwgbm9u
LXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CisgICAgLy8gVGhlIGZvbGxvd2luZyBj
b25zdHJhaW50cyBtdXN0IGhvbGQgYW1vbmcgdGhlIHVzZWQgdmFsdWVzIG9mIHRoZSBvdGhlciBw
cm9wZXJ0aWVzOgorICAgIC8vICdtYXJnaW4tbGVmdCcgKyAnYm9yZGVyLWxlZnQtd2lkdGgnICsg
J3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsgJ2JvcmRlci1yaWdo
dC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyA9IHdpZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKKwor
ICAgIC8vIElmICd3aWR0aCcgaXMgc2V0IHRvICdhdXRvJywgYW55IG90aGVyICdhdXRvJyB2YWx1
ZXMgYmVjb21lICcwJyBhbmQgJ3dpZHRoJyBmb2xsb3dzIGZyb20gdGhlIHJlc3VsdGluZyBlcXVh
bGl0eS4KKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSktPndpZHRoKCk7CisKKyAgICBMYXlvdXRVbml0
IGNvbXB1dGVkV2lkdGhWYWx1ZTsKKyAgICBhdXRvIHdpZHRoID0gc3R5bGUubG9naWNhbFdpZHRo
KCk7CisgICAgaWYgKHdpZHRoLmlzQXV0bygpKSB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3gg
PSAqbGF5b3V0Q29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAg
ICAgIGF1dG8gbWFyZ2luTGVmdCA9IGRpc3BsYXlCb3gubWFyZ2luTGVmdCgpOworICAgICAgICBh
dXRvIG1hcmdpblJpZ2h0ID0gZGlzcGxheUJveC5tYXJnaW5SaWdodCgpOworCisgICAgICAgIGF1
dG8gcGFkZGluZ0xlZnQgPSBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCk7CisgICAgICAgIGF1dG8g
cGFkZGluZ1JpZ2h0ID0gZGlzcGxheUJveC5wYWRkaW5nUmlnaHQoKTsKKworICAgICAgICBhdXRv
IGJvcmRlckxlZnQgPSBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKTsKKyAgICAgICAgYXV0byBib3Jk
ZXJSaWdodCA9IGRpc3BsYXlCb3guYm9yZGVyUmlnaHQoKTsKKworICAgICAgICBjb21wdXRlZFdp
ZHRoVmFsdWUgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtIChtYXJnaW5MZWZ0ICsgYm9yZGVyTGVm
dCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyBtYXJnaW5SaWdo
dCk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXB1dGVkV2lkdGhWYWx1ZSA9IHZhbHVlRm9yTGVu
Z3RoKHdpZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisKKyAgICByZXR1cm4gY29tcHV0ZWRX
aWR0aFZhbHVlOworfQorCitMYXlvdXRQb2ludCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6c3RhdGljUG9zaXRpb24oTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3Qg
Qm94JiBsYXlvdXRCb3gpCit7CisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zp
c3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCisgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCB2ZXJ0aWNh
bGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCisgICAgLy8g
VGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJt
aW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGllcy4KKyAgICAvLyBWZXJ0aWNhbCBtYXJnaW5z
IGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHQgY29sbGFwc2UuCisgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQs
IGVhY2ggYm94J3MgbGVmdCBvdXRlciBlZGdlIHRvdWNoZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUg
Y29udGFpbmluZyBibG9jayAoZm9yIHJpZ2h0LXRvLWxlZnQgZm9ybWF0dGluZywgcmlnaHQgZWRn
ZXMgdG91Y2gpLgorICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrQ29udGVudEJveCA9IGxheW91dENv
bnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS0+Y29udGVudEJveCgpOworICAgIC8vIFN0YXJ0IGZyb20gdGhlIHRvcCBvZiB0aGUgY29udGFp
bmVyJ3MgY29udGVudCBib3guCisgICAgYXV0byB0b3AgPSBjb250YWluaW5nQmxvY2tDb250ZW50
Qm94LnkoKTsKKyAgICBhdXRvIGxlZnQgPSBjb250YWluaW5nQmxvY2tDb250ZW50Qm94LngoKTsK
KyAgICBpZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3Vz
SW5GbG93U2libGluZygpKSB7CisgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93RGlzcGxheUJv
eCA9ICpsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKnByZXZpb3VzSW5GbG93
U2libGluZyk7CisgICAgICAgIHRvcCA9IHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20o
KSArIHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5tYXJnaW5Cb3R0b20oKTsKKyAgICB9CisgICAg
YXV0byYgZGlzcGxheUJveCA9ICpsYXlvdXRDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKKyAgICBMYXlvdXRQb2ludCB0b3BMZWZ0ID0geyB0b3AsIGxlZnQgfTsKKyAg
ICB0b3BMZWZ0Lm1vdmVCeSh7IGRpc3BsYXlCb3gubWFyZ2luTGVmdCgpLCBkaXNwbGF5Qm94Lm1h
cmdpblRvcCgpIH0pOworICAgIHJldHVybiB0b3BMZWZ0OworfQorCit9Cit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3gu
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5Qm94LmgKaW5kZXgg
YjE3OGJkNDgxOGIzYjA2YzVjOTZkZmM2NjEyNWFkNDZhODM4MTM2Ny4uYWZlZGZiNTI3MTMwM2Vm
ODcwY2U1YmNiODkzOGZjNmE3ZDU4MGY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheUJveC5oCkBAIC00OCw5ICs0OCw5IEBAIG5hbWVzcGFjZSBEaXNw
bGF5IHsKIGNsYXNzIEJveCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChCb3gpOwogcHVi
bGljOgotICAgIGZyaWVuZCBjbGFzcyBMYXlvdXQ6OkxheW91dENvbnRleHQ7Ci0gICAgZnJpZW5k
IGNsYXNzIExheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgZnJpZW5kIGNsYXNzIExheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDsKKyAgICBmcmllbmQgY2xhc3MgTGF5b3V0OjpMYXlvdXRDb250ZXh0Owog
CiAgICAgfkJveCgpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>