<?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>148132</bug_id>
          
          <creation_ts>2015-08-18 10:51:19 -0700</creation_ts>
          <short_desc>Use CSSValuePool::singleton() instead of cssValuePool()</short_desc>
          <delta_ts>2015-08-18 18:28:16 -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>CSS</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1118560</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-18 10:51:19 -0700</bug_when>
    <thetext>Use CSSValuePool::singleton() instead of cssValuePool(), as per coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118561</commentid>
    <comment_count>1</comment_count>
      <attachid>259280</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-18 10:53:22 -0700</bug_when>
    <thetext>Created attachment 259280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118762</commentid>
    <comment_count>2</comment_count>
      <attachid>259280</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 18:28:12 -0700</bug_when>
    <thetext>Comment on attachment 259280
Patch

Clearing flags on attachment: 259280

Committed r188619: &lt;http://trac.webkit.org/changeset/188619&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118763</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-18 18:28:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259280</attachid>
            <date>2015-08-18 10:53:22 -0700</date>
            <delta_ts>2015-08-18 18:28:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148132-20150818105319.patch</filename>
            <type>text/plain</type>
            <size>263406</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTlhOGRjZTY0YzI5NWI0
YmM5MWE2M2YwMTJkYzZiYzNlYmM5ZjYwMC4uNWRkYWFmZDQyNmUwOWM2YTNjYWZjMTRkNmMzMWVm
MmE5Y2VlNjliNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA4LTE4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkgaW5zdGVhZCBvZiBjc3NWYWx1ZVBvb2woKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTMyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkgaW5zdGVhZCBvZiBjc3NWYWx1ZVBvb2woKSB0byBhY2Nlc3MgdGhlCisgICAgICAgIGdsb2Jh
bCBDU1NWYWx1ZVBvb2wgaW5zdGFuY2UsIGFzIHBlciBjb2Rpbmcgc3R5bGUuCisKIDIwMTUtMDgt
MTggIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbU3RyZWFtcyBBUEldIFVwZGF0ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBsYXRlc3Qg
c3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCmluZGV4IDBi
YTNmNWIxMDg5ZDMyZTc2ODEyNmNkZmUwYmZhMGE5YThhYzc2ZGEuLjA2NGZjZDJlYzY5YzFkY2Zk
OTdmZDMxNjc0ZWI2MzBhODM2NmNkODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9C
YXNpY1NoYXBlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFw
ZUZ1bmN0aW9ucy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVW
YWx1ZT4gYmFzaWNTaGFwZVJhZGl1c1RvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWwK
IAogUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckJhc2ljU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBCYXNpY1NoYXBlJiBiYXNpY1NoYXBlKQogewotICAgIENTU1ZhbHVlUG9vbCYg
cG9vbCA9IGNzc1ZhbHVlUG9vbCgpOworICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCk7CiAKICAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gYmFzaWNTaGFw
ZVZhbHVlOwogICAgIHN3aXRjaCAoYmFzaWNTaGFwZS50eXBlKCkpIHsKQEAgLTc0LDkgKzc0LDkg
QEAgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckJhc2ljU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBCYXNpY1NoYXBlJiBiYXMKICAgICAgICAgY29uc3QgYXV0byYgY2lyY2xlID0g
ZG93bmNhc3Q8QmFzaWNTaGFwZUNpcmNsZT4oYmFzaWNTaGFwZSk7CiAgICAgICAgIGF1dG8gY2ly
Y2xlVmFsdWUgPSBDU1NCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKIAotICAgICAgICBjaXJj
bGVWYWx1ZS0+c2V0Q2VudGVyWCh2YWx1ZUZvckNlbnRlckNvb3JkaW5hdGUocG9vbCwgc3R5bGUs
IGNpcmNsZS5jZW50ZXJYKCksIEhPUklaT05UQUwpKTsKLSAgICAgICAgY2lyY2xlVmFsdWUtPnNl
dENlbnRlclkodmFsdWVGb3JDZW50ZXJDb29yZGluYXRlKHBvb2wsIHN0eWxlLCBjaXJjbGUuY2Vu
dGVyWSgpLCBWRVJUSUNBTCkpOwotICAgICAgICBjaXJjbGVWYWx1ZS0+c2V0UmFkaXVzKGJhc2lj
U2hhcGVSYWRpdXNUb0NTU1ZhbHVlKHN0eWxlLCBwb29sLCBjaXJjbGUucmFkaXVzKCkpKTsKKyAg
ICAgICAgY2lyY2xlVmFsdWUtPnNldENlbnRlclgodmFsdWVGb3JDZW50ZXJDb29yZGluYXRlKGNz
c1ZhbHVlUG9vbCwgc3R5bGUsIGNpcmNsZS5jZW50ZXJYKCksIEhPUklaT05UQUwpKTsKKyAgICAg
ICAgY2lyY2xlVmFsdWUtPnNldENlbnRlclkodmFsdWVGb3JDZW50ZXJDb29yZGluYXRlKGNzc1Zh
bHVlUG9vbCwgc3R5bGUsIGNpcmNsZS5jZW50ZXJZKCksIFZFUlRJQ0FMKSk7CisgICAgICAgIGNp
cmNsZVZhbHVlLT5zZXRSYWRpdXMoYmFzaWNTaGFwZVJhZGl1c1RvQ1NTVmFsdWUoc3R5bGUsIGNz
c1ZhbHVlUG9vbCwgY2lyY2xlLnJhZGl1cygpKSk7CiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9
IGNpcmNsZVZhbHVlLmNvcHlSZWYoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtODQsMTAg
Kzg0LDEwIEBAIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgQmFzaWNTaGFwZSYgYmFzCiAgICAgICAgIGNvbnN0IGF1dG8mIGVs
bGlwc2UgPSBkb3duY2FzdDxCYXNpY1NoYXBlRWxsaXBzZT4oYmFzaWNTaGFwZSk7CiAgICAgICAg
IGF1dG8gZWxsaXBzZVZhbHVlID0gQ1NTQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwogCi0g
ICAgICAgIGVsbGlwc2VWYWx1ZS0+c2V0Q2VudGVyWCh2YWx1ZUZvckNlbnRlckNvb3JkaW5hdGUo
cG9vbCwgc3R5bGUsIGVsbGlwc2UuY2VudGVyWCgpLCBIT1JJWk9OVEFMKSk7Ci0gICAgICAgIGVs
bGlwc2VWYWx1ZS0+c2V0Q2VudGVyWSh2YWx1ZUZvckNlbnRlckNvb3JkaW5hdGUocG9vbCwgc3R5
bGUsIGVsbGlwc2UuY2VudGVyWSgpLCBWRVJUSUNBTCkpOwotICAgICAgICBlbGxpcHNlVmFsdWUt
PnNldFJhZGl1c1goYmFzaWNTaGFwZVJhZGl1c1RvQ1NTVmFsdWUoc3R5bGUsIHBvb2wsIGVsbGlw
c2UucmFkaXVzWCgpKSk7Ci0gICAgICAgIGVsbGlwc2VWYWx1ZS0+c2V0UmFkaXVzWShiYXNpY1No
YXBlUmFkaXVzVG9DU1NWYWx1ZShzdHlsZSwgcG9vbCwgZWxsaXBzZS5yYWRpdXNZKCkpKTsKKyAg
ICAgICAgZWxsaXBzZVZhbHVlLT5zZXRDZW50ZXJYKHZhbHVlRm9yQ2VudGVyQ29vcmRpbmF0ZShj
c3NWYWx1ZVBvb2wsIHN0eWxlLCBlbGxpcHNlLmNlbnRlclgoKSwgSE9SSVpPTlRBTCkpOworICAg
ICAgICBlbGxpcHNlVmFsdWUtPnNldENlbnRlclkodmFsdWVGb3JDZW50ZXJDb29yZGluYXRlKGNz
c1ZhbHVlUG9vbCwgc3R5bGUsIGVsbGlwc2UuY2VudGVyWSgpLCBWRVJUSUNBTCkpOworICAgICAg
ICBlbGxpcHNlVmFsdWUtPnNldFJhZGl1c1goYmFzaWNTaGFwZVJhZGl1c1RvQ1NTVmFsdWUoc3R5
bGUsIGNzc1ZhbHVlUG9vbCwgZWxsaXBzZS5yYWRpdXNYKCkpKTsKKyAgICAgICAgZWxsaXBzZVZh
bHVlLT5zZXRSYWRpdXNZKGJhc2ljU2hhcGVSYWRpdXNUb0NTU1ZhbHVlKHN0eWxlLCBjc3NWYWx1
ZVBvb2wsIGVsbGlwc2UucmFkaXVzWSgpKSk7CiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IGVs
bGlwc2VWYWx1ZS5jb3B5UmVmKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk4LDcgKzk4
LDcgQEAgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvckJhc2ljU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBCYXNpY1NoYXBlJiBiYXMKICAgICAgICAgcG9seWdvblZhbHVlLT5zZXRX
aW5kUnVsZShwb2x5Z29uLndpbmRSdWxlKCkpOwogICAgICAgICBjb25zdCBWZWN0b3I8TGVuZ3Ro
PiYgdmFsdWVzID0gcG9seWdvbi52YWx1ZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7IGkgKz0gMikKLSAgICAgICAgICAgIHBvbHlnb25WYWx1ZS0+
YXBwZW5kUG9pbnQocG9vbC5jcmVhdGVWYWx1ZSh2YWx1ZXMuYXQoaSksIHN0eWxlKSwgcG9vbC5j
cmVhdGVWYWx1ZSh2YWx1ZXMuYXQoaSArIDEpLCBzdHlsZSkpOworICAgICAgICAgICAgcG9seWdv
blZhbHVlLT5hcHBlbmRQb2ludChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodmFsdWVzLmF0KGkp
LCBzdHlsZSksIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSh2YWx1ZXMuYXQoaSArIDEpLCBzdHls
ZSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IHBvbHlnb25WYWx1ZS5jb3B5UmVmKCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTA3LDE1ICsxMDcsMTUgQEAgUmVmPENTU1ZhbHVlPiB2YWx1
ZUZvckJhc2ljU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCYXNpY1NoYXBl
JiBiYXMKICAgICAgICAgY29uc3QgYXV0byYgaW5zZXQgPSBkb3duY2FzdDxCYXNpY1NoYXBlSW5z
ZXQ+KGJhc2ljU2hhcGUpOwogICAgICAgICBhdXRvIGluc2V0VmFsdWUgPSBDU1NCYXNpY1NoYXBl
SW5zZXQ6OmNyZWF0ZSgpOwogCi0gICAgICAgIGluc2V0VmFsdWUtPnNldFRvcChwb29sLmNyZWF0
ZVZhbHVlKGluc2V0LnRvcCgpLCBzdHlsZSkpOwotICAgICAgICBpbnNldFZhbHVlLT5zZXRSaWdo
dChwb29sLmNyZWF0ZVZhbHVlKGluc2V0LnJpZ2h0KCksIHN0eWxlKSk7Ci0gICAgICAgIGluc2V0
VmFsdWUtPnNldEJvdHRvbShwb29sLmNyZWF0ZVZhbHVlKGluc2V0LmJvdHRvbSgpLCBzdHlsZSkp
OwotICAgICAgICBpbnNldFZhbHVlLT5zZXRMZWZ0KHBvb2wuY3JlYXRlVmFsdWUoaW5zZXQubGVm
dCgpLCBzdHlsZSkpOworICAgICAgICBpbnNldFZhbHVlLT5zZXRUb3AoY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKGluc2V0LnRvcCgpLCBzdHlsZSkpOworICAgICAgICBpbnNldFZhbHVlLT5zZXRS
aWdodChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoaW5zZXQucmlnaHQoKSwgc3R5bGUpKTsKKyAg
ICAgICAgaW5zZXRWYWx1ZS0+c2V0Qm90dG9tKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShpbnNl
dC5ib3R0b20oKSwgc3R5bGUpKTsKKyAgICAgICAgaW5zZXRWYWx1ZS0+c2V0TGVmdChjc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUoaW5zZXQubGVmdCgpLCBzdHlsZSkpOwogCi0gICAgICAgIGluc2V0
VmFsdWUtPnNldFRvcExlZnRSYWRpdXMocG9vbC5jcmVhdGVWYWx1ZShpbnNldC50b3BMZWZ0UmFk
aXVzKCksIHN0eWxlKSk7Ci0gICAgICAgIGluc2V0VmFsdWUtPnNldFRvcFJpZ2h0UmFkaXVzKHBv
b2wuY3JlYXRlVmFsdWUoaW5zZXQudG9wUmlnaHRSYWRpdXMoKSwgc3R5bGUpKTsKLSAgICAgICAg
aW5zZXRWYWx1ZS0+c2V0Qm90dG9tUmlnaHRSYWRpdXMocG9vbC5jcmVhdGVWYWx1ZShpbnNldC5i
b3R0b21SaWdodFJhZGl1cygpLCBzdHlsZSkpOwotICAgICAgICBpbnNldFZhbHVlLT5zZXRCb3R0
b21MZWZ0UmFkaXVzKHBvb2wuY3JlYXRlVmFsdWUoaW5zZXQuYm90dG9tTGVmdFJhZGl1cygpLCBz
dHlsZSkpOworICAgICAgICBpbnNldFZhbHVlLT5zZXRUb3BMZWZ0UmFkaXVzKGNzc1ZhbHVlUG9v
bC5jcmVhdGVWYWx1ZShpbnNldC50b3BMZWZ0UmFkaXVzKCksIHN0eWxlKSk7CisgICAgICAgIGlu
c2V0VmFsdWUtPnNldFRvcFJpZ2h0UmFkaXVzKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShpbnNl
dC50b3BSaWdodFJhZGl1cygpLCBzdHlsZSkpOworICAgICAgICBpbnNldFZhbHVlLT5zZXRCb3R0
b21SaWdodFJhZGl1cyhjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoaW5zZXQuYm90dG9tUmlnaHRS
YWRpdXMoKSwgc3R5bGUpKTsKKyAgICAgICAgaW5zZXRWYWx1ZS0+c2V0Qm90dG9tTGVmdFJhZGl1
cyhjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoaW5zZXQuYm90dG9tTGVmdFJhZGl1cygpLCBzdHls
ZSkpOwogCiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IGluc2V0VmFsdWUuY29weVJlZigpOwog
ICAgICAgICBicmVhazsKQEAgLTEyNCw3ICsxMjQsNyBAQCBSZWY8Q1NTVmFsdWU+IHZhbHVlRm9y
QmFzaWNTaGFwZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJhc2ljU2hhcGUmIGJh
cwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShi
YXNpY1NoYXBlVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVWYWx1ZShiYXNpY1NoYXBlVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHN0
YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAppbmRleCBiNDQwNGMzMTQ1NTNlNWNjZTQ1NzMwYTQ1Y2My
OGViMGEwY2IwYmNjLi4yM2FhZWNmMzJlNmFjOTU3YzYyZjNlN2IyY2VmZDAzYTk0MTkwZWUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKQEAgLTYzLDIyICs2MywyMyBAQCBz
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBidWlsZFNlcmlhbGl6YWJsZVBvc2l0aW9uT2Zm
c2V0KFBhc3NSZWZQdHI8Q1NTUHJpbQogICAgIH0gZWxzZQogICAgICAgICBhbW91bnQgPSBvZmZz
ZXQ7CiAKKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
OwogICAgIGlmIChzaWRlID09IENTU1ZhbHVlQ2VudGVyKSB7CiAgICAgICAgIHNpZGUgPSBkZWZh
dWx0U2lkZTsKLSAgICAgICAgYW1vdW50ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoTGVu
Z3RoKDUwLCBQZXJjZW50KSk7CisgICAgICAgIGFtb3VudCA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZShMZW5ndGgoNTAsIFBlcmNlbnQpKTsKICAgICB9IGVsc2UgaWYgKChzaWRlID09IENTU1Zh
bHVlUmlnaHQgfHwgc2lkZSA9PSBDU1NWYWx1ZUJvdHRvbSkKICAgICAgICAgJiYgYW1vdW50LT5p
c1BlcmNlbnRhZ2UoKSkgewogICAgICAgICBzaWRlID0gZGVmYXVsdFNpZGU7Ci0gICAgICAgIGFt
b3VudCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0aCgxMDAgLSBhbW91bnQtPmdl
dEZsb2F0VmFsdWUoKSwgUGVyY2VudCkpOworICAgICAgICBhbW91bnQgPSBjc3NWYWx1ZVBvb2wu
Y3JlYXRlVmFsdWUoTGVuZ3RoKDEwMCAtIGFtb3VudC0+Z2V0RmxvYXRWYWx1ZSgpLCBQZXJjZW50
KSk7CiAgICAgfSBlbHNlIGlmIChhbW91bnQtPmlzTGVuZ3RoKCkgJiYgIWFtb3VudC0+Z2V0Rmxv
YXRWYWx1ZSgpKSB7CiAgICAgICAgIGlmIChzaWRlID09IENTU1ZhbHVlUmlnaHQgfHwgc2lkZSA9
PSBDU1NWYWx1ZUJvdHRvbSkKLSAgICAgICAgICAgIGFtb3VudCA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKExlbmd0aCgxMDAsIFBlcmNlbnQpKTsKKyAgICAgICAgICAgIGFtb3VudCA9IGNz
c1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShMZW5ndGgoMTAwLCBQZXJjZW50KSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFtb3VudCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0
aCgwLCBQZXJjZW50KSk7CisgICAgICAgICAgICBhbW91bnQgPSBjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUoTGVuZ3RoKDAsIFBlcmNlbnQpKTsKICAgICAgICAgc2lkZSA9IGRlZmF1bHRTaWRlOwog
ICAgIH0KIAotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShQYWlyOjpjcmVh
dGUoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc2lkZSksIGFtb3VudC5yZWxlYXNlKCkpKTsK
KyAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShjc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUoc2lkZSksIGFtb3VudC5yZWxlYXNlKCkpKTsKIH0KIAogc3RhdGlj
IFN0cmluZyBidWlsZENpcmNsZVN0cmluZyhjb25zdCBTdHJpbmcmIHJhZGl1cywgY29uc3QgU3Ry
aW5nJiBjZW50ZXJYLCBjb25zdCBTdHJpbmcmIGNlbnRlclksIGNvbnN0IFN0cmluZyYgYm94KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cAppbmRleCBmNTIxNjQ0MzBiODE5NGJiMTQwM2JhNDBjODNmODhlOTRhYjhiNTZiLi5jN2NlMzIz
NTMxYzU2MmE2NzFmNDMyYjAzOTZkMDBkYTdiOTI5ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtNDg4LDE1ICs0ODgs
MTUgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGb3JJbWFnZVNsaWNlU2lk
ZShjb25zdCBMZW5ndGgmIGxlbmd0aCkKICAgICAvLyBUaGVzZSB2YWx1ZXMgY2FuIGJlIHBlcmNl
bnRhZ2VzLCBudW1iZXJzLCBvciB3aGlsZSBhbiBhbmltYXRpb24gb2YgbWl4ZWQgdHlwZXMgaXMg
aW4gcHJvZ3Jlc3MsCiAgICAgLy8gYSBjYWxjdWxhdGlvbiB0aGF0IGNvbWJpbmVzIGEgcGVyY2Vu
dGFnZSBhbmQgYSBudW1iZXIuCiAgICAgaWYgKGxlbmd0aC5pc1BlcmNlbnQoKSkKLSAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxlbmd0aC5wZXJjZW50KCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGxlbmd0aC5wZXJjZW50KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgaWYgKGxlbmd0aC5pc0ZpeGVkKCkpCi0gICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsZW5ndGgudmFsdWUoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShsZW5ndGgudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOwogCiAgICAgLy8gQ2FsY3VsYXRpbmcgdGhlIGFjdHVhbCBsZW5ndGgg
Y3VycmVudGx5IGluIHVzZSB3b3VsZCByZXF1aXJlIG1vc3Qgb2YgdGhlIGNvZGUgZnJvbSBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZS4KICAgICAvLyBBbmQgZXZlbiBp
ZiB3ZSBjb3VsZCBkbyB0aGF0LCBpdCdzIG5vdCBjbGVhciBpZiB0aGF0J3MgZXhhY3RseSB3aGF0
IHdlJ2Qgd2FudCBkdXJpbmcgYW5pbWF0aW9uLgogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBqdXN0
IHJldHVybiAwLgogICAgIEFTU0VSVChsZW5ndGguaXNDYWxjdWxhdGVkKCkpOwotICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogfQogCiBzdGF0aWMgUmVmPENTU0Jv
cmRlckltYWdlU2xpY2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGNvbnN0IE5p
bmVQaWVjZUltYWdlJiBpbWFnZSkKQEAgLTUzNSw3ICs1MzUsNyBAQCBzdGF0aWMgUmVmPENTU0Jv
cmRlckltYWdlU2xpY2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGNvbnN0IE5p
bmVQaWVjZQogICAgIHF1YWQtPnNldEJvdHRvbShib3R0b20ucmVsZWFzZSgpKTsKICAgICBxdWFk
LT5zZXRMZWZ0KGxlZnQucmVsZWFzZSgpKTsKIAotICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWU6OmNyZWF0ZShjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShXVEY6Om1vdmUocXVh
ZCkpLCBpbWFnZS5maWxsKCkpOworICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6
OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFdURjo6bW92ZShx
dWFkKSksIGltYWdlLmZpbGwoKSk7CiB9CiAKIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGNvbnN0IExlbmd0aEJveCYgYm94KQpAQCAtNTQ1
LDEwICs1NDUsMTIgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGb3JOaW5l
UGllY2VJbWFnZVF1YWQoY29uc3QgTGVuZ3RoQm94JiBib3gpCiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBib3R0b207CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0Owog
CisgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKKwog
ICAgIGlmIChib3gudG9wKCkuaXNSZWxhdGl2ZSgpKQotICAgICAgICB0b3AgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShib3gudG9wKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOworICAgICAgICB0b3AgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYm94LnRv
cCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICBlbHNlCi0g
ICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC50b3AoKSk7CisgICAg
ICAgIHRvcCA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShib3gudG9wKCkpOwogCiAgICAgaWYg
KGJveC5yaWdodCgpID09IGJveC50b3AoKSAmJiBib3guYm90dG9tKCkgPT0gYm94LnRvcCgpICYm
IGJveC5sZWZ0KCkgPT0gYm94LnRvcCgpKSB7CiAgICAgICAgIHJpZ2h0ID0gdG9wOwpAQCAtNTU2
LDI2ICs1NTgsMjYgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGb3JOaW5l
UGllY2VJbWFnZVF1YWQoY29uc3QgTGVuZ3RoQm94JiBib3gpCiAgICAgICAgIGxlZnQgPSB0b3A7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGJveC5yaWdodCgpLmlzUmVsYXRpdmUoKSkKLSAg
ICAgICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnJpZ2h0KCku
dmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcmln
aHQgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYm94LnJpZ2h0KCkudmFsdWUoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByaWdo
dCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5yaWdodCgpKTsKKyAgICAgICAgICAg
IHJpZ2h0ID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGJveC5yaWdodCgpKTsKIAogICAgICAg
ICBpZiAoYm94LmJvdHRvbSgpID09IGJveC50b3AoKSAmJiBib3gucmlnaHQoKSA9PSBib3gubGVm
dCgpKSB7CiAgICAgICAgICAgICBib3R0b20gPSB0b3A7CiAgICAgICAgICAgICBsZWZ0ID0gcmln
aHQ7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoYm94LmJvdHRvbSgpLmlzUmVs
YXRpdmUoKSkKLSAgICAgICAgICAgICAgICBib3R0b20gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShib3guYm90dG9tKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
OworICAgICAgICAgICAgICAgIGJvdHRvbSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShib3gu
Ym90dG9tKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGJveC5ib3R0b20oKSk7CisgICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKGJveC5ib3R0b20oKSk7CiAKICAgICAgICAgICAgIGlmIChib3gubGVm
dCgpID09IGJveC5yaWdodCgpKQogICAgICAgICAgICAgICAgIGxlZnQgPSByaWdodDsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChib3gubGVmdCgpLmlzUmVsYXRpdmUo
KSkKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KGJveC5sZWZ0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAg
ICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGJveC5sZWZ0
KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGJveC5sZWZ0KCkpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKGJveC5sZWZ0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtNTg2LDI2ICs1ODgsMjYgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4g
dmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoY29uc3QgTGVuZ3RoQm94JiBib3gpCiAgICAgcXVh
ZC0+c2V0Qm90dG9tKGJvdHRvbSk7CiAgICAgcXVhZC0+c2V0TGVmdChsZWZ0KTsKIAotICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShXVEY6Om1vdmUocXVhZCkpOworICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoV1RGOjptb3ZlKHF1YWQpKTsKIH0KIAogc3Rh
dGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVJlcGVhdChjb25zdCBOaW5l
UGllY2VJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jp
em9udGFsUmVwZWF0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxSZXBl
YXQ7CisgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsK
KyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGhvcml6b250YWxSZXBlYXQgPSBjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlRm9yUmVwZWF0UnVsZShpbWFnZS5ob3Jp
em9udGFsUnVsZSgpKSk7CiAKLSAgICBob3Jpem9udGFsUmVwZWF0ID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlRm9yUmVwZWF0UnVsZShpbWFnZS5ob3Jpem9udGFs
UnVsZSgpKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0aWNhbFJlcGVhdDsK
ICAgICBpZiAoaW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSA9PSBpbWFnZS52ZXJ0aWNhbFJ1bGUoKSkK
ICAgICAgICAgdmVydGljYWxSZXBlYXQgPSBob3Jpem9udGFsUmVwZWF0OwogICAgIGVsc2UKLSAg
ICAgICAgdmVydGljYWxSZXBlYXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWVGb3JSZXBlYXRSdWxlKGltYWdlLnZlcnRpY2FsUnVsZSgpKSk7Ci0gICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShob3Jpem9udGFsUmVwZWF0
LnJlbGVhc2UoKSwgdmVydGljYWxSZXBlYXQucmVsZWFzZSgpKSk7CisgICAgICAgIHZlcnRpY2Fs
UmVwZWF0ID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUZvclJlcGVh
dFJ1bGUoaW1hZ2UudmVydGljYWxSdWxlKCkpKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShob3Jpem9udGFsUmVwZWF0LnJlbGVhc2UoKSwgdmVydGlj
YWxSZXBlYXQucmVsZWFzZSgpKSk7CiB9CiAKIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHZhbHVlRm9y
TmluZVBpZWNlSW1hZ2UoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICgh
aW1hZ2UuaGFzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAg
IC8vIEltYWdlIGZpcnN0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2VWYWx1ZTsKQEAgLTYy
OSw0NSArNjMxLDQ1IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1h
Z2UoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogCiBpbmxpbmUgc3RhdGljIFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShkb3VibGUgdmFsdWUsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoYWRqdXN0RmxvYXRGb3JBYnNvbHV0ZVpvb20odmFsdWUsIHN0eWxlKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlVmFsdWUoYWRqdXN0RmxvYXRGb3JBYnNvbHV0ZVpvb20odmFsdWUsIHN0eWxlKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiB9CiAKIGlubGluZSBzdGF0aWMgUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiB6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZShkb3VibGUgdmFsdWUsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUodmFsdWUgLyBzdHlsZS5lZmZlY3RpdmVab29tKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKTsKKyAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSh2YWx1ZSAvIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOwogfQogCiBzdGF0aWMgUmVmPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
Rm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
CiB7CiAgICAgaWYgKGxlbmd0aC5pc0ZpeGVkKCkpCiAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKGxlbmd0aC52YWx1ZSgpLCBzdHlsZSk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKGxlbmd0aCwgc3R5bGUpOworICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGxlbmd0aCwgc3R5bGUpOwogfQogCiBzdGF0aWMg
UmVmPENTU1ZhbHVlPiB2YWx1ZUZvclJlZmxlY3Rpb24oY29uc3QgU3R5bGVSZWZsZWN0aW9uKiBy
ZWZsZWN0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKCFyZWZsZWN0
aW9uKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBvZmZzZXQ7CiAgICAgaWYgKHJlZmxlY3Rpb24tPm9mZnNldCgpLmlzUGVy
Y2VudE9yQ2FsY3VsYXRlZCgpKQotICAgICAgICBvZmZzZXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS5wZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIG9mZnNldCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlVmFsdWUocmVmbGVjdGlvbi0+b2Zmc2V0KCkucGVyY2VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIGVsc2UKICAgICAgICAgb2Zmc2V0ID0g
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS52YWx1ZSgpLCBzdHls
ZSk7CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRpcmVjdGlvbjsKICAgICBzd2l0
Y2ggKHJlZmxlY3Rpb24tPmRpcmVjdGlvbigpKSB7CiAgICAgY2FzZSBSZWZsZWN0aW9uQmVsb3c6
Ci0gICAgICAgIGRpcmVjdGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUJlbG93KTsKKyAgICAgICAgZGlyZWN0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCZWxvdyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUmVmbGVjdGlvbkFib3ZlOgotICAgICAgICBkaXJlY3Rpb24gPSBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBYm92ZSk7CisgICAgICAg
IGRpcmVjdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlQWJvdmUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlZmxlY3Rpb25M
ZWZ0OgotICAgICAgICBkaXJlY3Rpb24gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVMZWZ0KTsKKyAgICAgICAgZGlyZWN0aW9uID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMZWZ0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBSZWZsZWN0aW9uUmlnaHQ6Ci0gICAgICAgIGRpcmVjdGlvbiA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJpZ2h0KTsKKyAgICAg
ICAgZGlyZWN0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVSaWdodCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjc5LDEy
ICs2ODEsMTIgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGNyZWF0ZVBvc2l0aW9uTGlzdEZv
ckxheWVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY28KICAgICBhdXRvIHBvc2l0aW9uTGlz
dCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBpZiAobGF5ZXIt
PmlzQmFja2dyb3VuZE9yaWdpblNldCgpKSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVy
dHlJRCwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRp
b25MaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsYXllci0+YmFj
a2dyb3VuZFhPcmlnaW4oKSkpOworICAgICAgICBwb3NpdGlvbkxpc3QuZ2V0KCkuYXBwZW5kKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGF5ZXItPmJhY2tncm91bmRYT3Jp
Z2luKCkpKTsKICAgICB9CiAgICAgcG9zaXRpb25MaXN0LmdldCgpLmFwcGVuZCh6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGxheWVyLT54UG9zaXRpb24oKSwgc3R5bGUpKTsKICAgICBp
ZiAobGF5ZXItPmlzQmFja2dyb3VuZE9yaWdpblNldCgpKSB7CiAgICAgICAgIEFTU0VSVChwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8IHByb3BlcnR5SUQgPT0g
Q1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pOwotICAgICAgICBwb3NpdGlvbkxpc3QuZ2V0
KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxheWVyLT5iYWNrZ3JvdW5kWU9y
aWdpbigpKSk7CisgICAgICAgIHBvc2l0aW9uTGlzdC5nZXQoKS5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShsYXllci0+YmFja2dyb3VuZFlPcmlnaW4oKSkpOwog
ICAgIH0KICAgICBwb3NpdGlvbkxpc3QuZ2V0KCkuYXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFs
dWVGb3JMZW5ndGgobGF5ZXItPnlQb3NpdGlvbigpLCBzdHlsZSkpOwogICAgIHJldHVybiBwb3Np
dGlvbkxpc3Q7CkBAIC03MTQsMzEgKzcxNiwzMSBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBw
b3NpdGlvbk9mZnNldFZhbHVlKFJlbmRlclN0eWxlJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcgog
ICAgICAgICBpZiAobGVuZ3RoLmlzRml4ZWQoKSkKICAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKGxlbmd0aC52YWx1ZSgpLCBzdHlsZSk7CiAKLSAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxlbmd0aCk7CisgICAgICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGxlbmd0aCk7CiAgICAgfQogCiAgICAg
aWYgKHN0eWxlLmhhc0luRmxvd1Bvc2l0aW9uKCkpIHsKICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bm90IGVub3VnaCB0byBzaW1wbHkgcmV0dXJuICJhdXRvIiB2YWx1ZXMgZm9yIG9uZSBvZmZzZXQg
aWYgdGhlIG90aGVyIHNpZGUgaXMgZGVmaW5lZC4KICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMg
aWYgbGVmdCBpcyBhdXRvIGFuZCByaWdodCBpcyBub3QgYXV0bywgdGhlbiBsZWZ0J3MgY29tcHV0
ZWQgdmFsdWUgaXMgbmVnYXRpdmUgcmlnaHQoKS4KICAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGdl
dCB0aGUgb3Bwb3NpdGUgbGVuZ3RoIHVuaXQgYW5kIHNlZSBpZiBpdCBpcyBhdXRvLgotICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQXV0byk7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9uLCBzbyB0aGF0IGNv
bXB1dGVkIHN0eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFjb2xvci5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKHN0eWxl
LT5jb2xvcigpLnJnYigpKTsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JW
YWx1ZShjb2xvci5yZ2IoKSk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPmNvbG9yKCkucmdiKCkpOworICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IucmdiKCkpOwog
fQogCiBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBwZXJjZW50YWdlT3Jab29tQWRqdXN0
ZWRWYWx1ZShMZW5ndGggbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAg
aWYgKGxlbmd0aC5pc1BlcmNlbnQoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGxlbmd0aC5wZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKGxlbmd0aC5wZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
CiAgICAgCiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodmFsdWVGb3JMZW5ndGgo
bGVuZ3RoLCAwKSwgc3R5bGUpOwogfQpAQCAtNzQ2LDcgKzc0OCw3IEBAIHN0YXRpYyBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBlcmNlbnRhZ2VPclpvb21BZGp1c3RlZFZhbHVlKExlbmd0aCBsZW5n
dGgsIGNvbnN0CiBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBhdXRvT3Jab29tQWRqdXN0
ZWRWYWx1ZShMZW5ndGggbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAg
aWYgKGxlbmd0aC5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKIAog
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHZhbHVlRm9yTGVuZ3RoKGxlbmd0aCwg
MCksIHN0eWxlKTsKIH0KQEAgLTgyMSwzNyArODIzLDM4IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHNp
emluZ0JveChSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogc3RhdGljIFJlZjxXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZT4gbWF0cml4VHJhbnNmb3JtVmFsdWUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIFJlZlB0cjxX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4gdHJhbnNmb3JtVmFsdWU7CisgICAgYXV0byYgY3NzVmFs
dWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKICAgICBpZiAodHJhbnNmb3JtLmlz
QWZmaW5lKCkpIHsKICAgICAgICAgdHJhbnNmb3JtVmFsdWUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6Y3JlYXRlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24pOwogCi0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUodHJhbnNmb3JtLmEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKLSAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZSh0cmFuc2Zvcm0uYigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAg
ICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRy
YW5zZm9ybS5jKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIHRy
YW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3Jt
LmQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3Jt
VmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJhbnNmb3JtLmEoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFw
cGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJhbnNmb3JtLmIoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJhbnNmb3JtLmMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wu
Y3JlYXRlVmFsdWUodHJhbnNmb3JtLmQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKICAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJWYWx1
ZSh0cmFuc2Zvcm0uZSgpLCBzdHlsZSkpOwogICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5k
KHpvb21BZGp1c3RlZE51bWJlclZhbHVlKHRyYW5zZm9ybS5mKCksIHN0eWxlKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgdHJhbnNmb3JtVmFsdWUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
Y3JlYXRlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bik7CiAKLSAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZSh0cmFuc2Zvcm0ubTExKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUodHJhbnNmb3JtLm0xMigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAg
ICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRy
YW5zZm9ybS5tMTMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAg
dHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zv
cm0ubTE0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5z
Zm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMTEo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFs
dWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0xMigpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTEzKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMTQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKIAotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMjEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTIyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUodHJhbnNmb3JtLm0yMygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikp
OwotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHRyYW5zZm9ybS5tMjQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAg
ICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJh
bnNmb3JtLm0yMSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0
cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0u
bTIyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9y
bVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMjMoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0yNCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogCi0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0zMSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMzIoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTMzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0zNCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVh
dGVWYWx1ZSh0cmFuc2Zvcm0ubTMxKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CisgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KHRyYW5zZm9ybS5tMzIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAg
ICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUodHJhbnNm
b3JtLm0zMygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFu
c2Zvcm1WYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTM0
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAKICAgICAgICAgdHJhbnNmb3Jt
VmFsdWUtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSh0cmFuc2Zvcm0ubTQxKCksIHN0
eWxlKSk7CiAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoem9vbUFkanVzdGVkTnVtYmVy
VmFsdWUodHJhbnNmb3JtLm00MigpLCBzdHlsZSkpOwogICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+
YXBwZW5kKHpvb21BZGp1c3RlZE51bWJlclZhbHVlKHRyYW5zZm9ybS5tNDMoKSwgc3R5bGUpKTsK
LSAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZSh0cmFuc2Zvcm0ubTQ0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAg
ICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHRyYW5z
Zm9ybS5tNDQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICB9CiAKICAg
ICByZXR1cm4gdHJhbnNmb3JtVmFsdWUucmVsZWFzZU5vbk51bGwoKTsKQEAgLTg2MCw3ICs4NjMs
NyBAQCBzdGF0aWMgUmVmPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPiBtYXRyaXhUcmFuc2Zvcm1W
YWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdAogc3RhdGljIFJlZjxDU1NWYWx1ZT4gY29tcHV0
ZWRUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKQogewogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNUcmFuc2Zvcm0oKSkK
LSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAgIEZsb2F0UmVjdCBwaXhlbFNu
YXBwZWRSZWN0OwogICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpCkBAIC04NzgsMTgg
Kzg4MSwxOSBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBjb21wdXRlZFRyYW5zZm9ybShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZQogCiBzdGF0aWMgaW5saW5lIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gYWRqdXN0TGVuZ3RoRm9yWm9vbShkb3VibGUgbGVuZ3RoLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIEFkanVzdFBpeGVsVmFsdWVzRm9yQ29tcHV0ZWRTdHlsZSBh
ZGp1c3QpCiB7Ci0gICAgcmV0dXJuIGFkanVzdCA9PSBBZGp1c3RQaXhlbFZhbHVlcyA/IHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUobGVuZ3RoLCBzdHlsZSkgOiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShsZW5ndGgsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIHJldHVybiBhZGp1
c3QgPT0gQWRqdXN0UGl4ZWxWYWx1ZXMgPyB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGxlbmd0aCwg
c3R5bGUpIDogQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShsZW5ndGgsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogfQogCiBzdGF0aWMgaW5saW5lIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gYWRqdXN0TGVuZ3RoRm9yWm9vbShjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBBZGp1c3RQaXhlbFZhbHVlc0ZvckNvbXB1dGVkU3R5bGUg
YWRqdXN0KQogewotICAgIHJldHVybiBhZGp1c3QgPT0gQWRqdXN0UGl4ZWxWYWx1ZXMgPyB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKGxlbmd0aC52YWx1ZSgpLCBzdHlsZSkgOiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShsZW5ndGgpOworICAgIHJldHVybiBhZGp1c3QgPT0gQWRqdXN0UGl4ZWxW
YWx1ZXMgPyB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGxlbmd0aC52YWx1ZSgpLCBzdHlsZSkgOiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGxlbmd0aCk7CiB9CiAKIFJlZjxD
U1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JTaGFkb3coY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgQWRqdXN0UGl4ZWxWYWx1ZXNGb3JDb21wdXRlZFN0eWxlIGFkanVzdCkKIHsK
KyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAg
IGlmICghc2hhZG93KQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBhdXRvIGxpc3QgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZm9yIChjb25zdCBTaGFkb3dE
YXRhKiBjdXJyU2hhZG93RGF0YSA9IHNoYWRvdzsgY3VyclNoYWRvd0RhdGE7IGN1cnJTaGFkb3dE
YXRhID0gY3VyclNoYWRvd0RhdGEtPm5leHQoKSkgewpAQCAtODk3LDggKzkwMSw4IEBAIFJlZjxD
U1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JTaGFkb3coY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93LCBDCiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geSA9
IGFkanVzdExlbmd0aEZvclpvb20oY3VyclNoYWRvd0RhdGEtPnkoKSwgc3R5bGUsIGFkanVzdCk7
CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciA9IGFkanVzdExlbmd0aEZv
clpvb20oY3VyclNoYWRvd0RhdGEtPnJhZGl1cygpLCBzdHlsZSwgYWRqdXN0KTsKICAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzcHJlYWQgPSBwcm9wZXJ0eUlEID09IENTU1Byb3Bl
cnR5VGV4dFNoYWRvdyA/IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+KCkgOiBhZGp1c3RM
ZW5ndGhGb3Jab29tKGN1cnJTaGFkb3dEYXRhLT5zcHJlYWQoKSwgc3R5bGUsIGFkanVzdCk7Ci0g
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGUgPSBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdyB8fCBjdXJyU2hhZG93RGF0YS0+c3R5bGUoKSA9PSBOb3JtYWwg
PyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPigpIDogY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5zZXQpOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbG9yID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShjdXJyU2hh
ZG93RGF0YS0+Y29sb3IoKS5yZ2IoKSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gc3R5bGUgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyB8fCBjdXJyU2hh
ZG93RGF0YS0+c3R5bGUoKSA9PSBOb3JtYWwgPyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PigpIDogY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUluc2V0KTsK
KyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvciA9IGNzc1ZhbHVlUG9vbC5j
cmVhdGVDb2xvclZhbHVlKGN1cnJTaGFkb3dEYXRhLT5jb2xvcigpLnJnYigpKTsKICAgICAgICAg
bGlzdC5nZXQoKS5wcmVwZW5kKENTU1NoYWRvd1ZhbHVlOjpjcmVhdGUoeC5yZWxlYXNlKCksIHku
cmVsZWFzZSgpLCBibHVyLnJlbGVhc2UoKSwgc3ByZWFkLnJlbGVhc2UoKSwgc3R5bGUucmVsZWFz
ZSgpLCBjb2xvci5yZWxlYXNlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIFdURjo6bW92ZShsaXN0
KTsKQEAgLTkwNiw4ICs5MTAsOSBAQCBSZWY8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnZhbHVlRm9yU2hhZG93KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgQwogCiBSZWY8Q1NT
VmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVyT3BlcmF0aW9ucywg
QWRqdXN0UGl4ZWxWYWx1ZXNGb3JDb21wdXRlZFN0eWxlIGFkanVzdCkKIHsKKyAgICBhdXRvJiBj
c3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIGlmIChmaWx0ZXJP
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAog
ICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKIApA
QCAtOTIwLDU1ICs5MjUsNTUgQEAgUmVmPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9y
Ojp2YWx1ZUZvckZpbHRlcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGMKICAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewogICAgICAgICAgICAgUmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHJlZmVyZW5jZU9wZXJhdGlvbi51cmwoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQo
Y3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHJlZmVyZW5jZU9wZXJhdGlvbi51cmwoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKICAgICAgICAgICAgIEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
ICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVy
VmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVl
OjpTZXBpYUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24u
YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
IHsKICAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKICAgICAgICAgICAg
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0g
ZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0
ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29s
b3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKSk7
CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6IHsKICAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAg
ICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZp
bHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CiAgICAgICAgICAgICBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpj
cmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKICAgICAgICAgICAg
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGJyaWdodG5lc3NPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoYnJpZ2h0bmVzc09wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKGJyaWdodG5lc3NPcGVyYXRpb24uYW1vdW50KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKICAgICAgICAgICAgIEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbnRyYXN0T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNy
ZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShj
b250cmFzdE9wZXJhdGlvbi5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZh
bHVlKGNvbnRyYXN0T3BlcmF0aW9uLmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6IHsKQEAgLTk5OSwxMSArMTAwNCwxMSBAQCBSZWY8Q1NTVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgYwogc3RhdGljIFJlZjxDU1NWYWx1ZT4gc3BlY2lmaWVkVmFsdWVGb3JHcmlkVHJh
Y2tCcmVhZHRoKGNvbnN0IEdyaWRMZW5ndGgmIHRyYWNrQnJlYWR0aCwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQogewogICAgIGlmICghdHJhY2tCcmVhZHRoLmlzTGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFja0JyZWFkdGguZmxleCgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ZSKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUodHJhY2tCcmVhZHRoLmZsZXgoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19GUik7CiAKICAgICBjb25zdCBMZW5ndGgmIHRyYWNrQnJlYWR0aExlbmd0aCA9
IHRyYWNrQnJlYWR0aC5sZW5ndGgoKTsKICAgICBpZiAodHJhY2tCcmVhZHRoTGVuZ3RoLmlzQXV0
bygpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHRyYWNrQnJlYWR0aExlbmd0aCwgc3R5bGUpOwogfQog
CkBAIC0xMDI3LDkgKzEwMzIsMTAgQEAgc3RhdGljIHZvaWQgYWRkVmFsdWVzRm9yTmFtZWRHcmlk
TGluZXNBdEluZGV4KGNvbnN0IE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCYgb3IKICAgICBpZiAo
bmFtZWRHcmlkTGluZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBj
c3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIFJlZlB0cjxDU1NH
cmlkTGluZU5hbWVzVmFsdWU+IGxpbmVOYW1lcyA9IENTU0dyaWRMaW5lTmFtZXNWYWx1ZTo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZWRHcmlkTGluZXMpCi0gICAgICAgIGxp
bmVOYW1lcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG5hbWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgIGxpbmVOYW1lcy0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC5jcmVhdGVWYWx1ZShuYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykp
OwogICAgIGxpc3QuYXBwZW5kKGxpbmVOYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIApAQCAt
MTA1MCw3ICsxMDU2LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JHcmlkVHJhY2tM
aXN0KEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIFIKIAogICAgIGlmICh0cmFj
a0xpc3RJc0VtcHR5KSB7CiAgICAgICAgIEFTU0VSVChvcmRlcmVkTmFtZWRHcmlkTGluZXMuaXNF
bXB0eSgpKTsKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICB9CiAKICAgICBh
dXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CkBAIC0xMDgx
LDIxICsxMDg3LDIyIEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrTGlz
dChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBSCiAKIHN0YXRpYyBSZWY8Q1NT
VmFsdWU+IHZhbHVlRm9yR3JpZFBvc2l0aW9uKGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24p
CiB7CisgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsK
ICAgICBpZiAocG9zaXRpb24uaXNBdXRvKCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKIAogICAgIGlm
IChwb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KHBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcp
OwogCiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgp
OwogICAgIGlmIChwb3NpdGlvbi5pc1NwYW4oKSkgewotICAgICAgICBsaXN0LmdldCgpLmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTcGFuKSk7Ci0g
ICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBvc2l0
aW9uLnNwYW5Qb3NpdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlU3BhbikpOworICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2wu
Y3JlYXRlVmFsdWUocG9zaXRpb24uc3BhblBvc2l0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAKICAgICBpZiAoIXBvc2l0aW9uLm5hbWVkR3JpZExp
bmUoKS5pc051bGwoKSkKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUocG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORykpOworICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3Jl
YXRlVmFsdWUocG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1NUUklORykpOwogICAgIHJldHVybiBXVEY6Om1vdmUobGlzdCk7CiB9CiAjZW5kaWYKQEAgLTEx
MDMsMTAgKzExMTAsMTAgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JHcmlkUG9zaXRp
b24oY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbikKIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNy
ZWF0ZVRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKQog
ewogICAgIGlmIChhbmltYXRpb24uYW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbjo6QW5pbWF0
ZU5vbmUpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgaWYgKGFuaW1hdGlv
bi5hbmltYXRpb25Nb2RlKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRlQWxsKQotICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsKTsKLSAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5n
KGFuaW1hdGlvbi5wcm9wZXJ0eSgpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVBbGwpOworICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKGdldFByb3BlcnR5TmFtZVN0cmluZyhhbmltYXRpb24ucHJvcGVydHkoKSks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKIH0KIAogc3RhdGljIFJlZjxDU1NWYWx1
ZUxpc3Q+IGdldFRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFu
aW1MaXN0KQpAQCAtMTExNiw3ICsxMTIzLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGdl
dFRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1MaXMKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltTGlzdC0+c2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjcmVhdGVUcmFuc2l0aW9uUHJvcGVydHlWYWx1ZShh
bmltTGlzdC0+YW5pbWF0aW9uKGkpKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxpc3QuZ2V0KCku
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCkp
OworICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCkpOwogICAgIHJldHVybiBsaXN0OwogfQog
CkBAIC0xMTMyLDIyICsxMTM5LDIyIEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBzY3JvbGxT
bmFwRGVzdGluYXRpb24oUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBMZW5ndGhTCiBzdGF0aWMg
UmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwUG9pbnRzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
U2Nyb2xsU25hcFBvaW50cyogcG9pbnRzKQogewogICAgIGlmICghcG9pbnRzKQotICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgaWYgKHBvaW50cy0+dXNlc0VsZW1lbnRzKQot
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlRWxlbWVudHMpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVFbGVtZW50cyk7CiAgICAgYXV0byBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGZvciAoYXV0byYgcG9p
bnQgOiBwb2ludHMtPm9mZnNldHMpCiAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKHpvb21BZGp1
c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgocG9pbnQsIHN0eWxlKSk7CiAgICAgaWYgKHBvaW50cy0+
aGFzUmVwZWF0KQotICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNyZWF0ZSh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVu
Z3RoKHBvaW50cy0+cmVwZWF0T2Zmc2V0LCBzdHlsZSkpKSk7CisgICAgICAgIGxpc3QuZ2V0KCku
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoTGVuZ3RoUmVwZWF0
OjpjcmVhdGUoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChwb2ludHMtPnJlcGVhdE9m
ZnNldCwgc3R5bGUpKSkpOwogICAgIHJldHVybiBXVEY6Om1vdmUobGlzdCk7CiB9CiAKIHN0YXRp
YyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBDb29yZGluYXRlcyhSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IFZlY3RvcjxMZW5ndGhTaXplPiYgY29vcmRpbmF0ZXMpCiB7CiAgICAgaWYgKGNvb3Jk
aW5hdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKIApAQCAt
MTE2NCwyMSArMTE3MSwyMiBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwQ29vcmRp
bmF0ZXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZwogCiBzdGF0aWMgUmVm
PENTU1ZhbHVlPiBnZXRXaWxsQ2hhbmdlUHJvcGVydHlWYWx1ZShjb25zdCBXaWxsQ2hhbmdlRGF0
YSogd2lsbENoYW5nZURhdGEpCiB7CisgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKTsKICAgICBpZiAoIXdpbGxDaGFuZ2VEYXRhIHx8ICF3aWxsQ2hhbmdl
RGF0YS0+bnVtRmVhdHVyZXMoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogCiAgICAgYXV0byBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgd2lsbENoYW5nZURhdGEtPm51bUZlYXR1cmVzKCk7ICsraSkgewogICAgICAg
ICBXaWxsQ2hhbmdlRGF0YTo6RmVhdHVyZVByb3BlcnR5UGFpciBmZWF0dXJlID0gd2lsbENoYW5n
ZURhdGEtPmZlYXR1cmVBdChpKTsKICAgICAgICAgc3dpdGNoIChmZWF0dXJlLmZpcnN0KSB7CiAg
ICAgICAgIGNhc2UgV2lsbENoYW5nZURhdGE6OlNjcm9sbFBvc2l0aW9uOgotICAgICAgICAgICAg
bGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlU2Nyb2xsUG9zaXRpb24pKTsKKyAgICAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTY3JvbGxQb3NpdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lsbENoYW5nZURhdGE6OkNvbnRl
bnRzOgotICAgICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29udGVudHMpKTsKKyAgICAgICAgICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250
ZW50cykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lsbENoYW5nZURhdGE6
OlByb3BlcnR5OgotICAgICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKGZlYXR1cmUuc2Vjb25kKSk7CisgICAgICAgICAgICBsaXN0
LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZlYXR1cmUu
c2Vjb25kKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWxsQ2hhbmdlRGF0
YTo6SW52YWxpZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTE5MSwy
NiArMTE5OSwyOCBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBnZXRXaWxsQ2hhbmdlUHJvcGVydHlW
YWx1ZShjb25zdCBXaWxsQ2hhbmdlRGF0YSogd2lsbENoYW5nZQogCiBzdGF0aWMgUmVmPENTU1Zh
bHVlTGlzdD4gZ2V0RGVsYXlWYWx1ZShjb25zdCBBbmltYXRpb25MaXN0KiBhbmltTGlzdCkKIHsK
KyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAg
IGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBp
ZiAoYW5pbUxpc3QpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltTGlzdC0+
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShhbmltTGlzdC0+YW5pbWF0aW9uKGkpLmRlbGF5KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUykpOworICAgICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKGFuaW1MaXN0LT5hbmltYXRpb24oaSkuZGVsYXkoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IGlu
aXRpYWxBbmltYXRpb25EZWxheSgpIGlzIHVzZWQgZm9yIGJvdGggdHJhbnNpdGlvbnMgYW5kIGFu
aW1hdGlvbnMKLSAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoQW5pbWF0aW9uOjppbml0aWFsRGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
KSk7CisgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShB
bmltYXRpb246OmluaXRpYWxEZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBnZXRE
dXJhdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1MaXN0KQogeworICAgIGF1dG8m
IGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgYXV0byBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIGlmIChhbmltTGlz
dCkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1MaXN0LT5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGFuaW1MaXN0LT5hbmltYXRpb24oaSkuZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TKSk7CisgICAgICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3Jl
YXRlVmFsdWUoYW5pbUxpc3QtPmFuaW1hdGlvbihpKS5kdXJhdGlvbigpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1MpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgaW5pdGlh
bEFuaW1hdGlvbkR1cmF0aW9uKCkgaXMgdXNlZCBmb3IgYm90aCB0cmFuc2l0aW9ucyBhbmQgYW5p
bWF0aW9ucwotICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShBbmltYXRpb246OmluaXRpYWxEdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1MpKTsKKyAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KEFuaW1hdGlvbjo6aW5pdGlhbER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykp
OwogICAgIH0KICAgICByZXR1cm4gbGlzdDsKIH0KQEAgLTEyMzcsNyArMTI0Nyw3IEBAIHN0YXRp
YyBSZWY8Q1NTVmFsdWU+IGNyZWF0ZVRpbWluZ0Z1bmN0aW9uVmFsdWUoY29uc3QgVGltaW5nRnVu
Y3Rpb24qIHRpbWluZ0Z1bmN0CiAgICAgICAgICAgICAgICAgdmFsdWVJZCA9IENTU1ZhbHVlRWFz
ZUluT3V0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsK
KyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gQ1NTQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoYmV6aWVyVGltaW5nRnVuY3Rpb24tPngx
KCksIGJlemllclRpbWluZ0Z1bmN0aW9uLT55MSgpLCBiZXppZXJUaW1pbmdGdW5jdGlvbi0+eDIo
KSwgYmV6aWVyVGltaW5nRnVuY3Rpb24tPnkyKCkpOwogICAgIH0KQEAgLTEyNDcsNyArMTI1Nyw3
IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNyZWF0ZVRpbWluZ0Z1bmN0aW9uVmFsdWUoY29uc3Qg
VGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVCh0aW1pbmdGdW5jdGlvbi0+dHlwZSgpID09IFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJG
dW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVMaW5lYXIpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lYXIpOwogICAgIH0KIH0K
IApAQCAtMTI3Niw3ICsxMjg2LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gY3JlYXRlQW5pbWF0
aW9uVHJpZ2dlclZhbHVlKGNvbnN0IEFuaW1hdGlvblRyaWdnZXIqIHRyaWdnZXIKICAgICB9CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKHRyaWdnZXItPnR5cGUoKSA9PSBBbmltYXRpb25U
cmlnZ2VyOjpBbmltYXRpb25UcmlnZ2VyVHlwZTo6QXV0b0FuaW1hdGlvblRyaWdnZXJUeXBlKTsK
LSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUF1dG8pOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKICAgICB9CiB9CiAKQEAgLTEyOTYsNyAr
MTMwNiw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBnZXRBbmltYXRpb25UcmlnZ2VyVmFs
dWUoY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbUxpc3QsCiBzdGF0aWMgUmVmPENTU1ZhbHVlPiBj
cmVhdGVMaW5lQm94Q29udGFpblZhbHVlKHVuc2lnbmVkIGxpbmVCb3hDb250YWluKQogewogICAg
IGlmICghbGluZUJveENvbnRhaW4pCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAg
ICAgcmV0dXJuIENTU0xpbmVCb3hDb250YWluVmFsdWU6OmNyZWF0ZShsaW5lQm94Q29udGFpbik7
CiB9CiAKQEAgLTEzNjcsNyArMTM3Nyw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJpbmdLCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIg
PSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkKLSAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzaXplSWRl
bnRpZmllcik7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShzaXplSWRlbnRpZmllcik7CiAKICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUo
KSwgKnN0eWxlKTsKIH0KQEAgLTE0MDUsMjcgKzE0MTUsMjggQEAgc3RhdGljIENTU1ZhbHVlSUQg
aWRlbnRpZmllckZvckZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKIHN0YXRpYyBS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9yRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KQogewogICAgIGlmIChDU1NWYWx1ZUlEIGZhbWlseUlkZW50aWZpZXIgPSBpZGVudGlm
aWVyRm9yRmFtaWx5KGZhbWlseSkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoZmFtaWx5SWRlbnRpZmllcik7Ci0gICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHkpOworICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmFtaWx5SWRlbnRp
Zmllcik7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZh
bWlseVZhbHVlKGZhbWlseSk7CiB9CiAKIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHJlbmRlclRleHRE
ZWNvcmF0aW9uRmxhZ3NUb0NTU1ZhbHVlKGludCB0ZXh0RGVjb3JhdGlvbikKIHsKKyAgICBhdXRv
JiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIC8vIEJsaW5r
IHZhbHVlIGlzIGlnbm9yZWQuCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBpZiAodGV4dERlY29yYXRpb24g
JiBUZXh0RGVjb3JhdGlvblVuZGVybGluZSkKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSkpOworICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVVuZGVybGluZSkpOwogICAgIGlmICh0ZXh0RGVjb3JhdGlvbiAmIFRleHREZWNvcmF0aW9uT3Zl
cmxpbmUpCi0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVPdmVybGluZSkpOworICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU92ZXJsaW5lKSk7CiAgICAgaWYg
KHRleHREZWNvcmF0aW9uICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3VnaCkKLSAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxp
bmVUaHJvdWdoKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpKTsKICNpZiBFTkFCTEUoTEVUVEVSUFJF
U1MpCiAgICAgaWYgKHRleHREZWNvcmF0aW9uICYgVGV4dERlY29yYXRpb25MZXR0ZXJwcmVzcykK
LSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVdlYmtpdExldHRlcnByZXNzKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2Via2l0TGV0dGVycHJlc3Mp
KTsKICNlbmRpZgogCiAgICAgaWYgKCFsaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
OwogICAgIHJldHVybiBsaXN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKQEAgLTE0MzMsNTQgKzE0
NDQsNTUgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gcmVuZGVyVGV4dERlY29yYXRpb25TdHlsZUZs
YWdzVG9DU1NWYWx1ZShUZXh0RGVjb3JhdGlvblN0eWwKIHsKICAgICBzd2l0Y2ggKHRleHREZWNv
cmF0aW9uU3R5bGUpIHsKICAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVTb2xpZDoKLSAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNv
bGlkKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlU29saWQpOwogICAgIGNhc2UgVGV4dERlY29yYXRpb25TdHls
ZURvdWJsZToKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZURvdWJsZSk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURvdWJsZSk7CiAgICAgY2FzZSBU
ZXh0RGVjb3JhdGlvblN0eWxlRG90dGVkOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRG90dGVkKTsKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRG90
dGVkKTsKICAgICBjYXNlIFRleHREZWNvcmF0aW9uU3R5bGVEYXNoZWQ6Ci0gICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEYXNoZWQpOwor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVEYXNoZWQpOwogICAgIGNhc2UgVGV4dERlY29yYXRpb25TdHlsZVdhdnk6
Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVXYXZ5KTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2F2eSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUV4cGxpY2l0SW5p
dGlhbFZhbHVlKCk7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
RXhwbGljaXRJbml0aWFsVmFsdWUoKTsKIH0KIAogc3RhdGljIFJlZjxDU1NWYWx1ZT4gcmVuZGVy
VGV4dERlY29yYXRpb25Ta2lwRmxhZ3NUb0NTU1ZhbHVlKFRleHREZWNvcmF0aW9uU2tpcCB0ZXh0
RGVjb3JhdGlvblNraXApCiB7CiAgICAgc3dpdGNoICh0ZXh0RGVjb3JhdGlvblNraXApIHsKICAg
ICBjYXNlIFRleHREZWNvcmF0aW9uU2tpcEF1dG86Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7CiAgICAgY2FzZSBUZXh0RGVjb3JhdGlvblNraXBOb25lOgotICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpOwogICAgIGNhc2UgVGV4dERlY29yYXRpb25Ta2lwSW5rOgotICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5r
KTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlSW5rKTsKICAgICBjYXNlIFRleHREZWNvcmF0aW9uU2tpcE9iamVj
dHM6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVPYmplY3RzKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JqZWN0cyk7CiAgICAgfQogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUV4
cGxpY2l0SW5pdGlhbFZhbHVlKCk7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlRXhwbGljaXRJbml0aWFsVmFsdWUoKTsKIH0KIAogc3RhdGljIFJlZjxDU1NWYWx1
ZT4gcmVuZGVyRW1waGFzaXNQb3NpdGlvbkZsYWdzVG9DU1NWYWx1ZShUZXh0RW1waGFzaXNQb3Np
dGlvbiB0ZXh0RW1waGFzaXNQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoISgodGV4dEVtcGhhc2lz
UG9zaXRpb24gJiBUZXh0RW1waGFzaXNQb3NpdGlvbk92ZXIpICYmICh0ZXh0RW1waGFzaXNQb3Np
dGlvbiAmIFRleHRFbXBoYXNpc1Bvc2l0aW9uVW5kZXIpKSk7CiAgICAgQVNTRVJUKCEoKHRleHRF
bXBoYXNpc1Bvc2l0aW9uICYgVGV4dEVtcGhhc2lzUG9zaXRpb25MZWZ0KSAmJiAodGV4dEVtcGhh
c2lzUG9zaXRpb24gJiBUZXh0RW1waGFzaXNQb3NpdGlvblJpZ2h0KSkpOworICAgIGF1dG8mIGNz
c1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICBpZiAodGV4dEVtcGhhc2lzUG9zaXRpb24gJiBUZXh0RW1waGFzaXNQb3NpdGlvbk92ZXIpCi0g
ICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVPdmVyKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3ZlcikpOwogICAgIGlmICh0ZXh0RW1waGFzaXNQb3Np
dGlvbiAmIFRleHRFbXBoYXNpc1Bvc2l0aW9uVW5kZXIpCi0gICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcikpOworICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVVuZGVyKSk7CiAgICAgaWYgKHRleHRFbXBoYXNpc1Bvc2l0aW9uICYgVGV4dEVtcGhhc2lz
UG9zaXRpb25MZWZ0KQotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGVmdCkpOworICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxlZnQpKTsKICAgICBpZiAo
dGV4dEVtcGhhc2lzUG9zaXRpb24gJiBUZXh0RW1waGFzaXNQb3NpdGlvblJpZ2h0KQotICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlUmlnaHQpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVSaWdodCkpOwogCiAgICAgaWYgKCFsaXN0LT5sZW5ndGgoKSkK
LSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgIHJldHVybiBsaXN0LnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKQEAgLTE0ODgsMTYgKzE1MDAsMTcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gZmlsbFJlcGVh
dFRvQ1NTVmFsdWUoRUZpbGxSZXBlYXQgeFJlcGVhdCwgRUZpbGxSZXBlYXQgeVJlcGUKIHsKICAg
ICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIGJvdGggdmFsdWVzIGFyZSBlcXVh
bCwganVzdCByZXR1cm4gb25lIG9mIHRoZW0uIEFuZAogICAgIC8vIGlmIHRoZSB0d28gdmFsdWVz
IGFyZSBlcXVpdmFsZW50IHRvIHJlcGVhdC14IG9yIHJlcGVhdC15LCBqdXN0IHJldHVybiB0aGUg
c2hvcnRoYW5kLgorICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCk7CiAgICAgaWYgKHhSZXBlYXQgPT0geVJlcGVhdCkKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHhSZXBlYXQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKHhSZXBlYXQpOwogICAgIGlmICh4UmVwZWF0ID09IFJlcGVhdEZpbGwg
JiYgeVJlcGVhdCA9PSBOb1JlcGVhdEZpbGwpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXRYKTsKKyAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXRYKTsKICAg
ICBpZiAoeFJlcGVhdCA9PSBOb1JlcGVhdEZpbGwgJiYgeVJlcGVhdCA9PSBSZXBlYXRGaWxsKQot
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlUmVwZWF0WSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlUmVwZWF0WSk7CiAKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoeFJlcGVhdCkpOwotICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHlSZXBlYXQpKTsKKyAgICBsaXN0LmdldCgpLmFwcGVuZChj
c3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoeFJlcGVhdCkpOworICAgIGxpc3QuZ2V0KCkuYXBwZW5k
KGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSh5UmVwZWF0KSk7CiAgICAgcmV0dXJuIFdURjo6bW92
ZShsaXN0KTsKIH0KIApAQCAtMTUwNSwyMCArMTUxOCwyMCBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
PiBmaWxsU291cmNlVHlwZVRvQ1NTVmFsdWUoRU1hc2tTb3VyY2VUeXBlIHR5cGUpCiB7CiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBNYXNrQWxwaGE6Ci0gICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShDU1NWYWx1ZUFscGhhKTsKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoQ1NTVmFsdWVBbHBoYSk7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gTWFza0x1bWluYW5jZSk7Ci0gICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShDU1NWYWx1ZUx1bWluYW5jZSk7Cisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKENTU1Zh
bHVlTHVtaW5hbmNlKTsKICAgICB9CiB9CiAKIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZpbGxTaXpl
VG9DU1NWYWx1ZShjb25zdCBGaWxsU2l6ZSYgZmlsbFNpemUsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKIHsKICAgICBpZiAoZmlsbFNpemUudHlwZSA9PSBDb250YWluKQotICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29udGFpbik7
CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUNvbnRhaW4pOwogCiAgICAgaWYgKGZpbGxTaXplLnR5cGUgPT0gQ292
ZXIpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVDb3Zlcik7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvdmVyKTsKIAogICAgIGlmIChmaWxsU2l6
ZS5zaXplLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZUZvckxlbmd0aChmaWxsU2l6ZS5zaXplLndpZHRoKCksIHN0eWxlKTsKQEAgLTE1MzEs
MjIgKzE1NDQsMjMgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gZmlsbFNpemVUb0NTU1ZhbHVlKGNv
bnN0IEZpbGxTaXplJiBmaWxsU2l6ZSwgY29uc3QgUmVuZGVyU3QKIAogc3RhdGljIFJlZjxDU1NW
YWx1ZT4gYWx0VGV4dFRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y29udGVudEFsdFRleHQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jb250ZW50QWx0VGV4dCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiB9CiAgICAgCiBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gY29udGVudFRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogeworICAg
IGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgYXV0
byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGZvciAo
Y29uc3QgQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gc3R5bGUtPmNvbnRlbnREYXRhKCk7IGNv
bnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKICAgICAgICAg
aWYgKGlzPENvdW50ZXJDb250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkKLSAgICAgICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGRvd25jYXN0PENvdW50
ZXJDb250ZW50RGF0YT4oKmNvbnRlbnREYXRhKS5jb3VudGVyKCkuaWRlbnRpZmllcigpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0NPVU5URVJfTkFNRSkpOworICAgICAgICAgICAgbGlzdC5nZXQo
KS5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGRvd25jYXN0PENvdW50ZXJDb250ZW50
RGF0YT4oKmNvbnRlbnREYXRhKS5jb3VudGVyKCkuaWRlbnRpZmllcigpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0NPVU5URVJfTkFNRSkpOwogICAgICAgICBlbHNlIGlmIChpczxJbWFnZUNvbnRl
bnREYXRhPigqY29udGVudERhdGEpKQogICAgICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoKmRv
d25jYXN0PEltYWdlQ29udGVudERhdGE+KCpjb250ZW50RGF0YSkuaW1hZ2UoKS5jc3NWYWx1ZSgp
KTsKICAgICAgICAgZWxzZSBpZiAoaXM8VGV4dENvbnRlbnREYXRhPigqY29udGVudERhdGEpKQot
ICAgICAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
ZG93bmNhc3Q8VGV4dENvbnRlbnREYXRhPigqY29udGVudERhdGEpLnRleHQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNz
c1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShkb3duY2FzdDxUZXh0Q29udGVudERhdGE+KCpjb250ZW50
RGF0YSkudGV4dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwogICAgIH0KICAg
ICBpZiAoc3R5bGUtPmhhc0Zsb3dGcm9tKCkpCi0gICAgICAgIGxpc3QuZ2V0KCkuYXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25UaHJlYWQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgbGlzdC5nZXQoKS5hcHBlbmQoY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25UaHJlYWQoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpKTsKICAgICByZXR1cm4gbGlzdDsKIH0KIApAQCAtMTU1NiwxMSArMTU3
MCwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb3VudGVyVG9DU1NWYWx1ZShjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3BlcnR5SQogICAgIGlmICghbWFwKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAorICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpdC0+
a2V5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICBsaXN0LT5hcHBl
bmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGl0LT5rZXksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfU1RSSU5HKSk7CiAgICAgICAgIHNob3J0IG51bWJlciA9IHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlDb3VudGVySW5jcmVtZW50ID8gaXQtPnZhbHVlLmluY3JlbWVudFZhbHVlKCkgOiBpdC0+
dmFsdWUucmVzZXRWYWx1ZSgpOwotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoKGRvdWJs
ZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KQEAgLTE2MDUsNTMgKzE2MjAsNTMgQEAgc3RhdGljIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxl
KQogc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLml0YWxp
YygpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSXRhbGljKTsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKKyAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogfQogCiBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250VmFy
aWFudEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5zbWFsbENhcHMoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2Fwcyk7Ci0gICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVNtYWxsQ2Fwcyk7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKIH0KIAogc3RhdGljIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgc3dpdGNoIChzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpIHsK
ICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWUxMDApOworICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWUxMDApOwog
ICAgIGNhc2UgRm9udFdlaWdodDIwMDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTIwMCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTIwMCk7CiAg
ICAgY2FzZSBGb250V2VpZ2h0MzAwOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlMzAwKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlMzAwKTsKICAg
ICBjYXNlIEZvbnRXZWlnaHROb3JtYWw6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3Jt
YWwpOwogICAgIGNhc2UgRm9udFdlaWdodDUwMDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTUwMCk7CisgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTUw
MCk7CiAgICAgY2FzZSBGb250V2VpZ2h0NjAwOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlNjAwKTsKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlNjAw
KTsKICAgICBjYXNlIEZvbnRXZWlnaHRCb2xkOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQm9sZCk7CisgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJv
bGQpOwogICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTgwMCk7CisgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTgw
MCk7CiAgICAgY2FzZSBGb250V2VpZ2h0OTAwOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlOTAwKTsKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlOTAw
KTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9ybWFsKTsKIH0KIAogc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFN5bnRoZXNpc0Zyb21TdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigp
LmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhlc2lzTm9uZSkKLSAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKIAogICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3Bh
Y2VTZXBhcmF0ZWQoKTsKICAgICBpZiAoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRo
ZXNpcygpICYgRm9udFN5bnRoZXNpc1N0eWxlKQotICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdHlsZSkpOworICAg
ICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0eWxlKSk7CiAgICAgaWYgKHN0eWxlLmZvbnREZXNjcmlw
dGlvbigpLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNXZWlnaHQpCi0gICAgICAgIGxp
c3QuZ2V0KCkuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVdlaWdodCkpOworICAgICAgICBsaXN0LmdldCgpLmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlaWdodCkpOwogICAgIHJl
dHVybiBSZWY8Q1NTVmFsdWU+KGxpc3QuZ2V0KCkpOwogfQogCkBAIC0xODM2LDE1ICsxODUxLDE1
IEBAIHN0YXRpYyBpbmxpbmUgUmVmUHRyPFJlbmRlclN0eWxlPiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShOb2RlKiBzdHlsZWROb2RlCiBzdGF0aWMgUmVmPENTU1ZhbHVlPiBzaGFwZVBy
b3BlcnR5VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTaGFwZVZhbHVlKiBz
aGFwZVZhbHVlKQogewogICAgIGlmICghc2hhcGVWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKIAogICAgIGlmIChzaGFwZVZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6
VHlwZTo6Qm94KQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc2hh
cGVWYWx1ZS0+Y3NzQm94KCkpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShzaGFwZVZhbHVlLT5jc3NCb3goKSk7CiAKICAgICBpZiAoc2hhcGVW
YWx1ZS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OlR5cGU6OkltYWdlKSB7CiAgICAgICAgIGlmIChz
aGFwZVZhbHVlLT5pbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuICpzaGFwZVZhbHVlLT5pbWFn
ZSgpLT5jc3NWYWx1ZSgpOwotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgIH0K
IAogICAgIEFTU0VSVChzaGFwZVZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hh
cGUpOwpAQCAtMTg1MiwxOSArMTg2NywyMCBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBzaGFwZVBy
b3BlcnR5VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTaGFwZVZhbAogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2Vw
YXJhdGVkKCk7CiAgICAgbGlzdC0+YXBwZW5kKHZhbHVlRm9yQmFzaWNTaGFwZShzdHlsZSwgKnNo
YXBlVmFsdWUtPnNoYXBlKCkpKTsKICAgICBpZiAoc2hhcGVWYWx1ZS0+Y3NzQm94KCkgIT0gQm94
TWlzc2luZykKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHNoYXBlVmFsdWUtPmNzc0JveCgpKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHNoYXBlVmFsdWUtPmNzc0JveCgpKSk7CiAgICAg
cmV0dXJuIGxpc3QucmVsZWFzZU5vbk51bGwoKTsKIH0KICNlbmRpZgogCiBzdGF0aWMgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gdmFsdWVGb3JJdGVtUG9zaXRpb25XaXRoT3ZlcmZsb3dBbGlnbm1lbnQo
SXRlbVBvc2l0aW9uIGl0ZW1Qb3NpdGlvbiwgT3ZlcmZsb3dBbGlnbm1lbnQgb3ZlcmZsb3dBbGln
bm1lbnQsIEl0ZW1Qb3NpdGlvblR5cGUgcG9zaXRpb25UeXBlKQogeworICAgIGF1dG8mIGNzc1Zh
bHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAg
IGlmIChwb3NpdGlvblR5cGUgPT0gTGVnYWN5UG9zaXRpb24pCiAgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTGVnYWN5KSk7
Ci0gICAgcmVzdWx0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaXRlbVBvc2l0
aW9uKSk7CisgICAgcmVzdWx0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGl0ZW1Q
b3NpdGlvbikpOwogICAgIGlmIChvdmVyZmxvd0FsaWdubWVudCAhPSBPdmVyZmxvd0FsaWdubWVu
dERlZmF1bHQpCi0gICAgICAgIHJlc3VsdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKG92ZXJmbG93QWxpZ25tZW50KSk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZShvdmVyZmxvd0FsaWdubWVudCkpOwogICAgIEFTU0VSVChyZXN1bHQt
Pmxlbmd0aCgpIDw9IDIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xOTI3LDYgKzE5NDMs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCisgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKTsKICAgICBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KHByb3BlcnR5SUQsIHN0eWxlLT5kaXJlY3Rpb24oKSwgc3R5bGUtPndy
aXRpbmdNb2RlKCkpOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CkBAIC0xOTM0LDE4ICsx
OTUxLDE4IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFsdWUobV9hbGxvd1Zpc2l0ZWRTdHlsZT8g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciku
cmdiKCkgOiBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkucmdiKCkpOworICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVDb2xvclZhbHVlKG1fYWxsb3dWaXNpdGVkU3R5bGU/IHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLnJn
YigpIDogc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLnJnYigpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRJbWFnZToKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tJbWFnZTogewogICAgICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXllcnMgPSBwcm9wZXJ0
eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlID8gc3R5bGUtPm1hc2tMYXllcnMoKSA6
IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVycykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAgICAgICAgICAgaWYgKCFsYXll
cnMtPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChsYXllcnMtPmltYWdlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBsYXllcnMtPmltYWdlKCktPmNzc1ZhbHVlKCk7CiAKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKQEAgLTE5NTMsNyArMTk3MCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsCiAgICAgICAgICAgICAgICAgaWYgKGN1cnJMYXllci0+aW1hZ2UoKSkKICAgICAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKCpjdXJyTGF5ZXItPmltYWdlKCktPmNzc1ZhbHVlKCkpOwog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
bGlzdDsKICAgICAgICAgfQpAQCAtMTk4Niw3ICsyMDAzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwKICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gc3R5bGUtPm1hc2tM
YXllcnMoKTsKIAogICAgICAgICAgICAgaWYgKCFsYXllcnMpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CiAKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZpbGxTb3VyY2VUeXBlVG9DU1NWYWx1ZShsYXllcnMtPm1hc2tT
b3VyY2VUeXBlKCkpOwpAQCAtMjAwMSwyMiArMjAxOCwyMiBAQCBSZWZQdHI8Q1NTVmFsdWU+IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZTogewogICAg
ICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXllcnMgPSBwcm9wZXJ0eUlEID09IENTU1Byb3Bl
cnR5V2Via2l0TWFza0NvbXBvc2l0ZSA/IHN0eWxlLT5tYXNrTGF5ZXJzKCkgOiBzdHlsZS0+YmFj
a2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgaWYgKCFsYXllcnMtPm5leHQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobGF5ZXJzLT5jb21w
b3NpdGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShsYXllcnMtPmNvbXBvc2l0ZSgpKTsKIAogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAg
ICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5ZXIgPSBsYXllcnM7IGN1cnJMYXllcjsg
Y3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGN1cnJMYXllci0+Y29tcG9zaXRlKCkpKTsK
KyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKGN1
cnJMYXllci0+Y29tcG9zaXRlKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OiB7CiAg
ICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGxheWVycyA9IHN0eWxlLT5iYWNrZ3JvdW5kTGF5
ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVycy0+bmV4dCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsYXllcnMtPmF0dGFjaG1lbnQoKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShsYXllcnMt
PmF0dGFjaG1lbnQoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Qg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBmb3Ig
KGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXll
ciA9IGN1cnJMYXllci0+bmV4dCgpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPmF0dGFjaG1lbnQoKSkpOworICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoY3VyckxheWVy
LT5hdHRhY2htZW50KCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgICAgIH0K
QEAgLTIwMzAsMTMgKzIwNDcsMTMgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAg
ICAgIGJvb2wgaXNDbGlwID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlw
IHx8IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA7CiAgICAgICAgICAgICBpZiAoIWxh
eWVycy0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgRUZpbGxCb3ggYm94ID0gaXNDbGlwID8g
bGF5ZXJzLT5jbGlwKCkgOiBsYXllcnMtPm9yaWdpbigpOwotICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShib3gpOworICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYm94KTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5
ZXIgPSBsYXllcnM7IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpIHsK
ICAgICAgICAgICAgICAgICBFRmlsbEJveCBib3ggPSBpc0NsaXAgPyBjdXJyTGF5ZXItPmNsaXAo
KSA6IGN1cnJMYXllci0+b3JpZ2luKCk7Ci0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYm94KSk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIHJldHVybiBsaXN0OwpAQCAtMjA1NiwxMSArMjA3MywxMSBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
WDogewogICAgICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXllcnMgPSBwcm9wZXJ0eUlEID09
IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCA/IHN0eWxlLT5tYXNrTGF5ZXJzKCkgOiBz
dHlsZS0+YmFja2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgaWYgKCFsYXllcnMtPm5leHQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobGF5
ZXJzLT54UG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZShsYXllcnMtPnhQb3NpdGlvbigpKTsKIAogICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsK
ICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5ZXIgPSBsYXllcnM7IGN1
cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGN1cnJMYXllci0+eFBvc2l0
aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0
ZVZhbHVlKGN1cnJMYXllci0+eFBvc2l0aW9uKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxp
c3Q7CiAgICAgICAgIH0KQEAgLTIwNjgsMTggKzIwODUsMTggQEAgUmVmUHRyPENTU1ZhbHVlPiBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblk6IHsKICAg
ICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVydHlJRCA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkgPyBzdHlsZS0+bWFza0xheWVycygpIDogc3R5bGUtPmJh
Y2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxheWVycy0+eVBv
c2l0aW9uKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFs
dWUobGF5ZXJzLT55UG9zaXRpb24oKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAg
ICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7
IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPnlQb3NpdGlvbigpKSk7
CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShj
dXJyTGF5ZXItPnlQb3NpdGlvbigpKSk7CiAKICAgICAgICAgICAgIHJldHVybiBsaXN0OwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKICAgICAgICAg
ICAgIGlmIChzdHlsZS0+Ym9yZGVyQ29sbGFwc2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29sbGFwc2UpOwot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVNlcGFyYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbGxhcHNlKTsKKyAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU2VwYXJhdGUpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzogewogICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLT5ob3Jpem9udGFsQm9yZGVyU3BhY2luZygpLCAqc3R5bGUpKTsKQEAgLTIwOTMsMjMgKzIx
MTAsMjMgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0
eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJJbWFnZVNv
dXJjZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2Uo
KS0+Y3NzVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93Vmlz
aXRlZFN0eWxlID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLnJnYigpKSA6IGN1cnJl
bnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlclRvcENvbG9yKCkp
OworICAgICAgICAgICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1ZVBvb2wu
Y3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Qm9yZGVyVG9wQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5n
ZXQoKSwgc3R5bGUtPmJvcmRlclRvcENvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHRDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxl
ID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcikucmdiKCkpIDogY3VycmVudENvbG9y
T3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRDb2xvcigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFsdWVQb29sLmNyZWF0
ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRl
clJpZ2h0Q29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQo
KSwgc3R5bGUtPmJvcmRlclJpZ2h0Q29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21Db2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxl
ID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xv
ck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlckJvdHRvbUNvbG9yKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1ZVBvb2wuY3Jl
YXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5n
ZXQoKSwgc3R5bGUtPmJvcmRlckJvdHRvbUNvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yOgotICAgICAgICAgICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5
bGUgPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xv
ck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFsdWVQb29sLmNyZWF0
ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvcikucmdiKCkpIDogY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgp
LCBzdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wU3R5bGU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoc3R5bGUtPmJvcmRlclRvcFN0eWxlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Ym9yZGVyVG9wU3R5bGUoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJSaWdodFN0eWxlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Ym9yZGVyUmlnaHRTdHls
ZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlOgotICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJCb3R0
b21TdHlsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUo
c3R5bGUtPmJvcmRlckJvdHRvbVN0eWxlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdFN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKICAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCAqc3R5bGUpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKQEAgLTIxMjEsODEgKzIxMzgsODEg
QEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRv
bToKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbk9mZnNldFZhbHVlKCpzdHlsZSwgQ1NTUHJv
cGVydHlCb3R0b20pOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ246Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveEFs
aWduKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHls
ZS0+Ym94QWxpZ24oKSk7CiAjaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRpb25CcmVhazoKICAgICAgICAg
ICAgIGlmIChzdHlsZS0+Ym94RGVjb3JhdGlvbkJyZWFrKCkgPT0gRFNMSUNFKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVTbGljZSk7Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVDbG9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbGljZSk7CisgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ2xvbmUpOwogI2VuZGlm
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveERpcmVjdGlvbigp
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmJv
eERpcmVjdGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveEZs
ZXgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94RmxleCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4
R3JvdXA6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPmJveEZsZXhHcm91cCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hGbGV4R3Jv
dXAoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm94TGluZXM6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoc3R5bGUtPmJveExpbmVzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94TGluZXMoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3hPcmRpbmFsR3JvdXA6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveE9yZGluYWxHcm91cCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5ib3hPcmRpbmFsR3JvdXAoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50OgotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hPcmll
bnQoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxl
LT5ib3hPcmllbnQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hQ
YWNrKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHls
ZS0+Ym94UGFjaygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JSZWZsZWN0aW9uKHN0eWxlLT5ib3hSZWZsZWN0
KCksICpzdHlsZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6CiAgICAgICAgICAgICByZXR1cm4gdmFs
dWVGb3JTaGFkb3coc3R5bGUtPmJveFNoYWRvdygpLCBwcm9wZXJ0eUlELCAqc3R5bGUpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q2FwdGlvblNpZGU6Ci0gICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmNhcHRpb25TaWRlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Y2FwdGlvblNpZGUoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjoKLSAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y2xlYXIoKSk7CisgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5jbGVhcigpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUNvbG9yVmFsdWUobV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikucmdiKCkgOiBzdHlsZS0+Y29sb3IoKS5yZ2IoKSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUNvbG9yVmFsdWUobV9hbGxv
d1Zpc2l0ZWRTdHlsZSA/IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvcikucmdiKCkgOiBzdHlsZS0+Y29sb3IoKS5yZ2IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wcmludENvbG9yQWRqdXN0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+cHJpbnRDb2xvckFkanVz
dCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkF4aXM6Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtbkF4aXMo
KSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5j
b2x1bW5BeGlzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uQ291bnQ6CiAgICAg
ICAgICAgICBpZiAoc3R5bGUtPmhhc0F1dG9Db2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRv
KTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+
Y29sdW1uQ291bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxl
LT5jb2x1bW5Db3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2x1bW5GaWxsOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5GaWxsKCkpOworICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uRmlsbCgpKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtbkdhcDoKICAgICAgICAgICAgIGlmIChzdHlsZS0+aGFz
Tm9ybWFsQ29sdW1uR2FwKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwp
OwogICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNvbHVt
bkdhcCgpLCAqc3R5bGUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29sdW1uUHJvZ3Jlc3Np
b246Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
PmNvbHVtblByb2dyZXNzaW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uUHJvZ3Jlc3Npb24oKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlDb2x1bW5SdWxlQ29sb3I6Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxvd1Zpc2l0
ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikucmdiKCkpIDogY3VycmVudENv
bG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1ZVBvb2wuY3Jl
YXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0
bGluZUNvbG9yKS5yZ2IoKSkgOiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCks
IHN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2x1
bW5SdWxlU3R5bGU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoc3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aDoKICAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSwgKnN0eWxlKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUNvbHVtblNwYW46Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHN0eWxlLT5jb2x1bW5TcGFuKCkgPyBDU1NW
YWx1ZUFsbCA6IENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzdHlsZS0+Y29sdW1uU3BhbigpID8gQ1NTVmFsdWVBbGwg
OiBDU1NWYWx1ZU5vbmUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJl
YWtBZnRlcjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+Y29sdW1uQnJlYWtBZnRlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtbkJyZWFrQWZ0ZXIoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uQnJlYWtCZWZvcmUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5C
cmVha0JlZm9yZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFr
SW5zaWRlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT5jb2x1bW5CcmVha0luc2lkZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtbkJyZWFrSW5zaWRlKCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Q29sdW1uV2lkdGg6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmhhc0F1dG9D
b2x1bW5XaWR0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgICAg
ICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNvbHVtbldpZHRoKCks
ICpzdHlsZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJTaXplOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50YWJTaXplKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wuY3JlYXRlVmFsdWUoc3R5bGUtPnRhYlNpemUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOwogI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbkJyZWFrQWZ0ZXIoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25CcmVha0FmdGVyKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmU6Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbkJy
ZWFrQmVmb3JlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShzdHlsZS0+cmVnaW9uQnJlYWtCZWZvcmUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRSZWdpb25CcmVha0luc2lkZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9uQnJlYWtJbnNpZGUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25CcmVha0luc2lkZSgp
KTsKICNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29yOiB7CiAgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0OwpAQCAtMjIwNiw3ICsyMjIzLDcgQEAgUmVmUHRy
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGlt
YWdlID0gY3Vyc29ycy0+YXQoaSkuaW1hZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZCgqaW1hZ2UtPmNzc1ZhbHVlKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXV0byB2YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jdXJzb3Io
KSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0
eWxlLT5jdXJzb3IoKSk7CiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
bGlzdDsKQEAgLTIyMTUsMTQgKzIyMzIsMTQgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAg
ICAgICAgfQogI2lmIEVOQUJMRShDVVJTT1JfVklTSUJJTElUWSkKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHk6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmN1cnNvclZpc2liaWxpdHkoKSk7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5jdXJzb3JWaXNpYmls
aXR5KCkpOwogI2VuZGlmCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmRpcmVjdGlv
bigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUt
PmRpcmVjdGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpc3BsYXk6Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmRpc3BsYXkoKSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5kaXNw
bGF5KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RW1wdHlDZWxsczoKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZW1wdHlDZWxscygpKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmVtcHR5
Q2VsbHMoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbGlnbkNvbnRlbnQ6IHsKICAgICAg
ICAgICAgIENvbnRlbnRQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlLT5hbGlnbkNvbnRlbnRQb3Np
dGlvbigpOwogICAgICAgICAgICAgQ29udGVudERpc3RyaWJ1dGlvblR5cGUgZGlzdHJpYnV0aW9u
ID0gc3R5bGUtPmFsaWduQ29udGVudERpc3RyaWJ1dGlvbigpOwpAQCAtMjIzOSwxNyArMjI1Niwx
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxl
eDoKICAgICAgICAgICAgIHJldHVybiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNob3J0aGFuZFBy
b3BlcnRpZXMoZmxleFNob3J0aGFuZCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsZXhC
YXNpczoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+ZmxleEJhc2lzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZShzdHlsZS0+ZmxleEJhc2lzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmxleERp
cmVjdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+ZmxleERpcmVjdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wu
Y3JlYXRlVmFsdWUoc3R5bGUtPmZsZXhEaXJlY3Rpb24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlGbGV4RmxvdzoKICAgICAgICAgICAgIHJldHVybiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0Zv
clNob3J0aGFuZFByb3BlcnRpZXMoZmxleEZsb3dTaG9ydGhhbmQoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbGV4R3JvdzoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+ZmxleEdyb3coKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4R3JvdygpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZsZXhTaHJpbms6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoc3R5bGUtPmZsZXhTaHJpbmsoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4U2hyaW5rKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5RmxleFdyYXA6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoc3R5bGUtPmZsZXhXcmFwKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleFdyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlKdXN0aWZ5Q29udGVudDogewogICAgICAgICAgICAgQ29udGVudFBvc2l0aW9uIHBvc2l0
aW9uID0gc3R5bGUtPmp1c3RpZnlDb250ZW50UG9zaXRpb24oKTsKICAgICAgICAgICAgIENvbnRl
bnREaXN0cmlidXRpb25UeXBlIGRpc3RyaWJ1dGlvbiA9IHN0eWxlLT5qdXN0aWZ5Q29udGVudERp
c3RyaWJ1dGlvbigpOwpAQCAtMjI2NCwxMSArMjI4MSwxMSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELAogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9ySXRlbVBvc2l0aW9uV2l0aE92ZXJmbG93
QWxpZ25tZW50KGp1c3RpZnlTZWxmLCBvdmVyZmxvdywgTm9uTGVnYWN5UG9zaXRpb24pOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPcmRlcjoKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+b3JkZXIoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVh
dGVWYWx1ZShzdHlsZS0+b3JkZXIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmxvYXQ6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmRp
c3BsYXkoKSAhPSBOT05FICYmIHN0eWxlLT5oYXNPdXRPZkZsb3dQb3NpdGlvbigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+ZmxvYXRpbmcoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmZsb2F0aW5nKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udDogewogICAgICAgICAgICAgUmVmUHRyPENTU0ZvbnRWYWx1ZT4g
Y29tcHV0ZWRGb250ID0gQ1NTRm9udFZhbHVlOjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNvbXB1
dGVkRm9udC0+c3R5bGUgPSBmb250U3R5bGVGcm9tU3R5bGUoc3R5bGUuZ2V0KCkpOwpAQCAtMjMw
MCw3ICsyMzE3LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpw
cm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgICAgIGNvbnN0IEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVTZXR0aW5ncyA9IHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5mZWF0dXJlU2V0dGluZ3MoKTsKICAgICAgICAgICAgIGlmICghZmVhdHVyZVNldHRpbmdz
IHx8ICFmZWF0dXJlU2V0dGluZ3MtPnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZlYXR1cmVTZXR0aW5ncy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBjb25zdCBGb250RmVhdHVyZSYgZmVhdHVyZSA9IGZlYXR1cmVTZXR0aW5ncy0+YXQo
aSk7CkBAIC0yMzEzLDEyICsyMzMwLDEyIEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsCiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVT
cGFjZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgQVNTRVJUKHN0eWxlLT5pc0dyaWRBdXRvRmxv
d0RpcmVjdGlvblJvdygpIHx8IHN0eWxlLT5pc0dyaWRBdXRvRmxvd0RpcmVjdGlvbkNvbHVtbigp
KTsKICAgICAgICAgICAgIGlmIChzdHlsZS0+aXNHcmlkQXV0b0Zsb3dEaXJlY3Rpb25Sb3coKSkK
LSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlUm93KSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSb3cpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29sdW1uKSk7CisgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb2x1
bW4pKTsKIAogICAgICAgICAgICAgaWYgKHN0eWxlLT5pc0dyaWRBdXRvRmxvd0FsZ29yaXRobURl
bnNlKCkpCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURlbnNlKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEZW5zZSkp
OwogCiAgICAgICAgICAgICByZXR1cm4gbGlzdDsKICAgICAgICAgfQpAQCAtMjM2MCw3ICsyMzc3
LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEdyaWRUZW1wbGF0ZUFyZWFzOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+bmFtZWRHcmlk
QXJlYVJvd0NvdW50KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXN0eWxlLT5uYW1lZEdy
aWRBcmVhQ29sdW1uQ291bnQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBDU1NHcmlkVGVtcGxhdGVBcmVh
c1ZhbHVlOjpjcmVhdGUoc3R5bGUtPm5hbWVkR3JpZEFyZWEoKSwgc3R5bGUtPm5hbWVkR3JpZEFy
ZWFSb3dDb3VudCgpLCBzdHlsZS0+bmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KCkpOwpAQCAtMjM3
MCwxNiArMjM4NywxNiBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6
OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAgICAgICAgICAg
IC8vIEFjY29yZGluZyB0byBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyL3Zpc3VkZXQuaHRtbCN0
aGUtaGVpZ2h0LXByb3BlcnR5LAogICAgICAgICAgICAgICAgIC8vIHRoZSAiaGVpZ2h0IiBwcm9w
ZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50cy4KICAg
ICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgJiYgcmVuZGVyZXItPmlz
SW5saW5lKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzaXppbmdCb3goKnJl
bmRlcmVyKS5oZWlnaHQoKSwgKnN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5oZWlnaHQoKSwgKnN0
eWxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmh5cGhlbnMoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5oeXBoZW5z
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyOgog
ICAgICAgICAgICAgaWYgKHN0eWxlLT5oeXBoZW5hdGlvblN0cmluZygpLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+aHlwaGVuYXRpb25TdHJpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHN0eWxlLT5oeXBoZW5hdGlvblN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVM
aW1pdEFmdGVyOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIo
KSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJ
ZGVudGlmaWVyKENTU1ZhbHVlQXV0byk7CkBAIC0yMzk0LDQyICsyNDExLDQyIEBAIFJlZlB0cjxD
U1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsCiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHlsZS0+aHlwaGVuYXRpb25MaW1pdExpbmVzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKICAg
ICAgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9yZGVyKQotICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVCb3JkZXIpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJvcmRlcik7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUxpbmVzKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5SW1hZ2VPcmllbnRhdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+aW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmltYWdlT3JpZW50YXRp
b24oKSk7CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgog
ICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmltYWdl
UmVuZGVyaW5nKCkpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjoKLSAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+aW1hZ2VSZXNvbHV0aW9uKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRFBQWCk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5pbWFnZVJlc29sdXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19EUFBYKTsKICNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDoKICAgICAgICAg
ICAgIHJldHVybiBwb3NpdGlvbk9mZnNldFZhbHVlKCpzdHlsZSwgQ1NTUHJvcGVydHlMZWZ0KTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmc6CiAgICAgICAgICAgICBpZiAo
IXN0eWxlLT5sZXR0ZXJTcGFjaW5nKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpOwogICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUt
PmxldHRlclNwYWNpbmcoKSwgKnN0eWxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExpbmVDbGFtcDoKICAgICAgICAgICAgIGlmIChzdHlsZS0+bGluZUNsYW1wKCkuaXNOb25lKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5saW5lQ2xhbXAoKS52YWx1ZSgpLCBzdHlsZS0+bGluZUNsYW1wKCku
aXNQZXJjZW50YWdlKCkgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgOiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmxpbmVDbGFtcCgpLnZhbHVl
KCksIHN0eWxlLT5saW5lQ2xhbXAoKS5pc1BlcmNlbnRhZ2UoKSA/IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CiAgICAgICAgICAgICByZXR1cm4gbGluZUhl
aWdodEZyb21TdHlsZSgqc3R5bGUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxl
SW1hZ2U6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5jc3NWYWx1ZSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHls
ZVBvc2l0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT5saXN0U3R5bGVQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmxpc3RTdHlsZVBvc2l0aW9uKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPmxpc3RTdHlsZVR5cGUoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2NhbGU6CiAgICAgICAgICAgICBpZiAo
c3R5bGUtPmxvY2FsZSgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+bG9jYWxlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+bG9jYWxlKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRv
cDoKICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZh
bHVlPCZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1hcmdp
blRvcD4oKnN0eWxlLCByZW5kZXJlcik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5S
aWdodDogewpAQCAtMjQ1MSwyNyArMjQ2OCwyNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKICAgICAgICAgICAgIHJldHVybiB6
b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlPCZSZW5kZXJTdHlsZTo6bWFyZ2lu
TGVmdCwgJlJlbmRlckJveE1vZGVsT2JqZWN0OjptYXJnaW5MZWZ0Pigqc3R5bGUsIHJlbmRlcmVy
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVEaXJlY3Rpb246Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm1hcnF1ZWVE
aXJlY3Rpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KHN0eWxlLT5tYXJxdWVlRGlyZWN0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFycXVlZUluY3JlbWVudDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjoKICAgICAgICAg
ICAgIGlmIChzdHlsZS0+bWFycXVlZUxvb3BDb3VudCgpIDwgMCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5maW5p
dGUpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxl
LT5tYXJxdWVlTG9vcENvdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUluZmluaXRlKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUoc3R5bGUtPm1hcnF1ZWVMb29wQ291bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXJxdWVl
QmVoYXZpb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KHN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRVc2VyTW9kaWZ5OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHN0eWxlLT51c2VyTW9kaWZ5KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVWYWx1ZShzdHlsZS0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eU1heEhlaWdodDogewogICAgICAgICAgICAgY29uc3QgTGVuZ3RoJiBtYXhIZWlnaHQgPSBz
dHlsZS0+bWF4SGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAobWF4SGVpZ2h0LmlzVW5kZWZpbmVk
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICByZXR1
cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXhIZWlnaHQsICpzdHlsZSk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOiB7CiAgICAgICAgICAg
ICBjb25zdCBMZW5ndGgmIG1heFdpZHRoID0gc3R5bGUtPm1heFdpZHRoKCk7CiAgICAgICAgICAg
ICBpZiAobWF4V2lkdGguaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb25lKTsKICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVu
Z3RoKG1heFdpZHRoLCAqc3R5bGUpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlNaW5IZWlnaHQ6CkBAIC0yNDg1LDMxICsyNTAyLDMxIEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsCiAgICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoMCwgKnN0
eWxlKTsKICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3Ro
KHN0eWxlLT5taW5XaWR0aCgpLCAqc3R5bGUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T2Jq
ZWN0Rml0OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT5vYmplY3RGaXQoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0
ZVZhbHVlKHN0eWxlLT5vYmplY3RGaXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFj
aXR5OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxl
LT5vcGFjaXR5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPm9wYWNpdHkoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3JwaGFu
czoKICAgICAgICAgICAgIGlmIChzdHlsZS0+aGFzQXV0b09ycGhhbnMoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPm9ycGhhbnMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxl
LT5vcnBoYW5zKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93Vmlz
aXRlZFN0eWxlID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKS5yZ2IoKSkgOiBjdXJyZW50
Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5vdXRsaW5lQ29sb3IoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbC5jcmVh
dGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlPdXRs
aW5lQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwg
c3R5bGUtPm91dGxpbmVDb2xvcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVP
ZmZzZXQ6CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+
b3V0bGluZU9mZnNldCgpLCAqc3R5bGUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGlu
ZVN0eWxlOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoc3R5bGUtPm91dGxpbmVTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+b3V0bGluZVN0eWxlKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgogICAgICAgICAgICAgcmV0
dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPm91dGxpbmVXaWR0aCgpLCAqc3R5bGUp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3c6Ci0gICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3RkOjptYXgoc3R5bGUtPm92ZXJmbG93WCgpLCBz
dHlsZS0+b3ZlcmZsb3dZKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3Jl
YXRlVmFsdWUoc3RkOjptYXgoc3R5bGUtPm92ZXJmbG93WCgpLCBzdHlsZS0+b3ZlcmZsb3dZKCkp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93V3JhcDoKLSAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dXcmFwKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZs
b3dXcmFwKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dYOgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxvd1goKSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVy
Zmxvd1goKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm92ZXJmbG93WSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPm92ZXJm
bG93WSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6CiAgICAgICAgICAg
ICByZXR1cm4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZTwmUmVuZGVyU3R5
bGU6OnBhZGRpbmdUb3AsICZSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZWRDU1NQYWRkaW5n
VG9wPigqc3R5bGUsIHJlbmRlcmVyKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdS
aWdodDoKQEAgLTI1MTksMzMgKzI1MzYsMzMgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgogICAgICAgICAgICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWU8JlJlbmRlclN0eWxlOjpwYWRkaW5n
TGVmdCwgJlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlZENTU1BhZGRpbmdMZWZ0Pigqc3R5
bGUsIHJlbmRlcmVyKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWdl
QnJlYWtBZnRlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFs
dWUoc3R5bGUtPnBhZ2VCcmVha0FmdGVyKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFn
ZUJyZWFrQmVmb3JlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHN0eWxlLT5wYWdlQnJlYWtCZWZvcmUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWdlQnJlYWtCZWZvcmUoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGU6IHsKICAgICAgICAgICAgIEVQYWdlQnJlYWsg
cGFnZUJyZWFrID0gc3R5bGUtPnBhZ2VCcmVha0luc2lkZSgpOwogICAgICAgICAgICAgQVNTRVJU
KHBhZ2VCcmVhayAhPSBQQkFMV0FZUyk7CiAgICAgICAgICAgICBpZiAocGFnZUJyZWFrID09IFBC
QUxXQVlTKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWdlQnJlYWtJbnNpZGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWdl
QnJlYWtJbnNpZGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0
aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxl
LT5wb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFs
dWUoc3R5bGUtPnBvc2l0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6CiAg
ICAgICAgICAgICByZXR1cm4gcG9zaXRpb25PZmZzZXRWYWx1ZSgqc3R5bGUsIENTU1Byb3BlcnR5
UmlnaHQpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uOgotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ydWJ5UG9z
aXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0
eWxlLT5ydWJ5UG9zaXRpb24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91
dDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+
dGFibGVMYXlvdXQoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZh
bHVlKHN0eWxlLT50YWJsZUxheW91dCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRB
bGlnbjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+dGV4dEFsaWduKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZShzdHlsZS0+dGV4dEFsaWduKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb246CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dERlY29yYXRpb25GbGFnc1Rv
Q1NTVmFsdWUoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOwogI2lmIEVOQUJMRShDU1MzX1RFWFQp
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0OgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0QWxpZ25MYXN0
KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+
dGV4dEFsaWduTGFzdCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRKdXN0
aWZ5OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxl
LT50ZXh0SnVzdGlmeSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUoc3R5bGUtPnRleHRKdXN0aWZ5KCkpOwogI2VuZGlmIC8vIENTUzNfVEVYVAogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb246CiAgICAgICAgICAgICByZXR1
cm4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaG9ydGhhbmRQcm9wZXJ0aWVzKHdlYmtpdFRleHRE
ZWNvcmF0aW9uU2hvcnRoYW5kKCkpOwpAQCAtMjU1OCw3ICsyNTc1LDcgQEAgUmVmUHRyPENTU1Zh
bHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
U2tpcDoKICAgICAgICAgICAgIHJldHVybiByZW5kZXJUZXh0RGVjb3JhdGlvblNraXBGbGFnc1Rv
Q1NTVmFsdWUoc3R5bGUtPnRleHREZWNvcmF0aW9uU2tpcCgpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRVbmRlcmxpbmVQb3NpdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dFVuZGVybGluZVBvc2l0aW9uKCkp
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4
dFVuZGVybGluZVBvc2l0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3Q6CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dERlY29y
YXRpb25GbGFnc1RvQ1NTVmFsdWUoc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKQEAgLTI1NzAsOSAr
MjU4Nyw5IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RW1waGFzaXNTdHlsZToKICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUtPnRl
eHRFbXBoYXNpc01hcmsoKSkgewogICAgICAgICAgICAgY2FzZSBUZXh0RW1waGFzaXNNYXJrTm9u
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIGNhc2Ug
VGV4dEVtcGhhc2lzTWFya0N1c3RvbToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgICAgICAgICAgY2FzZSBUZXh0RW1waGFzaXNN
YXJrQXV0bzoKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNpZiBBU1NF
UlRfRElTQUJMRUQKQEAgLTI1ODQsOCArMjYwMSw4IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0
ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
CiAgICAgICAgICAgICBjYXNlIFRleHRFbXBoYXNpc01hcmtUcmlhbmdsZToKICAgICAgICAgICAg
IGNhc2UgVGV4dEVtcGhhc2lzTWFya1Nlc2FtZTogewogICAgICAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
Ci0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT50ZXh0RW1waGFzaXNGaWxsKCkpKTsKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRFbXBoYXNpc01hcmsoKSkp
OworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUo
c3R5bGUtPnRleHRFbXBoYXNpc0ZpbGwoKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRFbXBoYXNpc01hcmsoKSkpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBsaXN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtMjYwMCw5ICsyNjE3LDkgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVT
cGFjZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh0ZXh0SW5kZW50
LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+dGV4dEluZGVu
dExpbmUoKSA9PSBUZXh0SW5kZW50RWFjaExpbmUpCi0gICAgICAgICAgICAgICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJr
aXRFYWNoTGluZSkpOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQ
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlLT50ZXh0SW5kZW50VHlwZSgpID09IFRleHRJbmRlbnRIYW5n
aW5nKQotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2Via2l0SGFuZ2luZykpOworICAgICAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVdlYmtpdEhhbmdpbmcpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDsKICAg
ICAgICAgICAgIH0KICNlbmRpZgpAQCAtMjYxMSwxOSArMjYyOCwxOSBAQCBSZWZQdHI8Q1NTVmFs
dWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZUZvclNoYWRvdyhzdHlsZS0+dGV4dFNoYWRvdygpLCBwcm9wZXJ0eUlE
LCAqc3R5bGUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKLSAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS50ZXh0UmVuZGVyaW5n
TW9kZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKICAgICAgICAg
ICAgIGlmIChzdHlsZS0+dGV4dE92ZXJmbG93KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUVsbGlwc2lzKTsKLSAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVDbGlwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUVsbGlwc2lzKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ2xpcCk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2VjdXJpdHk6Ci0gICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRTZWN1cml0eSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRTZWN1cml0eSgp
KTsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OgogICAgICAgICAgICAgaWYgKHN0eWxlLT50ZXh0U2l6
ZUFkanVzdCgpLmlzQXV0bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwog
ICAgICAgICAgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzTm9uZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkucGVyY2VudGFnZSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogI2VuZGlmCiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6CkBAIC0yNjMxLDUwICsyNjQ4LDUwIEBA
IFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0U3Ryb2tlV2lkdGg6CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShzdHlsZS0+dGV4dFN0cm9rZVdpZHRoKCksICpzdHlsZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0VHJhbnNmb3JtOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHN0eWxlLT50ZXh0VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dFRyYW5zZm9ybSgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRvcDoKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbk9mZnNldFZh
bHVlKCpzdHlsZSwgQ1NTUHJvcGVydHlUb3ApOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VW5p
Y29kZUJpZGk6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
c3R5bGUtPnVuaWNvZGVCaWRpKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZShzdHlsZS0+dW5pY29kZUJpZGkoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlWZXJ0aWNhbEFsaWduOgogICAgICAgICAgICAgc3dpdGNoIChzdHlsZS0+dmVydGljYWxBbGln
bigpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBCQVNFTElORToKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJh
c2VsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCYXNlbGluZSk7CiAgICAgICAgICAgICAgICAgY2FzZSBN
SURETEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVNaWRkbGUpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU1pZGRsZSk7CiAg
ICAgICAgICAgICAgICAgY2FzZSBTVUI6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdWIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVN1Yik7CiAgICAgICAgICAgICAgICAgY2FzZSBTVVBFUjoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN1
cGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVTdXBlcik7CiAgICAgICAgICAgICAgICAgY2FzZSBURVhUX1RP
UDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVRleHRUb3ApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRleHRUb3ApOwogICAg
ICAgICAgICAgICAgIGNhc2UgVEVYVF9CT1RUT006Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUZXh0Qm90dG9t
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVUZXh0Qm90dG9tKTsKICAgICAgICAgICAgICAgICBjYXNlIFRPUDoK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZVRvcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKICAgICAgICAgICAgICAg
ICBjYXNlIEJPVFRPTToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJvdHRvbSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQm90
dG9tKTsKICAgICAgICAgICAgICAgICBjYXNlIEJBU0VMSU5FX01JRERMRToKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJraXRCYXNlbGluZU1p
ZGRsZSk7CiAgICAgICAgICAgICAgICAgY2FzZSBMRU5HVEg6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+dmVydGljYWxBbGlnbkxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZShzdHlsZS0+dmVydGljYWxBbGlnbkxlbmd0aCgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT52aXNpYmlsaXR5KCkpOworICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+dmlzaWJpbGl0eSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndoaXRlU3BhY2UoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT53aGl0ZVNwYWNl
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2lkb3dzOgogICAgICAgICAgICAgaWYgKHN0
eWxlLT5oYXNBdXRvV2lkb3dzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53aWRvd3MoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT53aWRvd3MoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CiAgICAg
ICAgICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5pc1JlbmRlclNWR01vZGVsT2JqZWN0
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcv
VFIvQ1NTMi92aXN1ZGV0Lmh0bWwjdGhlLXdpZHRoLXByb3BlcnR5LAogICAgICAgICAgICAgICAg
IC8vIHRoZSAid2lkdGgiIHByb3BlcnR5IGRvZXMgbm90IGFwcGx5IGZvciBub24tcmVwbGFjZWQg
aW5saW5lIGVsZW1lbnRzLgogICAgICAgICAgICAgICAgIGlmICghcmVuZGVyZXItPmlzUmVwbGFj
ZWQoKSAmJiByZW5kZXJlci0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUF1dG8pOwogICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKHNpemluZ0JveCgqcmVuZGVyZXIpLndpZHRoKCksICpzdHlsZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChz
dHlsZS0+d2lkdGgoKSwgKnN0eWxlKTsKQEAgLTI2ODIsNTUgKzI2OTksNTUgQEAgUmVmUHRyPENT
U1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwKICAgICAgICAgICAgIHJldHVybiBnZXRXaWxsQ2hhbmdlUHJvcGVydHlW
YWx1ZShzdHlsZS0+d2lsbENoYW5nZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53b3JkQnJlYWsoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT53b3JkQnJlYWsoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoKICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCksICpzdHlsZSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dXcmFwKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dXcmFw
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrOgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5saW5lQnJlYWsoKSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5saW5l
QnJlYWsoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZToKLSAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+bmJzcE1vZGUo
KSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5u
YnNwTW9kZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+cmVzaXplKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+cmVzaXplKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmc6Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpLmtlcm5pbmcoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZh
bHVlKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXJuaW5nKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFNtb290aGlu
ZygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRGb250VmFyaWFudExpZ2F0dXJlczogewogICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5jb21tb25MaWdhdHVyZXNTdGF0ZSgpOwogICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKCk7CiAg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5oaXN0b3JpY2FsTGlnYXR1cmVz
U3RhdGUoKTsKICAgICAgICAgICAgIGlmIChjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVz
Y3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlICYmIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNT
dGF0ZSA9PSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlCiAgICAgICAgICAg
ICAgICAgJiYgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwp
OwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZUxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAoY29tbW9uTGln
YXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKLSAg
ICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpEaXNh
YmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0NvbW1vbkxpZ2F0dXJlcyA6IENTU1ZhbHVl
Q29tbW9uTGlnYXR1cmVzKSk7CisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBG
b250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vQ29tbW9u
TGlnYXR1cmVzIDogQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKICAgICAgICAgICAgIGlmIChk
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdh
dHVyZXNTdGF0ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09
IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9EaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzIDogQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7Cisg
ICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9u
OjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0Rpc2NyZXRpb25hcnlMaWdhdHVy
ZXMgOiBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXMpKTsKICAgICAgICAgICAgIGlmICho
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID09IEZvbnRE
ZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9IaXN0b3JpY2Fs
TGlnYXR1cmVzIDogQ1NTVmFsdWVIaXN0b3JpY2FsTGlnYXR1cmVzKSk7CisgICAgICAgICAgICAg
ICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSho
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0
dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMgOiBDU1NWYWx1ZUhpc3Rv
cmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUxpc3Q7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDoKICAgICAgICAgICAgIGlmIChzdHls
ZS0+aGFzQXV0b1pJbmRleCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ekluZGV4KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+ekluZGV4KCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnpvb20oKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+em9vbSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6CiAgICAgICAgICAgICBp
ZiAoc3R5bGUtPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQotICAgICAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250ZW50
Qm94KTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVCb3JkZXJCb3gpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29udGVudEJveCk7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJv
cmRlckJveCk7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9uOgogICAgICAgICB7CiAgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiByZWdpb25zID0gc3R5bGUtPmRhc2hi
b2FyZFJlZ2lvbnMoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gcmVnaW9ucy5zaXpl
KCk7CiAgICAgICAgICAgICBpZiAoY291bnQgPT0gMSAmJiByZWdpb25zWzBdLnR5cGUgPT0gU3R5
bGVEYXNoYm9hcmRSZWdpb246Ok5vbmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9u
ZSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IGZpcnN0UmVnaW9uOwog
ICAgICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBwcmV2aW91c1JlZ2lvbiA9IG51bGxwdHI7CkBA
IC0yNzUzLDcgKzI3NzAsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAgICAgICAg
ICAgICAgICBmaXJzdFJlZ2lvbiA9IHJlZ2lvbi5jb3B5UmVmKCk7CiAgICAgICAgICAgICAgICAg
cHJldmlvdXNSZWdpb24gPSByZWdpb24ucHRyKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoV1RGOjptb3ZlKGZpcnN0UmVnaW9u
KSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKFdURjo6bW92
ZShmaXJzdFJlZ2lvbikpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbkRlbGF5OgpAQCAtMjc2NywyMSArMjc4NCwyMSBAQCBSZWZQdHI8Q1NTVmFs
dWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELAogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5hbmltYXRpb24oaSku
ZGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb246OkFuaW1h
dGlvbkRpcmVjdGlvbk5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbHRlcm5hdGUpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWx0ZXJuYXRlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvblJldmVyc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUmV2ZXJzZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXZlcnNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZVJldmVyc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWx0ZXJu
YXRlUmV2ZXJzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbHRlcm5hdGVSZXZlcnNlKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCkpOwogICAgICAgICAgICAgcmV0dXJuIGxp
c3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbkR1cmF0aW9u
OgpAQCAtMjc5NSwyMSArMjgxMiwyMSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoICh0LT5hbmltYXRpb24oaSkuZmlsbE1vZGUoKSkgewogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlTm9uZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBl
bmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFu
aW1hdGlvbkZpbGxNb2RlRm9yd2FyZHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRm9yd2Fy
ZHMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wu
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRm9yd2FyZHMpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbkZpbGxN
b2RlQmFja3dhcmRzOgotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJhY2t3YXJkcykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVCYWNrd2FyZHMpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlQm90aDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCb3RoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUJvdGgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKICAgICAgICAgICAgIHJldHVy
biBsaXN0OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbmltYXRpb25JdGVy
YXRpb25Db3VudDoKQEAgLTI4MjAsMTIgKzI4MzcsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21w
dXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHQtPnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBpdGVyYXRpb25Db3VudCA9IHQtPmFuaW1h
dGlvbihpKS5pdGVyYXRpb25Db3VudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0
aW9uQ291bnQgPT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUluZmluaXRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUluZmlu
aXRlKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpdGVyYXRpb25Db3VudCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoaXRlcmF0aW9uQ291bnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKEFuaW1hdGlvbjo6aW5pdGlhbEl0ZXJhdGlvbkNvdW50KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxJdGVyYXRpb25Db3VudCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgcmV0dXJuIGxp
c3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvbk5hbWU6CkBA
IC0yODM0LDkgKzI4NTEsOSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAgICAgICAg
Y29uc3QgQW5pbWF0aW9uTGlzdCogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CiAgICAgICAgICAg
ICBpZiAodCkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZSh0LT5hbmltYXRpb24oaSkubmFtZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORykpOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKHQtPmFuaW1hdGlvbihpKS5uYW1lKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfU1RSSU5HKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9u
ZSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblBsYXlTdGF0ZToKQEAg
LTI4NDcsMTIgKzI4NjQsMTIgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFj
dG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHQtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGludCBwcm9wID0gdC0+YW5pbWF0aW9uKGkpLnBsYXlTdGF0ZSgpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAocHJvcCA9PSBBbmltUGxheVN0YXRlUGxheWluZykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVSdW5uaW5nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJ1bm5p
bmcpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVBhdXNlZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQYXVzZWQpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUnVubmluZykpOwor
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlUnVubmluZykpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOgpA
QCAtMjg2MywxNyArMjg4MCwxNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRy
YWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAgICAg
ICAgcmV0dXJuIGdldEFuaW1hdGlvblRyaWdnZXJWYWx1ZShzdHlsZS0+YW5pbWF0aW9ucygpLCAq
c3R5bGUpOwogI2VuZGlmCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBlYXJhbmNl
OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5h
cHBlYXJhbmNlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShzdHlsZS0+YXBwZWFyYW5jZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFz
cGVjdFJhdGlvOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5hc3BlY3RSYXRpb1R5cGUoKSA9PSBB
c3BlY3RSYXRpb0F1dG8pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiAgICAg
ICAgICAgICBpZiAoc3R5bGUtPmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvRnJvbURp
bWVuc2lvbnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUZyb21EaW1lbnNpb25zKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUZyb21EaW1l
bnNpb25zKTsKICAgICAgICAgICAgIGlmIChzdHlsZS0+YXNwZWN0UmF0aW9UeXBlKCkgPT0gQXNw
ZWN0UmF0aW9Gcm9tSW50cmluc2ljKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGcm9tSW50cmluc2ljKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUZyb21JbnRyaW5zaWMpOwogICAgICAgICAgICAgcmV0dXJuIENTU0FzcGVjdFJhdGlvVmFs
dWU6OmNyZWF0ZShzdHlsZS0+YXNwZWN0UmF0aW9OdW1lcmF0b3IoKSwgc3R5bGUtPmFzcGVjdFJh
dGlvRGVub21pbmF0b3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZmFj
ZVZpc2liaWxpdHk6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKChzdHlsZS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNp
YmlsaXR5SGlkZGVuKSA/IENTU1ZhbHVlSGlkZGVuIDogQ1NTVmFsdWVWaXNpYmxlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKChzdHlsZS0+
YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKSA/IENTU1Zh
bHVlSGlkZGVuIDogQ1NTVmFsdWVWaXNpYmxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckltYWdlOgogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1h
Z2Uoc3R5bGUtPmJvcmRlckltYWdlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
SW1hZ2VPdXRzZXQ6CkBAIC0yODk3LDMwICsyOTE0LDMwIEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6CiAg
ICAgICAgICAgICBpZiAoc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmNzc1ZhbHVlKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9u
dFNpemVEZWx0YToKICAgICAgICAgICAgIC8vIE5vdCBhIHJlYWwgc3R5bGUgcHJvcGVydHkgLS0g
dXNlZCBieSB0aGUgZWRpdGluZyBlbmdpbmUgLS0gc28gaGFzIG5vIGNvbXB1dGVkIHZhbHVlLgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRJbml0aWFs
TGV0dGVyOiB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRyb3AgPSAh
c3R5bGUtPmluaXRpYWxMZXR0ZXJEcm9wKCkgPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpIDogY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPmluaXRpYWxMZXR0ZXJEcm9wKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsK
LSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZSA9ICFzdHlsZS0+aW5p
dGlhbExldHRlckhlaWdodCgpID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9ybWFsKSA6IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5pbml0
aWFsTGV0dGVySGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUoZHJv
cC5yZWxlYXNlKCksIHNpemUucmVsZWFzZSgpKSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGRyb3AgPSAhc3R5bGUtPmluaXRpYWxMZXR0ZXJEcm9wKCkgPyBjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSA6IGNzc1ZhbHVlUG9v
bC5jcmVhdGVWYWx1ZShzdHlsZS0+aW5pdGlhbExldHRlckRyb3AoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBz
aXplID0gIXN0eWxlLT5pbml0aWFsTGV0dGVySGVpZ2h0KCkgPyBjc3NWYWx1ZVBvb2wuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSA6IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShzdHlsZS0+aW5pdGlhbExldHRlckhlaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKFBhaXI6
OmNyZWF0ZShkcm9wLnJlbGVhc2UoKSwgc2l6ZS5yZWxlYXNlKCkpKTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXJnaW5BZnRlckNvbGxh
cHNlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHls
ZS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcmdpblRvcENvbGxhcHNlOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2lu
QmVmb3JlQ29sbGFwc2U6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoc3R5bGUtPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSk7
CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOgogICAgICAgICAgICAgaWYgKCFz
dHlsZS0+dXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpKQotICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVUb3VjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG91Y2gpOwogI2VuZGlmCiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZToKICAgICAgICAgICAgIGlmICghc3R5bGUt
Pmhhc1BlcnNwZWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAg
ICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+cGVyc3BlY3Rp
dmUoKSwgKnN0eWxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2lu
OiB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0
OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwpAQCAtMjk0MCwxOSArMjk1NywxOSBAQCBSZWZQdHI8
Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELAogICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzdHlsZS0+cnRsT3JkZXJp
bmcoKSA/IENTU1ZhbHVlVmlzdWFsIDogQ1NTVmFsdWVMb2dpY2FsKTsKKyAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHN0eWxlLT5ydGxPcmRlcmlu
ZygpID8gQ1NTVmFsdWVWaXN1YWwgOiBDU1NWYWx1ZUxvZ2ljYWwpOwogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xv
cjoKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0
KCksIHN0eWxlLT50YXBIaWdobGlnaHRDb2xvcigpKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKElP
UykKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRvdWNoQ2FsbG91dDoKLSAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoc3R5bGUtPnRv
dWNoQ2FsbG91dEVuYWJsZWQoKSA/IENTU1ZhbHVlRGVmYXVsdCA6IENTU1ZhbHVlTm9uZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzdHls
ZS0+dG91Y2hDYWxsb3V0RW5hYmxlZCgpID8gQ1NTVmFsdWVEZWZhdWx0IDogQ1NTVmFsdWVOb25l
KTsKICNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnVzZXJEcmFn
KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+
dXNlckRyYWcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0Ogot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT51c2Vy
U2VsZWN0KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShz
dHlsZS0+dXNlclNlbGVjdCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bUxlZnRSYWRpdXM6CiAgICAgICAgICAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFs
dWUoc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgKnN0eWxlKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOgpAQCAtMjk2MywxNiArMjk4MCwx
NiBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRl
clJhZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLCAqc3R5bGUp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogewogICAgICAgICAgICAgaWYgKCFzdHls
ZS0+aGFzQ2xpcCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgICAg
ICAgICAgYXV0byByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZWN0LT5zZXRU
b3AoYXV0b09yWm9vbUFkanVzdGVkVmFsdWUoc3R5bGUtPmNsaXAoKS50b3AoKSwgKnN0eWxlKSk7
CiAgICAgICAgICAgICByZWN0LT5zZXRSaWdodChhdXRvT3Jab29tQWRqdXN0ZWRWYWx1ZShzdHls
ZS0+Y2xpcCgpLnJpZ2h0KCksICpzdHlsZSkpOwogICAgICAgICAgICAgcmVjdC0+c2V0Qm90dG9t
KGF1dG9Pclpvb21BZGp1c3RlZFZhbHVlKHN0eWxlLT5jbGlwKCkuYm90dG9tKCksICpzdHlsZSkp
OwogICAgICAgICAgICAgcmVjdC0+c2V0TGVmdChhdXRvT3Jab29tQWRqdXN0ZWRWYWx1ZShzdHls
ZS0+Y2xpcCgpLmxlZnQoKSwgKnN0eWxlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoV1RGOjptb3ZlKHJlY3QpKTsKKyAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoV1RGOjptb3ZlKHJlY3QpKTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnNwZWFrKCkpOworICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+c3BlYWsoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlUcmFuc2Zvcm06CiAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRUcmFuc2Zvcm0o
cmVuZGVyZXIsICpzdHlsZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1Pcmln
aW46IHsKQEAgLTI5OTYsNyArMzAxMyw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsCiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybVN0eWxlOgogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtU3R5bGU6Ci0gICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKChzdHlsZS0+dHJhbnNmb3JtU3R5
bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQcmVzZXJ2ZTNEKSA/IENTU1ZhbHVlUHJlc2VydmUz
ZCA6IENTU1ZhbHVlRmxhdCk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSgoc3R5bGUtPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1T
dHlsZTNEUHJlc2VydmUzRCkgPyBDU1NWYWx1ZVByZXNlcnZlM2QgOiBDU1NWYWx1ZUZsYXQpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkRlbGF5OgogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgogICAgICAgICAgICAgcmV0dXJuIGdldERl
bGF5VmFsdWUoc3R5bGUtPnRyYW5zaXRpb25zKCkpOwpAQCAtMzAxOCw5ICszMDM1LDkgQEAgUmVm
UHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24gPSBhbmltTGlzdC0+YW5p
bWF0aW9uKGkpOwogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3JlYXRlVHJhbnNp
dGlvblByb3BlcnR5VmFsdWUoYW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbmltYXRpb24uZHVyYXRpb24oKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5pbWF0aW9uLmR1cmF0aW9uKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3JlYXRlVGltaW5nRnVuY3Rpb25WYWx1ZShhbmltYXRpb24udGltaW5nRnVuY3Rpb24oKS5nZXQo
KSkpOwotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoYW5pbWF0aW9uLmRlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwor
ICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KGFuaW1hdGlvbi5kZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICAgICAg
ICAgICAgICAgICAgdHJhbnNpdGlvbnNMaXN0LT5hcHBlbmQobGlzdC5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb25z
TGlzdDsKQEAgLTMwMjgsMjYgKzMwNDUsMjYgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKIAog
ICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24tcHJvcGVydHkg
ZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGwpKTsKLSAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxEdXJhdGlv
bigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsKSk7CisgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKEFuaW1hdGlvbjo6
aW5pdGlhbER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNyZWF0ZVRpbWluZ0Z1bmN0aW9uVmFsdWUoQW5pbWF0aW9uOjppbml0
aWFsVGltaW5nRnVuY3Rpb24oKS5nZXQoKSkpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKEFuaW1hdGlvbjo6aW5pdGlhbERlbGF5KCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxEZWxheSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1MpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0OwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzOgotICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wb2ludGVyRXZlbnRzKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+cG9pbnRlckV2ZW50
cygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlkOgogICAgICAgICAg
ICAgaWYgKHN0eWxlLT5saW5lR3JpZCgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+bGluZUdy
aWQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5saW5lR3Jp
ZCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMaW5lU25hcDoKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN0eWxlLT5saW5lU25hcCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExpbmVBbGlnbjoKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHN0eWxlLT5saW5lQWxpZ24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRX
cml0aW5nTW9kZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHN0eWxlLT53cml0aW5nTW9kZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRDb21iaW5lOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0Q29tYmluZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRDb21iaW5lKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9yaWVudGF0aW9uOgogICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnRleHRPcmllbnRhdGlvbigpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hDb250YWluOgpAQCAtMzA2Myw3ICsz
MDgwLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0
eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENsaXBQYXRoOiB7CiAgICAgICAgICAgICBDbGlwUGF0aE9wZXJhdGlvbiogb3BlcmF0
aW9uID0gc3R5bGUtPmNsaXBQYXRoKCk7CiAgICAgICAgICAgICBpZiAoIW9wZXJhdGlvbikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIGlmIChpczxSZWZl
cmVuY2VDbGlwUGF0aE9wZXJhdGlvbj4oKm9wZXJhdGlvbikpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBhdXRvJiByZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VDbGlwUGF0
aE9wZXJhdGlvbj4oKm9wZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUocmVmZXJlbmNlT3BlcmF0aW9uLnVybCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSk7CkBAIC0zMDczLDMxICszMDkwLDMxIEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsCiAgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgc2hhcGVPcGVyYXRpb24gPSBkb3du
Y2FzdDxTaGFwZUNsaXBQYXRoT3BlcmF0aW9uPigqb3BlcmF0aW9uKTsKICAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQodmFsdWVGb3JCYXNpY1NoYXBlKCpzdHlsZSwgc2hhcGVPcGVyYXRpb24u
YmFzaWNTaGFwZSgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNoYXBlT3BlcmF0aW9uLnJlZmVy
ZW5jZUJveCgpICE9IEJveE1pc3NpbmcpCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzaGFwZU9wZXJhdGlvbi5yZWZlcmVuY2VCb3go
KSkpOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0
ZVZhbHVlKHNoYXBlT3BlcmF0aW9uLnJlZmVyZW5jZUJveCgpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+KCpvcGVyYXRpb24pKSB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgYm94T3BlcmF0aW9uID0gZG93bmNhc3Q8Qm94Q2xp
cFBhdGhPcGVyYXRpb24+KCpvcGVyYXRpb24pOwotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShib3hPcGVyYXRpb24ucmVmZXJlbmNlQm94KCkp
KTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVl
KGJveE9wZXJhdGlvbi5yZWZlcmVuY2VCb3goKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIGxpc3Q7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKICAgICAgICAgICAgIGlmICghc3R5
bGUtPmhhc0Zsb3dJbnRvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbG93VGhyZWFkKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+Zmxvd1RocmVhZCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRG
bG93RnJvbToKICAgICAgICAgICAgIGlmICghc3R5bGUtPmhhc0Zsb3dGcm9tKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT5yZWdpb25UaHJlYWQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZh
bHVlKHN0eWxlLT5yZWdpb25UaHJlYWQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uRnJhZ21lbnQ6Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbkZyYWdt
ZW50KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHls
ZS0+cmVnaW9uRnJhZ21lbnQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5zaGFwZU1hcmdpbigpLCAqc3R5
bGUpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+
c2hhcGVNYXJnaW4oKSwgKnN0eWxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNo
YXBlSW1hZ2VUaHJlc2hvbGQ6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoc3R5bGUtPnNoYXBlSW1hZ2VUaHJlc2hvbGQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1
ZShzdHlsZS0+c2hhcGVJbWFnZVRocmVzaG9sZCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGU6CiAgICAg
ICAgICAgICByZXR1cm4gc2hhcGVQcm9wZXJ0eVZhbHVlKCpzdHlsZSwgc3R5bGUtPnNoYXBlT3V0
c2lkZSgpKTsKICNlbmRpZgpAQCAtMzEwOSwxOCArMzEyNiwxOCBAQCBSZWZQdHI8Q1NTVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELAogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1peEJsZW5kTW9kZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+YmxlbmRNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShzdHlsZS0+YmxlbmRNb2RlKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5SXNvbGF0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5pc29sYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0eWxlLT5pc29sYXRpb24oKSk7CiAjZW5kaWYKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRCbGVuZE1vZGU6IHsKICAgICAgICAgICAg
IGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKICAg
ICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxheWVycy0+YmxlbmRNb2RlKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUobGF5ZXJzLT5ibGVuZE1vZGUo
KSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxM
YXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXll
ci0+bmV4dCgpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShjdXJyTGF5ZXItPmJsZW5kTW9kZSgpKSk7CisgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPmJsZW5kTW9kZSgp
KSk7CiAKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQpAQCAt
MzE2OCw3ICszMTg1LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9y
Ojpwcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKIAogI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFw
VHlwZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+c2Nyb2xsU25hcFR5cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5zY3JvbGxTbmFwVHlwZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFNjcm9sbFNuYXBEZXN0aW5hdGlvbjoKICAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxTbmFwRGVzdGluYXRpb24oKnN0eWxlLCBzdHlsZS0+c2Nyb2xsU25hcERlc3RpbmF0aW9uKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcFBvaW50c1g6CkBAIC0z
MTgxLDcgKzMxOTgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6
OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELAogCiAjaWYgRU5BQkxFKENT
U19UUkFJTElOR19XT1JEKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QXBwbGVUcmFpbGluZ1dv
cmQ6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
PnRyYWlsaW5nV29yZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUoc3R5bGUtPnRyYWlsaW5nV29yZCgpKTsKICNlbmRpZgogCiAgICAgICAgIC8qIEluZGl2
aWR1YWwgcHJvcGVydGllcyBub3QgcGFydCBvZiB0aGUgc3BlYyAqLwpAQCAtMzIwOSw3ICszMjI2
LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVk6
CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHls
ZS0+c3ZnU3R5bGUoKS55KCksICpzdHlsZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0Wm9vbToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+dGV4dFpvb20oKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKHN0eWxlLT50ZXh0Wm9vbSgpKTsKIAogICAgICAgICAvKiBVbmltcGxlbWVudGVk
IENTUyAzIHByb3BlcnRpZXMgKGluY2x1ZGluZyBDU1MzIHNob3J0aGFuZCBwcm9wZXJ0aWVzKSAq
LwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QW5pbWF0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5oCmluZGV4IDFlNDMxMzA1NzNlMWMy
OTViMmQ5ZTM5M2EzYjVlMzU5ZWIxOGU3N2IuLjI2NDY3YWY3MDA5ZDEwNTNmMDM1NmNjMjY1NGZh
M2FmZTU0MjNiNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb250ZW50RGlz
dHJpYnV0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29udGVudERpc3Ry
aWJ1dGlvblZhbHVlLmgKQEAgLTQwLDkgKzQwLDkgQEAgcHVibGljOgogICAgIH0KICAgICB+Q1NT
Q29udGVudERpc3RyaWJ1dGlvblZhbHVlKCk7CiAKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IGRpc3RyaWJ1dGlvbigpIGNvbnN0IHsgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShtX2Rpc3RyaWJ1dGlvbik7IH0KLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKG1fcG9zaXRpb24pOyB9Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBvdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSht
X292ZXJmbG93KTsgfQorICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZGlzdHJpYnV0aW9uKCkg
Y29uc3QgeyByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUobV9kaXN0cmlidXRpb24pOyB9CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKG1fcG9zaXRpb24pOyB9CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBv
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKG1fb3ZlcmZsb3cpOyB9CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4
dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGZiZTM0NzVkMWM3ZmEy
ZWQ2N2E1NDkyODY3MTU0ZDhlNGJlMzNkYWEuLjNkM2U3ZDk0YjY0NTIxZjQxOTYyOWExYzlkNjc3
Y2ViOTY0MGMyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0yMDIsNyArMjAyLDcg
QEAgc3RhdGljIGJvb2wgaGFzUHJlZml4KGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBjaGFyKiBwcmVmaXgpCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgogc3Rh
dGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKEFyZ3Mm
Ji4uLiBhcmdzKQogewotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShQYWly
OjpjcmVhdGUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLikpOwogfQogCiBjbGFzcyBBbmltYXRpb25QYXJzZUNvbnRleHQgewpA
QCAtNTM5LDE0ICs1MzksMTQgQEAgc3RhdGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VD
b2xvclZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0aW8KICAgICBjc3NTdHJp
bmcuaW5pdChzdHJpbmcpOwogICAgIENTU1ZhbHVlSUQgdmFsdWVJRCA9IGNzc1ZhbHVlS2V5d29y
ZElEKGNzc1N0cmluZyk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlVmFsdWVDb2xvcih2YWx1ZUlE
LCBzdHJpY3QpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7CisgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZUlEKTsKICAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkp
ID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1
bHQ6OlVuY2hhbmdlZDsKICAgICB9CiAgICAgUkdCQTMyIGNvbG9yOwogICAgIGlmICghQ1NTUGFy
c2VyOjpmYXN0UGFyc2VDb2xvcihjb2xvciwgc3RyaW5nLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9
ICcjJykpCiAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKIAot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZh
bHVlKGNvbG9yKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKICAgICByZXR1cm4gZGVjbGFyYXRp
b24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVh
c2UoKSwgaW1wb3J0YW50KSkgPyBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpDaGFuZ2VkIDogQ1NT
UGFyc2VyOjpQYXJzZVJlc3VsdDo6VW5jaGFuZ2VkOwogfQogCkBAIC02NTEsNyArNjUxLDcgQEAg
c3RhdGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWMKICAgICBpZiAoc3RkOjppc2luZihudW1iZXIpKQogICAg
ICAgICByZXR1cm4gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7CiAKLSAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobnVtYmVyLCB1bml0
KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZShudW1iZXIsIHVuaXQpOwogICAgIHJldHVybiBkZWNsYXJhdGlvbi0+YWRk
UGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUucmVsZWFzZSgpLCBp
bXBvcnRhbnQpKSA/IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQgOiBDU1NQYXJzZXI6
OlBhcnNlUmVzdWx0OjpVbmNoYW5nZWQ7CiB9CiAKQEAgLTExOTIsMTEgKzExOTIsMTEgQEAgc3Rh
dGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgcGFyc2VLZXl3b3JkVmFsdWUoTXV0YWJsZVN0eWxl
UHJvcGVydGllcyogZGVjbGFyYXQKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CiAgICAg
aWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVJbmhlcml0KQotICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCk7CisgICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwogICAgIGVsc2UgaWYgKHZh
bHVlSUQgPT0gQ1NTVmFsdWVJbml0aWFsKQotICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCk7CisgICAgICAgIHZhbHVlID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpOwogICAgIGVsc2Ug
aWYgKGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShwcm9wZXJ0eUlkLCB2YWx1ZUlELCBw
YXJzZXJDb250ZXh0LCBzdHlsZVNoZWV0Q29udGVudHMpKQotICAgICAgICB2YWx1ZSA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICAgICAgdmFsdWUg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlE
KTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJv
cjsKIApAQCAtMTIwNiw2ICsxMjA2LDcgQEAgc3RhdGljIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQg
cGFyc2VLZXl3b3JkVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXQKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1U
cmFuc2xhdGVBcmd1bWVudHMoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVZhbHVl
LCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBleHBlY3RlZENvdW50KQogeworICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgd2hpbGUgKGV4cGVjdGVkQ291bnQpIHsK
ICAgICAgICAgc2l6ZV90IGVuZCA9IFdURjo6ZmluZChjaGFyYWN0ZXJzLCBsZW5ndGgsIGV4cGVj
dGVkQ291bnQgPT0gMSA/ICcpJyA6ICcsJywgc3RhcnQpOwogICAgICAgICBpZiAoZW5kID09IG5v
dEZvdW5kIHx8IChleHBlY3RlZENvdW50ID09IDEgJiYgZW5kICE9IGxlbmd0aCAtIDEpKQpAQCAt
MTIxNyw3ICsxMjE4LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1UcmFuc2xhdGVBcmd1
bWVudHMoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVYKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgaWYgKHVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCAmJiAobnVtYmVyIHx8IHVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbHVlLmFwcGVuZChjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUobnVtYmVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CiAgICAgICAgIHN0YXJ0
ID0gZW5kICsgMTsKICAgICAgICAgLS1leHBlY3RlZENvdW50OwogICAgIH0KQEAgLTEyODQsNiAr
MTI4NSw3IEBAIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQogICAgIFZlY3RvcjxTdHJpbmc+IGZhbWls
eU5hbWVzOwogICAgIHN0cmluZy5zdHJpbmcoKS5zcGxpdCgnLCcsIHRydWUsIGZhbWlseU5hbWVz
KTsKIAorICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7
CiAgICAgZm9yIChhdXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXMpIHsKICAgICAgICAgU3Ry
aW5nIHN0cmlwcGVkID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGZhbWlseU5h
bWUpOwogICAgICAgICBpZiAoc3RyaXBwZWQuaXNFbXB0eSgpKQpAQCAtMTI5MiwxMiArMTI5NCwx
MiBAQCBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZTsKICAgICAgICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiB7IENTU1ZhbHVlU2VyaWYsIENTU1Zh
bHVlU2Fuc1NlcmlmLCBDU1NWYWx1ZUN1cnNpdmUsIENTU1ZhbHVlRmFudGFzeSwgQ1NTVmFsdWVN
b25vc3BhY2UsIENTU1ZhbHVlV2Via2l0Qm9keSB9KSB7CiAgICAgICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2Uoc3RyaXBwZWQsIGdldFZhbHVlTmFtZShwcm9wZXJ0eUlEKSkpIHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShw
cm9wZXJ0eUlEKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUocHJvcGVydHlJRCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHZh
bHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHN0cmlwcGVkKTsKKyAg
ICAgICAgICAgIHZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShzdHJp
cHBlZCk7CiAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgIH0KIApAQCAtMTc5MSwxMyArMTc5MywxMyBAQCBpbmxpbmUgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShWYWx1ZVdpdGhD
YQogICAgICAgICB8fCAodmFsdWUudW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4g
JiYgdmFsdWUudW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUykKICAgICAgICAgfHwg
KHZhbHVlLnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVyAmJiB2YWx1ZS51bml0IDw9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWCkpOwogI2VuZGlmCi0gICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpOworICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHZhbHVlLmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUudW5pdCkpOwogfQogCiBpbmxpbmUgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVl
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpOwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2
YWx1ZS5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSh2YWx1ZS5zdHJpbmcsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzQ29t
bWEoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQpAQCAtMTgyMSw3ICsxODIzLDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OmlzVmFsaWRTaXplKFZhbHVlV2l0aENhbGN1bGF0aW9uJiB2YWx1ZVdpdGhDYWxjdWxh
dGlvbikKIGlubGluZSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VW
YWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50aWZpZXIsIFZhbHVlV2l0aENhbGN1bGF0aW9u
JiB2YWx1ZVdpdGhDYWxjdWxhdGlvbikKIHsKICAgICBpZiAoaWRlbnRpZmllcikKLSAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKTsK
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGlkZW50aWZpZXIpOwogCiAgICAgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVl
KCkudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgcmV0dXJu
IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKQEAgLTE4
NjcsMTggKzE4NjksMTkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVl
V2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICBDU1NWYWx1ZUlE
IGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKIAorICAgIGF1dG8mIGNzc1Zh
bHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgdW5zaWduZWQgbnVtID0g
aW5TaG9ydGhhbmQoKSA/IDEgOiBtX3ZhbHVlTGlzdC0+c2l6ZSgpOwogCiAgICAgaWYgKGlkID09
IENTU1ZhbHVlSW5oZXJpdCkgewogICAgICAgICBpZiAobnVtICE9IDEpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShwcm9wSWQs
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCksIGltcG9ydGFudCk7CisgICAg
ICAgIGFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZShwcm9wSWQsIGNzc1ZhbHVlUG9vbC5jcmVh
dGVJbmhlcml0ZWRWYWx1ZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVJbml0aWFsKSB7CiAgICAgICAgIGlmIChu
dW0gIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYWRkRXhwYW5kZWRQ
cm9wZXJ0eUZvclZhbHVlKHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlRXhwbGljaXRJbml0
aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZh
bHVlKHByb3BJZCwgY3NzVmFsdWVQb29sLmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCksIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTg4Nyw3ICsxODkw
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobV92
YWx1ZUxpc3QtPm5leHQoKSAmJiAhaW5TaG9ydGhhbmQoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoaWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpLCBpbXBvcnRhbnQpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE5NDgsNyArMTk1MSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgLy8gcGFnaW5hdGlvbiBjb250cm9scywgaXQgc2hvdWxkIGRlZmF1bHQgdG8g
aGlkZGVuLiBJZiB0aGUgb3ZlcmZsb3cteSB2YWx1ZSBpcyBhbnl0aGluZyBidXQKICAgICAgICAg
Ly8gcGFnZWQteCBvciBwYWdlZC15LCB0aGVuIG92ZXJmbG93LXggYW5kIG92ZXJmbG93LXkgc2hv
dWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUuCiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtp
dFBhZ2VkWCB8fCBpZCA9PSBDU1NWYWx1ZVdlYmtpdFBhZ2VkWSkKLSAgICAgICAgICAgIG92ZXJm
bG93WFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7CisgICAgICAgICAgICBvdmVyZmxvd1hWYWx1ZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
b3ZlcmZsb3dYVmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CiAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5T3ZlcmZsb3dYLCBvdmVyZmxvd1hWYWx1ZS5yZWxl
YXNlKCksIGltcG9ydGFudCk7CkBAIC0yMDkyLDkgKzIwOTUsOSBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
ICAgICAgICAgaWYgKGxpc3QtPmxlbmd0aCgpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5RdWlya3NNb2RlKCkgJiYgdmFs
dWUtPmlkID09IENTU1ZhbHVlSGFuZCkgLy8gTVNJRSA1IGNvbXBhdGliaWxpdHkgOi8KLSAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlUG9pbnRlcikpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUG9pbnRlcikpOwogICAgICAg
ICAgICAgZWxzZSBpZiAoKHZhbHVlLT5pZCA+PSBDU1NWYWx1ZUF1dG8gJiYgdmFsdWUtPmlkIDw9
IENTU1ZhbHVlV2Via2l0Wm9vbU91dCkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUtPmlkKSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjE3Myw3ICsyMTc2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFn
ZVNvdXJjZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOgog
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwor
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NJ
bWFnZVZhbHVlOjpjcmVhdGUoY29tcGxldGVVUkwodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUo
KS5zdHJpbmcpKTsKQEAgLTI1NDIsOSArMjU0NSw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1By
b3BlcnR5RmxleDogewogICAgICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9wSWQp
OwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZsZXhHcm93LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhTaHJpbmssIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgaW1wb3J0YW50KTsKLSAgICAg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEJhc2lzLCBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEdyb3csIGNzc1ZhbHVlUG9vbC5jcmVhdGVW
YWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7CisgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhTaHJpbmssIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7
CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsZXhCYXNpcywgY3NzVmFsdWVQ
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBhcnNlRmxl
eCgqbV92YWx1ZUxpc3QsIGltcG9ydGFudCk7CkBAIC0yNTY0LDcgKzI1NjcsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2Vy
LCBDU1NTdHJpY3RNb2RlKSkgewogICAgICAgICAgICAgLy8gV2UgcmVzdHJpY3QgdGhlIHNtYWxs
ZXN0IHZhbHVlIHRvIGludCBtaW4gKyAyIGJlY2F1c2Ugd2UgdXNlIGludCBtaW4gYW5kIGludCBt
aW4gKyAxIGFzIHNwZWNpYWwgdmFsdWVzIGluIGEgaGFzaCBzZXQuCiAgICAgICAgICAgICBkb3Vi
bGUgcmVzdWx0ID0gc3RkOjptYXg8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1p
bigpICsgMiwgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7Ci0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwpAQCAtMjc4OCw3ICsyNzkxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVBbGwgfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRQcmlt
aXRpdmUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSAmJiBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pID09IDEpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29s
dW1uU3BhbiwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlDb2x1bW5TcGFuLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yODQ4LDcgKzI4NTEsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkudW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICBTdHJpbmcgbGluZUdy
aWRWYWx1ZSA9IFN0cmluZyh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnN0cmluZyk7CiAg
ICAgICAgICAgICBpZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShsaW5lR3Jp
ZFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7CisgICAg
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUo
bGluZUdyaWRWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0yOTA1LDcgKzI5MDgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChwYXJzZVNob3J0aGFu
ZChwcm9wSWQsIGJvcmRlckFicmlkZ2VkU2hvcnRoYW5kKCksIGltcG9ydGFudCkpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBDU1MzIEJvcmRlcnMgYW5kIEJhY2tncm91bmRzIHNwZWNpZmljYXRpb24g
c2F5cyB0aGF0IGJvcmRlciBhbHNvIHJlc2V0cyBib3JkZXItaW1hZ2UuIEl0J3MgYXMKICAgICAg
ICAgICAgIC8vIHRob3VnaCBhIHZhbHVlIG9mIG5vbmUgd2FzIHNwZWNpZmllZCBmb3IgdGhlIGlt
YWdlLgotICAgICAgICAgICAgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2UsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCks
IGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NT
UHJvcGVydHlCb3JkZXJJbWFnZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZh
bHVlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjcxLDcgKzMyNzQsOCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VMZWdhY3lQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxlZ2FjeSksIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKSwgaW1wb3J0YW50KTsKKyAgICBhdXRvJiBjc3NWYWx1ZVBv
b2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOworICAgIGFkZFByb3BlcnR5KHByb3BJZCwg
Y3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVMZWdhY3kpLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCkpLCBpbXBvcnRhbnQpOwogICAgIHJldHVybiAhbV92YWx1ZUxpc3QtPm5leHQoKTsK
IH0KIApAQCAtMzM0MSwyNSArMzM0NSwyNSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VJdGVtUG9z
aXRpb25PdmVyZmxvd1Bvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcAogICAg
ICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcG9zaXRpb247CiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQ7CiAgICAgaWYgKGlzSXRlbVBvc2l0
aW9uS2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgIHBvc2l0aW9uID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgIHBvc2l0aW9uID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlk
KTsKICAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICBpZiAodmFs
dWUpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0gQ1NTVmFsdWVUcnVlICYmIHZhbHVl
LT5pZCAhPSBDU1NWYWx1ZVNhZmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgb3ZlcmZsb3dBbGlnbm1lbnRLZXl3b3JkID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgICAgICBvdmVyZmxvd0FsaWdubWVu
dEtleXdvcmQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS0+aWQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChpc0FsaWdubWVudE92ZXJm
bG93S2V5d29yZCh2YWx1ZS0+aWQpKSB7Ci0gICAgICAgIG92ZXJmbG93QWxpZ25tZW50S2V5d29y
ZCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAg
ICAgICBvdmVyZmxvd0FsaWdubWVudEtleXdvcmQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiBpc0l0ZW1Qb3NpdGlvbktleXdv
cmQodmFsdWUtPmlkKSkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgICAgICBwb3NpdGlvbiA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKQEAg
LTMzODEsNyArMzM4NSw3IEBAIHN0YXRpYyBib29sIHBhcnNlQmFja2dyb3VuZENsaXAoQ1NTUGFy
c2VyVmFsdWUmIHBhcnNlclZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+JiBjCiB7CiAgICAgaWYgKHBh
cnNlclZhbHVlLmlkID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IHBhcnNlclZhbHVlLmlkID09IENT
U1ZhbHVlUGFkZGluZ0JveAogICAgICAgICB8fCBwYXJzZXJWYWx1ZS5pZCA9PSBDU1NWYWx1ZUNv
bnRlbnRCb3ggfHwgcGFyc2VyVmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSB7Ci0gICAg
ICAgIGNzc1ZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHBhcnNl
clZhbHVlLmlkKTsKKyAgICAgICAgY3NzVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShwYXJzZXJWYWx1ZS5pZCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDA2LDcgKzM0MTAsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VOb25FbGVtZW50U25hcFBvaW50cyhDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1
ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZXBlYXQoIikpIHsKICAgICAgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCp2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3Mu
Z2V0KCktPmN1cnJlbnQoKSk7CiAgICAgICAgICAgICBpZiAodmFsaWRhdGVVbml0KGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfCBGTm9uTmVnKSkgewotICAgICAg
ICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKExlbmd0
aFJlcGVhdDo6Y3JlYXRlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbikpKSk7CisgICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShMZW5ndGhSZXBlYXQ6OmNyZWF0ZShjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkpOwogICAgICAg
ICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTM0OTgsNiArMzUwMiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByCiAgICAgaW50IGk7CiAg
ICAgYm9vbCBmb3VuZFBvc2l0aW9uQ1NTUHJvcGVydHkgPSBmYWxzZTsKIAorICAgIGF1dG8mIGNz
c1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgd2hpbGUgKG1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpIHsKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUmIGN1cnJlbnRWYWx1
ZSA9ICptX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgICAgICBpZiAoY3VycmVudFZhbHVlLnVu
aXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIGN1cnJlbnRWYWx1ZS5pVmFsdWUgPT0g
JywnKSB7CkBAIC0zNTEwLDE0ICszNTE1LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxT
aG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIGlmICgh
cGFyc2VkUHJvcGVydHlbaV0gJiYgcHJvcGVydGllc1tpXSAhPSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikgewotICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tp
XSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENT
U1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
RmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdElu
aXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3Np
dGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRSZXBlYXQgfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBl
YXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVh
dGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9w
ZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ld
ID09IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbikgJiYgIXBhcnNlZFByb3BlcnR5W2ldKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3JvdW5kLW9yaWdpbiB3YXNuJ3Qg
cHJlc2VudCwgdGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxzby4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlt
cGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZh
bHVlKGNsaXBWYWx1ZSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CkBAIC0zNTU5LDcgKzM1NjQsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25z
dCBDU1NQcm9wZXJ0eUlEKiBwcgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQmFj
a2dyb3VuZENsaXAocGFyc2VyVmFsdWUsIHZhbDEpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIHZhbDEucmVsZWFzZU5vbk51bGwoKSk7IC8vIFRo
ZSBwcm9wZXJ0eSBwYXJzZWQgc3VjY2Vzc2Z1bGx5LgogICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUs
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOyAvLyBTb21lIHZh
bHVlIHdhcyB1c2VkIGZvciBvcmlnaW4gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGNsaXAuIEp1
c3QgcmVzZXQgY2xpcCBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZp
bGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpKTsgLy8gU29tZSB2YWx1ZSB3YXMgdXNlZCBmb3Igb3JpZ2luIHRoYXQgaXMgbm90IHN1cHBv
cnRlZCBieSBjbGlwLiBKdXN0IHJlc2V0IGNsaXAgaW5zdGVhZC4KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRDbGlwIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNr
Q2xpcCkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ2xpcCA9IHRydWU7CkBAIC0zNTc5
LDE0ICszNTg0LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIGNvbnN0IENTU1Byb3BlcnR5SUQqIHByCiAgICAgZm9yIChpID0gMDsg
aSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICAvLyBGaWxsIGluIGFueSByZW1haW5p
bmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAgICAgICBpZiAoIXBhcnNl
ZFByb3BlcnR5W2ldKSB7Ci0gICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFk
ZEZpbGxWYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxW
YWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNr
UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhZGRGaWxsVmFsdWUocG9zaXRpb25ZVmFsdWUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBs
aWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENT
U1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5
V2Via2l0TWFza1JlcGVhdCkKLSAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZh
bHVlLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICBhZGRGaWxsVmFsdWUocmVwZWF0WVZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRl
SW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9
PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tPcmlnaW4pIHsKICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3JvdW5k
LW9yaWdpbiB3YXNuJ3QgcHJlc2VudCwgdGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxzby4K
LSAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhZGRGaWxsVmFs
dWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0g
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24pIHsKQEAgLTM2NjEsNiArMzY2Niw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgQW5pbWF0aW9uUGFyc2VDb250ZXh0IGNvbnRleHQ7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGllc107CiAKKyAgICBhdXRvJiBj
c3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIHVuc2lnbmVkIGk7
CiAgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKICAgICAgICAgQ1NTUGFyc2Vy
VmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CkBAIC0zNjY5LDcgKzM2NzUsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgICAgICAgICBh
ZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0
SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2
YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKICAg
ICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQpAQCAtMzcwMiw3ICszNzA4
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKENTU1Byb3BlcnR5
SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVy
dGllczsgKytpKSB7CiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIHRoZSBwcm9wZXJ0eSwg
c2V0IGFuIGludGlhbCB2YWx1ZS4KICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkKLSAg
ICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1
ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsK
IAogICAgICAgICBhZGRQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCB2YWx1ZXNb
aV0ucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgIH0KQEAgLTM3NjgsMTQgKzM3NzQsMTQgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uc1Nob3J0aGFuZChib29sIGltcG9ydGFudCkKICAg
ICBpZiAoY29sdW1uV2lkdGgpCiAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1u
V2lkdGgsIGNvbHVtbldpZHRoLCBpbXBvcnRhbnQpOwogICAgIGVsc2UgewotICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxpY2l0
QXV0byAvKiBpbXBsaWNpdCAqLyk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29s
dW1uV2lkdGgsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byksIGltcG9ydGFudCwgIWhhc1BlbmRpbmdFeHBsaWNpdEF1dG8gLyogaW1w
bGljaXQgKi8pOwogICAgICAgICBoYXNQZW5kaW5nRXhwbGljaXRBdXRvID0gZmFsc2U7CiAgICAg
fQogCiAgICAgaWYgKGNvbHVtbkNvdW50KQogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUNvbHVtbkNvdW50LCBjb2x1bW5Db3VudCwgaW1wb3J0YW50KTsKICAgICBlbHNlCi0gICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5kaW5nRXhw
bGljaXRBdXRvIC8qIGltcGxpY2l0ICovKTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlDb2x1bW5Db3VudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxpY2l0QXV0byAv
KiBpbXBsaWNpdCAqLyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3OTIsNiArMzc5OCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIEFuaW1hdGlvblBhcnNlQ29udGV4dCBjb250
ZXh0OwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVzW251bVByb3BlcnRpZXNdOwogCisgICAg
YXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKICAgICB1bnNp
Z25lZCBpOwogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CiAgICAgICAgIENT
U1BhcnNlclZhbHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwpAQCAtMzgwMCw3ICsz
ODA3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCi0gICAgICAgICAgICAg
ICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sKCkuY3JlYXRl
SW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlv
blZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVl
KCkpOwogICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCkBAIC0zODMy
LDcgKzM4MzksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAvLyBGaWxsIGluIGFueSBy
ZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAgIGZvciAoaSA9
IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0
eVtpXSkKLSAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICBhZGRBbmlt
YXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJbXBsaWNpdEluaXRpYWxW
YWx1ZSgpKTsKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIGFsbCBvZiB0aGUgcHJvcGVydGllcyB3
ZSBmb3VuZC4KQEAgLTM4NzIsNiArMzg3OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNob3J0
aGFuZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3Bl
cnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwogICAgIEltcGxpY2l0U2NvcGUgaW1wbGljaXRTY29w
ZSgqdGhpcywgUHJvcGVydHlJbXBsaWNpdCk7CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0
aGFuZCogcHJvcGVydGllc0ZvckluaXRpYWxpemF0aW9uID0gc2hvcnRoYW5kLnByb3BlcnRpZXNG
b3JJbml0aWFsaXphdGlvbigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhh
bmQubGVuZ3RoKCk7ICsraSkgewpAQCAtMzg4MSw5ICszODg5LDkgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBTdHlsZVByb3BlcnR5
U2hvcnRoYW4KICAgICAgICAgaWYgKHByb3BlcnRpZXNGb3JJbml0aWFsaXphdGlvbikgewogICAg
ICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgaW5pdFByb3BlcnRpZXMgPSBw
cm9wZXJ0aWVzRm9ySW5pdGlhbGl6YXRpb25baV07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHByb3BJbmRleCA9IDA7IHByb3BJbmRleCA8IGluaXRQcm9wZXJ0aWVzLmxlbmd0aCgpOyArK3By
b3BJbmRleCkKLSAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShpbml0UHJvcGVydGllcy5wcm9w
ZXJ0aWVzKClbcHJvcEluZGV4XSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFs
VmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShpbml0UHJv
cGVydGllcy5wcm9wZXJ0aWVzKClbcHJvcEluZGV4XSwgY3NzVmFsdWVQb29sLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgYWRkUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgY3NzVmFsdWVQb29sKCku
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFk
ZFByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaV0sIGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
bXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwogICAgIH0KIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMzk2MCw3ICszOTY4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUGFnZShDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5p
ZCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gMCAm
JiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoKnZhbHVlKSwg
aW1wb3J0YW50KTsKQEAgLTQwMDUsMTQgKzQwMTMsMTQgQEAgQ1NTUGFyc2VyOjpTaXplUGFyYW1l
dGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxpc3QmIHBhcnNl
ZFYKICAgICBzd2l0Y2ggKHZhbHVlLmlkKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CiAgICAg
ICAgIGlmIChwcmV2UGFyYW1UeXBlID09IE5vbmUpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVl
cy5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSk7
CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMuYXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKSk7CiAgICAgICAgICAgICByZXR1cm4g
QXV0bzsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKICAgICBjYXNlIENTU1ZhbHVl
TGFuZHNjYXBlOgogICAgIGNhc2UgQ1NTVmFsdWVQb3J0cmFpdDoKICAgICAgICAgaWYgKHByZXZQ
YXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IFBhZ2VTaXplKSB7Ci0gICAgICAg
ICAgICBwYXJzZWRWYWx1ZXMuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZS5pZCkpOworICAgICAgICAgICAgcGFyc2VkVmFsdWVzLmFwcGVuZChDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCkpOwogICAg
ICAgICAgICAgcmV0dXJuIE9yaWVudGF0aW9uOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBO
b25lOwpAQCAtNDAyNyw3ICs0MDM1LDcgQEAgQ1NTUGFyc2VyOjpTaXplUGFyYW1ldGVyVHlwZSBD
U1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxpc3QmIHBhcnNlZFYKICAgICAg
ICAgaWYgKHByZXZQYXJhbVR5cGUgPT0gTm9uZSB8fCBwcmV2UGFyYW1UeXBlID09IE9yaWVudGF0
aW9uKSB7CiAgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gUGFnZSBTaXplIHRoZW4gT3JpZW50
YXRpb24gb3JkZXIgYnkgcHJlcGVuZGluZy4KICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHNw
ZWNpZmllZCBieSB0aGUgQ1NTMyBQYWdlZCBNZWRpYSBzcGVjaWZpY2F0aW9uLCBidXQgZm9yIHNp
bXBsZXIgcHJvY2Vzc2luZyBsYXRlciAoU3R5bGVSZXNvbHZlcjo6YXBwbHlQYWdlU2l6ZVByb3Bl
cnR5KS4KLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy5wcmVwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCkpOworICAgICAgICAgICAgcGFyc2VkVmFsdWVz
LnByZXBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUuaWQpKTsKICAgICAgICAgICAgIHJldHVybiBQYWdlU2l6ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gTm9uZTsKQEAgLTQxNDMsNyArNDE1MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUNvbnRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb25lOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpOworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC00MTg2LDcgKzQxOTQsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBdHRy
KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKICAgICBpZiAobV9jb250ZXh0LmlzSFRNTERvY3Vt
ZW50KQogICAgICAgICBhdHRyTmFtZSA9IGF0dHJOYW1lLmxvd2VyKCk7CiAKLSAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYXR0ck5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfQVRUUik7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUoYXR0ck5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUik7CiB9CiAKIFJlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xvcigpCkBAIC00MTk0LDE0ICs0
MjAyLDE0IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xv
cigpCiAgICAgQ1NTVmFsdWVJRCBpZCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlkOwogICAg
IGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgaXNWYWxpZFN5c3RlbUNvbG9yVmFsdWUo
aWQpIHx8IGlkID09IENTU1ZhbHVlTWVudSB8fCBpZCA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcgog
ICAgICAgICB8fCAoaWQgPj0gQ1NTVmFsdWVHcmV5ICYmIGlkIDwgQ1NTVmFsdWVXZWJraXRUZXh0
ICYmIGluUXVpcmtzTW9kZSgpKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CiAgICAgcmV0dXJuIHBhcnNlQ29sb3Io
KTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbEltYWdlKENTU1BhcnNlclZhbHVlTGlz
dCYgdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWVM
aXN0LmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIHZhbHVlID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAg
IHZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh2YWx1
ZUxpc3QuY3VycmVudCgpLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CkBA
IC00MjMyLDcgKzQyNDAsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VQb3Np
dGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QpCiAgICAgICAgICAgICBwZXJjZW50
ID0gMTAwOwogICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUNlbnRlcikKICAgICAgICAg
ICAgIHBlcmNlbnQgPSA1MDsKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQogICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZUxpc3QuY3VycmVudCgpKTsKICAg
ICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZMZW5n
dGgpKQpAQCAtNDI0OSw3ICs0MjU3LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0KQogICAgICAgICAgICAg
cGVyY2VudCA9IDEwMDsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDZW50ZXIpCiAg
ICAgICAgICAgICBwZXJjZW50ID0gNTA7Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJj
ZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0KICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWVMaXN0LmN1cnJlbnQo
KSk7CiAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQg
fCBGTGVuZ3RoKSkKQEAgLTQyODUsOSArNDI5Myw5IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJWYWx1ZUxp
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFyc2luZ01vZGUgPT0gUmVzb2x2ZVZhbHVlc0Fz
S2V5d29yZCkKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoaWQpOworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKIAotICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUocGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9CiAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlTGlzdC5j
dXJyZW50KCkpOwogICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQ
ZXJjZW50IHwgRkxlbmd0aCkpIHsKQEAgLTQzODgsNiArNDM5Niw3IEBAIHZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZTNWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IFJlZlB0cjxDCiAgICAgQ1NTVmFsdWVJRCBmaXJzdFBvc2l0aW9uS2V5d29yZDsKICAgICBDU1NW
YWx1ZUlEIHNlY29uZFBvc2l0aW9uS2V5d29yZDsKIAorICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZUNl
bnRlcikgewogICAgICAgICAvLyA8cG9zaXRpb24+IHJlcXVpcmVzIHRoZSBmaXJzdCAnY2VudGVy
JyB0byBiZSBmb2xsb3dlZCBieSBhIGtleXdvcmQuCiAgICAgICAgIGlmICghaXNGaWxsUG9zaXRp
b25LZXl3b3JkKGlkZW50MikpCkBAIC00NDAyLDcgKzQ0MTEsNyBAQCB2b2lkIENTU1BhcnNlcjo6
cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBS
ZWZQdHI8QwogICAgICAgICAgICAgZmlyc3RQb3NpdGlvbktleXdvcmQgPSBDU1NWYWx1ZVRvcDsK
ICAgICAgICAgICAgIHN3YXBOZWVkZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVl
MSA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoZmlyc3RQb3NpdGlvbktleXdvcmQpLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZSg1MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSk7CisgICAgICAgIHZhbHVl
MSA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGZpcnN0UG9zaXRpb25LZXl3b3JkKSwgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKDUw
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpKTsKICAgICAgICAgdmFsdWUyID0g
Y3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKFdURjo6bW92ZShwYXJzZWRWYWx1ZTIpLCB2YWx1ZTMu
Y29weVJlZigpKTsKICAgICB9IGVsc2UgaWYgKGlkZW50MyA9PSBDU1NWYWx1ZUNlbnRlcikgewog
ICAgICAgICBpZiAoaXNGaWxsUG9zaXRpb25LZXl3b3JkKGlkZW50MikpCkBAIC00NDE0LDcgKzQ0
MjMsNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKENTU1BhcnNl
clZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8QwogICAgICAgICAgICAgc3dhcE5lZWRlZCA9
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgdmFsdWUxID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQ
YWlyKFdURjo6bW92ZShwYXJzZWRWYWx1ZTEpLCBwYXJzZWRWYWx1ZTIuY29weVJlZigpKTsKLSAg
ICAgICAgdmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlVmFsdWVQYWlyKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3NpdGlvbktleXdvcmQpLCBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSk7Cisg
ICAgICAgIHZhbHVlMiA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHNlY29uZFBvc2l0aW9uS2V5d29yZCksIGNzc1ZhbHVlUG9vbC5j
cmVhdGVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdFBvc2l0aW9u
VmFsdWU7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kUG9zaXRpb25W
YWx1ZTsKQEAgLTQ0MjgsNyArNDQzNyw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZTNWYWx1ZXNG
aWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDCiAKICAg
ICAgICAgICAgIHNlY29uZFBvc2l0aW9uVmFsdWUgPSB2YWx1ZTM7CiAgICAgICAgICAgICBzZWNv
bmRQb3NpdGlvbktleXdvcmQgPSBpZGVudDI7Ci0gICAgICAgICAgICBmaXJzdFBvc2l0aW9uVmFs
dWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BFUkNFTlRBR0UpOworICAgICAgICAgICAgZmlyc3RQb3NpdGlvblZhbHVlID0gY3NzVmFsdWVQ
b29sLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBQZXIgQ1NTLCB3ZSBzaG91bGQgb25seSBh
Y2NlcHQ6IFsgcmlnaHQgfCBsZWZ0IHwgdG9wIHwgYm90dG9tIF0gWyA8cGVyY2VudGFnZT4gfCA8
bGVuZ3RoPiBdIFsgY2VudGVyIHwgbGVmdCB8IHJpZ2h0IHwgYm90dG9tIHwgdG9wIF0uCiAgICAg
ICAgICAgICBpZiAoIWlzRmlsbFBvc2l0aW9uS2V5d29yZChpZGVudDMpKQpAQCAtNDQzNiwxNCAr
NDQ0NSwxNCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKENTU1Bh
cnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8QwogCiAgICAgICAgICAgICBmaXJzdFBv
c2l0aW9uVmFsdWUgPSBwYXJzZWRWYWx1ZTI7CiAgICAgICAgICAgICBzZWNvbmRQb3NpdGlvbktl
eXdvcmQgPSBpZGVudDM7Ci0gICAgICAgICAgICBzZWNvbmRQb3NpdGlvblZhbHVlID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
KTsKKyAgICAgICAgICAgIHNlY29uZFBvc2l0aW9uVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRl
VmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChpc1ZhbHVlQ29uZmxpY3RpbmdXaXRoQ3VycmVudEVkZ2UoaWRlbnQxLCBz
ZWNvbmRQb3NpdGlvbktleXdvcmQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHZh
bHVlMSA9IGNyZWF0ZVByaW1pdGl2ZVZhbHVlUGFpcihXVEY6Om1vdmUocGFyc2VkVmFsdWUxKSwg
Zmlyc3RQb3NpdGlvblZhbHVlLmNvcHlSZWYoKSk7Ci0gICAgICAgIHZhbHVlMiA9IGNyZWF0ZVBy
aW1pdGl2ZVZhbHVlUGFpcihjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoc2Vj
b25kUG9zaXRpb25LZXl3b3JkKSwgc2Vjb25kUG9zaXRpb25WYWx1ZS5jb3B5UmVmKCkpOworICAg
ICAgICB2YWx1ZTIgPSBjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoY3NzVmFsdWVQb29sLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShzZWNvbmRQb3NpdGlvbktleXdvcmQpLCBzZWNvbmRQb3NpdGlvblZh
bHVlLmNvcHlSZWYoKSk7CiAgICAgfQogCiAgICAgaWYgKGlkZW50MSA9PSBDU1NWYWx1ZVRvcCB8
fCBpZGVudDEgPT0gQ1NTVmFsdWVCb3R0b20gfHwgc3dhcE5lZWRlZCkKQEAgLTQ1NjgsNyArNDU3
Nyw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZTJWYWx1ZXNGaWxsUG9zaXRpb24oQ1NTUGFyc2Vy
VmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDCiAgICAgICAgIC8vIGlzIHNpbXBseSA1MCUu
IFRoaXMgaXMgb3VyIGRlZmF1bHQuCiAgICAgICAgIC8vIEZvciBrZXl3b3JkcywgdGhlIGtleXdv
cmQgd2FzIGVpdGhlciBhbiB4LWtleXdvcmQgKGxlZnQvcmlnaHQpLCBhIHkta2V5d29yZCAodG9w
L2JvdHRvbSksIG9yIGFuIGFtYmlndW91cyBrZXl3b3JkIChjZW50ZXIpLgogICAgICAgICAvLyBG
b3IgbGVmdC9yaWdodC9jZW50ZXIsIHRoZSBkZWZhdWx0IG9mIDUwJSBpbiB0aGUgeSBpcyBzdGls
bCBjb3JyZWN0LgotICAgICAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSg1
MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgdmFsdWUyID0g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKTsKIAogICAgIGlmICh2YWx1ZTFGbGFnID09IFlGaWxsUG9zaXRp
b24gfHwgdmFsdWUyRmxhZyA9PSBYRmlsbFBvc2l0aW9uKQogICAgICAgICB2YWx1ZTEuc3dhcCh2
YWx1ZTIpOwpAQCAtNDU3OSwyMCArNDU4OCwyMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxs
UmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdQog
ICAgIENTU1ZhbHVlSUQgaWQgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVSZXBlYXRYKSB7CiAgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0
cnVlOwotICAgICAgICB2YWx1ZTEgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVSZXBlYXQpOwotICAgICAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb1JlcGVhdCk7CisgICAgICAgIHZhbHVlMSA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUmVw
ZWF0KTsKKyAgICAgICAgdmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb1JlcGVhdCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5u
ZXh0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlkID09IENTU1ZhbHVlUmVw
ZWF0WSkgewogICAgICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgdmFs
dWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBl
YXQpOwotICAgICAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVSZXBlYXQpOworICAgICAgICB2YWx1ZTEgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0KTsKKyAgICAgICAg
dmFsdWUyID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVSZXBlYXQpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBDU1NW
YWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVTcGFj
ZSkKLSAgICAgICAgdmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KGlkKTsKKyAgICAgICAgdmFsdWUxID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoaWQpOwogICAgIGVsc2UgewogICAgICAgICB2YWx1ZTEgPSBudWxscHRy
OwogICAgICAgICByZXR1cm47CkBAIC00NjA0LDcgKzQ2MTMsNyBAQCB2b2lkIENTU1BhcnNlcjo6
cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVl
PiYgdmFsdQogICAgIGlmICh2YWx1ZSAmJiAhaXNDb21tYSh2YWx1ZSkpIHsKICAgICAgICAgaWQg
PSB2YWx1ZS0+aWQ7CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJlcGVhdCB8fCBpZCA9PSBD
U1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQgPT0gQ1NTVmFsdWVT
cGFjZSkgewotICAgICAgICAgICAgdmFsdWUyID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKGlkKTsKKyAgICAgICAgICAgIHZhbHVlMiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0
LT5uZXh0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ2MTIsNyArNDYy
MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYg
dmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1CiAKICAgICAvLyBJZiBvbmx5IG9uZSB2YWx1
ZSB3YXMgc3BlY2lmaWVkLCB2YWx1ZTIgaXMgdGhlIHNhbWUgYXMgdmFsdWUxLgogICAgIG1faW1w
bGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMSkuZ2V0
VmFsdWVJRCgpKTsKKyAgICB2YWx1ZTIgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMSkuZ2V0
VmFsdWVJRCgpKTsKIH0KIAogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNp
emUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93Q29tbWEpCkBAIC00NjIxLDEyICs0
NjMwLDEyIEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sJiBhbGxvd0NvbW1hCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKIAogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb250YWluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvdmVyKQotICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS0+aWQpOwogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1
ZTE7CiAKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcGFyc2Vk
VmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
byk7CisgICAgICAgIHBhcnNlZFZhbHVlMSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiAgICAgZWxzZSB7CiAgICAgICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7CiAgICAgICAg
IGlmICghdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRlBlcmNl
bnQpKQpAQCAtNDcwNyw3ICs0NzE2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLAogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZEF0dGFjaG1lbnQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUt
PmlkID09IENTU1ZhbHVlU2Nyb2xsIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaXhl
ZCB8fCBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlTG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShjdXJyZW50VmFsdWUtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRW
YWx1ZS0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ3
MjYsNyArNDczNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgY3VycmVu
dFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBD
U1NWYWx1ZUNvbnRlbnRCb3gKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgocHJvcElkID09
IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAgfHwgcHJvcElkID09IENTU1Byb3BlcnR5
V2Via2l0TWFza0NsaXApCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY3VycmVudFZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVRleHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtp
dFRleHQpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDczNiw3ICs0NzQ1LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBw
cm9wSWQxLAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVBhZGRpbmdCb3ggfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRl
bnRCb3gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ3NjIsNyArNDc3MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUZpbGxQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJv
cElkMSwKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENv
bXBvc2l0ZToKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBv
c2l0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+aWQgPj0gQ1NTVmFs
dWVDbGVhciAmJiBjdXJyZW50VmFsdWUtPmlkIDw9IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxp
c3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTQ3NzIsNyArNDc4MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYgcHJvcElkMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaWdodGVu
IHx8ICBjdXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlQ29sb3JEb2RnZSB8fCBjdXJyZW50VmFs
dWUtPmlkID09IENTU1ZhbHVlQ29sb3JCdXJuCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBj
dXJyZW50VmFsdWUtPmlkID09IENTU1ZhbHVlSGFyZExpZ2h0IHx8IGN1cnJlbnRWYWx1ZS0+aWQg
PT0gQ1NTVmFsdWVTb2Z0TGlnaHQgfHwgY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZURpZmZl
cmVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NT
VmFsdWVFeGNsdXNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY3VycmVudFZhbHVlLT5pZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NzkxLDcgKzQ4MDAsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3Bl
cnR5SUQmIHByb3BJZDEsCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrU291cmNlVHlwZTogewogICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudFZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8gfHwgY3VycmVudFZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUFscGhhIHx8IGN1cnJlbnRWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVMdW1pbmFuY2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShjdXJyZW50VmFsdWUtPmlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKGN1cnJlbnRWYWx1ZS0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBudWxscHRyOwpAQCAtNDg1Nyw3ICs0ODY2LDcgQEAg
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCkKIHsK
ICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
QWx0ZXJuYXRlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVJldmVyc2UgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlQWx0ZXJuYXRlUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDg3Myw3ICs0ODgyLDcgQEAgUmVmUHRyPENTU1Zh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRmlsbE1vZGUoKQogewogICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRm9yd2FyZHMgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlQmFja3dhcmRzIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJvdGgp
Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUtPmlkKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAg
LTQ4ODEsNyArNDg5MCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1h
dGlvbkl0ZXJhdGlvbkNvdW50KCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVJbmZpbml0
ZSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS5pZCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFs
dWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwogICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CkBAIC00ODkzLDcgKzQ5
MDIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25OYW1lKCkK
ICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAg
ICBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1
ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgaWYgKHZh
bHVlLmlkID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyAmJiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgIm5vbmUiKSkpIHsKLSAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZSk7CiAgICAgfQpAQCAtNDkw
NCw3ICs0OTEzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
UGxheVN0YXRlKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUgPSAqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUuaWQgPT0gQ1NTVmFsdWVSdW5uaW5nIHx8IHZhbHVl
LmlkID09IENTU1ZhbHVlUGF1c2VkKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIApAQCAtNDkxMyw3ICs0OTIyLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVHJpZ2dlcigpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUq
IHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENT
U1ZhbHVlQXV0bykKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKIAogICAgIGlmICh2
YWx1ZS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNDk2MCwxNSArNDk2OSwxNSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShBbmltYXRpb25QYXJzZUNvbnRleHQmIGNvbnRleAog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBDU1NQcm9wZXJ0eUlEIHJlc3VsdCA9IGNzc1By
b3BlcnR5SUQodmFsdWUuc3RyaW5nKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShyZXN1
bHQpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgImFsbCIpKSB7CiAgICAgICAg
IGNvbnRleHQuc2F3QW5pbWF0aW9uUHJvcGVydHlLZXl3b3JkKCk7Ci0gICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGwpOworICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVBbGwpOwogICAgIH0KICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJu
b25lIikpIHsKICAgICAgICAgY29udGV4dC5jb21taXRBbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQo
KTsKICAgICAgICAgY29udGV4dC5zYXdBbmltYXRpb25Qcm9wZXJ0eUtleXdvcmQoKTsKLSAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CkBAIC01MDE3LDcgKzUwMjYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2Zvcm1Pcmln
aW5TaG9ydGhhbmQoUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8QwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgdmFsdWUzID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKTsKKyAgICB2YWx1ZTMgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTUwNDMsNyArNTA1Miw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKICAgICBDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUgPSAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUuaWQgPT0gQ1NT
VmFsdWVFYXNlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlTGluZWFyIHx8IHZhbHVlLmlkID09IENT
U1ZhbHVlRWFzZUluIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRWFzZU91dAogICAgICAgICB8fCB2
YWx1ZS5pZCA9PSBDU1NWYWx1ZUVhc2VJbk91dCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVN0ZXBT
dGFydCB8fCB2YWx1ZS5pZCA9PSBDU1NWYWx1ZVN0ZXBFbmQpCi0gICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpOworICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUu
aWQpOwogCiAgICAgLy8gV2UgbXVzdCBiZSBhIGZ1bmN0aW9uLgogICAgIGlmICh2YWx1ZS51bml0
ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKQEAgLTUyNzUsNyArNTI4NCw3IEBAIFJlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRQb3NpdGlvbigpCiAgICAgQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlQXV0bykgewogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
byk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gbnVtZXJpY1ZhbHVlOwpAQCAtNTMxMSwxMSArNTMyMCwxMSBAQCBSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkUG9zaXRpb24oKQogCiAgICAgLy8gRm9yIHRoZSA8
Y3VzdG9tLWlkZW50PiBjYXNlLgogICAgIGlmIChncmlkTGluZU5hbWUgJiYgIW51bWVyaWNWYWx1
ZSAmJiAhaGFzU2VlblNwYW5LZXl3b3JkKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoZ3JpZExpbmVOYW1lLT5nZXRTdHJpbmdWYWx1ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKGdyaWRMaW5lTmFtZS0+Z2V0U3RyaW5nVmFsdWUoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVz
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmIChoYXNTZWVu
U3BhbktleXdvcmQpCi0gICAgICAgIHZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNwYW4pKTsKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQo
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVT
cGFuKSk7CiAgICAgaWYgKG51bWVyaWNWYWx1ZSkKICAgICAgICAgdmFsdWVzLT5hcHBlbmQobnVt
ZXJpY1ZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIGlmIChncmlkTGluZU5hbWUpCkBAIC01
MzI5LDcgKzUzMzgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBncmlkTWlzc2luZ0dyaWRQ
b3NpdGlvblZhbHVlKENTU1ZhbHVlJiB2YWx1ZSkKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmlzU3RyaW5n
KCkpCiAgICAgICAgIHJldHVybiAmdmFsdWU7CiAKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9
CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRJdGVtUG9zaXRpb25TaG9ydGhhbmQoQ1NTUHJv
cGVydHlJRCBzaG9ydGhhbmRJZCwgYm9vbCBpbXBvcnRhbnQpCkBAIC01Mzk1LDcgKzU0MDQsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVSb3dzQW5kQXJlYXMoUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gdGVtcGxhdGVDb2x1bQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIHRlbXBsYXRlUm93cy0+YXBwZW5kKHZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRlbXBsYXRlUm93cy0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pKTsKKyAgICAgICAg
ICAgIHRlbXBsYXRlUm93cy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykpOwogCiAgICAgICAgIC8vIFRoaXMgd2lsbCBo
YW5kbGUgdGhlIHRyYWlsaW5nL2xlYWRpbmcgPGN1c3RvbS1pZGVudD4qIGluIHRoZSBncmFtbWFy
LgogICAgICAgICB0cmFpbGluZ0lkZW50V2FzQWRkZWQgPSBmYWxzZTsKQEAgLTU0MDcsNyArNTQx
Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhcyhQYXNz
UmVmUHRyPENTU1ZhbHVlPiB0ZW1wbGF0ZUNvbHVtCiAgICAgaWYgKHRlbXBsYXRlQ29sdW1ucykK
ICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRHcmlkVGVtcGxhdGVDb2x1bW5z
LCB0ZW1wbGF0ZUNvbHVtbnMsIGltcG9ydGFudCk7CiAgICAgZWxzZQotICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZUNvbHVtbnMsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZUNvbHVtbnMsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSks
IGltcG9ydGFudCk7CiAKICAgICAvLyBbPGxpbmUtbmFtZXM+PyA8c3RyaW5nPiBbPHRyYWNrLXNp
emU+IDxsaW5lLW5hbWVzPl0/IF0rCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZW1wbGF0ZUFyZWFz
ID0gQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZTo6Y3JlYXRlKGdyaWRBcmVhTWFwLCByb3dDb3Vu
dCwgY29sdW1uQ291bnQpOwpAQCAtNTQzMCwxNCArNTQzOSwxNCBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VHcmlkVGVtcGxhdGVTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAKICAgICAvLyAxLSAn
bm9uZScgY2FzZS4KICAgICBpZiAoZmlyc3RWYWx1ZUlzTm9uZSAmJiAhbV92YWx1ZUxpc3QtPm5l
eHQoKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0
ZUNvbHVtbnMsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdy
aWRUZW1wbGF0ZVJvd3MsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdEdyaWRUZW1wbGF0ZUFyZWFzLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXRHcmlkVGVtcGxhdGVDb2x1bW5zLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZVJvd3MsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGlt
cG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0R3JpZFRlbXBs
YXRlQXJlYXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNvbHVtbnNW
YWx1ZSA9IGZpcnN0VmFsdWVJc05vbmUgPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKSA6IHBhcnNlR3JpZFRyYWNrTGlzdCgpOworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY29sdW1uc1ZhbHVlID0gZmlyc3RWYWx1ZUlzTm9uZSA/IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkgOiBwYXJzZUdy
aWRUcmFja0xpc3QoKTsKIAogICAgIC8vIDItIDxncmlkLXRlbXBsYXRlLWNvbHVtbnM+IC8gPGdy
aWQtdGVtcGxhdGUtY29sdW1ucz4gc3ludGF4LgogICAgIGlmIChjb2x1bW5zVmFsdWUpIHsKQEAg
LTU0NDksNyArNTQ1OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVNob3J0
aGFuZChib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZUNvbHVtbnMs
IGNvbHVtbnNWYWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZVJvd3MsIHJvd3NWYWx1ZS5yZWxlYXNl
KCksIGltcG9ydGFudCk7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dEdyaWRUZW1wbGF0ZUFyZWFzLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0R3JpZFRlbXBsYXRlQXJlYXMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTU0NzMsOSArNTQ4Miw5IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAg
aWYgKHBhcnNlR3JpZFRlbXBsYXRlU2hvcnRoYW5kKGltcG9ydGFudCkpIHsKICAgICAgICAgLy8g
SXQgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHRoZSBleHBsaWNpdCBvciB0aGUgaW1wbGljaXQgZ3Jp
ZCBwcm9wZXJ0aWVzIGluIGEgc2luZ2xlIGdyaWQgZGVjbGFyYXRpb24uCiAgICAgICAgIC8vIFRo
ZSBzdWItcHJvcGVydGllcyBub3Qgc3BlY2lmaWVkIGFyZSBzZXQgdG8gdGhlaXIgaW5pdGlhbCB2
YWx1ZSwgYXMgbm9ybWFsIGZvciBzaG9ydGhhbmRzLgotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRBdXRvRmxvdywgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJ
bml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRHcmlkQXV0b0NvbHVtbnMsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5p
dGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0R3JpZEF1dG9Sb3dzLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxW
YWx1ZSgpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dEdyaWRBdXRvRmxvdywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdElu
aXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdlYmtpdEdyaWRBdXRvQ29sdW1ucywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
bXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvUm93cywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTU1MDQsOCArNTUxMyw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUdyaWRTaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gT3RoZXIgb21pdHRlZCB2YWx1ZXMgYXJlIHNldCB0
byB0aGVpciBpbml0aWFsIHZhbHVlcy4KLSAgICAgICAgYXV0b0NvbHVtbnNWYWx1ZSA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgICAgIGF1dG9Sb3dz
VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpOworICAg
ICAgICBhdXRvQ29sdW1uc1ZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
bXBsaWNpdEluaXRpYWxWYWx1ZSgpOworICAgICAgICBhdXRvUm93c1ZhbHVlID0gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpOwogICAgIH0KIAog
ICAgIC8vIGlmIDxncmlkLWF1dG8tcm93cz4gdmFsdWUgaXMgb21pdHRlZCwgaXQgaXMgc2V0IHRv
IHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yIGdyaWQtYXV0by1jb2x1bW5zLgpAQCAtNTUxNyw5ICs1
NTI2LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZFNob3J0aGFuZChib29sIGltcG9ydGFu
dCkKIAogICAgIC8vIEl0IGNhbiBvbmx5IGJlIHNwZWNpZmllZCB0aGUgZXhwbGljaXQgb3IgdGhl
IGltcGxpY2l0IGdyaWQgcHJvcGVydGllcyBpbiBhIHNpbmdsZSBncmlkIGRlY2xhcmF0aW9uLgog
ICAgIC8vIFRoZSBzdWItcHJvcGVydGllcyBub3Qgc3BlY2lmaWVkIGFyZSBzZXQgdG8gdGhlaXIg
aW5pdGlhbCB2YWx1ZSwgYXMgbm9ybWFsIGZvciBzaG9ydGhhbmRzLgotICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0R3JpZFRlbXBsYXRlQ29sdW1ucywgY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZVJvd3MsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlt
cGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXRHcmlkVGVtcGxhdGVBcmVhcywgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdlYmtpdEdyaWRUZW1wbGF0ZUNvbHVtbnMsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZVJvd3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRUZW1wbGF0ZUFyZWFzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTU2MTAsNyArNTYxOSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3QoKQogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZU5vbmUpIHsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CkBAIC01NzA3LDcgKzU3MTYs
NyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tTaXplKENTU1Bh
cnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0KQogICAgIGlucHV0TGlzdC5uZXh0KCk7CiAKICAgICBp
ZiAoY3VycmVudFZhbHVlLmlkID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKTsKIAogICAgIGlmIChjdXJyZW50VmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24gJiYgZXF1YWxJZ25vcmluZ0Nhc2UoY3VycmVudFZhbHVlLmZ1bmN0aW9uLT5u
YW1lLCAibWlubWF4KCIpKSB7CiAgICAgICAgIC8vIFRoZSBzcGVjIGRlZmluZXMgdGhlIGZvbGxv
d2luZyBncmFtbWFyOiBtaW5tYXgoIDx0cmFjay1icmVhZHRoPiAsIDx0cmFjay1icmVhZHRoPiAp
CkBAIC01NzM1LDcgKzU3NDQsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VH
cmlkVHJhY2tTaXplKENTU1BhcnNlclZhbHVlTGlzdCYgaW5wdXRMaXN0KQogUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlR3JpZEJyZWFkdGgoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pZCA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQg
fHwgdmFsdWUuaWQgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQotICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKKyAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLmlkKTsKIAogICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RlIpIHsKICAgICAgICAgZG91YmxlIGZsZXhWYWx1ZSA9IHZhbHVlLmZWYWx1ZTsKQEAgLTU3NDQs
NyArNTc1Myw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdy
aWRCcmVhZHRoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKICAgICAgICAgaWYgKGZsZXhWYWx1ZSA8
PSAwKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGZsZXhWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19G
Uik7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KGZsZXhWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19GUik7CiAgICAgfQogCiAgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwpAQCAtNTc3OCwy
NyArNTc4NywyNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VHcmlkQXV0b0Zs
b3coQ1NTUGFyc2VyVmFsdWVMaXN0JiBpbnB1dExpc3QpCiAgICAgdmFsdWUgPSBpbnB1dExpc3Qu
bmV4dCgpOwogICAgIGlmICghdmFsdWUgfHwgIWlzVmFsaWRHcmlkQXV0b0Zsb3dJZCh2YWx1ZS0+
aWQpKSB7CiAgICAgICAgIGlmIChmaXJzdElkID09IENTU1ZhbHVlRGVuc2UpCi0gICAgICAgICAg
ICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVSb3cpKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUm93KSk7
CiAKLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGZpcnN0SWQpKTsKKyAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJZCkpOwog
ICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWVzOwogICAgIH0KIAogICAgIHN3aXRjaCAoZmlyc3RJ
ZCkgewogICAgIGNhc2UgQ1NTVmFsdWVSb3c6CiAgICAgY2FzZSBDU1NWYWx1ZUNvbHVtbjoKLSAg
ICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGZpcnN0SWQpKTsKKyAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZmlyc3RJZCkpOwogICAgICAg
ICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlRGVuc2UpIHsKLSAgICAgICAgICAgIHBhcnNlZFZh
bHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAg
aW5wdXRMaXN0Lm5leHQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIENT
U1ZhbHVlRGVuc2U6CiAgICAgICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVSb3cgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlQ29sdW1uKSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Cisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAgIGlucHV0TGlz
dC5uZXh0KCk7CiAgICAgICAgIH0KLSAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGZpcnN0SWQpKTsKKyAgICAgICAgcGFyc2Vk
VmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoZmlyc3RJZCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU4MzQsNyArNTg0Myw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0
YW50KQogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgIGlmICht
X3ZhbHVlTGlzdC0+bmV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB2YWxpZDsKICAgICB9CiAKQEAgLTU5MDQsNyArNTkx
Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgICAgIGlmIChudW1BcmdzID09IERBU0hC
T0FSRF9SRUdJT05fU0hPUlRfTlVNX1BBUkFNRVRFUlMgfHwgbnVtQXJncyA9PSAoREFTSEJPQVJE
X1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVSUyoyLTEpKSB7CiAgICAgICAgICAgICAvLyBUaGlz
IG9yaWdpbmFsbHkgdXNlZCBDU1NWYWx1ZUludmFsaWQgYnkgYWNjaWRlbnQuIEl0IG1pZ2h0IGJl
IG1vcmUgbG9naWNhbCB0byB1c2Ugc29tZXRoaW5nIGVsc2UuCi0gICAgICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUludmFsaWQpOworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBhbW91bnQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUludmFsaWQpOwogCiAgICAgICAgICAgICByZWdpb24tPnNldFRvcChh
bW91bnQpOwogICAgICAgICAgICAgcmVnaW9uLT5zZXRSaWdodChhbW91bnQpOwpAQCAtNTkyMSw3
ICs1OTMwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgaWYgKCF2YWxp
ZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUoYXJnV2l0aENhbGN1bGF0aW9uKTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9IGFyZy0+aWQgPT0gQ1NTVmFsdWVB
dXRvID8gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmdXaXRoQ2FsY3VsYXRp
b24pOwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAg
cmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKQEAgLTU5NDEsNyArNTk1MCw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgIH0KIAogICAgIGlmICh2YWxpZCkKLSAgICAgICAgYWRkUHJvcGVydHkocHJv
cElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPihX
VEY6Om1vdmUoZmlyc3RSZWdpb24pKSksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShSZWZQdHI8RGFz
aGJvYXJkUmVnaW9uPihXVEY6Om1vdmUoZmlyc3RSZWdpb24pKSksIGltcG9ydGFudCk7CiAKICAg
ICByZXR1cm4gdmFsaWQ7CiB9CkBAIC02MDQ0LDcgKzYwNTMsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVhcygpCiB7CiAgICAgaWYgKG1fdmFsdWVM
aXN0LT5jdXJyZW50KCkgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVO
b25lKSB7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9uZSk7CiAgICAgfQogCiAgICAgTmFtZWRHcmlkQXJlYU1hcCBncmlkQXJlYU1hcDsK
QEAgLTYwNzksNyArNjA4OCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNv
dW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgYm9vbCBjCiAKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlcGFyYXRvcjsKICAgICBpZiAoIWNvdW50ZXJzKQotICAg
ICAgICBzZXBhcmF0b3IgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShTdHJpbmcoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICBzZXBhcmF0b3IgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKFN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7CiAgICAgZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0
KCk7CiAgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCkBAIC02MDk1LDcgKzYxMDQsNyBAQCBSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb3VudGVyQ29udGVudChDU1NQYXJzZXJWYWx1
ZUxpc3QmIGFyZ3MsIGJvb2wgYwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlzdFN0
eWxlOwogICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7CiAgICAgaWYgKCFhcmd1bWVudCkgLy8g
TWFrZSB0aGUgbGlzdCBzdHlsZSBkZWZhdWx0IGRlY2ltYWwKLSAgICAgICAgbGlzdFN0eWxlID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGVjaW1hbCk7Cisg
ICAgICAgIGxpc3RTdHlsZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlRGVjaW1hbCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChhcmd1
bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1
ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYxMTAsMTAgKzYxMTks
MTAgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NT
UGFyc2VyVmFsdWVMaXN0JiBhcmdzLCBib29sIGMKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgbGlzdFN0eWxlID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKGxpc3RTdHlsZUlEKTsKKyAgICAgICAgbGlzdFN0eWxlID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUobGlzdFN0eWxlSUQp
OwogICAgIH0KIAotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShDb3VudGVy
OjpjcmVhdGUoaWRlbnRpZmllci5yZWxlYXNlKCksIGxpc3RTdHlsZS5yZWxlYXNlKCksIHNlcGFy
YXRvci5yZWxlYXNlKCkpKTsKKyAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShDb3VudGVyOjpjcmVhdGUoaWRlbnRpZmllci5yZWxlYXNlKCksIGxpc3RTdHls
ZS5yZWxlYXNlKCksIHNlcGFyYXRvci5yZWxlYXNlKCkpKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQ2xpcFNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKQEAg
LTYxMzYsNyArNjE0NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHZhbGlkID0gYXJndW1lbnQt
PmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24sIEZMZW5ndGgpOwogICAgICAgICBpZiAoIXZhbGlkKQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gYXJndW1lbnQtPmlkID09
IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUF1dG8pIDogY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBhcmd1
bWVudC0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIGlmIChpID09IDApCiAgICAg
ICAgICAgICByZWN0LT5zZXRUb3AobGVuZ3RoKTsKICAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQpA
QCAtNjE1Nyw3ICs2MTY2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2xpcFNoYXBlKENTU1By
b3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaSsrOwogICAgIH0KICAg
ICBpZiAodmFsaWQpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShXVEY6Om1vdmUocmVjdCkpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQ
cm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoV1RG
Ojptb3ZlKHJlY3QpKSwgaW1wb3J0YW50KTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjI5Myw3ICs2MzAyLDcgQEAgUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2Vy
VmFsdWVMaXN0JiBhcmdzKQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlU2hhcGVSYWRpdXMoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5p
ZCA9PSBDU1NWYWx1ZUNsb3Nlc3RTaWRlIHx8IHZhbHVlLmlkID09IENTU1ZhbHVlRmFydGhlc3RT
aWRlKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLmlkKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKIAogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKICAgICBpZiAoIXZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZykpCkBAIC02NDc5
LDcgKzY0ODgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBl
QW5kT3JCb3goQ1NTUHJvcGVydHlJRCBwcm9wSWQpCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
c2hhcGVWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIHNoYXBlRm91bmQgPSB0
cnVlOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm94VmFsdWUodmFsdWVJZCwgcHJvcElkKSAmJiAh
Ym94Rm91bmQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2Vk
VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7Cisg
ICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7CiAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgICAgICBib3hGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwpAQCAtNjUwNCw3ICs2NTEzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
U2hhcGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCkKIAogICAgIGlmICh2YWx1ZUlkID09
IENTU1ZhbHVlTm9uZSkgewogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwotICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSWQpOworICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWVJZCk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwpA
QCAtNjUyNCw3ICs2NTMzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ2xp
cFBhdGgoKQogCiAgICAgaWYgKHZhbHVlSWQgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWVJZCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlkKTsKICAgICB9CiAgICAgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAgICAgbV92
YWx1ZUxpc3QtPm5leHQoKTsKQEAgLTY1NTcsNyArNjU2Niw3IEBAIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGUoKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHNoYXBlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHNoYXBlLnJlbGVhc2VOb25OdWxsKCkp
OwogfQogCiAvLyBbICdmb250LXN0eWxlJyB8fCAnZm9udC12YXJpYW50JyB8fCAnZm9udC13ZWln
aHQnIF0/ICdmb250LXNpemUnIFsgLyAnbGluZS1oZWlnaHQnIF0/ICdmb250LWZhbWlseScKQEAg
LTY1NzcsMTEgKzY1ODYsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udChib29sIGltcG9y
dGFudCkKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIGlmICghZm9udFN0eWxlUGFyc2VkICYm
IGlzVmFsaWRLZXl3b3JkUHJvcGVydHlBbmRWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgdmFs
dWUtPmlkLCBtX2NvbnRleHQsIG1fc3R5bGVTaGVldCkpIHsKLSAgICAgICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFN0eWxlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgZm9udFN0eWxl
UGFyc2VkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICghZm9udFZhcmlhbnRQYXJzZWQgJiYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTbWFs
bENhcHMpKSB7CiAgICAgICAgICAgICAvLyBGb250IHZhcmlhbnQgaW4gdGhlIHNob3J0aGFuZCBp
cyBwYXJ0aWN1bGFyLCBpdCBvbmx5IGFjY2VwdHMgbm9ybWFsIG9yIHNtYWxsLWNhcHMuCi0gICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CiAg
ICAgICAgICAgICBmb250VmFyaWFudFBhcnNlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAo
IWZvbnRXZWlnaHRQYXJzZWQgJiYgcGFyc2VGb250V2VpZ2h0KGltcG9ydGFudCkpCiAgICAgICAg
ICAgICBmb250V2VpZ2h0UGFyc2VkID0gdHJ1ZTsKQEAgLTY1OTQsMTEgKzY2MDMsMTEgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRm9udChib29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKCFmb250U3R5bGVQYXJzZWQpCi0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFN0eWxlLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOworICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTdHlsZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQsIHRydWUpOwogICAgIGlmICgh
Zm9udFZhcmlhbnRQYXJzZWQpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZh
cmlhbnQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCksIGltcG9ydGFudCwgdHJ1ZSk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dFZhcmlhbnQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50LCB0cnVlKTsKICAgICBpZiAoIWZvbnRXZWlnaHRQ
YXJzZWQpCi0gICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50
LCB0cnVlKTsKKyAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCksIGltcG9ydGFudCwgdHJ1ZSk7CiAKICAgICAvLyBOb3cgYSBmb250IHNpemUgX211c3RfIGNv
bWUuCiAgICAgLy8gPGFic29sdXRlLXNpemU+IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxlbmd0aD4g
fCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CkBAIC02NjE3LDcgKzY2MjYsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoIXBhcnNlTGluZUhl
aWdodChpbXBvcnRhbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQot
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCwgdHJ1ZSk7
CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBv
cnRhbnQsIHRydWUpOwogCiAgICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZEZhbWlseVZhbHVlID0gcGFyc2VGb250RmFtaWx5KCk7CkBA
IC02NjQ5LDE0ICs2NjU4LDE0IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUZvbnQoYm9v
bCBpbXBvcnRhbnQpCiAKICAgICAvLyBXZSBtdXN0IHNldCBmb250J3MgY29uc3RpdHVlbnQgcHJv
cGVydGllcywgZXZlbiBmb3Igc3lzdGVtIGZvbnRzLCBzbyB0aGUgY2FzY2FkZSBmdW5jdGlvbnMg
Y29ycmVjdGx5LgogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5Rm9u
dCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShmb250RGVzY3JpcHRpb24uaXRhbGljKCkgPT0gRm9udEl0
YWxpY09uID8gQ1NTVmFsdWVJdGFsaWMgOiBDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCk7Ci0g
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpLCBpbXBvcnRhbnQpOwotICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGZv
bnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgp
LCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShmb250RGVzY3JpcHRp
b24uaXRhbGljKCkgPT0gRm9udEl0YWxpY09uID8gQ1NTVmFsdWVJdGFsaWMgOiBDU1NWYWx1ZU5v
cm1hbCksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShmb250RGVzY3JpcHRpb24u
c3BlY2lmaWVkU2l6ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSwgaW1wb3J0YW50KTsK
ICAgICBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlQ29tbWFTZXBhcmF0ZWQoKTsKLSAgICBmb250RmFtaWx5TGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmb250RGVzY3JpcHRpb24uZmFtaWx5QXQoMCks
IEZyb21TeXN0ZW1Gb250SUQ6OlllcykpOworICAgIGZvbnRGYW1pbHlMaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZm9udERlc2NyaXB0
aW9uLmZhbWlseUF0KDApLCBGcm9tU3lzdGVtRm9udElEOjpZZXMpKTsKICAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIFdURjo6bW92ZShmb250RmFtaWx5TGlzdCksIGltcG9y
dGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSwgaW1wb3J0YW50KTsK
LSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCksIGltcG9ydGFudCk7CisgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQpOworICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpLCBpbXBvcnRhbnQpOwog
fQogCiBjbGFzcyBGb250RmFtaWx5VmFsdWVCdWlsZGVyIHsKQEAgLTY2ODMsNyArNjY5Miw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChtX2J1aWxkZXIuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2xpc3QuYXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUZvbnRGYW1pbHlWYWx1ZShtX2J1aWxkZXIudG9TdHJpbmcoKSkpOworICAgICAgICBtX2xpc3Qu
YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKG1f
YnVpbGRlci50b1N0cmluZygpKSk7CiAgICAgICAgIG1fYnVpbGRlci5jbGVhcigpOwogICAgIH0K
IApAQCAtNjcyNyw3ICs2NzM2LDcgQEAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpw
YXJzZUZvbnRGYW1pbHkoKQogICAgICAgICAgICAgaWYgKGluRmFtaWx5KQogICAgICAgICAgICAg
ICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZhbHVlLT5zdHJpbmcpOwogICAgICAgICAgICAgZWxzZSBp
ZiAobmV4dFZhbEJyZWFrc0ZvbnQgfHwgIW5leHRWYWxJc0ZvbnROYW1lKQotICAgICAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUtPmlkKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5jb21taXQoKTsKICAgICAgICAg
ICAgICAgICBmYW1pbHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKQEAgLTY3MzcsMTIgKzY3
NDYsMTIgQEAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHko
KQogICAgICAgICAgICAgLy8gU3RyaW5ncyBuZXZlciBzaGFyZSBpbiBhIGZhbWlseSBuYW1lLgog
ICAgICAgICAgICAgaW5GYW1pbHkgPSBmYWxzZTsKICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIu
Y29tbWl0KCk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
Rm9udEZhbWlseVZhbHVlKHZhbHVlLT5zdHJpbmcpKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSh2YWx1ZS0+
c3RyaW5nKSk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICAgICAgaWYgKGluRmFtaWx5KQogICAgICAgICAg
ICAgICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZhbHVlLT5zdHJpbmcpOwogICAgICAgICAgICAgZWxz
ZSBpZiAobmV4dFZhbEJyZWFrc0ZvbnQgfHwgIW5leHRWYWxJc0ZvbnROYW1lKQotICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVGb250RmFtaWx5VmFsdWUo
dmFsdWUtPnN0cmluZykpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSh2YWx1ZS0+c3RyaW5nKSk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmNvbW1pdCgp
OwogICAgICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZhbHVlLT5zdHJpbmcpOwpAQCAt
NjgxNCwxMiArNjgyMywxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250VmFyaWFudChib29s
IGltcG9ydGFudCkKICAgICAgICAgaWYgKCFleHBlY3RDb21tYSkgewogICAgICAgICAgICAgZXhw
ZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcykKLSAgICAgICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsK
KyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgZWxzZSBpZiAodmFs
LT5pZCA9PSBDU1NWYWx1ZUFsbCAmJiAhdmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgLy8gJ2Fs
bCcgaXMgb25seSBhbGxvd2VkIGluIEBmb250LWZhY2UgYW5kIHdpdGggbm8gb3RoZXIgdmFsdWVz
LiBNYWtlIGEgdmFsdWUgbGlzdCB0bwogICAgICAgICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQg
d2UgYXJlIGluIHRoZSBAZm9udC1mYWNlIGNhc2UuCiAgICAgICAgICAgICAgICAgdmFsdWVzID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQp
OworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSBpZiAodmFsLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWwt
PmlWYWx1ZSA9PSAnLCcpIHsKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gZmFsc2U7CkBAIC02
ODYxLDE0ICs2ODcwLDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRXZWlnaHQoYm9vbCBp
bXBvcnRhbnQpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlID0gKm1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7CiAgICAgaWYgKCh2YWx1ZS5pZCA+PSBDU1NWYWx1ZU5vcm1hbCkgJiYgKHZhbHVl
LmlkIDw9IENTU1ZhbHVlOTAwKSkgewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCks
IGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQp
LCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24odmFsdWUpOwogICAgIGlmICh2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTUXVpcmtz
TW9kZSkpIHsKICAgICAgICAgaW50IHdlaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGFyc2VkRG91
YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGlmICghKHdlaWdodCAlIDEwMCkg
JiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKSB7Ci0gICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShjcmVhdGVGb250V2VpZ2h0VmFsdWVLZXl3b3JkKHdlaWdodCkpLCBpbXBvcnRhbnQp
OworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjcmVhdGVGb250V2VpZ2h0
VmFsdWVLZXl3b3JkKHdlaWdodCkpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC02ODgwLDcgKzY4ODksNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VGb250U3ludGhlc2lzKGJvb2wgaW1wb3J0YW50KQogICAgIC8vIG5vbmUgfCBbIHdl
aWdodCB8fCBzdHlsZSBdCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkg
ewotICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTeW50aGVzaXMsIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwor
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTeW50aGVzaXMsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9y
dGFudCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTY5MDMsOSArNjkxMiw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRT
eW50aGVzaXMoYm9vbCBpbXBvcnRhbnQpCiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmIChlbmNvdW50
ZXJlZFdlaWdodCkKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlaWdodCkpOworICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWln
aHQpKTsKICAgICBpZiAoZW5jb3VudGVyZWRTdHlsZSkKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVN0eWxlKSk7CisgICAg
ICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZVN0eWxlKSk7CiAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U3ludGhlc2lzLCBsaXN0LnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTc1MTIsNyArNzUyMSw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKICAgICBSR0JBMzIgYyA9IENv
bG9yOjp0cmFuc3BhcmVudDsKICAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUodmFsdWUgPyAq
dmFsdWUgOiAqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKGMpOworICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoYyk7CiB9
CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yRnJvbVZhbHVlKENTU1BhcnNlclZhbHVlJiB2
YWx1ZSwgUkdCQTMyJiBjKQpAQCAtNzY1OCw3ICs3NjY3LDcgQEAgc3RydWN0IFNoYWRvd1BhcnNl
Q29udGV4dCB7CiAKICAgICB2b2lkIGNvbW1pdFN0eWxlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHN0eWxlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLmlkKTsKKyAgICAgICAgc3R5bGUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiAgICAgICAgIGFsbG93U3R5bGUgPSBm
YWxzZTsKICAgICAgICAgaWYgKGFsbG93WCkKICAgICAgICAgICAgIGFsbG93QnJlYWsgPSBmYWxz
ZTsKQEAgLTc3MzIsNyArNzc0MSw3IEBAIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6
cGFyc2VTaGFkb3coQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIENTU1ByCiAgICAgICAg
ICAgICBpZiAoaXNDb2xvcikgewogICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0Nv
bG9yKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICBwYXJzZWRDb2xvciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpOworICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKCFwYXJzZWRDb2xvcikKQEAgLTc3NzAsNyArNzc3OSw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICBjYXNlIENTU1ZhbHVlQmVsb3c6CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWVMZWZ0OgogICAgICAgICBjYXNlIENTU1ZhbHVlUmlnaHQ6Ci0gICAgICAgICAgICBkaXJlY3Rp
b24gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKKyAg
ICAgICAgICAgIGRpcmVjdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc3ODAsNyArNzc4OSw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IG9mZnNldDsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICBvZmZzZXQg
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KTsKKyAgICAgICAgb2Zmc2V0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICBlbHNlIHsKICAgICAgICAgVmFs
dWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKICAgICAgICAg
aWYgKCF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGUGVyY2Vu
dCkpCkBAIC03ODE5LDcgKzc4MjgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbGV4KENTU1Bh
cnNlclZhbHVlTGlzdCYgYXJncywgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgZmxl
eFNocmluayA9IHBhcnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAg
ICAgICBlbHNlIGlmICghcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkgewog
ICAgICAgICAgICAgICAgIC8vIGZsZXggb25seSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVu
aXRzKSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVl
biBzZXQuCi0gICAgICAgICAgICAgICAgZmxleEJhc2lzID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICAgICAgZmxl
eEJhc2lzID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2Ugb25seSBhbGxvdyAzIG51bWJlcnMgd2l0aG91dCB1bml0cyBpZiB0aGUgbGFzdCB2
YWx1ZSBpcyAwLiBFLmcuLCBmbGV4OjEgMSAxIGlzIGludmFsaWQuCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNzgzOCwxMCArNzg0NywxMCBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VGbGV4KENTU1BhcnNlclZhbHVlTGlzdCYgYXJncywgYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYg
KGZsZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKICAgICAgICAgZmxleFNocmluayA9IDE7CiAgICAg
aWYgKCFmbGV4QmFzaXMpCi0gICAgICAgIGZsZXhCYXNpcyA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICBmbGV4QmFzaXMg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwogCi0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4R3JvdywgY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY2xhbXBUb0Zsb2F0KGZsZXhHcm93KSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5RmxleFNocmluaywgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY2xhbXBUb0Zsb2F0
KGZsZXhTaHJpbmspLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7
CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlGbGV4R3JvdywgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShjbGFtcFRvRmxvYXQoZmxleEdyb3cpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlGbGV4U2hyaW5rLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNsYW1w
VG9GbG9hdChmbGV4U2hyaW5rKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBpbXBv
cnRhbnQpOwogICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5RmxleEJhc2lzLCBmbGV4QmFzaXMs
IGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03OTQ3LDcgKzc5NTYsNyBAQCBz
dHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAgICAgICBpZiAodmFsdWUpCiAgICAg
ICAgICAgICBwYXJzZXIuYWRkUHJvcGVydHkocHJvcElkLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VyLmFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFs
dWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50LCB0cnVlKTsK
KyAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50LCB0cnVlKTsK
ICAgICB9CiAKICAgICBib29sIG1fY2FuQWR2YW5jZTsKQEAgLTc5OTcsNyArODAwNiw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQ
dHI8Q1NTVmFsdWU+JiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUtPmlkID09IENTU1Zh
bHVlTm9uZSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LmNvbW1pdEltYWdlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFj
b250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93SW1hZ2VTbGljZSgpKSB7CkBAIC04
MDU1LDE0ICs4MDY0LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUmVwZWF0
KFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKICAgICBpZiAoIXZhbCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmIChpc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAg
ICAgICAgZmlyc3RWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWwtPmlkKTsKKyAgICAgICAgZmlyc3RWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgdmFsID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICBpZiAodmFsKSB7
CiAgICAgICAgIGlmIChpc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAgICAg
ICAgICAgIHNlY29uZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbC0+aWQpOworICAgICAgICAgICAgc2Vjb25kVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAgICAgICAgZWxzZSBpZiAo
IWluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEg
c2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC04MTM4LDcgKzgxNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHF1YWQtPnNldExlZnQobV9s
ZWZ0KTsKIAogICAgICAgICAvLyBNYWtlIG91ciBuZXcgYm9yZGVyIGltYWdlIHZhbHVlIG5vdy4K
LSAgICAgICAgcmV0dXJuIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTo6Y3JlYXRlKGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKFdURjo6bW92ZShxdWFkKSksIG1fZmlsbCk7CisgICAgICAgIHJl
dHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKFdURjo6bW92ZShxdWFkKSksIG1fZmlsbCk7CiAgICAgfQogCiBw
cml2YXRlOgpAQCAtODIxMCw3ICs4MjE5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwcmltaXRpdmVWYWx1ZTsKICAgICAgICAgaWYgKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
cHJpbWl0aXZlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZCk7CisgICAgICAgICAgICBwcmltaXRpdmVWYWx1
ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
cmltaXRpdmVWYWx1ZSA9IG1fcGFyc2VyLmNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZVdpdGhDYWxjdWxhdGlvbik7CiAKQEAgLTgyNTYsNyArODI2NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcXVhZC0+c2V0TGVmdChtX2xlZnQpOwogCiAgICAgICAgIC8vIE1ha2Ugb3VyIG5ldyB2YWx1
ZSBub3cuCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShXVEY6Om1v
dmUocXVhZCkpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZShXVEY6Om1vdmUocXVhZCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTgzNzQsNyAr
ODM4Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFzcGVjdFJhdGlvKGJvb2wgaW1wb3J0YW50
KQogICAgIGlmIChudW0gPT0gMSkgewogICAgICAgICBDU1NWYWx1ZUlEIHZhbHVlSWQgPSBtX3Zh
bHVlTGlzdC0+dmFsdWVBdCgwKS0+aWQ7CiAgICAgICAgIGlmICh2YWx1ZUlkID09IENTU1ZhbHVl
QXV0byB8fCB2YWx1ZUlkID09IENTU1ZhbHVlRnJvbURpbWVuc2lvbnMgfHwgdmFsdWVJZCA9PSBD
U1NWYWx1ZUZyb21JbnRyaW5zaWMpIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0QXNwZWN0UmF0aW8sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZUlkKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0QXNwZWN0UmF0aW8sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlSWQpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04NDI3LDcgKzg0MzYsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVlLCBi
b29sIGltcG9ydAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIoY291bnRlck5hbWUucmVsZWFzZSgpLAotICAg
ICAgICAgICAgICAgICAgICBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpKTsKKyAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikpKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IElEOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQpAQCAtODQ1MCwxNCArODQ1OSwxNCBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChDU1NQ
YXJzZXJWYWx1ZQogICAgIGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
SURFTlQpIHsKICAgICAgICAgaWYgKChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgImxlZnQiKSAm
JiBob3Jpem9udGFsKQogICAgICAgICAgICAgfHwgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAi
dG9wIikgJiYgIWhvcml6b250YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAgICBlbHNlIGlm
ICgoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJyaWdodCIpICYmIGhvcml6b250YWwpCiAgICAg
ICAgICAgICB8fCAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJib3R0b20iKSAmJiAhaG9yaXpv
bnRhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgx
MDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgcmVz
dWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgxMDAuLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZSwgImNlbnRlciIpKQotICAgICAgICAgICAgcmVzdWx0ID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoNTAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OworICAgICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZSg1MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfSBlbHNl
IGlmICh2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSIHx8IHZhbHVl
LnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICByZXN1
bHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS5mVmFsdWUsIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKTsKKyAgICAgICAgcmVz
dWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSh2YWx1ZS5mVmFsdWUs
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04NDgyLDEzICs4NDkxLDEzIEBAIHN0YXRpYyBi
b29sIHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciYgcGFyc2VyLCBD
U1NQYXJzZXJWYWx1ZSYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIpKQotICAgICAg
ICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9u
ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0b3AubV9wb3Np
dGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
OwogCiAgICAgICAgIENTU1ZhbHVlSUQgaWQgPSBhcmdzLT5jdXJyZW50KCktPmlkOwogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0IHx8IENTU1BhcnNlcjo6aXNWYWxpZFN5c3Rl
bUNvbG9yVmFsdWUoaWQpIHx8IGlkID09IENTU1ZhbHVlTWVudSkKLSAgICAgICAgICAgIHN0b3Au
bV9jb2xvciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAg
ICAgICAgICBzdG9wLm1fY29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShpZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0b3AubV9jb2xv
ciA9IHBhcnNlci5wYXJzZUNvbG9yKGFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgICAgIGlmICghc3Rv
cC5tX2NvbG9yKQpAQCAtODUwMiw5ICs4NTExLDkgQEAgc3RhdGljIGJvb2wgcGFyc2VEZXByZWNh
dGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyJiBwYXJzZXIsIENTU1BhcnNlclZhbHVlJgog
CiAgICAgICAgIENTU1BhcnNlclZhbHVlKiBzdG9wQXJnID0gYXJncy0+Y3VycmVudCgpOwogICAg
ICAgICBpZiAoc3RvcEFyZy0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpCi0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdG9wQXJnLT5mVmFsdWUgLyAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKKyAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUoc3RvcEFyZy0+ZlZhbHVlIC8gMTAwLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CiAgICAgICAgIGVsc2UgaWYgKHN0b3BBcmctPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdG9wQXJnLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc3RvcEFyZy0+ZlZhbHVlLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtODUxNSw3ICs4NTI0LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3Jh
ZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyJiBwYXJzZXIsIENTU1BhcnNlclZhbHVlJgogICAgICAg
ICBzdG9wQXJnID0gYXJncy0+bmV4dCgpOwogICAgICAgICBDU1NWYWx1ZUlEIGlkID0gc3RvcEFy
Zy0+aWQ7CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2Vy
Ojppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQotICAg
ICAgICAgICAgc3RvcC5tX2NvbG9yID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkKTsKKyAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc3RvcC5tX2NvbG9yID0gcGFyc2VyLnBhcnNlQ29sb3Ioc3RvcEFyZyk7CiAgICAgICAgIGlm
ICghc3RvcC5tX2NvbG9yKQpAQCAtODY3OSwxNCArODY4OCwxNCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGcm9tU2lkZUtleXdvcmQoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlLAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUuaWQpOworICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS5pZCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoQ1NTUGFyc2VyJiBwYXJzZXIsIENT
U1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKICAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWUuaWQ7CiAg
ICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCBDU1NQYXJzZXI6OmlzVmFsaWRTeXN0
ZW1Db2xvclZhbHVlKGlkKSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUgfHwgaWQgPT0gQ1NTVmFsdWVD
dXJyZW50Y29sb3IpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoaWQpOworICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwogCiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZUNvbG9y
KCZ2YWx1ZSk7CiB9CkBAIC04NzQ0LDcgKzg3NTMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
ZXByZWNhdGVkTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIFJl
ZgogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzdGFydFggJiYgIXN0YXJ0WSkKLSAgICAgICAg
ICAgIHN0YXJ0WSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVRvcCk7CisgICAgICAgICAgICBzdGFydFkgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVRvcCk7CiAKICAgICAgICAgcmVzdWx0LT5zZXRG
aXJzdFgoc3RhcnRYLnJlbGVhc2UoKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHN0YXJ0
WS5yZWxlYXNlKCkpOwpAQCAtODgxMiw3ICs4ODIxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
RGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBS
ZWYKICAgICAgICAgc3dpdGNoIChhcmd1bWVudC0+aWQpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1
ZUNpcmNsZToKICAgICAgICAgY2FzZSBDU1NWYWx1ZUVsbGlwc2U6Ci0gICAgICAgICAgICBzaGFw
ZVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGFyZ3VtZW50LT5p
ZCk7CisgICAgICAgICAgICBzaGFwZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKICAgICAgICAgICAgIGZvdW5kVmFs
dWUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9z
ZXN0U2lkZToKQEAgLTg4MjEsNyArODgzMCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJl
Y2F0ZWRSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmCiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVGYXJ0aGVzdENvcm5lcjoKICAgICAgICAgY2FzZSBDU1NWYWx1
ZUNvbnRhaW46CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb3ZlcjoKLSAgICAgICAgICAgIHNpemVW
YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQp
OworICAgICAgICAgICAgc2l6ZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoYXJndW1lbnQtPmlkKTsKICAgICAgICAgICAgIGZvdW5kVmFsdWUg
PSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC04OTg1LDcg
Kzg5OTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJW
YWx1ZUxpc3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUVsbGlwc2U6CiAgICAgICAgICAgICAgICAgaWYgKHNoYXBlVmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzaGFwZVZhbHVlID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGFyZ3VtZW50LT5pZCk7CisgICAgICAg
ICAgICAgICAgc2hhcGVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGFyZ3VtZW50LT5pZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VzdFNpZGU6CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlQ2xvc2VzdENvcm5lcjoKQEAgLTg5OTMsNyArOTAwMiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTVmFsCiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFydGhlc3RDb3JuZXI6CiAgICAgICAg
ICAgICAgICAgaWYgKHNpemVWYWx1ZSB8fCBob3Jpem9udGFsU2l6ZSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNpemVWYWx1ZSA9IGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhcmd1bWVudC0+aWQpOworICAgICAgICAgICAg
ICAgIHNpemVWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGFyZ3VtZW50LT5pZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJhZElkZW50ID0gdHJ1ZTsKQEAgLTkyNzgsOSAr
OTI4Nyw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNyb3NzZmFkZShDU1NQYXJzZXJWYWx1ZUxp
c3QmIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVlPiYKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIGlmIChhcmd1bWVudC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpCi0gICAgICAgIHBlcmNlbnRhZ2UgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShjbGFtcFRvPGRvdWJsZT4oYXJndW1lbnQtPmZWYWx1ZSAvIDEwMCwgMCwgMSksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcGVyY2VudGFnZSA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KGFyZ3VtZW50LT5mVmFs
dWUgLyAxMDAsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgZWxz
ZSBpZiAoYXJndW1lbnQtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0g
ICAgICAgIHBlcmNlbnRhZ2UgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjbGFtcFRvPGRv
dWJsZT4oYXJndW1lbnQtPmZWYWx1ZSwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKTsKKyAgICAgICAgcGVyY2VudGFnZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KGFyZ3VtZW50LT5mVmFsdWUsIDAsIDEpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTkzMzUsMTAgKzkzNDQsMTAgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlSW1hZ2VSZXNvbHV0aW9uKCkKICAgICB3aGlsZSAodmFsdWUpIHsKICAgICAgICAgVmFsdWVX
aXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24oKnZhbHVlKTsKICAgICAgICAgaWYg
KCFoYXZlRnJvbUltYWdlICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZyb21JbWFnZSkgewotICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAg
IGhhdmVGcm9tSW1hZ2UgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKCFoYXZlU25hcCAmJiB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTbmFwKSB7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAgaGF2ZVNuYXAgPSB0cnVlOwogICAgICAg
ICB9IGVsc2UgaWYgKCFoYXZlUmVzb2x1dGlvbiAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZSZXNvbHV0aW9uIHwgRk5vbk5lZykgJiYgdmFsdWUtPmZWYWx1ZSA+IDApIHsK
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFs
dWVXaXRoQ2FsY3VsYXRpb24pKTsKQEAgLTkzOTAsNyArOTM5OSw3IEBAIFJlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUltYWdlU2V0KCkKICAgICAgICAgfQogICAgICAgICBpZiAoaW1h
Z2VTY2FsZUZhY3RvciA8PSAwKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGltYWdlU2V0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW1hZ2VTY2FsZUZh
Y3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgaW1hZ2VTZXQt
PmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGltYWdlU2NhbGVG
YWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAKICAgICAgICAgLy8gSWYg
dGhlcmUgYXJlIG5vIG1vcmUgYXJndW1lbnRzLCB3ZSdyZSBkb25lLgogICAgICAgICBhcmcgPSBm
dW5jdGlvbkFyZ3MtPm5leHQoKTsKQEAgLTk5NjIsNyArOTk3MSw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUZsb3dUaHJlYWQoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9u
ZSkgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtOTk3MCw5ICs5OTc5LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChDU1NQ
cm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYgKCFpbnB1dFByb3BlcnR5
LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwg
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOwogICAgIH0gZWxzZQotICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSksIGltcG9ydGFudCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTk5OTQsMTUg
KzEwMDAzLDE1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZ2lvblRocmVhZChDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBv
cnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIFN0cmluZyBpbnB1dFByb3BlcnR5ID0gU3RyaW5nKHZhbHVlLT5zdHJp
bmcpOwogICAgICAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBpZiAoIXZhbGlkRmxvd05hbWUoaW5wdXRQcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RyksIGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MDEwNSw3ICsxMDExNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHREZWNvcmF0aW9uKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIHsKICAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZSAmJiB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgIGFkZFRleHREZWNvcmF0aW9uUHJvcGVy
dHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eShwcm9w
SWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSksIGltcG9ydGFudCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEwMTIxLDcgKzEwMTMwLDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVGV4dERlY29yYXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICAgICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdExldHRlcnByZXNzOgogI2VuZGlmCi0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CkBAIC0xMDE1MSw3ICsxMDE2MCw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVRleHREZWNvcmF0aW9uU2tpcChib29sIGltcG9ydGFudCkKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUF1dG86CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVJbms6CiAgICAgICAg
IGNhc2UgQ1NTVmFsdWVPYmplY3RzOgotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblNraXAsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTAxNzMsNyArMTAxODIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0VW5kZXJs
aW5lUG9zaXRpb24oYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4
dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRVbmRlcmxpbmVQb3NpdGlvbiwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUuaWQpLCBpbXBvcnRhbnQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAg
LTEwMjAwLDcgKzEwMjA5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVGV4dEVtcGhhc2lzU3R5
bGUoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25l
KSB7CiAgICAgICAgICAgICBpZiAoZmlsbCB8fCBzaGFwZSB8fCAodmFsdWVMaXN0U2l6ZSAhPSAx
ICYmICFpblNob3J0aGFuZCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlLCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0
YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhh
c2lzU3R5bGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEwMjA4LDExICsx
MDIxNywxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNTdHlsZShib29sIGlt
cG9ydGFudCkKICAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU9wZW4gfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlRmlsbGVkKSB7CiAgICAgICAgICAgICBpZiAoZmlsbCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmaWxsID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgICAgICBmaWxsID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsK
ICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVEb3QgfHwgdmFsdWUtPmlk
ID09IENTU1ZhbHVlQ2lyY2xlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZURvdWJsZUNpcmNsZSB8
fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVUcmlhbmdsZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVT
ZXNhbWUpIHsKICAgICAgICAgICAgIGlmIChzaGFwZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBzaGFwZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgICAgICAgICAgc2hhcGUgPSBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgICAgICB9IGVs
c2UgaWYgKCFpblNob3J0aGFuZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBlbHNlCkBAIC0xMDI3Nyw5ICsxMDI4Niw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHRF
bXBoYXNpc1Bvc2l0aW9uKGJvb2wgaW1wb3J0YW50KQogICAgIGlmICghZm91bmRPdmVyT3JVbmRl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Qg
PSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShvdmVyVW5kZXJWYWx1ZUlEKSk7
CisgICAgbGlzdC0+YXBwZW5kKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKG92ZXJVbmRlclZhbHVlSUQpKTsKICAgICBpZiAoZm91bmRMZWZ0T3JSaWdodCkK
LSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShsZWZ0UmlnaHRWYWx1ZUlEKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShsZWZ0UmlnaHRWYWx1ZUlEKSk7CiAg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbiwgbGlz
dCwgaW1wb3J0YW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMzA0LDEwICsxMDMxMywx
MCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUZXh0SW5kZW50KCkKICAgICAg
ICAgfQogI2lmIEVOQUJMRShDU1MzX1RFWFQpCiAgICAgICAgIGVsc2UgaWYgKCFoYXNFYWNoTGlu
ZSAmJiB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRFYWNoTGluZSkgewotICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVdlYmtpdEVhY2hMaW5lKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJraXRFYWNoTGlu
ZSkpOwogICAgICAgICAgICAgaGFzRWFjaExpbmUgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYg
KCFoYXNIYW5naW5nICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtpdEhhbmdpbmcpIHsKLSAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVXZWJraXRIYW5naW5nKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJr
aXRIYW5naW5nKSk7CiAgICAgICAgICAgICBoYXNIYW5naW5nID0gdHJ1ZTsKICAgICAgICAgfQog
I2VuZGlmCkBAIC0xMDQwNyw3ICsxMDQxNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRG
ZWF0dXJlVGFnKENTU1ZhbHVlTGlzdCYgc2V0dGluZ3MpCiBib29sIENTU1BhcnNlcjo6cGFyc2VG
b250RmVhdHVyZVNldHRpbmdzKGJvb2wgaW1wb3J0YW50KQogewogICAgIGlmIChtX3ZhbHVlTGlz
dC0+c2l6ZSgpID09IDEgJiYgbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQgPT0gQ1NTVmFsdWVO
b3JtYWwpIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxWYWx1ZSA9
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7Cisg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsVmFsdWUgPSBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5ncywgbm9ybWFsVmFsdWUucmVsZWFzZSgpLCBpbXBv
cnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNDQ3LDIxICsxMDQ1NiwyMSBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VGb250VmFyaWFudExpZ2F0dXJlcyhib29sIGltcG9ydGFudCkK
ICAgICAgICAgICAgIGlmIChzYXdDb21tb25MaWdhdHVyZXNWYWx1ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBzYXdDb21tb25MaWdhdHVyZXNWYWx1ZSA9IHRy
dWU7Ci0gICAgICAgICAgICBsaWdhdHVyZVZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgIGxpZ2F0dXJlVmFs
dWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1
ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKICAgICAgICAgY2FzZSBDU1NWYWx1ZURpc2NyZXRp
b25hcnlMaWdhdHVyZXM6CiAgICAgICAgICAgICBpZiAoc2F3RGlzY3JldGlvbmFyeUxpZ2F0dXJl
c1ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHNhd0Rp
c2NyZXRpb25hcnlMaWdhdHVyZXNWYWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBsaWdhdHVyZVZh
bHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpKTsKKyAgICAgICAgICAgIGxpZ2F0dXJlVmFsdWVzLT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXM6CiAgICAgICAgICAgICBpZiAo
c2F3SGlzdG9yaWNhbExpZ2F0dXJlc1ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIHNhd0hpc3RvcmljYWxMaWdhdHVyZXNWYWx1ZSA9IHRydWU7Ci0gICAg
ICAgICAgICBsaWdhdHVyZVZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgIGxpZ2F0dXJlVmFsdWVzLT5hcHBl
bmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTEwNTExLDExICsxMDUyMCwxMSBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VXaWxsQ2hhbmdlKGJvb2wgaW1wb3J0YW50KQogCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY3NzVmFsdWU7CiAgICAgICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTY3JvbGxQb3Np
dGlvbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb250ZW50cykKLSAgICAgICAgICAgIGNzc1Zh
bHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7Cisg
ICAgICAgICAgICBjc3NWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRCh2YWx1ZS0+c3RyaW5nKTsKICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5SW52YWxpZCkKLSAgICAgICAg
ICAgICAgICBjc3NWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShw
cm9wZXJ0eUlEKTsKKyAgICAgICAgICAgICAgICBjc3NWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHByb3BlcnR5SUQpOwogICAgICAgICAgICAg
ZWxzZSAvLyBUaGlzIG1pZ2h0IGJlIGEgcHJvcGVydHkgd2UgZG9uJ3Qgc3VwcG9ydC4KICAgICAg
ICAgICAgICAgICBjc3NWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKCp2YWx1ZSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKaW5kZXggYWUzZTBmZDRh
ZWI2MGQ2ZGM4ODZkYzkxYjliMDA0YzVmNWM0OTFkYS4uYWEyYTdkNDJiOWY3Y2FmMDhmYmM1YTQx
MDFhOTIxN2Q4ZTRmYmRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NWYWx1ZVBvb2wmIGNzc1Zh
bHVlUG9vbCgpCitDU1NWYWx1ZVBvb2wmIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q1NTVmFsdWVQb29sPiBwb29sOwogICAgIHJldHVybiBw
b29sOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCmluZGV4IDFjZTI5MjUyYjUxNWZhZDNjMDYy
N2Y2NzNjYmM3OTBiN2Q3NGU4NDIuLmIyYTkwM2VhOGUzNmJiYTE3MTQ1YzVjYTM2ZDFhYzEyZGZm
MGU2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmgKQEAgLTQ3LDYgKzQ3LDggQEAgZW51
bSBjbGFzcyBGcm9tU3lzdGVtRm9udElEIHsgTm8sIFllcyB9OwogY2xhc3MgQ1NTVmFsdWVQb29s
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBzdGF0aWMgQ1NT
VmFsdWVQb29sJiBzaW5nbGV0b24oKTsKKwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBj
cmVhdGVGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY3JlYXRlRm9udEZhbWlseVZhbHVlKGNvbnN0IFN0cmluZyYsIEZyb21TeXN0
ZW1Gb250SUQgPSBGcm9tU3lzdGVtRm9udElEOjpObyk7CiAgICAgUmVmPENTU0luaGVyaXRlZFZh
bHVlPiBjcmVhdGVJbmhlcml0ZWRWYWx1ZSgpIHsgcmV0dXJuIG1faW5oZXJpdGVkVmFsdWUuY29w
eVJlZigpOyB9CkBAIC05Myw4ICs5NSw2IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdU
Rjo6TmV2ZXJEZXN0cm95ZWQ8Q1NTVmFsdWVQb29sPjsKIH07CiAKLUNTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKCkgUFVSRV9GVU5DVElPTjsKLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydGllcy5jcHAKaW5kZXggZGVkZDA3MDA3YWU1ZTk1ZTNhNGU0ODg0MjFlODhh
NWFlZDM3ZDM2NC4uMmM4MWQ4MDcxNWQ0ZWEwZDQzNzFjMzgyMjhjNTE4ODQ5YmM2MjFhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKQEAgLTc0NiwxMiArNzQ2LDEyIEBA
IHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJlZml4aW5nVmFyaWFudFByb3BlcnR5
KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wCiAKIGJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIGlkZW50aWZp
ZXIsIGJvb2wgaW1wb3J0YW50KQogewotICAgIHJldHVybiBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRp
ZmllciksIGltcG9ydGFudCkpOworICAgIHJldHVybiBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eShw
cm9wZXJ0eUlELCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KSk7CiB9CiAKIGJvb2wgTXV0YWJsZVN0eWxlUHJvcGVy
dGllczo6c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NQcm9wZXJ0eUlE
IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewotICAgIHJldHVybiBzZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoaWRlbnRpZmllciksIGltcG9ydGFudCkpOworICAgIHJldHVybiBzZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KSk7CiB9CiAKIHZvaWQgTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFy
YXRpb24sIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKaW5kZXggN2Q2ZTg3N2Q1MjY1ZjFjOTZhYjQyNzVmNmNiYTU2
NDZhMWFiOWJhNy4uYzEyZTQ1NmY1YjMxNzMzZGYyMmVhNGM1MmY2MDlmYzBjM2M4NDg0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcApAQCAtMjIyLDIxICsyMjIsMjEgQEAgdm9p
ZCBTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNoYW5nZWQoKQogICAgIAogYm9vbCBTdHlsZWRF
bGVtZW50OjpzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Q1NTVmFsdWVJRCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkKIHsKLSAgICBlbnN1cmVNdXRh
YmxlSW5saW5lU3R5bGUoKS5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllciksIGltcG9ydGFudCk7CisgICAgZW5zdXJl
TXV0YWJsZUlubGluZVN0eWxlKCkuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllciksIGltcG9ydGFu
dCk7CiAgICAgaW5saW5lU3R5bGVDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJv
b2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIENTU1Byb3BlcnR5SUQgaWRlbnRpZmllciwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0g
ICAgZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKCkuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpLCBpbXBvcnRhbnQp
OworICAgIGVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgpLnNldFByb3BlcnR5KHByb3BlcnR5SUQs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZp
ZXIpLCBpbXBvcnRhbnQpOwogICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwogICAgIHJldHVybiB0
cnVlOwogfQogCiBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgZW5zdXJlTXV0YWJsZUlubGlu
ZVN0eWxlKCkuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUodmFsdWUsIHVuaXQpLCBpbXBvcnRhbnQpOworICAgIGVuc3VyZU11dGFibGVJbmxpbmVTdHls
ZSgpLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUodmFsdWUsIHVuaXQpLCBpbXBvcnRhbnQpOwogICAgIGlubGluZVN0eWxlQ2hhbmdl
ZCgpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzYzLDEyICszNjMsMTIgQEAgdm9pZCBTdHls
ZWRFbGVtZW50OjpyZWJ1aWxkUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQogCiB2b2lkIFN0
eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NW
YWx1ZUlEIGlkZW50aWZpZXIpCiB7Ci0gICAgc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHlJRCwg
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkZW50aWZpZXIpKTsKKyAgICBz
dHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKSk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVu
dDo6YWRkUHJvcGVydHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGRvdWJsZSB2YWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0KQogewotICAgIHN0eWxlLnNldFByb3Bl
cnR5KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHZhbHVlLCB1bml0KSk7
CisgICAgc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZSh2YWx1ZSwgdW5pdCkpOwogfQogICAgIAogdm9pZCBTdHlsZWRFbGVt
ZW50OjphZGRQcm9wZXJ0eVRvUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoTXV0YWJsZVN0eWxl
UHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
aW5kZXggODliODNjN2M0NzhjMDExYTk0NDRjYTFhOTYzN2NhOGJjNDUxM2RlYi4uNTYwNjI5NTVl
MzMxYTQwOTlhZTZjM2Y0ZGQ0MmQ3MDM1ZWYzZDY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSog
c3R5bGUpCiAgICAgICAgICAgICBjdXJyZW50Rm9udFNpemUgPSBjb21wdXRlZEZvbnRTaXplKG5v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVzaXJlZEZv
bnRTaXplKSB7Ci0gICAgICAgICAgICBpbmxpbmVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250U2l6ZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZGVzaXJlZEZvbnRTaXplLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSwgZmFsc2UpOworICAgICAgICAgICAgaW5saW5lU3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlVmFsdWUoZGVzaXJlZEZvbnRTaXplLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKSwgZmFsc2UpOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgp
LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGlubGluZVN0eWxlLT5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAppbmRleCAxN2FhYjI5NWJhNmI5MmRhZTJhNzI0NGRjMTU2OGVmZjJmNTU3NDdh
Li5mMjc0YTk0OTdkOTA3ODUwZGQ3YmNmMzBiZjQ5MzA2MGM0ZGRiYmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC01MzQsMTQgKzUzNCwxNCBAQCBSZWY8TXV0
YWJsZVN0eWxlUHJvcGVydGllcz4gRWRpdGluZ1N0eWxlOjpzdHlsZVdpdGhSZXNvbHZlZFRleHRE
ZWNvcmF0aW9ucygpIGNvbgogCiAgICAgUmVmPENTU1ZhbHVlTGlzdD4gdmFsdWVMaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmICh1bmRlcmxpbmVDaGFu
Z2UoKSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkKQotICAgICAgICB2YWx1ZUxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxp
bmUpKTsKKyAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpKTsKICAgICBpZiAoc3Ry
aWtlVGhyb3VnaENoYW5nZSgpID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQpCi0gICAgICAg
IHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUxpbmVUaHJvdWdoKSk7CisgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91
Z2gpKTsKIAogICAgIGlmICh2YWx1ZUxpc3QtPmxlbmd0aCgpKQogICAgICAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdmFsdWVMaXN0LnB0cigpKTsKICAg
ICBlbHNlCi0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSk7
CisgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpKTsKIAogICAgIHJldHVybiBzdHlsZTsKIH0KQEAgLTYxOCw4ICs2MTgsOSBAQCB2b2lkIEVk
aXRpbmdTdHlsZTo6b3ZlcnJpZGVUeXBpbmdTdHlsZUF0KGNvbnN0IEVkaXRpbmdTdHlsZSYgc3R5
bGUsIGNvbnN0IFBvc2l0aQogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIG1fbXV0
YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAKLSAgICBSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUxpbmVUaHJvdWdoKTsKKyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gY3Nz
VmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7CisgICAg
UmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CiAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHZhbHVlTGlzdDsKICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKQEAg
LTgyNiw3ICs4MjcsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0aElubGluZVN0
eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFJlZgogICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbmV3VmFsdWVMaXN0ID0gdmFsdWVMaXN0LT5jb3B5KCk7CiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBleHRyYWN0ZWRWYWx1ZUxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAKLSAgICAgICAgICAgIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKKyAgICAgICAgICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gdW5kZXJsaW5lID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZVVu
ZGVybGluZSAmJiB2YWx1ZUxpc3QtPmhhc1ZhbHVlKHVuZGVybGluZS5wdHIoKSkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTgzNCw3ICs4MzUsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxpY3Rz
V2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFJlZgogICAg
ICAgICAgICAgICAgIGV4dHJhY3RlZFZhbHVlTGlzdC0+YXBwZW5kKFdURjo6bW92ZSh1bmRlcmxp
bmUpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUxpbmVUaHJvdWdoKTsKKyAgICAgICAgICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlu
ZVRocm91Z2ggPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKICAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVTdHJp
a2VUaHJvdWdoICYmIHZhbHVlTGlzdC0+aGFzVmFsdWUobGluZVRocm91Z2gucHRyKCkpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMDEzLDkgKzEwMTQsMTAgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OnN0
eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAg
ICAgIGJvb2wgaGFzTGluZVRocm91Z2ggPSBmYWxzZTsKICAgICAgICAgaWYgKFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbikpIHsKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCk7CiAgICAgICAgICAgICAgICAgY29uc3QgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBk
b3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaGFzVW5kZXJs
aW5lID0gdmFsdWVMaXN0Lmhhc1ZhbHVlKCZjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpLmdldCgpKTsKLSAgICAgICAgICAgICAgICBoYXNMaW5l
VGhyb3VnaCA9IHZhbHVlTGlzdC5oYXNWYWx1ZSgmY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpLmdldCgpKTsKKyAgICAgICAgICAgICAgICBo
YXNVbmRlcmxpbmUgPSB2YWx1ZUxpc3QuaGFzVmFsdWUoY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSkucHRyKCkpOworICAgICAgICAgICAgICAgIGhh
c0xpbmVUaHJvdWdoID0gdmFsdWVMaXN0Lmhhc1ZhbHVlKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCkucHRyKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGlmICgoc2hvdWxkQWRkVW5kZXJsaW5lICYmICFoYXNVbmRlcmxp
bmUpIHx8IChzaG91bGRBZGRMaW5lVGhyb3VnaCAmJiAhaGFzTGluZVRocm91Z2gpKQpAQCAtMTIy
NSw4ICsxMjI3LDkgQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6d3Jh
cHBpbmdTdHlsZUZvclNlcmlhbGl6YXRpb24oTm9kZSogY29udGUKIAogc3RhdGljIHZvaWQgbWVy
Z2VUZXh0RGVjb3JhdGlvblZhbHVlcyhDU1NWYWx1ZUxpc3QmIG1lcmdlZFZhbHVlLCBjb25zdCBD
U1NWYWx1ZUxpc3QmIHZhbHVlVG9NZXJnZSkKIHsKLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+
IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZVVuZGVybGluZSk7Ci0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsK
KyAgICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOworICAg
IFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29sLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVMaW5lVGhyb3VnaCk7CiAKICAgICBpZiAodmFsdWVUb01lcmdlLmhhc1ZhbHVlKHVuZGVy
bGluZS5wdHIoKSkgJiYgIW1lcmdlZFZhbHVlLmhhc1ZhbHVlKHVuZGVybGluZS5wdHIoKSkpCiAg
ICAgICAgIG1lcmdlZFZhbHVlLmFwcGVuZChXVEY6Om1vdmUodW5kZXJsaW5lKSk7CkBAIC0xMzk5
LDE3ICsxNDAyLDE4IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpjb252ZXJ0UG9zaXRpb25TdHlsZSgp
CiAgICAgaWYgKCFtX211dGFibGVTdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdGlja3kgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJraXRTdGlja3kpOworICAgIGF1dG8mIGNzc1ZhbHVl
UG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBzdGlja3kgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlV2Via2l0U3RpY2t5KTsKICAgICBpZiAobV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5TWF0Y2hl
cyhDU1NQcm9wZXJ0eVBvc2l0aW9uLCBzdGlja3kuZ2V0KCkpKSB7Ci0gICAgICAgIG1fbXV0YWJs
ZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdGF0aWMpLCBtX211dGFibGVTdHlsZS0+cHJv
cGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eVBvc2l0aW9uKSk7CisgICAgICAgIG1fbXV0YWJs
ZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBjc3NWYWx1ZVBvb2wuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3RhdGljKSwgbV9tdXRhYmxlU3R5bGUtPnByb3Bl
cnR5SXNJbXBvcnRhbnQoQ1NTUHJvcGVydHlQb3NpdGlvbikpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZml4ZWQgPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGaXhlZCk7CisgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBmaXhlZCA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVGaXhlZCk7CiAgICAgaWYgKG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eU1h
dGNoZXMoQ1NTUHJvcGVydHlQb3NpdGlvbiwgZml4ZWQuZ2V0KCkpKSB7Ci0gICAgICAgIG1fbXV0
YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBYnNvbHV0ZSksIG1fbXV0YWJsZVN0eWxl
LT5wcm9wZXJ0eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5UG9zaXRpb24pKTsKKyAgICAgICAgbV9t
dXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIGNzc1ZhbHVlUG9v
bC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBYnNvbHV0ZSksIG1fbXV0YWJsZVN0eWxl
LT5wcm9wZXJ0eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5UG9zaXRpb24pKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYWJzb2x1dGUg
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBYnNvbHV0ZSk7
CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhYnNvbHV0ZSA9IGNzc1ZhbHVlUG9vbC5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBYnNvbHV0ZSk7CiAgICAgaWYgKG1fbXV0YWJs
ZVN0eWxlLT5wcm9wZXJ0eU1hdGNoZXMoQ1NTUHJvcGVydHlQb3NpdGlvbiwgYWJzb2x1dGUuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDE4LDcg
KzE0MjIsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6Y29udmVydFBvc2l0aW9uU3R5bGUoKQogYm9v
bCBFZGl0aW5nU3R5bGU6OmlzRmxvYXRpbmcoKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdiA9
IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RmxvYXQpOwot
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9uZVZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBub25lVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgIHJldHVybiB2ICYmICF2LT5lcXVhbHMo
Km5vbmVWYWx1ZSk7CiB9CiAKQEAgLTE2MDQsMTAgKzE2MDgsMTEgQEAgU3R5bGVDaGFuZ2U6OlN0
eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
ICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUuZ2V0KCkpKQogICAgICAgICAgICAg
dmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZS5nZXQoKSk7CiAKLSAgICAg
ICAgUmVmPENTU1ZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOworICAgICAgICBhdXRvJiBjc3NWYWx1ZVBvb2wg
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOworICAgICAgICBSZWY8Q1NTVmFsdWU+IHVuZGVy
bGluZSA9IGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxp
bmUpOwogICAgICAgICBib29sIGhhc1VuZGVybGluZSA9IHZhbHVlTGlzdCAmJiB2YWx1ZUxpc3Qt
Pmhhc1ZhbHVlKHVuZGVybGluZS5wdHIoKSk7CiAKLSAgICAgICAgUmVmPENTU1ZhbHVlPiBsaW5l
VGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxp
bmVUaHJvdWdoKTsKKyAgICAgICAgUmVmPENTU1ZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CiAgICAgICAg
IGJvb2wgaGFzTGluZVRocm91Z2ggPSB2YWx1ZUxpc3QgJiYgdmFsdWVMaXN0LT5oYXNWYWx1ZShs
aW5lVGhyb3VnaC5wdHIoKSk7CiAKICAgICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENTUykgewpA
QCAtMTY4MCw4ICsxNjg1LDkgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJgogICAgIC8vIEZ1cnRo
ZXJtb3JlLCB0ZXh0LWRlY29yYXRpb246IG5vbmUgaGFzIGJlZW4gdHJpbW1lZCBzbyB0aGF0IHRl
eHQtZGVjb3JhdGlvbiBwcm9wZXJ0eSBpcyBhbHdheXMgYSBDU1NWYWx1ZUxpc3QuCiAgICAgUmVm
UHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odGV4
dERlY29yYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
dW5kZXJsaW5lID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
VW5kZXJsaW5lKTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3Vn
aCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVUaHJv
dWdoKTsKKyAgICAgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NW
YWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKKyAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbC5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CiAKICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp0ZXh0RGVjb3JhdGlvbikuY29weSgpOwogICAgICAgICBpZiAobmV3VGV4dERlY29yYXRp
b24tPnJlbW92ZUFsbCh1bmRlcmxpbmUuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggMzgxMjk0MWM0MThhNzZmM2Q0MGMwZWVhZThiNDJm
Y2IzZDJlY2JkZS4uY2U0YmNiY2E0YmYzMmE5ZDUzMzdiZWI5MmRmMWY3ZTBmYTljOThmMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC03OCw5ICs3
OCw5IEBAIHZvaWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5n
VHlwaW5nU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKICAgICAgICAgaWYgKHZhbHVlICYm
IHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVl
TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKLSAgICAgICAgICAgIGlmICh2
YWx1ZUxpc3QuaGFzVmFsdWUoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTGluZVRocm91Z2gpLnB0cigpKSkKKyAgICAgICAgICAgIGlmICh2YWx1ZUxpc3QuaGFz
VmFsdWUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVMaW5lVGhyb3VnaCkucHRyKCkpKQogICAgICAgICAgICAgICAgIFtyZXN1bHQgc2V0T2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktl
eTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgaWYgKHZh
bHVlTGlzdC5oYXNWYWx1ZShjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVVbmRlcmxpbmUpLnB0cigpKSkKKyAgICAgICAgICAgIGlmICh2YWx1ZUxpc3QuaGFzVmFs
dWUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVVbmRlcmxpbmUpLnB0cigpKSkKICAgICAgICAgICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNV
bmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCA1YzBiZGFhMzg5NjA1OTRl
NTk5MjJkZjBlNzJlMzFiMzZmY2Y1NmNhLi4xODM5MTFjYmM1ZWU0MDk5Zjk1ODRlYWEwYTgwMzU1
NTQwMGQwNWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC02
ODgsMTEgKzY4OCwxMiBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1
dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZAogCiB2b2lkIEVkaXRvcjo6
YXBwbHlGb250U3R5bGVzKGNvbnN0IFN0cmluZyYgZm9udEZhbWlseSwgZG91YmxlIGZvbnRTaXpl
LCB1bnNpZ25lZCBmb250VHJhaXRzKQogeworICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCk7CiAgICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0
eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZh
bWlseVZhbHVlKGZvbnRGYW1pbHkpKTsKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250RmFtaWx5LCBjc3NWYWx1ZVBvb2wuY3JlYXRlRm9udEZhbWlseVZhbHVlKGZvbnRGYW1p
bHkpKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIChmb250
VHJhaXRzICYgTlNGb250SXRhbGljVHJhaXQpID8gQ1NTVmFsdWVJdGFsaWMgOiBDU1NWYWx1ZU5v
cm1hbCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZm9udFRyYWl0cyAmIE5TRm9udEJvbGRUcmFpdCA/IEZv
bnRXZWlnaHRCb2xkIDogRm9udFdlaWdodE5vcm1hbCkpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShmb250U2l6
ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShmb250VHJhaXRz
ICYgTlNGb250Qm9sZFRyYWl0ID8gRm9udFdlaWdodEJvbGQgOiBGb250V2VpZ2h0Tm9ybWFsKSk7
CisgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGNzc1ZhbHVlUG9v
bC5jcmVhdGVWYWx1ZShmb250U2l6ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOwogICAg
IGFwcGx5U3R5bGVUb1NlbGVjdGlvbihzdHlsZS5wdHIoKSwgRWRpdEFjdGlvblNldEZvbnQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGFhZTQyNzQ0MDA1NzY0OGZj
NWU3MDUzMDNiNTg1ZGQ0ZWVlZDYyOTguLjUyMGNlMDNlNzBjYzdhZDc4NmNiNTM3YTc3MzA5OTdm
ODYyM2MzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC0xMTUwLDcgKzEx
NTAsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGRIVE1MQ29sb3JUb1N0eWxlKE11dGFibGVTdHls
ZVByb3BlcnRpZXMmIHN0eWxlLCBDU1NQcm9wZXJ0eQogICAgIGlmICghcGFyc2VkQ29sb3IuaXNW
YWxpZCgpKQogICAgICAgICBwYXJzZWRDb2xvci5zZXRSR0IocGFyc2VDb2xvclN0cmluZ1dpdGhD
cmF6eUxlZ2FjeVJ1bGVzKGNvbG9yU3RyaW5nKSk7CiAKLSAgICBzdHlsZS5zZXRQcm9wZXJ0eShw
cm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKHBhcnNlZENvbG9yLnJn
YigpKSk7CisgICAgc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHlJRCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKHBhcnNlZENvbG9yLnJnYigpKSk7CiB9CiAKIGJv
b2wgSFRNTEVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCmluZGV4IGYzOGY1ZTllODkwNWU0MmVjYTZkMzRk
NzJjYmVlYjhkZGI4ZjE2YWUuLjM5OGQxNDU3YTU5OWFmYmQ1MTFkYjBhZDE2OTk1Y2Y2YWJlYjVj
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKQEAgLTE5NCw3ICsx
OTQsNyBAQCB2b2lkIEhUTUxGb250RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9u
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAgfSBlbHNlIGlmIChuYW1lID09IGNv
bG9yQXR0cikKICAgICAgICAgYWRkSFRNTENvbG9yVG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlD
b2xvciwgdmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gZmFjZUF0dHIpIHsKLSAgICAgICAg
aWYgKFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYWNlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVGb250RmFjZVZhbHVlKHZhbHVlKSkKKyAgICAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGZvbnRGYWNlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRG
YWNlVmFsdWUodmFsdWUpKQogICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250RmFjZVZhbHVlLnJlbGVhc2UoKSkpOwogICAg
IH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9u
QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBzdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxIUkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSFJFbGVt
ZW50LmNwcAppbmRleCA0MzgzNzA0ZjI1MzNjNzZlMTBkNzYzOGM0MzNjMzE2N2VlOGRhNzk4Li5h
MTExYjdmMmU4NWMxNzFkMjU1MTBlYzBjZGM2OGU2NGVlMmE5YmMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEhSRWxlbWVudC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBIVE1MSFJFbGVtZW50
Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmEKICAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGNvbG9yQXR0cikpIHsKICAgICAg
ICAgICAgIGFkZFByb3BlcnR5VG9QcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShzdHlsZSwgQ1NT
UHJvcGVydHlCb3JkZXJTdHlsZSwgQ1NTVmFsdWVTb2xpZCk7CiAKLSAgICAgICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gZGFya0dyYXlWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUNvbG9yVmFsdWUoQ29sb3I6OmRhcmtHcmF5KTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gZGFya0dyYXlWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlQ29sb3JWYWx1ZShDb2xvcjo6ZGFya0dyYXkpOwogICAgICAgICAgICAgc3R5bGUuc2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgZGFya0dyYXlWYWx1ZSk7CiAgICAgICAgICAg
ICBzdHlsZS5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZGFya0dyYXlW
YWx1ZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3Bw
CmluZGV4IDAyODA4NmE2MThkZjZiMzRlZTM0NGFmMWQwMzdhNDA3NGU2NjQ4NWMuLmI5MjhlMGQ3
YTQ0Y2U2NWQ5ODE3NTNiMDMxMTZhNzU2NmM2NDEwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVFbGVtZW50LmNwcApAQCAtNDczLDMwICs0NzMsMzEgQEAgUmVmUHRyPFN0eWxlUHJv
cGVydGllcz4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlU2hhcmVkQ2VsbFN0eWxlKCkKIHsKICAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzOjpjcmVhdGUoKTsKIAorICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCk7CiAgICAgc3dpdGNoIChjZWxsQm9yZGVycygpKSB7CiAgICAgY2FzZSBT
b2xpZEJvcmRlcnNDb2xzT25seToKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFdpZHRoLCBDU1NWYWx1ZVRoaW4pOwogICAgICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBDU1NWYWx1ZVRoaW4pOwogICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUsIENTU1ZhbHVl
U29saWQpOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dFN0eWxlLCBDU1NWYWx1ZVNvbGlkKTsKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Qm9yZGVyQ29sb3IsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCkp
OworICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgY3Nz
VmFsdWVQb29sLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFNvbGlkQm9yZGVyc1Jvd3NPbmx5OgogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgQ1NTVmFsdWVUaGluKTsKICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIENTU1ZhbHVlVGhpbik7CiAg
ICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlLCBDU1NW
YWx1ZVNvbGlkKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tU3R5bGUsIENTU1ZhbHVlU29saWQpOwotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlCb3JkZXJDb2xvciwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW5oZXJpdGVkVmFs
dWUoKSk7CisgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckNvbG9y
LCBjc3NWYWx1ZVBvb2wuY3JlYXRlSW5oZXJpdGVkVmFsdWUoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU29saWRCb3JkZXJzOgotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlCb3JkZXJXaWR0aCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCkpOwotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlCb3JkZXJTdHlsZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlU29saWQpKTsKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVy
Q29sb3IsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCkpOworICAgICAgICBz
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJXaWR0aCwgY3NzVmFsdWVQb29sLmNy
ZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUsIGNzc1ZhbHVlUG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTb2xpZCkpOworICAgICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgY3NzVmFsdWVQb29sLmNyZWF0ZUluaGVyaXRlZFZh
bHVlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2V0Qm9yZGVyczoKLSAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKLSAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUsIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUluc2V0KSk7Ci0gICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckNvbG9yLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbmhl
cml0ZWRWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9y
ZGVyV2lkdGgsIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKSk7CisgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclN0
eWxlLCBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5zZXQpKTsK
KyAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IsIGNzc1Zh
bHVlUG9vbC5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBOb0JvcmRlcnM6CiAgICAgICAgIC8vIElmICdydWxlcz1ub25lJyB0aGVuIGFsbG93IGFueSBi
b3JkZXJzIHNldCBhdCBjZWxsIGxldmVsIHRvIHRha2UgZWZmZWN0LiAKQEAgLTUwNCw3ICs1MDUs
NyBAQCBSZWZQdHI8U3R5bGVQcm9wZXJ0aWVzPiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGVTaGFy
ZWRDZWxsU3R5bGUoKQogICAgIH0KIAogICAgIGlmIChtX3BhZGRpbmcpCi0gICAgICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBhZGRpbmcsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKG1fcGFkZGluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOworICAgICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQYWRkaW5nLCBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFs
dWUobV9wYWRkaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CiAKICAgICByZXR1cm4g
c3R5bGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVz
c3VyZUhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmNwcAppbmRleCA2ODVkMmU3OTQ0NDliOThiOTUzZWE1MWM4ODdjOTRkOWIwNjU3NmYy
Li44Yjg5NGViZjJjYWUwMzUyOTEwZWY2M2Q3NDFlNTY0MjZjYTU1ZmUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKQEAgLTEyNCw3
ICsxMjQsNyBAQCB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZUNyaXRpY2FsTWVt
b3J5KFN5bmNocm9ub3VzIHN5bmNocm9ub3VzKQogCiAgICAgewogICAgICAgICBSZWxpZWZMb2dn
ZXIgbG9nKCJEcmFpbiBDU1NWYWx1ZVBvb2wiKTsKLSAgICAgICAgY3NzVmFsdWVQb29sKCkuZHJh
aW4oKTsKKyAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5kcmFpbigpOwogICAgIH0K
IAogICAgIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>