<?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>226150</bug_id>
          
          <creation_ts>2021-05-22 21:15:45 -0700</creation_ts>
          <short_desc>[LFC] Add support for geometry/quirks virtual functions</short_desc>
          <delta_ts>2021-05-24 17:23:13 -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>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762882</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-22 21:15:45 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762883</commentid>
    <comment_count>1</comment_count>
      <attachid>429452</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-22 21:18:07 -0700</bug_when>
    <thetext>Created attachment 429452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762906</commentid>
    <comment_count>2</comment_count>
      <attachid>429461</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-23 07:06:27 -0700</bug_when>
    <thetext>Created attachment 429461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763172</commentid>
    <comment_count>3</comment_count>
      <attachid>429461</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-05-24 10:08:29 -0700</bug_when>
    <thetext>Comment on attachment 429461
Patch

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

&gt; Source/WebCore/layout/formattingContexts/block/BlockFormattingContext.h:59
&gt; +    const FormattingGeometry&amp; formattingGeometry() const final { return m_blockFormattingGeometry; }
&gt; +    const FormattingQuirks&amp; formattingQuirks() const final { return m_blockFormattingQuirks; }

I think you could just return BlockFormattingFoo&amp; here and remove the specialised versions. You can override with more narrow type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763222</commentid>
    <comment_count>4</comment_count>
      <attachid>429555</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-24 12:59:16 -0700</bug_when>
    <thetext>Created attachment 429555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763281</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-24 15:30:17 -0700</bug_when>
    <thetext>Committed r277972 (238094@main): &lt;https://commits.webkit.org/238094@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429555.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763282</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-24 15:31:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/78422093&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429452</attachid>
            <date>2021-05-22 21:18:07 -0700</date>
            <delta_ts>2021-05-23 07:06:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226150-20210522211806.patch</filename>
            <type>text/plain</type>
            <size>88466</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcyMDg4YzEzYTY1N2Zi
