<?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>145932</bug_id>
          
          <creation_ts>2015-06-12 11:37:51 -0700</creation_ts>
          <short_desc>REGRESSION(r185512): Many asserts on layout tests and on API tests (Requested by ap_ on #webkit).</short_desc>
          <delta_ts>2015-06-12 11:43:42 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>145831</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1101655</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-12 11:37:51 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/185512 broke the build:
Many asserts on layout tests and on API tests (Requested by ap_ on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101657</commentid>
    <comment_count>1</comment_count>
      <attachid>254811</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-12 11:38:25 -0700</bug_when>
    <thetext>Created attachment 254811
ROLLOUT of r185512

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101658</commentid>
    <comment_count>2</comment_count>
      <attachid>254811</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-12 11:43:38 -0700</bug_when>
    <thetext>Comment on attachment 254811
ROLLOUT of r185512

Clearing flags on attachment: 254811

Committed r185517: &lt;http://trac.webkit.org/changeset/185517&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101659</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-12 11:43:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254811</attachid>
            <date>2015-06-12 11:38:25 -0700</date>
            <delta_ts>2015-06-12 11:43:38 -0700</delta_ts>
            <desc>ROLLOUT of r185512</desc>
            <filename>bug-145932-20150612113754.patch</filename>
            <type>text/plain</type>
            <size>81481</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmMwM2YzYmQ4OTM3MzQy
MjNkMTU4NzIwNjQxYWQ4YTU3MTJkMTk5Yi4uYmU2YzkwMmJkNmIzNjUzMWZlOTk4ZmU0MTdkYWEy
YjgxYzA2ZTE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA2LTEyICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTg1NTEyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ1OTMyCisKKyAgICAgICAgTWFueSBhc3NlcnRzIG9uIGxheW91dCB0
ZXN0cyBhbmQgb24gQVBJIHRlc3RzIChSZXF1ZXN0ZWQgYnkKKyAgICAgICAgYXBfIG9uICN3ZWJr
aXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiVXNlIG1vZGVy
biBmb3ItbG9vcHMgaW4gV2ViQ29yZS9yZW5kZXJpbmcgLSAxIgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1ODMxCisgICAgICAgIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4NTUxMgorCiAyMDE1LTA2LTEyICBTaW1vbiBGcmFzZXIg
IDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE9wZW5HTEVTU1BJLmggZG9lc24n
dCBuZWVkIHRvIGluY2x1ZGUgVUlLaXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0
b1RhYmxlTGF5b3V0LmNwcAppbmRleCBjZDQxOGViYzU0NjFhZmJjNzE0N2I0YThkNTQyOTAwZmVm
MWNlNDg3Li4xYWVhZGVkNWE5MzMzODVkYjczOWI1YzA2ZjNkMjU3MjdiYWY2ZmNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcApAQCAtMjI2LDE3ICsy
MjYsMTcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lk
dGhzKExheW91dFVuaXQmIG1pbldpZHRoLCBMYXlvdXQKICAgICBjb25zdCBmbG9hdCBlcHNpbG9u
ID0gMSAvIDEyOC4wZjsKIAogICAgIGZsb2F0IHJlbWFpbmluZ1BlcmNlbnQgPSAxMDA7Ci0gICAg
Zm9yIChhdXRvJiBsYXlvdXQgOiBtX2xheW91dFN0cnVjdCkgewotICAgICAgICBtaW5XaWR0aCAr
PSBsYXlvdXQuZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwotICAgICAgICBtYXhXaWR0aCArPSBs
YXlvdXQuZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9sYXlvdXRTdHJ1Y3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbWluV2lkdGggKz0gbV9s
YXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOworICAgICAgICBtYXhXaWR0
aCArPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CiAgICAgICAg
IGlmIChzY2FsZUNvbHVtbnMpIHsKLSAgICAgICAgICAgIGlmIChsYXlvdXQuZWZmZWN0aXZlTG9n
aWNhbFdpZHRoLmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgcGVyY2VudCA9
IHN0ZDo6bWluKGxheW91dC5lZmZlY3RpdmVMb2dpY2FsV2lkdGgucGVyY2VudCgpLCByZW1haW5p
bmdQZXJjZW50KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsV2lkdGggPSBzdGF0aWNf
Y2FzdDxmbG9hdD4obGF5b3V0LmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgKiAxMDAgLyBzdGQ6
Om1heChwZXJjZW50LCBlcHNpbG9uKTsKKyAgICAgICAgICAgIGlmIChtX2xheW91dFN0cnVjdFtp
XS5lZmZlY3RpdmVMb2dpY2FsV2lkdGguaXNQZXJjZW50KCkpIHsKKyAgICAgICAgICAgICAgICBm
bG9hdCBwZXJjZW50ID0gc3RkOjptaW4obV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNh
bFdpZHRoLnBlcmNlbnQoKSwgcmVtYWluaW5nUGVyY2VudCk7CisgICAgICAgICAgICAgICAgZmxv
YXQgbG9naWNhbFdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbGF5b3V0U3RydWN0W2ldLmVm
ZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgKiAxMDAgLyBzdGQ6Om1heChwZXJjZW50LCBlcHNpbG9u
KTsKICAgICAgICAgICAgICAgICBtYXhQZXJjZW50ID0gc3RkOjptYXgobG9naWNhbFdpZHRoLCAg
bWF4UGVyY2VudCk7CiAgICAgICAgICAgICAgICAgcmVtYWluaW5nUGVyY2VudCAtPSBwZXJjZW50
OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbWF4Tm9uUGVyY2VudCArPSBs
YXlvdXQuZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoOworICAgICAgICAgICAgICAgIG1heE5vblBl
cmNlbnQgKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yNjQsMTUgKzI2NCwxNyBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0
OjpjYWxjRWZmZWN0aXZlTG9naWNhbFdpZHRoKCkKIHsKICAgICBpbnQgbWF4TG9naWNhbFdpZHRo
ID0gMDsKIAorICAgIHNpemVfdCBuRWZmQ29scyA9IG1fbGF5b3V0U3RydWN0LnNpemUoKTsKICAg
ICBpbnQgc3BhY2luZ0luUm93RGlyZWN0aW9uID0gbV90YWJsZS0+aEJvcmRlclNwYWNpbmcoKTsK
IAotICAgIGZvciAoYXV0byYgbGF5b3V0IDogbV9sYXlvdXRTdHJ1Y3QpIHsKLSAgICAgICAgbGF5
b3V0LmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aCA9IGxheW91dC5sb2dpY2FsV2lkdGg7Ci0gICAgICAg
IGxheW91dC5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGggPSBsYXlvdXQubWluTG9naWNhbFdpZHRo
OwotICAgICAgICBsYXlvdXQuZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoID0gbGF5b3V0Lm1heExv
Z2ljYWxXaWR0aDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5FZmZDb2xzOyArK2kpIHsK
KyAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoID0gbV9sYXlv
dXRTdHJ1Y3RbaV0ubG9naWNhbFdpZHRoOworICAgICAgICBtX2xheW91dFN0cnVjdFtpXS5lZmZl
Y3RpdmVNaW5Mb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5taW5Mb2dpY2FsV2lkdGg7
CisgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCA9IG1f
bGF5b3V0U3RydWN0W2ldLm1heExvZ2ljYWxXaWR0aDsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8m
IGNlbGwgOiBtX3NwYW5DZWxscykgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zcGFu
Q2VsbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gbV9z
cGFuQ2VsbHNbaV07CiAgICAgICAgIGlmICghY2VsbCkKICAgICAgICAgICAgIGJyZWFrOwogCkBA
IC0yOTQsNyArMjk2LDcgQEAgaW50IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVjdGl2ZUxvZ2lj
YWxXaWR0aCgpCiAgICAgICAgIGJvb2wgaGF2ZUF1dG8gPSBmYWxzZTsKICAgICAgICAgYm9vbCBz
cGFuSGFzRW1wdHlDZWxsc09ubHkgPSB0cnVlOwogICAgICAgICBpbnQgZml4ZWRXaWR0aCA9IDA7
Ci0gICAgICAgIHdoaWxlIChsYXN0Q29sIDwgbV9sYXlvdXRTdHJ1Y3Quc2l6ZSgpICYmIHNwYW4g
PiAwKSB7CisgICAgICAgIHdoaWxlIChsYXN0Q29sIDwgbkVmZkNvbHMgJiYgc3BhbiA+IDApIHsK
ICAgICAgICAgICAgIExheW91dCYgY29sdW1uTGF5b3V0ID0gbV9sYXlvdXRTdHJ1Y3RbbGFzdENv
bF07CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbHVtbkxheW91dC5sb2dpY2FsV2lkdGgudHlwZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIFBlcmNlbnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAppbmRleCAyMTgyZTZmNjY4OGM0NzNjMTIx
NTg1Yjg0MTU2MzMyZTIyMDI2OGFmLi42MmRhYzRiOGI0NjIyMzg3YjhkY2NlNzhmZWEyMDkyZDIx
NDQwZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAKQEAgLTEzNSwxNyArMTM1LDE4IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVy
ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
CiAgICAgbV9lZmZlY3RzLmNsZWFyKCk7CiAKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2
aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYzsKLSAgICBmb3IgKGF1dG8mIGZpbHRlck9wZXJh
dGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9u
LT50eXBlKCkpIHsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24gPSAq
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3Bl
cmF0aW9uLnR5cGUoKSkgewogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNF
OiB7Ci0gICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJlZmVyZW5jZU9wZXJh
dGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlv
bik7CisgICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIHJlZmVyZW5jZU9wZXJh
dGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKICAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCBw
cmV2aW91c0VmZmVjdCwgJnJlZmVyZW5jZU9wZXJhdGlvbik7CiAgICAgICAgICAgICByZWZlcmVu
Y2VPcGVyYXRpb24uc2V0RmlsdGVyRWZmZWN0KGVmZmVjdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0g
ICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpmaWx0
ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBp
bnB1dFBhcmFtZXRlcnM7CiAgICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFt
cFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwogCkBAIC0x
NzMsNyArMTc0LDcgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAg
ICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24m
IGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzOwogICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBU
bygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKIApAQCAtMjAx
LDIxICsyMDIsMjEgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6YnVpbGQoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewot
ICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqZmls
dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4g
aW5wdXRQYXJhbWV0ZXJzOwogICAgICAgICAgICAgaW5wdXRQYXJhbWV0ZXJzLmFwcGVuZChuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSk7CiAgICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURSwgaW5wdXRQYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0g
ICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpmaWx0
ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBp
bnB1dFBhcmFtZXRlcnM7CiAgICAgICAgICAgICBpbnB1dFBhcmFtZXRlcnMuYXBwZW5kKG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpKTsKICAgICAg
ICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJ
WF9UWVBFX0hVRVJPVEFURSwgaW5wdXRQYXJhbWV0ZXJzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAg
ICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7CiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rp
b247CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfVEFCTEU7CiAgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IHRyYW5zZmVyUGFyYW1l
dGVyczsKQEAgLTIyOCw3ICsyMjksNyBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWls
ZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHRyYW5zZmVyRnVuY3Rpb247CiAgICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEU7CiAgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+
IHRyYW5zZmVyUGFyYW1ldGVyczsKQEAgLTI0MSw3ICsyNDIsNyBAQCBib29sIEZpbHRlckVmZmVj
dFJlbmRlcmVyOjpidWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlv
bik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CiAgICAgICAgICAgICB0cmFuc2Zl
ckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwogICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwpAQCAtMjUyLDcgKzI1Myw3IEBAIGJv
b2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKmZp
bHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAg
ICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CiAgICAgICAg
ICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOwogICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CkBAIC0yNjQsMTMgKzI2NSwxMyBA
QCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZChSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIEJsdXJG
aWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0
aW9uPigqZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24m
IGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwogICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxl
bmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKICAgICAgICAgICAgIGVmZmVj
dCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0
aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9E
RV9EVVBMSUNBVEUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbj4oKmZpbHRlck9wZXJhdGlvbik7CisgICAgICAgICAgICBEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNo
YWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGVmZmVj
dCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERl
dmlhdGlvbigpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAogICAgICAgICAg
ICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwg
ZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
Mjg1LDcgKzI4Niw3IEBAIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkKFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zCiAgICAgICAgICAgICBlZmZl
Y3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyRnVuY3Rpb24pOwogICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT50eXBlKCkg
IT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJP
cGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAg
ICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQocHJldmlvdXNFZmZlY3QpOwog
ICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoZWZmZWN0KTsKICAgICAgICAgICAgIH0K
QEAgLTMzMCw4ICszMzEsOCBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKCkKIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXI6OmNsZWFySW50
ZXJtZWRpYXRlUmVzdWx0cygpCiB7CiAgICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgp
OwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNs
ZWFyUmVzdWx0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VmZmVjdHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fZWZmZWN0c1tpXS0+Y2xlYXJSZXN1bHQoKTsKIH0KIAogdm9pZCBG
aWx0ZXJFZmZlY3RSZW5kZXJlcjo6YXBwbHkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAppbmRleCBkNzE1NTNhZTM3NjYwNTQzZGRiN2M3OGFi
NGRmNjhlZjBkYTBlZmM2Li41ZmY4OThiNDA2NTY0OWQwYzg2NDc1NjdhZDVkZjIyYzIwYWY5MjQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aApAQCAtMTIwLDggKzEyMCwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgc2V0TWF4
RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQogICAgIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9lZmZlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QgPSBtX2VmZmVjdHMuYXQoaSk7CiAgICAgICAgICAgICBlZmZlY3QtPnNl
dE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmxvYXRpbmdPYmplY3RzLmNwcAppbmRleCAwYzA2NDQ5YjVlMTVmZDQyODdlOGQ3ZDU1MmExNGIx
ZGViMmE3MDI0Li5kYmM1MWM3ZWQ3NDI0ZTY1MThlOTE2ZWQ2OGNkYzdhMzhmNDdlYjkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcApAQCAtMjY2LDkg
KzI2Niw5IEBAIEZsb2F0aW5nT2JqZWN0czo6fkZsb2F0aW5nT2JqZWN0cygpCiB2b2lkIEZsb2F0
aW5nT2JqZWN0czo6Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCkKIHsKICAgICAvLyBDbGVhciBy
ZWZlcmVuY2VzIHRvIG9yaWdpbmF0aW5nIGxpbmVzLCBzaW5jZSB0aGUgbGluZXMgYXJlIGJlaW5n
IGRlbGV0ZWQKLSAgICBmb3IgKGF1dG8mIGZsb2F0aW5nT2JqZWN0IDogbV9zZXQpIHsKLSAgICAg
ICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkgfHwgJmZsb2F0aW5n
T2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSA9PSAmbV9yZW5kZXJlcik7Ci0g
ICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRPcmlnaW5hdGluZ0xpbmUobnVsbHB0cik7CisgICAg
Zm9yIChhdXRvIGl0ID0gbV9zZXQuYmVnaW4oKSwgZW5kID0gbV9zZXQuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBBU1NFUlQoISgoKml0KS0+b3JpZ2luYXRpbmdMaW5lKCkpIHx8
ICYoKCppdCktPm9yaWdpbmF0aW5nTGluZSgpLT5yZW5kZXJlcigpKSA9PSAmbV9yZW5kZXJlcik7
CisgICAgICAgICgqaXQpLT5zZXRPcmlnaW5hdGluZ0xpbmUoMCk7CiAgICAgfQogfQogCkBAIC0y
ODIsMTIgKzI4MiwxMiBAQCB2b2lkIEZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQogCiB2b2lkIEZs
b2F0aW5nT2JqZWN0czo6bW92ZUFsbFRvRmxvYXRJbmZvTWFwKFJlbmRlcmVyVG9GbG9hdEluZm9N
YXAmIG1hcCkKIHsKLSAgICBmb3IgKGF1dG8mIGZsb2F0aW5nT2JqZWN0IDogbV9zZXQpIHsKLSAg
ICAgICAgYXV0byYgcmVuZGVyZXIgPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKKyAgICBm
b3IgKGF1dG8gaXQgPSBtX3NldC5iZWdpbigpLCBlbmQgPSBtX3NldC5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gaXQtPmdldCgpLT5yZW5kZXJlcigp
OwogICAgICAgICAvLyBGSVhNRTogVGhlIG9ubHkgcmVhc29uIGl0IGlzIHNhZmUgdG8gbW92ZSB0
aGVzZSBvdXQgb2YgdGhlIHNldCBpcyB0aGF0CiAgICAgICAgIC8vIHdlIGFyZSBhYm91dCB0byBj
bGVhciBpdC4gT3RoZXJ3aXNlIGl0IHdvdWxkIGJyZWFrIHRoZSBoYXNoIHRhYmxlIGludmFyaWFu
dC4KICAgICAgICAgLy8gQSBjbGVhbiB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBhZGQgYSB0
YWtlQWxsIGZ1bmN0aW9uIHRvIEhhc2hTZXQuCi0gICAgICAgIG1hcC5hZGQoJnJlbmRlcmVyLCBX
VEY6Om1vdmUoZmxvYXRpbmdPYmplY3QpKTsKKyAgICAgICAgbWFwLmFkZCgmcmVuZGVyZXIsIFdU
Rjo6bW92ZSgqaXQpKTsKICAgICB9CiAgICAgY2xlYXIoKTsKIH0KQEAgLTM3NCw5ICszNzQsMTAg
QEAgdm9pZCBGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9wbGFjZWRGbG9hdHNUcmVlID0gc3RkOjptYWtlX3VuaXF1ZTxG
bG9hdGluZ09iamVjdFRyZWU+KCk7Ci0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1f
c2V0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gbV9zZXQuYmVnaW4oKSwgZW5kID0gbV9zZXQuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQo
KSkKLSAgICAgICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS0+YWRkKGludGVydmFsRm9yRmxvYXRp
bmdPYmplY3QoZmxvYXRpbmdPYmplY3QuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fcGxhY2VkRmxv
YXRzVHJlZS0+YWRkKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhy
ZWFkQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENv
bnRyb2xsZXIuY3BwCmluZGV4IGViNmI0NmNiZDQ1MjcxNmI0NmVjODBjYmUwMTAyOTU5NjU5MWZk
YzcuLjhjZjE0YWNmYTIwYzg0NGMxMWZlNzkxYWI4MzU1ZjRhYzg0OGFkOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtMjc0
LDcgKzI3NCw4IEBAIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OmNvbGxlY3RGaXhlZFBvc2l0
aW9uZWRMYXllcnMoVmVjdG9yPFJlbmRlckxheWVyKj4mIGZpCiAKICAgICAgICAgUmVuZGVyTGF5
ZXIqIGZsb3dUaHJlYWRMYXllciA9IGZsb3dSZW5kZXJlci0+bGF5ZXIoKTsKICAgICAgICAgaWYg
KFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gZmxvd1RocmVhZExheWVyLT5u
ZWdaT3JkZXJMaXN0KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY3VyckxheWVyIDogKm5l
Z1pPcmRlckxpc3QpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbmVn
Wk9yZGVyTGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgUmVu
ZGVyTGF5ZXIqIGN1cnJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAgICAg
ICAgIGlmIChjdXJyTGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpICE9IEZpeGVk
UG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGZpeGVkUG9zTGF5ZXJzLmFwcGVuZChjdXJyTGF5ZXIpOwpAQCAtMjgyLDcgKzI4Myw4IEBAIHZv
aWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OmNvbGxlY3RGaXhlZFBvc2l0aW9uZWRMYXllcnMoVmVj
dG9yPFJlbmRlckxheWVyKj4mIGZpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoVmVjdG9yPFJl
bmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QgPSBmbG93VGhyZWFkTGF5ZXItPnBvc1pPcmRlckxp
c3QoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBjdXJyTGF5ZXIgOiAqcG9zWk9yZGVyTGlz
dCkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBwb3NaT3JkZXJMaXN0
LT5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJMYXllciog
Y3VyckxheWVyID0gcG9zWk9yZGVyTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAgICAgaWYgKGN1
cnJMYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZml4ZWRQb3NM
YXllcnMuYXBwZW5kKGN1cnJMYXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVz
dFJlc3VsdC5jcHAKaW5kZXggODkyZDE2M2MzM2YzODk1OGJlZTEzZjMwZmM2NzNlZjdmZmUxYjIz
OC4uMTQ0NDliNjc3ZGQ3YjcyYzBkMTA3ZTRlMmE0ZWVmYjZlZjk1N2MzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNzAyLDggKzcwMiw4IEBAIHZv
aWQgSGl0VGVzdFJlc3VsdDo6YXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQogCiAg
ICAgaWYgKG90aGVyLm1fcmVjdEJhc2VkVGVzdFJlc3VsdCkgewogICAgICAgICBOb2RlU2V0JiBz
ZXQgPSBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdCgpOwotICAgICAgICBmb3IgKGF1dG8mIHJl
c3VsdCA6ICpvdGhlci5tX3JlY3RCYXNlZFRlc3RSZXN1bHQpCi0gICAgICAgICAgICBzZXQuYWRk
KHJlc3VsdCk7CisgICAgICAgIGZvciAoTm9kZVNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvdGhl
ci5tX3JlY3RCYXNlZFRlc3RSZXN1bHQtPmJlZ2luKCksIGxhc3QgPSBvdGhlci5tX3JlY3RCYXNl
ZFRlc3RSZXN1bHQtPmVuZCgpOyBpdCAhPSBsYXN0OyArK2l0KQorICAgICAgICAgICAgc2V0LmFk
ZChpdC0+Z2V0KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDEwZGNmMTFhZDllOTIwNGNiZTU1
NGQ2YzQ5Njk0MWQ3NWVkMGZiMTUuLmM0YTZlNDNjNjcyMmY0MTBmN2JmOTBkMTA4YjhjNTYwYzMy
MDAwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZVF1YWxpdHlD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VRdWFsaXR5
Q29udHJvbGxlci5jcHAKQEAgLTg4LDggKzg4LDggQEAgdm9pZCBJbWFnZVF1YWxpdHlDb250cm9s
bGVyOjpoaWdoUXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGZvciAoYXV0byYgb2JqZWN0IDogbV9vYmplY3RMYXllclNpemVNYXAua2V5cygp
KQotICAgICAgICBvYmplY3QtPnJlcGFpbnQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX29iamVj
dExheWVyU2l6ZU1hcC5iZWdpbigpLCBlbmQgPSBtX29iamVjdExheWVyU2l6ZU1hcC5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+a2V5LT5yZXBhaW50KCk7CiAKICAgICBtX2xp
dmVSZXNpemVPcHRpbWl6YXRpb25Jc0FjdGl2ZSA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGJlZWVjYzY2Njk3ZjU0OGQ0ZTZhN2Zj
YmEwNjUyM2Q3OGRlZTYyNGIuLmY0MGI3NTBlMTNhZDI4OTdhYmEwNzMxYWJmZDM5NjI2MTYwNGI1
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTYz
MCw3ICs2MzAsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgICAgICBwYWludERvY3Vt
ZW50TWFya2Vycyhjb250ZXh0LCBib3hPcmlnaW4sIGxpbmVTdHlsZSwgZm9udCwgZmFsc2UpOwog
CiAgICAgICAgIGlmICh1c2VDdXN0b21VbmRlcmxpbmVzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIHVuZGVybGluZSA6IHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3Np
dGlvblVuZGVybGluZXMoKSkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9u
VW5kZXJsaW5lPiYgdW5kZXJsaW5lcyA9IHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jdXN0
b21Db21wb3NpdGlvblVuZGVybGluZXMoKTsKKyAgICAgICAgICAgIHNpemVfdCBudW1VbmRlcmxp
bmVzID0gdW5kZXJsaW5lcy5zaXplKCk7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBudW1VbmRlcmxpbmVzOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSA9IHVuZGVybGluZXNbaW5kZXhd
OworCiAgICAgICAgICAgICAgICAgaWYgKHVuZGVybGluZS5lbmRPZmZzZXQgPD0gc3RhcnQoKSkK
ICAgICAgICAgICAgICAgICAgICAgLy8gdW5kZXJsaW5lIGlzIGNvbXBsZXRlbHkgYmVmb3JlIHRo
aXMgcnVuLiAgVGhpcyBtaWdodCBiZSBhbiB1bmRlcmxpbmUgdGhhdCBzaXRzCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGJlZm9yZSB0aGUgZmlyc3QgcnVuIHdlIGRyYXcsIG9yIHVuZGVybGluZXMg
dGhhdCB3ZXJlIHdpdGhpbiBydW5zIHdlIHNraXBwZWQgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAppbmRleCBlMDUzMDk1MmRmZGRjYWI2NDVlOGNmOGI0NGNkMzFlMGM3
MjcyYjk0Li43NjZkMWE4ODZhM2FmODhmZjhmZTc2MWM5NzVjOGMzMDgxNmFjZGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE5Myw5ICsxOTMsMTAgQEAg
UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKERvY3VtZW50JiBkb2N1bWVudCwgUmVmPFJlbmRlclN0
eWxlPiYmIHN0eWxlLCB1bnNpZ25lZAogCiBzdGF0aWMgdm9pZCByZW1vdmVCbG9ja0Zyb21EZXNj
ZW5kYW50QW5kQ29udGFpbmVyTWFwcyhSZW5kZXJCbG9jayogYmxvY2ssIFRyYWNrZWREZXNjZW5k
YW50c01hcComIGRlc2NlbmRhbnRNYXAsIFRyYWNrZWRDb250YWluZXJNYXAqJiBjb250YWluZXJN
YXApCiB7Ci0gICAgaWYgKGF1dG8gZGVzY2VuZGFudFNldCA9IGRlc2NlbmRhbnRNYXAtPnRha2Uo
YmxvY2spKSB7Ci0gICAgICAgIGZvciAoYXV0byYgYm94IDogKmRlc2NlbmRhbnRTZXQpIHsKLSAg
ICAgICAgICAgIGF1dG8gaXQgPSBjb250YWluZXJNYXAtPmZpbmQoYm94KTsKKyAgICBpZiAoc3Rk
Ojp1bmlxdWVfcHRyPFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0PiBkZXNjZW5kYW50U2V0ID0g
ZGVzY2VuZGFudE1hcC0+dGFrZShibG9jaykpIHsKKyAgICAgICAgVHJhY2tlZFJlbmRlcmVyTGlz
dEhhc2hTZXQ6Oml0ZXJhdG9yIGVuZCA9IGRlc2NlbmRhbnRTZXQtPmVuZCgpOworICAgICAgICBm
b3IgKFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0OjppdGVyYXRvciBkZXNjZW5kYW50ID0gZGVz
Y2VuZGFudFNldC0+YmVnaW4oKTsgZGVzY2VuZGFudCAhPSBlbmQ7ICsrZGVzY2VuZGFudCkgewor
ICAgICAgICAgICAgVHJhY2tlZENvbnRhaW5lck1hcDo6aXRlcmF0b3IgaXQgPSBjb250YWluZXJN
YXAtPmZpbmQoKmRlc2NlbmRhbnQpOwogICAgICAgICAgICAgQVNTRVJUKGl0ICE9IGNvbnRhaW5l
ck1hcC0+ZW5kKCkpOwogICAgICAgICAgICAgaWYgKGl0ID09IGNvbnRhaW5lck1hcC0+ZW5kKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDUwLDcgKzEwNTEsOSBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21Qb3NpdGlvbmVkT2JqZWN0cygpCiAgICAgaWYgKCFw
b3NpdGlvbmVkRGVzY2VuZGFudHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYg
cG9zaXRpb25lZE9iamVjdCA6ICpwb3NpdGlvbmVkRGVzY2VuZGFudHMpIHsKKyAgICBmb3IgKGF1
dG8gaXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmJlZ2luKCksIGVuZCA9IHBvc2l0aW9uZWRE
ZXNjZW5kYW50cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJCb3gq
IHBvc2l0aW9uZWRPYmplY3QgPSAqaXQ7CisgICAgICAgIAogICAgICAgICAvLyBGaXhlZCBwb3Np
dGlvbmVkIGVsZW1lbnRzIGRvbid0IGNvbnRyaWJ1dGUgdG8gbGF5b3V0IG92ZXJmbG93LCBzaW5j
ZSB0aGV5IGRvbid0IHNjcm9sbCB3aXRoIHRoZSBjb250ZW50LgogICAgICAgICBpZiAocG9zaXRp
b25lZE9iamVjdC0+c3R5bGUoKS5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pIHsKICAgICAg
ICAgICAgIExheW91dFVuaXQgeCA9IHBvc2l0aW9uZWRPYmplY3QtPngoKTsKQEAgLTExNDUsNyAr
MTE0OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBlcmNlbnRhZ2VI
ZWlnaHREZXNjZW5kYW50cygpCiAgICAgaWYgKCFkZXNjZW5kYW50cykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZm9yIChhdXRvJiBib3ggOiAqZGVzY2VuZGFudHMpIHsKKyAgICBmb3IgKGF1dG8g
aXQgPSBkZXNjZW5kYW50cy0+YmVnaW4oKSwgZW5kID0gZGVzY2VuZGFudHMtPmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyQm94KiBib3ggPSAqaXQ7CiAgICAgICAgIHdo
aWxlIChib3ggIT0gdGhpcykgewogICAgICAgICAgICAgaWYgKGJveC0+bm9ybWFsQ2hpbGROZWVk
c0xheW91dCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4Miw5ICsxMTg2LDExIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkKIAogICAgICAg
ICAvLyBGSVhNRTogR2x5cGggb3ZlcmZsb3cgd2lsbCBnZXQgbG9zdCBpbiB0aGlzIGNhc2UsIGJ1
dCBub3QgcmVhbGx5IGEgYmlnIGRlYWwuCiAgICAgICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRv
IGludmFsaWRhdGUgdGhlIGtub3duVG9IYXZlTm9PdmVyZmxvdyBmbGFnIG9uIHRoZSBJbmxpbmVC
b3hlcy4KLSAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgdGV4dEJveERh
dGFNYXA7Ci0gICAgICAgIGZvciAoYXV0byYgYm94IDogbGluZUJveGVzKQorICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCB0ZXh0Qm94RGF0YU1hcDsgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgZm9yIChhdXRvIGl0ID0gbGluZUJveGVzLmJlZ2luKCksIGVuZCA9IGxp
bmVCb3hlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBSb290SW5saW5l
Qm94KiBib3ggPSAqaXQ7CiAgICAgICAgICAgICBib3gtPmNvbXB1dGVPdmVyZmxvdyhib3gtPmxp
bmVUb3AoKSwgYm94LT5saW5lQm90dG9tKCksIHRleHRCb3hEYXRhTWFwKTsKKyAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byBib3ggPSBmaXJzdENoaWxkQm94KCk7IGJv
eDsgYm94ID0gYm94LT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIWJveC0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCkBAIC0xMjkzLDE1ICsxMjk5LDE3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
Ym9vbCBmaXhlZFBvc2l0CiAgICAgaWYgKCFwb3NpdGlvbmVkRGVzY2VuZGFudHMpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoYXV0byYgYm94IDogKnBvc2l0aW9uZWREZXNjZW5kYW50cykg
ewotICAgICAgICBlc3RpbWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoKmJveCk7CisgICAgZm9y
IChhdXRvIGl0ID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5iZWdpbigpLCBlbmQgPSBwb3NpdGlv
bmVkRGVzY2VuZGFudHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVy
Qm94JiByID0gKippdDsKKyAgICAgICAgCisgICAgICAgIGVzdGltYXRlUmVnaW9uUmFuZ2VGb3JC
b3hDaGlsZChyKTsKIAogICAgICAgICAvLyBBIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgd2l0aCBh
biBhYnNvbHV0ZSBwb3NpdGlvbmVkIGFuY2VzdG9yIGhhcyBubyB3YXkgb2Yga25vd2luZyBpZiB0
aGUgbGF0dGVyIGhhcyBjaGFuZ2VkIHBvc2l0aW9uLiBTbwogICAgICAgICAvLyBpZiB0aGlzIGlz
IGEgZml4ZWQgcG9zaXRpb24gZWxlbWVudCwgbWFyayBpdCBmb3IgbGF5b3V0IGlmIGl0IGhhcyBh
biBhYnNwb3MgYW5jZXN0b3IgYW5kIG5lZWRzIHRvIG1vdmUgd2l0aCB0aGF0IGFuY2VzdG9yLCBp
LmUuIAogICAgICAgICAvLyBpdCBoYXMgc3RhdGljIHBvc2l0aW9uLgotICAgICAgICBtYXJrRml4
ZWRQb3NpdGlvbk9iamVjdEZvckxheW91dElmTmVlZGVkKCpib3gpOworICAgICAgICBtYXJrRml4
ZWRQb3NpdGlvbk9iamVjdEZvckxheW91dElmTmVlZGVkKHIpOwogICAgICAgICBpZiAoZml4ZWRQ
b3NpdGlvbk9iamVjdHNPbmx5KSB7Ci0gICAgICAgICAgICBib3gtPmxheW91dElmTmVlZGVkKCk7
CisgICAgICAgICAgICByLmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCkBAIC0xMzA5LDQzICsxMzE3LDQzIEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBmaXhlZFBv
c2l0CiAgICAgICAgIC8vIG5vbi1wb3NpdGlvbmVkIGJsb2NrLiAgUmF0aGVyIHRoYW4gdHJ5aW5n
IHRvIGRldGVjdCBhbGwgb2YgdGhlc2UgbW92ZW1lbnQgY2FzZXMsIHdlIGp1c3QgYWx3YXlzIGxh
eSBvdXQgcG9zaXRpb25lZAogICAgICAgICAvLyBvYmplY3RzIHRoYXQgYXJlIHBvc2l0aW9uZWQg
aW1wbGljaXRseSBsaWtlIHRoaXMuICBTdWNoIG9iamVjdHMgYXJlIHJhcmUsIGFuZCBzbyBpbiB0
eXBpY2FsIERIVE1MIG1lbnUgdXNhZ2UgKHdoZXJlIGV2ZXJ5dGhpbmcgaXMKICAgICAgICAgLy8g
cG9zaXRpb25lZCBleHBsaWNpdGx5KSB0aGlzIHNob3VsZCBub3QgaW5jdXIgYSBwZXJmb3JtYW5j
ZSBwZW5hbHR5LgotICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCAoYm94LT5zdHlsZSgp
Lmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgJiYgYm94
LT5wYXJlbnQoKSAhPSB0aGlzKSkKLSAgICAgICAgICAgIGJveC0+c2V0Q2hpbGROZWVkc0xheW91
dChNYXJrT25seVRoaXMpOworICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCAoci5zdHls
ZSgpLmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgJiYg
ci5wYXJlbnQoKSAhPSB0aGlzKSkKKyAgICAgICAgICAgIHIuc2V0Q2hpbGROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIElmIHJlbGF5b3V0Q2hpbGRy
ZW4gaXMgc2V0IGFuZCB0aGUgY2hpbGQgaGFzIHBlcmNlbnRhZ2UgcGFkZGluZyBvciBhbiBlbWJl
ZGRlZCBjb250ZW50IGJveCwgd2UgYWxzbyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNoaWxkcyBw
cmVmIHdpZHRocy4KLSAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgYm94LT5uZWVkc1By
ZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSkKLSAgICAgICAgICAgIGJveC0+c2V0UHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUsIE1hcmtPbmx5VGhpcyk7CisgICAgICAgIGlmIChy
ZWxheW91dENoaWxkcmVuICYmIHIubmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkp
CisgICAgICAgICAgICByLnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlLCBNYXJr
T25seVRoaXMpOwogICAgICAgICAKLSAgICAgICAgYm94LT5tYXJrRm9yUGFnaW5hdGlvblJlbGF5
b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgci5tYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVk
ZWQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gZG8gYSBmdWxsIGxh
eW91dC4gIFdlIGp1c3QgaGF2ZSB0byB1cGRhdGUgb3VyIHBvc2l0aW9uLiBUcnkgdGhhdCBmaXJz
dC4gSWYgd2UgaGF2ZSBzaHJpbmstdG8tZml0IHdpZHRoCiAgICAgICAgIC8vIGFuZCB3ZSBoaXQg
dGhlIGF2YWlsYWJsZSB3aWR0aCBjb25zdHJhaW50LCB0aGUgbGF5b3V0SWZOZWVkZWQoKSB3aWxs
IGNhdGNoIGl0IGFuZCBkbyBhIGZ1bGwgbGF5b3V0LgotICAgICAgICBpZiAoYm94LT5uZWVkc1Bv
c2l0aW9uZWRNb3ZlbWVudExheW91dE9ubHkoKSAmJiBib3gtPnRyeUxheW91dERvaW5nUG9zaXRp
b25lZE1vdmVtZW50T25seSgpKQotICAgICAgICAgICAgYm94LT5jbGVhck5lZWRzTGF5b3V0KCk7
CisgICAgICAgIGlmIChyLm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0T25seSgpICYmIHIu
dHJ5TGF5b3V0RG9pbmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCkpCisgICAgICAgICAgICByLmNs
ZWFyTmVlZHNMYXlvdXQoKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhcmUgcGFn
aW5hdGVkIG9yIGluIGEgbGluZSBncmlkLCBjb21wdXRlIGEgdmVydGljYWwgcG9zaXRpb24gZm9y
IG91ciBvYmplY3Qgbm93LgogICAgICAgICAvLyBJZiBpdCdzIHdyb25nIHdlJ2xsIGxheSBvdXQg
YWdhaW4uCiAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIGJv
b2wgbmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0ID0gYm94LT5uZWVk
c0xheW91dCgpICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5uZWVkc0Jsb2NrRGlyZWN0aW9uTG9j
YXRpb25TZXRCZWZvcmVMYXlvdXQoKTsKKyAgICAgICAgYm9vbCBuZWVkc0Jsb2NrRGlyZWN0aW9u
TG9jYXRpb25TZXRCZWZvcmVMYXlvdXQgPSByLm5lZWRzTGF5b3V0KCkgJiYgdmlldygpLmxheW91
dFN0YXRlKCktPm5lZWRzQmxvY2tEaXJlY3Rpb25Mb2NhdGlvblNldEJlZm9yZUxheW91dCgpOwog
ICAgICAgICBpZiAobmVlZHNCbG9ja0RpcmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0KSB7
Ci0gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBib3gtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgYm94LT51cGRhdGVMb2dpY2Fs
SGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBy
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICAgICAgci51cGRhdGVMb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYm94LT51cGRh
dGVMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9w
Rm9yQ2hpbGQoKmJveCk7CisgICAgICAgICAgICAgICAgci51cGRhdGVMb2dpY2FsV2lkdGgoKTsK
KyAgICAgICAgICAgIG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yQ2hpbGQocik7CiAgICAg
ICAgIH0KIAotICAgICAgICBib3gtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIHIubGF5b3V0
SWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBMYXkgb3V0IGFnYWluIGlmIG91ciBlc3RpbWF0ZSB3
YXMgd3JvbmcuCi0gICAgICAgIGlmIChuZWVkc0Jsb2NrRGlyZWN0aW9uTG9jYXRpb25TZXRCZWZv
cmVMYXlvdXQgJiYgbG9naWNhbFRvcEZvckNoaWxkKCpib3gpICE9IG9sZExvZ2ljYWxUb3ApIHsK
LSAgICAgICAgICAgIGJveC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAg
ICAgICAgICAgYm94LT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICBpZiAobmVlZHNCbG9ja0Rp
cmVjdGlvbkxvY2F0aW9uU2V0QmVmb3JlTGF5b3V0ICYmIGxvZ2ljYWxUb3BGb3JDaGlsZChyKSAh
PSBvbGRMb2dpY2FsVG9wKSB7CisgICAgICAgICAgICByLnNldENoaWxkTmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKKyAgICAgICAgICAgIHIubGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICh1cGRhdGVSZWdpb25SYW5nZUZvckJveENoaWxkKCpib3gpKSB7Ci0gICAg
ICAgICAgICBib3gtPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICBi
b3gtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIGlmICh1cGRhdGVSZWdpb25SYW5nZUZvckJv
eENoaWxkKHIpKSB7CisgICAgICAgICAgICByLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CisgICAgICAgICAgICByLmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC0xMzU2LDggKzEzNjQsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya1Bvc2l0aW9uZWRPYmpl
Y3RzRm9yTGF5b3V0KCkKICAgICBpZiAoIXBvc2l0aW9uZWREZXNjZW5kYW50cykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBib3ggOiAqcG9zaXRpb25lZERlc2NlbmRhbnRzKQot
ICAgICAgICBib3gtPnNldENoaWxkTmVlZHNMYXlvdXQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBw
b3NpdGlvbmVkRGVzY2VuZGFudHMtPmJlZ2luKCksIGVuZCA9IHBvc2l0aW9uZWREZXNjZW5kYW50
cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJCb3gqIHIgPSAqaXQ7
CisgICAgICAgIHItPnNldENoaWxkTmVlZHNMYXlvdXQoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6Om1hcmtGb3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZCgpCkBAIC0xNjgxLDgg
KzE2OTEsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhQ
YWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JgogCiAgICAgTGF5b3V0UG9pbnQgYWNj
dW11bGF0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAgIC8vIFBhaW50IGVhY2ggY29u
dGludWF0aW9uIG91dGxpbmUuCi0gICAgZm9yIChhdXRvJiBmbG93IDogKmNvbnRpbnVhdGlvbnMp
IHsKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPjo6aXRlcmF0b3IgZW5kID0gY29udGlu
dWF0aW9ucy0+ZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUqPjo6aXRl
cmF0b3IgaXQgPSBjb250aW51YXRpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgLy8gTmVlZCB0byBhZGQgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBpbnRlcnZlbmlu
ZyBibG9ja3MuCisgICAgICAgIFJlbmRlcklubGluZSogZmxvdyA9ICppdDsKICAgICAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gZmxvdy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGZvciAo
IDsgYmxvY2sgJiYgYmxvY2sgIT0gdGhpczsgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Jsb2Nr
KCkpCiAgICAgICAgICAgICBhY2N1bXVsYXRlZFBhaW50T2Zmc2V0Lm1vdmVCeShibG9jay0+bG9j
YXRpb24oKSk7CkBAIC0xNzc2LDggKzE3ODgsMTEgQEAgc3RhdGljIHZvaWQgY2xpcE91dFBvc2l0
aW9uZWRPYmplY3RzKGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2kK
ICAgICBpZiAoIXBvc2l0aW9uZWRPYmplY3RzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
Zm9yIChhdXRvJiBvYmplY3QgOiAqcG9zaXRpb25lZE9iamVjdHMpCi0gICAgICAgIHBhaW50SW5m
by0+Y29udGV4dC0+Y2xpcE91dChJbnRSZWN0KG9mZnNldC54KCkgKyBvYmplY3QtPngoKSwgb2Zm
c2V0LnkoKSArIG9iamVjdC0+eSgpLCBvYmplY3QtPndpZHRoKCksIG9iamVjdC0+aGVpZ2h0KCkp
KTsKKyAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgIGZvciAoVHJhY2tlZFJlbmRlcmVyTGlzdEhh
c2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJCb3gqIHIgPSAqaXQ7CisgICAgICAgIHBh
aW50SW5mby0+Y29udGV4dC0+Y2xpcE91dChJbnRSZWN0KG9mZnNldC54KCkgKyByLT54KCksIG9m
ZnNldC55KCkgKyByLT55KCksIHItPndpZHRoKCksIHItPmhlaWdodCgpKSk7CisgICAgfQogfQog
CiBMYXlvdXRVbml0IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ss
IGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spCkBAIC0yMTA4LDcgKzIxMjMs
OSBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGcm9tVHJhY2tlZFJlbmRlcmVyTWFwcyhSZW5k
ZXJCb3gmIGRlc2NlbmRhbnQsIFRyYWNrZWREZQogICAgIGlmICghY29udGFpbmVyU2V0KQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgZm9yIChhdXRvJiBjb250YWluZXIgOiAqY29udGFpbmVy
U2V0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gY29udGFpbmVyU2V0LT5iZWdpbigpLCBlbmQgPSBj
b250YWluZXJTZXQtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciA9ICppdDsKKwogICAgICAgICAvLyBGSVhNRTogRGlzYWJsaW5nIHRoaXMg
YXNzZXJ0IHRlbXBvcmFyaWx5IHVudGlsIHdlIGZpeCB0aGUgbGF5b3V0CiAgICAgICAgIC8vIGJ1
Z3MgYXNzb2NpYXRlZCB3aXRoIHBvc2l0aW9uZWQgb2JqZWN0cyBub3QgcHJvcGVybHkgY2xlYXJl
ZCBmcm9tCiAgICAgICAgIC8vIHRoZWlyIGFuY2VzdG9yIGNoYWluIGJlZm9yZSBiZWluZyBtb3Zl
ZC4gU2VlIHdlYmtpdCBidWcgOTM3NjYuCkBAIC0yMTU2LDI1ICsyMTczLDI2IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmplY3RzKFJlbmRlckJsb2NrKiBvLCBDb250YWlu
aW5nQmxvY2tTdGF0ZSBjCiAgICAgCiAgICAgVmVjdG9yPFJlbmRlckJveCosIDE2PiBkZWFkT2Jq
ZWN0czsKIAotICAgIGZvciAoYXV0byYgYm94IDogKnBvc2l0aW9uZWREZXNjZW5kYW50cykgewot
ICAgICAgICBpZiAoIW8gfHwgYm94LT5pc0Rlc2NlbmRhbnRPZihvKSkgeworICAgIGZvciAoYXV0
byBpdCA9IHBvc2l0aW9uZWREZXNjZW5kYW50cy0+YmVnaW4oKSwgZW5kID0gcG9zaXRpb25lZERl
c2NlbmRhbnRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlckJveCog
ciA9ICppdDsKKyAgICAgICAgaWYgKCFvIHx8IHItPmlzRGVzY2VuZGFudE9mKG8pKSB7CiAgICAg
ICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2NrU3RhdGUgPT0gTmV3Q29udGFpbmluZ0Jsb2NrKQot
ICAgICAgICAgICAgICAgIGJveC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwor
ICAgICAgICAgICAgICAgIHItPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgLy8gSXQgaXMgcGFyZW50IGJsb2NrcyBqb2IgdG8gYWRk
IHBvc2l0aW9uZWQgY2hpbGQgdG8gcG9zaXRpb25lZCBvYmplY3RzIGxpc3Qgb2YgaXRzIGNvbnRh
aW5pbmcgYmxvY2sKICAgICAgICAgICAgIC8vIFBhcmVudCBsYXlvdXQgbmVlZHMgdG8gYmUgaW52
YWxpZGF0ZWQgdG8gZW5zdXJlIHRoaXMgaGFwcGVucy4KLSAgICAgICAgICAgIFJlbmRlckVsZW1l
bnQqIHAgPSBib3gtPnBhcmVudCgpOworICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogcCA9IHIt
PnBhcmVudCgpOwogICAgICAgICAgICAgd2hpbGUgKHAgJiYgIXAtPmlzUmVuZGVyQmxvY2soKSkK
ICAgICAgICAgICAgICAgICBwID0gcC0+cGFyZW50KCk7CiAgICAgICAgICAgICBpZiAocCkKICAg
ICAgICAgICAgICAgICBwLT5zZXRDaGlsZE5lZWRzTGF5b3V0KCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGRlYWRPYmplY3RzLmFwcGVuZChib3gpOworICAgICAgICAgICAgZGVhZE9iamVj
dHMuYXBwZW5kKHIpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAoYXV0byYgb2Jq
ZWN0IDogZGVhZE9iamVjdHMpCi0gICAgICAgIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoKm9iamVj
dCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlYWRPYmplY3RzLnNpemUoKTsgaSsr
KQorICAgICAgICByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KCpkZWFkT2JqZWN0cy5hdChpKSk7CiB9
CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRlckJv
eCYgZGVzY2VuZGFudCkKQEAgLTM3MjUsOCArMzc0MywxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
aGVja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpCiAgICAgaWYgKCFwb3NpdGlvbmVkRGVz
Y2VuZGFudFNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBib3ggOiAqcG9z
aXRpb25lZERlc2NlbmRhbnRTZXQpCi0gICAgICAgIEFTU0VSVCghYm94LT5uZWVkc0xheW91dCgp
KTsKKyAgICBmb3IgKGF1dG8gaXQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudFNldC0+YmVnaW4oKSwg
ZW5kID0gcG9zaXRpb25lZERlc2NlbmRhbnRTZXQtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgUmVuZGVyQm94KiBjdXJyQm94ID0gKml0OworICAgICAgICBBU1NFUlQoIWN1cnJC
b3gtPm5lZWRzTGF5b3V0KCkpOworICAgIH0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGRlYWM2NGY5NTg0Y2NlOTk0Nzlm
NjBlNWEwYzBjMWU2OWZiOWU2N2IuLmFmNGNhNzEzODVlYmJlNjg2YjY2ZWUzNzQ1ZTdkY2RjNTlk
ZDgwOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CkBAIC0yMDMsNyArMjAzLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpyZWJ1aWxkRmxvYXRp
bmdPYmplY3RTZXRGcm9tSW50cnVkaW5nRmxvYXRzKCkKIAogICAgIEhhc2hTZXQ8UmVuZGVyQm94
Kj4gb2xkSW50cnVkaW5nRmxvYXRTZXQ7CiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpICYmIG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZmxvYXRpbmdPYmplY3QgOiBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpIHsKKyAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAg
ICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICBmb3IgKGF1dG8g
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsKICAgICAg
ICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVzY2VuZGFudCgpKQogICAgICAgICAgICAg
ICAgIG9sZEludHJ1ZGluZ0Zsb2F0U2V0LmFkZCgmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkp
OwogICAgICAgICB9CkBAIC0yNjEsMTIgKzI2NCwxNSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
cmVidWlsZEZsb2F0aW5nT2JqZWN0U2V0RnJvbUludHJ1ZGluZ0Zsb2F0cygpCiAgICAgICAgIExh
eW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICBM
YXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsKICAgICAg
ICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZsb2F0
aW5nT2JqZWN0IDogbV9mbG9hdGluZ09iamVjdHMtPnNldCgpKSB7CisgICAgICAgICAgICBjb25z
dCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxG
bG9hdGluZ09iamVjdD4gb2xkRmxvYXRpbmdPYmplY3QgPSBmbG9hdE1hcC50YWtlKCZmbG9hdGlu
Z09iamVjdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
Qm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9y
RmxvYXQoZmxvYXRpbmdPYmplY3QpOwogICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09i
amVjdCkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxCb3R0b20g
PSBsb2dpY2FsQm90dG9tRm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QuZ2V0
KCkpICE9IGxvZ2ljYWxXaWR0aEZvckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0LmdldCgpKSB8fCBs
b2dpY2FsTGVmdEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LmdldCgpKSAhPSBsb2dpY2FsTGVmdEZv
ckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0LmdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobG9naWNhbFdpZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpICE9IGxvZ2ljYWxXaWR0aEZv
ckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0LmdldCgpKSB8fCBsb2dpY2FsTGVmdEZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KSAhPSBsb2dpY2FsTGVmdEZvckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0Lmdl
dCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gc3RkOjptYXgoY2hh
bmdlTG9naWNhbEJvdHRvbSwgc3RkOjptYXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRv
bSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjc0LDcgKzI4MCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpyZWJ1aWxkRmxvYXRpbmdPYmplY3RTZXRGcm9tSW50cnVkaW5n
RmxvYXRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0g
c3RkOjptaW4oY2hhbmdlTG9naWNhbFRvcCwgc3RkOjptaW4obG9naWNhbEJvdHRvbSwgb2xkTG9n
aWNhbEJvdHRvbSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxC
b3R0b20gPSBzdGQ6Om1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBzdGQ6Om1heChsb2dpY2FsQm90
dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9y
RmxvYXQoZmxvYXRpbmdPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IGxvZ2lj
YWxUb3BGb3JGbG9hdChvbGRGbG9hdGluZ09iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobG9naWNhbFRvcCAhPSBvbGRMb2dpY2FsVG9wKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IHN0ZDo6bWluKGNoYW5nZUxvZ2ljYWxU
b3AsIHN0ZDo6bWluKGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKQEAgLTI5MywxMCArMjk5
LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpyZWJ1aWxkRmxvYXRpbmdPYmplY3RTZXRGcm9t
SW50cnVkaW5nRmxvYXRzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZv
ciAoYXV0byYgZmxvYXRpbmdPYmplY3QgOiBmbG9hdE1hcC52YWx1ZXMoKSkgeworICAgICAgICBh
dXRvIGVuZCA9IGZsb2F0TWFwLmVuZCgpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdE1h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICghZmxv
YXRpbmdPYmplY3QtPmlzRGVzY2VuZGFudCgpKSB7CiAgICAgICAgICAgICAgICAgY2hhbmdlTG9n
aWNhbFRvcCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IHN0ZDo6
bWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09i
amVjdC5nZXQoKSkpOworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBzdGQ6
Om1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdP
YmplY3QpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0zMDcsOCArMzE1LDEwIEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjpyZWJ1aWxkRmxvYXRpbmdPYmplY3RTZXRGcm9tSW50cnVk
aW5nRmxvYXRzKCkKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5zaXplKCkg
PCBvbGRJbnRydWRpbmdGbG9hdFNldC5zaXplKCkpCiAgICAgICAgICAgICBtYXJrQWxsRGVzY2Vu
ZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSkKLSAg
ICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5yZW1vdmUoJmZsb2F0aW5nT2JqZWN0
LT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9h
dGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIGF1
dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8g
aXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9sZEludHJ1ZGlu
Z0Zsb2F0U2V0LmlzRW1wdHkoKTsgKytpdCkKKyAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdG
bG9hdFNldC5yZW1vdmUoJigqaXQpLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmICghb2xk
SW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1hcmtBbGxEZXNj
ZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgfQpAQCAtMTk3Miw4ICsxOTgy
LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2wKICAgICAgICAgICAgIGlmIChhbmNlc3Rvci5p
c1JlbmRlclZpZXcoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChh
bmNlc3Rvci5oYXNPdmVyaGFuZ2luZ0Zsb2F0cygpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBmbG9hdGluZ09iamVjdCA6IGZsb2F0aW5nT2JqZWN0U2V0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFJlbmRlckJveCYgcmVuZGVyZXIgPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
LCBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJveCYgcmVuZGVyZXIgPSAoKml0KS0+cmVuZGVyZXIoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yLmhhc092ZXJoYW5naW5nRmxvYXQocmVu
ZGVyZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRCbG9jayA9ICZhbmNlc3Rv
cjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA2MCw3ICsyMDcwLDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93Ojptb3ZlRmxvYXRzVG8oUmVuZGVyQmxvY2tGbG93KiB0b0Js
b2NrRmxvdykKICAgICAgICAgaWYgKCF0b0Jsb2NrRmxvdy0+bV9mbG9hdGluZ09iamVjdHMpCiAg
ICAgICAgICAgICB0b0Jsb2NrRmxvdy0+Y3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7CiAKLSAgICAg
ICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSkg
eworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZnJvbUZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICBhdXRvIGVuZCA9IGZyb21GbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKKworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmcm9tRmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CisKICAgICAgICAgICAgIC8v
IERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlz
dAogICAgICAgICAgICAgaWYgKHRvQmxvY2tGbG93LT5jb250YWluc0Zsb2F0KGZsb2F0aW5nT2Jq
ZWN0LT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIwODIsOSAr
MjA5NywxMiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkK
ICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3Ig
KGF1dG8mIGZsb2F0aW5nT2JqZWN0IDogbV9mbG9hdGluZ09iamVjdHMtPnNldCgpKSB7Ci0gICAg
ICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpCi0gICAgICAgICAgICBhZGRP
dmVyZmxvd0Zyb21DaGlsZCgmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCksIEludFNpemUoeFBv
c2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QuZ2V0KCkpLCB5UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdC5nZXQoKSkpKTsKKyAg
ICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCk7CisgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
KyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0KCk7CisgICAgICAg
IGlmIChyLT5pc0Rlc2NlbmRhbnQoKSkKKyAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUNoaWxk
KCZyLT5yZW5kZXJlcigpLCBJbnRTaXplKHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2lu
KHIpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkpOwogICAgIH0KIH0KIApA
QCAtMjEwNiwxMSArMjEyNCwxNCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6cmVwYWludE92ZXJo
YW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykKICAgICAvLyBGSVhNRTogQXZv
aWQgZGlzYWJsaW5nIExheW91dFN0YXRlLiBBdCB0aGUgdmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJs
ZSBpdCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5nCiAgICAgLy8gaW4gdGhpcyBibG9jay4gQmV0dGVy
IHlldCB3b3VsZCBiZSB0byBwdXNoIGV4dHJhIHN0YXRlIGZvciB0aGUgY29udGFpbmVycyBvZiBv
dGhlciBmbG9hdHMuCiAgICAgTGF5b3V0U3RhdGVEaXNhYmxlciBsYXlvdXRTdGF0ZURpc2FibGVy
KCZ2aWV3KCkpOwotICAgIGZvciAoYXV0byYgZmxvYXRpbmdPYmplY3QgOiBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCkpIHsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgYXV0byBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0ID0gaXQtPmdldCgpOwogICAgICAgICAvLyBPbmx5IHJlcGFpbnQgdGhlIG9iamVj
dCBpZiBpdCBpcyBvdmVyaGFuZ2luZywgaXMgbm90IGluIGl0cyBvd24gbGF5ZXIsIGFuZAogICAg
ICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG1fc2hvdWxkUGFpbnQgaXMg
c2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBsYXR0ZXIKICAgICAg
ICAgLy8gY29uZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5kYW50IG9mIHVz
LgotICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LmdldCgp
KSA+IGxvZ2ljYWxIZWlnaHQoKQorICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KSA+IGxvZ2ljYWxIZWlnaHQoKQogICAgICAgICAgICAgJiYgIWZsb2F0aW5n
T2JqZWN0LT5yZW5kZXJlcigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkKICAgICAgICAgICAgICYm
IChmbG9hdGluZ09iamVjdC0+c2hvdWxkUGFpbnQoKSB8fCAocGFpbnRBbGxEZXNjZW5kYW50cyAm
JiBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5pc0Rlc2NlbmRhbnRPZih0aGlzKSkpKSB7CiAg
ICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5yZXBhaW50KCk7CkBAIC0yMTM4
LDIzICsyMTU5LDI2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpwYWludEZsb2F0cyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50CiAgICAgaWYgKCFtX2Zsb2F0
aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09i
amVjdCA6IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSkgeworICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9IGl0LT5nZXQoKTsKICAgICAgICAgLy8gT25seSBwYWludCB0aGUg
b2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgotICAgICAgICBpZiAoZmxv
YXRpbmdPYmplY3QtPnNob3VsZFBhaW50KCkgJiYgIWZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigp
Lmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgaWYgKHItPnNob3VsZFBhaW50KCkg
JiYgIXItPnJlbmRlcmVyKCkuaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAg
UGFpbnRJbmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgICAgIGN1cnJl
bnRQYWludEluZm8ucGhhc2UgPSBwcmVzZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKICAgICAgICAgICAgIC8vIEZJWE1FOiBMYXlvdXRQb2lu
dCB2ZXJzaW9uIG9mIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luIHdvdWxkIG1ha2Ug
dGhpcyBtdWNoIGNsZWFuZXIuCi0gICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0g
ZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChmbG9hdGluZ09iamVjdC5nZXQoKSwgTGF5
b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4oZmxvYXRpbmdPYmplY3QuZ2V0KCkpIC0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkueCgp
LCBwYWludE9mZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9h
dGluZ09iamVjdC5nZXQoKSkgLSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS55KCkpKTsKLSAg
ICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLnBhaW50KGN1cnJlbnRQYWludElu
Zm8sIGNoaWxkUG9pbnQpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZs
aXBGbG9hdEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQociwgTGF5b3V0UG9pbnQocGFpbnRPZmZzZXQu
eCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5yZW5kZXJlcigp
LngoKSwgcGFpbnRPZmZzZXQueSgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4o
cikgLSByLT5yZW5kZXJlcigpLnkoKSkpOworICAgICAgICAgICAgci0+cmVuZGVyZXIoKS5wYWlu
dChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAgIGlmICghcHJlc2Vy
dmVQaGFzZSkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWlu
dFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwotICAgICAgICAgICAgICAgIGZsb2F0aW5nT2Jq
ZWN0LT5yZW5kZXJlcigpLnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOworICAg
ICAgICAgICAgICAgIHItPnJlbmRlcmVyKCkucGFpbnQoY3VycmVudFBhaW50SW5mbywgY2hpbGRQ
b2ludCk7CiAgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhh
c2VGbG9hdDsKLSAgICAgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5wYWlu
dChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKKyAgICAgICAgICAgICAgICByLT5yZW5k
ZXJlcigpLnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAg
ICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAg
ICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5wYWludChjdXJyZW50UGFpbnRJ
bmZvLCBjaGlsZFBvaW50KTsKKyAgICAgICAgICAgICAgICByLT5yZW5kZXJlcigpLnBhaW50KGN1
cnJlbnRQYWludEluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWlu
dEluZm8ucGhhc2UgPSBQYWludFBoYXNlT3V0bGluZTsKLSAgICAgICAgICAgICAgICBmbG9hdGlu
Z09iamVjdC0+cmVuZGVyZXIoKS5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsK
KyAgICAgICAgICAgICAgICByLT5yZW5kZXJlcigpLnBhaW50KGN1cnJlbnRQYWludEluZm8sIGNo
aWxkUG9pbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjE2Myw5ICsy
MTg3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpwYWludEZsb2F0cyhQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50CiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
Y2xpcE91dEZsb2F0aW5nT2JqZWN0cyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBQYWlu
dEluZm8qIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9z
aXRpb24sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spCiB7CiAgICAgaWYg
KG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZmxvYXRpbmdPYmplY3Qg
OiBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpIHsKLSAgICAgICAgICAgIExheW91dFJlY3QgZmxv
YXRCb3gob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNs
dWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QuZ2V0KCkpLAotICAgICAgICAgICAgICAgIG9mZnNl
dEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdp
bihmbG9hdGluZ09iamVjdC5nZXQoKSksCisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAg
YXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgZm9yIChhdXRvIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CisgICAgICAg
ICAgICBMYXlvdXRSZWN0IGZsb2F0Qm94KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQ
b3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSwKKyAgICAgICAg
ICAgICAgICBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0aW9uRm9yRmxvYXRJ
bmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpLAogICAgICAgICAgICAgICAgIGZsb2F0aW5n
T2JqZWN0LT5yZW5kZXJlcigpLndpZHRoKCksIGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmhl
aWdodCgpKTsKICAgICAgICAgICAgIHJvb3RCbG9jay5mbGlwRm9yV3JpdGluZ01vZGUoZmxvYXRC
b3gpOwogICAgICAgICAgICAgZmxvYXRCb3gubW92ZShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9u
LngoKSwgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbi55KCkpOwpAQCAtMjU2Myw5ICsyNTkwLDEy
IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20o
RmxvYXRpbmdPYmplY3Q6OlR5cGUgZmxvYXRUCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdEJvdHRvbSA9IDA7
Ci0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KSkgeworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSAmJiBm
bG9hdGluZ09iamVjdC0+dHlwZSgpICYgZmxvYXRUeXBlKQotICAgICAgICAgICAgbG93ZXN0Rmxv
YXRCb3R0b20gPSBzdGQ6Om1heChsb3dlc3RGbG9hdEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZs
b2F0KGZsb2F0aW5nT2JqZWN0LmdldCgpKSk7CisgICAgICAgICAgICBsb3dlc3RGbG9hdEJvdHRv
bSA9IHN0ZDo6bWF4KGxvd2VzdEZsb2F0Qm90dG9tLCBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxv
YXRpbmdPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0Qm90dG9tOwogfQpA
QCAtMjU3NSw5ICsyNjA1LDEyIEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpsb3dlc3RJ
bml0aWFsTGV0dGVyTG9naWNhbEJvdHRvbSgpIGNvbnN0CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdEJvdHRv
bSA9IDA7Ci0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKSkgeworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2Jq
ZWN0U2V0LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQo
KSAmJiBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJ
UlNUX0xFVFRFUiAmJiBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zdHlsZSgpLmluaXRpYWxM
ZXR0ZXJEcm9wKCkgPiAwKQotICAgICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBzdGQ6Om1h
eChsb3dlc3RGbG9hdEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0
LmdldCgpKSk7CisgICAgICAgICAgICBsb3dlc3RGbG9hdEJvdHRvbSA9IHN0ZDo6bWF4KGxvd2Vz
dEZsb2F0Qm90dG9tLCBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0Qm90dG9tOwogfQpAQCAtMjU5NCw4ICsyNjI3LDEw
IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5k
ZXJCbG9ja0Zsb3cmIGNoaWxkLCBib29sIG1hCiAKICAgICAvLyBGbG9hdHMgdGhhdCB3aWxsIHJl
bWFpbiB0aGUgY2hpbGQncyByZXNwb25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFjdG9yIGlu
dG8gaXRzCiAgICAgLy8gb3ZlcmZsb3cuCi0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6
IGNoaWxkLm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSkgewotICAgICAgICBMYXlvdXRVbml0IGZs
b2F0TG9naWNhbEJvdHRvbSA9IHN0ZDo6bWluKGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGlu
Z09iamVjdC5nZXQoKSksIExheW91dFVuaXQ6Om1heCgpIC0gY2hpbGRMb2dpY2FsVG9wKTsKKyAg
ICBhdXRvIGNoaWxkRW5kID0gY2hpbGQubV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmVuZCgpOwor
ICAgIGZvciAoYXV0byBjaGlsZEl0ID0gY2hpbGQubV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJl
Z2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgeworICAgICAgICBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBjaGlsZEl0LT5nZXQoKTsKKyAgICAgICAgTGF5b3V0
VW5pdCBmbG9hdExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1pbihsb2dpY2FsQm90dG9tRm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QpLCBMYXlvdXRVbml0OjptYXgoKSAtIGNoaWxkTG9naWNhbFRvcCk7CiAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGZsb2F0
TG9naWNhbEJvdHRvbTsKICAgICAgICAgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gc3RkOjpt
YXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIApAQCAtMjYzMiw3
ICsyNjY3LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJoYW5naW5nRmxv
YXRzKFJlbmRlckJsb2NrRmxvdyYgY2hpbGQsIGJvb2wgbWEKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gU2luY2UgdGhlIGZsb2F0IGRvZXNuJ3Qgb3ZlcmhhbmcsIGl0IGRpZG4ndCBnZXQg
cHV0IGludG8gb3VyIGxpc3QuIFdlIG5lZWQgdG8gYWRkIGl0cyBvdmVyZmxvdyBpbiB0byB0aGUg
Y2hpbGQgbm93LgogICAgICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQo
KSkKLSAgICAgICAgICAgICAgICBjaGlsZC5hZGRPdmVyZmxvd0Zyb21DaGlsZCgmZmxvYXRpbmdP
YmplY3QtPnJlbmRlcmVyKCksIExheW91dFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4oZmxvYXRpbmdPYmplY3QuZ2V0KCkpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01h
cmdpbihmbG9hdGluZ09iamVjdC5nZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC5hZGRP
dmVyZmxvd0Zyb21DaGlsZCgmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCksIExheW91dFNpemUo
eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpLCB5UG9zaXRp
b25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tOwpAQCAtMjY2NSw4ICsy
NzAwLDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVy
QmxvY2tGbG93KiBwcmV2LCBSZW5kZXJCbG9ja0Zsb3cqCiAKICAgICBsb2dpY2FsTGVmdE9mZnNl
dCArPSBtYXJnaW5Mb2dpY2FsTGVmdCgpOwogCi0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVj
dCA6IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSkgewotICAgICAgICBpZiAobG9naWNh
bEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LmdldCgpKSA+IGxvZ2ljYWxUb3BPZmZzZXQp
IHsKKyAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9IHByZXYtPm1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICBhdXRvIHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOworICAg
IGZvciAoYXV0byBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyAr
K3ByZXZJdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBwcmV2
SXQtPmdldCgpOworICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2Jq
ZWN0KSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMgfHwgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5jb250YWluczxGbG9hdGluZ09iamVj
dCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpmbG9hdGluZ09iamVjdCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemls
eS4KICAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQpAQCAtMjcxOCwxMyAr
Mjc1NiwxNiBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bWFya1NpYmxpbmdzV2l0aEZsb2F0c0Zv
ckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUpCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuOwogCisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIGF1dG8gZW5k
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisKICAgICBmb3IgKFJlbmRlck9iamVjdCogbmV4
dCA9IG5leHRTaWJsaW5nKCk7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PigqbmV4dCkgfHwgbmV4dC0+aXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgUmVuZGVyQmxvY2tGbG93JiBuZXh0QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+
KCpuZXh0KTsKLSAgICAgICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKSkgewotICAgICAgICAgICAgUmVuZGVyQm94JiBmbG9hdGluZ0JveCA9IGZs
b2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGlu
Z09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFJlbmRl
ckJveCYgZmxvYXRpbmdCb3ggPSAoKml0KS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmIChm
bG9hdFRvUmVtb3ZlICYmICZmbG9hdGluZ0JveCAhPSBmbG9hdFRvUmVtb3ZlKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5leHRCbG9jay5jb250YWluc0Zsb2F0
KGZsb2F0aW5nQm94KSkKQEAgLTI4ODcsMTEgKzI5MjgsMTQgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmFkanVzdEZvckJvcmRlckZpdChMYXlvdXRVbml0IHgsIExheW91dFVuaXQmIGxlZnQsIExh
eW91dFUKICAgICB9CiAKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgZm9y
IChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSkgeworICAg
ICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7CisgICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+
Z2V0KCk7CiAgICAgICAgICAgICAvLyBPbmx5IGV4YW1pbmUgdGhlIG9iamVjdCBpZiBvdXIgbV9z
aG91bGRQYWludCBmbGFnIGlzIHNldC4KLSAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+
c2hvdWxkUGFpbnQoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0g
eFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QuZ2V0KCkpIC0g
ZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkueCgpOwotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLndp
ZHRoKCk7CisgICAgICAgICAgICBpZiAoci0+c2hvdWxkUGFpbnQoKSkgeworICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJn
aW4ocikgLSByLT5yZW5kZXJlcigpLngoKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGZs
b2F0UmlnaHQgPSBmbG9hdExlZnQgKyByLT5yZW5kZXJlcigpLndpZHRoKCk7CiAgICAgICAgICAg
ICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIGZsb2F0TGVmdCk7CiAgICAgICAgICAgICAgICAg
cmlnaHQgPSBzdGQ6Om1heChyaWdodCwgZmxvYXRSaWdodCk7CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmlu
ZGV4IGMyNTJlNjk0MzIxZDNkNWM0MjAwYzQ2OTE2YWVkN2FkNTRjMGM2NzguLjVlYzA0NzBiYWNj
OGFmOGQ1NjRhZTZkZDY3N2YyYzI2MzU1ZjhlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC01MTIsOCArNTEyLDkgQEAg
c3RhdGljIGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJv
eCogbGluZUJveCwgQmlkaVJ1biogcnUKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgIG1lYXN1cmVkV2lkdGggKz0gd29yZE1lYXN1cmVtZW50LndpZHRoOwogICAgICAgICAgICAg
aWYgKCF3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiB3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cykK
LSAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tGb250cy5hZGQoZm9udCk7CisgICAgICAgICAg
ICAgICAgSGFzaFNldDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHdvcmRNZWFz
dXJlbWVudC5mYWxsYmFja0ZvbnRzLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoSGFzaFNl
dDxjb25zdCBGb250Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gd29yZE1lYXN1cmVtZW50LmZhbGxi
YWNrRm9udHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgICAgICBm
YWxsYmFja0ZvbnRzLmFkZCgqaXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGlmIChtZWFzdXJlZFdpZHRoICYmIGxhc3RFbmRPZmZzZXQgIT0gcnVuLT5tX3N0b3ApIHsKQEAg
LTEzMzUsOCArMTMzNiw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxv
YXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGF1dG8mIHBvc2l0aW9uZWRPYmplY3QgOiBsaW5l
QnJlYWtlci5wb3NpdGlvbmVkT2JqZWN0cygpKQotICAgICAgICAgICAgc2V0U3RhdGljUG9zaXRp
b25zKCp0aGlzLCAqcG9zaXRpb25lZE9iamVjdCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGluZUJyZWFrZXIucG9zaXRpb25lZE9iamVjdHMoKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucygqdGhpcywgKmxpbmVCcmVha2VyLnBvc2l0aW9uZWRP
YmplY3RzKClbaV0pOwogCiAgICAgICAgIGlmICghbGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0Rmlyc3RMaW5l
KGZhbHNlKTsKQEAgLTE0NTMsNyArMTQ1NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsaW5r
VG9FbmRMaW5lSWZOZWVkZWQoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKICAgICAgICAg
ICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKQogICAgICAgICAgICAgICAgICAg
ICB1cGRhdGVSZWdpb25Gb3JMaW5lKGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8
UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZmxvYXRpbmdCb3ggOiAqY2xlYW5MaW5lRmxvYXRz
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGNsZWFuTGluZUZsb2F0cy0+
YmVnaW4oKSwgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gKml0Owog
ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0g
aW5zZXJ0RmxvYXRpbmdPYmplY3QoKmZsb2F0aW5nQm94KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghZmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRPcmlnaW5hdGluZ0xpbmUobGluZSk7
CkBAIC0xNTEwLDEyICsxNTEyLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsaW5rVG9FbmRM
aW5lSWZOZWVkZWQoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKIAogdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6OnJlcGFpbnREaXJ0eUZsb2F0cyhWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0
cykKIHsKKyAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7CiAgICAgLy8gRmxv
YXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90IHJlcGFpbnQgd2hlbiB3ZSBsYWlk
IHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKICAgICAvLyBwYWludGVkIGJ5IG5vdyBpZiB0aGV5
IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhleSBzdGlsbCBuZWVk
IHRvIGJlCiAgICAgLy8gcGFpbnRlZC4KLSAgICBmb3IgKGF1dG8mIGZsb2F0V2l0aFJlY3QgOiBm
bG9hdHMpIHsKLSAgICAgICAgaWYgKCFmbG9hdFdpdGhSZWN0LmV2ZXJIYWRMYXlvdXQpIHsKLSAg
ICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gZmxvYXRXaXRoUmVjdC5vYmplY3Q7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmbG9hdENvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFmbG9h
dHNbaV0uZXZlckhhZExheW91dCkgeworICAgICAgICAgICAgUmVuZGVyQm94JiBib3ggPSBmbG9h
dHNbaV0ub2JqZWN0OwogICAgICAgICAgICAgaWYgKCFib3gueCgpICYmICFib3gueSgpICYmIGJv
eC5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAgICAgICAgICAgICAgICBib3gucmVw
YWludCgpOwogICAgICAgICB9CkBAIC0xNjAzLDggKzE2MDYsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6bGF5b3V0TGluZUJveGVzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYg
cmVwYWludAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IHJlcGxhY2VkQ2hpbGRyZW4pCi0gICAgICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVk
ZWQoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlZENoaWxkcmVuLnNp
emUoKTsgaSsrKQorICAgICAgICAgICAgIHJlcGxhY2VkQ2hpbGRyZW5baV0tPmxheW91dElmTmVl
ZGVkKCk7CiAKICAgICAgICAgbGF5b3V0UnVuc0FuZEZsb2F0cyhsYXlvdXRTdGF0ZSwgaGFzSW5s
aW5lQ2hpbGQpOwogICAgIH0KQEAgLTE2NDIsNyArMTY0NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpjaGVja0Zsb2F0c0luQ2xlYW5MaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmUsIFZlY3RvcjxG
bG9hdFdpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGZsb2F0aW5n
Qm94IDogKmNsZWFuTGluZUZsb2F0cykgeworICAgIGZvciAoYXV0byBpdCA9IGNsZWFuTGluZUZs
b2F0cy0+YmVnaW4oKSwgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3ggPSAqaXQ7CiAgICAgICAgIGZs
b2F0aW5nQm94LT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBMYXlvdXRTaXplIG5ld1NpemUo
ZmxvYXRpbmdCb3gtPndpZHRoKCkgKyBmbG9hdGluZ0JveC0+aG9yaXpvbnRhbE1hcmdpbkV4dGVu
dCgpLCBmbG9hdGluZ0JveC0+aGVpZ2h0KCkgKyBmbG9hdGluZ0JveC0+dmVydGljYWxNYXJnaW5F
eHRlbnQoKSk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGZsb2F0
SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsKQEAgLTE3NDMsNyArMTc0Nyw4IEBAIFJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrRmxvdzo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBmaXJzdFJvb3RCb3go
KTsKICAgICAgICAgd2hpbGUgKGxpbmUgIT0gY3VycikgewogICAgICAgICAgICAgaWYgKFZlY3Rv
cjxSZW5kZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0gbGluZS0+ZmxvYXRzUHRyKCkpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIGZsb2F0aW5nQm94IDogKmNsZWFuTGluZUZsb2F0cykg
eworICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4o
KSwgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3ggPSAqaXQ7CiAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGluc2VydEZsb2F0aW5n
T2JqZWN0KCpmbG9hdGluZ0JveCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZmxvYXRp
bmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZmxvYXRp
bmdPYmplY3QtPnNldE9yaWdpbmF0aW5nTGluZShsaW5lKTsKQEAgLTE4NTAsOCArMTg1NSwxMSBA
QCBib29sIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tQYWdpbmF0aW9uQW5kRmxvYXRzQXRFbmRMaW5l
KExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0UwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9t
ID0gbGFzdExpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpICsgYWJzb2x1dGVWYWx1ZShsaW5l
RGVsdGEpOwogCi0gICAgZm9yIChhdXRvJiBmbG9hdGluZ09iamVjdCA6IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKSkgewotICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5n
T2JqZWN0LmdldCgpKSA+PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9h
dGluZ09iamVjdC5nZXQoKSkgPCBsb2dpY2FsQm90dG9tKQorICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChs
b2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpID49IGxvZ2ljYWxUb3AgJiYgbG9n
aWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSA8IGxvZ2ljYWxCb3R0b20pCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAKaW5kZXggMTQxMjI1OGU3YzllYTViZTdhMjcwYWFjNGUxOTIxMjE2
NWNjOWZjYy4uOTE4YTRmODhhMjNkOTZkOGFlNWUyMzY2OTU2NzE3ODBhMDkzNjI3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcApAQCAtNDU1LDggKzQ1NSwx
MSBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMoUmVuZGVyRWxlbWVu
dCYgb3duZXIpCiAgICAgQ291bnRlck1hcHM6Oml0ZXJhdG9yIG1hcHNJdGVyYXRvciA9IG1hcHMu
ZmluZCgmb3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0gbWFwcy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGZvciAoYXV0byYgY291bnRlciA6ICptYXBzSXRlcmF0b3ItPnZhbHVl
LmdldCgpKQotICAgICAgICBkZXN0cm95Q291bnRlck5vZGVXaXRob3V0TWFwUmVtb3ZhbChjb3Vu
dGVyLmtleSwgY291bnRlci52YWx1ZS5nZXQoKSk7CisgICAgQ291bnRlck1hcCogbWFwID0gbWFw
c0l0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICBDb3VudGVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoQ291bnRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBkZXN0cm95Q291bnRl
ck5vZGVXaXRob3V0TWFwUmVtb3ZhbChpdC0+a2V5LCBpdC0+dmFsdWUuZ2V0KCkpOworICAgIH0K
ICAgICBtYXBzLnJlbW92ZShtYXBzSXRlcmF0b3IpOwogICAgIG93bmVyLnNldEhhc0NvdW50ZXJO
b2RlTWFwKGZhbHNlKTsKIH0KQEAgLTUwNSwyNCArNTA4LDI1IEBAIHN0YXRpYyB2b2lkIHVwZGF0
ZUNvdW50ZXJzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogICAgIGNvbnN0IENvdW50ZXJEaXJl
Y3RpdmVNYXAqIGRpcmVjdGl2ZU1hcCA9IHJlbmRlcmVyLnN0eWxlKCkuY291bnRlckRpcmVjdGl2
ZXMoKTsKICAgICBpZiAoIWRpcmVjdGl2ZU1hcCkKICAgICAgICAgcmV0dXJuOworICAgIENvdW50
ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRpcmVjdGl2ZU1hcC0+ZW5kKCk7
CiAgICAgaWYgKCFyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgpKSB7Ci0gICAgICAgIGZvciAo
YXV0byYga2V5IDogZGlyZWN0aXZlTWFwLT5rZXlzKCkpCi0gICAgICAgICAgICBtYWtlQ291bnRl
ck5vZGUocmVuZGVyZXIsIGtleSwgZmFsc2UpOworICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXks
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBDb3VudGVyTWFwKiBjb3VudGVy
TWFwID0gY291bnRlck1hcHMoKS5nZXQoJnJlbmRlcmVyKTsKICAgICBBU1NFUlQoY291bnRlck1h
cCk7Ci0gICAgZm9yIChhdXRvJiBrZXkgOiBkaXJlY3RpdmVNYXAtPmtleXMoKSkgewotICAgICAg
ICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBjb3VudGVyTWFwLT5nZXQoa2V5KTsKKyAgICBm
b3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlyZWN0aXZlTWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPENvdW50ZXJOb2Rl
PiBub2RlID0gY291bnRlck1hcC0+Z2V0KGl0LT5rZXkpOwogICAgICAgICBpZiAoIW5vZGUpIHsK
LSAgICAgICAgICAgIG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwga2V5LCBmYWxzZSk7CisgICAg
ICAgICAgICBtYWtlQ291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXksIGZhbHNlKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIFJlZlB0cjxDb3VudGVyTm9kZT4g
bmV3UGFyZW50ID0gMDsKICAgICAgICAgUmVmUHRyPENvdW50ZXJOb2RlPiBuZXdQcmV2aW91c1Np
YmxpbmcgPSAwOwogICAgICAgICAKLSAgICAgICAgZmluZFBsYWNlRm9yQ291bnRlcihyZW5kZXJl
ciwga2V5LCBub2RlLT5oYXNSZXNldFR5cGUoKSwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxp
bmcpOwotICAgICAgICBpZiAobm9kZSAhPSBjb3VudGVyTWFwLT5nZXQoa2V5KSkKKyAgICAgICAg
ZmluZFBsYWNlRm9yQ291bnRlcihyZW5kZXJlciwgaXQtPmtleSwgbm9kZS0+aGFzUmVzZXRUeXBl
KCksIG5ld1BhcmVudCwgbmV3UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgaWYgKG5vZGUgIT0g
Y291bnRlck1hcC0+Z2V0KGl0LT5rZXkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IENvdW50ZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnQoKTsKICAgICAgICAgaWYgKG5ld1Bh
cmVudCA9PSBwYXJlbnQgJiYgbmV3UHJldmlvdXNTaWJsaW5nID09IG5vZGUtPnByZXZpb3VzU2li
bGluZygpKQpAQCAtNTMwLDcgKzUzNCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUNvdW50ZXJzKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyKQogICAgICAgICBpZiAocGFyZW50KQogICAgICAgICAgICAg
cGFyZW50LT5yZW1vdmVDaGlsZChub2RlLmdldCgpKTsKICAgICAgICAgaWYgKG5ld1BhcmVudCkK
LSAgICAgICAgICAgIG5ld1BhcmVudC0+aW5zZXJ0QWZ0ZXIobm9kZS5nZXQoKSwgbmV3UHJldmlv
dXNTaWJsaW5nLmdldCgpLCBrZXkpOworICAgICAgICAgICAgbmV3UGFyZW50LT5pbnNlcnRBZnRl
cihub2RlLmdldCgpLCBuZXdQcmV2aW91c1NpYmxpbmcuZ2V0KCksIGl0LT5rZXkpOwogICAgIH0K
IH0KIApAQCAtNTYwLDMzICs1NjQsMzYgQEAgdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0
eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3QKICAgICBj
b25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBvbGRDb3VudGVyRGlyZWN0aXZlczsKICAgICBpZiAo
b2xkU3R5bGUgJiYgKG9sZENvdW50ZXJEaXJlY3RpdmVzID0gb2xkU3R5bGUtPmNvdW50ZXJEaXJl
Y3RpdmVzKCkpKSB7CiAgICAgICAgIGlmIChuZXdTdHlsZSAmJiAobmV3Q291bnRlckRpcmVjdGl2
ZXMgPSBuZXdTdHlsZS0+Y291bnRlckRpcmVjdGl2ZXMoKSkpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgZGlyZWN0aXZlIDogKm5ld0NvdW50ZXJEaXJlY3RpdmVzKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBvbGRNYXBJdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5maW5kKGRpcmVjdGl2ZS5r
ZXkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRNYXBJdCAhPSBvbGRDb3VudGVyRGlyZWN0aXZl
cy0+ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0LT52YWx1ZSA9PSBk
aXJlY3RpdmUudmFsdWUpCisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9p
dGVyYXRvciBuZXdNYXBFbmQgPSBuZXdDb3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CisgICAgICAg
ICAgICBDb3VudGVyRGlyZWN0aXZlTWFwOjpjb25zdF9pdGVyYXRvciBvbGRNYXBFbmQgPSBvbGRD
b3VudGVyRGlyZWN0aXZlcy0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7
IGl0ICE9IG5ld01hcEVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIG9sZE1hcEl0ID0gb2xkQ291bnRlckRpcmVjdGl2ZXMtPmZp
bmQoaXQtPmtleSk7CisgICAgICAgICAgICAgICAgaWYgKG9sZE1hcEl0ICE9IG9sZE1hcEVuZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAob2xkTWFwSXQtPnZhbHVlID09IGl0LT52YWx1ZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGRpcmVjdGl2ZS5rZXkp
OworICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGUo
cmVuZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAv
LyBXZSBtdXN0IGNyZWF0ZSB0aGlzIG5vZGUgaGVyZSwgYmVjYXVzZSB0aGUgY2hhbmdlZCBub2Rl
IG1heSBiZSBhIG5vZGUgd2l0aCBubyBkaXNwbGF5IHN1Y2ggYXMKICAgICAgICAgICAgICAgICAv
LyBhcyB0aG9zZSBjcmVhdGVkIGJ5IHRoZSBpbmNyZW1lbnQgb3IgcmVzZXQgZGlyZWN0aXZlcyBh
bmQgdGhlIHJlLWxheW91dCB0aGF0IHdpbGwgaGFwcGVuIHdpbGwKICAgICAgICAgICAgICAgICAv
LyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAg
ICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBkaXJlY3RpdmUua2V5LCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVyLCBpdC0+a2V5LCBm
YWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEZXN0cm95aW5nIG9sZCBjb3Vu
dGVycyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgbmV3IGNvdW50ZXJEaXJlY3RpdmUgbWFwLgot
ICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBvbGRDb3VudGVyRGlyZWN0aXZlcy0+a2V5cygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuZXdDb3VudGVyRGlyZWN0aXZlcy0+Y29udGFpbnMo
a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJO
b2RlKHJlbmRlcmVyLCBrZXkpOworICAgICAgICAgICAgZm9yIChDb3VudGVyRGlyZWN0aXZlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG9sZENvdW50ZXJEaXJlY3RpdmVzLT5iZWdpbigpOyBpdCAh
PW9sZE1hcEVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmICghbmV3Q291bnRlckRpcmVj
dGl2ZXMtPmNvbnRhaW5zKGl0LT5rZXkpKQorICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb3Vu
dGVyOjpkZXN0cm95Q291bnRlck5vZGUocmVuZGVyZXIsIGl0LT5rZXkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyLmhhc0NvdW50ZXJO
b2RlTWFwKCkpCiAgICAgICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJO
b2RlcyhyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG5ld1N0eWxlICYmIChu
ZXdDb3VudGVyRGlyZWN0aXZlcyA9IG5ld1N0eWxlLT5jb3VudGVyRGlyZWN0aXZlcygpKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG5ld0NvdW50ZXJEaXJlY3RpdmVzLT5rZXlzKCkpIHsK
KyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgbmV3TWFwRW5kID0g
bmV3Q291bnRlckRpcmVjdGl2ZXMtPmVuZCgpOworICAgICAgICBmb3IgKENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3Q291bnRlckRpcmVjdGl2ZXMtPmJlZ2luKCk7
IGl0ICE9IG5ld01hcEVuZDsgKytpdCkgewogICAgICAgICAgICAgLy8gV2UgbXVzdCBjcmVhdGUg
dGhpcyBub2RlIGhlcmUsIGJlY2F1c2UgdGhlIGFkZGVkIG5vZGUgbWF5IGJlIGEgbm9kZSB3aXRo
IG5vIGRpc3BsYXkgc3VjaCBhcwogICAgICAgICAgICAgLy8gYXMgdGhvc2UgY3JlYXRlZCBieSB0
aGUgaW5jcmVtZW50IG9yIHJlc2V0IGRpcmVjdGl2ZXMgYW5kIHRoZSByZS1sYXlvdXQgdGhhdCB3
aWxsIGhhcHBlbiB3aWxsCiAgICAgICAgICAgICAvLyBub3QgY2F0Y2ggdGhlIGNoYW5nZSBpZiB0
aGUgbm9kZSBoYWQgbm8gY2hpbGRyZW4uCi0gICAgICAgICAgICBtYWtlQ291bnRlck5vZGUocmVu
ZGVyZXIsIGtleSwgZmFsc2UpOworICAgICAgICAgICAgbWFrZUNvdW50ZXJOb2RlKHJlbmRlcmVy
LCBpdC0+a2V5LCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAppbmRleCA1NTE2MDUyOGZhZWMzNmFh
NTU2NzQyMjZhNTFkYTVhMDU4YjU3NThkLi4wZDVhMDM2YTU3ZThjNDhlODE1ZmU1Yjg5ZGEyNzUx
ODVkMGY1ZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJs
ZUJveC5jcHAKQEAgLTcxMyw3ICs3MTMsOCBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94
OjphdXRvTWFyZ2luT2Zmc2V0SW5NYWluQXhpcyhjb25zdCBPcmRlcmVkRmxleEl0ZW1MaQogCiAg
ICAgaW50IG51bWJlck9mQXV0b01hcmdpbnMgPSAwOwogICAgIGJvb2wgaXNIb3Jpem9udGFsID0g
aXNIb3Jpem9udGFsRmxvdygpOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUmVuZGVyQm94KiBjaGlsZCA9IGNoaWxkcmVuW2ldOwogICAgICAgICBpZiAoY2hpbGQtPmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
IChpc0hvcml6b250YWwpIHsKQEAgLTg5Nyw5ICs4OTgsOSBAQCBib29sIFJlbmRlckZsZXhpYmxl
Qm94Ojpjb21wdXRlTmV4dEZsZXhMaW5lKE9yZGVyZWRGbGV4SXRlbUxpc3QmIG9yZGVyZWRDaGls
ZHJlbgogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpmcmVlemVWaW9sYXRpb25zKGNvbnN0IFZl
Y3RvcjxWaW9sYXRpb24+JiB2aW9sYXRpb25zLCBMYXlvdXRVbml0JiBhdmFpbGFibGVGcmVlU3Bh
Y2UsIGRvdWJsZSYgdG90YWxGbGV4R3JvdywgZG91YmxlJiB0b3RhbFdlaWdodGVkRmxleFNocmlu
aywgSW5mbGV4aWJsZUZsZXhJdGVtU2l6ZSYgaW5mbGV4aWJsZUl0ZW1zLCBib29sIGhhc0luZmlu
aXRlTGluZUxlbmd0aCkKIHsKLSAgICBmb3IgKGF1dG8mIHZpb2xhdGlvbiA6IHZpb2xhdGlvbnMp
IHsKLSAgICAgICAgUmVuZGVyQm94JiBjaGlsZCA9IHZpb2xhdGlvbi5jaGlsZDsKLSAgICAgICAg
TGF5b3V0VW5pdCBjaGlsZFNpemUgPSB2aW9sYXRpb24uY2hpbGRTaXplOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmlvbGF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBSZW5kZXJC
b3gmIGNoaWxkID0gdmlvbGF0aW9uc1tpXS5jaGlsZDsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGls
ZFNpemUgPSB2aW9sYXRpb25zW2ldLmNoaWxkU2l6ZTsKICAgICAgICAgTGF5b3V0VW5pdCBwcmVm
ZXJyZWRDaGlsZFNpemUgPSBwcmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JDaGlsZChj
aGlsZCwgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKTsKICAgICAgICAgYXZhaWxhYmxlRnJlZVNwYWNl
IC09IGNoaWxkU2l6ZSAtIHByZWZlcnJlZENoaWxkU2l6ZTsKICAgICAgICAgdG90YWxGbGV4R3Jv
dyAtPSBjaGlsZC5zdHlsZSgpLmZsZXhHcm93KCk7CkBAIC05MTYsMzQgKzkxNywzNSBAQCBib29s
IFJlbmRlckZsZXhpYmxlQm94OjpyZXNvbHZlRmxleGlibGVMZW5ndGhzKEZsZXhTaWduIGZsZXhT
aWduLCBjb25zdCBPcmRlcmVkRgogICAgIExheW91dFVuaXQgdXNlZEZyZWVTcGFjZSA9IDA7CiAg
ICAgVmVjdG9yPFZpb2xhdGlvbj4gbWluVmlvbGF0aW9uczsKICAgICBWZWN0b3I8VmlvbGF0aW9u
PiBtYXhWaW9sYXRpb25zOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewotICAg
ICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBSZW5kZXJCb3gm
IGNoaWxkID0gKmNoaWxkcmVuW2ldOworICAgICAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpIHsKICAgICAgICAgICAgIGNoaWxkU2l6ZXMuYXBwZW5kKDApOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaW5mbGV4aWJsZUl0ZW1zLmNv
bnRhaW5zKGNoaWxkKSkKLSAgICAgICAgICAgIGNoaWxkU2l6ZXMuYXBwZW5kKGluZmxleGlibGVJ
dGVtcy5nZXQoY2hpbGQpKTsKKyAgICAgICAgaWYgKGluZmxleGlibGVJdGVtcy5jb250YWlucygm
Y2hpbGQpKQorICAgICAgICAgICAgY2hpbGRTaXplcy5hcHBlbmQoaW5mbGV4aWJsZUl0ZW1zLmdl
dCgmY2hpbGQpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHByZWZl
cnJlZENoaWxkU2l6ZSA9IHByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZvckNoaWxkKCpj
aGlsZCwgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgcHJl
ZmVycmVkQ2hpbGRTaXplID0gcHJlZmVycmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQo
Y2hpbGQsIGhhc0luZmluaXRlTGluZUxlbmd0aCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGNo
aWxkU2l6ZSA9IHByZWZlcnJlZENoaWxkU2l6ZTsKICAgICAgICAgICAgIGRvdWJsZSBleHRyYVNw
YWNlID0gMDsKICAgICAgICAgICAgIGlmIChhdmFpbGFibGVGcmVlU3BhY2UgPiAwICYmIHRvdGFs
RmxleEdyb3cgPiAwICYmIGZsZXhTaWduID09IFBvc2l0aXZlRmxleGliaWxpdHkgJiYgc3RkOjpp
c2Zpbml0ZSh0b3RhbEZsZXhHcm93KSkKLSAgICAgICAgICAgICAgICBleHRyYVNwYWNlID0gYXZh
aWxhYmxlRnJlZVNwYWNlICogY2hpbGQtPnN0eWxlKCkuZmxleEdyb3coKSAvIHRvdGFsRmxleEdy
b3c7CisgICAgICAgICAgICAgICAgZXh0cmFTcGFjZSA9IGF2YWlsYWJsZUZyZWVTcGFjZSAqIGNo
aWxkLnN0eWxlKCkuZmxleEdyb3coKSAvIHRvdGFsRmxleEdyb3c7CiAgICAgICAgICAgICBlbHNl
IGlmIChhdmFpbGFibGVGcmVlU3BhY2UgPCAwICYmIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rID4g
MCAmJiBmbGV4U2lnbiA9PSBOZWdhdGl2ZUZsZXhpYmlsaXR5ICYmIHN0ZDo6aXNmaW5pdGUodG90
YWxXZWlnaHRlZEZsZXhTaHJpbmspKQotICAgICAgICAgICAgICAgIGV4dHJhU3BhY2UgPSBhdmFp
bGFibGVGcmVlU3BhY2UgKiBjaGlsZC0+c3R5bGUoKS5mbGV4U2hyaW5rKCkgKiBwcmVmZXJyZWRD
aGlsZFNpemUgLyB0b3RhbFdlaWdodGVkRmxleFNocmluazsKKyAgICAgICAgICAgICAgICBleHRy
YVNwYWNlID0gYXZhaWxhYmxlRnJlZVNwYWNlICogY2hpbGQuc3R5bGUoKS5mbGV4U2hyaW5rKCkg
KiBwcmVmZXJyZWRDaGlsZFNpemUgLyB0b3RhbFdlaWdodGVkRmxleFNocmluazsKICAgICAgICAg
ICAgIGlmIChzdGQ6OmlzZmluaXRlKGV4dHJhU3BhY2UpKQogICAgICAgICAgICAgICAgIGNoaWxk
U2l6ZSArPSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChleHRyYVNwYWNlKTsKIAotICAgICAg
ICAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZENoaWxkU2l6ZSA9IGFkanVzdENoaWxkU2l6ZUZvck1p
bkFuZE1heCgqY2hpbGQsIGNoaWxkU2l6ZSk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGFkanVz
dGVkQ2hpbGRTaXplID0gYWRqdXN0Q2hpbGRTaXplRm9yTWluQW5kTWF4KGNoaWxkLCBjaGlsZFNp
emUpOwogICAgICAgICAgICAgY2hpbGRTaXplcy5hcHBlbmQoYWRqdXN0ZWRDaGlsZFNpemUpOwog
ICAgICAgICAgICAgdXNlZEZyZWVTcGFjZSArPSBhZGp1c3RlZENoaWxkU2l6ZSAtIHByZWZlcnJl
ZENoaWxkU2l6ZTsKIAogICAgICAgICAgICAgTGF5b3V0VW5pdCB2aW9sYXRpb24gPSBhZGp1c3Rl
ZENoaWxkU2l6ZSAtIGNoaWxkU2l6ZTsKICAgICAgICAgICAgIGlmICh2aW9sYXRpb24gPiAwKQot
ICAgICAgICAgICAgICAgIG1pblZpb2xhdGlvbnMuYXBwZW5kKFZpb2xhdGlvbigqY2hpbGQsIGFk
anVzdGVkQ2hpbGRTaXplKSk7CisgICAgICAgICAgICAgICAgbWluVmlvbGF0aW9ucy5hcHBlbmQo
VmlvbGF0aW9uKGNoaWxkLCBhZGp1c3RlZENoaWxkU2l6ZSkpOwogICAgICAgICAgICAgZWxzZSBp
ZiAodmlvbGF0aW9uIDwgMCkKLSAgICAgICAgICAgICAgICBtYXhWaW9sYXRpb25zLmFwcGVuZChW
aW9sYXRpb24oKmNoaWxkLCBhZGp1c3RlZENoaWxkU2l6ZSkpOworICAgICAgICAgICAgICAgIG1h
eFZpb2xhdGlvbnMuYXBwZW5kKFZpb2xhdGlvbihjaGlsZCwgYWRqdXN0ZWRDaGlsZFNpemUpKTsK
ICAgICAgICAgICAgIHRvdGFsVmlvbGF0aW9uICs9IHZpb2xhdGlvbjsKICAgICAgICAgfQogICAg
IH0KQEAgLTEwMjgsNyArMTAzMCw4IEBAIEl0ZW1Qb3NpdGlvbiBSZW5kZXJGbGV4aWJsZUJveDo6
YWxpZ25tZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHNpemVfdCBSZW5kZXJG
bGV4aWJsZUJveDo6bnVtYmVyT2ZJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4oY29uc3QgT3JkZXJl
ZEZsZXhJdGVtTGlzdCYgY2hpbGRyZW4pIGNvbnN0CiB7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsK
LSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlbmRlckJveCogY2hpbGQg
PSBjaGlsZHJlbltpXTsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICArK2NvdW50OwogICAgIH0KQEAgLTExNTIsMTYgKzExNTUsMTcgQEAg
dm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0Q29sdW1uUmV2ZXJzZShjb25zdCBPcmRlcmVk
RmxleEl0ZW1MaXN0JiBjaGlsZHJlbiwKICAgICBtYWluQXhpc09mZnNldCAtPSBpc0hvcml6b250
YWxGbG93KCkgPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCk7CiAKICAgICBzaXplX3Qgc2VlbkluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbiA9IDA7
Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgIGNoaWxkLT5sYXllcigpLT5z
ZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKG1haW5BeGlzT2Zmc2V0KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlbmRlckJveCYgY2hp
bGQgPSAqY2hpbGRyZW5baV07CisgICAgICAgIGlmIChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkgeworICAgICAgICAgICAgY2hpbGQubGF5ZXIoKS0+c2V0U3RhdGljQmxvY2tQb3NpdGlv
bihtYWluQXhpc09mZnNldCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAg
ICAgICBtYWluQXhpc09mZnNldCAtPSBtYWluQXhpc0V4dGVudEZvckNoaWxkKCpjaGlsZCkgKyBm
bG93QXdhcmVNYXJnaW5FbmRGb3JDaGlsZCgqY2hpbGQpOworICAgICAgICBtYWluQXhpc09mZnNl
dCAtPSBtYWluQXhpc0V4dGVudEZvckNoaWxkKGNoaWxkKSArIGZsb3dBd2FyZU1hcmdpbkVuZEZv
ckNoaWxkKGNoaWxkKTsKIAotICAgICAgICBzZXRGbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKCpj
aGlsZCwgTGF5b3V0UG9pbnQobWFpbkF4aXNPZmZzZXQsIGNyb3NzQXhpc09mZnNldCArIGZsb3dB
d2FyZU1hcmdpbkJlZm9yZUZvckNoaWxkKCpjaGlsZCkpKTsKKyAgICAgICAgc2V0Rmxvd0F3YXJl
TG9jYXRpb25Gb3JDaGlsZChjaGlsZCwgTGF5b3V0UG9pbnQobWFpbkF4aXNPZmZzZXQsIGNyb3Nz
QXhpc09mZnNldCArIGZsb3dBd2FyZU1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSkpOwogCi0g
ICAgICAgIG1haW5BeGlzT2Zmc2V0IC09IGZsb3dBd2FyZU1hcmdpblN0YXJ0Rm9yQ2hpbGQoKmNo
aWxkKTsKKyAgICAgICAgbWFpbkF4aXNPZmZzZXQgLT0gZmxvd0F3YXJlTWFyZ2luU3RhcnRGb3JD
aGlsZChjaGlsZCk7CiAKICAgICAgICAgKytzZWVuSW5GbG93UG9zaXRpb25lZENoaWxkcmVuOwog
ICAgICAgICBpZiAoc2VlbkluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbiA8IG51bWJlck9mQ2hpbGRy
ZW5Gb3JKdXN0aWZ5Q29udGVudCkKQEAgLTEyMDUsMTggKzEyMDksMTggQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6YWxpZ25GbGV4TGluZXMoVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRl
eHRzKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUNyb3NzQXhp
c1NwYWNlID0gY3Jvc3NBeGlzQ29udGVudEV4dGVudCgpOwotICAgIGZvciAoYXV0byYgbGluZUNv
bnRleHQgOiBsaW5lQ29udGV4dHMpCi0gICAgICAgIGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNlIC09
IGxpbmVDb250ZXh0LmNyb3NzQXhpc0V4dGVudDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpbmVDb250ZXh0cy5zaXplKCk7ICsraSkKKyAgICAgICAgYXZhaWxhYmxlQ3Jvc3NBeGlzU3Bh
Y2UgLT0gbGluZUNvbnRleHRzW2ldLmNyb3NzQXhpc0V4dGVudDsKIAogICAgIFJlbmRlckJveCog
Y2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBMYXlvdXRVbml0IGxpbmVPZmZz
ZXQgPSBpbml0aWFsQWxpZ25Db250ZW50T2Zmc2V0KGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNlLCBw
b3NpdGlvbiwgZGlzdHJpYnV0aW9uLCBsaW5lQ29udGV4dHMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1
dG8mIGxpbmVDb250ZXh0IDogbGluZUNvbnRleHRzKSB7Ci0gICAgICAgIGxpbmVDb250ZXh0LmNy
b3NzQXhpc09mZnNldCArPSBsaW5lT2Zmc2V0OwotICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51
bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHQubnVtYmVyT2ZDaGlsZHJlbjsgKytj
aGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKQorICAgIGZvciAodW5z
aWduZWQgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyAr
K2xpbmVOdW1iZXIpIHsKKyAgICAgICAgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLmNyb3NzQXhp
c09mZnNldCArPSBsaW5lT2Zmc2V0OworICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9
IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRy
ZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkKICAgICAg
ICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKCpjaGlsZCwgbGluZU9mZnNldCk7CiAKICAg
ICAgICAgaWYgKGRpc3RyaWJ1dGlvbiA9PSBDb250ZW50RGlzdHJpYnV0aW9uU3RyZXRjaCAmJiBh
dmFpbGFibGVDcm9zc0F4aXNTcGFjZSA+IDApCi0gICAgICAgICAgICBsaW5lQ29udGV4dC5jcm9z
c0F4aXNFeHRlbnQgKz0gYXZhaWxhYmxlQ3Jvc3NBeGlzU3BhY2UgLyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obGluZUNvbnRleHRzLnNpemUoKSk7CisgICAgICAgICAgICBsaW5lQ29udGV4dHNbbGlu
ZU51bWJlcl0uY3Jvc3NBeGlzRXh0ZW50ICs9IGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNlIC8gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmVDb250ZXh0cy5zaXplKCkpOwogCiAgICAgICAgIGxpbmVP
ZmZzZXQgKz0gYWxpZ25Db250ZW50U3BhY2VCZXR3ZWVuQ2hpbGRyZW4oYXZhaWxhYmxlQ3Jvc3NB
eGlzU3BhY2UsIGRpc3RyaWJ1dGlvbiwgbGluZUNvbnRleHRzLnNpemUoKSk7CiAgICAgfQpAQCAt
MTI0MywxMiArMTI0NywxMiBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVu
KGNvbnN0IFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKICAgICBWZWN0b3I8TGF5
b3V0VW5pdD4gbWluTWFyZ2luQWZ0ZXJCYXNlbGluZXM7CiAKICAgICBSZW5kZXJCb3gqIGNoaWxk
ID0gbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7Ci0gICAgZm9yIChhdXRvJiBsaW5lQ29udGV4dCA6
IGxpbmVDb250ZXh0cykgeworICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVt
YmVyIDwgbGluZUNvbnRleHRzLnNpemUoKTsgKytsaW5lTnVtYmVyKSB7CiAgICAgICAgIExheW91
dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9IExheW91dFVuaXQ6Om1heCgpOwotICAgICAg
ICBMYXlvdXRVbml0IGxpbmVDcm9zc0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4dC5jcm9zc0F4aXNF
eHRlbnQ7Ci0gICAgICAgIExheW91dFVuaXQgbWF4QXNjZW50ID0gbGluZUNvbnRleHQubWF4QXNj
ZW50OworICAgICAgICBMYXlvdXRVbml0IGxpbmVDcm9zc0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4
dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0ZW50OworICAgICAgICBMYXlvdXRVbml0IG1heEFz
Y2VudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5tYXhBc2NlbnQ7CiAKLSAgICAgICAgZm9y
IChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250ZXh0Lm51bWJl
ck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQo
KSkgeworICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwg
bGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIs
IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAgQVNTRVJUKGNo
aWxkKTsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS5mbGV4V3JhcCgpID09IEZsZXhXcmFwUmV2ZXJz
ZSkKQEAgLTEzNzYsMTEgKzEzODAsMTEgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZv
cldyYXBSZXZlcnNlKGNvbnN0IFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXgKIHsKICAg
ICBMYXlvdXRVbml0IGNvbnRlbnRFeHRlbnQgPSBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCk7CiAg
ICAgUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOwotICAgIGZvciAo
YXV0byYgbGluZUNvbnRleHQgOiBsaW5lQ29udGV4dHMpIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
Y2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250ZXh0Lm51bWJlck9mQ2hpbGRy
ZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgeworICAg
IGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNp
emUoKTsgKytsaW5lTnVtYmVyKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0g
MDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJl
bjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoY2hpbGQpOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBsaW5lQ3Jvc3NB
eGlzRXh0ZW50ID0gbGluZUNvbnRleHQuY3Jvc3NBeGlzRXh0ZW50OwotICAgICAgICAgICAgTGF5
b3V0VW5pdCBvcmlnaW5hbE9mZnNldCA9IGxpbmVDb250ZXh0LmNyb3NzQXhpc09mZnNldCAtIGNy
b3NzQXhpc1N0YXJ0RWRnZTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbGluZUNyb3NzQXhpc0V4
dGVudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNFeHRlbnQ7CisgICAgICAg
ICAgICBMYXlvdXRVbml0IG9yaWdpbmFsT2Zmc2V0ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJd
LmNyb3NzQXhpc09mZnNldCAtIGNyb3NzQXhpc1N0YXJ0RWRnZTsKICAgICAgICAgICAgIExheW91
dFVuaXQgbmV3T2Zmc2V0ID0gY29udGVudEV4dGVudCAtIG9yaWdpbmFsT2Zmc2V0IC0gbGluZUNy
b3NzQXhpc0V4dGVudDsKICAgICAgICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKCpjaGls
ZCwgbmV3T2Zmc2V0IC0gb3JpZ2luYWxPZmZzZXQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggZGVjYzQ4N2MzYjE5MzA5
YmU1ZDMzYTcyMmZmM2MxNmNiMzJhOWNhMC4uYzJhM2Q3ODk4ZGI2OWViNTZhNGY1ZmJjZjI1ZDg1
MWYxOTBhNzdkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcApAQCAtMjk5LDggKzI5OSw4IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRl
QWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKCkKICAgICBSZW5kZXJMYXllckxpc3QqIGxpc3RzW10g
PSB7IGxheWVyKCktPm5lZ1pPcmRlckxpc3QoKSwgbGF5ZXIoKS0+bm9ybWFsRmxvd0xpc3QoKSwg
bGF5ZXIoKS0+cG9zWk9yZGVyTGlzdCgpIH07CiAgICAgZm9yIChzaXplX3QgbGlzdEluZGV4ID0g
MDsgbGlzdEluZGV4IDwgc2l6ZW9mKGxpc3RzKSAvIHNpemVvZihsaXN0c1swXSk7ICsrbGlzdElu
ZGV4KSB7CiAgICAgICAgIGlmIChSZW5kZXJMYXllckxpc3QqIGxpc3QgPSBsaXN0c1tsaXN0SW5k
ZXhdKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogKmxpc3QpCi0gICAgICAgICAg
ICAgICAgdXBkYXRlTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKCpsYXllciwgbGF5ZXJUb1JlZ2lvbk1h
cCwgcmVnaW9uVG9MYXllckxpc3RNYXAsIG5lZWRzTGF5ZXJVcGRhdGUpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDAsIGxpc3RTaXplID0gbGlzdC0+c2l6ZSgpOyBpIDwgbGlzdFNpemU7
ICsraSkKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXllclRvUmVnaW9uTWFwcGluZ3MoKmxpc3Qt
PmF0KGkpLCBsYXllclRvUmVnaW9uTWFwLCByZWdpb25Ub0xheWVyTGlzdE1hcCwgbmVlZHNMYXll
clVwZGF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAKaW5kZXggZGIwYTY5MGJkYjc2NmFjNTQ3NThhNDVhNGE1ZTZlNmVjNzMx
ZjFhYy4uNjZmMmRjNjE4ZWJhM2UzYTkzZjQ4ZTNhN2E5ODY3OWRmZmM4ODJjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTE3MDcsNyArMTcwNywxMCBA
QCB2b2lkIFJlbmRlcklubGluZTo6YWRkQW5ub3RhdGVkUmVnaW9ucyhWZWN0b3I8QW5ub3RhdGVk
UmVnaW9uVmFsdWU+JiByZWdpb25zKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBWZWN0
b3I8U3R5bGVEYXNoYm9hcmRSZWdpb24+JiBzdHlsZVJlZ2lvbnMgPSBzdHlsZSgpLmRhc2hib2Fy
ZFJlZ2lvbnMoKTsKLSAgICBmb3IgKGF1dG8mIHN0eWxlUmVnaW9uIDogc3R5bGVSZWdpb25zKSB7
CisgICAgdW5zaWduZWQgaSwgY291bnQgPSBzdHlsZVJlZ2lvbnMuc2l6ZSgpOworICAgIGZvciAo
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIFN0eWxlRGFzaGJvYXJkUmVnaW9uIHN0
eWxlUmVnaW9uID0gc3R5bGVSZWdpb25zW2ldOworCiAgICAgICAgIExheW91dFJlY3QgbGluZXNC
b3VuZGluZ0JveCA9IHRoaXMtPmxpbmVzQm91bmRpbmdCb3goKTsKICAgICAgICAgTGF5b3V0VW5p
dCB3ID0gbGluZXNCb3VuZGluZ0JveC53aWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IGggPSBs
aW5lc0JvdW5kaW5nQm94LmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggNTE3NTQxNThhZTNmYTlhMjBlMjhhNzA0ZmQxZTM3ZWY0ZDA3NGUyYy4u
MzhmM2I0MWQ0ZjRlMDNiYzAzYzRmMDI2MDI2OGExYjJiY2VjNTNjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC03MjksOCArNzI5LDEwIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnRzQXJlQ29udGlndW91c0luU3RhY2tpbmdPcmRlcigp
CiAgICAgfQogCiAgICAgaWYgKHBvc1pPcmRlckxpc3QpIHsKKyAgICAgICAgc2l6ZV90IGxpc3RT
aXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOwogICAgICAgICBpbnQgc3RhY2tpbmdPcmRlcklu
ZGV4ID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50TGF5ZXIgOiAqcG9zWk9yZGVyTGlz
dCkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKKyAg
ICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJyZW50TGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChp
KTsKICAgICAgICAgICAgIGlmICghY3VycmVudExheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbG9va3VwLnNldChjdXJyZW50
TGF5ZXIsIHN0YWNraW5nT3JkZXJJbmRleCsrKTsKQEAgLTExODQsOCArMTE4Niw5IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncyhIYXNoU2V0PGNvbnN0
IFJlbmRlck9iamVjdCo+KiBvCiAgICAgICAgICAgICAgICAgY2hpbGRPdXRPZkZsb3dEZXNjZW5k
YW50Q29udGFpbmluZ0Jsb2Nrcy5hZGQoY2hpbGQtPnJlbmRlcmVyKCkuY29udGFpbmluZ0Jsb2Nr
KCkpOwogCiAgICAgICAgICAgICBpZiAob3V0T2ZGbG93RGVzY2VuZGFudENvbnRhaW5pbmdCbG9j
a3MpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGJsb2NrIDogY2hpbGRPdXRPZkZsb3dE
ZXNjZW5kYW50Q29udGFpbmluZ0Jsb2NrcykKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZGbG93
RGVzY2VuZGFudENvbnRhaW5pbmdCbG9ja3MtPmFkZChibG9jayk7CisgICAgICAgICAgICAgICAg
SGFzaFNldDxjb25zdCBSZW5kZXJPYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZE91
dE9mRmxvd0Rlc2NlbmRhbnRDb250YWluaW5nQmxvY2tzLmJlZ2luKCk7CisgICAgICAgICAgICAg
ICAgZm9yICg7IGl0ICE9IGNoaWxkT3V0T2ZGbG93RGVzY2VuZGFudENvbnRhaW5pbmdCbG9ja3Mu
ZW5kKCk7ICsraXQpCisgICAgICAgICAgICAgICAgICAgIG91dE9mRmxvd0Rlc2NlbmRhbnRDb250
YWluaW5nQmxvY2tzLT5hZGQoKml0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaGFz
VmlzaWJsZURlc2NlbmRhbnQgfD0gY2hpbGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgY2hpbGQt
Pm1faGFzVmlzaWJsZURlc2NlbmRhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGFiYjJjYmJmNTE0ZDk0MGUwYjExNzEzM2ZmNGI1
ZTY5YzIwNTE1YjEuLjM3N2EwODNjMDQ0MDNjZjM5ZWE5ZmI1ZDIxMWU0ZDhiNWY0OWVmYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC0xODk4LDcgKzE4OTgsOSBAQCBzdGF0aWMgYm9vbCBkZXNjZW5kYW50TGF5ZXJQYWludHNJbnRv
QW5jZXN0b3IoUmVuZGVyTGF5ZXImIHBhcmVudCkKICNlbmRpZgogCiAgICAgaWYgKFZlY3RvcjxS
ZW5kZXJMYXllcio+KiBub3JtYWxGbG93TGlzdCA9IHBhcmVudC5ub3JtYWxGbG93TGlzdCgpKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgY3VyTGF5ZXIgOiAqbm9ybWFsRmxvd0xpc3QpIHsKKyAgICAg
ICAgc2l6ZV90IGxpc3RTaXplID0gbm9ybWFsRmxvd0xpc3QtPnNpemUoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBSZW5kZXJM
YXllciogY3VyTGF5ZXIgPSBub3JtYWxGbG93TGlzdC0+YXQoaSk7CiAgICAgICAgICAgICBpZiAo
IWNvbXBvc2l0ZWRXaXRoT3duQmFja2luZ1N0b3JlKGN1ckxheWVyKQogICAgICAgICAgICAgICAg
ICYmIChjdXJMYXllci0+aXNWaXN1YWxseU5vbkVtcHR5KCkgfHwgZGVzY2VuZGFudExheWVyUGFp
bnRzSW50b0FuY2VzdG9yKCpjdXJMYXllcikpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMTkxMSw3ICsxOTEzLDkgQEAgc3RhdGljIGJvb2wgZGVzY2VuZGFudExheWVyUGFpbnRz
SW50b0FuY2VzdG9yKFJlbmRlckxheWVyJiBwYXJlbnQpCiAKICAgICAgICAgLy8gVXNlIHRoZSBt
X2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCBiaXQgdG8gb3B0aW1pemU/CiAgICAgICAgIGlmIChW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IHBhcmVudC5uZWdaT3JkZXJMaXN0
KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY3VyTGF5ZXIgOiAqbmVnWk9yZGVyTGlzdCkg
eworICAgICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gbmVnWk9yZGVyTGlzdC0+c2l6ZSgpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbmVnWk9yZGVyTGlzdC0+YXQoaSk7
CiAgICAgICAgICAgICAgICAgaWYgKCFjb21wb3NpdGVkV2l0aE93bkJhY2tpbmdTdG9yZShjdXJM
YXllcikKICAgICAgICAgICAgICAgICAgICAgJiYgKGN1ckxheWVyLT5pc1Zpc3VhbGx5Tm9uRW1w
dHkoKSB8fCBkZXNjZW5kYW50TGF5ZXJQYWludHNJbnRvQW5jZXN0b3IoKmN1ckxheWVyKSkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTkxOSw3ICsxOTIzLDkgQEAgc3Rh
dGljIGJvb2wgZGVzY2VuZGFudExheWVyUGFpbnRzSW50b0FuY2VzdG9yKFJlbmRlckxheWVyJiBw
YXJlbnQpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIHBv
c1pPcmRlckxpc3QgPSBwYXJlbnQucG9zWk9yZGVyTGlzdCgpKSB7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGN1ckxheWVyIDogKnBvc1pPcmRlckxpc3QpIHsKKyAgICAgICAgICAgIHNpemVfdCBs
aXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIFJlbmRlckxheWVy
KiBjdXJMYXllciA9IHBvc1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgICAgIGlmICgh
Y29tcG9zaXRlZFdpdGhPd25CYWNraW5nU3RvcmUoY3VyTGF5ZXIpCiAgICAgICAgICAgICAgICAg
ICAgICYmIChjdXJMYXllci0+aXNWaXN1YWxseU5vbkVtcHR5KCkgfHwgZGVzY2VuZGFudExheWVy
UGFpbnRzSW50b0FuY2VzdG9yKCpjdXJMYXllcikpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTI0OTYsNyArMjUwMiw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpz
dGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uKiBhbmltCiAg
ICAgS2V5ZnJhbWVWYWx1ZUxpc3QgYmFja2Ryb3BGaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKICNlbmRpZgogCi0gICAgZm9yIChhdXRvJiBjdXJyZW50
S2V5ZnJhbWUgOiBrZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKKyAgICBzaXplX3QgbnVtS2V5ZnJh
bWVzID0ga2V5ZnJhbWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtl
eWZyYW1lczsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1cnJlbnRLZXlm
cmFtZSA9IGtleWZyYW1lc1tpXTsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1l
U3R5bGUgPSBjdXJyZW50S2V5ZnJhbWUuc3R5bGUoKTsKICAgICAgICAgZG91YmxlIGtleSA9IGN1
cnJlbnRLZXlmcmFtZS5rZXkoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAKaW5kZXggYzA3OTkyMTIzYTgzOTYyNDUyMWYwZGExODllODY3OTMx
N2YzN2ViZS4uZTFjZmNhNTY0ZGI5YjM0YjU5MWM3NDIyNTVkMzZmOTlkN2RhZDEyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCkBAIC0yNjcs
OCArMjY3LDExIEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZW5kZXJlciwgUGFpbnRJbmZvJiBwYWludEluCiAgICAgfQogCiAgICAgaWYgKGlu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgaW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZk91dGxpbmUgfHwgaW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykgewot
ICAgICAgICBmb3IgKGF1dG8mIGZsb3cgOiAqaW5mby5vdXRsaW5lT2JqZWN0cykKKyAgICAgICAg
TGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46Oml0ZXJhdG9yIGVuZCA9IGluZm8ub3V0bGluZU9i
amVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+Ojpp
dGVyYXRvciBpdCA9IGluZm8ub3V0bGluZU9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgUmVuZGVySW5saW5lKiBmbG93ID0gKml0OwogICAgICAgICAgICAg
Zmxvdy0+cGFpbnRPdXRsaW5lKGluZm8sIHBhaW50T2Zmc2V0KTsKKyAgICAgICAgfQogICAgICAg
ICBpbmZvLm91dGxpbmVPYmplY3RzLT5jbGVhcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA0YjBjZmE2M2VmZmIyOWMxNjc1OWQ3
ZDEzM2YzNWJhZTM2NzdjZmRhLi45MTZjMmRlN2ViNTdjZjVhNzFjZmY4NTQ0NDg4ZGIzNWMxMTkz
NzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCkBAIC0x
MDcsOCArMTA3LDEyIEBAIEhUTUxTZWxlY3RFbGVtZW50JiBSZW5kZXJMaXN0Qm94OjpzZWxlY3RF
bGVtZW50KCkgY29uc3QKIHZvaWQgUmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ewogICAgIGlmIChtX29wdGlvbnNDaGFuZ2VkKSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CisgICAg
ICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsKKyAgICAgICAgCiAgICAgICAgIGZsb2F0IHdpZHRo
ID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogc2VsZWN0RWxlbWVudCgpLmxpc3RJ
dGVtcygpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKICAgICAgICAgICAg
IFN0cmluZyB0ZXh0OwogICAgICAgICAgICAgRm9udENhc2NhZGUgaXRlbUZvbnQgPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCk7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCmlu
ZGV4IGEyOTk4OWVjZTRmZTI5OTFkNTkwYTRmMTQ5ODBiNDU5MTE4MDg1MmQuLmZmOWEyYzU4NmJi
ZDliZTk5Yzc3NTVlMjIyZTAwMzg2NDZjMTc0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAtNTgsOSArNTgsMTIgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKICNpZiBQTEFURk9STShJT1MpCiBzdGF0aWMgc2l6ZV90IHNlbGVjdGVkT3B0
aW9uQ291bnQoY29uc3QgUmVuZGVyTWVudUxpc3QmIHJlbmRlck1lbnVMaXN0KQogeworICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSByZW5kZXJNZW51TGlzdC5zZWxl
Y3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CisgICAgc2l6ZV90IG51bWJlck9mSXRlbXMgPSBsaXN0
SXRlbXMuc2l6ZSgpOworCiAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiByZW5kZXJNZW51TGlzdC5zZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCkpIHsKLSAg
ICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKQorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKSB7CisgICAgICAgIGlmIChpczxIVE1MT3B0aW9u
RWxlbWVudD4oKmxpc3RJdGVtc1tpXSkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCps
aXN0SXRlbXNbaV0pLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICArK2NvdW50OwogICAgIH0KICAg
ICByZXR1cm4gY291bnQ7CkBAIC0yMDMsNyArMjA2LDExIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkCiB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoKQogewogICAgIGZs
b2F0IG1heE9wdGlvbldpZHRoID0gMDsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBzZWxlY3RF
bGVtZW50KCkubGlzdEl0ZW1zKCkpIHsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygpOworICAgIGludCBzaXplID0g
bGlzdEl0ZW1zLnNpemUoKTsgICAgCisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1tpXTsKICAgICAg
ICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TZXQuY3BwCmluZGV4IDkxZDI5OWFkZGMzZjliNzNlYzZmZTcxMzI5YzlhMDg5ZTc2YTA1ZTYu
LjgyMWU0Yjk4ZmEyM2YyYzIzZmNlYWJiMDQ0ZTM1OWU1NjczMzY3MWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcApAQCAtMTk4LDgg
KzE5OCw4IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmRpc3RyaWJ1dGVJbXBsaWNpdEJy
ZWFrcygpCiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIFRoZXJlIHNob3VsZCBiZSBubyBpbXBs
aWNpdCBicmVha3MgYXNzdW1lZCBhdCB0aGlzIHBvaW50LgotICAgIGZvciAoYXV0byYgZm9yY2Vk
QnJlYWsgOiBtX2NvbnRlbnRSdW5zKQotICAgICAgICBBU1NFUlQoIWZvcmNlZEJyZWFrLmFzc3Vt
ZWRJbXBsaWNpdEJyZWFrcygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9yY2Vk
QnJlYWtzQ291bnQoKTsgaSsrKQorICAgICAgICBBU1NFUlQoIW1fY29udGVudFJ1bnNbaV0uYXNz
dW1lZEltcGxpY2l0QnJlYWtzKCkpOwogI2VuZGlmIC8vIE5ERUJVRwogCiAgICAgLy8gSW5zZXJ0
IGEgZmluYWwgY29udGVudCBydW4gdG8gZW5jb21wYXNzIGFsbCBjb250ZW50LiBUaGlzIHdpbGwg
aW5jbHVkZSBvdmVyZmxvdyBpZiB0aGlzIGlzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>