ZTYwNjZkYjJmODRlNmIwZTI2NmZhZGUxMC4uNDBiMWJkM2E3NTQwNGE1ZTM0NTgyZDkyMmNlMjc2
OTNjNjgxZDA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAyMS0wNS0yMiAgQWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQg
Zm9yIGdlb21ldHJ5L3F1aXJrcyB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBlbmFibGVzIHVzIHRvIG92ZXJyaWRl
IHF1aXJrcy9nZW9tZXRyeSBmdW5jdGlvbmFsaXR5IGF0IHRoZSBzdWJjbGFzc2VzLgorCisgICAg
ICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZG
bG93SG9yaXpvbnRhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dE91dE9mRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6cXVpcmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0
VmFsdWUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdHZW9t
ZXRyeTo6aXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdHZW9tZXRyeTo6aXNJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnk6Omlz
RmxleEZvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdHZW9tZXRyeTo6aXNUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ1F1aXJrczo6aGVpZ2h0VmFsdWVP
Zk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQgY29uc3QpOgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nUXVpcmtzOjppc0Jsb2NrRm9ybWF0dGluZ1F1aXJr
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdRdWlya3M6Omlz
SW5saW5lRm9ybWF0dGluZ1F1aXJrcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdRdWlya3M6OmlzVGFibGVGb3JtYXR0aW5nUXVpcmtzIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25l
ZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpvbnRhbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhB
bmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2Vv
bWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpibG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmJsb2NrRm9ybWF0dGluZ1F1aXJrcyBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hl
ZEluRmxvd0hlaWdodElmQXBwbGljYWJsZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaDoKKyAgICAgICAgKiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRhYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFu
ZFBhZGRpbmdGb3JUYWJsZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3Jh
cHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxl
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94KToKKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBw
ZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVp
cmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyUXVpcmtzOjpv
dmVycmlkZGVuVGFibGVIZWlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0
dGluZ0NvbnRleHQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZv
cm1hdHRpbmdHZW9tZXRyeS5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dEluRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZVdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5l
Qm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6bGluZUJveEZvckxpbmVD
b250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpsaW5lQm94Rm9yTGlu
ZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oOgorICAgICAgICAqIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuaDoKKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KToKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yUm93cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dENlbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaDoKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVM
YXlvdXQ6OmRpc3RyaWJ1dGVkVmVydGljYWxTcGFjZSk6CisgICAgICAgICogbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnRCdWlsZGVyOjpjcmVh
dGVEaXNwbGF5Tm9uUm9vdElubGluZUJveGVzIGNvbnN0KToKKwogMjAyMS0wNS0yMiAgQWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gRm9ybWF0dGluZ0dlb21l
dHJ5IGZ1bmN0aW9ucyBzaG91bGQgYWxsIGJlIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCmluZGV4IDAxODE4MmYyOGFlYmY2YmZkNDg4NTdlMWQzYWQxMjM1N2MyNmFlNTguLmVhMzA4
NDMxZmE0MTNjNzE4OTQzOGZkODM4MWFjZWU4NzY3MzlmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCkBAIC03NSwxOCArNzUsMTggQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwKIHsK
ICAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKICAgICBhdXRv
IGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZFdpZHRoKSB7Ci0gICAgICAg
IHJldHVybiBnZW9tZXRyeSgpLm91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShsYXlvdXRCb3gs
IGNvbnN0cmFpbnRzLmhvcml6b250YWwsIGNvbnN0cmFpbnRzLnZlcnRpY2FsLCB7IHVzZWRXaWR0
aCwgeyB9IH0pOworICAgICAgICByZXR1cm4gZm9ybWF0dGluZ0dlb21ldHJ5KCkub3V0T2ZGbG93
SG9yaXpvbnRhbEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29u
c3RyYWludHMudmVydGljYWwsIHsgdXNlZFdpZHRoLCB7IH0gfSk7CiAgICAgfTsKIAogICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBjb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2ljYWxX
aWR0aDsKICAgICBhdXRvIGhvcml6b250YWxHZW9tZXRyeSA9IGNvbXB1dGUoeyB9KTsKLSAgICBp
ZiAoYXV0byBtYXhXaWR0aCA9IGdlb21ldHJ5KCkuY29tcHV0ZWRNYXhXaWR0aChsYXlvdXRCb3gs
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSkgeworICAgIGlmIChhdXRvIG1heFdpZHRoID0gZm9ybWF0
dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRNYXhXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKSkgewogICAgICAgICBhdXRvIG1heEhvcml6b250YWxHZW9tZXRyeSA9IGNvbXB1dGUo
bWF4V2lkdGgpOwogICAgICAgICBpZiAoaG9yaXpvbnRhbEdlb21ldHJ5LmNvbnRlbnRXaWR0aEFu
ZE1hcmdpbi5jb250ZW50V2lkdGggPiBtYXhIb3Jpem9udGFsR2VvbWV0cnkuY29udGVudFdpZHRo
QW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKICAgICAgICAgICAgIGhvcml6b250YWxHZW9tZXRyeSA9
IG1heEhvcml6b250YWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBtaW5XaWR0aCA9
IGdlb21ldHJ5KCkuY29tcHV0ZWRNaW5XaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKSkgeworICAgIGlmIChhdXRvIG1pbldpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29t
cHV0ZWRNaW5XaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSkgewogICAgICAg
ICBhdXRvIG1pbkhvcml6b250YWxHZW9tZXRyeSA9IGNvbXB1dGUobWluV2lkdGgpOwogICAgICAg
ICBpZiAoaG9yaXpvbnRhbEdlb21ldHJ5LmNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lk
dGggPCBtaW5Ib3Jpem9udGFsR2VvbWV0cnkuY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRX
aWR0aCkKICAgICAgICAgICAgIGhvcml6b250YWxHZW9tZXRyeSA9IG1pbkhvcml6b250YWxHZW9t
ZXRyeTsKQEAgLTEwMywxOCArMTAzLDE4IEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjCiB7CiAg
ICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CiAgICAgYXV0byBj
b21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRIZWlnaHQpIHsKLSAgICAgICAg
cmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShsYXlvdXRCb3gsIGNv
bnN0cmFpbnRzLmhvcml6b250YWwsIGNvbnN0cmFpbnRzLnZlcnRpY2FsLCB7IHVzZWRIZWlnaHQg
fSk7CisgICAgICAgIHJldHVybiBmb3JtYXR0aW5nR2VvbWV0cnkoKS5vdXRPZkZsb3dWZXJ0aWNh
bEdlb21ldHJ5KGxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgY29uc3RyYWludHMu
dmVydGljYWwsIHsgdXNlZEhlaWdodCB9KTsKICAgICB9OwogCiAgICAgYXV0byBjb250YWluaW5n
QmxvY2tIZWlnaHQgPSAqY29uc3RyYWludHMudmVydGljYWwubG9naWNhbEhlaWdodDsKICAgICBh
dXRvIHZlcnRpY2FsR2VvbWV0cnkgPSBjb21wdXRlKHsgfSk7Ci0gICAgaWYgKGF1dG8gbWF4SGVp
Z2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdC
bG9ja0hlaWdodCkpIHsKKyAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBmb3JtYXR0aW5nR2VvbWV0
cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCkp
IHsKICAgICAgICAgYXV0byBtYXhWZXJ0aWNhbEdlb21ldHJ5ID0gY29tcHV0ZShtYXhIZWlnaHQp
OwogICAgICAgICBpZiAodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNv
bnRlbnRIZWlnaHQgPiBtYXhWZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWlnaHRBbmRNYXJnaW4u
Y29udGVudEhlaWdodCkKICAgICAgICAgICAgIHZlcnRpY2FsR2VvbWV0cnkgPSBtYXhWZXJ0aWNh
bEdlb21ldHJ5OwogICAgIH0KIAotICAgIGlmIChhdXRvIG1pbkhlaWdodCA9IGdlb21ldHJ5KCku
Y29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tIZWlnaHQpKSB7Cisg
ICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRNaW5I
ZWlnaHQobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tIZWlnaHQpKSB7CiAgICAgICAgIGF1dG8g
bWluVmVydGljYWxHZW9tZXRyeSA9IGNvbXB1dGUobWluSGVpZ2h0KTsKICAgICAgICAgaWYgKHZl
cnRpY2FsR2VvbWV0cnkuY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDwgbWlu
VmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpCiAg
ICAgICAgICAgICB2ZXJ0aWNhbEdlb21ldHJ5ID0gbWluVmVydGljYWxHZW9tZXRyeTsKQEAgLTEz
MSw4ICsxMzEsOCBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVy
dGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwgYwogdm9pZCBGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnQpCiB7CiAgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gp
OwotICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGxh
eW91dEJveCkpOwotICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRl
ZFBhZGRpbmcobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludC5sb2dpY2FsV2lkdGgpKTsK
KyAgICBib3hHZW9tZXRyeS5zZXRCb3JkZXIoZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRC
b3JkZXIobGF5b3V0Qm94KSk7CisgICAgYm94R2VvbWV0cnkuc2V0UGFkZGluZyhmb3JtYXR0aW5n
R2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dC5sb2dpY2FsV2lkdGgpKTsKIH0KIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0
T2ZGbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0
IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCYgY29uc3RyYWludHMpCkBAIC0xNDMsNyAr
MTQzLDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29udGVudChJ
bnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uU3QKIAogICAgIGF1dG8gY29uc3RyYWludHNG
b3JMYXlvdXRCb3ggPSBbJl0gKGNvbnN0IGF1dG8mIG91dE9mRmxvd0JveCkgewogICAgICAgICBh
dXRvJiBjb250YWluaW5nQmxvY2sgPSBvdXRPZkZsb3dCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgICAgIHJldHVybiAmY29udGFpbmluZ0Jsb2NrID09ICZyb290KCkgPyBjb25zdHJhaW50cyA6
IGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9j
ayk7CisgICAgICAgIHJldHVybiAmY29udGFpbmluZ0Jsb2NrID09ICZyb290KCkgPyBjb25zdHJh
aW50cyA6IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVu
dChjb250YWluaW5nQmxvY2spOwogICAgIH07CiAKICAgICBmb3IgKGF1dG8mIG91dE9mRmxvd0Jv
eCA6IGZvcm1hdHRpbmdTdGF0ZSgpLm91dE9mRmxvd0JveGVzKCkpIHsKQEAgLTE2MSw5ICsxNjEs
OSBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFs
aWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25TdAogICAgICAgICAgICAgYXV0byYgY29udGFpbmVy
Qm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pigqb3V0T2ZGbG93Qm94KTsKICAgICAgICAgICAg
IGF1dG8gZm9ybWF0dGluZ0NvbnRleHQgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5n
Q29udGV4dChjb250YWluZXJCb3gsIGxheW91dFN0YXRlKCkpOwogICAgICAgICAgICAgaWYgKGNv
bnRhaW5lckJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICBm
b3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwg
Z2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7Cisg
ICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQoaW52
YWxpZGF0aW9uU3RhdGUsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudChjb250YWluZXJCb3gpKTsKICAgICAgICAgICAgIGNvbXB1dGVPdXRPZkZsb3dWZXJ0
aWNhbEdlb21ldHJ5KGNvbnRhaW5lckJveCwgY29udGFpbmluZ0Jsb2NrQ29uc3RyYWludHMpOwot
ICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxvd0NvbnRlbnQoaW52
YWxpZGF0aW9uU3RhdGUsIGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
KGNvbnRhaW5lckJveCkpOworICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91
dE9mRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNv
bnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChjb250YWluZXJCb3gpKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeSgqb3V0T2ZG
bG93Qm94LCBjb250YWluaW5nQmxvY2tDb25zdHJhaW50cyk7CiAgICAgfQpAQCAtMjcyLDE2ICsy
NzIsNiBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0T3V0T2ZGbG93RGVzY2VuZGFu
dHNJZk5lZWRlZCgpCiAgICAgfQogfQogCi1Gb3JtYXR0aW5nR2VvbWV0cnkgRm9ybWF0dGluZ0Nv
bnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gRm9ybWF0dGluZ0dlb21ldHJ5
KCp0aGlzKTsKLX0KLQotRm9ybWF0dGluZ1F1aXJrcyBGb3JtYXR0aW5nQ29udGV4dDo6cXVpcmtz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gRm9ybWF0dGluZ1F1aXJrcygqdGhpcyk7Ci19Ci0KICNp
Zm5kZWYgTkRFQlVHCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojp2YWxpZGF0ZUdlb21ldHJ5Q29u
c3RyYWludHNBZnRlckxheW91dCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5k
ZXggZTMyMzkwZGVlOTNiZGMyNDM1OTRmZDA2YTc1MjJhMTdjZDc1OTYxYy4uZDRjZDdjMjExZGQx
MDU0ZTVhMThmNDY1YjM4YWE3OTE5YWJiYzg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaApA
QCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkg
Y29uc3QgeyByZXR1cm4gKm1fcm9vdDsgfQogICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgp
IGNvbnN0OwogICAgIGNvbnN0IEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nU3RhdGU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZvcm1h
dHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgY29uc3QgRm9ybWF0dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0ID0gMDsK
IAogICAgIGVudW0gY2xhc3MgRXNjYXBlUmVhc29uIHsKICAgICAgICAgVGFibGVRdWlya05lZWRz
R2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCwKQEAgLTkxLDkgKzkzLDYg
QEAgcHJvdGVjdGVkOgogCiAgICAgdXNpbmcgTGF5b3V0UXVldWUgPSBWZWN0b3I8Y29uc3QgQm94
Kj47CiBwcml2YXRlOgotICAgIEZvcm1hdHRpbmdHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0Owot
ICAgIEZvcm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNvbGxlY3RP
dXRPZkZsb3dEZXNjZW5kYW50c0lmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlT3V0T2ZGbG93
VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxv
d0NvbnRlbnQmKTsKICAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnko
Y29uc3QgQm94JiwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggMzg4NmVmYzY2OWZlYjM3ZTk1ODM1YWE2NDFi
NWFjOGM0Yzg2MDY4NS4uMzA2ZjYwNjNiZjYxZjY4M2IzODk5NTY0OWM0OTdkZWViMTcxNWYwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3Jt
YXR0aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtODEsNyArODEsNyBAQCBPcHRpb25h
bDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUoY29u
c3QgQm94JiBsYXlvdXRCbwogCiAgICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpIHsKICAg
ICAgICAgaWYgKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCi0gICAgICAgICAgICBjb250
YWluaW5nQmxvY2tIZWlnaHQgPSBGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdDb250ZXh0KCkp
LmhlaWdodFZhbHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGxheW91
dEJveCk7CisgICAgICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmZvcm1hdHRpbmdRdWlya3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdC
bG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRCb3gpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7
CiAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0
IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikg
YW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRy
eS5oCmluZGV4IGVmNzAyMWU3NDM0MDE1M2JmYjE0MDZkNmI3MDMxYTU4MTIxNzI3OWMuLmFiNzlh
ZmI0Y2RmZjYyMjFmMDE5ZTczMmYwYmY0MDE2MjRiMGFkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2Vv
bWV0cnkuaApAQCAtODksNiArODksMTEgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPExheW91dFVu
aXQ+IGNvbXB1dGVkSGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gY29tcHV0ZWRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja1dpZHRoKSBjb25zdDsKIAorICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgp
IGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuaXNCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0KCk7IH0KKyAgICBib29sIGlzSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgeyBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5pc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0K
KyAgICBib29sIGlzRmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1h
dHRpbmdDb250ZXh0KCkuaXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNU
YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkuaXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGNvbnN0
IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0Nv
bnRleHQubGF5b3V0U3RhdGUoKTsgfQogICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAg
LTEyMCw0ICsxMjUsOSBAQCBwcml2YXRlOgogfQogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJTkdfR0VPTUVUUlkoVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0OjpU
b1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSkgeyByZXR1cm4g
Zm9ybWF0dGluZ0dlb21ldHJ5LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKaW5kZXggZDU2OGFlZWMx
ZjVhNjgyOTM2ZDQ2YmJlNTJmZjY5NGU0YjE2MGY1Ni4uNzU3MDBjYjA5Nzc5MDIzMjcyN2M4NTFi
MTE5YzA0NjUwMjkzMTE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwCkBAIC01Niw5ICs1
Niw5IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ1F1aXJrczo6aGVpZ2h0VmFsdWVPZk5lYXJlc3RD
b250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQoCiAgICAgICAgIC8vIC1hbmQgaXQncyB0b3Rh
bGx5IGluc2FuZSBiZWNhdXNlIG5vdyB3ZSBmcmVlbHkgdHJhdmVsIGFjcm9zcyBmb3JtYXR0aW5n
IGNvbnRleHQgYm91bmRhcmllcyBhbmQgY29tcHV0ZWQgbWFyZ2lucyBhcmUgbm9uZXhpc3RlbnQu
CiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzQm9keUJveCgpIHx8IGNvbnRhaW5pbmdC
bG9jay0+aXNEb2N1bWVudEJveCgpKSB7CiAKLSAgICAgICAgICAgIGF1dG8gZ2VvbWV0cnkgPSBG
b3JtYXR0aW5nR2VvbWV0cnkgeyBmb3JtYXR0aW5nQ29udGV4dCB9OwotICAgICAgICAgICAgYXV0
byBob3Jpem9udGFsQ29uc3RyYWludHMgPSBnZW9tZXRyeS5jb25zdHJhaW50c0ZvckluRmxvd0Nv
bnRlbnQoY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKSwgRm9ybWF0dGluZ0NvbnRl
eHQ6OkVzY2FwZVJlYXNvbjo6RmluZEZpeGVkSGVpZ2h0QW5jZXN0b3JRdWlyaykuaG9yaXpvbnRh
bDsKLSAgICAgICAgICAgIGF1dG8gdmVydGljYWxNYXJnaW4gPSBnZW9tZXRyeS5jb21wdXRlZFZl
cnRpY2FsTWFyZ2luKCpjb250YWluaW5nQmxvY2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7Cisg
ICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5m
b3JtYXR0aW5nR2VvbWV0cnkoKTsKKyAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFp
bnRzID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250
YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBl
UmVhc29uOjpGaW5kRml4ZWRIZWlnaHRBbmNlc3RvclF1aXJrKS5ob3Jpem9udGFsOworICAgICAg
ICAgICAgYXV0byB2ZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFZl
cnRpY2FsTWFyZ2luKCpjb250YWluaW5nQmxvY2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAK
ICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0
cnlGb3JCb3goKmNvbnRhaW5pbmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNv
bjo6RmluZEZpeGVkSGVpZ2h0QW5jZXN0b3JRdWlyayk7CiAgICAgICAgICAgICBhdXRvIHZlcnRp
Y2FsUGFkZGluZyA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgYm94R2Vv
bWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oCmlu
ZGV4IDMzZjBkODI0MTJiYTVlYjlmOTk0ZjhlOTZlYzgwN2YyOTMwNmEwOTEuLmQ1NzgyMDNiNzA0
YjkwODI3MTQzN2E1NWRlNmQ4NDY3Nzg5ZTU2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oCkBA
IC0zOCw2ICszOCwxMCBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRVbml0IGhlaWdodFZhbHVlT2ZO
ZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYpIGNvbnN0Owog
CisgICAgYm9vbCBpc0Jsb2NrRm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIGZvcm1h
dHRpbmdDb250ZXh0KCkuaXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCk7IH0KKyAgICBib29sIGlz
SW5saW5lRm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkuaXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpOyB9CisgICAgYm9vbCBpc1RhYmxlRm9ybWF0
dGluZ1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuaXNUYWJsZUZv
cm1hdHRpbmdDb250ZXh0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0
U3RhdGUoKTsgfQogICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTQ4LDQgKzUyLDkg
QEAgcHJvdGVjdGVkOgogfQogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTEFZ
T1VUX0ZPUk1BVFRJTkdfUVVJUktTKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkxheW91dDo6VG9WYWx1ZVR5cGVOYW1l
KSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1aXJrcykgeyByZXR1cm4gZm9ybWF0dGluZ1F1aXJrcy5w
cmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2sv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGZmNWM1
MDNmNGQwNTFjYzU4N2UzYzAzY2FjZDRhMzNjMGY2YmVlOGUuLjBkOWQ5Y2I1ZDU1ZjQ5ZTY4ODZi
YjgyOWFiMzA2YTJjZmNmYWYwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmNwcApAQCAtNTIsNiArNTIsOCBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoQmxvY2tGb3JtYXR0aW5nQ29udGV4dCk7CiAKIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29u
dGV4dFJvb3QsIEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUpCiAgICAgOiBG
b3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGZvcm1hdHRpbmdTdGF0ZSkK
KyAgICAsIG1fYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpCisgICAgLCBtX2Jsb2NrRm9y
bWF0dGluZ1F1aXJrcygqdGhpcykKIHsKIH0KIApAQCAtOTcsNyArOTksNyBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUm
IGludmFsaWRhdGlvbgogCiAgICAgYXV0byBjb25zdHJhaW50c0ZvckxheW91dEJveCA9IFsmXSAo
Y29uc3QgYXV0byYgbGF5b3V0Qm94KSB7CiAgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9
IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgcmV0dXJuICZjb250YWluaW5n
QmxvY2sgPT0gJmZvcm1hdHRpbmdSb290ID8gY29uc3RyYWludHMgOiBnZW9tZXRyeSgpLmNvbnN0
cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2spOworICAgICAgICByZXR1cm4g
JmNvbnRhaW5pbmdCbG9jayA9PSAmZm9ybWF0dGluZ1Jvb3QgPyBjb25zdHJhaW50cyA6IGJsb2Nr
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5p
bmdCbG9jayk7CiAgICAgfTsKIAogICAgIC8vIFRoaXMgaXMgYSBwb3N0LW9yZGVyIHRyZWUgdHJh
dmVyc2FsIGxheW91dC4KQEAgLTEzMCw3ICsxMzIsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlv
bgogICAgICAgICAgICAgICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gTGF5b3V0Q29u
dGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0ZSgp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckJveC5pc1RhYmxlV3JhcHBlckJv
eCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8VGFibGVXcmFwcGVyQmxvY2tG
b3JtYXR0aW5nQ29udGV4dD4oKmZvcm1hdHRpbmdDb250ZXh0KS5zZXRIb3Jpem9udGFsQ29uc3Ry
YWludHNJZ25vcmluZ0Zsb2F0cyhjb250YWluaW5nQmxvY2tDb25zdHJhaW50cy5ob3Jpem9udGFs
KTsKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0Nv
bnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50KGNvbnRhaW5lckJveCkpOworICAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29u
dGV4dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgYmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtMTYxLDcgKzE2Myw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0
SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uCiAgICAgICAgICAg
ICAgICAgLy8gTm93IHRoYXQgd2UgY29tcHV0ZWQgdGhlIGJveCdzIGhlaWdodCwgd2UgY2FuIGxh
eW91dCB0aGUgb3V0LW9mLWZsb3cgZGVzY2VuZGFudHMuCiAgICAgICAgICAgICAgICAgaWYgKGlz
PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSAmJiBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91
dEJveCkuaGFzQ2hpbGQoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBjb250YWluZXJC
b3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAg
ICAgIExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwg
bGF5b3V0U3RhdGUoKSktPmxheW91dE91dE9mRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUs
IGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5lckJveCkp
OworICAgICAgICAgICAgICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29u
dGV4dChjb250YWluZXJCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRPdXRPZkZsb3dDb250ZW50
KGludmFsaWRhdGlvblN0YXRlLCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRz
Rm9yT3V0T2ZGbG93Q29udGVudChjb250YWluZXJCb3gpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRl
eHQgJiYgaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQpAQCAtMjU4LDcgKzI2MCw3IEBAIHZv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4o
Y29uc3QgQ29udGFpbmVyQm94JiBjCiAgICAgZm9yIChhdXRvJiBjaGlsZEJveCA6IGNoaWxkcmVu
T2ZUeXBlPEJveD4oY29udGFpbmVyQm94KSkgewogICAgICAgICBpZiAoIWNoaWxkQm94LmlzSW5G
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gcG9z
aXRpb25PZmZzZXQgPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChj
aGlsZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgYXV0byBwb3NpdGlvbk9m
ZnNldCA9IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5GbG93UG9zaXRpb25lZFBvc2l0aW9u
T2Zmc2V0KGNoaWxkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwogICAgICAgICBmb3JtYXR0
aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjaGlsZEJveCkubW92ZShwb3NpdGlvbk9mZnNldCk7CiAg
ICAgfQogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJFbmQ6IG1vdmUgaW4tZmxvdyBwb3NpdGlvbmVkIGNoaWxkcmVuIC0+IHBhcmVudDogIiA8
PCAmY29udGFpbmVyQm94KTsKQEAgLTI2NiwxMiArMjY4LDEyIEBAIHZvaWQgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4oY29uc3QgQ29udGFpbmVy
Qm94JiBjCiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRp
Y2FsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWlu
dHMmIHZlcnRpY2FsQ29uc3RyYWludHMpCiB7Ci0gICAgZm9ybWF0dGluZ1N0YXRlKCkuYm94R2Vv
bWV0cnkobGF5b3V0Qm94KS5zZXRMb2dpY2FsVG9wKGdlb21ldHJ5KCkuc3RhdGljVmVydGljYWxQ
b3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpKTsKKyAgICBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExvZ2ljYWxUb3AoYmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkoKS5zdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxD
b25zdHJhaW50cykpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVT
dGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewotICAgIGZvcm1hdHRp
bmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TG9naWNhbExlZnQoZ2VvbWV0cnko
KS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpKTsKKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExv
Z2ljYWxMZWZ0KGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuc3RhdGljSG9yaXpvbnRhbFBvc2l0
aW9uKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSk7CiB9CiAKIHZvaWQgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNl
c3RvcnMoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IENvbnN0cmFpbnRzUGFpciYgY29uc3Ry
YWludHNQYWlyKQpAQCAtMjg2LDcgKzI4OCw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMoY29uc3QKICAg
ICAvLwogICAgIC8vIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCBhcyBsb25nIGFzIHdlIGRvbid0IGNy
b3NzIHRoZSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgYm91bmRhcnksIHdlIHNob3VsZCBiZSBh
YmxlIHRvIHByZS1jb21wdXRlIHRoZSBmaW5hbCB0b3AgcG9zaXRpb24uCiAgICAgLy8gRklYTUU6
IHdlIGN1cnJlbnRseSBkb24ndCBhY2NvdW50IGZvciB0aGUgImNsZWFyIiBwcm9wZXJ0eSB3aGVu
IGNvbXB1dGluZyB0aGUgZmluYWwgcG9zaXRpb24gZm9yIGFuIGFuY2VzdG9yLgotICAgIGF1dG8g
Zm9ybWF0dGluZ0dlb21ldHJ5ID0gZ2VvbWV0cnkoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nR2Vv
bWV0cnkgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpOwogICAgIGZvciAoYXV0byogYW5jZXN0
b3IgPSAmbGF5b3V0Qm94OyBhbmNlc3RvciAmJiBhbmNlc3RvciAhPSAmcm9vdCgpOyBhbmNlc3Rv
ciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgYXV0byBjb25zdHJh
aW50c0ZvckFuY2VzdG9yID0gWyZdIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
ayA9IGFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKTsKQEAgLTM2MCw3ICszNjIsNyBAQCB2b2lk
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBGbG9h
dGluZ0NvbnRleHQmIGZsb2F0aQogICAgICAgICAvLyBGbG9hdCBhdm9pZGVycycgYXZhaWxhYmxl
IHdpZHRoIG1pZ2h0IGJlIHNocnVuayBieSBleGlzdGluZyBmbG9hdHMgaW4gdGhlIGNvbnRleHQu
CiAgICAgICAgIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyID0gdXNlZEF2YWlsYWJsZVdpZHRo
Rm9yRmxvYXRBdm9pZGVyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94LCBjb25zdHJhaW50c1Bh
aXIpOwogICAgIH0KLSAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdlb21ldHJ5KCku
Y29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50c1BhaXIu
Y29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyKTsK
KyAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5
KCkuY29tcHV0ZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50c1Bh
aXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVy
KTsKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5
KGxheW91dEJveCk7CiAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRX
aWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOwogICAgIGJveEdlb21ldHJ5LnNldEhvcml6b250
YWxNYXJnaW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVu
dFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwpAQCAtMzcwLDE3ICszNzIsMTcgQEAg
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdAogewogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25h
bDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsKICAg
ICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIGdlb21l
dHJ5KCkuaW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVybiBibG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94
LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHVzZWRIZWlnaHQgfSk7CiAKICAgICAgICAgaWYg
KGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIGdl
b21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgY29uc3Ry
YWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAgcmV0dXJuIGJs
b2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxh
eW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOwogCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAK
ICAgICBhdXRvIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7Ci0gICAgaWYg
KGF1dG8gbWF4SGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gp
KSB7CisgICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0
QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiAqbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICBhdXRv
IG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4SGVpZ2h0KTsKICAgICAgICAgICAgIC8v
IFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC0zODksNyArMzkxLDcgQEAg
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGF1dG8g
bWluSGVpZ2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7Cisg
ICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRl
ZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0QW5kTWFy
Z2luLmNvbnRlbnRIZWlnaHQgPCAqbWluSGVpZ2h0KSB7CiAgICAgICAgICAgICBhdXRvIG1pbkhl
aWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWluSGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFVzZWQg
aGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC00NzgsNyArNDgwLDcgQEAgSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWkKICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9ICpxdWV1ZS50
YWtlTGFzdCgpOwogICAgICAgICAgICAgYXV0byBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBmb3Jt
YXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRCb3gpOwog
ICAgICAgICAgICAgaWYgKCFkZXNkZW5kYW50Q29uc3RyYWludHMpIHsKLSAgICAgICAgICAgICAg
ICBkZXNkZW5kYW50Q29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMobGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAgICBkZXNkZW5kYW50Q29uc3RyYWludHMg
PSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMobGF5
b3V0Qm94KTsKICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50cmluc2ljV2lk
dGhDb25zdHJhaW50c0ZvckJveChsYXlvdXRCb3gsICpkZXNkZW5kYW50Q29uc3RyYWludHMpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY29uc3RyYWludHMubWluaW11bSA9IHN0ZDo6bWF4
KGNvbnN0cmFpbnRzLm1pbmltdW0sIGRlc2RlbmRhbnRDb25zdHJhaW50cy0+bWluaW11bSk7CkBA
IC02MDIsMTEgKzYwNCw2IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dXBkYXRlTWFy
Z2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoY29uc3QgQm94JiBsYXlvCiAgICAgfQogfQogCi1C
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IHsgKnRoaXMgfTsK
LX0KLQogQmxvY2tNYXJnaW5Db2xsYXBzZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjptYXJnaW5D
b2xsYXBzZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEJsb2NrTWFyZ2luQ29sbGFwc2UgeyBsYXlv
dXRTdGF0ZSgpLCBmb3JtYXR0aW5nU3RhdGUoKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAzY2E5MDc1Yjk0MmQwZGE3Nzc4YTI3NjFiMjk2YTg0
MzQwNDE4ODkzLi4yN2Y5ZTNiNTlkYjRmYjM3YjIwMDg1YTEzYjBmMGJjY2ZkMTdhZGYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMjcsNiArMjcs
OCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNsdWRl
ICJCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oIgogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiRm9y
bWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzksNyArNDEs
NiBAQCBjbGFzcyBMYXlvdXRVbml0OwogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEJveDsK
LWNsYXNzIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OwogY2xhc3MgQmxvY2tNYXJnaW5Db2xsYXBz
ZTsKIGNsYXNzIEZsb2F0aW5nQ29udGV4dDsKIApAQCAtNTQsNiArNTUsOCBAQCBwdWJsaWM6CiAg
ICAgTGF5b3V0VW5pdCB1c2VkQ29udGVudEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
Y29uc3QgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9y
bWF0dGluZ1N0YXRlKCkpOyB9CisgICAgY29uc3QgRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3JtYXR0
aW5nR2VvbWV0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Jsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5OyB9CisgICAgY29uc3QgRm9ybWF0dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1aXJrcygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYmxvY2tGb3JtYXR0aW5nUXVpcmtzOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICBzdHJ1Y3QgQ29uc3RyYWludHNQYWlyIHsKQEAgLTgwLDE2ICs4MywyMCBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZyhjb25z
dCBCb3gmKTsKIAogICAgIEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7
IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6
OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQotICAgIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21l
dHJ5KCkgY29uc3Q7CiAgICAgQmxvY2tNYXJnaW5Db2xsYXBzZSBtYXJnaW5Db2xsYXBzZSgpIGNv
bnN0OworICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5JiBibG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk7IH0KKyAg
ICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdRdWlya3MmIGJsb2NrRm9ybWF0dGluZ1F1aXJrcygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tGb3JtYXR0aW5nUXVpcmtzOyB9CiAKICNpZiBBU1NFUlRfRU5B
QkxFRAogICAgIHZvaWQgc2V0UHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IFByZWNvbXB1dGVkTWFyZ2luQmVmb3JlJiBwcmVjb21wdXRlZE1hcmdpbkJl
Zm9yZSkgeyBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlzdC5zZXQoJmxheW91dEJveCwgcHJl
Y29tcHV0ZWRNYXJnaW5CZWZvcmUpOyB9CiAgICAgUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgcHJl
Y29tcHV0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmVMaXN0LmdldCgmbGF5b3V0Qm94KTsgfQogICAgIGJv
b2wgaGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmVMaXN0LmNvbnRhaW5zKCZsYXlvdXRC
b3gpOyB9CiAjZW5kaWYKKwogcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IEJveCosIFByZWNv
bXB1dGVkTWFyZ2luQmVmb3JlPiBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlzdDsKKyAgICBj
b25zdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBtX2Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Owor
ICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1F1aXJrcyBtX2Jsb2NrRm9ybWF0dGluZ1F1aXJrczsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5j
cHAKaW5kZXggNDgwM2NhOTY0ZmNjMjI1NDFhYTliNzE0ZGRjZmMxMzY3ODRjOThmMS4uNDBkYmVm
Mjk1YjI4ODQ5NDNjMTVhMTllZjE0ZTVlOTdkYjE5MGFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9t
ZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTI4MSw3ICsyODEsNyBAQCBDb250
ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGNvbgogICAgIH0KIAogICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVp
cmtzTW9kZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHN0cmV0Y2hlZEluRmxvd0hlaWdodCA9IEJs
b2NrRm9ybWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCgpKS5zdHJldGNoZWRJbkZsb3dI
ZWlnaHRJZkFwcGxpY2FibGUobGF5b3V0Qm94LCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luKSkKKyAg
ICAgICAgaWYgKGF1dG8gc3RyZXRjaGVkSW5GbG93SGVpZ2h0ID0gZG93bmNhc3Q8QmxvY2tGb3Jt
YXR0aW5nUXVpcmtzPihmb3JtYXR0aW5nQ29udGV4dCgpLmZvcm1hdHRpbmdRdWlya3MoKSkuc3Ry
ZXRjaGVkSW5GbG93SGVpZ2h0SWZBcHBsaWNhYmxlKGxheW91dEJveCwgY29udGVudEhlaWdodEFu
ZE1hcmdpbikpCiAgICAgICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQgPSAqc3RyZXRjaGVkSW5GbG93SGVpZ2h0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9j
ay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4IDZjYjg2Zjg2YTNhYzc0NzAxMWU2Y2Zk
OGI0YzQ1MWNmZTk3ODAxY2EuLmI0OWE2MmMyZWRkZmY3ZmQ5NGJjMDU1ZTlkMTFhMzcxMmNjOTgw
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAg
LTMyLDYgKzMyLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewog
CitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OworCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVu
dHMgcG9zaXRpb25pbmcgYW5kIHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJs
b2NrIGZvcm1hdHRpbmcgY29udGV4dC4KIGNsYXNzIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IDog
cHVibGljIEZvcm1hdHRpbmdHZW9tZXRyeSB7CiBwdWJsaWM6CkBAIC01OSw0ICs2MSw2IEBAIHBy
aXZhdGU6CiB9CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJTkdf
R0VPTUVUUlkoQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnksIGlzQmxvY2tGb3JtYXR0aW5nR2VvbWV0
cnkoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJr
cy5jcHAKaW5kZXggNmExOTFhOTMyNTEyZjljZTQzY2E5NTg4ODAzZWIxNWI2ZDRmMDBiZC4uYTk5
NTE0Y2EwMGE2N2JmZDk2ZTk2MzUxYWVjYmU1YWQ4OTViODExNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdR
dWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtOTcsNyArOTcsNyBAQCBPcHRpb25h
bDxMYXlvdXRVbml0PiBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hlZEluRmxvd0hlaWdo
dElmQXBwbGljYWJsZShjbwogICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IGRvY3VtZW50Qm94
R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGRvY3VtZW50Qm94R2VvbWV0cnkudmVydGljYWxQ
YWRkaW5nKCkudmFsdWVPcigwKTsKICAgICAvLyBIb3dldmVyIHRoZSBub24taW4tZmxvdyBkb2N1
bWVudCBib3gncyB2ZXJ0aWNhbCBtYXJnaW5zIGFyZSBpZ25vcmVkLiBUaGV5IGRvbid0IGFmZmVj
dCB0aGUgYm9keSBib3gncyBjb250ZW50IGhlaWdodC4KICAgICBpZiAoZG9jdW1lbnRCb3guaXNJ
bkZsb3coKSkgewotICAgICAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQgfTsKKyAgICAgICAgYXV0byYgZm9ybWF0
dGluZ0dlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ0dlb21ldHJ5KCk7CiAg
ICAgICAgIGF1dG8gcHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBmb3JtYXR0
aW5nR2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgZm9ybWF0dGlu
Z0dlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChpbml0aWFsQ29udGFpbmluZ0Js
b2NrLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpCb2R5U3RyZXRjaGVzVG9WaWV3
cG9ydFF1aXJrKS5ob3Jpem9udGFsKTsKICAgICAgICAgYm9keUJveENvbnRlbnRIZWlnaHQgLT0g
cHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyBw
cmVjb21wdXRlRG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCmluZGV4IDdjZmJj
MmM2NTk5NWQ1MjU0NjhiYTFhNTY5MmIwOTc2YmI1YmEyZmEuLmEwNDQ0NjY2ZDU1YWNkYTQ0N2Ix
MzA0ZTFjNDY0MTI0NzQ4OGE5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRp
bmdRdWlya3MuaApAQCAtNDcsNCArNDcsNiBAQCBwdWJsaWM6CiB9CiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJTkdfUVVJUktTKEJsb2NrRm9ybWF0dGluZ1F1aXJr
cywgaXNCbG9ja0Zvcm1hdHRpbmdRdWlya3MoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJs
b2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGFhNzc1NDYzMDJlOGU5ZThkOWRlZjBlMTEz
MzBhNjgyNzY1MThiOGMuLjk0NTE5NjFjZmMyNmRhYzEwYzcyMDg3ODllNDAyMTc4MjU0OTk3NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3
cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC00Niw2ICs0
Niw3IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChUYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0KTsKIAogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6VGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dChjb25zdCBDb250YWluZXJCb3gmIGZvcm1h
dHRpbmdDb250ZXh0Um9vdCwgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSkK
ICAgICA6IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHRSb290LCBmb3Jt
YXR0aW5nU3RhdGUpCisgICAgLCBtX3RhYmxlV3JhcHBlckZvcm1hdHRpbmdRdWlya3MoKnRoaXMp
CiB7CiB9CiAKQEAgLTc3LDcgKzc4LDcgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmwKIAogICAg
IGlmICh0YWJsZUJveC5oYXNDaGlsZCgpKSB7CiAgICAgICAgIGF1dG8gaW52YWxpZGF0aW9uU3Rh
dGUgPSBJbnZhbGlkYXRpb25TdGF0ZSB7IH07Ci0gICAgICAgIExheW91dENvbnRleHQ6OmNyZWF0
ZUZvcm1hdHRpbmdDb250ZXh0KHRhYmxlQm94LCBsYXlvdXRTdGF0ZSgpKS0+bGF5b3V0SW5GbG93
Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgZ2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxv
d0NvbnRlbnQodGFibGVCb3gpKTsKKyAgICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0
dGluZ0NvbnRleHQodGFibGVCb3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50
KGludmFsaWRhdGlvblN0YXRlLCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCh0YWJsZUJveCkpOwogICAgIH0KIAogICAgIGNvbXB1dGVIZWlnaHRB
bmRNYXJnaW5Gb3JUYWJsZUJveCh0YWJsZUJveCwgY29uc3RyYWludHMpOwpAQCAtOTksMTMgKzEw
MCwxMyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nRm9yVGFibGVCb3goY29ucwogICAgIC8vIG1heGltdW0gY29sbGFwc2Vk
IHRvcCBib3JkZXIuIFRoZSBib3R0b20gYm9yZGVyIHdpZHRoIGlzIGNvbXB1dGVkIGJ5IGV4YW1p
bmluZyBhbGwgY2VsbHMgd2hvc2UgYm90dG9tIGJvcmRlcnMgY29sbGFwc2UKICAgICAvLyB3aXRo
IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiBUaGUgYm90dG9tIGJvcmRlciB3aWR0aCBpcyBlcXVh
bCB0byBoYWxmIG9mIHRoZSBtYXhpbXVtIGNvbGxhcHNlZCBib3R0b20gYm9yZGVyLgogICAgIGF1
dG8mIGdyaWQgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUo
dGFibGVCb3gpLnRhYmxlR3JpZCgpOwotICAgIGF1dG8gdGFibGVCb3JkZXIgPSBnZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKHRhYmxlQm94KTsKKyAgICBhdXRvIHRhYmxlQm9yZGVyID0gYmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcih0YWJsZUJveCk7CiAKICAgICBhdXRv
JiBmaXJzdENvbHVtbkZpcnN0Um93Qm94ID0gZ3JpZC5zbG90KHsgMCAsIDAgfSktPmNlbGwoKS5i
b3goKTsKLSAgICBhdXRvIGxlZnRCb3JkZXIgPSBzdGQ6Om1heCh0YWJsZUJvcmRlci5ob3Jpem9u
dGFsLmxlZnQsIGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoZmlyc3RDb2x1bW5GaXJzdFJvd0Jv
eCkuaG9yaXpvbnRhbC5sZWZ0KTsKKyAgICBhdXRvIGxlZnRCb3JkZXIgPSBzdGQ6Om1heCh0YWJs
ZUJvcmRlci5ob3Jpem9udGFsLmxlZnQsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0
ZWRCb3JkZXIoZmlyc3RDb2x1bW5GaXJzdFJvd0JveCkuaG9yaXpvbnRhbC5sZWZ0KTsKIAogICAg
IGF1dG8mIGxhc3RDb2x1bW5GaXJzdFJvdyA9IGdyaWQuc2xvdCh7IGdyaWQuY29sdW1ucygpLnNp
emUoKSAtIDEsIDAgfSktPmNlbGwoKS5ib3goKTsKLSAgICBhdXRvIHJpZ2h0Qm9yZGVyID0gc3Rk
OjptYXgodGFibGVCb3JkZXIuaG9yaXpvbnRhbC5yaWdodCwgZ2VvbWV0cnkoKS5jb21wdXRlZEJv
cmRlcihsYXN0Q29sdW1uRmlyc3RSb3cpLmhvcml6b250YWwucmlnaHQpOworICAgIGF1dG8gcmln
aHRCb3JkZXIgPSBzdGQ6Om1heCh0YWJsZUJvcmRlci5ob3Jpem9udGFsLnJpZ2h0LCBibG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGxhc3RDb2x1bW5GaXJzdFJvdykuaG9y
aXpvbnRhbC5yaWdodCk7CiAKICAgICBhdXRvIHRvcEJvcmRlciA9IHRhYmxlQm9yZGVyLnZlcnRp
Y2FsLnRvcDsKICAgICBhdXRvIGJvdHRvbUJvcmRlciA9IHRhYmxlQm9yZGVyLnZlcnRpY2FsLmJv
dHRvbTsKQEAgLTExNCwzMyArMTE1LDMzIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveChjb25zCiAgICAg
ICAgIGF1dG8mIGJveEluRmlyc3RSb3ggPSBncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgMCB9KS0+
Y2VsbCgpLmJveCgpOwogICAgICAgICBhdXRvJiBib3hJbkxhc3RSb3cgPSBncmlkLnNsb3QoeyBj
b2x1bW5JbmRleCwgbGFzdFJvd0luZGV4IH0pLT5jZWxsKCkuYm94KCk7CiAKLSAgICAgICAgdG9w
Qm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGJv
eEluRmlyc3RSb3gpLnZlcnRpY2FsLnRvcCk7Ci0gICAgICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6
bWF4KGJvdHRvbUJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkxhc3RSb3cp
LnZlcnRpY2FsLmJvdHRvbSk7CisgICAgICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRl
ciwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkZpcnN0Um94
KS52ZXJ0aWNhbC50b3ApOworICAgICAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21C
b3JkZXIsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoYm94SW5MYXN0
Um93KS52ZXJ0aWNhbC5ib3R0b20pOwogICAgIH0KIAotICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4
KHRvcEJvcmRlciwgZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcigqdGFibGVCb3guZmlyc3RDaGls
ZCgpKS52ZXJ0aWNhbC50b3ApOworICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRlciwg
YmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcigqdGFibGVCb3guZmlyc3RD
aGlsZCgpKS52ZXJ0aWNhbC50b3ApOwogICAgIGZvciAoYXV0byYgc2VjdGlvbiA6IGNoaWxkcmVu
T2ZUeXBlPENvbnRhaW5lckJveD4odGFibGVCb3gpKSB7Ci0gICAgICAgIGF1dG8gaG9yaXp0b25h
bEJvcmRlciA9IGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoc2VjdGlvbikuaG9yaXpvbnRhbDsK
KyAgICAgICAgYXV0byBob3JpenRvbmFsQm9yZGVyID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnko
KS5jb21wdXRlZEJvcmRlcihzZWN0aW9uKS5ob3Jpem9udGFsOwogICAgICAgICBsZWZ0Qm9yZGVy
ID0gc3RkOjptYXgobGVmdEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5sZWZ0KTsKICAgICAgICAg
cmlnaHRCb3JkZXIgPSBzdGQ6Om1heChyaWdodEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5yaWdo
dCk7CiAgICAgfQotICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgZ2Vv
bWV0cnkoKS5jb21wdXRlZEJvcmRlcigqdGFibGVCb3gubGFzdENoaWxkKCkpLnZlcnRpY2FsLmJv
dHRvbSk7CisgICAgYm90dG9tQm9yZGVyID0gc3RkOjptYXgoYm90dG9tQm9yZGVyLCBibG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKCp0YWJsZUJveC5sYXN0Q2hpbGQoKSku
dmVydGljYWwuYm90dG9tKTsKIAogICAgIGF1dG8mIHJvd3MgPSBncmlkLnJvd3MoKS5saXN0KCk7
Ci0gICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVk
Qm9yZGVyKHJvd3MuZmlyc3QoKS5ib3goKSkudmVydGljYWwudG9wKTsKKyAgICB0b3BCb3JkZXIg
PSBzdGQ6Om1heCh0b3BCb3JkZXIsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRC
b3JkZXIocm93cy5maXJzdCgpLmJveCgpKS52ZXJ0aWNhbC50b3ApOwogICAgIGZvciAoYXV0byYg
cm93IDogcm93cykgewotICAgICAgICBhdXRvIGhvcml6dG9uYWxCb3JkZXIgPSBnZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKHJvdy5ib3goKSkuaG9yaXpvbnRhbDsKKyAgICAgICAgYXV0byBob3Jp
enRvbmFsQm9yZGVyID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihy
b3cuYm94KCkpLmhvcml6b250YWw7CiAgICAgICAgIGxlZnRCb3JkZXIgPSBzdGQ6Om1heChsZWZ0
Qm9yZGVyLCBob3JpenRvbmFsQm9yZGVyLmxlZnQpOwogICAgICAgICByaWdodEJvcmRlciA9IHN0
ZDo6bWF4KHJpZ2h0Qm9yZGVyLCBob3JpenRvbmFsQm9yZGVyLnJpZ2h0KTsKICAgICB9Ci0gICAg
Ym90dG9tQm9yZGVyID0gc3RkOjptYXgoYm90dG9tQm9yZGVyLCBnZW9tZXRyeSgpLmNvbXB1dGVk
Qm9yZGVyKHJvd3MubGFzdCgpLmJveCgpKS52ZXJ0aWNhbC5ib3R0b20pOworICAgIGJvdHRvbUJv
cmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5j
b21wdXRlZEJvcmRlcihyb3dzLmxhc3QoKS5ib3goKSkudmVydGljYWwuYm90dG9tKTsKIAogICAg
IGF1dG8gY29sbGFwc2VkQm9yZGVyID0gRWRnZXMgeyB7IGxlZnRCb3JkZXIsIHJpZ2h0Qm9yZGVy
IH0sIHsgdG9wQm9yZGVyLCBib3R0b21Cb3JkZXIgfSB9OwogICAgIGdyaWQuc2V0Q29sbGFwc2Vk
Qm9yZGVyKGNvbGxhcHNlZEJvcmRlcik7CiAKICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KHRhYmxlQm94KTsKICAgICBib3hHZW9tZXRyeS5zZXRC
b3JkZXIoY29sbGFwc2VkQm9yZGVyIC8gMik7Ci0gICAgYm94R2VvbWV0cnkuc2V0UGFkZGluZyhn
ZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aCkpOworICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoYmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJh
aW50cy5sb2dpY2FsV2lkdGgpKTsKIH0KIAogdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdCBDb250YWlu
ZXJCb3gmIHRhYmxlQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxD
b25zdHJhaW50cykKQEAgLTE4NSwxMCArMTg2LDEwIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luRm9yVGFibGVCb3goY29uc3QK
ICAgICAvLyBTaW1pbGFyIHNldHVwIHdpdGggbm9uLXRhYmxlIGNvbnRlbnQgd291bGQgcmVzb2x2
ZSB0aGUgaW5uZXIgYmxvY2sgbGV2ZWwgYm94J3Mgd2lkdGggdG8gNDBweDsKICAgICAvLyBUaGlz
IG5lZWRzIGNsYXJpZmljYXRpb24gaW4gdGhlIHNwZWMuCiAgICAgYXV0byBob3Jpem9udGFsQ29u
c3RyYWludEZvclJlc29sdmluZ1dpZHRoID0gbV9ob3Jpem9udGFsQ29uc3RyYWludHNJZ25vcmlu
Z0Zsb2F0cy5sb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5
KCk7Ci0gICAgYXV0byBjb21wdXRlZFdpZHRoID0gZ2VvbWV0cnkuY29tcHV0ZWRXaWR0aCh0YWJs
ZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7Ci0gICAgYXV0byBj
b21wdXRlZE1heFdpZHRoID0gZ2VvbWV0cnkuY29tcHV0ZWRNYXhXaWR0aCh0YWJsZUJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7Ci0gICAgYXV0byBjb21wdXRlZE1p
bldpZHRoID0gZ2VvbWV0cnkuY29tcHV0ZWRNaW5XaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5
ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKTsKKyAgICBhdXRvIGNvbXB1dGVkV2lkdGggPSBm
b3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRXaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7CisgICAgYXV0byBjb21wdXRlZE1heFdpZHRoID0gZm9y
bWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkTWF4V2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25z
dHJhaW50Rm9yUmVzb2x2aW5nV2lkdGgpOworICAgIGF1dG8gY29tcHV0ZWRNaW5XaWR0aCA9IGZv
cm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZE1pbldpZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29u
c3RyYWludEZvclJlc29sdmluZ1dpZHRoKTsKICAgICAvLyBVc2UgdGhlIGdlbmVyaWMgc2hyaW5r
LXRvLWZpdC13aWR0aCBsb2dpYyBhcyB0aGUgaW5pdGlhbCB3aWR0aCBmb3IgdGhlIHRhYmxlLgog
ICAgIGF1dG8gdXNlZFdpZHRoID0gc3RkOjptaW4oc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cy5taW5pbXVtLCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpLCBpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzLm1heGltdW0pOwogICAgIGlmIChjb21wdXRlZFdpZHRoIHx8IGNvbXB1dGVk
TWluV2lkdGggfHwgY29tcHV0ZWRNYXhXaWR0aCkgewpAQCAtMjA3LDcgKzIwOCw3IEBAIHZvaWQg
VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2lu
Rm9yVGFibGVCb3goY29uc3QKICAgICAgICAgICAgIHVzZWRXaWR0aCA9ICpjb21wdXRlZE1pbldp
ZHRoOwogICAgIH0KIAotICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gZ2VvbWV0cnku
aW5GbG93Q29udGVudFdpZHRoQW5kTWFyZ2luKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAg
YXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkuaW5GbG93Q29u
dGVudFdpZHRoQW5kTWFyZ2luKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIE92ZXJy
aWRkZW5Ib3Jpem9udGFsVmFsdWVzIHsgdXNlZFdpZHRoLCB7IH0gfSk7CiAKICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KHRhYmxlQm94KTsKICAg
ICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNv
bnRlbnRXaWR0aCk7CkBAIC0yMjEsMTMgKzIyMiwxMyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25z
dAogICAgIC8vIGFscmVhZHkgYmVlbiB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBURkMg
bGF5b3V0LgogICAgIGF1dG8gb3ZlcnJpZGRlblRhYmxlSGVpZ2h0ID0gWyZdKCkgLT4gT3B0aW9u
YWw8TGF5b3V0VW5pdD4gewogICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUo
KSkKLSAgICAgICAgICAgIHJldHVybiBUYWJsZVdyYXBwZXJRdWlya3MoKnRoaXMpLm92ZXJyaWRk
ZW5UYWJsZUhlaWdodCh0YWJsZUJveCk7CisgICAgICAgICAgICByZXR1cm4gdGFibGVXcmFwcGVy
Rm9ybWF0dGluZ1F1aXJrcygpLm92ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCk7CiAgICAg
ICAgIGlmICh0YWJsZUJveC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgICAg
IHJldHVybiBnZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
dGFibGVCb3gpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCku
Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfSgpOwogCi0gICAgYXV0byBoZWlnaHRBbmRNYXJnaW4gPSBnZW9t
ZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4odGFibGVCb3gsIGNvbnN0cmFpbnRz
Lmhvcml6b250YWwsIHsgb3ZlcnJpZGRlblRhYmxlSGVpZ2h0IH0pOworICAgIGF1dG8gaGVpZ2h0
QW5kTWFyZ2luID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0
QW5kTWFyZ2luKHRhYmxlQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IG92ZXJyaWRkZW5U
YWJsZUhlaWdodCB9KTsKICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gbWFyZ2luQ29sbGFwc2Uo
KS5jb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyh0YWJsZUJveCwgaGVpZ2h0QW5kTWFyZ2luLm5vbkNv
bGxhcHNlZE1hcmdpbik7CiAgICAgLy8gQ2FjaGUgdGhlIGNvbXB1dGVkIHBvc2l0aXZlIGFuZCBu
ZWdhdGl2ZSBtYXJnaW4gdmFsdWUgcGFpci4KICAgICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRVc2Vk
VmVydGljYWxNYXJnaW4odGFibGVCb3gsIHZlcnRpY2FsTWFyZ2luKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJs
b2NrRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBkNzYzY2FhOTMzNDc5N2MxNTM3NzEyNjc0NjU4
YjM1YWZmNjdkYmJkLi4zZDBlYmRiOGRiZjJiYmQ0NzU0N2I5NDdhNjcwNjEwZmEzYjQ4YTBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBw
ZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQmxvY2tG
b3JtYXR0aW5nUXVpcmtzLmgiCisjaW5jbHVkZSAiVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5n
UXVpcmtzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC01Miw4ICs1MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5k
TWFyZ2luRm9yVGFibGVCb3goY29uc3QgQ29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJik7CiAgICAgdm9pZCBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luRm9yVGFibGVCb3go
Y29uc3QgQ29udGFpbmVyQm94JiwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jik7
CiAKLXByaXZhdGU6CisgICAgY29uc3QgVGFibGVXcmFwcGVyUXVpcmtzJiB0YWJsZVdyYXBwZXJG
b3JtYXR0aW5nUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVdyYXBwZXJGb3JtYXR0aW5n
UXVpcmtzOyB9CisKICAgICBIb3Jpem9udGFsQ29uc3RyYWludHMgbV9ob3Jpem9udGFsQ29uc3Ry
YWludHNJZ25vcmluZ0Zsb2F0czsKKyAgICBjb25zdCBUYWJsZVdyYXBwZXJRdWlya3MgbV90YWJs
ZVdyYXBwZXJGb3JtYXR0aW5nUXVpcmtzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9y
bWF0dGluZ1F1aXJrcy5jcHAKaW5kZXggNjY3MDljNjk1ZTQ2N2E4NTMzMTA1ZjA4Y2I1NTVjOTAz
ZDBjN2U0Ni4uMTEwOGY2MjIwOGE2MDM3OGE5MzQ4YWNlYzgzZmNlYmFhNGQwZjA0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJs
ZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCkBAIC00NCw3ICs0NCw3IEBAIExh
eW91dFVuaXQgVGFibGVXcmFwcGVyUXVpcmtzOjpvdmVycmlkZGVuVGFibGVIZWlnaHQoY29uc3Qg
Q29udGFpbmVyQm94JiB0YWJsZUJvCiB7CiAgICAgLy8gSW4gcXVpcmtzIG1vZGUgYWx3YXlzIHVz
ZSB0aGUgY29udGVudCBoZWlnaHQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHdpdGggY29udGVudCB0
YWtlIGNvbXB1dGVkIHZhbHVlcyBpbnRvIGFjY291bnQuCiAgICAgYXV0byYgZm9ybWF0dGluZ0Nv
bnRleHQgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Pih0aGlzLT5mb3JtYXR0aW5n
Q29udGV4dCgpKTsKLSAgICByZXR1cm4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoZm9ybWF0dGlu
Z0NvbnRleHQpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVCb3gp
OworICAgIHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeT4oZm9ybWF0dGlu
Z0NvbnRleHQuZm9ybWF0dGluZ0dlb21ldHJ5KCkpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5n
Q29udGV4dFJvb3QodGFibGVCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBw
ZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5oCmluZGV4IDhjMmUzMzYyYmMyZTk5YjAwMzg2MGZhYjA1MzgwZDgyYTllZDFkZGYu
LjExZmJmMjVmMWUzMTlkZDg1ZDlhMmYzMDUxMWFlYTRmNGU0NjgwYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBl
ckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCkBAIC0zMiw2ICszMiw4IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorY2xhc3MgVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDsKKwogY2xhc3MgVGFibGVXcmFwcGVyUXVpcmtzIDogcHVibGljIEJsb2Nr
Rm9ybWF0dGluZ1F1aXJrcyB7CiBwdWJsaWM6CiAgICAgVGFibGVXcmFwcGVyUXVpcmtzKGNvbnN0
IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4
L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggNjM2MWY4ZTkxZTc0NDc0MzQ2MzQyMDE0
ODg2ZTVmMTBkYTNhOGRiNC4uZjkyNTdmZDhkYjgxYmQyODk2MDVmNWFkOWJlNmIzNmNhNGQ2ZGNh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTQ0
LDYgKzQ0LDggQEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEZsZXhGb3JtYXR0aW5nQ29u
dGV4dCk7CiAKIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0KGNv
bnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBGbGV4Rm9ybWF0dGluZ1N0
YXRlJiBmb3JtYXR0aW5nU3RhdGUpCiAgICAgOiBGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5n
Q29udGV4dFJvb3QsIGZvcm1hdHRpbmdTdGF0ZSkKKyAgICAsIG1fZmxleEZvcm1hdHRpbmdHZW9t
ZXRyeSgqdGhpcykKKyAgICAsIG1fZmxleEZvcm1hdHRpbmdRdWlya3MoKnRoaXMpCiB7CiB9CiAK
QEAgLTY3LDcgKzY5LDcgQEAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBGbGV4Rm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW4KIHZvaWQgRmxleEZvcm1h
dHRpbmdDb250ZXh0OjpzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3QgQ29uc3RyYWludHNGb3JJ
bkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUg
PSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGdlb21ldHJ5ID0gdGhpcy0+Z2Vv
bWV0cnkoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSBmbGV4Rm9ybWF0dGluZ0dl
b21ldHJ5KCk7CiAgICAgYXV0byBmbGV4SXRlbU1haW5BeGlzU3RhcnQgPSBjb25zdHJhaW50cy5o
b3Jpem9udGFsLmxvZ2ljYWxMZWZ0OwogICAgIGF1dG8gZmxleEl0ZW1NYWluQXhpc0VuZCA9IGZs
ZXhJdGVtTWFpbkF4aXNTdGFydDsKICAgICBhdXRvIGZsZXhJdGVtQ3Jvc0F4aXNTdGFydCA9IGNv
bnN0cmFpbnRzLnZlcnRpY2FsLmxvZ2ljYWxUb3A7CkBAIC04NywxNiArODksMTYgQEAgdm9pZCBG
bGV4Rm9ybWF0dGluZ0NvbnRleHQ6OnNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJh
aW50c0ZvckluRmxvd0NvbnQKIAogICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRMb2dp
Y2FsVG9wTGVmdChMYXlvdXRQb2ludCB7IGZsZXhJdGVtTWFpbkF4aXNFbmQsIGZsZXhJdGVtQ3Jv
c0F4aXNTdGFydCB9KTsKIAotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRCb3JkZXIo
Z2VvbWV0cnkuY29tcHV0ZWRCb3JkZXIoZmxleEl0ZW0pKTsKLSAgICAgICAgICAgIGZsZXhJdGVt
R2VvbWV0cnkuc2V0UGFkZGluZyhnZW9tZXRyeS5jb21wdXRlZFBhZGRpbmcoZmxleEl0ZW0sIGNv
bnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoKSk7CisgICAgICAgICAgICBmbGV4SXRl
bUdlb21ldHJ5LnNldEJvcmRlcihmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRCb3JkZXIoZmxl
eEl0ZW0pKTsKKyAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0UGFkZGluZyhmb3JtYXR0
aW5nR2VvbWV0cnkuY29tcHV0ZWRQYWRkaW5nKGZsZXhJdGVtLCBjb25zdHJhaW50cy5ob3Jpem9u
dGFsLmxvZ2ljYWxXaWR0aCkpOwogCi0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbiA9IGdlb21ldHJ5LmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihmbGV4SXRlbSwgY29u
c3RyYWludHMuaG9yaXpvbnRhbCk7CisgICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4oZmxl
eEl0ZW0sIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogICAgICAgICAgICAgZmxleEl0ZW1HZW9t
ZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
LnZhbHVlT3IoMF9sdSksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1
KSB9KTsKIAotICAgICAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gZ2VvbWV0
cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihmbGV4SXRlbSwgY29uc3RyYWludHMuaG9yaXpvbnRh
bCk7CisgICAgICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBmb3JtYXR0aW5n
R2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihmbGV4SXRlbSwgY29uc3RyYWludHMuaG9y
aXpvbnRhbCk7CiAgICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2lu
KHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwX2x1KSwgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDBfbHUpIH0pOwogCi0gICAgICAgICAgICBmbGV4
SXRlbUdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoZ2VvbWV0cnkuY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChmbGV4SXRlbSkpOworICAgICAgICAgICAgZmxleEl0ZW1H
ZW9tZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGZvcm1hdHRpbmdHZW9tZXRyeS5jb250ZW50SGVp
Z2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGZsZXhJdGVtKSk7CiAgICAgICAgICAgICBmbGV4
SXRlbUdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChmbGV4SXRlbUxvZ2ljYWxXaWR0aCk7CiAg
ICAgICAgICAgICBmbGV4SXRlbU1haW5BeGlzRW5kPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVj
dChmbGV4SXRlbUdlb21ldHJ5KS5yaWdodCgpOwogICAgICAgICAgICAgZmxleEl0ZW1Dcm9zQXhp
c0VuZCA9IHN0ZDo6bWF4KGZsZXhJdGVtQ3Jvc0F4aXNFbmQsIEJveEdlb21ldHJ5Ojpib3JkZXJC
b3hSZWN0KGZsZXhJdGVtR2VvbWV0cnkpLmJvdHRvbSgpKTsKQEAgLTExMCwxOSArMTEyLDE0IEBA
IHZvaWQgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3Qg
Q29uc3RyYWludHNGb3JJbkZsb3dDb250CiB2b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JGbGV4SXRlbXMoKQogewogICAgIGF1dG8m
IGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGF1dG8gZ2Vv
bWV0cnkgPSB0aGlzLT5nZW9tZXRyeSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9
IGZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKTsKICAgICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogY2hp
bGRyZW5PZlR5cGU8Q29udGFpbmVyQm94Pihyb290KCkpKSB7CiAgICAgICAgIGlmIChmb3JtYXR0
aW5nU3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChmbGV4SXRlbSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHNGb3JCb3goZmxleEl0ZW0sIGdlb21ldHJ5LmludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMoZmxleEl0ZW0pKTsKKyAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHNGb3JCb3goZmxleEl0ZW0sIGZvcm1hdHRpbmdHZW9tZXRyeS5pbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKGZsZXhJdGVtKSk7CiAgICAgfQogfQogCi1GbGV4Rm9ybWF0
dGluZ0dlb21ldHJ5IEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAotewot
ICAgIHJldHVybiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKLX0KLQogfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgv
RmxleEZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggM2VlZmM1ZTQ5Y2Zi
NjI4YzkxNjdhNTI1NGUwODM5ZmRmNTczODBjYi4uZjVhNjQ1MDI3YThhMzc0NzhiZWEyZWI5YzNi
NWMxYTE2Y2Y5M2EzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQu
aApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRF
WFQpCiAKKyNpbmNsdWRlICJGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxl
eEZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAtMzQsNyArMzUsNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNzIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnk7
CiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUg
bGF5b3V0IGxvZ2ljIGZvciBmbGV4IGZvcm1hdHRpbmcgY29udGV4dHMuCiAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvY3NzLWZsZXhib3gtMS8KQEAgLTQ3LDE0ICs0NywyMCBAQCBwdWJsaWM6CiAK
ICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cygpIG92ZXJyaWRlOwogCisgICAgY29uc3QgRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsZXhGb3JtYXR0aW5nR2Vv
bWV0cnk7IH0KKyAgICBjb25zdCBGb3JtYXR0aW5nUXVpcmtzJiBmb3JtYXR0aW5nUXVpcmtzKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9mbGV4Rm9ybWF0dGluZ1F1aXJrczsgfQorCiBwcml2YXRl
OgotICAgIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBjb25z
dCBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5JiBmbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Qg
eyByZXR1cm4gbV9mbGV4Rm9ybWF0dGluZ0dlb21ldHJ5OyB9CiAKICAgICB2b2lkIHNpemVBbmRQ
bGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKICAgICB2
b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yRmxleEl0ZW1zKCk7CiAKICAg
ICBjb25zdCBGbGV4Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxGbGV4Rm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9y
bWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgRmxleEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0
YXRlKCkgeyByZXR1cm4gZG93bmNhc3Q8RmxleEZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0Nv
bnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQorCisgICAgY29uc3QgRmxleEZvcm1hdHRpbmdH
ZW9tZXRyeSBtX2ZsZXhGb3JtYXR0aW5nR2VvbWV0cnk7CisgICAgY29uc3QgRm9ybWF0dGluZ1F1
aXJrcyBtX2ZsZXhGb3JtYXR0aW5nUXVpcmtzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2Vv
bWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9G
bGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggMmNmYzdiN2ZiZWM5ZTY0M2I1YzJlMDBhNWJl
YTQ1NWEzNjNmZTg1ZC4uOTY2MzE4ZTY1ZGY1ZjUyZGE4MDE4MTMyOTgwMDI3OTQxZTIxZTkyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4
L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0zMiw2ICsz
Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorY2xhc3Mg
RmxleEZvcm1hdHRpbmdDb250ZXh0OworCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRp
b25pbmcgYW5kIHNpemluZyBmb3IgZmxleCBpdGVtcy4KIGNsYXNzIEZsZXhGb3JtYXR0aW5nR2Vv
bWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKQEAgLTQ2LDQgKzQ4
LDYgQEAgcHJpdmF0ZToKIH0KIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MQVlPVVRfRk9S
TUFUVElOR19HRU9NRVRSWShGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LCBpc0ZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKaW5kZXggODZjODM0YzMxMmY1Y2E1ZGVmNjQwNGE1ZjcyMDljMTMz
ZWE2ZWRkOC4uNTdkNzAxOTZmZTIxZDE2ZmFjZGIzYjY3YzJjMTljZGEwMWY2OTQxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzAs
OCArMzAsNiBAQAogCiAjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKLSNpbmNs
dWRlICJJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGlu
Z1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUxp
bmVSdW4uaCIKQEAgLTU4LDYgKzU2LDggQEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElu
bGluZUZvcm1hdHRpbmdDb250ZXh0KTsKIAogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRS
b290LCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSkKICAgICA6IEZvcm1h
dHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgZm9ybWF0dGluZ1N0YXRlKQorICAg
ICwgbV9pbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpCisgICAgLCBtX2lubGluZUZvcm1h
dHRpbmdRdWlya3MoKnRoaXMpCiB7CiB9CiAKQEAgLTEwNCw5ICsxMDQsOSBAQCB2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRl
JiBpbnZhbGlkYXRpbwogICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0aW5nUm9vdC5oYXNDaGls
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZm9ybWF0dGluZ0NvbnRleHQgPSBMYXlv
dXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nUm9vdCwgbGF5b3V0
U3RhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0aW5nUm9vdC5oYXNJbkZs
b3dPckZsb2F0aW5nQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdD
b250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBnZW9tZXRyeSgp
LmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQoaW52
YWxpZGF0aW9uU3RhdGUsIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOwogICAgICAgICAgICAgICAgICAgICBjb21w
dXRlSGVpZ2h0QW5kTWFyZ2luKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cy5ob3Jpem9udGFs
KTsKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxv
d0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRP
ZkZsb3dDb250ZW50KGZvcm1hdHRpbmdSb290KSk7CisgICAgICAgICAgICAgICAgICAgIGZvcm1h
dHRpbmdDb250ZXh0LT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBp
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQo
Zm9ybWF0dGluZ1Jvb3QpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbihmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMu
aG9yaXpvbnRhbCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTk4LDcgKzE5OCw3IEBAIHZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGlu
ZUl0ZW1zLCBMaW5lQnVpbGRlcjo6CiAgICAgICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBb
Jl0oKSAtPiBJbmxpbmVMYXlvdXRVbml0IHsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgp
LmluU3RhbmRhcmRzTW9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUo
KS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbmxpbmVGb3JtYXR0
aW5nUXVpcmtzKCp0aGlzKS5pbml0aWFsTGluZUhlaWdodCgpOworICAgICAgICAgICAgcmV0dXJu
IGlubGluZUZvcm1hdHRpbmdRdWlya3MoKS5pbml0aWFsTGluZUhlaWdodCgpOwogICAgICAgICB9
KCk7CiAgICAgICAgIGF1dG8gaW5pdGlhbExpbmVDb25zdHJhaW50cyA9IElubGluZVJlY3QgeyBs
aW5lTG9naWNhbFRvcCwgY29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dpY2FsTGVmdCwgY29uc3Ry
YWludHMuaG9yaXpvbnRhbC5sb2dpY2FsV2lkdGgsIGluaXRpYWxMaW5lSGVpZ2h0IH07CiAgICAg
ICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KG5l
ZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGVhZGluZ0xvZ2lj
YWxXaWR0aCwgaW5pdGlhbExpbmVDb25zdHJhaW50cywgaXNGaXJzdExpbmUpOwpAQCAtMjA4LDcg
KzIwOCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5l
SXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6CiAgICAgICAgIGlmICghbGluZUNvbnRl
bnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdl
LnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5lbmQpOwogICAgICAgICAgICAgaXNGaXJzdExpbmUg
PSBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gZ2VvbWV0cnkoKS5sb2dpY2Fs
VG9wRm9yTmV4dExpbmUobGluZUNvbnRlbnQsIGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKSwgZmxv
YXRpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gaW5saW5lRm9ybWF0
dGluZ0dlb21ldHJ5KCkubG9naWNhbFRvcEZvck5leHRMaW5lKGxpbmVDb250ZW50LCBsaW5lTG9n
aWNhbFJlY3QuYm90dG9tKCksIGZsb2F0aW5nQ29udGV4dCk7CiAgICAgICAgICAgICBpZiAobGlu
ZUNvbnRlbnQuaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSB7CiAgICAgICAgICAgICAgICAg
Ly8gVGhlIGZpbmFsIGNvbnRlbnQgaGVpZ2h0IG9mIHRoaXMgaW5saW5lIGZvcm1hdHRpbmcgY29u
dGV4dCBzaG91bGQgaW5jbHVkZSB0aGUgY2xlYXJlZCBmbG9hdHMgYXMgd2VsbC4KICAgICAgICAg
ICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0Q2xlYXJHYXBBZnRlckxhc3RMaW5lKGxpbmVMb2dp
Y2FsVG9wIC0gbGluZUxvZ2ljYWxSZWN0LmJvdHRvbSgpKTsKQEAgLTI0OSw3ICsyNDksNyBAQCBJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZEludHJpbnNpY1dpZHRoQ29uc3RyYQogICAgIEFTU0VSVCghZm9ybWF0dGluZ1N0YXRlKCkuaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKIAogICAgIGlmICghcm9vdCgpLmhhc0luRmxvd09y
RmxvYXRpbmdDaGlsZCgpKSB7Ci0gICAgICAgIGF1dG8gY29uc3RyYWludHMgPSBnZW9tZXRyeSgp
LmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IH0pOworICAgICAgICBhdXRvIGNvbnN0
cmFpbnRzID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0
aChyb290KCksIHsgfSk7CiAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMoY29uc3RyYWludHMpOwogICAgICAgICByZXR1cm4gY29uc3RyYWludHM7
CiAgICAgfQpAQCAtMjk2LDcgKzI5Niw3IEBAIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhCiAKICAg
ICBhdXRvIG1pbmltdW1Db250ZW50V2lkdGggPSBjZWlsZWRMYXlvdXRVbml0KG1heGltdW1MaW5l
V2lkdGgoMCkpOwogICAgIGF1dG8gbWF4aW11bUNvbnRlbnRXaWR0aCA9IGNlaWxlZExheW91dFVu
aXQobWF4aW11bUxpbmVXaWR0aChtYXhJbmxpbmVMYXlvdXRVbml0KCkpKTsKLSAgICBhdXRvIGNv
bnN0cmFpbnRzID0gZ2VvbWV0cnkoKS5jb25zdHJhaW5CeU1pbk1heFdpZHRoKHJvb3QoKSwgeyBt
aW5pbXVtQ29udGVudFdpZHRoLCBtYXhpbXVtQ29udGVudFdpZHRoIH0pOworICAgIGF1dG8gY29u
c3RyYWludHMgPSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW5CeU1pbk1heFdp
ZHRoKHJvb3QoKSwgeyBtaW5pbXVtQ29udGVudFdpZHRoLCBtYXhpbXVtQ29udGVudFdpZHRoIH0p
OwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29u
c3RyYWludHMpOwogICAgIHJldHVybiBjb25zdHJhaW50czsKIH0KQEAgLTMyMyw3ICszMjMsNyBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JG
b3JtYXR0aW5nUm9vdChjb25zdCBCb3gmCiB7CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdSb290LmVz
dGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CiAgICAgYXV0byBjb25zdHJhaW50cyA9IElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBn
ZW9tZXRyeSgpLmZpeGVkVmFsdWUoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5sb2dpY2FsV2lkdGgo
KSkpCisgICAgaWYgKGF1dG8gZml4ZWRXaWR0aCA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgp
LmZpeGVkVmFsdWUoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5sb2dpY2FsV2lkdGgoKSkpCiAgICAg
ICAgIGNvbnN0cmFpbnRzID0geyAqZml4ZWRXaWR0aCwgKmZpeGVkV2lkdGggfTsKICAgICBlbHNl
IHsKICAgICAgICAgYXV0byBoYXNJbmZsb3dPckZsb2F0aW5nQ29udGVudCA9IGlzPENvbnRhaW5l
ckJveD4oZm9ybWF0dGluZ1Jvb3QpICYmIGRvd25jYXN0PENvbnRhaW5lckJveD4oZm9ybWF0dGlu
Z1Jvb3QpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpOwpAQCAtMzMyLDE0ICszMzIsMTQgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9y
bWF0dGluZ1Jvb3QoY29uc3QgQm94JgogICAgICAgICBpZiAoaGFzSW5mbG93T3JGbG9hdGluZ0Nv
bnRlbnQgJiYgIXNob3VsZElnbm9yZUNoaWxkQ29udGVudCkKICAgICAgICAgICAgIGNvbnN0cmFp
bnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZG93bmNhc3Q8Q29u
dGFpbmVyQm94Pihmb3JtYXR0aW5nUm9vdCksIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKTsKICAgICB9Ci0gICAgY29uc3RyYWludHMgPSBnZW9tZXRy
eSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsK
KyAgICBjb25zdHJhaW50cyA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbkJ5
TWluTWF4V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKICAgICBjb25zdHJhaW50
cy5leHBhbmQoZ2VvbWV0cnlGb3JCb3goZm9ybWF0dGluZ1Jvb3QpLmhvcml6b250YWxNYXJnaW5C
b3JkZXJBbmRQYWRkaW5nKCkpOwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHNGb3JCb3goZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKIH0KIAog
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKQogewotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gZ2Vv
bWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29u
c3RyYWludHMpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gaW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShs
YXlvdXRCb3gpLnNldEhvcml6b250YWxNYXJnaW4oeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
c3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDAp
IH0pOwogfQogCkBAIC0zNDcsMTEgKzM0NywxMSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiB7
CiAgICAgYXV0byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkg
ewogICAgICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkoKS5mbG9hdGluZ0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlv
dXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkV2lkdGgsIHsgfSB9KTsKKyAgICAg
ICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5mbG9hdGluZ0NvbnRlbnRX
aWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkV2lk
dGgsIHsgfSB9KTsKICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5pbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkV2lkdGgsIHsgfSB9
KTsKKyAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbmxpbmVC
bG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cywgeyB1c2VkV2lkdGgsIHsgfSB9KTsKICAgICAgICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2Vk
Qm94KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5pbmxpbmVSZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLCB7IH0sIHsgdXNlZFdpZHRoLCB7IH0gfSk7CisgICAgICAgICAgICBy
ZXR1cm4gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRDb250ZW50V2lk
dGhBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxD
b25zdHJhaW50cywgeyB9LCB7IHVzZWRXaWR0aCwgeyB9IH0pOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7IH07CiAg
ICAgfTsKQEAgLTM1OSwxMyArMzU5LDEzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKICAgICBh
dXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUoeyB9KTsKIAogICAgIGF1dG8gYXZh
aWxhYmxlV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotICAgIGlm
IChhdXRvIG1heFdpZHRoID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heFdpZHRoKGxheW91dEJveCwg
YXZhaWxhYmxlV2lkdGgpKSB7CisgICAgaWYgKGF1dG8gbWF4V2lkdGggPSBpbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1heFdpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgp
KSB7CiAgICAgICAgIGF1dG8gbWF4V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKG1heFdpZHRoKTsK
ICAgICAgICAgaWYgKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPiBtYXhXaWR0
aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpCiAgICAgICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJn
aW4gPSBtYXhXaWR0aEFuZE1hcmdpbjsKICAgICB9CiAKLSAgICBhdXRvIG1pbldpZHRoID0gZ2Vv
bWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpLnZhbHVl
T3IoMCk7CisgICAgYXV0byBtaW5XaWR0aCA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNv
bXB1dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkudmFsdWVPcigwKTsKICAg
ICBhdXRvIG1pbldpZHRoQW5kTWFyZ2luID0gY29tcHV0ZShtaW5XaWR0aCk7CiAgICAgaWYgKGNv
bnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPCBtaW5XaWR0aEFuZE1hcmdpbi5jb250
ZW50V2lkdGgpCiAgICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IG1pbldpZHRoQW5kTWFy
Z2luOwpAQCAtMzc5LDIzICszNzksMjMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKIHsKICAg
ICBhdXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkgewog
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZ2VvbWV0cnkoKS5mbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAg
IHJldHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5mbG9hdGluZ0NvbnRlbnRIZWlnaHRB
bmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZEhlaWdodCB9
KTsKICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZ2VvbWV0cnkoKS5pbmxpbmVCbG9ja0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5
b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAg
ICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbmxpbmVCbG9ja0NvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZEhl
aWdodCB9KTsKICAgICAgICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkoKS5pbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50
cywgeyB9LCB7IHVzZWRIZWlnaHQgfSk7CisgICAgICAgICAgICByZXR1cm4gaW5saW5lRm9ybWF0
dGluZ0dlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25j
YXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwg
eyB1c2VkSGVpZ2h0IH0pOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4geyB9OwogICAgIH07CiAKICAgICBhdXRvIGNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7Ci0gICAgaWYgKGF1dG8gbWF4SGVp
Z2h0ID0gZ2VvbWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CisgICAgaWYg
KGF1dG8gbWF4SGVpZ2h0ID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRNYXhI
ZWlnaHQobGF5b3V0Qm94KSkgewogICAgICAgICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNv
bXB1dGUobWF4SGVpZ2h0KTsKICAgICAgICAgaWYgKGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29u
dGVudEhlaWdodCA+IG1heEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KQogICAgICAgICAg
ICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IG1heEhlaWdodEFuZE1hcmdpbjsKICAgICB9CiAK
LSAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBnZW9tZXRyeSgpLmNvbXB1dGVkTWluSGVpZ2h0KGxh
eW91dEJveCkpIHsKKyAgICBpZiAoYXV0byBtaW5IZWlnaHQgPSBpbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGF1dG8gbWlu
SGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZShtaW5IZWlnaHQpOwogICAgICAgICBpZiAoY29udGVu
dEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDwgbWluSGVpZ2h0QW5kTWFyZ2luLmNvbnRl
bnRIZWlnaHQpCiAgICAgICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gbWluSGVpZ2h0
QW5kTWFyZ2luOwpAQCAtNDU2LDkgKzQ1Niw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKQogSW5saW5lUmVjdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1
aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdl
b21ldHJ5KCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gdGhpcy0+aW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5KCk7CiAKLSAgICBmb3JtYXR0aW5nU3RhdGUuYWRkTGluZUJveChnZW9t
ZXRyeS5saW5lQm94Rm9yTGluZUNvbnRlbnQobGluZUNvbnRlbnQpKTsKKyAgICBmb3JtYXR0aW5n
U3RhdGUuYWRkTGluZUJveChmb3JtYXR0aW5nR2VvbWV0cnkubGluZUJveEZvckxpbmVDb250ZW50
KGxpbmVDb250ZW50KSk7CiAgICAgY29uc3QgYXV0byYgbGluZUJveCA9IGZvcm1hdHRpbmdTdGF0
ZS5saW5lQm94ZXMoKS5sYXN0KCk7CiAgICAgYXV0byBsaW5lSW5kZXggPSBmb3JtYXR0aW5nU3Rh
dGUubGluZXMoKS5zaXplKCk7CiAgICAgYXV0byYgbGluZUJveExvZ2ljYWxSZWN0ID0gbGluZUJv
eC5sb2dpY2FsUmVjdCgpOwpAQCAtNTI3LDcgKzUyNyw3IEBAIElubGluZVJlY3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVC
dWlsCiAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGlubGluZSBib3hlcyBhcmUgcmVsYXRp
dmUgdG8gdGhlIGxpbmUgYW5kIHRoZWlyIHRvcCBwb3NpdGlvbiBjYW4gYmUgbmVnYXRpdmUuCiAg
ICAgICAgICAgICAgICAgYm9yZGVyQm94TG9naWNhbFRvcExlZnQubW92ZUJ5KGxpbmVCb3hMb2dp
Y2FsUmVjdC50b3BMZWZ0KCkpOwogICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZs
b3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlckJveExvZ2ljYWxUb3BM
ZWZ0ICs9IGdlb21ldHJ5LmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveExv
Z2ljYWxUb3BMZWZ0ICs9IGZvcm1hdHRpbmdHZW9tZXRyeS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRp
b25PZmZzZXQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwogICAgICAgICAgICAg
ICAgIC8vIEF0b21pYyBpbmxpbmUgYm94ZXMgYXJlIGFsbCBzZXQuIFRoZWlyIG1hcmdpbi9ib3Jk
ZXIvY29udGVudCBib3ggZ2VvbWV0cmllcyBhcmUgYWxyZWFkeSBjb21wdXRlZC4gV2UganVzdCBo
YXZlIHRvIHBvc2l0aW9uIHRoZW0gaGVyZS4KICAgICAgICAgICAgICAgICBib3hHZW9tZXRyeS5z
ZXRMb2dpY2FsVG9wTGVmdCh0b0xheW91dFBvaW50KGJvcmRlckJveExvZ2ljYWxUb3BMZWZ0KSk7
CiAKQEAgLTYxMiwxMSArNjEyLDYgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52
YWxpZGF0ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhbHNvIHdoZXJlIHdlIHdvdWxkIGRlbGV0ZSBpbmxpbmUgaXRlbXMgaWYg
dGhlaXIgY29udGVudCBjaGFuZ2VkLgogfQogCi1JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW5s
aW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKLX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAwZjk5ZjlmOTM0ZWM4ZWY1
OTQ0YmZhYjk3Yzc1Y2M3NDQ3ZGE3MmY1Li43ODQ3ZmFkYmU3YzUxNWMwZDdmMmU0MmM4ODRkNzc0
MWM2YjIxODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTI4LDEzICsyOCwxNCBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQogCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nUXVpcmtz
LmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1jbGFz
cyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7
CiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKIGNsYXNzIExpbmVCb3g7CkBAIC01MywxMCArNTQs
MTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBsaW5lTGF5b3V0Rm9ySW50ZXJncmF0aW9uKEludmFs
aWRhdGlvblN0YXRlJiwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jik7CiAKKyAg
ICBjb25zdCBGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OyB9CisgICAgY29uc3QgRm9y
bWF0dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
aW5saW5lRm9ybWF0dGluZ1F1aXJrczsgfQorCiBwcml2YXRlOgotICAgIEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7
CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5JiBpbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdHZW9tZXRyeTsgfQorICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdRdWlya3MmIGlubGluZUZvcm1hdHRpbmdRdWlya3MoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdRdWlya3M7IH0KIAotICAgIElubGluZUZv
cm1hdHRpbmdHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0OworICAgIEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGxpbmVMYXlvdXQoSW5saW5lSXRlbXMmLCBMaW5lQnVpbGRlcjo6SW5saW5lSXRl
bVJhbmdlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKIApAQCAtNzAsNiAr
NzUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgp
OwogICAgIElubGluZVJlY3QgY29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNvbnRlbnQoY29uc3QgTGlu
ZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CiAg
ICAgdm9pZCBpbnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRl
Jik7CisKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgbV9pbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnk7CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1F1aXJrcyBtX2lubGluZUZv
cm1hdHRpbmdRdWlya3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcAppbmRleCA3YjY5NGZmOTRkNzc2ZjMwYmMwZWExNzJjOGY3
ZTIyNmNlOWM5NmZlLi5jODg0NTcxZDExYjVmMTM3NzZhNWJjZDlkYWRhNDJhMWM4ZGQzOTQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAK
QEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb21wdXRlTGluZUJveEhl
aWdodEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHkoTGluZQogICAgIC8vIDIuIENv
bXB1dGUgdGhlIGJhc2VsaW5lL2xvZ2ljYWwgdG9wIHBvc2l0aW9uIG9mIHRoZSByb290IGlubGlu
ZSBib3guIEFsaWduZWQgYm94ZXMgcHVzaCB0aGUgcm9vdCBpbmxpbmUgYm94IGFyb3VuZCBpbnNp
ZGUgdGhlIGxpbmUgYm94LgogICAgIC8vIDMuIEZpbmFsbHkgYWxpZ24gdGhlIGlubGluZSBsZXZl
bCBib3hlcyB1c2luZyAobW9zdGx5KSBub3JtYWwgaW5saW5lIGxldmVsIGJveCBnZW9tZXRyaWVz
LgogICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKLSAg
ICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSB7IGZv
cm1hdHRpbmdDb250ZXh0KCkgfTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSBkb3du
Y2FzdDxJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk+KGZvcm1hdHRpbmdDb250ZXh0KCkuZm9ybWF0
dGluZ0dlb21ldHJ5KCkpOwogCiAgICAgYXV0byBjb21wdXRlTGluZUJveExvZ2ljYWxIZWlnaHQg
PSBbJl0gewogICAgICAgICAvLyBMaW5lIGJveCBoZWlnaHQgY29tcHV0YXRpb24gaXMgYmFzZWQg
b24gdGhlIGxheW91dCBib3VuZHMgb2YgdGhlIGlubGluZSBib3hlcyBhbmQgbm90IHRoZWlyIGxv
Z2ljYWwgKGFzY2VudC9kZXNjZW50KSBkaW1lbnNpb25zLgpAQCAtNjY5LDcgKzY2OSw3IEBAIElu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0CiB7CiB9CiAKLUxpbmVCb3ggSW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5OjpsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50JiBsaW5lQ29udGVudCkKK0xpbmVCb3ggSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpsaW5l
Qm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCkgY29uc3QKIHsKICAgICByZXR1cm4gTGluZUJveEJ1aWxkZXIoZm9ybWF0dGluZ0NvbnRl
eHQoKSkuYnVpbGQobGluZUNvbnRlbnQpOwogfQpAQCAtNzMwLDcgKzczMCw3IEBAIENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjppbmxpbmVCbG9ja0NvbnRl
bnRIZWlnaHRBbmRNYXJnCiBib29sIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lTGV2
ZWxCb3hBZmZlY3RzTGluZUJveChjb25zdCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW5saW5l
TGV2ZWxCb3gsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gpIGNvbnN0CiB7CiAgICAgaWYgKGlubGlu
ZUxldmVsQm94LmlzSW5saW5lQm94KCkgfHwgaW5saW5lTGV2ZWxCb3guaXNMaW5lQnJlYWtCb3go
KSkKLSAgICAgICAgcmV0dXJuIGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkgPyB0cnVl
IDogSW5saW5lRm9ybWF0dGluZ1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCgpKS5pbmxpbmVMZXZl
bEJveEFmZmVjdHNMaW5lQm94KGlubGluZUxldmVsQm94LCBsaW5lQm94KTsKKyAgICAgICAgcmV0
dXJuIGxheW91dFN0YXRlKCkuaW5TdGFuZGFyZHNNb2RlKCkgPyB0cnVlIDogZG93bmNhc3Q8SW5s
aW5lRm9ybWF0dGluZ1F1aXJrcz4oZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nUXVpcmtz
KCkpLmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gp
OwogICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkpIHsKICAg
ICAgICAgaWYgKGlubGluZUxldmVsQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRp
bmdHZW9tZXRyeS5oCmluZGV4IGVmYWZjNGEzMDlkNmE1YzAzYzViN2Q4MmQ5MTlhOWYyYmZkOWRm
ZDcuLjliYzNiZDcwNDg3ZGU0NTA2OTBlNmUxNGNjMjhiNDRiZjc3Mjk1YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZv
cm1hdHRpbmdHZW9tZXRyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0yOCwxNSArMjgs
MTkgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUg
IkZvcm1hdHRpbmdHZW9tZXRyeS5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDsKK2NsYXNzIExpbmVCb3g7CisKIGNsYXNzIElubGluZUZvcm1hdHRp
bmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0cnkgewogcHVibGljOgogICAgIElu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwog
Ci0gICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6Okxp
bmVDb250ZW50Jik7CisgICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGlu
ZUJ1aWxkZXI6OkxpbmVDb250ZW50JikgY29uc3Q7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5saW5l
TGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0NvbnRl
eHQmKSBjb25zdDsKIAogICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tDb250
ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwpAQCAtNTIsNCArNTYs
NiBAQCBwcml2YXRlOgogfQogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9GT1JN
QVRUSU5HX0dFT01FVFJZKElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSwgaXNJbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzLmgKaW5kZXggZDkyN2EwODQ3NDYwODMwNjY5MWNhZjllZjkxYTU1MzRkNzkw
YzA0NC4uODgwNjc3OGNmODUzMzcxZWI1MWE1Njg1MmMzZTUyNWZkNzk5ZTdjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
Rm9ybWF0dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuaApAQCAtNDQsNCArNDQsNiBA
QCBwdWJsaWM6CiB9CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJ
TkdfUVVJUktTKElubGluZUZvcm1hdHRpbmdRdWlya3MsIGlzSW5saW5lRm9ybWF0dGluZ1F1aXJr
cygpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcApp
bmRleCAxNTgwMGIxOGFmNzJhZWE1ZmJhZjk4ODUyMGEyYmRjMzI5Njc2NzkxLi40OTJjYjE5YjEz
MDdlOGFiZGUzMzMwYzEwZGQ2OThkZTZiMDQzYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGlubGluZSBib29s
IGlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmUKICAgICBpZiAoY3VycmVudC5pc0JveCgpIHx8IG5leHQuaXNCb3goKSkgewogICAgICAg
ICBhdXRvIGlzSW1hZ2VDb250ZW50ID0gY3VycmVudC5sYXlvdXRCb3goKS5pc0ltYWdlKCkgfHwg
bmV4dC5sYXlvdXRCb3goKS5pc0ltYWdlKCk7CiAgICAgICAgIGlmIChpc0ltYWdlQ29udGVudCkK
LSAgICAgICAgICAgIHJldHVybiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KS5oYXNTb2Z0V3JhcE9wcG9ydHVuaXR5QXRJbWFnZSgpOworICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdRdWlya3M+KGlubGluZUZvcm1hdHRpbmdD
b250ZXh0LmZvcm1hdHRpbmdRdWlya3MoKSkuaGFzU29mdFdyYXBPcHBvcnR1bml0eUF0SW1hZ2Uo
KTsKICAgICAgICAgLy8gW3RleHRdW2lubGluZSBib3ggc3RhcnRdW2lubGluZSBib3ggZW5kXVtp
bmxpbmUgYm94XSAodGV4dDxzcGFuPjwvc3Bhbj48aW1nPikgOiB0aGVyZSdzIGEgc29mdCB3cmFw
IG9wcG9ydHVuaXR5IGJldHdlZW4gdGhlIFt0ZXh0XSBhbmQgW2ltZ10uCiAgICAgICAgIC8vIFRo
ZSBsaW5lIGJyZWFraW5nIGJlaGF2aW9yIG9mIGEgcmVwbGFjZWQgZWxlbWVudCBvciBvdGhlciBh
dG9taWMgaW5saW5lIGlzIGVxdWl2YWxlbnQgdG8gYW4gaWRlb2dyYXBoaWMgY2hhcmFjdGVyLgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCmluZGV4IDE2Yzg3M2YwYThiNWJkNjc1OGY4MDA2MTZkZjBjNjkyZDYxOTIx
ZGMuLjVkOTVmZGEwNGYxYjExNTUyODA3ZGQ5NTZkNDI0YjhhMjc2MDk0MWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzcsNyArMzcsNiBA
QAogI2luY2x1ZGUgIkxheW91dENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgotI2luY2x1
ZGUgIlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5n
U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC00OSw2ICs0
OCw4IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChUYWJsZUZvcm1hdHRpbmdDb250ZXh0
KTsKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdGFibGVzLTMvI3RhYmxlLWxheW91dC1h
bGdvcml0aG0KIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQo
Y29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIFRhYmxlRm9ybWF0dGlu
Z1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUpCiAgICAgOiBGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0
aW5nQ29udGV4dFJvb3QsIGZvcm1hdHRpbmdTdGF0ZSkKKyAgICAsIG1fdGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZS50YWJsZUdyaWQoKSkKKyAgICAsIG1fdGFi
bGVGb3JtYXR0aW5nUXVpcmtzKCp0aGlzKQogewogfQogCkBAIC0xNzMsMTMgKzE3NCwxMyBAQCB2
b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvclJvd3MoTGF5b3V0
VW5pdCBhdmFpbGFibGVIb3Jpem9udAogICAgICAgICBhdXRvJiByb3dCb3ggPSByb3cuYm94KCk7
CiAgICAgICAgIGF1dG8mIHJvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2Vv
bWV0cnkocm93Qm94KTsKIAotICAgICAgICByb3dCb3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21l
dHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHJvd0JveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7
CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldFBhZGRpbmcodGFibGVGb3JtYXR0aW5nR2VvbWV0
cnkoKS5jb21wdXRlZFBhZGRpbmcocm93Qm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsK
ICAgICAgICAgLy8gSW50ZXJuYWwgdGFibGUgZWxlbWVudHMgZG8gbm90IGhhdmUgbWFyZ2lucy4K
ICAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwogICAgICAg
ICByb3dCb3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IH0pOwogCiAgICAgICAgIGF1dG8g
Y29tcHV0ZWRSb3dCb3JkZXIgPSBbJl0gewotICAgICAgICAgICAgYXV0byBib3JkZXIgPSBnZW9t
ZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd0JveCk7CisgICAgICAgICAgICBhdXRvIGJvcmRlciA9
IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93Qm94KTsKICAgICAg
ICAgICAgIGlmICghZ3JpZC5jb2xsYXBzZWRCb3JkZXIoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gYm9yZGVyOwogICAgICAgICAgICAgLy8gQm9yZGVyIGNvbGxhcHNpbmcgZGVsZWdhdGVzIGJv
cmRlcnMgdG8gdGFibGUvY2VsbHMuCkBAIC0yODAsMTMgKzI4MSwxMyBAQCB2b2lkIFRhYmxlRm9y
bWF0dGluZ0NvbnRleHQ6OmxheW91dENlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBM
YXlvdXRVbml0CiB7CiAgICAgQVNTRVJUKGNlbGwuYm94KCkuZXN0YWJsaXNoZXNCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0KCkpOwogCi0gICAgYXV0byBnZW9tZXRyeSA9IHRoaXMtPmdlb21ldHJ5KCk7
CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gdGFibGVGb3JtYXR0aW5nR2VvbWV0cnko
KTsKICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCk7CiAgICAg
YXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CiAgICAgYXV0byYgY2VsbEJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2VsbEJveCk7CiAKLSAgICBjZWxsQm94R2Vv
bWV0cnkuc2V0Qm9yZGVyKGdlb21ldHJ5LmNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKSk7Ci0gICAg
Y2VsbEJveEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkuY29tcHV0ZWRQYWRkaW5nKGNlbGxC
b3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOworICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRC
b3JkZXIoZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKSk7CisgICAg
Y2VsbEJveEdlb21ldHJ5LnNldFBhZGRpbmcoZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkUGFk
ZGluZyhjZWxsQm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKICAgICAvLyBJbnRlcm5h
bCB0YWJsZSBlbGVtZW50cyBkbyBub3QgaGF2ZSBtYXJnaW5zLgogICAgIGNlbGxCb3hHZW9tZXRy
eS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7CiAgICAgY2VsbEJveEdlb21ldHJ5LnNldFZlcnRp
Y2FsTWFyZ2luKHsgfSk7CkBAIC0zMDMsNyArMzA0LDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0OjpsYXlvdXRDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0VW5p
dAogICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlU3BhY2VG
b3JDb250ZW50KTsKIAogICAgIGlmIChjZWxsQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgp
KSB7Ci0gICAgICAgIGF1dG8gY29uc3RyYWludHNGb3JDZWxsQ29udGVudCA9IGdlb21ldHJ5LmNv
bnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjZWxsQm94KTsKKyAgICAgICAgYXV0byBjb25zdHJh
aW50c0ZvckNlbGxDb250ZW50ID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbnN0cmFpbnRzRm9ySW5G
bG93Q29udGVudChjZWxsQm94KTsKICAgICAgICAgY29uc3RyYWludHNGb3JDZWxsQ29udGVudC52
ZXJ0aWNhbC5sb2dpY2FsSGVpZ2h0ID0gYXZhaWxhYmxlVmVydGljYWxTcGFjZUZvckNvbnRlbnQ7
CiAgICAgICAgIGF1dG8gaW52YWxpZGF0aW9uU3RhdGUgPSBJbnZhbGlkYXRpb25TdGF0ZSB7IH07
CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBwYXJ0IG9mIHRoZSBp
bnZhbGlkYXRpb24gc3RhdGUgdG8gaW5kaWNhdGUgd2hlbiB3ZSByZS1sYXlvdXQgdGhlIGNlbGwK
QEAgLTMxMiw4ICszMTMsOCBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dENl
bGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBMYXlvdXRVbml0CiAgICAgICAgIGZsb2F0
aW5nU3RhdGVGb3JDZWxsQ29udGVudC5jbGVhcigpOwogICAgICAgICBMYXlvdXRDb250ZXh0Ojpj
cmVhdGVGb3JtYXR0aW5nQ29udGV4dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+bGF5b3V0SW5G
bG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgY29uc3RyYWludHNGb3JDZWxsQ29udGVudCk7
CiAgICAgfQotICAgIGF1dG8gY29udGVudEJveEhlaWdodCA9IGdlb21ldHJ5LmNlbGxCb3hDb250
ZW50SGVpZ2h0KGNlbGxCb3gpOwotICAgIGlmIChhdXRvIGNvbXB1dGVkSGVpZ2h0ID0gZ2VvbWV0
cnkuY29tcHV0ZWRIZWlnaHQoY2VsbEJveCkpIHsKKyAgICBhdXRvIGNvbnRlbnRCb3hIZWlnaHQg
PSBmb3JtYXR0aW5nR2VvbWV0cnkuY2VsbEJveENvbnRlbnRIZWlnaHQoY2VsbEJveCk7CisgICAg
aWYgKGF1dG8gY29tcHV0ZWRIZWlnaHQgPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRIZWln
aHQoY2VsbEJveCkpIHsKICAgICAgICAgYXV0byBoZWlnaHRVc2VzQm9yZGVyQm94ID0gbGF5b3V0
U3RhdGUoKS5pblF1aXJrc01vZGUoKSB8fCBjZWxsQm94LnN0eWxlKCkuYm94U2l6aW5nKCkgPT0g
Qm94U2l6aW5nOjpCb3JkZXJCb3g7CiAgICAgICAgIGlmIChoZWlnaHRVc2VzQm9yZGVyQm94KQog
ICAgICAgICAgICAgKmNvbXB1dGVkSGVpZ2h0IC09IGNlbGxCb3hHZW9tZXRyeS52ZXJ0aWNhbE1h
cmdpbkJvcmRlckFuZFBhZGRpbmcoKTsKQEAgLTQwNyw3ICs0MDgsNyBAQCBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlZmVycmVkV2lk
dGhGb3JDb2x1bQogCiAgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGggPSBmb3JtYXR0aW5nU3Rh
dGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjZWxsQm94KTsKICAgICAgICAgaWYg
KCFpbnRyaW5zaWNXaWR0aCkgewotICAgICAgICAgICAgaW50cmluc2ljV2lkdGggPSBnZW9tZXRy
eSgpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JDZWxsKCpjZWxsKTsKKyAgICAgICAgICAg
IGludHJpbnNpY1dpZHRoID0gdGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzRm9yQ2VsbCgqY2VsbCk7CiAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUu
c2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChjZWxsQm94LCAqaW50cmluc2ljV2lk
dGgpOwogICAgICAgICB9CiAgICAgICAgIC8vIFNwYW5uZXIgY2VsbHMgcHV0IHRoZWlyIGludHJp
bnNpYyB3aWR0aHMgb24gdGhlIGluaXRpYWwgc2xvdHMuCkBAIC00MjYsNyArNDI3LDcgQEAgSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFBy
ZWZlcnJlZFdpZHRoRm9yQ29sdW0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChhdXRv
IHdpZHRoID0gY29sdW1uQm94LT5jb2x1bW5XaWR0aCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biB3aWR0aDsKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkQ29sdW1uV2lk
dGgoKmNvbHVtbkJveCk7CisgICAgICAgICAgICByZXR1cm4gdGFibGVGb3JtYXR0aW5nR2VvbWV0
cnkoKS5jb21wdXRlZENvbHVtbldpZHRoKCpjb2x1bW5Cb3gpOwogICAgICAgICB9OwogICAgICAg
ICBmaXhlZFdpZHRoQ29sdW1ucy5hcHBlbmQoZml4ZWRXaWR0aCgpKTsKICAgICB9CkBAIC01MTgs
NyArNTE5LDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlzdHJp
YnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGUKICAgICAgICAgICAgIC8vIFRoZSBt
aW5pbXVtIGhlaWdodCBvZiBhIHJvdyAod2l0aG91dCBzcGFubmluZy1yZWxhdGVkIGhlaWdodCBk
aXN0cmlidXRpb24pIGlzIGRlZmluZWQgYXMgdGhlIGhlaWdodCBvZiBhbiBoeXBvdGhldGljYWwK
ICAgICAgICAgICAgIC8vIGxpbmVib3ggY29udGFpbmluZyB0aGUgY2VsbHMgb3JpZ2luYXRpbmcg
aW4gdGhlIHJvdy4KICAgICAgICAgICAgIGF1dG8mIGNlbGwgPSBzbG90LmNlbGwoKTsKLSAgICAg
ICAgICAgIGNlbGwuc2V0QmFzZWxpbmUoZ2VvbWV0cnkoKS51c2VkQmFzZWxpbmVGb3JDZWxsKGNl
bGwuYm94KCkpKTsKKyAgICAgICAgICAgIGNlbGwuc2V0QmFzZWxpbmUodGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkoKS51c2VkQmFzZWxpbmVGb3JDZWxsKGNlbGwuYm94KCkpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNTMzLDExICs1MzQsNiBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZQogICAg
IH0KIH0KIAotVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
Z2VvbWV0cnkoKSBjb25zdAotewotICAgIHJldHVybiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgq
dGhpcywgZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCkpOwotfQotCiB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFi
bGVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggYjA4YTg3N2ExZDBi
OGQ2YWU2NWVkMjNlMWQ5NjZlYzkxYTE5YmZhNS4uZjNkMTQxMDc1MTBkZTQzNDIyNGYwMDFiZTdl
ZjMyZjk2YjMyZjQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTI4LDYgKzI4LDggQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIAogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiVGFibGVG
b3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdRdWlya3MuaCIK
ICNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlRhYmxlR3JpZC5o
IgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KQEAgLTM3LDcgKzM5LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEludmFsaWRhdGlvblN0YXRl
OwotY2xhc3MgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVt
ZW50cyB0aGUgbGF5b3V0IGxvZ2ljIGZvciB0YWJsZSBmb3JtYXR0aW5nIGNvbnRleHRzLgogLy8g
aHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3RhYmxlcy5odG1sCkBAIC00OCw2ICs0OSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUm
LCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKSBvdmVycmlkZTsKICAgICBMYXlv
dXRVbml0IHVzZWRDb250ZW50SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICBjb25zdCBG
b3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fdGFibGVGb3JtYXR0aW5nR2VvbWV0cnk7IH0KKyAgICBjb25zdCBGb3JtYXR0aW5nUXVp
cmtzJiBmb3JtYXR0aW5nUXVpcmtzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90YWJsZUZvcm1h
dHRpbmdRdWlya3M7IH0KKwogICAgIHN0YXRpYyBVbmlxdWVSZWY8VGFibGVHcmlkPiBlbnN1cmVU
YWJsZUdyaWQoY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCk7CiAKIHByaXZhdGU6CkBAIC03
Nyw5ICs4MSwxMyBAQCBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29t
cHV0ZWRQcmVmZXJyZWRXaWR0aEZvckNvbHVtbnMoKTsKICAgICB2b2lkIGNvbXB1dGVBbmREaXN0
cmlidXRlRXh0cmFTcGFjZShMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSwgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlVmVydGljYWxTcGFjZSk7CiAKLSAgICBUYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0OwogICAgIGNvbnN0IFRhYmxlRm9ybWF0
dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJs
ZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsg
fQogICAgIFRhYmxlRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBk
b3duY2FzdDxUYWJsZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRp
bmdTdGF0ZSgpKTsgfQorICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5JiB0YWJsZUZv
cm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVGb3JtYXR0aW5nR2VvbWV0
cnk7IH0KKyAgICBjb25zdCBUYWJsZUZvcm1hdHRpbmdRdWlya3MmIHRhYmxlRm9ybWF0dGluZ1F1
aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVGb3JtYXR0aW5nUXVpcmtzOyB9CisKKyAgICBj
b25zdCBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSBtX3RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Owor
ICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ1F1aXJrcyBtX3RhYmxlRm9ybWF0dGluZ1F1aXJrczsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaApp
bmRleCAxZTNlMjU1NTJmZmZkYTBhNjg3ZWE5YTc1MWZkOGVhMGNmMzRkMGQ5Li5hZDJiYjEwYWQy
MzlhMGI3NzY3MGEzODM5ZTQ1Yjc4ZTczOGQ5ZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9U
YWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0yOCwxMCArMjgsMTMgQEAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIlRhYmxlR3JpZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1l
c3BhY2UgTGF5b3V0IHsKIAorY2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4dDsKKwogY2xhc3Mg
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1
YmxpYzoKICAgICBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0JiwgY29uc3QgVGFibGVHcmlkJik7CkBAIC01MCw0ICs1Myw2IEBAIHByaXZhdGU6CiB9
CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJTkdfR0VPTUVUUlko
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnksIGlzVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKSkKKwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaAppbmRleCBi
YWIzZTRmNmIyZDJiYzkyMGU5NGVkZWIzMzRiMGJlNjYzZDVlOTA1Li44MzU5MTA2NzQ5N2YwZDdi
ZjE1NTZlNTFlMDE2MThkNTRjNzE3NWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nUXVpcmtzLmgKQEAgLTQyLDQgKzQyLDYgQEAgcHVibGljOgogfQogfQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9GT1JNQVRUSU5HX1FVSVJLUyhUYWJsZUZvcm1hdHRpbmdR
dWlya3MsIGlzVGFibGVGb3JtYXR0aW5nUXVpcmtzKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlTGF5b3V0LmNwcAppbmRleCA2ZjM1ODIwYjZmZGM5ZmEyNzk5YzVjMTU2ZTU3MmJhODJhOThi
NDM4Li5kMjE2Y2U1Y2VjNjNlNGYyMjM5Y2Y1ZTgxMmExMzRjY2NhMmZmZjI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5
b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlTGF5b3V0LmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6OlRhYmxlTGF5b3V0OjpEaXN0cmlidXRlZFNwYWNlcyBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpUCiAgICAgICAgIGF1dG8gbWF4aW11bUNvbHVtbkFzY2VudCA9IElubGluZUxheW91dFVu
aXQgeyB9OwogICAgICAgICBhdXRvIG1heGltdW1Db2x1bW5EZXNjZW50ID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07CiAgICAgICAgIC8vIEluaXRpYWwgbWluaW11bSBoZWlnaHQgaXMgdGhlIGNvbXB1
dGVkIGhlaWdodCBpZiBhdmFpbGFibGUgPHRyIHN0eWxlPSJoZWlnaHQ6IDEwMHB4Ij48dGQ+PC90
ZD48L3RyPgotICAgICAgICByb3dIZWlnaHRbcm93SW5kZXhdID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4XS5ib3goKSwg
YXZhaWxhYmxlVmVydGljYWxTcGFjZSkudmFsdWVPcigwX2x1KTsKKyAgICAgICAgcm93SGVpZ2h0
W3Jvd0luZGV4XSA9IGZvcm1hdHRpbmdDb250ZXh0KCkudGFibGVGb3JtYXR0aW5nR2VvbWV0cnko
KS5jb21wdXRlZEhlaWdodChyb3dzLmxpc3QoKVtyb3dJbmRleF0uYm94KCksIGF2YWlsYWJsZVZl
cnRpY2FsU3BhY2UpLnZhbHVlT3IoMF9sdSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvbHVtbklu
ZGV4ID0gMDsgY29sdW1uSW5kZXggPCBjb2x1bW5zLnNpemUoKTsgKytjb2x1bW5JbmRleCkgewog
ICAgICAgICAgICAgYXV0byYgc2xvdCA9ICptX2dyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJ
bmRleCB9KTsKICAgICAgICAgICAgIGlmIChzbG90LmlzUm93U3Bhbm5lZCgpKQpAQCAtMzAxLDcg
KzMwMSw3IEBAIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlTGF5b3V0OjpEaXN0cmlidXRl
ZFNwYWNlcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUCiAgICAgICAgIGlmIChzbG90Lmhhc1Jv
d1NwYW4oKSkKICAgICAgICAgICAgIHJldHVybiBHcmlkU3BhY2UgeyBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KHNsb3QuY2VsbCgpLmJveCgpKS5ib3JkZXJCb3hIZWlnaHQoKSwg
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChzbG90LmNlbGwoKS5ib3goKSkuYm9y
ZGVyQm94SGVpZ2h0KCkgfTsKICAgICAgICAgYXV0byYgcm93cyA9IG1fZ3JpZC5yb3dzKCk7Ci0g
ICAgICAgIGF1dG8gY29tcHV0ZWRSb3dIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21l
dHJ5KCkuY29tcHV0ZWRIZWlnaHQocm93cy5saXN0KClbcm93SW5kZXhdLmJveCgpLCB7IH0pOwor
ICAgICAgICBhdXRvIGNvbXB1dGVkUm93SGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS50YWJs
ZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4
XS5ib3goKSwgeyB9KTsKICAgICAgICAgYXV0byBoZWlnaHQgPSBzdGQ6Om1heDxmbG9hdD4ocm93
SGVpZ2h0W3Jvd0luZGV4XSwgY29tcHV0ZWRSb3dIZWlnaHQudmFsdWVPcigwX2x1KSk7CiAgICAg
ICAgIHJldHVybiBHcmlkU3BhY2UgeyBoZWlnaHQsIGhlaWdodCB9OwogICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
SW5saW5lQ29udGVudEJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCmluZGV4IGM2NmI0
M2M0ZTA0NDE3YjA3MTg5NzM2YWQzN2NlNDllZjNlZTc2MmUuLjRmZjdjM2QwZTdmMGI4OTk0OThi
MTZiZGFiZjcxOTRlNjA5YmU4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25Jbmxp
bmVDb250ZW50QnVpbGRlci5jcHAKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIElubGluZUNvbnRl
bnRCdWlsZGVyOjpjcmVhdGVEaXNwbGF5TGluZXMoY29uc3QgTGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nU3RhdAogdm9pZCBJbmxpbmVDb250ZW50QnVpbGRlcjo6Y3JlYXRlRGlzcGxheU5vblJvb3RJ
bmxpbmVCb3hlcyhjb25zdCBMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCwgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCkgY29uc3QKIHsK
ICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSA9
IExheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5IHsgaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQgfTsKKyAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgPSBkb3duY2FzdDxMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeT4oaW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZm9y
bWF0dGluZ0dlb21ldHJ5KCkpOwogICAgIGZvciAoc2l6ZV90IGxpbmVJbmRleCA9IDA7IGxpbmVJ
bmRleCA8IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKS5zaXplKCk7ICsrbGluZUlu
ZGV4KSB7CiAgICAgICAgIGF1dG8mIGxpbmVCb3ggPSBpbmxpbmVGb3JtYXR0aW5nU3RhdGUubGlu
ZUJveGVzKClbbGluZUluZGV4XTsKICAgICAgICAgaWYgKCFsaW5lQm94Lmhhc0lubGluZUJveCgp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429461</attachid>
            <date>2021-05-23 07:06:27 -0700</date>
            <delta_ts>2021-05-24 12:59:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226150-20210523070626.patch</filename>
            <type>text/plain</type>
            <size>50449</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQ3ZTA1M2Y0OThkZDA3
NDk1ZGQyNTljNGU2NThhNDgxNmIwZWEyMS4uMzA5MWE2MWU1Y2Y4NjRiYmY0ZWE2MWY3Y2NiZDUw
ODc1NjYyOWYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAyMS0wNS0yMiAgQWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQg
Zm9yIGdlb21ldHJ5L3F1aXJrcyB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBlbmFibGVzIHVzIHRvIG92ZXJyaWRl
IHF1aXJrcy9nZW9tZXRyeSBmdW5jdGlvbmFsaXR5IGF0IHRoZSBzdWJjbGFzc2VzLgorCisgICAg
ICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZG
bG93SG9yaXpvbnRhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dE91dE9mRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6cXVpcmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0
VmFsdWUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdHZW9t
ZXRyeTo6aXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdHZW9tZXRyeTo6aXNJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnk6Omlz
RmxleEZvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdHZW9tZXRyeTo6aXNUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ1F1aXJrczo6aGVpZ2h0VmFsdWVP
Zk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQgY29uc3QpOgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nUXVpcmtzOjppc0Jsb2NrRm9ybWF0dGluZ1F1aXJr
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdRdWlya3M6Omlz
SW5saW5lRm9ybWF0dGluZ1F1aXJrcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdRdWlya3M6OmlzVGFibGVGb3JtYXR0aW5nUXVpcmtzIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25l
ZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpvbnRhbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhB
bmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2Vv
bWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpibG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmJsb2NrRm9ybWF0dGluZ1F1aXJrcyBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hl
ZEluRmxvd0hlaWdodElmQXBwbGljYWJsZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaDoKKyAgICAgICAgKiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRhYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFu
ZFBhZGRpbmdGb3JUYWJsZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3Jh
cHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxl
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94KToKKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBw
ZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVp
cmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyUXVpcmtzOjpv
dmVycmlkZGVuVGFibGVIZWlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0
dGluZ0NvbnRleHQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZv
cm1hdHRpbmdHZW9tZXRyeS5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dEluRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZVdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5l
Qm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6bGluZUJveEZvckxpbmVD
b250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpsaW5lQm94Rm9yTGlu
ZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oOgorICAgICAgICAqIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuaDoKKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KToKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yUm93cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dENlbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaDoKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVM
YXlvdXQ6OmRpc3RyaWJ1dGVkVmVydGljYWxTcGFjZSk6CisgICAgICAgICogbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnRCdWlsZGVyOjpjcmVh
dGVEaXNwbGF5Tm9uUm9vdElubGluZUJveGVzIGNvbnN0KToKKwogMjAyMS0wNS0yMyAgQWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gUmVuYW1lIHRoZSBnZW9t
ZXRyeSgpIGhlbHBlcnMgdG8gZm9ybWF0dGluZ0dlb21ldHJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29u
dGV4dC5jcHAKaW5kZXggNTQ3N2JkYTY0MGRmYjUwMDI5MzAxZjM4NjViOTRhYTVjYTAzNmVkYS4u
ZWEzMDg0MzFmYTQxM2M3MTg5NDM4ZmQ4MzgxYWNlZTg3NjczOWYzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dC5jcHAKQEAgLTI3MiwxNiArMjcyLDYgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4
dDo6Y29sbGVjdE91dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQogICAgIH0KIH0KIAotRm9y
bWF0dGluZ0dlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkoKSBj
b25zdAotewotICAgIHJldHVybiBGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOwotfQotCi1Gb3Jt
YXR0aW5nUXVpcmtzIEZvcm1hdHRpbmdDb250ZXh0OjpxdWlya3MoKSBjb25zdAotewotICAgIHJl
dHVybiBGb3JtYXR0aW5nUXVpcmtzKCp0aGlzKTsKLX0KLQogI2lmbmRlZiBOREVCVUcKIHZvaWQg
Rm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVyTGF5b3V0
KCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA3MzQ0MzgwZTkzNjkxZWI5
NDE4Yjc3NTMxOWVjMWYzYWQ0YTBmYmE4Li5kNGNkN2MyMTFkZDEwNTRlNWExOGY0NjViMzhhYTc5
MTlhYmJjODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC02MSw2ICs2MSw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiAqbV9y
b290OyB9CiAgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7CiAgICAgY29uc3Qg
Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1h
dHRpbmdTdGF0ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBGb3JtYXR0aW5n
UXVpcmtzJiBmb3JtYXR0aW5nUXVpcmtzKCkgY29uc3QgPSAwOwogCiAgICAgZW51bSBjbGFzcyBF
c2NhcGVSZWFzb24gewogICAgICAgICBUYWJsZVF1aXJrTmVlZHNHZW9tZXRyeUZyb21Fc3RhYmxp
c2hlZEZvcm1hdHRpbmdDb250ZXh0LApAQCAtOTEsOSArOTMsNiBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB1c2luZyBMYXlvdXRRdWV1ZSA9IFZlY3Rvcjxjb25zdCBCb3gqPjsKIHByaXZhdGU6Ci0gICAg
Rm9ybWF0dGluZ0dlb21ldHJ5IGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0OwotICAgIEZvcm1h
dHRpbmdRdWlya3MgcXVpcmtzKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNvbGxlY3RPdXRPZkZsb3dE
ZXNjZW5kYW50c0lmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlT3V0T2ZGbG93VmVydGljYWxH
ZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQm
KTsKICAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94
JiwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50Jik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdHZW9tZXRyeS5jcHAKaW5kZXggMzg4NmVmYzY2OWZlYjM3ZTk1ODM1YWE2NDFiNWFjOGM0Yzg2
MDY4NS4uMzA2ZjYwNjNiZjYxZjY4M2IzODk5NTY0OWM0OTdkZWViMTcxNWYwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtODEsNyArODEsNyBAQCBPcHRpb25hbDxMYXlvdXRV
bml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUoY29uc3QgQm94JiBs
YXlvdXRCbwogCiAgICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpIHsKICAgICAgICAgaWYg
KGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCi0gICAgICAgICAgICBjb250YWluaW5nQmxv
Y2tIZWlnaHQgPSBGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdDb250ZXh0KCkpLmhlaWdodFZh
bHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGxheW91dEJveCk7Cisg
ICAgICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmZv
cm1hdHRpbmdRdWlya3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhG
aXhlZEhlaWdodChsYXlvdXRCb3gpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGF1dG8g
bm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9m
IGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdy
YXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4
IGVmNzAyMWU3NDM0MDE1M2JmYjE0MDZkNmI3MDMxYTU4MTIxNzI3OWMuLmFiNzlhZmI0Y2RmZjYy
MjFmMDE5ZTczMmYwYmY0MDE2MjRiMGFkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaApA
QCAtODksNiArODksMTEgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkSGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9j
a0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
Y29tcHV0ZWRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRo
KSBjb25zdDsKIAorICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsg
cmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuaXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCk7IH0K
KyAgICBib29sIGlzSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gZm9y
bWF0dGluZ0NvbnRleHQoKS5pc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KKyAgICBib29s
IGlzRmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250
ZXh0KCkuaXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNUYWJsZUZvcm1h
dHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuaXNUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQubGF5
b3V0U3RhdGUoKTsgfQogICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTEyMCw0ICsx
MjUsOSBAQCBwcml2YXRlOgogfQogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TEFZT1VUX0ZPUk1BVFRJTkdfR0VPTUVUUlkoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0OjpUb1ZhbHVlVHlw
ZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSkgeyByZXR1cm4gZm9ybWF0dGlu
Z0dlb21ldHJ5LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKaW5kZXggYjllN2ZiZDU4NWU4ZThlY2Jk
MDQxYzAzMWUwMjNkMDRkODg1N2ExZi4uNGJkOTZiMTAwZWQzMmMwOTc2MzhiYzQ2MDFlNjRmZTRj
OGZjZGI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwCkBAIC01NSw4ICs1NSw3IEBAIExh
eW91dFVuaXQgRm9ybWF0dGluZ1F1aXJrczo6aGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5n
QmxvY2tXaXRoRml4ZWRIZWlnaHQoCiAgICAgICAgIC8vIElmIHRoZSBvbmx5IGZpeGVkIHZhbHVl
IGJveCB3ZSBmaW5kIGlzIHRoZSBJQ0IsIHRoZW4gaWdub3JlIHRoZSBib2R5IGFuZCB0aGUgZG9j
dW1lbnQgKHZlcnRpY2FsKSBtYXJnaW4sIHBhZGRpbmcgYW5kIGJvcmRlci4gU28gbXVjaCBxdWly
a2luZXNzLgogICAgICAgICAvLyAtYW5kIGl0J3MgdG90YWxseSBpbnNhbmUgYmVjYXVzZSBub3cg
d2UgZnJlZWx5IHRyYXZlbCBhY3Jvc3MgZm9ybWF0dGluZyBjb250ZXh0IGJvdW5kYXJpZXMgYW5k
IGNvbXB1dGVkIG1hcmdpbnMgYXJlIG5vbmV4aXN0ZW50LgogICAgICAgICBpZiAoY29udGFpbmlu
Z0Jsb2NrLT5pc0JvZHlCb3goKSB8fCBjb250YWluaW5nQmxvY2stPmlzRG9jdW1lbnRCb3goKSkg
ewotCi0gICAgICAgICAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IEZvcm1hdHRpbmdHZW9t
ZXRyeSB7IGZvcm1hdHRpbmdDb250ZXh0IH07CisgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5n
R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nR2VvbWV0cnkoKTsKICAgICAg
ICAgICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNv
bnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9j
aygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpGaW5kRml4ZWRIZWlnaHRBbmNl
c3RvclF1aXJrKS5ob3Jpem9udGFsOwogICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbE1hcmdpbiA9
IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKCpjb250YWluaW5nQmxv
Y2ssIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmgKaW5kZXgg
MzNmMGQ4MjQxMmJhNWViOWY5OTRmOGU5NmVjODA3ZjI5MzA2YTA5MS4uZDU3ODIwM2I3MDRiOTA4
MjcxNDM3YTU1ZGU2ZDg0Njc3ODllNTY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTM4
LDYgKzM4LDEwIEBAIHB1YmxpYzoKIAogICAgIExheW91dFVuaXQgaGVpZ2h0VmFsdWVPZk5lYXJl
c3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQoY29uc3QgQm94JikgY29uc3Q7CiAKKyAg
ICBib29sIGlzQmxvY2tGb3JtYXR0aW5nUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGlu
Z0NvbnRleHQoKS5pc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNJbmxp
bmVGb3JtYXR0aW5nUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5p
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KKyAgICBib29sIGlzVGFibGVGb3JtYXR0aW5n
UXVpcmtzKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5pc1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0
ZSgpOyB9CiAgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQpAQCAtNDgsNCArNTIsOSBAQCBw
cm90ZWN0ZWQ6CiB9CiB9CiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MQVlPVVRf
Rk9STUFUVElOR19RVUlSS1MoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0OjpUb1ZhbHVlVHlwZU5hbWUpIFwK
KyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
UXVpcmtzJiBmb3JtYXR0aW5nUXVpcmtzKSB7IHJldHVybiBmb3JtYXR0aW5nUXVpcmtzLnByZWRp
Y2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggZjNmYWY3NzA4
NTNmNmQ5YjA3NzA5YTU0Nzc4MzQ3Y2Q4YTczMjllZC4uMGQ5ZDljYjVkNTVmNDllNjg4NmJiODI5
YWIzMDZhMmNmY2ZhZjBkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHQuY3BwCkBAIC01Miw2ICs1Miw4IEBAIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KTsKIAogQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dChjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0
Um9vdCwgQmxvY2tGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSkKICAgICA6IEZvcm1h
dHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgZm9ybWF0dGluZ1N0YXRlKQorICAg
ICwgbV9ibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgqdGhpcykKKyAgICAsIG1fYmxvY2tGb3JtYXR0
aW5nUXVpcmtzKCp0aGlzKQogewogfQogCkBAIC0yODYsNyArMjg4LDcgQEAgdm9pZCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckJveEFuZEFuY2Vz
dG9ycyhjb25zdAogICAgIC8vCiAgICAgLy8gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGFzIGxvbmcg
YXMgd2UgZG9uJ3QgY3Jvc3MgdGhlIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBib3VuZGFyeSwg
d2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJlLWNvbXB1dGUgdGhlIGZpbmFsIHRvcCBwb3NpdGlvbi4K
ICAgICAvLyBGSVhNRTogd2UgY3VycmVudGx5IGRvbid0IGFjY291bnQgZm9yIHRoZSAiY2xlYXIi
IHByb3BlcnR5IHdoZW4gY29tcHV0aW5nIHRoZSBmaW5hbCBwb3NpdGlvbiBmb3IgYW4gYW5jZXN0
b3IuCi0gICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5KCk7CiAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3g7IGFuY2VzdG9yICYm
IGFuY2VzdG9yICE9ICZyb290KCk7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxv
Y2soKSkgewogICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9yQW5jZXN0b3IgPSBbJl0gewogICAg
ICAgICAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9j
aygpOwpAQCAtNjAyLDExICs2MDQsNiBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnVw
ZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nKGNvbnN0IEJveCYgbGF5bwogICAgIH0K
IH0KIAotQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Ymxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdAotewotICAgIHJldHVybiBCbG9ja0Zvcm1hdHRp
bmdHZW9tZXRyeSB7ICp0aGlzIH07Ci19Ci0KIEJsb2NrTWFyZ2luQ29sbGFwc2UgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6bWFyZ2luQ29sbGFwc2UoKSBjb25zdAogewogICAgIHJldHVybiBCbG9j
a01hcmdpbkNvbGxhcHNlIHsgbGF5b3V0U3RhdGUoKSwgZm9ybWF0dGluZ1N0YXRlKCkgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2sv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggNzcxOWU0NTEw
MGVjM2MzZjY4NjNmYzVkNjlmMDMzMTk0NjAxZGRkYi4uMjdmOWUzYjU5ZGI0ZmIzN2IyMDA4NWEx
M2IwZjBiY2NmZDE3YWRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdD
b250ZXh0LmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQogCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNs
dWRlICJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KQEAgLTM5LDcgKzQxLDYgQEAgY2xhc3MgTGF5b3V0VW5pdDsKIG5hbWVzcGFjZSBM
YXlvdXQgewogCiBjbGFzcyBCb3g7Ci1jbGFzcyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTsKIGNs
YXNzIEJsb2NrTWFyZ2luQ29sbGFwc2U7CiBjbGFzcyBGbG9hdGluZ0NvbnRleHQ7CiAKQEAgLTU0
LDYgKzU1LDggQEAgcHVibGljOgogICAgIExheW91dFVuaXQgdXNlZENvbnRlbnRIZWlnaHQoKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxCbG9ja0Zvcm1hdHRpbmdTdGF0ZT4o
Rm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQorICAgIGNvbnN0IEZvcm1h
dHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9ibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTsgfQorICAgIGNvbnN0IEZvcm1hdHRpbmdRdWlya3Mm
IGZvcm1hdHRpbmdRdWlya3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Jsb2NrRm9ybWF0dGlu
Z1F1aXJrczsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IENvbnN0cmFpbnRzUGFpciB7CkBA
IC04MCwxNiArODMsMjAgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBkYXRlTWFyZ2luQWZ0ZXJG
b3JQcmV2aW91c1NpYmxpbmcoY29uc3QgQm94Jik7CiAKICAgICBCbG9ja0Zvcm1hdHRpbmdTdGF0
ZSYgZm9ybWF0dGluZ1N0YXRlKCkgeyByZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3Rh
dGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KLSAgICBCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0OwogICAgIEJs
b2NrTWFyZ2luQ29sbGFwc2UgbWFyZ2luQ29sbGFwc2UoKSBjb25zdDsKKyAgICBjb25zdCBCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeSYgYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OyB9CisgICAgY29uc3QgQmxvY2tGb3JtYXR0
aW5nUXVpcmtzJiBibG9ja0Zvcm1hdHRpbmdRdWlya3MoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
Rm9ybWF0dGluZ1F1aXJrczsgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB2b2lkIHNldFBy
ZWNvbXB1dGVkTWFyZ2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBQcmVjb21w
dXRlZE1hcmdpbkJlZm9yZSYgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUpIHsgbV9wcmVjb21wdXRl
ZE1hcmdpbkJlZm9yZUxpc3Quc2V0KCZsYXlvdXRCb3gsIHByZWNvbXB1dGVkTWFyZ2luQmVmb3Jl
KTsgfQogICAgIFByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHByZWNvbXB1dGVkTWFyZ2luQmVmb3Jl
KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IHJldHVybiBtX3ByZWNvbXB1dGVkTWFyZ2lu
QmVmb3JlTGlzdC5nZXQoJmxheW91dEJveCk7IH0KICAgICBib29sIGhhc1ByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IHJldHVybiBtX3ByZWNvbXB1
dGVkTWFyZ2luQmVmb3JlTGlzdC5jb250YWlucygmbGF5b3V0Qm94KTsgfQogI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxjb25zdCBCb3gqLCBQcmVjb21wdXRlZE1hcmdpbkJlZm9yZT4g
bV9wcmVjb21wdXRlZE1hcmdpbkJlZm9yZUxpc3Q7CisgICAgY29uc3QgQmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnkgbV9ibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTsKKyAgICBjb25zdCBCbG9ja0Zvcm1h
dHRpbmdRdWlya3MgbV9ibG9ja0Zvcm1hdHRpbmdRdWlya3M7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCmluZGV4IDQ4MDNjYTk2NGZj
YzIyNTQxYWE5YjcxNGRkY2ZjMTM2Nzg0Yzk4ZjEuLjQwZGJlZjI5NWIyODg0OTQzYzE1YTE5ZWYx
NGU1ZTk3ZGIxOTBhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwCkBAIC0yODEsNyArMjgxLDcgQEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihjb24K
ICAgICB9CiAKICAgICBpZiAobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSkgewotICAgICAg
ICBpZiAoYXV0byBzdHJldGNoZWRJbkZsb3dIZWlnaHQgPSBCbG9ja0Zvcm1hdHRpbmdRdWlya3Mo
Zm9ybWF0dGluZ0NvbnRleHQoKSkuc3RyZXRjaGVkSW5GbG93SGVpZ2h0SWZBcHBsaWNhYmxlKGxh
eW91dEJveCwgY29udGVudEhlaWdodEFuZE1hcmdpbikpCisgICAgICAgIGlmIChhdXRvIHN0cmV0
Y2hlZEluRmxvd0hlaWdodCA9IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1F1aXJrcz4oZm9ybWF0
dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nUXVpcmtzKCkpLnN0cmV0Y2hlZEluRmxvd0hlaWdodElm
QXBwbGljYWJsZShsYXlvdXRCb3gsIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4pKQogICAgICAgICAg
ICAgY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0ID0gKnN0cmV0Y2hlZEluRmxv
d0hlaWdodDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnkuaAppbmRleCA2Y2I4NmY4NmEzYWM3NDcwMTFlNmNmZDhiNGM0NTFjZmU5NzgwMWNhLi5i
NDlhNjJjMmVkZGZmN2ZkOTRiYzA1NWU5ZDExYTM3MTJjYzk4MDEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0zMiw2ICszMiw4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorY2xhc3MgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDsKKwogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5nIGFuZCBz
aXppbmcgZm9yIGJveGVzIHBhcnRpY2lwYXRpbmcgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRl
eHQuCiBjbGFzcyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nR2Vv
bWV0cnkgewogcHVibGljOgpAQCAtNTksNCArNjEsNiBAQCBwcml2YXRlOgogfQogfQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9GT1JNQVRUSU5HX0dFT01FVFJZKEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5LCBpc0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkpCisKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9C
bG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCmluZGV4IDZhMTkxYTkz
MjUxMmY5Y2U0M2NhOTU4ODgwM2ViMTViNmQ0ZjAwYmQuLmE5OTUxNGNhMDBhNjdiZmQ5NmU5NjM1
MWFlY2JlNWFkODk1YjgxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQmxvY2tG
b3JtYXR0aW5nUXVpcmtzOjpzdHJldGNoZWRJbkZsb3dIZWlnaHRJZkFwcGxpY2FibGUoY28KICAg
ICBib2R5Qm94Q29udGVudEhlaWdodCAtPSBkb2N1bWVudEJveEdlb21ldHJ5LnZlcnRpY2FsQm9y
ZGVyKCkgKyBkb2N1bWVudEJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7
CiAgICAgLy8gSG93ZXZlciB0aGUgbm9uLWluLWZsb3cgZG9jdW1lbnQgYm94J3MgdmVydGljYWwg
bWFyZ2lucyBhcmUgaWdub3JlZC4gVGhleSBkb24ndCBhZmZlY3QgdGhlIGJvZHkgYm94J3MgY29u
dGVudCBoZWlnaHQuCiAgICAgaWYgKGRvY3VtZW50Qm94LmlzSW5GbG93KCkpIHsKLSAgICAgICAg
YXV0byBmb3JtYXR0aW5nR2VvbWV0cnkgPSBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSB7IGZvcm1h
dHRpbmdDb250ZXh0IH07CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0LmZvcm1hdHRpbmdHZW9tZXRyeSgpOwogICAgICAgICBhdXRvIHByZWNvbXB1
dGVEb2N1bWVudEJveFZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVk
VmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIGZvcm1hdHRpbmdHZW9tZXRyeS5jb25zdHJhaW50
c0ZvckluRmxvd0NvbnRlbnQoaW5pdGlhbENvbnRhaW5pbmdCbG9jaywgRm9ybWF0dGluZ0NvbnRl
eHQ6OkVzY2FwZVJlYXNvbjo6Qm9keVN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuaG9yaXpvbnRh
bCk7CiAgICAgICAgIGJvZHlCb3hDb250ZW50SGVpZ2h0IC09IHByZWNvbXB1dGVEb2N1bWVudEJv
eFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApICsgcHJlY29tcHV0ZURvY3VtZW50Qm94
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGlu
Z1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9j
ay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaAppbmRleCA3Y2ZiYzJjNjU5OTVkNTI1NDY4YmExYTU2
OTJiMDk3NmJiNWJhMmZhLi5hMDQ0NDY2NmQ1NWFjZGE0NDdiMTMwNGUxYzQ2NDEyNDc0ODhhOWNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTQ3LDQg
KzQ3LDYgQEAgcHVibGljOgogfQogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9G
T1JNQVRUSU5HX1FVSVJLUyhCbG9ja0Zvcm1hdHRpbmdRdWlya3MsIGlzQmxvY2tGb3JtYXR0aW5n
UXVpcmtzKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcAppbmRleCBiZGM2MzMwMTRiYjY2YTljN2Q2NmY0MWMwZTNmNzc2M2IwNDczMmYwLi45NDUx
OTYxY2ZjMjZkYWMxMGM3MjA4Nzg5ZTQwMjE3ODI1NDk5NzQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJs
ZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNDYsNiArNDYsNyBAQCBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dCk7CiAKIFRh
YmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEJs
b2NrRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUpCiAgICAgOiBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgZm9ybWF0dGluZ1N0YXRlKQorICAgICwg
bV90YWJsZVdyYXBwZXJGb3JtYXR0aW5nUXVpcmtzKCp0aGlzKQogewogfQogCkBAIC0xODUsNyAr
MTg2LDcgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
V2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAogICAgIC8vIFNpbWlsYXIgc2V0dXAgd2l0
aCBub24tdGFibGUgY29udGVudCB3b3VsZCByZXNvbHZlIHRoZSBpbm5lciBibG9jayBsZXZlbCBi
b3gncyB3aWR0aCB0byA0MHB4OwogICAgIC8vIFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbiBpbiB0
aGUgc3BlYy4KICAgICBhdXRvIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5nV2lkdGgg
PSBtX2hvcml6b250YWxDb25zdHJhaW50c0lnbm9yaW5nRmxvYXRzLmxvZ2ljYWxXaWR0aDsKLSAg
ICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCk7Cisg
ICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKTsK
ICAgICBhdXRvIGNvbXB1dGVkV2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRXaWR0
aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7CiAgICAg
YXV0byBjb21wdXRlZE1heFdpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkTWF4V2lk
dGgodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5nV2lkdGgpOwogICAg
IGF1dG8gY29tcHV0ZWRNaW5XaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRlZE1pbldp
ZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dpZHRoKTsKQEAg
LTIyMSw3ICsyMjIsNyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdAogICAgIC8vIGFscmVhZHkg
YmVlbiB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBURkMgbGF5b3V0LgogICAgIGF1dG8g
b3ZlcnJpZGRlblRhYmxlSGVpZ2h0ID0gWyZdKCkgLT4gT3B0aW9uYWw8TGF5b3V0VW5pdD4gewog
ICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUYWJsZVdyYXBwZXJRdWlya3MoKnRoaXMpLm92ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJs
ZUJveCk7CisgICAgICAgICAgICByZXR1cm4gdGFibGVXcmFwcGVyRm9ybWF0dGluZ1F1aXJrcygp
Lm92ZXJyaWRkZW5UYWJsZUhlaWdodCh0YWJsZUJveCk7CiAgICAgICAgIGlmICh0YWJsZUJveC5o
YXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybiBibG9ja0Zvcm1h
dHRpbmdHZW9tZXRyeSgpLmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFi
bGVCb3gpOwogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5oCmluZGV4IGQ3NjNjYWE5MzM0Nzk3YzE1Mzc3MTI2NzQ2NThiMzVhZmY2N2RiYmQu
LjNkMGViZGI4ZGJmMmJiZDQ3NTQ3Yjk0N2E2NzA2MTBmYTNiNDhhMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBw
ZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdRdWly
a3MuaCIKKyNpbmNsdWRlICJUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUyLDgg
KzUzLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JUYWJs
ZUJveChjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsK
ICAgICB2b2lkIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdCBDb250YWlu
ZXJCb3gmLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKIAotcHJpdmF0ZToK
KyAgICBjb25zdCBUYWJsZVdyYXBwZXJRdWlya3MmIHRhYmxlV3JhcHBlckZvcm1hdHRpbmdRdWly
a3MoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlV3JhcHBlckZvcm1hdHRpbmdRdWlya3M7IH0KKwog
ICAgIEhvcml6b250YWxDb25zdHJhaW50cyBtX2hvcml6b250YWxDb25zdHJhaW50c0lnbm9yaW5n
RmxvYXRzOworICAgIGNvbnN0IFRhYmxlV3JhcHBlclF1aXJrcyBtX3RhYmxlV3JhcHBlckZvcm1h
dHRpbmdRdWlya3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtz
LmNwcAppbmRleCA2NjcwOWM2OTVlNDY3YTg1MzMxMDVmMDhjYjU1NWM5MDNkMGM3ZTQ2Li4xMTA4
ZjYyMjA4YTYwMzc4YTkzNDhhY2VjODNmY2ViYWE0ZDBmMDRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJs
ZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJs
b2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgTGF5b3V0VW5pdCBUYWJs
ZVdyYXBwZXJRdWlya3M6Om92ZXJyaWRkZW5UYWJsZUhlaWdodChjb25zdCBDb250YWluZXJCb3gm
IHRhYmxlQm8KIHsKICAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMgdXNlIHRoZSBjb250ZW50
IGhlaWdodC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50IHRha2UgY29tcHV0ZWQg
dmFsdWVzIGludG8gYWNjb3VudC4KICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IGRvd25j
YXN0PEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCkpOwot
ICAgIHJldHVybiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCkuY29u
dGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7CisgICAgcmV0dXJu
IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Pihmb3JtYXR0aW5nQ29udGV4dC5mb3Jt
YXR0aW5nR2VvbWV0cnkoKSkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0
YWJsZUJveCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9i
bG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKaW5k
ZXggOGMyZTMzNjJiYzJlOTliMDAzODYwZmFiMDUzODBkODJhOWVkMWRkZi4uMTFmYmYyNWYxZTMx
OWRkODVkOWEyZjMwNTExYWVhNGY0ZTQ2ODBjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nUXVpcmtzLmgKQEAgLTMyLDYgKzMyLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCitjbGFzcyBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OworCiBjbGFzcyBUYWJsZVdyYXBwZXJRdWlya3MgOiBwdWJsaWMgQmxvY2tGb3JtYXR0aW5nUXVp
cmtzIHsKIHB1YmxpYzoKICAgICBUYWJsZVdyYXBwZXJRdWlya3MoY29uc3QgVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRp
bmdDb250ZXh0LmNwcAppbmRleCA2YTJkMjdjNjk1YjgyMWE4MWJhNjVmOWVhMTdjMmNmYzQ2Zjcx
MDE5Li5mOTI1N2ZkOGRiODFiZDI4OTYwNWY1YWQ5YmU2YjM2Y2E0ZDZkY2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1h
dHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNDQsNiArNDQsOCBAQCBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRmxleEZvcm1hdHRpbmdDb250ZXh0KTsKIAogRmxl
eEZvcm1hdHRpbmdDb250ZXh0OjpGbGV4Rm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVy
Qm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEZsZXhGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRp
bmdTdGF0ZSkKICAgICA6IEZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwg
Zm9ybWF0dGluZ1N0YXRlKQorICAgICwgbV9mbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKQor
ICAgICwgbV9mbGV4Rm9ybWF0dGluZ1F1aXJrcygqdGhpcykKIHsKIH0KIApAQCAtNjcsNyArNjks
NyBAQCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbgogdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6
OnNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGNvbnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1h
dHRpbmdTdGF0ZSgpOwotICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gZmxleEZvcm1hdHRp
bmdHZW9tZXRyeSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZsZXhGb3JtYXR0
aW5nR2VvbWV0cnkoKTsKICAgICBhdXRvIGZsZXhJdGVtTWFpbkF4aXNTdGFydCA9IGNvbnN0cmFp
bnRzLmhvcml6b250YWwubG9naWNhbExlZnQ7CiAgICAgYXV0byBmbGV4SXRlbU1haW5BeGlzRW5k
ID0gZmxleEl0ZW1NYWluQXhpc1N0YXJ0OwogICAgIGF1dG8gZmxleEl0ZW1Dcm9zQXhpc1N0YXJ0
ID0gY29uc3RyYWludHMudmVydGljYWwubG9naWNhbFRvcDsKQEAgLTExMCw3ICsxMTIsNyBAQCB2
b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNvbnN0IENv
bnN0cmFpbnRzRm9ySW5GbG93Q29udAogdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yRmxleEl0ZW1zKCkKIHsKICAgICBhdXRvJiBm
b3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGZvcm1h
dHRpbmdHZW9tZXRyeSA9IGZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKTsKKyAgICBhdXRvJiBmb3Jt
YXR0aW5nR2VvbWV0cnkgPSBmbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCk7CiAgICAgZm9yIChhdXRv
JiBmbGV4SXRlbSA6IGNoaWxkcmVuT2ZUeXBlPENvbnRhaW5lckJveD4ocm9vdCgpKSkgewogICAg
ICAgICBpZiAoZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3go
ZmxleEl0ZW0pKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMTgsMTEgKzEyMCw2IEBAIHZv
aWQgRmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50
c0ZvckZsZXhJdGVtcygpCiAgICAgfQogfQogCi1GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IEZsZXhG
b3JtYXR0aW5nQ29udGV4dDo6ZmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOwotfQotCiB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCAyMjNmYTA4NjA4N2Y5ZTM3
OThlYWE3NzRjZjMwNWQ4ZTljMmFjMDNlLi5mNWE2NDUwMjdhOGEzNzQ3OGJlYTJlYjljM2I1YzFh
MTZjZjkzYTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
IAorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbGV4Rm9y
bWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CkBAIC0zNCw3ICszNSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotY2xhc3MgRmxleEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNs
YXNzIEludmFsaWRhdGlvblN0YXRlOwogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlv
dXQgbG9naWMgZm9yIGZsZXggZm9ybWF0dGluZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi9jc3MtZmxleGJveC0xLwpAQCAtNDcsMTQgKzQ3LDIwIEBAIHB1YmxpYzoKIAogICAg
IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkgb3ZlcnJpZGU7CiAKKyAgICBjb25zdCBGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRp
bmdHZW9tZXRyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxleEZvcm1hdHRpbmdHZW9tZXRy
eTsgfQorICAgIGNvbnN0IEZvcm1hdHRpbmdRdWlya3MmIGZvcm1hdHRpbmdRdWlya3MoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2ZsZXhGb3JtYXR0aW5nUXVpcmtzOyB9CisKIHByaXZhdGU6Ci0g
ICAgRmxleEZvcm1hdHRpbmdHZW9tZXRyeSBmbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7
CisgICAgY29uc3QgRmxleEZvcm1hdHRpbmdHZW9tZXRyeSYgZmxleEZvcm1hdHRpbmdHZW9tZXRy
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxleEZvcm1hdHRpbmdHZW9tZXRyeTsgfQogCiAgICAgdm9p
ZCBzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50
Jik7CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVt
cygpOwogCiAgICAgY29uc3QgRmxleEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkg
Y29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RmxleEZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0Nv
bnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogICAgIEZsZXhGb3JtYXR0aW5nU3RhdGUmIGZv
cm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25jYXN0PEZsZXhGb3JtYXR0aW5nU3RhdGU+KEZv
cm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KKworICAgIGNvbnN0IEZsZXhG
b3JtYXR0aW5nR2VvbWV0cnkgbV9mbGV4Rm9ybWF0dGluZ0dlb21ldHJ5OworICAgIGNvbnN0IEZv
cm1hdHRpbmdRdWlya3MgbV9mbGV4Rm9ybWF0dGluZ1F1aXJrczsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4IDJjZmM3YjdmYmVjOWU2NDNi
NWMyZTAwYTViZWE0NTVhMzYzZmU4NWQuLjk2NjMxOGU2NWRmNWY1MmRhODAxODEzMjk4MDAyNzk0
MWUyMWU5MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaApA
QCAtMzIsNiArMzIsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7
CiAKK2NsYXNzIEZsZXhGb3JtYXR0aW5nQ29udGV4dDsKKwogLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGZsZXggaXRlbXMuCiBjbGFzcyBGbGV4Rm9y
bWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdHZW9tZXRyeSB7CiBwdWJsaWM6CkBA
IC00Niw0ICs0OCw2IEBAIHByaXZhdGU6CiB9CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TEFZT1VUX0ZPUk1BVFRJTkdfR0VPTUVUUlkoRmxleEZvcm1hdHRpbmdHZW9tZXRyeSwgaXNGbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5KCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDU2MDJjODE3OWI0ZTFiNWRiZDBjMjI3
ZWFlNjFlNjBkNzhhMDc5ZjUuLjU3ZDcwMTk2ZmUyMWQxNmZhY2RiM2I2N2MyYzE5Y2RhMDFmNjk0
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
LmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1ZGUgIklubGlu
ZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCb3guaCIKICNpbmNsdWRl
ICJJbmxpbmVMaW5lUnVuLmgiCkBAIC01OCw2ICs1Niw4IEBAIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCk7CiAKIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dChjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUpCiAg
ICAgOiBGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGZvcm1hdHRpbmdT
dGF0ZSkKKyAgICAsIG1faW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKQorICAgICwgbV9p
bmxpbmVGb3JtYXR0aW5nUXVpcmtzKCp0aGlzKQogewogfQogCkBAIC0xOTgsNyArMTk4LDcgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5s
aW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgYXV0byBpbml0aWFsTGluZUhlaWdodCA9
IFsmXSgpIC0+IElubGluZUxheW91dFVuaXQgewogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRl
KCkuaW5TdGFuZGFyZHNNb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3QoKS5zdHls
ZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOwotICAgICAgICAgICAgcmV0dXJuIElubGluZUZvcm1h
dHRpbmdRdWlya3MoKnRoaXMpLmluaXRpYWxMaW5lSGVpZ2h0KCk7CisgICAgICAgICAgICByZXR1
cm4gaW5saW5lRm9ybWF0dGluZ1F1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCk7CiAgICAgICAg
IH0oKTsKICAgICAgICAgYXV0byBpbml0aWFsTGluZUNvbnN0cmFpbnRzID0gSW5saW5lUmVjdCB7
IGxpbmVMb2dpY2FsVG9wLCBjb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2ljYWxMZWZ0LCBjb25z
dHJhaW50cy5ob3Jpem9udGFsLmxvZ2ljYWxXaWR0aCwgaW5pdGlhbExpbmVIZWlnaHQgfTsKICAg
ICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQo
bmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBsZWFkaW5nTG9n
aWNhbFdpZHRoLCBpbml0aWFsTGluZUNvbnN0cmFpbnRzLCBpc0ZpcnN0TGluZSk7CkBAIC00NTYs
NyArNDU2LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNv
bnRlbnRJZk5lZWRlZCgpCiBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQm
IGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25z
dHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5n
U3RhdGUoKTsKLSAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGlubGluZUZvcm1hdHRpbmdH
ZW9tZXRyeSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmlubGluZUZv
cm1hdHRpbmdHZW9tZXRyeSgpOwogCiAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3goZm9y
bWF0dGluZ0dlb21ldHJ5LmxpbmVCb3hGb3JMaW5lQ29udGVudChsaW5lQ29udGVudCkpOwogICAg
IGNvbnN0IGF1dG8mIGxpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCkubGFzdCgp
OwpAQCAtNjEyLDExICs2MTIsNiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjppbnZh
bGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJgogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGFsc28gd2hlcmUgd2Ugd291bGQgZGVsZXRlIGlubGluZSBpdGVtcyBpZiB0
aGVpciBjb250ZW50IGNoYW5nZWQuCiB9CiAKLUlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6aW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKLX0KLQogfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBk
Y2U4YzNlZjk2YzdmZGRmZWUyYmIxY2ViMDFiMzIzZTA4Njk2YTA1Li43ODQ3ZmFkYmU3YzUxNWMw
ZDdmMmU0MmM4ODRkNzc0MWM2YjIxODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTI4LDEzICsyOCwxNCBAQAogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJJbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBM
YXlvdXQgewogCi1jbGFzcyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBJbmxpbmVG
b3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKIGNsYXNzIExpbmVCb3g7
CkBAIC01MywxMCArNTQsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBsaW5lTGF5b3V0Rm9ySW50
ZXJncmF0aW9uKEludmFsaWRhdGlvblN0YXRlJiwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50Jik7CiAKKyAgICBjb25zdCBGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9t
ZXRyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OyB9
CisgICAgY29uc3QgRm9ybWF0dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ1F1aXJrczsgfQorCiBwcml2YXRlOgotICAg
IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5JiBpbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdH
ZW9tZXRyeTsgfQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdRdWlya3MmIGlubGluZUZvcm1h
dHRpbmdRdWlya3MoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdRdWlya3M7IH0K
IAotICAgIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnko
KSBjb25zdDsKKyAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBsaW5lTGF5b3V0KElubGlu
ZUl0ZW1zJiwgTGluZUJ1aWxkZXI6OklubGluZUl0ZW1SYW5nZSwgY29uc3QgQ29uc3RyYWludHNG
b3JJbkZsb3dDb250ZW50Jik7CiAKQEAgLTcwLDYgKzc1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKTsKICAgICBJbmxpbmVSZWN0IGNvbXB1dGVH
ZW9tZXRyeUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUZvcm1hdHRp
bmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOworCisgICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5IG1faW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OworICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdRdWlya3MgbV9pbmxpbmVGb3JtYXR0aW5nUXVpcmtzOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxp
bmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5k
ZXggN2I2OTRmZjk0ZDc3NmYzMGJjMGVhMTcyYzhmN2UyMjZjZTljOTZmZS4uYzg4NDU3MWQxMWI1
ZjEzNzc2YTViY2Q5ZGFkYTQyYTFjOGRkMzk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBM
aW5lQm94QnVpbGRlcjo6Y29tcHV0ZUxpbmVCb3hIZWlnaHRBbmRBbGlnbklubGluZUxldmVsQm94
ZXNWZXJ0aWNhbGx5KExpbmUKICAgICAvLyAyLiBDb21wdXRlIHRoZSBiYXNlbGluZS9sb2dpY2Fs
IHRvcCBwb3NpdGlvbiBvZiB0aGUgcm9vdCBpbmxpbmUgYm94LiBBbGlnbmVkIGJveGVzIHB1c2gg
dGhlIHJvb3QgaW5saW5lIGJveCBhcm91bmQgaW5zaWRlIHRoZSBsaW5lIGJveC4KICAgICAvLyAz
LiBGaW5hbGx5IGFsaWduIHRoZSBpbmxpbmUgbGV2ZWwgYm94ZXMgdXNpbmcgKG1vc3RseSkgbm9y
bWFsIGlubGluZSBsZXZlbCBib3ggZ2VvbWV0cmllcy4KICAgICBhdXRvJiByb290SW5saW5lQm94
ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7Ci0gICAgYXV0byBmb3JtYXR0aW5nR2VvbWV0cnkg
PSBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgeyBmb3JtYXR0aW5nQ29udGV4dCgpIH07CisgICAg
YXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5Pihmb3JtYXR0aW5nQ29udGV4dCgpLmZvcm1hdHRpbmdHZW9tZXRyeSgpKTsKIAogICAgIGF1
dG8gY29tcHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gWyZdIHsKICAgICAgICAgLy8gTGluZSBi
b3ggaGVpZ2h0IGNvbXB1dGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBsYXlvdXQgYm91bmRzIG9mIHRo
ZSBpbmxpbmUgYm94ZXMgYW5kIG5vdCB0aGVpciBsb2dpY2FsIChhc2NlbnQvZGVzY2VudCkgZGlt
ZW5zaW9ucy4KQEAgLTY2OSw3ICs2NjksNyBAQCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6Oklu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dAogewog
fQogCi1MaW5lQm94IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250
ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQpCitMaW5lQm94
IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExp
bmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IExpbmVCb3hCdWlsZGVyKGZvcm1hdHRpbmdDb250ZXh0KCkpLmJ1aWxkKGxpbmVDb250ZW50KTsK
IH0KQEAgLTczMCw3ICs3MzAsNyBAQCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1h
dHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFyZwogYm9vbCBJbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goY29uc3Qg
TGluZUJveDo6SW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94LCBjb25zdCBMaW5lQm94JiBs
aW5lQm94KSBjb25zdAogewogICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpIHx8
IGlubGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkpCi0gICAgICAgIHJldHVybiBsYXlvdXRT
dGF0ZSgpLmluU3RhbmRhcmRzTW9kZSgpID8gdHJ1ZSA6IElubGluZUZvcm1hdHRpbmdRdWlya3Mo
Zm9ybWF0dGluZ0NvbnRleHQoKSkuaW5saW5lTGV2ZWxCb3hBZmZlY3RzTGluZUJveChpbmxpbmVM
ZXZlbEJveCwgbGluZUJveCk7CisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmluU3RhbmRh
cmRzTW9kZSgpID8gdHJ1ZSA6IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdRdWlya3M+KGZvcm1h
dHRpbmdDb250ZXh0KCkuZm9ybWF0dGluZ1F1aXJrcygpKS5pbmxpbmVMZXZlbEJveEFmZmVjdHNM
aW5lQm94KGlubGluZUxldmVsQm94LCBsaW5lQm94KTsKICAgICBpZiAoaW5saW5lTGV2ZWxCb3gu
aXNBdG9taWNJbmxpbmVMZXZlbEJveCgpKSB7CiAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5s
YXlvdXRCb3VuZHMoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5s
aW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaAppbmRleCBlZmFmYzRh
MzA5ZDZhNWMwM2M1YjdkODJkOTE5YTlmMmJmZDlkZmQ3Li45YmMzYmQ3MDQ4N2RlNDUwNjkwZTZl
MTRjYzI4YjQ0YmY3NzI5NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnkuaApAQCAtMjgsMTUgKzI4LDE5IEBACiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNp
bmNsdWRlICJJbmxpbmVMaW5lQnVpbGRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1l
c3BhY2UgTGF5b3V0IHsKIAorY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CitjbGFzcyBM
aW5lQm94OworCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0
dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKICAgICBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKIAotICAgIExpbmVCb3ggbGluZUJveEZvckxp
bmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpOworICAgIExpbmVCb3gg
bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpIGNv
bnN0OwogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcEZvck5leHRMaW5lKGNvbnN0IExp
bmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIElubGluZUxheW91dFVuaXQgcHJldmlvdXNMaW5lTG9n
aWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250ZXh0JikgY29uc3Q7CiAKICAgICBDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGlj
YWxWYWx1ZXMmKSBjb25zdDsKQEAgLTUyLDQgKzU2LDYgQEAgcHJpdmF0ZToKIH0KIH0KIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19MQVlPVVRfRk9STUFUVElOR19HRU9NRVRSWShJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnksIGlzSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkpCisKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxp
bmUvSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oCmluZGV4IGQ5Mjdh
MDg0NzQ2MDgzMDY2OTFjYWY5ZWY5MWE1NTM0ZDc5MGMwNDQuLjg4MDY3NzhjZjg1MzM3MWViNTFh
NTY4NTJjM2U1MjVmZDc5OWU3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzLmgKQEAgLTQ0LDQgKzQ0LDYgQEAgcHVibGljOgogfQogfQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9GT1JNQVRUSU5HX1FVSVJLUyhJbmxpbmVGb3JtYXR0aW5n
UXVpcmtzLCBpc0lubGluZUZvcm1hdHRpbmdRdWlya3MoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVM
aW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggMTU4MDBiMThhZjcyYWVhNWZiYWY5
ODg1MjBhMmJkYzMyOTY3Njc5MS4uNDkyY2IxOWIxMzA3ZThhYmRlMzMzMGMxMGRkNjk4ZGU2YjA0
M2E3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMTEy
LDcgKzExMiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U29mdFdyYXBPcHBvcnR1bml0eShj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lCiAgICAgaWYgKGN1cnJlbnQuaXNC
b3goKSB8fCBuZXh0LmlzQm94KCkpIHsKICAgICAgICAgYXV0byBpc0ltYWdlQ29udGVudCA9IGN1
cnJlbnQubGF5b3V0Qm94KCkuaXNJbWFnZSgpIHx8IG5leHQubGF5b3V0Qm94KCkuaXNJbWFnZSgp
OwogICAgICAgICBpZiAoaXNJbWFnZUNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm4gSW5saW5l
Rm9ybWF0dGluZ1F1aXJrcyhpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkuaGFzU29mdFdyYXBPcHBv
cnR1bml0eUF0SW1hZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzPihpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nUXVpcmtzKCkp
Lmhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCk7CiAgICAgICAgIC8vIFt0ZXh0XVtpbmxp
bmUgYm94IHN0YXJ0XVtpbmxpbmUgYm94IGVuZF1baW5saW5lIGJveF0gKHRleHQ8c3Bhbj48L3Nw
YW4+PGltZz4pIDogdGhlcmUncyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBb
dGV4dF0gYW5kIFtpbWddLgogICAgICAgICAvLyBUaGUgbGluZSBicmVha2luZyBiZWhhdmlvciBv
ZiBhIHJlcGxhY2VkIGVsZW1lbnQgb3Igb3RoZXIgYXRvbWljIGlubGluZSBpcyBlcXVpdmFsZW50
IHRvIGFuIGlkZW9ncmFwaGljIGNoYXJhY3Rlci4KICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA3ZDhhNjQy
MTAzYzEyOTA4MGNlYmZlOGQ3NzBkMjczMTQ3ZjYxOWI3Li41ZDk1ZmRhMDRmMWIxMTU1MjgwN2Rk
OTU2ZDQyNGI4YTI3NjA5NDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91dElu
aXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdHZW9tZXRy
eS5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lz
b01hbGxvY0lubGluZXMuaD4KIApAQCAtNDksNiArNDgsOCBAQCBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoVGFibGVGb3JtYXR0aW5nQ29udGV4dCk7CiAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvY3NzLXRhYmxlcy0zLyN0YWJsZS1sYXlvdXQtYWxnb3JpdGhtCiBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0
dGluZ0NvbnRleHRSb290LCBUYWJsZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKQog
ICAgIDogRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHRSb290LCBmb3JtYXR0aW5n
U3RhdGUpCisgICAgLCBtX3RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzLCBmb3JtYXR0aW5n
U3RhdGUudGFibGVHcmlkKCkpCisgICAgLCBtX3RhYmxlRm9ybWF0dGluZ1F1aXJrcygqdGhpcykK
IHsKIH0KIApAQCAtMjgwLDcgKzI4MSw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91dFVuaXQKIHsKICAg
ICBBU1NFUlQoY2VsbC5ib3goKS5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSk7
CiAKLSAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
KCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gdGFibGVGb3JtYXR0aW5nR2VvbWV0
cnkoKTsKICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCk7CiAg
ICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CiAgICAgYXV0byYgY2VsbEJveEdlb21ldHJ5
ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2VsbEJveCk7CkBAIC01MzMsMTEgKzUz
NCw2IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVF
eHRyYVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlCiAgICAgfQogfQogCi1UYWJsZUZvcm1hdHRp
bmdHZW9tZXRyeSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojp0YWJsZUZvcm1hdHRpbmdHZW9tZXRy
eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzLCBm
b3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKSk7Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1h
dHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBlNjhjMmMzNzFjZGRmODY3ZTcx
MWI0ZjA2MzM1MmRjNDAyOWZjYzBjLi5mM2QxNDEwNzUxMGRlNDM0MjI0ZjAwMWJlN2VmMzJmOTZi
MzJmNDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaApA
QCAtMjgsNiArMjgsOCBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
CiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1hdHRp
bmdHZW9tZXRyeS5oIgorI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1
ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVGFibGVHcmlkLmgiCiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAtMzcsNyArMzksNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgSW52YWxpZGF0aW9uU3RhdGU7Ci1jbGFz
cyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTsKIAogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRo
ZSBsYXlvdXQgbG9naWMgZm9yIHRhYmxlIGZvcm1hdHRpbmcgY29udGV4dHMuCiAvLyBodHRwczov
L3d3dy53My5vcmcvVFIvQ1NTMjIvdGFibGVzLmh0bWwKQEAgLTQ4LDYgKzQ5LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgbGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0
IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYpIG92ZXJyaWRlOwogICAgIExheW91dFVuaXQg
dXNlZENvbnRlbnRIZWlnaHQoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIGNvbnN0IEZvcm1hdHRp
bmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90
YWJsZUZvcm1hdHRpbmdHZW9tZXRyeTsgfQorICAgIGNvbnN0IEZvcm1hdHRpbmdRdWlya3MmIGZv
cm1hdHRpbmdRdWlya3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RhYmxlRm9ybWF0dGluZ1F1
aXJrczsgfQorCiAgICAgc3RhdGljIFVuaXF1ZVJlZjxUYWJsZUdyaWQ+IGVuc3VyZVRhYmxlR3Jp
ZChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94KTsKIAogcHJpdmF0ZToKQEAgLTc3LDkgKzgx
LDEzIEBAIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZFBy
ZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpOwogICAgIHZvaWQgY29tcHV0ZUFuZERpc3RyaWJ1dGVF
eHRyYVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlLCBPcHRpb25hbDxM
YXlvdXRVbml0PiBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlKTsKIAotICAgIFRhYmxlRm9ybWF0dGlu
Z0dlb21ldHJ5IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7CiAgICAgY29uc3QgVGFi
bGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25j
YXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0
YXRlKCkpOyB9CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CisgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkm
IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV90YWJsZUZvcm1hdHRp
bmdHZW9tZXRyeTsgfQorICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ1F1aXJrcyYgdGFibGVGb3Jt
YXR0aW5nUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZUZvcm1hdHRpbmdRdWlya3M7IH0K
KworICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IG1fdGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnk7CisgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nUXVpcmtzIG1fdGFibGVGb3JtYXR0aW5n
UXVpcmtzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9t
ZXRyeS5oCmluZGV4IDFlM2UyNTU1MmZmZmRhMGE2ODdlYTlhNzUxZmQ4ZWEwY2YzNGQwZDkuLmFk
MmJiMTBhZDIzOWEwYjc3NjcwYTM4MzllNDViNzhlNzM4ZDlmY2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTI4LDEwICsyOCwxMyBAQAogI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRm9ybWF0dGlu
Z0dlb21ldHJ5LmgiCisjaW5jbHVkZSAiVGFibGVHcmlkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Owor
CiBjbGFzcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0
cnkgewogcHVibGljOgogICAgIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IFRhYmxlRm9y
bWF0dGluZ0NvbnRleHQmLCBjb25zdCBUYWJsZUdyaWQmKTsKQEAgLTUwLDQgKzUzLDYgQEAgcHJp
dmF0ZToKIH0KIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MQVlPVVRfRk9STUFUVElOR19H
RU9NRVRSWShUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSwgaXNUYWJsZUZvcm1hdHRpbmdHZW9tZXRy
eSgpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5o
CmluZGV4IGJhYjNlNGY2YjJkMmJjOTIwZTk0ZWRlYjMzNGIwYmU2NjNkNWU5MDUuLjgzNTkxMDY3
NDk3ZjBkN2JmMTU1NmU1MWUwMTYxOGQ1NGM3MTc1YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nUXVpcmtz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9U
YWJsZUZvcm1hdHRpbmdRdWlya3MuaApAQCAtNDIsNCArNDIsNiBAQCBwdWJsaWM6CiB9CiB9CiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJTkdfUVVJUktTKFRhYmxlRm9y
bWF0dGluZ1F1aXJrcywgaXNUYWJsZUZvcm1hdHRpbmdRdWlya3MoKSkKKwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAKaW5kZXggYzY2
YjQzYzRlMDQ0MTdiMDcxODk3MzZhZDM3Y2U0OWVmM2VlNzYyZS4uNGZmN2MzZDBlN2YwYjg5OTQ5
OGIxNmJkYWJmNzE5NGU2MDliZThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnRCdWlsZGVyLmNwcApAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgSW5saW5lQ29u
dGVudEJ1aWxkZXI6OmNyZWF0ZURpc3BsYXlMaW5lcyhjb25zdCBMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdTdGF0CiB2b2lkIElubGluZUNvbnRlbnRCdWlsZGVyOjpjcmVhdGVEaXNwbGF5Tm9uUm9v
dElubGluZUJveGVzKGNvbnN0IExheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LCBJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50KSBjb25zdAog
ewogICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGlubGluZUZvcm1hdHRpbmdDb250
ZXh0LmZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGF1dG8gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
ID0gTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkgeyBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCB9OworICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSA9IGRvd25jYXN0PExh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5PihpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5m
b3JtYXR0aW5nR2VvbWV0cnkoKSk7CiAgICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0gMDsgbGlu
ZUluZGV4IDwgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmxpbmVCb3hlcygpLnNpemUoKTsgKytsaW5l
SW5kZXgpIHsKICAgICAgICAgYXV0byYgbGluZUJveCA9IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5s
aW5lQm94ZXMoKVtsaW5lSW5kZXhdOwogICAgICAgICBpZiAoIWxpbmVCb3guaGFzSW5saW5lQm94
KCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429555</attachid>
            <date>2021-05-24 12:59:16 -0700</date>
            <delta_ts>2021-05-24 17:23:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226150-20210524125915.patch</filename>
            <type>text/plain</type>
            <size>79076</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY1YzVmZTExMzJmM2I5
ODZhNzQ3YTQxNmY3NjY1ODNjOGZhYTA1OS4uMjc2NGJhODk3M2VlZTRlMzQ3ZDQyMTgwZjlmODc5
MzJiYzFmMGRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAyMS0wNS0yNCAgQWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gQWRkIHN1cHBvcnQg
Zm9yIGdlb21ldHJ5L3F1aXJrcyB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgVGhpcyBlbmFibGVzIHVzIHRvIG92ZXJyaWRl
IHF1aXJrcy9nZW9tZXRyeSBmdW5jdGlvbmFsaXR5IGF0IHRoZSBzdWJjbGFzc2VzLgorCisgICAg
ICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZG
bG93SG9yaXpvbnRhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dE91dE9mRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5n
Q29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6cXVpcmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0
VmFsdWUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0
dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdHZW9t
ZXRyeTo6aXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdHZW9tZXRyeTo6aXNJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nR2VvbWV0cnk6Omlz
RmxleEZvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdHZW9tZXRyeTo6aXNUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ1F1aXJrczo6aGVpZ2h0VmFsdWVP
Zk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWlnaHQgY29uc3QpOgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nUXVpcmtzOjppc0Jsb2NrRm9ybWF0dGluZ1F1aXJr
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdRdWlya3M6Omlz
SW5saW5lRm9ybWF0dGluZ1F1aXJrcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdRdWlya3M6OmlzVGFibGVGb3JtYXR0aW5nUXVpcmtzIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25l
ZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZVN0YXRpY1ZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpvbnRhbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhB
bmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Z2Vv
bWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpibG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmJsb2NrRm9ybWF0dGluZ1F1aXJrcyBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OnN0cmV0Y2hl
ZEluRmxvd0hlaWdodElmQXBwbGljYWJsZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuaDoKKyAgICAgICAgKiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRhYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFu
ZFBhZGRpbmdGb3JUYWJsZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3Jh
cHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxl
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94KToKKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBw
ZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVp
cmtzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyUXVpcmtzOjpv
dmVycmlkZGVuVGFibGVIZWlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0
dGluZ0NvbnRleHQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2l6ZUFuZFBsYWNlRmxleEl0ZW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0Nv
bnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZv
cm1hdHRpbmdHZW9tZXRyeS5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dEluRmxvd0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZVdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21ldHJ5Rm9yTGluZUNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Z2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5l
Qm94SGVpZ2h0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6bGluZUJveEZvckxpbmVD
b250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0dlb21ldHJ5OjppbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpsaW5lQm94Rm9yTGlu
ZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oOgorICAgICAgICAqIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuaDoKKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KToKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yUm93cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dENlbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBbmREaXN0cmlidXRlRXh0cmFTcGFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgICogbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaDoKKyAg
ICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVM
YXlvdXQ6OmRpc3RyaWJ1dGVkVmVydGljYWxTcGFjZSk6CisgICAgICAgICogbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnRCdWlsZGVyOjpjcmVh
dGVEaXNwbGF5Tm9uUm9vdElubGluZUJveGVzIGNvbnN0KToKKwogMjAyMS0wNS0yNCAgQWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10gUmVuYW1lIHRoZSBnZW9t
ZXRyeSgpIGhlbHBlcnMgdG8gZm9ybWF0dGluZ0dlb21ldHJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29u
dGV4dC5jcHAKaW5kZXggNTQ3N2JkYTY0MGRmYjUwMDI5MzAxZjM4NjViOTRhYTVjYTAzNmVkYS4u
ZWEzMDg0MzFmYTQxM2M3MTg5NDM4ZmQ4MzgxYWNlZTg3NjczOWYzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dC5jcHAKQEAgLTI3MiwxNiArMjcyLDYgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4
dDo6Y29sbGVjdE91dE9mRmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQogICAgIH0KIH0KIAotRm9y
bWF0dGluZ0dlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nR2VvbWV0cnkoKSBj
b25zdAotewotICAgIHJldHVybiBGb3JtYXR0aW5nR2VvbWV0cnkoKnRoaXMpOwotfQotCi1Gb3Jt
YXR0aW5nUXVpcmtzIEZvcm1hdHRpbmdDb250ZXh0OjpxdWlya3MoKSBjb25zdAotewotICAgIHJl
dHVybiBGb3JtYXR0aW5nUXVpcmtzKCp0aGlzKTsKLX0KLQogI2lmbmRlZiBOREVCVUcKIHZvaWQg
Rm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVyTGF5b3V0
KCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA3MzQ0MzgwZTkzNjkxZWI5
NDE4Yjc3NTMxOWVjMWYzYWQ0YTBmYmE4Li5kNGNkN2MyMTFkZDEwNTRlNWExOGY0NjViMzhhYTc5
MTlhYmJjODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC02MSw2ICs2MSw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiAqbV9y
b290OyB9CiAgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7CiAgICAgY29uc3Qg
Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1h
dHRpbmdTdGF0ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgRm9ybWF0dGluZ0dlb21ldHJ5JiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBGb3JtYXR0aW5n
UXVpcmtzJiBmb3JtYXR0aW5nUXVpcmtzKCkgY29uc3QgPSAwOwogCiAgICAgZW51bSBjbGFzcyBF
c2NhcGVSZWFzb24gewogICAgICAgICBUYWJsZVF1aXJrTmVlZHNHZW9tZXRyeUZyb21Fc3RhYmxp
c2hlZEZvcm1hdHRpbmdDb250ZXh0LApAQCAtOTEsOSArOTMsNiBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB1c2luZyBMYXlvdXRRdWV1ZSA9IFZlY3Rvcjxjb25zdCBCb3gqPjsKIHByaXZhdGU6Ci0gICAg
Rm9ybWF0dGluZ0dlb21ldHJ5IGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0OwotICAgIEZvcm1h
dHRpbmdRdWlya3MgcXVpcmtzKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNvbGxlY3RPdXRPZkZsb3dE
ZXNjZW5kYW50c0lmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlT3V0T2ZGbG93VmVydGljYWxH
ZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQm
KTsKICAgICB2b2lkIGNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94
JiwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50Jik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRp
bmdHZW9tZXRyeS5jcHAKaW5kZXggODQxNGU3ZDFjODgyODZiN2ZiNmIxYWVhM2VjY2VmMjEyMjc2
N2FlMi4uMjE0N2IxMTdmYjJlZDJjNTI4OTVkMDdjZDY5OTQxNWQ0ZWRlODIwMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtODIsNyArODIsNyBAQCBPcHRpb25hbDxMYXlvdXRV
bml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUoY29uc3QgQm94JiBs
YXlvdXRCbwogCiAgICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpIHsKICAgICAgICAgaWYg
KGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCi0gICAgICAgICAgICBjb250YWluaW5nQmxv
Y2tIZWlnaHQgPSBGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdDb250ZXh0KCkpLmhlaWdodFZh
bHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGxheW91dEJveCk7Cisg
ICAgICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmZv
cm1hdHRpbmdRdWlya3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhG
aXhlZEhlaWdodChsYXlvdXRCb3gpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGF1dG8g
bm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9m
IGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdy
YXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4
IGVmNzAyMWU3NDM0MDE1M2JmYjE0MDZkNmI3MDMxYTU4MTIxNzI3OWMuLmFiNzlhZmI0Y2RmZjYy
MjFmMDE5ZTczMmYwYmY0MDE2MjRiMGFkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaApA
QCAtODksNiArODksMTEgQEAgcHVibGljOgogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkSGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9j
a0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
Y29tcHV0ZWRXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRo
KSBjb25zdDsKIAorICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsg
cmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuaXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCk7IH0K
KyAgICBib29sIGlzSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gZm9y
bWF0dGluZ0NvbnRleHQoKS5pc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KKyAgICBib29s
IGlzRmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250
ZXh0KCkuaXNGbGV4Rm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNUYWJsZUZvcm1h
dHRpbmdHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuaXNUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGNvbnN0IExheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQubGF5
b3V0U3RhdGUoKTsgfQogICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTEyMCw0ICsx
MjUsOSBAQCBwcml2YXRlOgogfQogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TEFZT1VUX0ZPUk1BVFRJTkdfR0VPTUVUUlkoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TGF5b3V0OjpUb1ZhbHVlVHlw
ZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSkgeyByZXR1cm4gZm9ybWF0dGlu
Z0dlb21ldHJ5LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvRm9ybWF0dGluZ1F1aXJrcy5jcHAKaW5kZXggNWMwN2Q4NmY2OWMyZjU3YTQw
YzA3MTZjYTVjNGRkNDAxZDQ1ZmZkNC4uNjNmMjIwMjJlZjdmZmY5OTI5YzRiNTVjNDg3MTQ3NGI3
YzUwN2VlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuY3BwCkBAIC00Myw2ICs0Myw3IEBAIEZv
cm1hdHRpbmdRdWlya3M6OkZvcm1hdHRpbmdRdWlya3MoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0KQogCiBMYXlvdXRVbml0IEZvcm1hdHRpbmdRdWlya3M6OmhlaWdo
dFZhbHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGNvbnN0IEJveCYg
bGF5b3V0Qm94KSBjb25zdAogeworICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9k
ZSgpKTsKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgZ28gYW5kIHRyYXZlcnMgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgY2hhaW4gdG8gZmluZCBhIGJsb2NrIGxldmVsIGJveCB3aXRoIGZpeGVkIGhl
aWdodCB2YWx1ZSwgZXZlbiBpZiBpdCBtZWFucyBsZWF2aW5nCiAgICAgLy8gdGhlIGN1cnJlbnQg
Zm9ybWF0dGluZyBjb250ZXh0LiBGSVhNRTogc3VyZWx5IHdlIG5lZWQgdG8gZG8gc29tZSB0cmlj
a3MgaGVyZSB3aGVuIGJsb2NrIGRpcmVjdGlvbiBzdXBwb3J0IGlzIGFkZGVkLgogICAgIGF1dG8m
IGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKQEAgLTU2LDgg
KzU3LDcgQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nUXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVz
dENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodCgKICAgICAgICAgLy8gSWYgdGhlIG9ubHkg
Zml4ZWQgdmFsdWUgYm94IHdlIGZpbmQgaXMgdGhlIElDQiwgdGhlbiBpZ25vcmUgdGhlIGJvZHkg
YW5kIHRoZSBkb2N1bWVudCAodmVydGljYWwpIG1hcmdpbiwgcGFkZGluZyBhbmQgYm9yZGVyLiBT
byBtdWNoIHF1aXJraW5lc3MuCiAgICAgICAgIC8vIC1hbmQgaXQncyB0b3RhbGx5IGluc2FuZSBi
ZWNhdXNlIG5vdyB3ZSBmcmVlbHkgdHJhdmVsIGFjcm9zcyBmb3JtYXR0aW5nIGNvbnRleHQgYm91
bmRhcmllcyBhbmQgY29tcHV0ZWQgbWFyZ2lucyBhcmUgbm9uZXhpc3RlbnQuCiAgICAgICAgIGlm
IChjb250YWluaW5nQmxvY2stPmlzQm9keUJveCgpIHx8IGNvbnRhaW5pbmdCbG9jay0+aXNEb2N1
bWVudEJveCgpKSB7Ci0KLSAgICAgICAgICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gRm9y
bWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0NvbnRleHQgfTsKKyAgICAgICAgICAgIGF1dG8m
IGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0LmZvcm1hdHRpbmdHZW9tZXRy
eSgpOwogICAgICAgICAgICAgYXV0byBob3Jpem9udGFsQ29uc3RyYWludHMgPSBmb3JtYXR0aW5n
R2VvbWV0cnkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCksIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OkZpbmRGaXhl
ZEhlaWdodEFuY2VzdG9yUXVpcmspLmhvcml6b250YWw7CiAgICAgICAgICAgICBhdXRvIHZlcnRp
Y2FsTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4oKmNv
bnRhaW5pbmdCbG9jaywgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWly
a3MuaAppbmRleCAzM2YwZDgyNDEyYmE1ZWI5Zjk5NGY4ZTk2ZWM4MDdmMjkzMDZhMDkxLi5kNTc4
MjAzYjcwNGI5MDgyNzE0MzdhNTVkZTZkODQ2Nzc4OWU1Njk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWlya3MuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdRdWly
a3MuaApAQCAtMzgsNiArMzgsMTAgQEAgcHVibGljOgogCiAgICAgTGF5b3V0VW5pdCBoZWlnaHRW
YWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChjb25zdCBCb3gmKSBj
b25zdDsKIAorICAgIGJvb2wgaXNCbG9ja0Zvcm1hdHRpbmdRdWlya3MoKSBjb25zdCB7IHJldHVy
biBmb3JtYXR0aW5nQ29udGV4dCgpLmlzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpOyB9CisgICAg
Ym9vbCBpc0lubGluZUZvcm1hdHRpbmdRdWlya3MoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLmlzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKTsgfQorICAgIGJvb2wgaXNUYWJs
ZUZvcm1hdHRpbmdRdWlya3MoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmlz
VGFibGVGb3JtYXR0aW5nQ29udGV4dCgpOyB9CisKIHByb3RlY3RlZDoKICAgICBjb25zdCBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0
LmxheW91dFN0YXRlKCk7IH0KICAgICBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0OyB9CkBAIC00OCw0
ICs1Miw5IEBAIHByb3RlY3RlZDoKIH0KIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0xBWU9VVF9GT1JNQVRUSU5HX1FVSVJLUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkg
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpMYXlvdXQ6OlRvVmFsdWVU
eXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpMYXlvdXQ6
OkZvcm1hdHRpbmdRdWlya3MmIGZvcm1hdHRpbmdRdWlya3MpIHsgcmV0dXJuIGZvcm1hdHRpbmdR
dWlya3MucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRl
eCBmM2ZhZjc3MDg1M2Y2ZDliMDc3MDlhNTQ3NzgzNDdjZDhhNzMyOWVkLi5jMGZiMWZhNDg2NzM1
ODgwZjNkNzNlN2RmYmE4YTZhYjY0ZmIxMjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTUyLDYgKzUyLDggQEAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQpOwogCiBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0
dGluZ0NvbnRleHRSb290LCBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKQog
ICAgIDogRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHRSb290LCBmb3JtYXR0aW5n
U3RhdGUpCisgICAgLCBtX2Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKQorICAgICwgbV9i
bG9ja0Zvcm1hdHRpbmdRdWlya3MoKnRoaXMpCiB7CiB9CiAKQEAgLTk3LDcgKzk5LDcgQEAgdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlv
blN0YXRlJiBpbnZhbGlkYXRpb24KIAogICAgIGF1dG8gY29uc3RyYWludHNGb3JMYXlvdXRCb3gg
PSBbJl0gKGNvbnN0IGF1dG8mIGxheW91dEJveCkgewogICAgICAgICBhdXRvJiBjb250YWluaW5n
QmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIHJldHVybiAmY29u
dGFpbmluZ0Jsb2NrID09ICZmb3JtYXR0aW5nUm9vdCA/IGNvbnN0cmFpbnRzIDogYmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmluZ0Js
b2NrKTsKKyAgICAgICAgcmV0dXJuICZjb250YWluaW5nQmxvY2sgPT0gJmZvcm1hdHRpbmdSb290
ID8gY29uc3RyYWludHMgOiBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxv
d0NvbnRlbnQoY29udGFpbmluZ0Jsb2NrKTsKICAgICB9OwogCiAgICAgLy8gVGhpcyBpcyBhIHBv
c3Qtb3JkZXIgdHJlZSB0cmF2ZXJzYWwgbGF5b3V0LgpAQCAtMTMwLDcgKzEzMiw3IEBAIHZvaWQg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25T
dGF0ZSYgaW52YWxpZGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZm9ybWF0dGluZ0Nv
bnRleHQgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjb250YWluZXJC
b3gsIGxheW91dFN0YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyQm94
LmlzVGFibGVXcmFwcGVyQm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0PigqZm9ybWF0dGluZ0NvbnRleHQpLnNl
dEhvcml6b250YWxDb25zdHJhaW50c0lnbm9yaW5nRmxvYXRzKGNvbnRhaW5pbmdCbG9ja0NvbnN0
cmFpbnRzLmhvcml6b250YWwpOwotICAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4
dC0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwgYmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnkoKS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7Cisg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50
KGludmFsaWRhdGlvblN0YXRlLCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQoY29udGFpbmVyQm94KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTYxLDcgKzE2Myw3IEBAIHZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0
ZSYgaW52YWxpZGF0aW9uCiAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgY29tcHV0ZWQg
dGhlIGJveCdzIGhlaWdodCwgd2UgY2FuIGxheW91dCB0aGUgb3V0LW9mLWZsb3cgZGVzY2VuZGFu
dHMuCiAgICAgICAgICAgICAgICAgaWYgKGlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSAmJiBk
b3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkuaGFzQ2hpbGQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxh
eW91dEJveCk7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1h
dHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0U3RhdGUoKSktPmxheW91dE91dE9mRmxv
d0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29u
c3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnRhaW5lckJveCkpOworICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjb250YWluZXJC
b3gsIGxheW91dFN0YXRlKCkpLT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0
YXRlLCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQo
Y29udGFpbmVyQm94KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKCFlc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0ICYmIGlzPENvbnRhaW5lckJv
eD4obGF5b3V0Qm94KSkKQEAgLTI1OCw3ICsyNjAsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IENvbnRhaW5lckJveCYg
YwogICAgIGZvciAoYXV0byYgY2hpbGRCb3ggOiBjaGlsZHJlbk9mVHlwZTxCb3g+KGNvbnRhaW5l
ckJveCkpIHsKICAgICAgICAgaWYgKCFjaGlsZEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIHBvc2l0aW9uT2Zmc2V0ID0gYmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY2hpbGRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGF1dG8gcG9zaXRpb25PZmZzZXQg
PSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY2hp
bGRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmJveEdlb21ldHJ5KGNoaWxkQm94KS5tb3ZlKHBvc2l0aW9uT2Zmc2V0KTsKICAgICB9CiAgICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkVuZDog
bW92ZSBpbi1mbG93IHBvc2l0aW9uZWQgY2hpbGRyZW4gLT4gcGFyZW50OiAiIDw8ICZjb250YWlu
ZXJCb3gpOwpAQCAtMjY2LDEyICsyNjgsMTIgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBDb250YWluZXJCb3gmIGMKIAog
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlv
bihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGlj
YWxDb25zdHJhaW50cykKIHsKLSAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlv
dXRCb3gpLnNldExvZ2ljYWxUb3AoYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5zdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cykpOworICAgIGZvcm1h
dHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TG9naWNhbFRvcChmb3JtYXR0
aW5nR2VvbWV0cnkoKS5zdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxD
b25zdHJhaW50cykpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVT
dGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewotICAgIGZvcm1hdHRp
bmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TG9naWNhbExlZnQoYmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpKTsKKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShs
YXlvdXRCb3gpLnNldExvZ2ljYWxMZWZ0KGZvcm1hdHRpbmdHZW9tZXRyeSgpLnN0YXRpY0hvcml6
b250YWxQb3NpdGlvbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cykpOwogfQogCiB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9y
Qm94QW5kQW5jZXN0b3JzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBDb25zdHJhaW50c1Bh
aXImIGNvbnN0cmFpbnRzUGFpcikKQEAgLTI4Niw3ICsyODgsNyBAQCB2b2lkIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5jZXN0b3Jz
KGNvbnN0CiAgICAgLy8KICAgICAvLyBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgYXMgbG9uZyBhcyB3
ZSBkb24ndCBjcm9zcyB0aGUgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGJvdW5kYXJ5LCB3ZSBz
aG91bGQgYmUgYWJsZSB0byBwcmUtY29tcHV0ZSB0aGUgZmluYWwgdG9wIHBvc2l0aW9uLgogICAg
IC8vIEZJWE1FOiB3ZSBjdXJyZW50bHkgZG9uJ3QgYWNjb3VudCBmb3IgdGhlICJjbGVhciIgcHJv
cGVydHkgd2hlbiBjb21wdXRpbmcgdGhlIGZpbmFsIHBvc2l0aW9uIGZvciBhbiBhbmNlc3Rvci4K
LSAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCk7
CisgICAgYXV0byYgZm9ybWF0dGluZ0dlb21ldHJ5ID0gdGhpcy0+Zm9ybWF0dGluZ0dlb21ldHJ5
KCk7CiAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3g7IGFuY2VzdG9yICYmIGFu
Y2VzdG9yICE9ICZyb290KCk7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2so
KSkgewogICAgICAgICBhdXRvIGNvbnN0cmFpbnRzRm9yQW5jZXN0b3IgPSBbJl0gewogICAgICAg
ICAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygp
OwpAQCAtMzYwLDcgKzM2Miw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpCiAgICAgICAgIC8v
IEZsb2F0IGF2b2lkZXJzJyBhdmFpbGFibGUgd2lkdGggbWlnaHQgYmUgc2hydW5rIGJ5IGV4aXN0
aW5nIGZsb2F0cyBpbiB0aGUgY29udGV4dC4KICAgICAgICAgYXZhaWxhYmxlV2lkdGhGbG9hdEF2
b2lkZXIgPSB1c2VkQXZhaWxhYmxlV2lkdGhGb3JGbG9hdEF2b2lkZXIoZmxvYXRpbmdDb250ZXh0
LCBsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpcik7CiAgICAgfQotICAgIGF1dG8gY29udGVudFdp
ZHRoQW5kTWFyZ2luID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZENvbnRlbnRX
aWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWluaW5nQmxvY2su
aG9yaXpvbnRhbCwgYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOworICAgIGF1dG8gY29udGVu
dFdpZHRoQW5kTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRDb250ZW50V2lk
dGhBbmRNYXJnaW4obGF5b3V0Qm94LCBjb25zdHJhaW50c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhv
cml6b250YWwsIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyKTsKICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7CiAgICAgYm94
R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50
V2lkdGgpOwogICAgIGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250ZW50V2lk
dGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRN
YXJnaW4uZW5kIH0pOwpAQCAtMzcwLDE3ICszNzIsMTcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dAogewogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVp
Z2h0KSAtPiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsKICAgICAgICAgaWYgKGxheW91dEJveC5p
c0luRmxvdygpKQotICAgICAgICAgICAgcmV0dXJuIGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCku
aW5GbG93Q29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzLmhvcml6
b250YWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nR2Vv
bWV0cnkoKS5pbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgY29uc3RyYWlu
dHMuaG9yaXpvbnRhbCwgeyB1c2VkSGVpZ2h0IH0pOwogCiAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBibG9ja0Zvcm1hdHRp
bmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGNv
bnN0cmFpbnRzLmhvcml6b250YWwsIHsgdXNlZEhlaWdodCB9KTsKKyAgICAgICAgICAgIHJldHVy
biBmb3JtYXR0aW5nR2VvbWV0cnkoKS5mbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5
b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IHVzZWRIZWlnaHQgfSk7CiAKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKIAog
ICAgIGF1dG8gY29udGVudEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUoeyB9KTsKLSAgICBpZiAo
YXV0byBtYXhIZWlnaHQgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVp
Z2h0KGxheW91dEJveCkpIHsKKyAgICBpZiAoYXV0byBtYXhIZWlnaHQgPSBmb3JtYXR0aW5nR2Vv
bWV0cnkoKS5jb21wdXRlZE1heEhlaWdodChsYXlvdXRCb3gpKSB7CiAgICAgICAgIGlmIChjb250
ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiAqbWF4SGVpZ2h0KSB7CiAgICAgICAg
ICAgICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4SGVpZ2h0KTsKICAgICAg
ICAgICAgIC8vIFVzZWQgaGVpZ2h0IHNob3VsZCByZW1haW4gdGhlIHNhbWUuCkBAIC0zODksNyAr
MzkxLDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGF1dG8gbWluSGVpZ2h0ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1p
bkhlaWdodChsYXlvdXRCb3gpKSB7CisgICAgaWYgKGF1dG8gbWluSGVpZ2h0ID0gZm9ybWF0dGlu
Z0dlb21ldHJ5KCkuY29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0Qm94KSkgewogICAgICAgICBpZiAo
Y29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDwgKm1pbkhlaWdodCkgewogICAg
ICAgICAgICAgYXV0byBtaW5IZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKG1pbkhlaWdodCk7CiAg
ICAgICAgICAgICAvLyBVc2VkIGhlaWdodCBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgpAQCAtNDc4
LDcgKzQ4MCw3IEBAIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpCiAgICAgICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSAqcXVldWUudGFrZUxhc3QoKTsKICAgICAgICAgICAgIGF1dG8gZGVzZGVuZGFu
dENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNG
b3JCb3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgIGlmICghZGVzZGVuZGFudENvbnN0cmFpbnRz
KSB7Ci0gICAgICAgICAgICAgICAgZGVzZGVuZGFudENvbnN0cmFpbnRzID0gYmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGxheW91dEJveCk7CisgICAg
ICAgICAgICAgICAgZGVzZGVuZGFudENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dlb21ldHJ5KCku
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhsYXlvdXRCb3gpOwogICAgICAgICAgICAgICAgIGZv
cm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGxheW91dEJv
eCwgKmRlc2RlbmRhbnRDb25zdHJhaW50cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
b25zdHJhaW50cy5taW5pbXVtID0gc3RkOjptYXgoY29uc3RyYWludHMubWluaW11bSwgZGVzZGVu
ZGFudENvbnN0cmFpbnRzLT5taW5pbXVtKTsKQEAgLTYwMiwxMSArNjA0LDYgQEAgdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojp1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZyhj
b25zdCBCb3gmIGxheW8KICAgICB9CiB9CiAKLUJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OmJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgeyAqdGhpcyB9OwotfQotCiBCbG9ja01h
cmdpbkNvbGxhcHNlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Om1hcmdpbkNvbGxhcHNlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gQmxvY2tNYXJnaW5Db2xsYXBzZSB7IGxheW91dFN0YXRlKCksIGZv
cm1hdHRpbmdTdGF0ZSgpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5oCmluZGV4IDc3MTllNDUxMDBlYzNjM2Y2ODYzZmM1ZDY5ZjAzMzE5NDYwMWRkZGIuLmE4
ZmQ5ZjVhODY1OTVlYzI5YzMxZDJhMGFkMTcyYzNmMzI2NmNhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5LmgiCisjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5j
bHVkZSAiQmxvY2tGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4
dC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0zOSw3ICs0MSw2IEBAIGNsYXNzIExh
eW91dFVuaXQ7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94OwotY2xhc3MgQmxvY2tG
b3JtYXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBCbG9ja01hcmdpbkNvbGxhcHNlOwogY2xhc3MgRmxv
YXRpbmdDb250ZXh0OwogCkBAIC01NCw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0
IHVzZWRDb250ZW50SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBjb25zdCBCbG9ja0Zv
cm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
QmxvY2tGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUo
KSk7IH0KKyAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21l
dHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9ibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTsgfQor
ICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmxvY2tGb3JtYXR0aW5nUXVpcmtzOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICBzdHJ1Y3QgQ29uc3RyYWludHNQYWlyIHsKQEAgLTgwLDcgKzgzLDYgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgdXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoY29uc3Qg
Qm94Jik7CiAKICAgICBCbG9ja0Zvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgeyBy
ZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpm
b3JtYXR0aW5nU3RhdGUoKSk7IH0KLSAgICBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSBibG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0OwogICAgIEJsb2NrTWFyZ2luQ29sbGFwc2UgbWFyZ2lu
Q29sbGFwc2UoKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC04OCw4ICs5MCwxMSBA
QCBwcm90ZWN0ZWQ6CiAgICAgUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgcHJlY29tcHV0ZWRNYXJn
aW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsgcmV0dXJuIG1fcHJlY29tcHV0
ZWRNYXJnaW5CZWZvcmVMaXN0LmdldCgmbGF5b3V0Qm94KTsgfQogICAgIGJvb2wgaGFzUHJlY29t
cHV0ZWRNYXJnaW5CZWZvcmUoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlY29tcHV0ZWRNYXJnaW5CZWZvcmVMaXN0LmNvbnRhaW5zKCZsYXlvdXRCb3gpOyB9CiAjZW5k
aWYKKwogcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IEJveCosIFByZWNvbXB1dGVkTWFyZ2lu
QmVmb3JlPiBtX3ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlTGlzdDsKKyAgICBjb25zdCBCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeSBtX2Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OworICAgIGNvbnN0IEJs
b2NrRm9ybWF0dGluZ1F1aXJrcyBtX2Jsb2NrRm9ybWF0dGluZ1F1aXJrczsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2sv
QmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggMDRh
MWYwYjNhYTI4ZGU1ODQwY2VmMjQ5MGFmMTU0N2EwODVlNWU1Ny4uZWE5OWY3MjUwNDlkZGQwOGY1
ZjJhY2M3ZGNkNWNjNDE1OWM2NmY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTI4Miw3ICsyODIsNyBAQCBDb250ZW50SGVpZ2h0QW5k
TWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dDb250ZW50SGVpZ2h0QW5kTWFy
Z2luKGNvbgogICAgIH0KIAogICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKSB7
Ci0gICAgICAgIGlmIChhdXRvIHN0cmV0Y2hlZEluRmxvd0hlaWdodCA9IEJsb2NrRm9ybWF0dGlu
Z1F1aXJrcyhmb3JtYXR0aW5nQ29udGV4dCgpKS5zdHJldGNoZWRJbkZsb3dIZWlnaHRJZkFwcGxp
Y2FibGUobGF5b3V0Qm94LCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luKSkKKyAgICAgICAgaWYgKGF1
dG8gc3RyZXRjaGVkSW5GbG93SGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5n
UXVpcmtzKCkuc3RyZXRjaGVkSW5GbG93SGVpZ2h0SWZBcHBsaWNhYmxlKGxheW91dEJveCwgY29u
dGVudEhlaWdodEFuZE1hcmdpbikpCiAgICAgICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2lu
LmNvbnRlbnRIZWlnaHQgPSAqc3RyZXRjaGVkSW5GbG93SGVpZ2h0OwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4IGMyMDBhODMyMGMy
MGRiNTE4NjI0OWQyMjJhMDUxNTZhMjY3ZTFhZWQuLjNmYThmYWZiNjI1N2FkYjZjZmQ5OGU3NjA4
NTdiYmNiOTM1OTA4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5LmgKQEAgLTM0LDYgKzM0LDggQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ7CiAKK2NsYXNzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ7CisK
IC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZvciBib3hl
cyBwYXJ0aWNpcGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgogY2xhc3MgQmxv
Y2tGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1Ymxp
YzoKQEAgLTYxLDQgKzYzLDYgQEAgcHJpdmF0ZToKIH0KIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19MQVlPVVRfRk9STUFUVElOR19HRU9NRVRSWShCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSwg
aXNCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5n
UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxv
Y2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCA5MmE2YzE1OGNmNjdiZTA0ZmVkNDIy
ZmNiNDVmODc5YWVkZjIyOTBmLi45NWEwZWU4ZDU5NmM5Yjg1NTNlYTJiZDljNDU3OWM3MzU5YzM3
ZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCkBA
IC00OCw3ICs0OCw2IEBAIHN0YXRpYyBib29sIGlzUXVpcmtDb250YWluZXIoY29uc3QgQm94JiBs
YXlvdXRCb3gpCiBCbG9ja0Zvcm1hdHRpbmdRdWlya3M6OkJsb2NrRm9ybWF0dGluZ1F1aXJrcyhj
b25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQogICAg
IDogRm9ybWF0dGluZ1F1aXJrcyhibG9ja0Zvcm1hdHRpbmdDb250ZXh0KQogewotICAgIEFTU0VS
VChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKTsKIH0KIAogc3RhdGljIGJvb2wgbmVlZHNT
dHJldGNoaW5nKGNvbnN0IEJveCYgbGF5b3V0Qm94KQpAQCAtNjIsNiArNjEsNyBAQCBzdGF0aWMg
Ym9vbCBuZWVkc1N0cmV0Y2hpbmcoY29uc3QgQm94JiBsYXlvdXRCb3gpCiAKIE9wdGlvbmFsPExh
eW91dFVuaXQ+IEJsb2NrRm9ybWF0dGluZ1F1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0SWZB
cHBsaWNhYmxlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4pIGNvbnN0CiB7CisgICAgQVNTRVJUKGxheW91dFN0YXRlKCku
aW5RdWlya3NNb2RlKCkpOwogICAgIGlmICghbmVlZHNTdHJldGNoaW5nKGxheW91dEJveCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSBkb3duY2Fz
dDxCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Pih0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpKTsKQEAg
LTk4LDcgKzk4LDcgQEAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQmxvY2tGb3JtYXR0aW5nUXVpcmtz
OjpzdHJldGNoZWRJbkZsb3dIZWlnaHRJZkFwcGxpY2FibGUoY28KICAgICBib2R5Qm94Q29udGVu
dEhlaWdodCAtPSBkb2N1bWVudEJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBkb2N1bWVu
dEJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CiAgICAgLy8gSG93ZXZl
ciB0aGUgbm9uLWluLWZsb3cgZG9jdW1lbnQgYm94J3MgdmVydGljYWwgbWFyZ2lucyBhcmUgaWdu
b3JlZC4gVGhleSBkb24ndCBhZmZlY3QgdGhlIGJvZHkgYm94J3MgY29udGVudCBoZWlnaHQuCiAg
ICAgaWYgKGRvY3VtZW50Qm94LmlzSW5GbG93KCkpIHsKLSAgICAgICAgYXV0byBmb3JtYXR0aW5n
R2VvbWV0cnkgPSBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSB7IGZvcm1hdHRpbmdDb250ZXh0IH07
CisgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0LmZv
cm1hdHRpbmdHZW9tZXRyeSgpOwogICAgICAgICBhdXRvIHByZWNvbXB1dGVEb2N1bWVudEJveFZl
cnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkVmVydGljYWxNYXJnaW4o
ZG9jdW1lbnRCb3gsIGZvcm1hdHRpbmdHZW9tZXRyeS5jb25zdHJhaW50c0ZvckluRmxvd0NvbnRl
bnQoaW5pdGlhbENvbnRhaW5pbmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNv
bjo6Qm9keVN0cmV0Y2hlc1RvVmlld3BvcnRRdWlyaykuaG9yaXpvbnRhbCk7CiAgICAgICAgIGJv
ZHlCb3hDb250ZW50SGVpZ2h0IC09IHByZWNvbXB1dGVEb2N1bWVudEJveFZlcnRpY2FsTWFyZ2lu
LmJlZm9yZS52YWx1ZU9yKDApICsgcHJlY29tcHV0ZURvY3VtZW50Qm94VmVydGljYWxNYXJnaW4u
YWZ0ZXIudmFsdWVPcigwKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRp
bmdRdWlya3MuaAppbmRleCA3Y2ZiYzJjNjU5OTVkNTI1NDY4YmExYTU2OTJiMDk3NmJiNWJhMmZh
Li5hMDQ0NDY2NmQ1NWFjZGE0NDdiMTMwNGUxYzQ2NDEyNDc0ODhhOWNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0
dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTQ3LDQgKzQ3LDYgQEAgcHVibGlj
OgogfQogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9GT1JNQVRUSU5HX1FVSVJL
UyhCbG9ja0Zvcm1hdHRpbmdRdWlya3MsIGlzQmxvY2tGb3JtYXR0aW5nUXVpcmtzKCkpCisKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA4ODg2
ZWExYTRmMzM0OTljNDNjNzFlNjU2ZTc2YzYwYjUxZGU4NTA2Li44ZTRiNzMyNjExYzgzY2YwMjRk
NTI2NGMyYzg0ZmNhMzFlMGMwNGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0LmNwcApAQCAtNDcsNiArNDcsNyBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dCk7CiAKIFRhYmxlV3JhcHBlckJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQoY29u
c3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEJsb2NrRm9ybWF0dGluZ1N0
YXRlJiBmb3JtYXR0aW5nU3RhdGUpCiAgICAgOiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KGZvcm1h
dHRpbmdDb250ZXh0Um9vdCwgZm9ybWF0dGluZ1N0YXRlKQorICAgICwgbV90YWJsZVdyYXBwZXJG
b3JtYXR0aW5nUXVpcmtzKCp0aGlzKQogewogfQogCkBAIC03OCw3ICs3OSw3IEBAIHZvaWQgVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0VGFibGVCb3goY29uc3QgQ29u
dGFpbmVyQm94JiB0YWJsCiAKICAgICBpZiAodGFibGVCb3guaGFzQ2hpbGQoKSkgewogICAgICAg
ICBhdXRvIGludmFsaWRhdGlvblN0YXRlID0gSW52YWxpZGF0aW9uU3RhdGUgeyB9OwotICAgICAg
ICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dCh0YWJsZUJveCwgbGF5b3V0
U3RhdGUoKSktPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KHRhYmxlQm94KSk7
CisgICAgICAgIExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KHRhYmxlQm94
LCBsYXlvdXRTdGF0ZSgpKS0+bGF5b3V0SW5GbG93Q29udGVudChpbnZhbGlkYXRpb25TdGF0ZSwg
Zm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KHRhYmxlQm94
KSk7CiAgICAgfQogCiAgICAgY29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94KHRhYmxl
Qm94LCBjb25zdHJhaW50cyk7CkBAIC0xMDAsMTMgKzEwMSwxMyBAQCB2b2lkIFRhYmxlV3JhcHBl
ckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nRm9yVGFibGVC
b3goY29ucwogICAgIC8vIG1heGltdW0gY29sbGFwc2VkIHRvcCBib3JkZXIuIFRoZSBib3R0b20g
Ym9yZGVyIHdpZHRoIGlzIGNvbXB1dGVkIGJ5IGV4YW1pbmluZyBhbGwgY2VsbHMgd2hvc2UgYm90
dG9tIGJvcmRlcnMgY29sbGFwc2UKICAgICAvLyB3aXRoIHRoZSBib3R0b20gb2YgdGhlIHRhYmxl
LiBUaGUgYm90dG9tIGJvcmRlciB3aWR0aCBpcyBlcXVhbCB0byBoYWxmIG9mIHRoZSBtYXhpbXVt
IGNvbGxhcHNlZCBib3R0b20gYm9yZGVyLgogICAgIGF1dG8mIGdyaWQgPSBsYXlvdXRTdGF0ZSgp
LmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUodGFibGVCb3gpLnRhYmxlR3JpZCgpOwot
ICAgIGF1dG8gdGFibGVCb3JkZXIgPSBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVk
Qm9yZGVyKHRhYmxlQm94KTsKKyAgICBhdXRvIHRhYmxlQm9yZGVyID0gZm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29tcHV0ZWRCb3JkZXIodGFibGVCb3gpOwogCiAgICAgYXV0byYgZmlyc3RDb2x1bW5G
aXJzdFJvd0JveCA9IGdyaWQuc2xvdCh7IDAgLCAwIH0pLT5jZWxsKCkuYm94KCk7Ci0gICAgYXV0
byBsZWZ0Qm9yZGVyID0gc3RkOjptYXgodGFibGVCb3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBibG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGZpcnN0Q29sdW1uRmlyc3RSb3dC
b3gpLmhvcml6b250YWwubGVmdCk7CisgICAgYXV0byBsZWZ0Qm9yZGVyID0gc3RkOjptYXgodGFi
bGVCb3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJv
cmRlcihmaXJzdENvbHVtbkZpcnN0Um93Qm94KS5ob3Jpem9udGFsLmxlZnQpOwogCiAgICAgYXV0
byYgbGFzdENvbHVtbkZpcnN0Um93ID0gZ3JpZC5zbG90KHsgZ3JpZC5jb2x1bW5zKCkuc2l6ZSgp
IC0gMSwgMCB9KS0+Y2VsbCgpLmJveCgpOwotICAgIGF1dG8gcmlnaHRCb3JkZXIgPSBzdGQ6Om1h
eCh0YWJsZUJvcmRlci5ob3Jpem9udGFsLnJpZ2h0LCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgp
LmNvbXB1dGVkQm9yZGVyKGxhc3RDb2x1bW5GaXJzdFJvdykuaG9yaXpvbnRhbC5yaWdodCk7Cisg
ICAgYXV0byByaWdodEJvcmRlciA9IHN0ZDo6bWF4KHRhYmxlQm9yZGVyLmhvcml6b250YWwucmln
aHQsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGxhc3RDb2x1bW5GaXJzdFJv
dykuaG9yaXpvbnRhbC5yaWdodCk7CiAKICAgICBhdXRvIHRvcEJvcmRlciA9IHRhYmxlQm9yZGVy
LnZlcnRpY2FsLnRvcDsKICAgICBhdXRvIGJvdHRvbUJvcmRlciA9IHRhYmxlQm9yZGVyLnZlcnRp
Y2FsLmJvdHRvbTsKQEAgLTExNSwzMyArMTE2LDMzIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveChjb25z
CiAgICAgICAgIGF1dG8mIGJveEluRmlyc3RSb3ggPSBncmlkLnNsb3QoeyBjb2x1bW5JbmRleCwg
MCB9KS0+Y2VsbCgpLmJveCgpOwogICAgICAgICBhdXRvJiBib3hJbkxhc3RSb3cgPSBncmlkLnNs
b3QoeyBjb2x1bW5JbmRleCwgbGFzdFJvd0luZGV4IH0pLT5jZWxsKCkuYm94KCk7CiAKLSAgICAg
ICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVyLCBibG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eSgpLmNvbXB1dGVkQm9yZGVyKGJveEluRmlyc3RSb3gpLnZlcnRpY2FsLnRvcCk7Ci0gICAgICAg
IGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgYmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnkoKS5jb21wdXRlZEJvcmRlcihib3hJbkxhc3RSb3cpLnZlcnRpY2FsLmJvdHRvbSk7Cisg
ICAgICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRlciwgZm9ybWF0dGluZ0dlb21ldHJ5
KCkuY29tcHV0ZWRCb3JkZXIoYm94SW5GaXJzdFJveCkudmVydGljYWwudG9wKTsKKyAgICAgICAg
Ym90dG9tQm9yZGVyID0gc3RkOjptYXgoYm90dG9tQm9yZGVyLCBmb3JtYXR0aW5nR2VvbWV0cnko
KS5jb21wdXRlZEJvcmRlcihib3hJbkxhc3RSb3cpLnZlcnRpY2FsLmJvdHRvbSk7CiAgICAgfQog
Ci0gICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVyLCBibG9ja0Zvcm1hdHRpbmdHZW9t
ZXRyeSgpLmNvbXB1dGVkQm9yZGVyKCp0YWJsZUJveC5maXJzdENoaWxkKCkpLnZlcnRpY2FsLnRv
cCk7CisgICAgdG9wQm9yZGVyID0gc3RkOjptYXgodG9wQm9yZGVyLCBmb3JtYXR0aW5nR2VvbWV0
cnkoKS5jb21wdXRlZEJvcmRlcigqdGFibGVCb3guZmlyc3RDaGlsZCgpKS52ZXJ0aWNhbC50b3Ap
OwogICAgIGZvciAoYXV0byYgc2VjdGlvbiA6IGNoaWxkcmVuT2ZUeXBlPENvbnRhaW5lckJveD4o
dGFibGVCb3gpKSB7Ci0gICAgICAgIGF1dG8gaG9yaXp0b25hbEJvcmRlciA9IGJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoc2VjdGlvbikuaG9yaXpvbnRhbDsKKyAgICAg
ICAgYXV0byBob3JpenRvbmFsQm9yZGVyID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRC
b3JkZXIoc2VjdGlvbikuaG9yaXpvbnRhbDsKICAgICAgICAgbGVmdEJvcmRlciA9IHN0ZDo6bWF4
KGxlZnRCb3JkZXIsIGhvcml6dG9uYWxCb3JkZXIubGVmdCk7CiAgICAgICAgIHJpZ2h0Qm9yZGVy
ID0gc3RkOjptYXgocmlnaHRCb3JkZXIsIGhvcml6dG9uYWxCb3JkZXIucmlnaHQpOwogICAgIH0K
LSAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21Cb3JkZXIsIGJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoKnRhYmxlQm94Lmxhc3RDaGlsZCgpKS52ZXJ0aWNh
bC5ib3R0b20pOworICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwgZm9y
bWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIoKnRhYmxlQm94Lmxhc3RDaGlsZCgpKS52
ZXJ0aWNhbC5ib3R0b20pOwogCiAgICAgYXV0byYgcm93cyA9IGdyaWQucm93cygpLmxpc3QoKTsK
LSAgICB0b3BCb3JkZXIgPSBzdGQ6Om1heCh0b3BCb3JkZXIsIGJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93cy5maXJzdCgpLmJveCgpKS52ZXJ0aWNhbC50b3ApOwor
ICAgIHRvcEJvcmRlciA9IHN0ZDo6bWF4KHRvcEJvcmRlciwgZm9ybWF0dGluZ0dlb21ldHJ5KCku
Y29tcHV0ZWRCb3JkZXIocm93cy5maXJzdCgpLmJveCgpKS52ZXJ0aWNhbC50b3ApOwogICAgIGZv
ciAoYXV0byYgcm93IDogcm93cykgewotICAgICAgICBhdXRvIGhvcml6dG9uYWxCb3JkZXIgPSBi
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvdy5ib3goKSkuaG9yaXpv
bnRhbDsKKyAgICAgICAgYXV0byBob3JpenRvbmFsQm9yZGVyID0gZm9ybWF0dGluZ0dlb21ldHJ5
KCkuY29tcHV0ZWRCb3JkZXIocm93LmJveCgpKS5ob3Jpem9udGFsOwogICAgICAgICBsZWZ0Qm9y
ZGVyID0gc3RkOjptYXgobGVmdEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5sZWZ0KTsKICAgICAg
ICAgcmlnaHRCb3JkZXIgPSBzdGQ6Om1heChyaWdodEJvcmRlciwgaG9yaXp0b25hbEJvcmRlci5y
aWdodCk7CiAgICAgfQotICAgIGJvdHRvbUJvcmRlciA9IHN0ZDo6bWF4KGJvdHRvbUJvcmRlciwg
YmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dzLmxhc3QoKS5ib3go
KSkudmVydGljYWwuYm90dG9tKTsKKyAgICBib3R0b21Cb3JkZXIgPSBzdGQ6Om1heChib3R0b21C
b3JkZXIsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd3MubGFzdCgpLmJv
eCgpKS52ZXJ0aWNhbC5ib3R0b20pOwogCiAgICAgYXV0byBjb2xsYXBzZWRCb3JkZXIgPSBFZGdl
cyB7IHsgbGVmdEJvcmRlciwgcmlnaHRCb3JkZXIgfSwgeyB0b3BCb3JkZXIsIGJvdHRvbUJvcmRl
ciB9IH07CiAgICAgZ3JpZC5zZXRDb2xsYXBzZWRCb3JkZXIoY29sbGFwc2VkQm9yZGVyKTsKIAog
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkodGFi
bGVCb3gpOwogICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihjb2xsYXBzZWRCb3JkZXIgLyAyKTsK
LSAgICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKGJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29t
cHV0ZWRQYWRkaW5nKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRo
KSk7CisgICAgYm94R2VvbWV0cnkuc2V0UGFkZGluZyhmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21w
dXRlZFBhZGRpbmcodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgp
KTsKIH0KIAogdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
V2lkdGhBbmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKQEAgLTE4
Niw3ICsxODcsNyBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0CiAgICAgLy8gU2ltaWxhciBzZXR1
cCB3aXRoIG5vbi10YWJsZSBjb250ZW50IHdvdWxkIHJlc29sdmUgdGhlIGlubmVyIGJsb2NrIGxl
dmVsIGJveCdzIHdpZHRoIHRvIDQwcHg7CiAgICAgLy8gVGhpcyBuZWVkcyBjbGFyaWZpY2F0aW9u
IGluIHRoZSBzcGVjLgogICAgIGF1dG8gaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdX
aWR0aCA9IG1faG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdGbG9hdHMubG9naWNhbFdpZHRo
OwotICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gYmxvY2tGb3JtYXR0aW5nR2VvbWV0cnko
KTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSB0aGlzLT5mb3JtYXR0aW5nR2VvbWV0
cnkoKTsKICAgICBhdXRvIGNvbXB1dGVkV2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0
ZWRXaWR0aCh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRGb3JSZXNvbHZpbmdXaWR0aCk7
CiAgICAgYXV0byBjb21wdXRlZE1heFdpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVk
TWF4V2lkdGgodGFibGVCb3gsIGhvcml6b250YWxDb25zdHJhaW50Rm9yUmVzb2x2aW5nV2lkdGgp
OwogICAgIGF1dG8gY29tcHV0ZWRNaW5XaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeS5jb21wdXRl
ZE1pbldpZHRoKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludEZvclJlc29sdmluZ1dpZHRo
KTsKQEAgLTIyMiwxMyArMjIzLDEzIEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0CiAgICAgLy8g
YWxyZWFkeSBiZWVuIHRha2VuIGludG8gYWNjb3VudCBkdXJpbmcgdGhlIFRGQyBsYXlvdXQuCiAg
ICAgYXV0byBvdmVycmlkZGVuVGFibGVIZWlnaHQgPSBbJl0oKSAtPiBPcHRpb25hbDxMYXlvdXRV
bml0PiB7CiAgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIFRhYmxlV3JhcHBlclF1aXJrcygqdGhpcykub3ZlcnJpZGRlblRhYmxlSGVp
Z2h0KHRhYmxlQm94KTsKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nUXVpcmtzKCkub3Zl
cnJpZGRlblRhYmxlSGVpZ2h0KHRhYmxlQm94KTsKICAgICAgICAgaWYgKHRhYmxlQm94Lmhhc0lu
Rmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuIGJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5KCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJv
eCk7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29udGVudEhlaWdo
dEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfSgpOwogCi0gICAgYXV0byBoZWlnaHRBbmRNYXJnaW4gPSBibG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeSgpLmluRmxvd0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4odGFibGVCb3gsIGNvbnN0cmFp
bnRzLmhvcml6b250YWwsIHsgb3ZlcnJpZGRlblRhYmxlSGVpZ2h0IH0pOworICAgIGF1dG8gaGVp
Z2h0QW5kTWFyZ2luID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5GbG93Q29udGVudEhlaWdodEFu
ZE1hcmdpbih0YWJsZUJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCwgeyBvdmVycmlkZGVuVGFi
bGVIZWlnaHQgfSk7CiAgICAgYXV0byB2ZXJ0aWNhbE1hcmdpbiA9IG1hcmdpbkNvbGxhcHNlKCku
Y29sbGFwc2VkVmVydGljYWxWYWx1ZXModGFibGVCb3gsIGhlaWdodEFuZE1hcmdpbi5ub25Db2xs
YXBzZWRNYXJnaW4pOwogICAgIC8vIENhY2hlIHRoZSBjb21wdXRlZCBwb3NpdGl2ZSBhbmQgbmVn
YXRpdmUgbWFyZ2luIHZhbHVlIHBhaXIuCiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0VXNlZFZl
cnRpY2FsTWFyZ2luKHRhYmxlQm94LCB2ZXJ0aWNhbE1hcmdpbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9U
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggZDc2M2NhYTkzMzQ3OTdjMTUzNzcxMjY3NDY1OGIz
NWFmZjY3ZGJiZC4uZDA2NTE1MTQ3YmJhMzZkOTgzNTU3MmM4ODYyZTFhMzI4MDUyZTZkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90
YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVy
L1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkJsb2NrRm9y
bWF0dGluZ1F1aXJrcy5oIgorI2luY2x1ZGUgIlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDUsNiArNDYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEhvcml6b250YWxDb25z
dHJhaW50c0lnbm9yaW5nRmxvYXRzKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnRzKSB7IG1faG9yaXpvbnRhbENvbnN0cmFpbnRzSWdub3JpbmdGbG9hdHMg
PSBob3Jpem9udGFsQ29uc3RyYWludHM7IH0KIAorICAgIGNvbnN0IFRhYmxlV3JhcHBlclF1aXJr
cyYgZm9ybWF0dGluZ1F1aXJrcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdGFibGVXcmFwcGVy
Rm9ybWF0dGluZ1F1aXJrczsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgbGF5b3V0VGFibGVCb3go
Y29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dD
b250ZW50Jik7CiAKQEAgLTUyLDggKzU1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVX
aWR0aEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYpOwogICAgIHZvaWQgY29tcHV0ZUhlaWdodEFuZE1hcmdpbkZvclRh
YmxlQm94KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudCYpOwogCi1wcml2YXRlOgogICAgIEhvcml6b250YWxDb25zdHJhaW50cyBtX2hvcml6b250
YWxDb25zdHJhaW50c0lnbm9yaW5nRmxvYXRzOworICAgIGNvbnN0IFRhYmxlV3JhcHBlclF1aXJr
cyBtX3RhYmxlV3JhcHBlckZvcm1hdHRpbmdRdWlya3M7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBl
ci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCA4ZjUwYjBiZWIzNTk0YTAzMjI5MTY3NGZj
NDY5YWVkM2I5NzZhYjkzLi5jZTU2ZDIxMmU1Mjc0ZDM5OGUyZjc1OTQ2Yjk3ZWEyMzNjZDA3ZGFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Js
b2NrL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3
cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5jcHAKQEAgLTM4LDE0ICsz
OCwxNCBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIFRhYmxlV3JhcHBlclF1aXJrczo6VGFibGVXcmFw
cGVyUXVpcmtzKGNvbnN0IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1h
dHRpbmdDb250ZXh0KQogICAgIDogQmxvY2tGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdDb250
ZXh0KQogewotICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKTsKIH0KIAog
TGF5b3V0VW5pdCBUYWJsZVdyYXBwZXJRdWlya3M6Om92ZXJyaWRkZW5UYWJsZUhlaWdodChjb25z
dCBDb250YWluZXJCb3gmIHRhYmxlQm94KSBjb25zdAogeworICAgIEFTU0VSVChsYXlvdXRTdGF0
ZSgpLmluUXVpcmtzTW9kZSgpKTsKICAgICAvLyBJbiBxdWlya3MgbW9kZSBhbHdheXMgdXNlIHRo
ZSBjb250ZW50IGhlaWdodC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgd2l0aCBjb250ZW50IHRha2Ug
Y29tcHV0ZWQgdmFsdWVzIGludG8gYWNjb3VudC4KICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4
dCA9IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KHRoaXMtPmZvcm1hdHRpbmdDb250
ZXh0KCkpOwotICAgIHJldHVybiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeShmb3JtYXR0aW5nQ29u
dGV4dCkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCh0YWJsZUJveCk7Cisg
ICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0LmZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QodGFibGVCb3gpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxl
d3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3Jh
cHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCmluZGV4IDExZmJmMjVmMWUzMTlkZDg1ZDlhMmYz
MDUxMWFlYTRmNGU0NjgwYzEuLjNiMjg4NmM5MTVhNzk0ZGM5MjM5ODdkMWY0MzNmYzZkOWZiMjhi
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
YmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svdGFibGV3
cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oCkBAIC0zNCw2ICszNCw4
IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OwogCitjbGFzcyBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Owor
CiBjbGFzcyBUYWJsZVdyYXBwZXJRdWlya3MgOiBwdWJsaWMgQmxvY2tGb3JtYXR0aW5nUXVpcmtz
IHsKIHB1YmxpYzoKICAgICBUYWJsZVdyYXBwZXJRdWlya3MoY29uc3QgVGFibGVXcmFwcGVyQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdD
b250ZXh0LmNwcAppbmRleCA2YTJkMjdjNjk1YjgyMWE4MWJhNjVmOWVhMTdjMmNmYzQ2ZjcxMDE5
Li5iNjc5YTMzMTRhZTIxMDhjNTZhODY2MWJhZTIxMGFmMjBmMzUyOTFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRp
bmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNDQsNiArNDQsOCBAQCBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRmxleEZvcm1hdHRpbmdDb250ZXh0KTsKIAogRmxleEZv
cm1hdHRpbmdDb250ZXh0OjpGbGV4Rm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94
JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIEZsZXhGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdT
dGF0ZSkKICAgICA6IEZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgZm9y
bWF0dGluZ1N0YXRlKQorICAgICwgbV9mbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKQorICAg
ICwgbV9mbGV4Rm9ybWF0dGluZ1F1aXJrcygqdGhpcykKIHsKIH0KIApAQCAtNjcsNyArNjksNyBA
QCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbgogdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OnNp
emVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGNv
bnN0cmFpbnRzKQogewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRp
bmdTdGF0ZSgpOwotICAgIGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gZmxleEZvcm1hdHRpbmdH
ZW9tZXRyeSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRp
bmdHZW9tZXRyeSgpOwogICAgIGF1dG8gZmxleEl0ZW1NYWluQXhpc1N0YXJ0ID0gY29uc3RyYWlu
dHMuaG9yaXpvbnRhbC5sb2dpY2FsTGVmdDsKICAgICBhdXRvIGZsZXhJdGVtTWFpbkF4aXNFbmQg
PSBmbGV4SXRlbU1haW5BeGlzU3RhcnQ7CiAgICAgYXV0byBmbGV4SXRlbUNyb3NBeGlzU3RhcnQg
PSBjb25zdHJhaW50cy52ZXJ0aWNhbC5sb2dpY2FsVG9wOwpAQCAtMTEwLDcgKzExMiw3IEBAIHZv
aWQgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3QgQ29u
c3RyYWludHNGb3JJbkZsb3dDb250CiB2b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JGbGV4SXRlbXMoKQogewogICAgIGF1dG8mIGZv
cm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGF1dG8gZm9ybWF0
dGluZ0dlb21ldHJ5ID0gZmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpOworICAgIGF1dG8mIGZvcm1h
dHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRpbmdHZW9tZXRyeSgpOwogICAgIGZvciAoYXV0
byYgZmxleEl0ZW0gOiBjaGlsZHJlbk9mVHlwZTxDb250YWluZXJCb3g+KHJvb3QoKSkpIHsKICAg
ICAgICAgaWYgKGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94
KGZsZXhJdGVtKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTE4LDExICsxMjAsNiBAQCB2
b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHNGb3JGbGV4SXRlbXMoKQogICAgIH0KIH0KIAotRmxleEZvcm1hdHRpbmdHZW9tZXRyeSBGbGV4
Rm9ybWF0dGluZ0NvbnRleHQ6OmZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoKSBjb25zdAotewotICAg
IHJldHVybiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKLX0KLQogfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxl
eEZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMjIzZmEwODYwODdmOWUz
Nzk4ZWFhNzc0Y2YzMDVkOGU5YzJhYzAzZS4uMDBjZTA5YjZlZGJhZTQ3MWMyMDkwMTg5ZGI5OWNl
OGY3ZjRmZDEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaApA
QCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CiAKKyNpbmNsdWRlICJGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxleEZv
cm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgpAQCAtMzQsNyArMzUsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNzIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnk7CiBj
bGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5
b3V0IGxvZ2ljIGZvciBmbGV4IGZvcm1hdHRpbmcgY29udGV4dHMuCiAvLyBodHRwczovL3d3dy53
My5vcmcvVFIvY3NzLWZsZXhib3gtMS8KQEAgLTQ3LDE0ICs0NywxOCBAQCBwdWJsaWM6CiAKICAg
ICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cygpIG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkg
ZmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0OworICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxl
eEZvcm1hdHRpbmdHZW9tZXRyeTsgfQorICAgIGNvbnN0IEZvcm1hdHRpbmdRdWlya3MmIGZvcm1h
dHRpbmdRdWlya3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsZXhGb3JtYXR0aW5nUXVpcmtz
OyB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBzaXplQW5kUGxhY2VGbGV4SXRlbXMoY29uc3QgQ29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50Jik7CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljV2lk
dGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcygpOwogCiAgICAgY29uc3QgRmxleEZvcm1hdHRpbmdT
dGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RmxleEZvcm1h
dHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogICAg
IEZsZXhGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25jYXN0
PEZsZXhGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUo
KSk7IH0KKworICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkgbV9mbGV4Rm9ybWF0dGlu
Z0dlb21ldHJ5OworICAgIGNvbnN0IEZvcm1hdHRpbmdRdWlya3MgbV9mbGV4Rm9ybWF0dGluZ1F1
aXJrczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5o
CmluZGV4IGExNTFkNjMzY2M1NjRhZGJhM2FhN2VhNTMyNWU2MWIzYzRkMzkyMTMuLjQxNmM3ZGVj
YWNkNDJiZDJiMTE1MDNjYzBlYTYxMzA3YzllNzE0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nR2VvbWV0cnkuaApAQCAtMzQsNiArMzQsOCBAQCBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogY2xhc3MgRmxleEZvcm1hdHRpbmdDb250ZXh0OwogCitjbGFzcyBGbGV4Rm9ybWF0dGlu
Z0NvbnRleHQ7CisKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6
aW5nIGZvciBmbGV4IGl0ZW1zLgogY2xhc3MgRmxleEZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1Ymxp
YyBGb3JtYXR0aW5nR2VvbWV0cnkgewogcHVibGljOgpAQCAtNDgsNCArNTAsNiBAQCBwcml2YXRl
OgogfQogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0xBWU9VVF9GT1JNQVRUSU5HX0dFT01F
VFJZKEZsZXhGb3JtYXR0aW5nR2VvbWV0cnksIGlzRmxleEZvcm1hdHRpbmdHZW9tZXRyeSgpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcAppbmRleCA1NjAyYzgxNzliNGUxYjVkYmQwYzIyN2VhZTYxZTYwZDc4YTA3OWY1Li44OTBi
ZTFmMWQ1NDAyN2ExODU1MjMyM2YwZDNkMDgzYzFkYjU2NTI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0zMCw4ICszMCw2IEBACiAK
ICNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgot
I2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgotI2luY2x1ZGUgIklubGluZUZv
cm1hdHRpbmdRdWlya3MuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNp
bmNsdWRlICJJbmxpbmVMaW5lQm94LmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZVJ1bi5oIgpAQCAt
NTgsNiArNTYsOCBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQpOwogCiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIElubGluZUZv
cm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKQogICAgIDogRm9ybWF0dGluZ0NvbnRleHQo
Zm9ybWF0dGluZ0NvbnRleHRSb290LCBmb3JtYXR0aW5nU3RhdGUpCisgICAgLCBtX2lubGluZUZv
cm1hdHRpbmdHZW9tZXRyeSgqdGhpcykKKyAgICAsIG1faW5saW5lRm9ybWF0dGluZ1F1aXJrcygq
dGhpcykKIHsKIH0KIApAQCAtMTA0LDkgKzEwNCw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlv
CiAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRpbmdSb290Lmhhc0NoaWxkKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExheW91dENvbnRleHQ6OmNy
ZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdSb290LCBsYXlvdXRTdGF0ZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRpbmdSb290Lmhhc0luRmxvd09yRmxvYXRpbmdD
aGlsZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91
dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGlubGluZUZvcm1hdHRpbmdHZW9tZXRy
eSgpLmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQo
aW52YWxpZGF0aW9uU3RhdGUsIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9ySW5G
bG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOwogICAgICAgICAgICAgICAgICAgICBjb21wdXRl
SGVpZ2h0QW5kTWFyZ2luKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsK
LSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dE91dE9mRmxvd0Nv
bnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0
cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChmb3JtYXR0aW5nUm9vdCkpOworICAgICAgICAgICAg
ICAgICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0T3V0T2ZGbG93Q29udGVudChpbnZhbGlk
YXRpb25TdGF0ZSwgZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JPdXRPZkZsb3dD
b250ZW50KGZvcm1hdHRpbmdSb290KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oZm9ybWF0dGluZ1Jvb3QsIGNvbnN0
cmFpbnRzLmhvcml6b250YWwpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE5OCw3ICsxOTgs
NyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1z
JiBpbmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAgICAgICBhdXRvIGluaXRpYWxMaW5lSGVp
Z2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7CiAgICAgICAgICAgICBpZiAobGF5b3V0
U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdCgp
LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7Ci0gICAgICAgICAgICByZXR1cm4gSW5saW5l
Rm9ybWF0dGluZ1F1aXJrcygqdGhpcykuaW5pdGlhbExpbmVIZWlnaHQoKTsKKyAgICAgICAgICAg
IHJldHVybiBmb3JtYXR0aW5nUXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKTsKICAgICAgICAg
fSgpOwogICAgICAgICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBJbmxpbmVSZWN0IHsg
bGluZUxvZ2ljYWxUb3AsIGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbExlZnQsIGNvbnN0
cmFpbnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoLCBpbml0aWFsTGluZUhlaWdodCB9OwogICAg
ICAgICBhdXRvIGxpbmVDb250ZW50ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5lQ29udGVudChu
ZWVkc0xheW91dFJhbmdlLCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgsIGxlYWRpbmdMb2dp
Y2FsV2lkdGgsIGluaXRpYWxMaW5lQ29uc3RyYWludHMsIGlzRmlyc3RMaW5lKTsKQEAgLTIwOCw3
ICsyMDgsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGlu
ZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAgICAgICBpZiAoIWxpbmVDb250
ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmVlZHNMYXlvdXRSYW5n
ZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKICAgICAgICAgICAgIGlzRmlyc3RMaW5l
ID0gZmFsc2U7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9IGlubGluZUZvcm1hdHRpbmdH
ZW9tZXRyeSgpLmxvZ2ljYWxUb3BGb3JOZXh0TGluZShsaW5lQ29udGVudCwgbGluZUxvZ2ljYWxS
ZWN0LmJvdHRvbSgpLCBmbG9hdGluZ0NvbnRleHQpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxU
b3AgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5sb2dpY2FsVG9wRm9yTmV4dExpbmUobGluZUNvbnRl
bnQsIGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKSwgZmxvYXRpbmdDb250ZXh0KTsKICAgICAgICAg
ICAgIGlmIChsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgZmluYWwgY29udGVudCBoZWlnaHQgb2YgdGhpcyBpbmxpbmUgZm9y
bWF0dGluZyBjb250ZXh0IHNob3VsZCBpbmNsdWRlIHRoZSBjbGVhcmVkIGZsb2F0cyBhcyB3ZWxs
LgogICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRDbGVhckdhcEFmdGVyTGFzdExp
bmUobGluZUxvZ2ljYWxUb3AgLSBsaW5lTG9naWNhbFJlY3QuYm90dG9tKCkpOwpAQCAtMjQ5LDcg
KzI0OSw3IEBAIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhCiAgICAgQVNTRVJUKCFmb3JtYXR0aW5n
U3RhdGUoKS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwogCiAgICAgaWYgKCFyb290KCku
aGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpIHsKLSAgICAgICAgYXV0byBjb25zdHJhaW50cyA9
IGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgp
LCB7IH0pOworICAgICAgICBhdXRvIGNvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dlb21ldHJ5KCku
Y29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgfSk7CiAgICAgICAgIGZvcm1hdHRpbmdT
dGF0ZSgpLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29uc3RyYWludHMpOwogICAgICAg
ICByZXR1cm4gY29uc3RyYWludHM7CiAgICAgfQpAQCAtMjk2LDcgKzI5Niw3IEBAIEludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhCiAKICAgICBhdXRvIG1pbmltdW1Db250ZW50V2lkdGggPSBjZWlsZWRM
YXlvdXRVbml0KG1heGltdW1MaW5lV2lkdGgoMCkpOwogICAgIGF1dG8gbWF4aW11bUNvbnRlbnRX
aWR0aCA9IGNlaWxlZExheW91dFVuaXQobWF4aW11bUxpbmVXaWR0aChtYXhJbmxpbmVMYXlvdXRV
bml0KCkpKTsKLSAgICBhdXRvIGNvbnN0cmFpbnRzID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgbWluaW11bUNvbnRlbnRXaWR0aCwg
bWF4aW11bUNvbnRlbnRXaWR0aCB9KTsKKyAgICBhdXRvIGNvbnN0cmFpbnRzID0gZm9ybWF0dGlu
Z0dlb21ldHJ5KCkuY29uc3RyYWluQnlNaW5NYXhXaWR0aChyb290KCksIHsgbWluaW11bUNvbnRl
bnRXaWR0aCwgbWF4aW11bUNvbnRlbnRXaWR0aCB9KTsKICAgICBmb3JtYXR0aW5nU3RhdGUoKS5z
ZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKICAgICByZXR1cm4gY29u
c3RyYWludHM7CiB9CkBAIC0zMjMsNyArMzIzLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94Jgog
ewogICAgIEFTU0VSVChmb3JtYXR0aW5nUm9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0
KCkpOwogICAgIGF1dG8gY29uc3RyYWludHMgPSBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsg
fTsKLSAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCku
Zml4ZWRWYWx1ZShmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpKSkKKyAgICBp
ZiAoYXV0byBmaXhlZFdpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuZml4ZWRWYWx1ZShmb3Jt
YXR0aW5nUm9vdC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpKSkKICAgICAgICAgY29uc3RyYWludHMg
PSB7ICpmaXhlZFdpZHRoLCAqZml4ZWRXaWR0aCB9OwogICAgIGVsc2UgewogICAgICAgICBhdXRv
IGhhc0luZmxvd09yRmxvYXRpbmdDb250ZW50ID0gaXM8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5n
Um9vdCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nUm9vdCkuaGFzSW5GbG93
T3JGbG9hdGluZ0NoaWxkKCk7CkBAIC0zMzIsMTQgKzMzMiwxNCBAQCB2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JGb3JtYXR0aW5nUm9vdChjb25z
dCBCb3gmCiAgICAgICAgIGlmIChoYXNJbmZsb3dPckZsb2F0aW5nQ29udGVudCAmJiAhc2hvdWxk
SWdub3JlQ2hpbGRDb250ZW50KQogICAgICAgICAgICAgY29uc3RyYWludHMgPSBMYXlvdXRDb250
ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1h
dHRpbmdSb290KSwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cygpOwogICAgIH0KLSAgICBjb25zdHJhaW50cyA9IGlubGluZUZvcm1hdHRpbmdHZW9tZXRy
eSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsK
KyAgICBjb25zdHJhaW50cyA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4
V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKICAgICBjb25zdHJhaW50cy5leHBh
bmQoZ2VvbWV0cnlGb3JCb3goZm9ybWF0dGluZ1Jvb3QpLmhvcml6b250YWxNYXJnaW5Cb3JkZXJB
bmRQYWRkaW5nKCkpOwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNldEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHNGb3JCb3goZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKIH0KIAogdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKQogewotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gaW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9
IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0
cnkobGF5b3V0Qm94KS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVP
cigwKSB9KTsKIH0KIApAQCAtMzQ3LDExICszNDcsMTEgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dAogewogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lk
dGgpIHsKICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVu
dFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRX
aWR0aCwgeyB9IH0pOworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmZs
b2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSkKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnko
KS5pbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgeyB1c2VkV2lkdGgsIHsgfSB9KTsKKyAgICAgICAgICAgIHJldHVybiBmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5pbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkV2lkdGgsIHsgfSB9KTsKICAgICAgICAg
aWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgICAgICByZXR1cm4gaW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
ZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywg
eyB9LCB7IHVzZWRXaWR0aCwgeyB9IH0pOworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGRvd25jYXN0PFJl
cGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgeyB1c2Vk
V2lkdGgsIHsgfSB9KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiBDb250ZW50V2lkdGhBbmRNYXJnaW4geyB9OwogICAgIH07CkBAIC0zNTksMTMgKzM1OSwx
MyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4o
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiAgICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJn
aW4gPSBjb21wdXRlKHsgfSk7CiAKICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gaG9yaXpvbnRh
bENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGlubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFi
bGVXaWR0aCkpIHsKKyAgICBpZiAoYXV0byBtYXhXaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgp
LmNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkpIHsKICAgICAgICAg
YXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4V2lkdGgpOwogICAgICAgICBpZiAo
Y29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA+IG1heFdpZHRoQW5kTWFyZ2luLmNv
bnRlbnRXaWR0aCkKICAgICAgICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IG1heFdpZHRo
QW5kTWFyZ2luOwogICAgIH0KIAotICAgIGF1dG8gbWluV2lkdGggPSBpbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpLnZh
bHVlT3IoMCk7CisgICAgYXV0byBtaW5XaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1
dGVkTWluV2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCkudmFsdWVPcigwKTsKICAgICBh
dXRvIG1pbldpZHRoQW5kTWFyZ2luID0gY29tcHV0ZShtaW5XaWR0aCk7CiAgICAgaWYgKGNvbnRl
bnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGggPCBtaW5XaWR0aEFuZE1hcmdpbi5jb250ZW50
V2lkdGgpCiAgICAgICAgIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IG1pbldpZHRoQW5kTWFyZ2lu
OwpAQCAtMzc5LDIzICszNzksMjMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKIHsKICAgICBh
dXRvIGNvbXB1dGUgPSBbJl0oT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEhlaWdodCkgewogICAg
ICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRIZWlnaHQgfSk7
CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGluZ0dlb21ldHJ5KCkuZmxvYXRpbmdDb250ZW50
SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRI
ZWlnaHQgfSk7CiAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmlubGluZUJsb2NrQ29u
dGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB1
c2VkSGVpZ2h0IH0pOworICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdHZW9tZXRyeSgpLmlu
bGluZUJsb2NrQ29udGVudEhlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgeyB1c2VkSGVpZ2h0IH0pOwogICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFj
ZWRCb3goKSkKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoKS5p
bmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+
KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9LCB7IHVzZWRIZWlnaHQgfSk7
CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGluZ0dlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRD
b250ZW50SGVpZ2h0QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBo
b3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgeyB1c2VkSGVpZ2h0IH0pOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4g
eyB9OwogICAgIH07CiAKICAgICBhdXRvIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRl
KHsgfSk7Ci0gICAgaWYgKGF1dG8gbWF4SGVpZ2h0ID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
KCkuY29tcHV0ZWRNYXhIZWlnaHQobGF5b3V0Qm94KSkgeworICAgIGlmIChhdXRvIG1heEhlaWdo
dCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4SGVpZ2h0KGxheW91dEJveCkpIHsK
ICAgICAgICAgYXV0byBtYXhIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKG1heEhlaWdodCk7CiAg
ICAgICAgIGlmIChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQgPiBtYXhIZWln
aHRBbmRNYXJnaW4uY29udGVudEhlaWdodCkKICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRN
YXJnaW4gPSBtYXhIZWlnaHRBbmRNYXJnaW47CiAgICAgfQogCi0gICAgaWYgKGF1dG8gbWluSGVp
Z2h0ID0gaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRNaW5IZWlnaHQobGF5b3V0
Qm94KSkgeworICAgIGlmIChhdXRvIG1pbkhlaWdodCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNv
bXB1dGVkTWluSGVpZ2h0KGxheW91dEJveCkpIHsKICAgICAgICAgYXV0byBtaW5IZWlnaHRBbmRN
YXJnaW4gPSBjb21wdXRlKG1pbkhlaWdodCk7CiAgICAgICAgIGlmIChjb250ZW50SGVpZ2h0QW5k
TWFyZ2luLmNvbnRlbnRIZWlnaHQgPCBtaW5IZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCkK
ICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gPSBtaW5IZWlnaHRBbmRNYXJnaW47
CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVj
dElubGluZUNvbnRlbnRJZk5lZWRlZCgpCiBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGlu
ZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cykKIHsKICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5m
b3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGlubGluZUZv
cm1hdHRpbmdHZW9tZXRyeSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMt
PmZvcm1hdHRpbmdHZW9tZXRyeSgpOwogCiAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3go
Zm9ybWF0dGluZ0dlb21ldHJ5LmxpbmVCb3hGb3JMaW5lQ29udGVudChsaW5lQ29udGVudCkpOwog
ICAgIGNvbnN0IGF1dG8mIGxpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUubGluZUJveGVzKCkubGFz
dCgpOwpAQCAtNjEyLDExICs2MTIsNiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpp
bnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJgogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGFsc28gd2hlcmUgd2Ugd291bGQgZGVsZXRlIGlubGluZSBpdGVtcyBp
ZiB0aGVpciBjb250ZW50IGNoYW5nZWQuCiB9CiAKLUlubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKLX0KLQogfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCBkY2U4YzNlZjk2YzdmZGRmZWUyYmIxY2ViMDFiMzIzZTA4Njk2YTA1Li4zNWM5ZWY2NDVjOTgz
MjQyODlhY2Y3ZTEyZTUwYjQzNDdjYTcyNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTI4LDEzICsyOCwxNCBAQAogI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKyNpbmNsdWRlICJJbmxp
bmVGb3JtYXR0aW5nUXVpcmtzLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBMYXlvdXQgewogCi1jbGFzcyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk7CiBjbGFzcyBJbmxp
bmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKIGNsYXNzIExpbmVC
b3g7CkBAIC01MywxMSArNTQsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBsaW5lTGF5b3V0Rm9y
SW50ZXJncmF0aW9uKEludmFsaWRhdGlvblN0YXRlJiwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZs
b3dDb250ZW50Jik7CiAKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1h
dHRpbmdHZW9tZXRyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5OyB9CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1F1aXJrcyYgZm9ybWF0dGluZ1F1
aXJrcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ1F1aXJrczsgfQor
CiBwcml2YXRlOgogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CiAKLSAgICBJbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkgaW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3Q7Ci0KICAgICB2b2lkIGxpbmVM
YXlvdXQoSW5saW5lSXRlbXMmLCBMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlLCBjb25zdCBD
b25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKTsKIAogICAgIHZvaWQgY29tcHV0ZUludHJpbnNp
Y1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94Jik7CkBAIC03MCw2ICs3Miw5IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCk7CiAgICAgSW5s
aW5lUmVjdCBjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6
TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKICAgICB2b2lkIGlu
dmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29uc3QgSW52YWxpZGF0aW9uU3RhdGUmKTsKKworICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBtX2lubGluZUZvcm1hdHRpbmdHZW9tZXRy
eTsKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzIG1faW5saW5lRm9ybWF0dGluZ1F1
aXJrczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwCmluZGV4IDQzYjMzMGE3MTYxZDkzZGI5MDliZTViNmM4YmI4MDA4MTAyNjBk
MzguLmMyNWZhMTQzZmE3MjY2NWUwMzVlNWJkOTg4MDM3MmMzYzYzOTg1N2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZv
cm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtMzkxLDcg
KzM5MSw3IEBAIHZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1dGVMaW5lQm94SGVpZ2h0QW5kQWxp
Z25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseShMaW5lCiAgICAgLy8gMi4gQ29tcHV0ZSB0aGUg
YmFzZWxpbmUvbG9naWNhbCB0b3AgcG9zaXRpb24gb2YgdGhlIHJvb3QgaW5saW5lIGJveC4gQWxp
Z25lZCBib3hlcyBwdXNoIHRoZSByb290IGlubGluZSBib3ggYXJvdW5kIGluc2lkZSB0aGUgbGlu
ZSBib3guCiAgICAgLy8gMy4gRmluYWxseSBhbGlnbiB0aGUgaW5saW5lIGxldmVsIGJveGVzIHVz
aW5nIChtb3N0bHkpIG5vcm1hbCBpbmxpbmUgbGV2ZWwgYm94IGdlb21ldHJpZXMuCiAgICAgYXV0
byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOwotICAgIGF1dG8gZm9y
bWF0dGluZ0dlb21ldHJ5ID0gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5IHsgZm9ybWF0dGluZ0Nv
bnRleHQoKSB9OworICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZm9ybWF0dGluZ0dlb21ldHJ5KCk7CiAKICAgICBhdXRvIGNvbXB1dGVMaW5lQm94TG9n
aWNhbEhlaWdodCA9IFsmXSB7CiAgICAgICAgIC8vIExpbmUgYm94IGhlaWdodCBjb21wdXRhdGlv
biBpcyBiYXNlZCBvbiB0aGUgbGF5b3V0IGJvdW5kcyBvZiB0aGUgaW5saW5lIGJveGVzIGFuZCBu
b3QgdGhlaXIgbG9naWNhbCAoYXNjZW50L2Rlc2NlbnQpIGRpbWVuc2lvbnMuCkBAIC02NjksNyAr
NjY5LDcgQEAgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQKIHsKIH0KIAotTGluZUJveCBJbmxpbmVG
b3JtYXR0aW5nR2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRl
cjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KQorTGluZUJveCBJbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50KSBjb25zdAogewogICAgIHJldHVybiBMaW5lQm94QnVpbGRlcihmb3Jt
YXR0aW5nQ29udGV4dCgpKS5idWlsZChsaW5lQ29udGVudCk7CiB9CkBAIC03MzAsNyArNzMwLDcg
QEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGlu
ZUJsb2NrQ29udGVudEhlaWdodEFuZE1hcmcKIGJvb2wgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
OjppbmxpbmVMZXZlbEJveEFmZmVjdHNMaW5lQm94KGNvbnN0IExpbmVCb3g6OklubGluZUxldmVs
Qm94JiBpbmxpbmVMZXZlbEJveCwgY29uc3QgTGluZUJveCYgbGluZUJveCkgY29uc3QKIHsKICAg
ICBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSB8fCBpbmxpbmVMZXZlbEJveC5pc0xp
bmVCcmVha0JveCgpKQotICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01v
ZGUoKSA/IHRydWUgOiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzKGZvcm1hdHRpbmdDb250ZXh0KCkp
LmlubGluZUxldmVsQm94QWZmZWN0c0xpbmVCb3goaW5saW5lTGV2ZWxCb3gsIGxpbmVCb3gpOwor
ICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSA/IHRydWUgOiBm
b3JtYXR0aW5nQ29udGV4dCgpLmZvcm1hdHRpbmdRdWlya3MoKS5pbmxpbmVMZXZlbEJveEFmZmVj
dHNMaW5lQm94KGlubGluZUxldmVsQm94LCBsaW5lQm94KTsKICAgICBpZiAoaW5saW5lTGV2ZWxC
b3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpKSB7CiAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJv
eC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaAppbmRleCBkNjE0
ZmQyZDkyYTlhMTllNDU5ZDkxODQxNzFjMGM3YTFkM2RmMjE0Li4xY2Q0NmE0NDc3ZWY4NzljZGEy
NTE5ZjcyNTExZGQ5YmRhYTdiMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVG
b3JtYXR0aW5nR2VvbWV0cnkuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBJbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKICAgICBJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsK
IAotICAgIExpbmVCb3ggbGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpM
aW5lQ29udGVudCYpOworICAgIExpbmVCb3ggbGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExp
bmVCdWlsZGVyOjpMaW5lQ29udGVudCYpIGNvbnN0OwogICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFRvcEZvck5leHRMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIElubGlu
ZUxheW91dFVuaXQgcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250
ZXh0JikgY29uc3Q7CiAKICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrQ29u
dGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKQEAgLTU2LDQgKzU2
LDYgQEAgcHJpdmF0ZToKIH0KIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19MQVlPVVRfRk9S
TUFUVElOR19HRU9NRVRSWShJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnksIGlzSW5saW5lRm9ybWF0
dGluZ0dlb21ldHJ5KCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVG
b3JtYXR0aW5nUXVpcmtzLmNwcAppbmRleCA1OWVlZTU3NWM5MTAzNWUwZGUzOTc1OGM5ZDc3MWJl
OGU1ZGYwZDY0Li4wZThhY2Y2YjQ3ODY4MDNmNTg2MDVkZDAxMWRkYjQ2M2E5YzE4YmMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVGb3JtYXR0aW5nUXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmNwcApAQCAtOTgs
NiArOTgsNyBAQCBib29sIElubGluZUZvcm1hdHRpbmdRdWlya3M6OmlubGluZUxldmVsQm94QWZm
ZWN0c0xpbmVCb3goY29uc3QgTGluZUJveDo6SW5saW5lTAogCiBib29sIElubGluZUZvcm1hdHRp
bmdRdWlya3M6Omhhc1NvZnRXcmFwT3Bwb3J0dW5pdHlBdEltYWdlKCkgY29uc3QKIHsKKyAgICBB
U1NFUlQobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSk7CiAgICAgcmV0dXJuICFmb3JtYXR0
aW5nQ29udGV4dCgpLnJvb3QoKS5pc1RhYmxlQ2VsbCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmgKaW5kZXggODlmNThmZDA5YTEzNzc4YzMzYTZm
NzExNGY4NGY2OTZlOWVkNmM2Zi4uOWYxZThhNWIyZTM2MjUyZjQ5ZGIxOWEwYjk3NWM4MTNlM2M3
YzBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuaApA
QCAtNDcsNCArNDcsNiBAQCBwdWJsaWM6CiB9CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TEFZT1VUX0ZPUk1BVFRJTkdfUVVJUktTKElubGluZUZvcm1hdHRpbmdRdWlya3MsIGlzSW5saW5l
Rm9ybWF0dGluZ1F1aXJrcygpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxp
bmVCdWlsZGVyLmNwcAppbmRleCA4NTVkM2NiMjM0NzAyYjhlNmI3OTUwZjJjMDQwY2QzNGNjODUx
MGQyLi5jMzNmNjQ4M2JhYTJmZjM5MTgyNGMxZmQ2NmMzYTgxOWYzOGNkNGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVM
aW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0xMTIsOCArMTEyLDggQEAgc3Rh
dGljIGlubGluZSBib29sIGlzQXRTb2Z0V3JhcE9wcG9ydHVuaXR5KGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiBpbmxpbmUKICAgICB9CiAgICAgaWYgKGN1cnJlbnQuaXNCb3goKSB8fCBu
ZXh0LmlzQm94KCkpIHsKICAgICAgICAgYXV0byBpc0ltYWdlQ29udGVudCA9IGN1cnJlbnQubGF5
b3V0Qm94KCkuaXNJbWFnZSgpIHx8IG5leHQubGF5b3V0Qm94KCkuaXNJbWFnZSgpOwotICAgICAg
ICBpZiAoaXNJbWFnZUNvbnRlbnQpCi0gICAgICAgICAgICByZXR1cm4gSW5saW5lRm9ybWF0dGlu
Z1F1aXJrcyhpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkuaGFzU29mdFdyYXBPcHBvcnR1bml0eUF0
SW1hZ2UoKTsKKyAgICAgICAgaWYgKGlzSW1hZ2VDb250ZW50ICYmIGlubGluZUZvcm1hdHRpbmdD
b250ZXh0LmxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCisgICAgICAgICAgICByZXR1cm4g
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZm9ybWF0dGluZ1F1aXJrcygpLmhhc1NvZnRXcmFwT3Bw
b3J0dW5pdHlBdEltYWdlKCk7CiAgICAgICAgIC8vIFt0ZXh0XVtpbmxpbmUgYm94IHN0YXJ0XVtp
bmxpbmUgYm94IGVuZF1baW5saW5lIGJveF0gKHRleHQ8c3Bhbj48L3NwYW4+PGltZz4pIDogdGhl
cmUncyBhIHNvZnQgd3JhcCBvcHBvcnR1bml0eSBiZXR3ZWVuIHRoZSBbdGV4dF0gYW5kIFtpbWdd
LgogICAgICAgICAvLyBUaGUgbGluZSBicmVha2luZyBiZWhhdmlvciBvZiBhIHJlcGxhY2VkIGVs
ZW1lbnQgb3Igb3RoZXIgYXRvbWljIGlubGluZSBpcyBlcXVpdmFsZW50IHRvIGFuIGlkZW9ncmFw
aGljIGNoYXJhY3Rlci4KICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJs
ZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA3ZDhhNjQyMTAzYzEyOTA4MGNlYmZl
OGQ3NzBkMjczMTQ3ZjYxOWI3Li5iZDYwMmRjNmI4NWUxYzRhY2RjNzY3YjI3NzA2NjUxNzAwNDI3
YWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAK
QEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiTGF5b3V0Q29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5n
QmxvY2suaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUg
IlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KIApAQCAtNDksNiArNDgsOCBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoVGFibGVG
b3JtYXR0aW5nQ29udGV4dCk7CiAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRhYmxlcy0z
LyN0YWJsZS1sYXlvdXQtYWxnb3JpdGhtCiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpUYWJsZUZv
cm1hdHRpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290
LCBUYWJsZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKQogICAgIDogRm9ybWF0dGlu
Z0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHRSb290LCBmb3JtYXR0aW5nU3RhdGUpCisgICAgLCBt
X3RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzLCBmb3JtYXR0aW5nU3RhdGUudGFibGVHcmlk
KCkpCisgICAgLCBtX3RhYmxlRm9ybWF0dGluZ1F1aXJrcygqdGhpcykKIHsKIH0KIApAQCAtMTcz
LDEzICsxNzQsMTMgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0
cnlGb3JSb3dzKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnQKICAgICAgICAgYXV0byYgcm93
Qm94ID0gcm93LmJveCgpOwogICAgICAgICBhdXRvJiByb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdTdGF0ZSgpLmJveEdlb21ldHJ5KHJvd0JveCk7CiAKLSAgICAgICAgcm93Qm94R2VvbWV0cnku
c2V0UGFkZGluZyh0YWJsZUZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhyb3dC
b3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOworICAgICAgICByb3dCb3hHZW9tZXRyeS5z
ZXRQYWRkaW5nKGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhyb3dCb3gsIGF2
YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOwogICAgICAgICAvLyBJbnRlcm5hbCB0YWJsZSBlbGVt
ZW50cyBkbyBub3QgaGF2ZSBtYXJnaW5zLgogICAgICAgICByb3dCb3hHZW9tZXRyeS5zZXRIb3Jp
em9udGFsTWFyZ2luKHsgfSk7CiAgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFy
Z2luKHsgfSk7CiAKICAgICAgICAgYXV0byBjb21wdXRlZFJvd0JvcmRlciA9IFsmXSB7Ci0gICAg
ICAgICAgICBhdXRvIGJvcmRlciA9IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRC
b3JkZXIocm93Qm94KTsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVyID0gZm9ybWF0dGluZ0dlb21l
dHJ5KCkuY29tcHV0ZWRCb3JkZXIocm93Qm94KTsKICAgICAgICAgICAgIGlmICghZ3JpZC5jb2xs
YXBzZWRCb3JkZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYm9yZGVyOwogICAgICAgICAg
ICAgLy8gQm9yZGVyIGNvbGxhcHNpbmcgZGVsZWdhdGVzIGJvcmRlcnMgdG8gdGFibGUvY2VsbHMu
CkBAIC0yODAsNyArMjgxLDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRD
ZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0VW5pdAogewogICAgIEFTU0VS
VChjZWxsLmJveCgpLmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKTsKIAotICAg
IGF1dG8gZm9ybWF0dGluZ0dlb21ldHJ5ID0gdGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKTsKKyAg
ICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSB0aGlzLT5mb3JtYXR0aW5nR2VvbWV0cnkoKTsK
ICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCk7CiAgICAgYXV0
byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CiAgICAgYXV0byYgY2VsbEJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2VsbEJveCk7CkBAIC00MDcsNyArNDA4LDcgQEAg
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
ZFByZWZlcnJlZFdpZHRoRm9yQ29sdW0KIAogICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoID0g
Zm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2VsbEJveCk7
CiAgICAgICAgIGlmICghaW50cmluc2ljV2lkdGgpIHsKLSAgICAgICAgICAgIGludHJpbnNpY1dp
ZHRoID0gdGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Rm9yQ2VsbCgqY2VsbCk7CisgICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGZvcm1hdHRpbmdH
ZW9tZXRyeSgpLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JDZWxsKCpjZWxsKTsKICAgICAg
ICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94
KGNlbGxCb3gsICppbnRyaW5zaWNXaWR0aCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gU3Bhbm5l
ciBjZWxscyBwdXQgdGhlaXIgaW50cmluc2ljIHdpZHRocyBvbiB0aGUgaW5pdGlhbCBzbG90cy4K
QEAgLTQyNiw3ICs0MjcsNyBAQCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGF1dG8gd2lkdGggPSBjb2x1bW5Cb3gtPmNvbHVtbldpZHRoKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwotICAgICAgICAgICAgcmV0dXJuIHRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRDb2x1bW5XaWR0aCgqY29sdW1uQm94KTsKKyAg
ICAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZENvbHVtbldpZHRo
KCpjb2x1bW5Cb3gpOwogICAgICAgICB9OwogICAgICAgICBmaXhlZFdpZHRoQ29sdW1ucy5hcHBl
bmQoZml4ZWRXaWR0aCgpKTsKICAgICB9CkBAIC01MTgsNyArNTE5LDcgQEAgdm9pZCBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5p
dCBhdmFpbGFibGUKICAgICAgICAgICAgIC8vIFRoZSBtaW5pbXVtIGhlaWdodCBvZiBhIHJvdyAo
d2l0aG91dCBzcGFubmluZy1yZWxhdGVkIGhlaWdodCBkaXN0cmlidXRpb24pIGlzIGRlZmluZWQg
YXMgdGhlIGhlaWdodCBvZiBhbiBoeXBvdGhldGljYWwKICAgICAgICAgICAgIC8vIGxpbmVib3gg
Y29udGFpbmluZyB0aGUgY2VsbHMgb3JpZ2luYXRpbmcgaW4gdGhlIHJvdy4KICAgICAgICAgICAg
IGF1dG8mIGNlbGwgPSBzbG90LmNlbGwoKTsKLSAgICAgICAgICAgIGNlbGwuc2V0QmFzZWxpbmUo
dGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKS51c2VkQmFzZWxpbmVGb3JDZWxsKGNlbGwuYm94KCkp
KTsKKyAgICAgICAgICAgIGNlbGwuc2V0QmFzZWxpbmUoZm9ybWF0dGluZ0dlb21ldHJ5KCkudXNl
ZEJhc2VsaW5lRm9yQ2VsbChjZWxsLmJveCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUz
MywxMSArNTM0LDYgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlz
dHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBhdmFpbGFibGUKICAgICB9CiB9CiAKLVRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnRhYmxlRm9ybWF0dGlu
Z0dlb21ldHJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gVGFibGVGb3JtYXR0aW5nR2VvbWV0cnko
KnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsKLX0KLQogfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGU2OGMyYzM3MWNk
ZGY4NjdlNzExYjRmMDYzMzUyZGM0MDI5ZmNjMGMuLjcyOWFjMjgwMzYxZmU1NDgwN2IzN2Q1MzY2
NzNlM2Q4MjE4NmZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dC5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCiAKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlRhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5LmgiCisjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nUXVpcmtzLmgi
CiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJUYWJsZUdyaWQu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CkBAIC0zNyw3ICszOSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0
ZTsKLWNsYXNzIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5OwogCiAvLyBUaGlzIGNsYXNzIGltcGxl
bWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgdGFibGUgZm9ybWF0dGluZyBjb250ZXh0cy4KIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi90YWJsZXMuaHRtbApAQCAtNDgsNiArNDksOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBsYXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRl
JiwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jikgb3ZlcnJpZGU7CiAgICAgTGF5
b3V0VW5pdCB1c2VkQ29udGVudEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgY29uc3Qg
VGFibGVGb3JtYXR0aW5nR2VvbWV0cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdGFibGVGb3JtYXR0aW5nR2VvbWV0cnk7IH0KKyAgICBjb25zdCBUYWJsZUZv
cm1hdHRpbmdRdWlya3MmIGZvcm1hdHRpbmdRdWlya3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3RhYmxlRm9ybWF0dGluZ1F1aXJrczsgfQorCiAgICAgc3RhdGljIFVuaXF1ZVJlZjxUYWJsZUdy
aWQ+IGVuc3VyZVRhYmxlR3JpZChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94KTsKIAogcHJp
dmF0ZToKQEAgLTc3LDkgKzgxLDExIEBAIHByaXZhdGU6CiAgICAgSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBjb21wdXRlZFByZWZlcnJlZFdpZHRoRm9yQ29sdW1ucygpOwogICAgIHZvaWQgY29t
cHV0ZUFuZERpc3RyaWJ1dGVFeHRyYVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnRh
bFNwYWNlLCBPcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlKTsKIAot
ICAgIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IHRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCkgY29u
c3Q7CiAgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29u
dGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZv
cm1hdHRpbmdTdGF0ZSgpIHsgcmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihG
b3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CisKKyAgICBjb25zdCBUYWJs
ZUZvcm1hdHRpbmdHZW9tZXRyeSBtX3RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5OworICAgIGNvbnN0
IFRhYmxlRm9ybWF0dGluZ1F1aXJrcyBtX3RhYmxlRm9ybWF0dGluZ1F1aXJrczsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaAppbmRleCA4ODE0
MDI1N2NkYWYzZTA0NTUxODQ1NWEzZGQxZmQ1YzU4YWM3ZWU2Li5hZDJiYjEwYWQyMzlhMGI3NzY3
MGEzODM5ZTQ1Yjc4ZTczOGQ5ZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1h
dHRpbmdHZW9tZXRyeS5oCkBAIC01Myw0ICs1Myw2IEBAIHByaXZhdGU6CiB9CiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfTEFZT1VUX0ZPUk1BVFRJTkdfR0VPTUVUUlkoVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnksIGlzVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKSkKKwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAKaW5kZXggMzZiN2JhOTI2
OWViMzI4ZDk5NDJmM2M1OGMwOGFiNjNlZDRlNjVhYi4uNGY4MmZjMjFjYmE5NjUwZTU2MzM3YWY2
YTI4NTExZTA4Y2M3MzBhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
UXVpcmtzLmNwcApAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIFRhYmxlRm9y
bWF0dGluZ1F1aXJrczo6VGFibGVGb3JtYXR0aW5nUXVpcmtzKGNvbnN0IFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQmIHRhYmxlRm9ybWF0dGluZ0NvbnRleHQpCiAgICAgOiBGb3JtYXR0aW5nUXVpcmtz
KHRhYmxlRm9ybWF0dGluZ0NvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGxheW91dFN0YXRlKCkuaW5R
dWlya3NNb2RlKCkpOwogfQogCiBib29sIFRhYmxlRm9ybWF0dGluZ1F1aXJrczo6c2hvdWxkSWdu
b3JlQ2hpbGRDb250ZW50VmVydGljYWxNYXJnaW4oY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90
YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nUXVpcmtzLmgKaW5kZXggYzc0M2Y0
ZGYwM2ZiZWZmNWZkMTE2NDBmNjEyZGFmYmZkMzU5NDk5MC4uNzc5NzAzMjU5OWIxNmQ3OWQyYmE1
YWE2YTJiODdhNDM5MTYwMjNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGlu
Z1F1aXJrcy5oCkBAIC00NCw0ICs0NCw2IEBAIHB1YmxpYzoKIH0KIH0KIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19MQVlPVVRfRk9STUFUVElOR19RVUlSS1MoVGFibGVGb3JtYXR0aW5nUXVpcmtz
LCBpc1RhYmxlRm9ybWF0dGluZ1F1aXJrcygpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVMYXlvdXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxh
eW91dC5jcHAKaW5kZXggZWJmYmU5ZDMxY2U1Y2JlYTdjMTMwOWZjMmRlOGY4Y2U3MzUyMTc0OC4u
ZDg1Njc2NTMyM2RjY2VkNDJiY2IzMGU3NDQxNjYwMzZmOGI5ZmMyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUxheW91dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9U
YWJsZUxheW91dC5jcHAKQEAgLTI3Miw3ICsyNzIsNyBAQCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
OjpUYWJsZUxheW91dDo6RGlzdHJpYnV0ZWRTcGFjZXMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
VAogICAgICAgICBhdXRvIG1heGltdW1Db2x1bW5Bc2NlbnQgPSBJbmxpbmVMYXlvdXRVbml0IHsg
fTsKICAgICAgICAgYXV0byBtYXhpbXVtQ29sdW1uRGVzY2VudCA9IElubGluZUxheW91dFVuaXQg
eyB9OwogICAgICAgICAvLyBJbml0aWFsIG1pbmltdW0gaGVpZ2h0IGlzIHRoZSBjb21wdXRlZCBo
ZWlnaHQgaWYgYXZhaWxhYmxlIDx0ciBzdHlsZT0iaGVpZ2h0OiAxMDBweCI+PHRkPjwvdGQ+PC90
cj4KLSAgICAgICAgcm93SGVpZ2h0W3Jvd0luZGV4XSA9IGZvcm1hdHRpbmdDb250ZXh0KCkudGFi
bGVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEhlaWdodChyb3dzLmxpc3QoKVtyb3dJbmRl
eF0uYm94KCksIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UpLnZhbHVlT3IoMF9sdSk7CisgICAgICAg
IHJvd0hlaWdodFtyb3dJbmRleF0gPSBmb3JtYXR0aW5nQ29udGV4dCgpLmZvcm1hdHRpbmdHZW9t
ZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3MubGlzdCgpW3Jvd0luZGV4XS5ib3goKSwgYXZhaWxh
YmxlVmVydGljYWxTcGFjZSkudmFsdWVPcigwX2x1KTsKICAgICAgICAgZm9yIChzaXplX3QgY29s
dW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMuc2l6ZSgpOyArK2NvbHVtbkluZGV4
KSB7CiAgICAgICAgICAgICBhdXRvJiBzbG90ID0gKm1fZ3JpZC5zbG90KHsgY29sdW1uSW5kZXgs
IHJvd0luZGV4IH0pOwogICAgICAgICAgICAgaWYgKHNsb3QuaXNSb3dTcGFubmVkKCkpCkBAIC0z
MDIsNyArMzAyLDcgQEAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVMYXlvdXQ6OkRpc3Ry
aWJ1dGVkU3BhY2VzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OlQKICAgICAgICAgaWYgKHNsb3Qu
aGFzUm93U3BhbigpKQogICAgICAgICAgICAgcmV0dXJuIEdyaWRTcGFjZSB7IGZvcm1hdHRpbmdD
b250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goc2xvdC5jZWxsKCkuYm94KCkpLmJvcmRlckJveEhlaWdo
dCgpLCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KHNsb3QuY2VsbCgpLmJveCgp
KS5ib3JkZXJCb3hIZWlnaHQoKSB9OwogICAgICAgICBhdXRvJiByb3dzID0gbV9ncmlkLnJvd3Mo
KTsKLSAgICAgICAgYXV0byBjb21wdXRlZFJvd0hlaWdodCA9IGZvcm1hdHRpbmdDb250ZXh0KCku
dGFibGVGb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEhlaWdodChyb3dzLmxpc3QoKVtyb3dJ
bmRleF0uYm94KCksIHsgfSk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRSb3dIZWlnaHQgPSBmb3Jt
YXR0aW5nQ29udGV4dCgpLmZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkSGVpZ2h0KHJvd3Mu
bGlzdCgpW3Jvd0luZGV4XS5ib3goKSwgeyB9KTsKICAgICAgICAgYXV0byBoZWlnaHQgPSBzdGQ6
Om1heDxmbG9hdD4ocm93SGVpZ2h0W3Jvd0luZGV4XSwgY29tcHV0ZWRSb3dIZWlnaHQudmFsdWVP
cigwX2x1KSk7CiAgICAgICAgIHJldHVybiBHcmlkU3BhY2UgeyBoZWlnaHQsIGhlaWdodCB9Owog
ICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIu
Y3BwCmluZGV4IGM2NmI0M2M0ZTA0NDE3YjA3MTg5NzM2YWQzN2NlNDllZjNlZTc2MmUuLjRmZjdj
M2QwZTdmMGI4OTk0OThiMTZiZGFiZjcxOTRlNjA5YmU4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAKQEAgLTM2Nyw3ICszNjcsNyBAQCB2
b2lkIElubGluZUNvbnRlbnRCdWlsZGVyOjpjcmVhdGVEaXNwbGF5TGluZXMoY29uc3QgTGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nU3RhdAogdm9pZCBJbmxpbmVDb250ZW50QnVpbGRlcjo6Y3JlYXRl
RGlzcGxheU5vblJvb3RJbmxpbmVCb3hlcyhjb25zdCBMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgSW5saW5lQ29udGVudCYgaW5saW5lQ29u
dGVudCkgY29uc3QKIHsKICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvIGlubGluZUZvcm1h
dHRpbmdHZW9tZXRyeSA9IExheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5IHsgaW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQgfTsKKyAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkg
PSBkb3duY2FzdDxMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeT4oaW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuZm9ybWF0dGluZ0dlb21ldHJ5KCkpOwogICAgIGZvciAoc2l6ZV90IGxpbmVJ
bmRleCA9IDA7IGxpbmVJbmRleCA8IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lQm94ZXMoKS5z
aXplKCk7ICsrbGluZUluZGV4KSB7CiAgICAgICAgIGF1dG8mIGxpbmVCb3ggPSBpbmxpbmVGb3Jt
YXR0aW5nU3RhdGUubGluZUJveGVzKClbbGluZUluZGV4XTsKICAgICAgICAgaWYgKCFsaW5lQm94
Lmhhc0lubGluZUJveCgpKQo=
</data>
<flag name="commit-queue"
          id="450822"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>