<?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>149662</bug_id>
          
          <creation_ts>2015-09-30 05:51:18 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/html.</short_desc>
          <delta_ts>2015-10-06 06:31:48 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1129555</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-09-30 05:51:18 -0700</bug_when>
    <thetext>Refactor the for-loops using the ranged-for loops and auto keyword in WebCore/html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129837</commentid>
    <comment_count>1</comment_count>
      <attachid>262235</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-09-30 22:41:38 -0700</bug_when>
    <thetext>Created attachment 262235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129942</commentid>
    <comment_count>2</comment_count>
      <attachid>262235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-01 09:24:23 -0700</bug_when>
    <thetext>Comment on attachment 262235
Patch

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

&gt; Source/WebCore/html/FormController.cpp:270
&gt; +        const FormElementKey&amp; key = element.key;
&gt;          if (!equal(key.type(), &quot;file&quot;, 4))
&gt;              continue;

Doesn’t seem to be helpful to put the key into a local variable here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130172</commentid>
    <comment_count>3</comment_count>
      <attachid>262320</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-02 00:18:31 -0700</bug_when>
    <thetext>Created attachment 262320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130174</commentid>
    <comment_count>4</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-02 00:19:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 262235 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262235&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/FormController.cpp:270
&gt; &gt; +        const FormElementKey&amp; key = element.key;
&gt; &gt;          if (!equal(key.type(), &quot;file&quot;, 4))
&gt; &gt;              continue;
&gt; 
&gt; Doesn’t seem to be helpful to put the key into a local variable here.

You are right. I removed the local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130916</commentid>
    <comment_count>5</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-10-06 01:06:39 -0700</bug_when>
    <thetext>Darin, ping?

Could you give me the cq+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130942</commentid>
    <comment_count>6</comment_count>
      <attachid>262320</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-06 06:31:45 -0700</bug_when>
    <thetext>Comment on attachment 262320
Patch

Clearing flags on attachment: 262320

Committed r190613: &lt;http://trac.webkit.org/changeset/190613&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130943</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-06 06:31:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262235</attachid>
            <date>2015-09-30 22:41:38 -0700</date>
            <delta_ts>2015-10-02 00:18:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149662-20151001144110.patch</filename>
            <type>text/plain</type>
            <size>72951</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDM0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBAQAorMjAxNS0wOS0zMCAgSHVuc2Vv
cCBKZW9uZyAgPGhzODUuamVvbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIG1vZGVybiBm
b3ItbG9vcHMgaW4gV2ViQ29yZS9odG1sLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZp
b3IgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEpOgorICAgICAgICAqIGh0bWwvRW1haWxJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OnR5cGVNaXNt
YXRjaEZvcik6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMpOgorICAgICAgICAqIGh0
bWwvRm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xTdGF0
ZTo6c2VyaWFsaXplVG8pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xTdGF0ZTo6ZGVz
ZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRv
KToKKyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjpnZXRSZWZlcmVuY2VkRmlsZVBh
dGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpjcmVhdGVTYXZlZEZvcm1T
dGF0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRz
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OnJlc3RvcmVDb250cm9s
U3RhdGVJbik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Z2V0UmVmZXJlbmNl
ZEZpbGVQYXRocyk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpoYXNOb25FbXB0eUJveCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxD
YW52YXNFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpub3Rp
ZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFp
bnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6Omxlbmd0aCk6Cisg
ICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdE5hbWVkSXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3Vy
ZVN1Ym1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVk
RnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6Omxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OmRlZmF1bHRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
OjpjaGVja0ludmFsaWRDb250cm9sc0FuZENvbGxlY3RVbmhhbmRsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGcm9tUGFzdE5hbWVzTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hl
KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VBY2NlcHRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxLZXlnZW5F
bGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFHcm91cCk6CisgICAgICAgICogaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6aW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNo
b3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZl
U2VsZWN0aW9uRW5kSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmRl
c2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRE
ZWZhdWx0VmFsdWUpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBvcHVsYXRlSW5wdXRUeXBlRmFjdG9yeU1hcCk6CisgICAgICAgICogaHRtbC9NZWRp
YUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTWVkaWFDb250cm9sbGVyOjpkdXJhdGlvbik6Cisg
ICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKE1lZGlh
Q29udHJvbGxlcjo6cGxheSk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldFBsYXliYWNr
UmF0ZSk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldFZvbHVtZSk6CisgICAgICAgIChN
ZWRpYUNvbnRyb2xsZXI6OnNldE11dGVkKToKKyAgICAgICAgKHBsYXliYWNrU3RhdGVXYWl0aW5n
KToKKyAgICAgICAgKE1lZGlhQ29udHJvbGxlcjo6dXBkYXRlTWVkaWFFbGVtZW50cyk6CisgICAg
ICAgIChNZWRpYUNvbnRyb2xsZXI6OmJyaW5nRWxlbWVudFVwVG9TcGVlZCk6CisgICAgICAgIChN
ZWRpYUNvbnRyb2xsZXI6OmlzQmxvY2tlZCk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6Omhh
c0VuZGVkKToKKyAgICAgICAgKE1lZGlhQ29udHJvbGxlcjo6YXN5bmNFdmVudFRpbWVyRmlyZWQp
OgorICAgICAgICAoTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXJGaXJlZCk6Cisg
ICAgICAgIChNZWRpYUNvbnRyb2xsZXI6Omhhc0F1ZGlvKToKKyAgICAgICAgKE1lZGlhQ29udHJv
bGxlcjo6aGFzVmlkZW8pOgorICAgICAgICAoTWVkaWFDb250cm9sbGVyOjpoYXNDbG9zZWRDYXB0
aW9ucyk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldENsb3NlZENhcHRpb25zVmlzaWJs
ZSk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAg
ICAoTWVkaWFDb250cm9sbGVyOjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChNZWRpYUNvbnRy
b2xsZXI6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OmNhblBsYXkp
OgorICAgICAgICAoTWVkaWFDb250cm9sbGVyOjppc0xpdmVTdHJlYW0pOgorICAgICAgICAoTWVk
aWFDb250cm9sbGVyOjpoYXNDdXJyZW50U3JjKToKKyAgICAgICAgKE1lZGlhQ29udHJvbGxlcjo6
cmV0dXJuVG9SZWFsdGltZSk6CisgICAgICAgICogaHRtbC9NZWRpYUZyYWdtZW50VVJJUGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRnJhZ21lbnRVUklQYXJzZXI6OnBhcnNlVGlt
ZUZyYWdtZW50KToKKyAgICAgICAgKiBodG1sL1B1YmxpY1VSTE1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UHVibGljVVJMTWFuYWdlcjo6cmV2b2tlKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1YmxpY1VSTE1hbmFnZXI6OnN0b3ApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpnZXRDYWNoZWRNYXhJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6c2V0Q2FjaGVkTWF4SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OnNldFRhcmdldCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xD
b250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMRHJhd0J1ZmZlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEcmF3QnVmZmVyczo6
c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFt
ZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OmRyYXdCdWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6On5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0
b21pY0hUTUxUb2tlbjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fya0NvbmRp
dGlvbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJv
Y2Vzc0F0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VtaWNvbG9uU2VwYXJhdGVkVmFsdWVDb250YWluc0phdmFTY3Jp
cHRVUkwpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RF
bGVtZW50OjpyZWJ1aWxkVHJhY2tMaXN0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUp
OgorICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwOgorICAgICAgICAoQXVk
aW9UcmFja0xpc3Q6OmdldFRyYWNrQnlJZCk6CisgICAgICAgICogaHRtbC90cmFjay9Mb2FkYWJs
ZVRleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVRleHRUcmFjazo6bmV3
Q3Vlc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVRleHRUcmFjazo6bmV3
UmVnaW9uc0F2YWlsYWJsZSk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q6OmdldEN1ZUJ5SWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdDo6YWN0aXZlQ3Vlcyk6CisgICAgICAg
ICogaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcDoKKyAgICAgICAgKFRleHRUcmFja0xpc3Q6
OmdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MpOgorICAgICAgICAoVGV4dFRy
YWNrTGlzdDo6aW52YWxpZGF0ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2spOgorICAgICAgICAqIGh0
bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6CisgICAgICAgIChUcmFja0xpc3RCYXNlOjppc0Fu
eVRyYWNrRW5hYmxlZCk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHA6
CisgICAgICAgIChWaWRlb1RyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKToKKwogMjAxNS0wOS0zMCAg
R3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBTdXBw
b3J0IEhpRFBJIFByb3Blcmx5IGluIFdlYktpdEd0aysgd2l0aCB0aGUgVGV4dHVyZU1hcHBlcgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NywxMCArNDcsOSBAQCBET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEoSFRNTEZvcm1FbGVtZW50CiAg
ICAgaWYgKCFmb3JtKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Rm9ybUFzc29jaWF0ZWRFbGVtZW50JiBlbGVtZW50ID0gKmZvcm0tPmFzc29jaWF0ZWRFbGVtZW50
cygpW2ldOwotICAgICAgICBpZiAoIWVsZW1lbnQuYXNIVE1MRWxlbWVudCgpLmlzRGlzYWJsZWRG
b3JtQ29udHJvbCgpKQotICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRGb3JtRGF0YSgqdGhpcywg
dHJ1ZSk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRz
KCkpIHsKKyAgICAgICAgaWYgKCFlbGVtZW50LT5hc0hUTUxFbGVtZW50KCkuaXNEaXNhYmxlZEZv
cm1Db250cm9sKCkpCisgICAgICAgICAgICBlbGVtZW50LT5hcHBlbmRGb3JtRGF0YSgqdGhpcywg
dHJ1ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9FbWFpbElucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgYm9vbCBFbWFpbElucHV0
VHlwZTo6dHlwZU1pc21hdGNoRm9yKGNvbgogICAgICAgICByZXR1cm4gIWlzVmFsaWRFbWFpbEFk
ZHJlc3ModmFsdWUpOwogICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NlczsKICAgICB2YWx1ZS5z
cGxpdCgnLCcsIHRydWUsIGFkZHJlc3Nlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFkZHJlc3Nlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlzVmFsaWRFbWFpbEFkZHJl
c3Moc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGFkZHJlc3Nlc1tpXSkpKQorICAg
IGZvciAoYXV0byYgYWRkcmVzcyA6IGFkZHJlc3NlcykgeworICAgICAgICBpZiAoIWlzVmFsaWRF
bWFpbEFkZHJlc3Moc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGFkZHJlc3MpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5OSw4ICszOTksOCBAQCBib29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMo
CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSAmZWxlbWVudCgpOwogCiAgICAgVmVjdG9y
PEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwYXRocy5zaXplKCk7ICsraSkKLSAgICAgICAgZmlsZXMuYXBwZW5kKEZpbGVDaG9vc2VyRmls
ZUluZm8ocGF0aHNbaV0pKTsKKyAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykKKyAgICAgICAg
ZmlsZXMuYXBwZW5kKEZpbGVDaG9vc2VyRmlsZUluZm8ocGF0aCkpOwogCiAgICAgaWYgKGlucHV0
LT5mYXN0SGFzQXR0cmlidXRlKG11bHRpcGxlQXR0cikpCiAgICAgICAgIGZpbGVzQ2hvc2VuKGZp
bGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsOCArNTUsOCBAQCB2b2lkIEZvcm1Db250cm9sU3RhdGU6OnNlcmlh
bGl6ZVRvKFZlY3RvCiB7CiAgICAgQVNTRVJUKCFpc0ZhaWx1cmUoKSk7CiAgICAgc3RhdGVWZWN0
b3IuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fdmFsdWVzLnNpemUoKSkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHN0YXRlVmVjdG9y
LmFwcGVuZChtX3ZhbHVlc1tpXS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBtX3ZhbHVlc1tp
XSk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fdmFsdWVzKQorICAgICAgICBzdGF0ZVZlY3Rv
ci5hcHBlbmQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdmFsdWUpOwogfQogCiBG
b3JtQ29udHJvbFN0YXRlIEZvcm1Db250cm9sU3RhdGU6OmRlc2VyaWFsaXplKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzdGF0ZVZlY3Rvciwgc2l6ZV90JiBpbmRleCkKQEAgLTIyMiwxMyArMjIyLDEy
IEBAIHN0ZDo6dW5pcXVlX3B0cjxTYXZlZEZvcm1TdGF0ZT4gU2F2ZWRGb3IKIHZvaWQgU2F2ZWRG
b3JtU3RhdGU6OnNlcmlhbGl6ZVRvKFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikgY29uc3QK
IHsKICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV9jb250cm9sU3RhdGVD
b3VudCkpOwotICAgIGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVGb3JOZXdG
b3JtRWxlbWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRLZXkm
IGtleSA9IGl0LT5rZXk7Ci0gICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9sU3RhdGU+JiBx
dWV1ZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgZm9yIChEZXF1ZTxGb3JtQ29udHJvbFN0YXRlPjo6
Y29uc3RfaXRlcmF0b3IgcXVlSXRlcmF0b3IgPSBxdWV1ZS5iZWdpbigpOyBxdWVJdGVyYXRvciAh
PSBxdWV1ZS5lbmQoKTsgKytxdWVJdGVyYXRvcikgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMpIHsKKyAgICAgICAgY29uc3QgRm9ybUVsZW1lbnRL
ZXkmIGtleSA9IGVsZW1lbnQua2V5OworICAgICAgICBmb3IgKGF1dG8mIHN0YXRlIDogZWxlbWVu
dC52YWx1ZSkgewogICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGtleS5uYW1lKCkpOwog
ICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGtleS50eXBlKCkpOwotICAgICAgICAgICAg
cXVlSXRlcmF0b3ItPnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKKyAgICAgICAgICAgIHN0YXRl
LnNlcmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI2NSwx
NSArMjY0LDEzIEBAIEZvcm1Db250cm9sU3RhdGUgU2F2ZWRGb3JtU3RhdGU6OnRha2VDb24KIFZl
Y3RvcjxTdHJpbmc+IFNhdmVkRm9ybVN0YXRlOjpnZXRSZWZlcmVuY2VkRmlsZVBhdGhzKCkgY29u
c3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiB0b1JldHVybjsKLSAgICBmb3IgKEZvcm1FbGVtZW50
U3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5i
ZWdpbigpOyBpdCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkgPSBpdC0+a2V5OworICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMpIHsKKyAgICAgICAgY29uc3Qg
Rm9ybUVsZW1lbnRLZXkmIGtleSA9IGVsZW1lbnQua2V5OwogICAgICAgICBpZiAoIWVxdWFsKGtl
eS50eXBlKCksICJmaWxlIiwgNCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29u
c3QgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwotICAgICAgICBm
b3IgKERlcXVlPEZvcm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVyYXRvciA9
IHF1ZXVlLmJlZ2luKCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0ZXJhdG9y
KSB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHNlbGVj
dGVkRmlsZXMgPSBIVE1MSW5wdXRFbGVtZW50OjpmaWxlc0Zyb21GaWxlSW5wdXRGb3JtQ29udHJv
bFN0YXRlKCpxdWVJdGVyYXRvcik7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNlbGVjdGVkRmlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgdG9SZXR1cm4uYXBw
ZW5kKHNlbGVjdGVkRmlsZXNbaV0ucGF0aCk7CisgICAgICAgIGZvciAoYXV0byYgc3RhdGUgOiBl
bGVtZW50LnZhbHVlKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBIVE1MSW5wdXRF
bGVtZW50OjpmaWxlc0Zyb21GaWxlSW5wdXRGb3JtQ29udHJvbFN0YXRlKHN0YXRlKSkKKyAgICAg
ICAgICAgICAgICB0b1JldHVybi5hcHBlbmQoZmlsZS5wYXRoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gdG9SZXR1cm47CkBAIC0zOTgsOCArMzk1LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEZvcm1Db250cm9sbGVyOjpTYXZlZEZvcgogewogICAgIEZvcm1LZXlHZW5lcmF0b3Iga2V5R2Vu
ZXJhdG9yOwogICAgIGF1dG8gc3RhdGVNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFNhdmVkRm9ybVN0
YXRlTWFwPigpOwotICAgIGZvciAoRm9ybUVsZW1lbnRMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjb250cm9sTGlzdC5iZWdpbigpOyBpdCAhPSBjb250cm9sTGlzdC5lbmQoKTsgKytp
dCkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiBjb250cm9sID0g
aXQtPmdldCgpOworICAgIGZvciAoYXV0byYgY29udHJvbCA6IGNvbnRyb2xMaXN0KSB7CiAgICAg
ICAgIGlmICghY29udHJvbC0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgZm9ybVN0YXRlID0gc3RhdGVN
YXAtPmFkZChrZXlHZW5lcmF0b3IuZm9ybUtleSgqY29udHJvbCkuaW1wbCgpLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CkBAIC00MTYsOSArNDEyLDkgQEAgVmVjdG9yPFN0cmluZz4gRm9ybUNv
bnRyb2xsZXI6OmZvcm1FbGVtZQogICAgIFZlY3RvcjxTdHJpbmc+IHN0YXRlVmVjdG9yOwogICAg
IHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9mb3JtRWxlbWVudHNXaXRoU3Rh
dGUuc2l6ZSgpICogNCk7CiAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGZvcm1TdGF0ZVNpZ25hdHVy
ZSgpKTsKLSAgICBmb3IgKFNhdmVkRm9ybVN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0
YXRlTWFwLT5iZWdpbigpOyBpdCAhPSBzdGF0ZU1hcC0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
c3RhdGVWZWN0b3IuYXBwZW5kKGl0LT5rZXkuZ2V0KCkpOwotICAgICAgICBpdC0+dmFsdWUtPnNl
cmlhbGl6ZVRvKHN0YXRlVmVjdG9yKTsKKyAgICBmb3IgKGF1dG8mIHN0YXRlIDogKnN0YXRlTWFw
KSB7CisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChzdGF0ZS5rZXkuZ2V0KCkpOworICAgICAg
ICBzdGF0ZS52YWx1ZS0+c2VyaWFsaXplVG8oc3RhdGVWZWN0b3IpOwogICAgIH0KICAgICBib29s
IGhhc09ubHlTaWduYXR1cmUgPSBzdGF0ZVZlY3Rvci5zaXplKCkgPT0gMTsKICAgICBpZiAoaGFz
T25seVNpZ25hdHVyZSkKQEAgLTQ4OSwxMSArNDg1LDEwIEBAIHZvaWQgRm9ybUNvbnRyb2xsZXI6
OnJlc3RvcmVDb250cm9sU3RhdGUKIAogdm9pZCBGb3JtQ29udHJvbGxlcjo6cmVzdG9yZUNvbnRy
b2xTdGF0ZUluKEhUTUxGb3JtRWxlbWVudCYgZm9ybSkKIHsKLSAgICBjb25zdCBWZWN0b3I8Rm9y
bUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybS5hc3NvY2lhdGVkRWxlbWVudHMo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmICghZWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkp
CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZm9ybS5hc3NvY2lhdGVkRWxlbWVudHMoKSkgewor
ICAgICAgICBpZiAoIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSogY29udHJvbCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUqPihlbGVtZW50c1tpXSk7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
Kj4oZWxlbWVudCk7CiAgICAgICAgIGlmICghY29udHJvbC0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVG
b3JtQ29udHJvbFN0YXRlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG93
bmVyRm9ybUZvclN0YXRlKCpjb250cm9sKSAhPSAmZm9ybSkKQEAgLTUwOSw4ICs1MDQsOCBAQCBW
ZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6Z2V0UmVmZXJlCiAgICAgVmVjdG9yPFN0cmlu
Zz4gdG9SZXR1cm47CiAgICAgU2F2ZWRGb3JtU3RhdGVNYXAgbWFwOwogICAgIGZvcm1TdGF0ZXNG
cm9tU3RhdGVWZWN0b3Ioc3RhdGVWZWN0b3IsIG1hcCk7Ci0gICAgZm9yIChTYXZlZEZvcm1TdGF0
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKSwgZW5kID0gbWFwLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRvUmV0dXJuLmFwcGVuZFZlY3RvcihpdC0+dmFsdWUt
PmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoKSk7CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1hcC52
YWx1ZXMoKSkKKyAgICAgICAgdG9SZXR1cm4uYXBwZW5kVmVjdG9yKHN0YXRlLT5nZXRSZWZlcmVu
Y2VkRmlsZVBhdGhzKCkpOwogICAgIHJldHVybiB0b1JldHVybjsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjAsOSArMTIwLDggQEAgc3RhdGljIGJvb2wgaGFzTm9uRW1wdHlCb3goUmVuZGVyQm94
TW9kZQogICAgIC8vIHBhc3MgaW4gMCwwIGZvciB0aGUgbGF5b3V0IHBvaW50IGluc3RlYWQgb2Yg
Y2FsbGluZyBsb2NhbFRvQWJzb2x1dGU/CiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwogICAg
IHJlbmRlcmVyLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQocmVuZGVy
ZXItPmxvY2FsVG9BYnNvbHV0ZSgpKSk7Ci0gICAgc2l6ZV90IHNpemUgPSByZWN0cy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFy
ZWN0c1tpXS5pc0VtcHR5KCkpCisgICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpIHsKKyAgICAg
ICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIFJlZjxIVE1MQ2FudmFzRWxlbWVudD4g
SFRNTENhbnZhc0VsZW1lbnQKIAogSFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVu
dCgpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9vYnNlcnZlcnMuYmVnaW4oKSwgZW5kID0gbV9v
YnNlcnZlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNhbnZhc0Rl
c3Ryb3llZCgqdGhpcyk7CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzKQor
ICAgICAgICBvYnNlcnZlci0+Y2FudmFzRGVzdHJveWVkKCp0aGlzKTsKIAogICAgIG1fY29udGV4
dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdheSBiZWZvcmUgdGhlIEltYWdlQnVm
ZmVyLgogfQpAQCAtMjg0LDggKzI4NCw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmRpZERy
YXcoY29uc3QgRmwKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6bm90aWZ5T2JzZXJ2ZXJzQ2Fu
dmFzQ2hhbmdlZChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0g
bV9vYnNlcnZlcnMuYmVnaW4oKSwgZW5kID0gbV9vYnNlcnZlcnMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgKCppdCktPmNhbnZhc0NoYW5nZWQoKnRoaXMsIHJlY3QpOworICAgIGZv
ciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXItPmNhbnZh
c0NoYW5nZWQoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNl
dCgpCkBAIC0zNDQsOCArMzQ0LDggQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChhdXRvIGl0ID0gbV9vYnNlcnZlcnMuYmVnaW4o
KSwgZW5kID0gbV9vYnNlcnZlcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCpp
dCktPmNhbnZhc1Jlc2l6ZWQoKnRoaXMpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29i
c2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXItPmNhbnZhc1Jlc2l6ZWQoKnRoaXMpOwogfQogCiBi
b29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNp
b24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDggKzE5Myw4IEBAIHVuc2lnbmVkIEhUTUxGaWVsZFNl
dEVsZW1lbnQ6Omxlbmd0aCgpIGMKIHsKICAgICByZWZyZXNoRWxlbWVudHNJZk5lZWRlZCgpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBtX2Fzc29jaWF0ZWRFbGVtZW50cykgeworICAgICAgICBpZiAoZWxlbWVudC0+aXNFbnVtZXJh
dGFibGUoKSkKICAgICAgICAgICAgICsrbGVuZ3RoOwogICAgIH0KICAgICByZXR1cm4gbGVuZ3Ro
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTkgKzEw
MywxOCBAQCBzdGF0aWMgSFRNTEVsZW1lbnQqIGZpcnN0TmFtZWRJdGVtKGNvbnN0CiB7CiAgICAg
QVNTRVJUKGF0dHJOYW1lID09IGlkQXR0ciB8fCBhdHRyTmFtZSA9PSBuYW1lQXR0cik7CiAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNBcnJheS5zaXplKCk7ICsraSkgewot
ICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGVsZW1lbnRzQXJyYXlbaV0tPmFzSFRNTEVs
ZW1lbnQoKTsKLSAgICAgICAgaWYgKGVsZW1lbnRzQXJyYXlbaV0tPmlzRW51bWVyYXRhYmxlKCkg
JiYgZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKQorICAgIGZvciAo
YXV0byYgZW50cnkgOiBlbGVtZW50c0FycmF5KSB7CisgICAgICAgIEhUTUxFbGVtZW50JiBlbGVt
ZW50ID0gZW50cnktPmFzSFRNTEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKGVudHJ5LT5pc0VudW1l
cmF0YWJsZSgpICYmIGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkK
ICAgICAgICAgICAgIHJldHVybiAmZWxlbWVudDsKICAgICB9CiAKICAgICBpZiAoIWltYWdlRWxl
bWVudHNBcnJheSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW1hZ2VFbGVtZW50c0FycmF5LT5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50JiBlbGVtZW50ID0gKigqaW1hZ2VFbGVtZW50c0FycmF5KVtpXTsKLSAgICAgICAg
aWYgKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiAmZWxlbWVudDsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiAqaW1hZ2VFbGVt
ZW50c0FycmF5KSB7CisgICAgICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGF0dHJO
YW1lKSA9PSBuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgfQogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEwICs4NiwxMCBAQCBIVE1MRm9ybUVsZW1l
bnQ6On5IVE1MRm9ybUVsZW1lbnQoKQogICAgIGlmICghc2hvdWxkQXV0b2NvbXBsZXRlKCkpCiAg
ICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFj
a3ModGhpcyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxl
bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5mb3Jt
V2lsbEJlRGVzdHJveWVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1hZ2VF
bGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbWFnZUVsZW1lbnRzW2ldLT5tX2Zvcm0g
PSAwOworICAgIGZvciAoYXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29jaWF0ZWRFbGVt
ZW50cykKKyAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnQtPmZvcm1XaWxsQmVEZXN0cm95ZWQoKTsK
KyAgICBmb3IgKGF1dG8mIGltYWdlRWxlbWVudCA6IG1faW1hZ2VFbGVtZW50cykKKyAgICAgICAg
aW1hZ2VFbGVtZW50LT5tX2Zvcm0gPSBudWxscHRyOwogfQogCiBib29sIEhUTUxGb3JtRWxlbWVu
dDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3RyaW5nJiB1cmwpCkBAIC0x
NDcsOCArMTQ3LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaQog
ewogICAgIE5vZGUqIHJvb3QgPSBmaW5kUm9vdCh0aGlzKTsKICAgICBWZWN0b3I8Rm9ybUFzc29j
aWF0ZWRFbGVtZW50Kj4gYXNzb2NpYXRlZEVsZW1lbnRzKG1fYXNzb2NpYXRlZEVsZW1lbnRzKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsg
KytpKQotICAgICAgICBhc3NvY2lhdGVkRWxlbWVudHNbaV0tPmZvcm1SZW1vdmVkRnJvbVRyZWUo
cm9vdCk7CisgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6IGFzc29jaWF0ZWRFbGVt
ZW50cykKKyAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnQtPmZvcm1SZW1vdmVkRnJvbVRyZWUocm9v
dCk7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKIH0KIApA
QCAtMTY1LDkgKzE2NSwxMCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVu
dHMoCiB1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgdW5z
aWduZWQgbGVuID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVk
RWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XS0+aXNFbnVtZXJhdGFibGUoKSkKKyAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZWRFbGVtZW50IDog
bV9hc3NvY2lhdGVkRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0VudW1lcmF0YWJsZSgpKQogICAgICAgICAgICAgKytsZW47CisgICAgfQogICAgIHJldHVybiBs
ZW47CiB9CiAKQEAgLTE3OSw4ICsxODAsNyBAQCBOb2RlKiBIVE1MRm9ybUVsZW1lbnQ6Oml0ZW0o
dW5zaWduZWQgaW5kCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseShFdmVu
dCogZXZlbnQsIGJvb2wgZnJvbUltcGxpY2l0U3VibWlzc2lvblRyaWdnZXIpCiB7CiAgICAgdW5z
aWduZWQgc3VibWlzc2lvblRyaWdnZXJDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgZm9yIChhdXRvJiBmb3JtQXNzb2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29j
aWF0ZWRFbGVtZW50cykgewogICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCpmb3JtQXNzb2NpYXRlZEVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGZvcm1FbGVtZW50ID0gZG93bmNhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oKmZvcm1Bc3NvY2lhdGVkRWxlbWVudCk7CkBAIC0yMjEsOSArMjIxLDkg
QEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdgogICAgIGlmIChzdWJt
aXRFbGVtZW50ICYmIHN1Ym1pdEVsZW1lbnQtPmZvcm1Ob1ZhbGlkYXRlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQotICAgICAgICAgICAgZG93bmNhc3Q8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS5oaWRlVmlzaWJs
ZVZhbGlkYXRpb25NZXNzYWdlKCk7CisgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6
IG1fYXNzb2NpYXRlZEVsZW1lbnRzKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PigqYXNzb2NpYXRlZEVsZW1lbnQpKQorICAgICAgICAgICAgZG93bmNhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVtZW50KS5oaWRlVmlzaWJsZVZhbGlkYXRp
b25NZXNzYWdlKCk7CiAgICAgfQogCiAgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ+PiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7CkBAIC0yMzksOCArMjM5LDggQEAgYm9v
bCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdgogICAgIFJlZjxIVE1MRm9ybUVs
ZW1lbnQ+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGZvY3Vz
YWJsZSBjb250cm9sIGFuZCBzaG93IGEgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNb
aV0tPmFzSFRNTEVsZW1lbnQoKTsKKyAgICBmb3IgKGF1dG8mIGNvbnRyb2wgOiB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMpIHsKKyAgICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBjb250cm9s
LT5hc0hUTUxFbGVtZW50KCk7CiAgICAgICAgIGlmIChlbGVtZW50LmluRG9jdW1lbnQoKSAmJiBl
bGVtZW50LmlzRm9jdXNhYmxlKCkpIHsKICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZChmYWxzZSk7CiAgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CkBAIC0yNTIs
MTMgKzI1MiwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAK
ICAgICAvLyBXYXJuIGFib3V0IGFsbCBvZiB1bmZvY3VzYWJsZSBjb250cm9scy4KICAgICBpZiAo
ZG9jdW1lbnQoKS5mcmFtZSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudCYgY29udHJvbCA9ICp1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV07
Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGNvbnRyb2wuYXNIVE1MRWxlbWVu
dCgpOworICAgICAgICBmb3IgKGF1dG8mIGNvbnRyb2wgOiB1bmhhbmRsZWRJbnZhbGlkQ29udHJv
bHMpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gY29udHJvbC0+YXNIVE1M
RWxlbWVudCgpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQuaW5Eb2N1bWVudCgpICYmIGVsZW1l
bnQuaXNGb2N1c2FibGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IFN0cmluZyBtZXNzYWdlKCJBbiBpbnZhbGlkIGZvcm0gY29udHJvbCB3aXRoIG5hbWU9JyVuYW1l
JyBpcyBub3QgZm9jdXNhYmxlLiIpOwotICAgICAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFt
ZSIsIGNvbnRyb2wubmFtZSgpKTsKKyAgICAgICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUi
LCBjb250cm9sLT5uYW1lKCkpOwogICAgICAgICAgICAgZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3Nh
Z2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEyLDkgKzMxMSw4IEBAIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMKICAgICBBU1NFUlRfQVJHKGZpZWxkTmFtZXNBbmRW
YWx1ZXMsIGZpZWxkTmFtZXNBbmRWYWx1ZXMuaXNFbXB0eSgpKTsKIAogICAgIGZpZWxkTmFtZXNB
bmRWYWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCYgY29udHJvbCA9ICptX2Fzc29j
aWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBjb250cm9s
LmFzSFRNTEVsZW1lbnQoKTsKKyAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZWRFbGVtZW50IDogbV9h
c3NvY2lhdGVkRWxlbWVudHMpIHsKKyAgICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSBhc3Nv
Y2lhdGVkRWxlbWVudC0+YXNIVE1MRWxlbWVudCgpOwogICAgICAgICBpZiAoIWlzPEhUTUxJbnB1
dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCk7
CkBAIC0zNDIsOCArMzQwLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCog
ZXZlbgogICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiBmaXJzdFN1Y2Nlc3NmdWxT
dWJtaXRCdXR0b247CiAgICAgYm9vbCBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGFjdGl2YXRlU3Vi
bWl0QnV0dG9uOyAvLyBkbyB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEgc3VibWl0IGJ1dHRvbj8KIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50
ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxl
bWVudCA6IG1fYXNzb2NpYXRlZEVsZW1lbnRzKSB7CiAgICAgICAgIGlmICghaXM8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24pIHsKQEAgLTM4Miw5ICszNzksOSBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3Nv
Y2lhdGVkRWxlbWVudHNbaV0pKQotICAgICAgICAgICAgZG93bmNhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS5yZXNldCgpOworICAgIGZvciAoYXV0
byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29jaWF0ZWRFbGVtZW50cykgeworICAgICAgICBp
ZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVtZW50KSkKKyAgICAg
ICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3NvY2lhdGVkRWxlbWVu
dCkucmVzZXQoKTsKICAgICB9CiAKICAgICBtX2lzSW5SZXNldEZ1bmN0aW9uID0gZmFsc2U7CkBA
IC02OTIsMTAgKzY4OSwxMCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6d2FzVXNlclN1Ym1pdHRl
ZCgpCiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1
dHRvbigpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRl
ZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKKyAgICBmb3IgKGF1dG8mIGFzc29j
aWF0ZWRFbGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKCFpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PigqYXNzb2NpYXRlZEVsZW1lbnQpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGNvbnRyb2wgPSBkb3du
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOwor
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBjb250cm9sID0gZG93bmNhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgaWYgKGNvbnRy
b2wuaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gJmNvbnRy
b2w7CiAgICAgfQpAQCAtNzE2LDEyICs3MTMsMTIgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNo
ZWNrSW52YWxpZENvbnRybwogICAgIC8vIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFs
aWRpdHkoKSBtaWdodCBjaGFuZ2UgbV9hc3NvY2lhdGVkRWxlbWVudHMuCiAgICAgVmVjdG9yPFJl
ZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+PiBlbGVtZW50czsKICAgICBlbGVtZW50cy5yZXNl
cnZlQ2FwYWNpdHkobV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGVsZW1lbnRzLmFwcGVuZChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSk7CisgICAgZm9yIChhdXRv
JiBhc3NvY2lhdGVkRWxlbWVudCA6IG1fYXNzb2NpYXRlZEVsZW1lbnRzKQorICAgICAgICBlbGVt
ZW50cy5hcHBlbmQoYXNzb2NpYXRlZEVsZW1lbnQpOwogICAgIGJvb2wgaGFzSW52YWxpZENvbnRy
b2xzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50c1tpXS0+Zm9ybSgpID09IHRoaXMgJiYgaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnRzW2ldKSkgewotICAgICAgICAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCYgY29udHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KCplbGVtZW50c1tpXSk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudHMp
IHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmZvcm0oKSA9PSB0aGlzICYmIGlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudCYgY29udHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50
KTsKICAgICAgICAgICAgIGlmICghY29udHJvbC5jaGVja1ZhbGlkaXR5KCZ1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMpICYmIGNvbnRyb2wuZm9ybSgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAg
aGFzSW52YWxpZENvbnRyb2xzID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNzc3LDEwICs3NzQsOSBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlRnJvbVBhc3ROYW1lCiAgICAgaWYgKCFtX3Bh
c3ROYW1lc01hcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGFzdE5hbWVzTWFwOjppdGVyYXRv
ciBlbmQgPSBtX3Bhc3ROYW1lc01hcC0+ZW5kKCk7Ci0gICAgZm9yIChQYXN0TmFtZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9wYXN0TmFtZXNNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpZiAoaXQtPnZhbHVlID09IGl0ZW0pCi0gICAgICAgICAgICBpdC0+dmFsdWUgPSAw
OyAvLyBLZWVwIGxvb3BpbmcuIFNpbmdsZSBlbGVtZW50IGNhbiBoYXZlIG11bHRpcGxlIG5hbWVz
LgorICAgIGZvciAoYXV0byYgcGFzdE5hbWUgOiBtX3Bhc3ROYW1lc01hcC0+dmFsdWVzKCkpIHsK
KyAgICAgICAgaWYgKHBhc3ROYW1lID09IGl0ZW0pCisgICAgICAgICAgICBwYXN0TmFtZSA9IG51
bGxwdHI7IC8vIEtlZXAgbG9vcGluZy4gU2luZ2xlIGVsZW1lbnQgY2FuIGhhdmUgbXVsdGlwbGUg
bmFtZXMuCiAgICAgfQogfQogCkBAIC04MTMsOSArODA5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OmRvY3VtZW50RGlkUmVzdW1lRgogewogICAgIEFTU0VSVCghc2hvdWxkQXV0b2NvbXBsZXRl
KCkpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pigq
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQotICAgICAgICAgICAgZG93bmNhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS5yZXNldCgpOworICAgIGZv
ciAoYXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29jaWF0ZWRFbGVtZW50cykgeworICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRFbGVtZW50KSkK
KyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3NvY2lhdGVk
RWxlbWVudCkucmVzZXQoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyNCw4ICsxMjI0
LDggQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlQWNjZXB0QXR0cmlidQogCiAgICAgVmVj
dG9yPFN0cmluZz4gc3BsaXRUeXBlczsKICAgICBhY2NlcHRTdHJpbmcuc3BsaXQoJywnLCBmYWxz
ZSwgc3BsaXRUeXBlcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcGxpdFR5cGVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyB0cmltbWVkVHlwZSA9IHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlcyhzcGxpdFR5cGVzW2ldKTsKKyAgICBmb3IgKGF1dG8mIHNwbGl0
VHlwZSA6IHNwbGl0VHlwZXMpIHsKKyAgICAgICAgU3RyaW5nIHRyaW1tZWRUeXBlID0gc3RyaXBM
ZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHNwbGl0VHlwZSk7CiAgICAgICAgIGlmICh0cmlt
bWVkVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFw
cmVkaWNhdGUodHJpbW1lZFR5cGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5
Z2VuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MS2V5
Z2VuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEtleWdlbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMCArNzQsMTAgQEAg
aW5saW5lIEhUTUxLZXlnZW5FbGVtZW50OjpIVE1MS2V5Z2VuRWxlbQogICAgIGdldFN1cHBvcnRl
ZEtleVNpemVzKGtleXMpOwogCiAgICAgUmVmPEhUTUxTZWxlY3RFbGVtZW50PiBzZWxlY3QgPSBL
ZXlnZW5TZWxlY3RFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgeworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykg
ewogICAgICAgICBSZWY8SFRNTE9wdGlvbkVsZW1lbnQ+IG9wdGlvbiA9IEhUTUxPcHRpb25FbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgICAgICBzZWxlY3QtPmFwcGVuZENoaWxkKG9wdGlv
bi5jb3B5UmVmKCksIElHTk9SRV9FWENFUFRJT04pOwotICAgICAgICBvcHRpb24tPmFwcGVuZENo
aWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCwga2V5c1tpXSksIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICBvcHRpb24tPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCwga2V5KSwg
SUdOT1JFX0VYQ0VQVElPTik7CiAgICAgfQogCiAgICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9v
dCgpLmFwcGVuZENoaWxkKFdURjo6bW92ZShzZWxlY3QpLCBJR05PUkVfRVhDRVBUSU9OKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTkw
MzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcyNiwxNSArNTcyNiwxNSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
dE1lZGlhR3JvdXAoY29uCiAgICAgLy8gNC4gSWYgdGhlcmUgaXMgYW5vdGhlciBtZWRpYSBlbGVt
ZW50IHdob3NlIERvY3VtZW50IGlzIHRoZSBzYW1lIGFzIG0ncyBEb2N1bWVudCAoZXZlbiBpZiBv
bmUgb3IgYm90aAogICAgIC8vIG9mIHRoZXNlIGVsZW1lbnRzIGFyZSBub3QgYWN0dWFsbHkgaW4g
dGhlIERvY3VtZW50KSwgCiAgICAgSGFzaFNldDxIVE1MTWVkaWFFbGVtZW50Kj4gZWxlbWVudHMg
PSBkb2N1bWVudFRvRWxlbWVudFNldE1hcCgpLmdldCgmZG9jdW1lbnQoKSk7Ci0gICAgZm9yIChI
YXNoU2V0PEhUTUxNZWRpYUVsZW1lbnQqPjo6aXRlcmF0b3IgaSA9IGVsZW1lbnRzLmJlZ2luKCk7
IGkgIT0gZWxlbWVudHMuZW5kKCk7ICsraSkgewotICAgICAgICBpZiAoKmkgPT0gdGhpcykKKyAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgeworICAgICAgICBpZiAoZWxlbWVudCA9
PSB0aGlzKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gYW5kIHdoaWNoIGFs
c28gaGFzIGEgbWVkaWFncm91cCBhdHRyaWJ1dGUsIGFuZCB3aG9zZSBtZWRpYWdyb3VwIGF0dHJp
YnV0ZSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMKICAgICAgICAgLy8gdGhlIG5ldyB2YWx1ZSBvZiBt
J3MgbWVkaWFncm91cCBhdHRyaWJ1dGUsICAgICAgICAKLSAgICAgICAgaWYgKCgqaSktPm1lZGlh
R3JvdXAoKSA9PSBncm91cCkgeworICAgICAgICBpZiAoZWxlbWVudC0+bWVkaWFHcm91cCgpID09
IGdyb3VwKSB7CiAgICAgICAgICAgICAvLyAgdGhlbiBsZXQgY29udHJvbGxlciBiZSB0aGF0IG1l
ZGlhIGVsZW1lbnQncyBjdXJyZW50IG1lZGlhIGNvbnRyb2xsZXIuCi0gICAgICAgICAgICBzZXRD
b250cm9sbGVyKCgqaSktPmNvbnRyb2xsZXIoKSk7CisgICAgICAgICAgICBzZXRDb250cm9sbGVy
KGVsZW1lbnQtPmNvbnRyb2xsZXIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxMiArMTU2LDEwIEBAIGludCBIVE1MT3B0aW9u
RWxlbWVudDo6aW5kZXgoKSBjb25zdAogCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKIAotICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJ
dGVtcygpOwotICAgIHNpemVfdCBsZW5ndGggPSBpdGVtcy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25F
bGVtZW50PigqaXRlbXNbaV0pKQorICAgIGZvciAoYXV0byYgaXRlbSA6IHNlbGVjdEVsZW1lbnQt
Pmxpc3RJdGVtcygpKSB7CisgICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVt
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaXRlbXNbaV0gPT0gdGhpcykK
KyAgICAgICAgaWYgKGl0ZW0gPT0gdGhpcykKICAgICAgICAgICAgIHJldHVybiBvcHRpb25JbmRl
eDsKICAgICAgICAgKytvcHRpb25JbmRleDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwOCwx
MSArNjA4LDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3RpbwogICAg
IH0KIAogICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmNsZWFyKCk7Ci0gICAgY29uc3QgVmVj
dG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gaXRlbXNbaV07CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1zKCkp
CiAgICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
c2VsZWN0ZWQoKSk7Ci0gICAgfQogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleChpbnQgaW5kZXgpCkBAIC02MjMsMTEgKzYyMCw4IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGkKICAgICAvLyBzZWxlY3Rpb24g
cGl2b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleC4KICAgICBtX2NhY2hlZFN0YXRlRm9yQWN0
aXZlU2VsZWN0aW9uLmNsZWFyKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsK
KyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMoKSkKICAgICAgICAgbV9jYWNoZWRT
dGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkp
OwotICAgIH0KIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9u
RW5kSW5kZXgoaW50IGluZGV4KQpAQCAtODQzLDkgKzgzNyw3IEBAIGludCBIVE1MU2VsZWN0RWxl
bWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAKICAgICAv
LyBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgZmlyc3Qgb3B0aW9uIHNlbGVjdGVkLgotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRl
bXMoKSkgewogICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSkgewog
ICAgICAgICAgICAgaWYgKGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2Vs
ZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CkBAIC05NzEsOSArOTYzLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbgogCiB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oSFRNTEVsZW1lbnQq
IGV4Y2x1ZGVFbGVtZW50KQogewotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVt
cyA9IGxpc3RJdGVtcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOworICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKSB7CiAgICAgICAgIGlmIChlbGVtZW50
ICE9IGV4Y2x1ZGVFbGVtZW50ICYmIGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpCiAg
ICAgICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOwogICAgIH0KQEAgLTk4MSwxMyArOTcxLDExIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXQKIAogRm9ybUNvbnRyb2xTdGF0ZSBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAogewotICAgIGNvbnN0IFZl
Y3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwotICAgIHNpemVfdCBsZW5n
dGggPSBpdGVtcy5zaXplKCk7CiAgICAgRm9ybUNvbnRyb2xTdGF0ZSBzdGF0ZTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1M
T3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0
SXRlbXMoKSkgeworICAgICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlv
biA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pOworICAgICAgICBIVE1M
T3B0aW9uRWxlbWVudCYgb3B0aW9uID0gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KTsKICAgICAgICAgaWYgKCFvcHRpb24uc2VsZWN0ZWQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBzdGF0ZS5hcHBlbmQob3B0aW9uLnZhbHVlKCkpOwpAQCAtMTAxOSwxMCAr
MTAwNywxMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNvbnRyCiAgICAg
aWYgKCFpdGVtc1NpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXNTaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVu
dD4oKml0ZW1zW2ldKSkKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBpdGVtcykgeworICAgICAg
ICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkuc2V0
U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CisgICAgICAgIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqZWxlbWVudCkuc2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKCFt
dWx0aXBsZSgpKSB7CkBAIC0xMDYzLDEwICsxMDUxLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVu
dDo6YXBwZW5kRm9ybURhdGEoRgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHN1
Y2Nlc3NmdWwgPSBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMg
PSBsaXN0SXRlbXMoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOworICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKSB7CiAgICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkuc2VsZWN0ZWQoKSAmJiAhZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewogICAgICAgICAgICAgbGlzdC5hcHBlbmRE
YXRhKG5hbWUsIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudmFsdWUoKSk7
CiAgICAgICAgICAgICBzdWNjZXNzZnVsID0gdHJ1ZTsKQEAgLTEwODQsOSArMTA2OSw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KCkKICAgICBIVE1MT3B0aW9uRWxlbWVudCogZmly
c3RPcHRpb24gPSBudWxscHRyOwogICAgIEhUTUxPcHRpb25FbGVtZW50KiBzZWxlY3RlZE9wdGlv
biA9IG51bGxwdHI7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBs
aXN0SXRlbXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKKyAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoIWlzPEhUTUxPcHRp
b25FbGVtZW50PigqZWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTAz
NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTAsOSArNDEwLDggQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojpz
ZXREZWZhdWx0VmFsdQogICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNh
bDo6Zmlyc3RDaGlsZCgqdGhpcyk7IHRleHROb2RlOyB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZygqdGV4dE5vZGUpKQogICAgICAgICB0ZXh0Tm9kZXMuYXBwZW5kKCp0
ZXh0Tm9kZSk7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHRleHROb2Rlcy5zaXplKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJlbW92ZUNoaWxkKHRleHRO
b2Rlc1tpXS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZm9yIChhdXRvJiB0ZXh0Tm9k
ZSA6IHRleHROb2RlcykKKyAgICAgICAgcmVtb3ZlQ2hpbGQodGV4dE5vZGUuZ2V0KCksIElHTk9S
RV9FWENFUFRJT04pOwogCiAgICAgLy8gTm9ybWFsaXplIGxpbmUgZW5kaW5ncy4KICAgICBTdHJp
bmcgdmFsdWUgPSBkZWZhdWx0VmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MCwxMCArMTQwLDEwIEBAIHN0YXRpYyB2b2lkIHBvcHVsYXRl
SW5wdXRUeXBlRmFjdG9yeU1hcCgKICAgICAgICAgLy8gTm8gbmVlZCB0byByZWdpc3RlciAidGV4
dCIgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCB0eXBlLgogICAgIH07CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChpbnB1dFR5cGVzKTsgKytpKSB7Ci0g
ICAgICAgIGF1dG8gY29uZGl0aW9uYWxGdW5jdGlvbiA9IGlucHV0VHlwZXNbaV0uY29uZGl0aW9u
YWxGdW5jdGlvbjsKKyAgICBmb3IgKGF1dG8mIGlucHV0VHlwZSA6IGlucHV0VHlwZXMpIHsKKyAg
ICAgICAgYXV0byBjb25kaXRpb25hbEZ1bmN0aW9uID0gaW5wdXRUeXBlLmNvbmRpdGlvbmFsRnVu
Y3Rpb247CiAgICAgICAgIGlmICghY29uZGl0aW9uYWxGdW5jdGlvbiB8fCAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS4qY29uZGl0aW9uYWxGdW5jdGlvbikoKSkKLSAg
ICAgICAgICAgIG1hcC5hZGQoaW5wdXRUeXBlc1tpXS5uYW1lRnVuY3Rpb24oKSwgaW5wdXRUeXBl
c1tpXS5mYWN0b3J5RnVuY3Rpb24pOworICAgICAgICAgICAgbWFwLmFkZChpbnB1dFR5cGUubmFt
ZUZ1bmN0aW9uKCksIGlucHV0VHlwZS5mYWN0b3J5RnVuY3Rpb24pOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTkwMzQz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzIsOCArMTMyLDggQEAgZG91YmxlIE1lZGlhQ29udHJvbGxlcjo6ZHVyYXRpb24o
KSBjb25zdAogICAgIC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBjYWNoaW5nIHRoZSBtYXhpbXVtIGR1
cmF0aW9uIGFuZCBvbmx5IHVwZGF0aW5nIHRoZSBjYWNoZWQgdmFsdWUKICAgICAvLyB3aGVuIHRo
ZSBzbGF2ZWQgbWVkaWEgZWxlbWVudHMnIGR1cmF0aW9ucyBjaGFuZ2UuCiAgICAgZG91YmxlIG1h
eER1cmF0aW9uID0gMDsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9tZWRp
YUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBkb3VibGUgZHVyYXRpb24gPSBt
X21lZGlhRWxlbWVudHNbaW5kZXhdLT5kdXJhdGlvbigpOworICAgIGZvciAoYXV0byYgbWVkaWFF
bGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKSB7CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1l
ZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZHVyYXRpb24p
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1heER1cmF0aW9uID0gc3RkOjptYXgo
bWF4RHVyYXRpb24sIGR1cmF0aW9uKTsKQEAgLTE3MCw4ICsxNzAsOCBAQCB2b2lkIE1lZGlhQ29u
dHJvbGxlcjo6c2V0Q3VycmVudFRpbWUoZG91CiAgICAgbV9jbG9jay0+c2V0Q3VycmVudFRpbWUo
dGltZSk7CiAgICAgCiAgICAgLy8gU2VlayBlYWNoIHNsYXZlZCBtZWRpYSBlbGVtZW50IHRvIHRo
ZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIG1lZGlhIGVsZW1lbnQgdGlt
ZWxpbmUuCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVtZW50
cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnNlZWso
TWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlh
RWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykKKyAgICAgICAgbWVkaWFFbGVtZW50LT5zZWVrKE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSk7CiAKICAgICBzY2hlZHVsZVRpbWV1cGRh
dGVFdmVudCgpOwogICAgIG1fcmVzZXRDdXJyZW50VGltZUluTmV4dFBsYXkgPSBmYWxzZTsKQEAg
LTE5NCw4ICsxOTQsOCBAQCB2b2lkIE1lZGlhQ29udHJvbGxlcjo6cGxheSgpCiB7CiAgICAgLy8g
V2hlbiB0aGUgcGxheSgpIG1ldGhvZCBpcyBpbnZva2VkLCB0aGUgdXNlciBhZ2VudCBtdXN0IGlu
dm9rZSB0aGUgcGxheSBtZXRob2Qgb2YgZWFjaAogICAgIC8vIHNsYXZlZCBtZWRpYSBlbGVtZW50
IGluIHR1cm4sCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVt
ZW50cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnBs
YXkoKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykKKyAg
ICAgICAgbWVkaWFFbGVtZW50LT5wbGF5KCk7CiAKICAgICAvLyBhbmQgdGhlbiBpbnZva2UgdGhl
IHVucGF1c2UgbWV0aG9kIG9mIHRoZSBNZWRpYUNvbnRyb2xsZXIuCiAgICAgdW5wYXVzZSgpOwpA
QCAtMjQyLDggKzI0Miw4IEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzZXRQbGF5YmFja1JhdGUo
ZG8KICAgICAvLyBwbGF5YmFjayByYXRlIHRvIHRoZSBuZXcgdmFsdWUsCiAgICAgbV9jbG9jay0+
c2V0UGxheVJhdGUocmF0ZSk7CiAKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
bV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnRz
W2luZGV4XS0+dXBkYXRlUGxheWJhY2tSYXRlKCk7CisgICAgZm9yIChhdXRvJiBtZWRpYUVsZW1l
bnQgOiBtX21lZGlhRWxlbWVudHMpCisgICAgICAgIG1lZGlhRWxlbWVudC0+dXBkYXRlUGxheWJh
Y2tSYXRlKCk7CiAKICAgICAvLyB0aGVuIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHJhdGVjaGFuZ2UgYXQgdGhlIE1lZGlhQ29udHJvbGxlci4KICAgICBzY2hlZHVs
ZUV2ZW50KGV2ZW50TmFtZXMoKS5yYXRlY2hhbmdlRXZlbnQpOwpAQCAtMjY4LDggKzI2OCw4IEBA
IHZvaWQgTWVkaWFDb250cm9sbGVyOjpzZXRWb2x1bWUoZG91YmxlIGwKICAgICAvLyBhbmQgcXVl
dWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgdm9sdW1lY2hhbmdlIGF0IHRo
ZSBNZWRpYUNvbnRyb2xsZXIuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkudm9sdW1l
Y2hhbmdlRXZlbnQpOwogCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVk
aWFFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRl
eF0tPnVwZGF0ZVZvbHVtZSgpOworICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRp
YUVsZW1lbnRzKQorICAgICAgICBtZWRpYUVsZW1lbnQtPnVwZGF0ZVZvbHVtZSgpOwogfQogCiB2
b2lkIE1lZGlhQ29udHJvbGxlcjo6c2V0TXV0ZWQoYm9vbCBmbGFnKQpAQCAtMjg0LDggKzI4NCw4
IEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzZXRNdXRlZChib29sIGZsYWcKICAgICAvLyBhbmQg
cXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgdm9sdW1lY2hhbmdlIGF0
IHRoZSBNZWRpYUNvbnRyb2xsZXIuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkudm9s
dW1lY2hhbmdlRXZlbnQpOwogCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1f
bWVkaWFFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tp
bmRleF0tPnVwZGF0ZVZvbHVtZSgpOworICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9t
ZWRpYUVsZW1lbnRzKQorICAgICAgICBtZWRpYUVsZW1lbnQtPnVwZGF0ZVZvbHVtZSgpOwogfQog
CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBwbGF5YmFja1N0YXRlV2FpdGluZygpCkBAIC00
NzIsOCArNDcyLDggQEAgdm9pZCBNZWRpYUNvbnRyb2xsZXI6OnVwZGF0ZVBsYXliYWNrU3RhdAog
CiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6dXBkYXRlTWVkaWFFbGVtZW50cygpCiB7Ci0gICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVtZW50cy5zaXplKCk7ICsraW5k
ZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnVwZGF0ZVBsYXlTdGF0ZSgpOwor
ICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKQorICAgICAgICBt
ZWRpYUVsZW1lbnQtPnVwZGF0ZVBsYXlTdGF0ZSgpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbGxl
cjo6YnJpbmdFbGVtZW50VXBUb1NwZWVkKEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQpCkBAIC00
OTgsOCArNDk4LDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xsZXI6OmlzQmxvY2tlZCgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBib29sIGFsbFBhdXNlZCA9IHRydWU7Ci0g
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVtZW50cy5zaXplKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IG1fbWVkaWFF
bGVtZW50c1tpbmRleF07CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9tZWRpYUVsZW1lbnRz
KSB7CiAgICAgICAgIC8vICBvciBpZiBhbnkgb2YgaXRzIHNsYXZlZCBtZWRpYSBlbGVtZW50cyBh
cmUgYmxvY2tlZCBtZWRpYSBlbGVtZW50cywKICAgICAgICAgaWYgKGVsZW1lbnQtPmlzQmxvY2tl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MjksOCArNTI4LDggQEAgYm9vbCBN
ZWRpYUNvbnRyb2xsZXI6Omhhc0VuZGVkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIGJvb2wgYWxsSGF2ZUVuZGVkID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50c1tpbmRleF0tPmVuZGVkKCkpCisgICAgZm9yIChhdXRvJiBt
ZWRpYUVsZW1lbnQgOiBtX21lZGlhRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKCFtZWRpYUVsZW1l
bnQtPmVuZGVkKCkpCiAgICAgICAgICAgICBhbGxIYXZlRW5kZWQgPSBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIGFsbEhhdmVFbmRlZDsKQEAgLTU0OCw5ICs1NDcsOCBAQCB2b2lkIE1lZGlhQ29u
dHJvbGxlcjo6YXN5bmNFdmVudFRpbWVyRmlyCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IHBl
bmRpbmdFdmVudHM7CiAKICAgICBtX3BlbmRpbmdFdmVudHMuc3dhcChwZW5kaW5nRXZlbnRzKTsK
LSAgICBzaXplX3QgY291bnQgPSBwZW5kaW5nRXZlbnRzLnNpemUoKTsKLSAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZl
bnQocGVuZGluZ0V2ZW50c1tpbmRleF0ucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICBmb3IgKGF1dG8mIHBlbmRpbmdFdmVudCA6IHBlbmRpbmdFdmVudHMpCisgICAgICAgIGRpc3Bh
dGNoRXZlbnQocGVuZGluZ0V2ZW50LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiB9CiAK
IHZvaWQgTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXJGaXJlZCgpCkBAIC01NjAs
OCArNTU4LDggQEAgdm9pZCBNZWRpYUNvbnRyb2xsZXI6OmNsZWFyUG9zaXRpb25UaW1lcgogCiBi
b29sIE1lZGlhQ29udHJvbGxlcjo6aGFzQXVkaW8oKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0g
ICAgICAgIGlmIChtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5oYXNBdWRpbygpKQorICAgIGZvciAo
YXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKSB7CisgICAgICAgIGlmIChtZWRp
YUVsZW1lbnQtPmhhc0F1ZGlvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY5LDggKzU2Nyw4IEBAIGJvb2wgTWVkaWFDb250cm9sbGVy
OjpoYXNBdWRpbygpIGNvbnN0CiAKIGJvb2wgTWVkaWFDb250cm9sbGVyOjpoYXNWaWRlbygpIGNv
bnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVtZW50
cy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVtZW50c1tpbmRleF0t
Pmhhc1ZpZGVvKCkpCisgICAgZm9yIChhdXRvJiBtZWRpYUVsZW1lbnQgOiBtX21lZGlhRWxlbWVu
dHMpIHsKKyAgICAgICAgaWYgKG1lZGlhRWxlbWVudC0+aGFzVmlkZW8oKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC01NzgsOCArNTc2LDgg
QEAgYm9vbCBNZWRpYUNvbnRyb2xsZXI6Omhhc1ZpZGVvKCkgY29uc3QKIAogYm9vbCBNZWRpYUNv
bnRyb2xsZXI6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewotICAg
ICAgICBpZiAobV9tZWRpYUVsZW1lbnRzW2luZGV4XS0+aGFzQ2xvc2VkQ2FwdGlvbnMoKSkKKyAg
ICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykgeworICAgICAgICBp
ZiAobWVkaWFFbGVtZW50LT5oYXNDbG9zZWRDYXB0aW9ucygpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTU4OCwxNCArNTg2LDE0IEBAIGJv
b2wgTWVkaWFDb250cm9sbGVyOjpoYXNDbG9zZWRDYXB0aW9ucygKIHZvaWQgTWVkaWFDb250cm9s
bGVyOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewogICAgIG1fY2xv
c2VkQ2FwdGlvbnNWaXNpYmxlID0gdmlzaWJsZTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgbV9tZWRp
YUVsZW1lbnRzW2luZGV4XS0+c2V0Q2xvc2VkQ2FwdGlvbnNWaXNpYmxlKHZpc2libGUpOworICAg
IGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKQorICAgICAgICBtZWRp
YUVsZW1lbnQtPnNldENsb3NlZENhcHRpb25zVmlzaWJsZSh2aXNpYmxlKTsKIH0KIAogYm9vbCBN
ZWRpYUNvbnRyb2xsZXI6OnN1cHBvcnRzU2Nhbm5pbmcoKSBjb25zdAogewotICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KSB7
Ci0gICAgICAgIGlmICghbV9tZWRpYUVsZW1lbnRzW2luZGV4XS0+c3VwcG9ydHNTY2FubmluZygp
KQorICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKSB7CisgICAg
ICAgIGlmICghbWVkaWFFbGVtZW50LT5zdXBwb3J0c1NjYW5uaW5nKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNjAzLDE2ICs2MDEsMTYg
QEAgYm9vbCBNZWRpYUNvbnRyb2xsZXI6OnN1cHBvcnRzU2Nhbm5pbmcoKQogCiB2b2lkIE1lZGlh
Q29udHJvbGxlcjo6YmVnaW5TY3J1YmJpbmcoKQogewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICBtX21l
ZGlhRWxlbWVudHNbaW5kZXhdLT5iZWdpblNjcnViYmluZygpOworICAgIGZvciAoYXV0byYgbWVk
aWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKQorICAgICAgICBtZWRpYUVsZW1lbnQtPmJlZ2lu
U2NydWJiaW5nKCk7CiAgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBQTEFZSU5HKQogICAgICAg
ICBtX2Nsb2NrLT5zdG9wKCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjplbmRTY3J1YmJp
bmcoKQogewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVu
dHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5lbmRT
Y3J1YmJpbmcoKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50
cykKKyAgICAgICAgbWVkaWFFbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsKICAgICBpZiAobV9wbGF5
YmFja1N0YXRlID09IFBMQVlJTkcpCiAgICAgICAgIG1fY2xvY2stPnN0YXJ0KCk7CiB9CkBAIC02
MzQsOCArNjMyLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xsZXI6OmNhblBsYXkoKSBjb25zdAogICAg
IGlmIChtX3BhdXNlZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewotICAg
ICAgICBpZiAoIW1fbWVkaWFFbGVtZW50c1tpbmRleF0tPmNhblBsYXkoKSkKKyAgICBmb3IgKGF1
dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykgeworICAgICAgICBpZiAoIW1lZGlh
RWxlbWVudC0+Y2FuUGxheSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTY0Myw4ICs2NDEsOCBAQCBib29sIE1lZGlhQ29udHJvbGxlcjo6
Y2FuUGxheSgpIGNvbnN0CiAKIGJvb2wgTWVkaWFDb250cm9sbGVyOjppc0xpdmVTdHJlYW0oKSBj
b25zdAogewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVu
dHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIGlmICghbV9tZWRpYUVsZW1lbnRzW2luZGV4
XS0+aXNMaXZlU3RyZWFtKCkpCisgICAgZm9yIChhdXRvJiBtZWRpYUVsZW1lbnQgOiBtX21lZGlh
RWxlbWVudHMpIHsKKyAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQtPmlzTGl2ZVN0cmVhbSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1
Miw4ICs2NTAsOCBAQCBib29sIE1lZGlhQ29udHJvbGxlcjo6aXNMaXZlU3RyZWFtKCkgY29uCiAK
IGJvb2wgTWVkaWFDb250cm9sbGVyOjpoYXNDdXJyZW50U3JjKCkgY29uc3QKIHsKLSAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRl
eCkgewotICAgICAgICBpZiAoIW1fbWVkaWFFbGVtZW50c1tpbmRleF0tPmhhc0N1cnJlbnRTcmMo
KSkKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykgeworICAg
ICAgICBpZiAoIW1lZGlhRWxlbWVudC0+aGFzQ3VycmVudFNyYygpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY2MSw4ICs2NTksOCBAQCBi
b29sIE1lZGlhQ29udHJvbGxlcjo6aGFzQ3VycmVudFNyYygpIGNvCiAKIHZvaWQgTWVkaWFDb250
cm9sbGVyOjpyZXR1cm5Ub1JlYWx0aW1lKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgbV9tZWRp
YUVsZW1lbnRzW2luZGV4XS0+cmV0dXJuVG9SZWFsdGltZSgpOworICAgIGZvciAoYXV0byYgbWVk
aWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKQorICAgICAgICBtZWRpYUVsZW1lbnQtPnJldHVy
blRvUmVhbHRpbWUoKTsKIH0KIAogLy8gVGhlIHNwZWMgc2F5cyB0byBmaXJlIHBlcmlvZGljIHRp
bWV1cGRhdGUgZXZlbnRzICh0aG9zZSBzZW50IHdoaWxlIHBsYXlpbmcpIGV2ZXJ5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHAJKHJldmlz
aW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFGcmFnbWVudFVSSVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw5ICsxNjEsNyBAQCB2b2lkIE1lZGlhRnJhZ21l
bnRVUklQYXJzZXI6OnBhcnNlVGltZUZyCiAKICAgICBtX3RpbWVGb3JtYXQgPSBJbnZhbGlkOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJhZ21lbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4mIGZyYWdtZW50ID0gbV9mcmFnbWVu
dHNbaV07Ci0KKyAgICBmb3IgKGF1dG8mIGZyYWdtZW50IDogbV9mcmFnbWVudHMpIHsKICAgICAg
ICAgQVNTRVJUKGZyYWdtZW50LmZpcnN0LmlzOEJpdCgpKTsKICAgICAgICAgQVNTRVJUKGZyYWdt
ZW50LnNlY29uZC5pczhCaXQoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUHVibGlj
VVJMTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9QdWJsaWNV
UkxNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Q
dWJsaWNVUkxNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAgKzU3LDEwIEBAIHZv
aWQgUHVibGljVVJMTWFuYWdlcjo6cmVnaXN0ZXJVUkwoU2VjdXIKIAogdm9pZCBQdWJsaWNVUkxN
YW5hZ2VyOjpyZXZva2UoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgZm9yIChSZWdpc3RyeVVSTE1h
cDo6aXRlcmF0b3IgaSA9IG1fcmVnaXN0cnlUb1VSTC5iZWdpbigpOyBpICE9IG1fcmVnaXN0cnlU
b1VSTC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT52YWx1ZS5jb250YWlucyh1cmwuc3Ry
aW5nKCkpKSB7Ci0gICAgICAgICAgICBpLT5rZXktPnVucmVnaXN0ZXJVUkwodXJsKTsKLSAgICAg
ICAgICAgIGktPnZhbHVlLnJlbW92ZSh1cmwuc3RyaW5nKCkpOworICAgIGZvciAoYXV0byYgcmVn
aXN0cnkgOiBtX3JlZ2lzdHJ5VG9VUkwpIHsKKyAgICAgICAgaWYgKHJlZ2lzdHJ5LnZhbHVlLmNv
bnRhaW5zKHVybC5zdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJ5LmtleS0+dW5yZWdp
c3RlclVSTCh1cmwpOworICAgICAgICAgICAgcmVnaXN0cnkudmFsdWUucmVtb3ZlKHVybC5zdHJp
bmcoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTcyLDkgKzcy
LDkgQEAgdm9pZCBQdWJsaWNVUkxNYW5hZ2VyOjpzdG9wKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9pc1N0b3BwZWQgPSB0cnVlOwotICAgIGZvciAoUmVnaXN0cnlVUkxNYXA6Oml0ZXJhdG9y
IGkgPSBtX3JlZ2lzdHJ5VG9VUkwuYmVnaW4oKTsgaSAhPSBtX3JlZ2lzdHJ5VG9VUkwuZW5kKCk7
ICsraSkgewotICAgICAgICBmb3IgKFVSTFNldDo6aXRlcmF0b3IgaiA9IGktPnZhbHVlLmJlZ2lu
KCk7IGogIT0gaS0+dmFsdWUuZW5kKCk7ICsraikKLSAgICAgICAgICAgIGktPmtleS0+dW5yZWdp
c3RlclVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaikpOworICAgIGZvciAoYXV0byYgcmVnaXN0
cnkgOiBtX3JlZ2lzdHJ5VG9VUkwpIHsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiByZWdpc3Ry
eS52YWx1ZSkKKyAgICAgICAgICAgIHJlZ2lzdHJ5LmtleS0+dW5yZWdpc3RlclVSTChVUkwoUGFy
c2VkVVJMU3RyaW5nLCB1cmwpKTsKICAgICB9CiAKICAgICBtX3JlZ2lzdHJ5VG9VUkwuY2xlYXIo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDIzICsxNjYsMjQgQEAgR0MzRHNpemVpcHRyIFdl
YkdMQnVmZmVyOjpieXRlTGVuZ3RoKCkgYwogCiBpbnQgV2ViR0xCdWZmZXI6OmdldENhY2hlZE1h
eEluZGV4KEdDM0RlbnVtIHR5cGUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZf
QVJSQVlfTEVOR1RIKG1fbWF4SW5kZXhDYWNoZSk7ICsraSkKLSAgICAgICAgaWYgKG1fbWF4SW5k
ZXhDYWNoZVtpXS50eXBlID09IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gbV9tYXhJbmRleENh
Y2hlW2ldLm1heEluZGV4OworICAgIGZvciAoYXV0byYgY2FjaGUgOiBtX21heEluZGV4Q2FjaGUp
IHsKKyAgICAgICAgaWYgKGNhY2hlLnR5cGUgPT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBj
YWNoZS5tYXhJbmRleDsKKyAgICB9CiAgICAgcmV0dXJuIC0xOwogfQogCiB2b2lkIFdlYkdMQnVm
ZmVyOjpzZXRDYWNoZWRNYXhJbmRleChHQzNEZW51bSB0eXBlLCBpbnQgdmFsdWUpCiB7Ci0gICAg
c2l6ZV90IG51bUVudHJpZXMgPSBXVEZfQVJSQVlfTEVOR1RIKG1fbWF4SW5kZXhDYWNoZSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FbnRyaWVzOyArK2kpCi0gICAgICAgIGlmICht
X21heEluZGV4Q2FjaGVbaV0udHlwZSA9PSB0eXBlKSB7Ci0gICAgICAgICAgICBtX21heEluZGV4
Q2FjaGVbaV0ubWF4SW5kZXggPSB2YWx1ZTsKKyAgICBmb3IgKGF1dG8mIGNhY2hlIDogbV9tYXhJ
bmRleENhY2hlKSB7CisgICAgICAgIGlmIChjYWNoZS50eXBlID09IHR5cGUpIHsKKyAgICAgICAg
ICAgIGNhY2hlLm1heEluZGV4ID0gdmFsdWU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKyAgICB9CiAgICAgbV9tYXhJbmRleENhY2hlW21fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnld
LnR5cGUgPSB0eXBlOwogICAgIG1fbWF4SW5kZXhDYWNoZVttX25leHRBdmFpbGFibGVDYWNoZUVu
dHJ5XS5tYXhJbmRleCA9IHZhbHVlOwotICAgIG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnkgPSAo
bV9uZXh0QXZhaWxhYmxlQ2FjaGVFbnRyeSArIDEpICUgbnVtRW50cmllczsKKyAgICBtX25leHRB
dmFpbGFibGVDYWNoZUVudHJ5ID0gKG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnkgKyAxKSAlIFdU
Rl9BUlJBWV9MRU5HVEgobV9tYXhJbmRleENhY2hlKTsKIH0KIAogdm9pZCBXZWJHTEJ1ZmZlcjo6
c2V0VGFyZ2V0KEdDM0RlbnVtIHRhcmdldCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsOCArOTAsOCBAQCB2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjpkZXRhY2hBbmRS
ZW1vdmVBCiAKIHZvaWQgV2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXAoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCiB7Ci0gICAgZm9yIChI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6aXRlcmF0b3IgaXQgPSBtX2NvbnRl
eHRzLmJlZ2luKCk7IGl0ICE9IG1fY29udGV4dHMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQp
LT5sb3NlQ29udGV4dEltcGwobW9kZSk7CisgICAgZm9yIChhdXRvJiBjb250ZXh0IDogbV9jb250
ZXh0cykKKyAgICAgICAgY29udGV4dC0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0
YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzMsOCArMTczLDggQEAgYm9vbCBXZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNX
ZWJHTFJlcQogICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKGRlcHRoKTsKICAgICBpZiAo
c3VwcG9ydHNEZXB0aFN0ZW5jaWwpCiAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUoZGVw
dGhTdGVuY2lsKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbG9ycy5zaXplKCk7ICsr
aSkKLSAgICAgICAgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShjb2xvcnNbaV0pOworICAgIGZvciAo
YXV0byYgY29sb3IgOiBjb2xvcnMpCisgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRleHR1cmUoY29s
b3IpOwogICAgIHJldHVybiBvazsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzEsMTAgKzM3MSwxMCBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFj
aG1lbnRGCiAgICAgYm9vbCBjaGVja01vcmUgPSB0cnVlOwogICAgIGRvIHsKICAgICAgICAgY2hl
Y2tNb3JlID0gZmFsc2U7Ci0gICAgICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGl0LT52
YWx1ZS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpIHsK
KyAgICAgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVudE9iamVjdCA9IGVudHJ5LnZh
bHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3QtPmlzU2hhcmVkT2Jq
ZWN0KGF0dGFjaG1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5
cGUgPSBpdC0+a2V5OworICAgICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0g
ZW50cnkua2V5OwogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3QtPnVuYXR0YWNoKGNv
bnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSwgYXR0YWNobWVudFR5cGUpOwogICAgICAgICAg
ICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50VHlw
ZSk7CiAgICAgICAgICAgICAgICAgY2hlY2tNb3JlID0gdHJ1ZTsKQEAgLTQyMyw5ICs0MjMsOSBA
QCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjCiAgICAgYm9vbCBoYXZl
RGVwdGggPSBmYWxzZTsKICAgICBib29sIGhhdmVTdGVuY2lsID0gZmFsc2U7CiAgICAgYm9vbCBo
YXZlRGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0gICAgZm9yIChBdHRhY2htZW50TWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5l
bmQoKTsgKytpdCkgewotICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+
dmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICghaXNBdHRhY2htZW50Q29tcGxldGUoYXR0YWNobWVu
dCwgaXQtPmtleSwgcmVhc29uKSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9hdHRhY2htZW50
cykgeworICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBlbnRyeS52YWx1ZS5n
ZXQoKTsKKyAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LCBlbnRy
eS5rZXksIHJlYXNvbikpCiAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgaWYgKCFhdHRhY2htZW50
LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBub3Qg
dmFsaWQiOwpAQCAtNDQxLDcgKzQ0MSw3IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmNo
ZWNrU3RhdHVzKGMKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBhbiB1bnN1
cHBvcnRlZCBmb3JtYXQiOwogICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KLSAgICAgICAgc3dp
dGNoIChpdC0+a2V5KSB7CisgICAgICAgIHN3aXRjaCAoZW50cnkua2V5KSB7CiAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBoYXZl
RGVwdGggPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00OTgsOCArNDk4LDggQEAgYm9v
bCBXZWJHTEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsQnVmZmVyKAogCiB2b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCiB7Ci0gICAgZm9yIChBdHRhY2htZW50TWFwOjppdGVyYXRv
ciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsg
KytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CisgICAgZm9y
IChhdXRvJiBhdHRhY2htZW50IDogbV9hdHRhY2htZW50cy52YWx1ZXMoKSkKKyAgICAgICAgYXR0
YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogCiAgICAgY29udGV4dDNkLT5kZWxldGVG
cmFtZWJ1ZmZlcihvYmplY3QpOwogfQpAQCAtNTA5LDkgKzUwOSw5IEBAIGJvb2wgV2ViR0xGcmFt
ZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG0KICAgICBBU1NFUlQob2JqZWN0KCkpOwogICAgIEdD
M0RiaXRmaWVsZCBtYXNrID0gMDsKIAotICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+a2V5OwotICAgICAg
ICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpIHsKKyAgICAgICAgR0MzRGVudW0gYXR0YWNo
bWVudFR5cGUgPSBlbnRyeS5rZXk7CisgICAgICAgIFdlYkdMQXR0YWNobWVudCogYXR0YWNobWVu
dCA9IGVudHJ5LnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzSW5pdGlh
bGl6ZWQoKSkKICAgICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJC
aXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgfQpAQCAtNjAwLDggKzYw
MCw4IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZHJhd0J1ZmZlcnMoY29uc3QKIHsKICAgICBt
X2RyYXdCdWZmZXJzID0gYnVmczsKICAgICBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnMucmVzaXplKG1f
ZHJhd0J1ZmZlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmlsdGVy
ZWREcmF3QnVmZmVycy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9maWx0ZXJlZERyYXdCdWZmZXJz
W2ldID0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7CisgICAgZm9yIChhdXRvJiBidWZmZXIgOiBt
X2ZpbHRlcmVkRHJhd0J1ZmZlcnMpCisgICAgICAgIGJ1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNE
OjpOT05FOwogICAgIGRyYXdCdWZmZXJzSWZOZWNlc3NhcnkodHJ1ZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCShyZXZpc2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAx
LDkgKzYwMSw5IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6On5XZWJHTFJlbmRlcmkKICAg
ICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7CiAgICAgbV9yZW5kZXJidWZmZXJCaW5k
aW5nID0gbnVsbHB0cjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmlu
ZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFw
QmluZGluZyA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiB0ZXh0dXJlVW5pdCA6IG1fdGV4dHVy
ZVVuaXRzKSB7CisgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRy
OworICAgICAgICB0ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwog
ICAgIH0KIAogICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBudWxscHRyOwpAQCAtMTUyMSwxMSArMTUy
MSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVRlCiB7CiAgICAg
aWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcpCi0gICAgICAg
ICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKLSAgICAg
ICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
KQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0g
bnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHRleHR1cmVVbml0IDogbV90ZXh0dXJlVW5pdHMpIHsK
KyAgICAgICAgaWYgKHRleHR1cmUgPT0gdGV4dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZykKKyAg
ICAgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAg
ICBpZiAodGV4dHVyZSA9PSB0ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAg
ICAgICAgICB0ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwogICAg
IH0KICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCiAgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0LmNwcAkocmV2aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDgg
KzY4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0OjpkZWxldGVPYmplYwogICAgIGlm
IChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKQogICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5
QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFZlcnRl
eEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbaV07CisgICAgZm9yIChh
dXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmliU3RhdGUpIHsKICAgICAgICAgaWYgKHN0YXRlLmJ1
ZmZlckJpbmRpbmcpCiAgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkRldGFjaGVk
KGNvbnRleHQzZCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAJKHJldmlzaW9uIDE5MDM0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3MSw3IEBAIHZvaWQgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6ZGVsZXRlT2IKICAgICBpZiAobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZl
cikKICAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0
M2QpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4
QXR0cmliU3RhdGVbaV07CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fdmVydGV4QXR0cmliU3Rh
dGUpIHsKICAgICAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcpCiAgICAgICAgICAgICBzdGF0
ZS5idWZmZXJCaW5kaW5nLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbWljSFRNTFRva2VuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQXRvbWljSFRNTFRva2VuLmgJKHJldmlzaW9uIDE5
MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tlbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsOCArMTg2LDcgQEAgaW5saW5lIHZvaWQgQXRvbWljSFRNTFRv
a2VuOjppbml0aWFsaXplQQogICAgICAgICByZXR1cm47CiAKICAgICBtX2F0dHJpYnV0ZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1
dGUgPSBhdHRyaWJ1dGVzW2ldOworICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogYXR0cmlidXRl
cykgewogICAgICAgICBpZiAoYXR0cmlidXRlLm5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc0LDggKzI3NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmli
dXQKICAgICBpZiAodG9rZW4tPmF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0
b2tlbi0+YXR0cmlidXRlcygpLmF0KGkpOworICAgIGZvciAoYXV0byYgdG9rZW5BdHRyaWJ1dGUg
OiB0b2tlbi0+YXR0cmlidXRlcygpKSB7CiAgICAgICAgIGlmICghZWxlbWVudC0+ZWxlbWVudERh
dGEoKSB8fCAhZWxlbWVudC0+ZmluZEF0dHJpYnV0ZUJ5TmFtZSh0b2tlbkF0dHJpYnV0ZS5uYW1l
KCkpKQogICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKHRva2VuQXR0cmlidXRlLm5h
bWUoKSwgdG9rZW5BdHRyaWJ1dGUudmFsdWUoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5j
cHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTMgKzE3MCw4
IEBAIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6ZW5zdXJlTm8KICAgICBWZWN0b3I8
SFRNTFN0YWNrSXRlbSo+IHJlbWFpbmluZ0NhbmRpZGF0ZXM7CiAgICAgcmVtYWluaW5nQ2FuZGlk
YXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbmRpZGF0ZXMuc2l6ZSgpKTsKIAotICAgIGNv
bnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzID0gbmV3SXRlbS0+YXR0cmlidXRlcygp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBjYW5kaWRhdGVzLnNpemUoKTsgKytqKSB7Ci0g
ICAgICAgICAgICBIVE1MU3RhY2tJdGVtKiBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2pdOwotCisg
ICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBuZXdJdGVtLT5hdHRyaWJ1dGVzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7CiAgICAgICAgICAgICAvLyBU
aGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBjaGVja2VkIGJ5IHRyeVRv
RW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5LgogICAgICAgICAgICAgQVNTRVJUKG5ld0l0
ZW0tPmF0dHJpYnV0ZXMoKS5zaXplKCkgPT0gY2FuZGlkYXRlLT5hdHRyaWJ1dGVzKCkuc2l6ZSgp
KTsKICAgICAgICAgICAgIEFTU0VSVChuZXdJdGVtLT5sb2NhbE5hbWUoKSA9PSBjYW5kaWRhdGUt
PmxvY2FsTmFtZSgpICYmIG5ld0l0ZW0tPm5hbWVzcGFjZVVSSSgpID09IGNhbmRpZGF0ZS0+bmFt
ZXNwYWNlVVJJKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxv
YWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsOSArMTAzLDkgQEAgcHVibGljOgogICAgICAgICBpZiAobV90YWdJZCA+PSBUYWdJZDo6VW5r
bm93bikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBmb3IgKEhUTUxUb2tlbjo6QXR0
cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRl
ciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm5hbWUpOwotICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0
ZVZhbHVlID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoaXRlci0+dmFsdWUpOwor
ICAgICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKKyAgICAgICAgICAg
IEF0b21pY1N0cmluZyBhdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZS5uYW1lKTsKKyAgICAgICAgICAg
IFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxl
KGF0dHJpYnV0ZS52YWx1ZSk7CiAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKGF0dHJpYnV0
ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAkocmV2aXNpb24gMTkwMzQzKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Nyw4ICsxOTcsOCBAQCBzdGF0aWMgYm9vbCBzZW1pY29sb25TZXBhcmF0ZWRWYWx1ZUNvbnRhCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVMaXN0OwogICAgIHZhbHVlLnNwbGl0KCc7JywgdmFs
dWVMaXN0KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQodmFsdWVMaXN0W2ldKSkKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVMaXN0KSB7CisgICAgICAgIGlmIChwcm90b2NvbElz
SmF2YVNjcmlwdCh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERp
c3RyaWJ1dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50RGlzdHJpYnV0b3IuY3BwCShyZXZpc2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCwxMyArNzgsMTEgQEAgdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGUoRWxlbQog
ICAgIG1fdmFsaWRpdHkgPSBWYWxpZDsKIAogICAgIGlmIChTaGFkb3dSb290KiByb290ID0gaG9z
dC0+c2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW5zZXJ0aW9u
UG9pbnQ+PiYgaW5zZXJ0aW9uUG9pbnRzID0gZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3Qp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluc2VydGlvblBvaW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgSW5zZXJ0aW9uUG9pbnQqIHBvaW50ID0gaW5zZXJ0aW9uUG9p
bnRzW2ldLmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIHBvaW50IDogZW5zdXJlSW5zZXJ0aW9u
UG9pbnRMaXN0KHJvb3QpKSB7CiAgICAgICAgICAgICBpZiAoIXBvaW50LT5pc0FjdGl2ZSgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBkaXN0cmlidXRlU2VsZWN0
aW9uc1RvKHBvaW50LCBob3N0KTsKKyAgICAgICAgICAgIGRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8o
cG9pbnQuZ2V0KCksIGhvc3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtOTUsMTAgKzkzLDkg
QEAgYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGUoRWxlbQogICAgIGJvb2wgbmVl
ZHNSZWF0dGFjaCA9IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5z
ZXJ0aW9uUG9pbnQuaXNFbXB0eSgpOwogCiAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBob3N0
LT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxJbnNlcnRpb25Q
b2ludD4+JiBpbnNlcnRpb25Qb2ludHMgPSBlbnN1cmVJbnNlcnRpb25Qb2ludExpc3Qocm9vdCk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5zZXJ0aW9uUG9pbnRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGZvciAoYXV0byYgcG9pbnQgOiBlbnN1cmVJbnNlcnRpb25Qb2ludExp
c3Qocm9vdCkpIHsKICAgICAgICAgICAgIG5lZWRzUmVhdHRhY2ggPSB0cnVlOwotICAgICAgICAg
ICAgaW5zZXJ0aW9uUG9pbnRzW2ldLT5jbGVhckRpc3RyaWJ1dGlvbigpOworICAgICAgICAgICAg
cG9pbnQtPmNsZWFyRGlzdHJpYnV0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAJKHJldmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQzLDkgKzc0Myw3IEBAIHZv
aWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3QKICAgICBSZWZQdHI8RWxlbWVu
dD4gb2ZmTWVudUl0ZW07CiAgICAgYm9vbCB0cmFja01lbnVJdGVtU2VsZWN0ZWQgPSBmYWxzZTsK
IAotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IG1fbWVudUl0ZW1zLnNpemUoKTsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiB0cmFja0l0ZW0gPSBt
X21lbnVJdGVtc1tpXTsKLQorICAgIGZvciAoYXV0byYgdHJhY2tJdGVtIDogbV9tZW51SXRlbXMp
IHsKICAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrOwogICAgICAgICBNZW51SXRl
bVRvVHJhY2tNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21lbnVUb1RyYWNrTWFwLmZpbmQodHJhY2tJ
dGVtLmdldCgpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9tZW51VG9UcmFja01hcC5lbmQoKSkK
QEAgLTgxMiw4ICs4MTAsNyBAQCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tM
aXN0CiAgICAgYXBwZW5kQ2hpbGQoV1RGOjptb3ZlKGNhcHRpb25zSGVhZGVyKSk7CiAgICAgUmVm
PEVsZW1lbnQ+IGNhcHRpb25zTWVudUxpc3QgPSBkb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQodWxU
YWcsIEFTU0VSVF9OT19FWENFUFRJT04pOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVu
Z3RoID0gdHJhY2tzRm9yTWVudS5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBS
ZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja3NGb3JNZW51W2ldOworICAgIGZvciAo
YXV0byYgdGV4dFRyYWNrIDogdHJhY2tzRm9yTWVudSkgewogICAgICAgICBSZWY8RWxlbWVudD4g
bWVudUl0ZW0gPSBkb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQobGlUYWcsIEFTU0VSVF9OT19FWENF
UFRJT04pOwogICAgICAgICBtZW51SXRlbS0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS5jcmVhdGVU
ZXh0Tm9kZShjYXB0aW9uUHJlZmVyZW5jZXMtPmRpc3BsYXlOYW1lRm9yVHJhY2sodGV4dFRyYWNr
LmdldCgpKSkpOwogICAgICAgICBjYXB0aW9uc01lbnVMaXN0LT5hcHBlbmRDaGlsZChtZW51SXRl
bS5jb3B5UmVmKCkpOwpAQCAtMTIyNCwxMCArMTIyMSw5IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWUKICAgICBmbG9hdCBzbWFsbGVzdERpbWVuc2lvbiA9IHN0ZDo6
bWluKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkuaGVpZ2h0KCksIG1fdmlkZW9EaXNwbGF5U2l6
ZS5zaXplKCkud2lkdGgoKSk7CiAgICAgZmxvYXQgZm9udFNjYWxlID0gZG9jdW1lbnQoKS5wYWdl
KCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCktPmNhcHRpb25Gb250U2l6ZVNjYWxlQW5k
SW1wb3J0YW5jZShtX2ZvbnRTaXplSXNJbXBvcnRhbnQpOwogICAgIG1fZm9udFNpemUgPSBscm91
bmRmKHNtYWxsZXN0RGltZW5zaW9uICogZm9udFNjYWxlKTsKLSAgICAKLSAgICBDdWVMaXN0IGFj
dGl2ZUN1ZXMgPSBtZWRpYUVsZW1lbnQtPmN1cnJlbnRseUFjdGl2ZUN1ZXMoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUN1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVGV4
dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWVzW2ldLmRhdGEoKTsKKworICAgIGZvciAoYXV0byYg
YWN0aXZlQ3VlIDogbWVkaWFFbGVtZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCkpIHsKKyAgICAg
ICAgVGV4dFRyYWNrQ3VlKiBjdWUgPSBhY3RpdmVDdWUuZGF0YSgpOwogICAgICAgICBpZiAoIWN1
ZS0+aXNSZW5kZXJhYmxlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHAJKHJldmlzaW9uIDE5MDM0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw4ICs3NCw4IEBAIEF1ZGlvVHJhY2sqIEF1ZGlvVHJhY2tMaXN0Ojpp
dGVtKHVuc2lnbmUKIAogQXVkaW9UcmFjayogQXVkaW9UcmFja0xpc3Q6OmdldFRyYWNrQnlJZChj
b25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQXVkaW9UcmFjayogdHJh
Y2sgPSB0b0F1ZGlvVHJhY2sobV9pbmJhbmRUcmFja3NbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0
byYgaW5iYW5kVHJhY2sgOiBtX2luYmFuZFRyYWNrcykgeworICAgICAgICBBdWRpb1RyYWNrKiB0
cmFjayA9IHRvQXVkaW9UcmFjayhpbmJhbmRUcmFjay5nZXQoKSk7CiAgICAgICAgIGlmICh0cmFj
ay0+aWQoKSA9PSBpZCkKICAgICAgICAgICAgIHJldHVybiB0cmFjazsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAkocmV2
aXNpb24gMTkwMzQzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRleHRU
cmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5ICsxMTAsOSBAQCB2b2lkIExvYWRhYmxl
VGV4dFRyYWNrOjpuZXdDdWVzQXZhaWxhYmxlCiAgICAgaWYgKCFtX2N1ZXMpCiAgICAgICAgIG1f
Y3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpOyAgICAKIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbmV3Q3Vlcy5zaXplKCk7ICsraSkgewotICAgICAgICBuZXdDdWVzW2ldLT5z
ZXRUcmFjayh0aGlzKTsKLSAgICAgICAgbV9jdWVzLT5hZGQobmV3Q3Vlc1tpXSk7CisgICAgZm9y
IChhdXRvJiBuZXdDdWUgOiBuZXdDdWVzKSB7CisgICAgICAgIG5ld0N1ZS0+c2V0VHJhY2sodGhp
cyk7CisgICAgICAgIG1fY3Vlcy0+YWRkKG5ld0N1ZSk7CiAgICAgfQogCiAgICAgaWYgKGNsaWVu
dCgpKQpAQCAtMTM2LDkgKzEzNiw5IEBAIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6Om5ld1JlZ2lv
bnNBdmFpbGEKICAgICBWZWN0b3I8UmVmUHRyPFZUVFJlZ2lvbj4+IG5ld1JlZ2lvbnM7CiAgICAg
bV9sb2FkZXItPmdldE5ld1JlZ2lvbnMobmV3UmVnaW9ucyk7CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG5ld1JlZ2lvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbmV3UmVnaW9uc1tp
XS0+c2V0VHJhY2sodGhpcyk7Ci0gICAgICAgIHJlZ2lvbnMoKS0+YWRkKG5ld1JlZ2lvbnNbaV0p
OworICAgIGZvciAoYXV0byYgbmV3UmVnaW9uIDogbmV3UmVnaW9ucykgeworICAgICAgICBuZXdS
ZWdpb24tPnNldFRyYWNrKHRoaXMpOworICAgICAgICByZWdpb25zKCktPmFkZChuZXdSZWdpb24p
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tD
dWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZUxpc3QuY3BwCShyZXZpc2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5
IEBAIFRleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlTGlzdDo6aXRlbSh1bnMKIAogVGV4dFRyYWNr
Q3VlKiBUZXh0VHJhY2tDdWVMaXN0OjpnZXRDdWVCeUlkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0
CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKG1fbGlzdFtpXS0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBtX2xp
c3RbaV0uZ2V0KCk7CisgICAgZm9yIChhdXRvJiBjdWUgOiBtX2xpc3QpIHsKKyAgICAgICAgaWYg
KGN1ZS0+aWQoKSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVybiBjdWUuZ2V0KCk7CiAgICAgfQog
ICAgIHJldHVybiAwOwogfQpAQCAtNjcsOCArNjcsNyBAQCBUZXh0VHJhY2tDdWVMaXN0KiBUZXh0
VHJhY2tDdWVMaXN0OjphY3RpCiAgICAgICAgIG1fYWN0aXZlQ3VlcyA9IGNyZWF0ZSgpOwogCiAg
ICAgbV9hY3RpdmVDdWVzLT5jbGVhcigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9s
aXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IG1f
bGlzdFtpXTsKKyAgICBmb3IgKGF1dG8mIGN1ZSA6IG1fbGlzdCkgewogICAgICAgICBpZiAoY3Vl
LT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgbV9hY3RpdmVDdWVzLT5hZGQoY3VlKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAJKHJl
dmlzaW9uIDE5MDM0MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDI5ICs3MiwyOSBAQCBpbnQgVGV4dFRyYWNrTGlz
dDo6Z2V0VHJhY2tJbmRleFJlbGF0aXZlCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSAiTGV0IG4gYmUg
dGhlIG51bWJlciBvZiB0ZXh0IHRyYWNrcyB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMgc2hvd2lu
ZyBhbmQgdGhhdCBhcmUgaW4gdGhlIG1lZGlhIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tz
IGJlZm9yZSB0cmFjay4iCiAgICAgaW50IHRyYWNrSW5kZXggPSAwOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KCF0b1RleHRUcmFjayhtX2VsZW1lbnRUcmFja3NbaV0uZ2V0KCkpLT5pc1JlbmRlcmVkKCkpCisg
ICAgZm9yIChhdXRvJiBlbGVtZW50VHJhY2sgOiBtX2VsZW1lbnRUcmFja3MpIHsKKyAgICAgICAg
aWYgKCF0b1RleHRUcmFjayhlbGVtZW50VHJhY2suZ2V0KCkpLT5pc1JlbmRlcmVkKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAobV9lbGVtZW50VHJhY2tzW2ldID09IHRl
eHRUcmFjaykKKyAgICAgICAgaWYgKGVsZW1lbnRUcmFjayA9PSB0ZXh0VHJhY2spCiAgICAgICAg
ICAgICByZXR1cm4gdHJhY2tJbmRleDsKICAgICAgICAgKyt0cmFja0luZGV4OwogICAgIH0KIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hZGRUcmFja1RyYWNrcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoIXRvVGV4dFRyYWNrKG1fYWRkVHJhY2tUcmFja3NbaV0uZ2V0KCkpLT5p
c1JlbmRlcmVkKCkpCisgICAgZm9yIChhdXRvJiBhZGRUcmFjayA6IG1fYWRkVHJhY2tUcmFja3Mp
IHsKKyAgICAgICAgaWYgKCF0b1RleHRUcmFjayhhZGRUcmFjay5nZXQoKSktPmlzUmVuZGVyZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtX2FkZFRyYWNrVHJhY2tz
W2ldID09IHRleHRUcmFjaykKKyAgICAgICAgaWYgKGFkZFRyYWNrID09IHRleHRUcmFjaykKICAg
ICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICArK3RyYWNrSW5kZXg7CiAgICAg
fQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luYmFuZFRyYWNrcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoIXRvVGV4dFRyYWNrKG1faW5iYW5kVHJhY2tzW2ldLmdldCgpKS0+
aXNSZW5kZXJlZCgpKQorICAgIGZvciAoYXV0byYgaW5iYW5kVHJhY2sgOiBtX2luYmFuZFRyYWNr
cykgeworICAgICAgICBpZiAoIXRvVGV4dFRyYWNrKGluYmFuZFRyYWNrLmdldCgpKS0+aXNSZW5k
ZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG1faW5iYW5kVHJh
Y2tzW2ldID09IHRleHRUcmFjaykKKyAgICAgICAgaWYgKGluYmFuZFRyYWNrID09IHRleHRUcmFj
aykKICAgICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICArK3RyYWNrSW5kZXg7
CiAgICAgfQpAQCAtMTQ5LDE0ICsxNDksMTQgQEAgdm9pZCBUZXh0VHJhY2tMaXN0OjppbnZhbGlk
YXRlVHJhY2tJbmRleAogCiAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6
OlRyYWNrRWxlbWVudCkgewogICAgICAgICB0cmFja3MgPSAmbV9lbGVtZW50VHJhY2tzOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICB0b1RleHRUcmFjayhtX2FkZFRyYWNrVHJhY2tzW2ldLmdldCgpKS0+aW52
YWxpZGF0ZVRyYWNrSW5kZXgoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2lu
YmFuZFRyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHRvVGV4dFRyYWNrKG1faW5iYW5k
VHJhY2tzW2ldLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgZm9yIChh
dXRvJiBhZGRUcmFjayA6IG1fYWRkVHJhY2tUcmFja3MpCisgICAgICAgICAgICB0b1RleHRUcmFj
ayhhZGRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgIGZvciAo
YXV0byYgaW5iYW5kVHJhY2sgOiBtX2luYmFuZFRyYWNrcykKKyAgICAgICAgICAgIHRvVGV4dFRy
YWNrKGluYmFuZFRyYWNrLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKICAgICB9IGVs
c2UgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkFkZFRyYWNrKSB7CiAgICAg
ICAgIHRyYWNrcyA9ICZtX2FkZFRyYWNrVHJhY2tzOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1faW5iYW5kVHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdG9UZXh0VHJh
Y2sobV9pbmJhbmRUcmFja3NbaV0uZ2V0KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOworICAg
ICAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9pbmJhbmRUcmFja3MpCisgICAgICAgICAg
ICB0b1RleHRUcmFjayhpbmJhbmRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7
CiAgICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJhbmQp
CiAgICAgICAgIHRyYWNrcyA9ICZtX2luYmFuZFRyYWNrczsKICAgICBlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAJKHJldmlzaW9uIDE5MDM0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1OSw4ICsxNTksNyBAQCB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxl
Q2hhbmdlRXZlbnQoCiAKIGJvb2wgVHJhY2tMaXN0QmFzZTo6aXNBbnlUcmFja0VuYWJsZWQoKSBj
b25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgVHJhY2tCYXNlKiB0cmFjayA9IG1faW5iYW5kVHJhY2tzW2ldLmdl
dCgpOworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2luYmFuZFRyYWNrcykgewogICAgICAgICBp
ZiAodHJhY2stPmVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCShyZXZp
c2lvbiAxOTAzNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCBWaWRlb1RyYWNrKiBWaWRlb1Ry
YWNrTGlzdDo6aXRlbSh1bnNpZ25lCiAKIFZpZGVvVHJhY2sqIFZpZGVvVHJhY2tMaXN0OjpnZXRU
cmFja0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgVmlkZW9UcmFjayogdHJhY2sg
PSB0b1ZpZGVvVHJhY2sobV9pbmJhbmRUcmFja3NbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0byYg
aW5iYW5kVHJhY2tzIDogbV9pbmJhbmRUcmFja3MpIHsKKyAgICAgICAgVmlkZW9UcmFjayogdHJh
Y2sgPSB0b1ZpZGVvVHJhY2soaW5iYW5kVHJhY2tzLmdldCgpKTsKICAgICAgICAgaWYgKHRyYWNr
LT5pZCgpID09IGlkKQogICAgICAgICAgICAgcmV0dXJuIHRyYWNrOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262320</attachid>
            <date>2015-10-02 00:18:31 -0700</date>
            <delta_ts>2015-10-06 06:31:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149662-20151002161802.patch</filename>
            <type>text/plain</type>
            <size>72931</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBAQAorMjAxNS0xMC0wMSAgSHVuc2Vv
cCBKZW9uZyAgPGhzODUuamVvbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgVXNlIG1vZGVybiBm
b3ItbG9vcHMgaW4gV2ViQ29yZS9odG1sLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEpOgorICAgICAgICAqIGh0bWwvRW1haWxJbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW1haWxJbnB1dFR5cGU6OnR5cGVNaXNtYXRj
aEZvcik6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMpOgorICAgICAgICAqIGh0bWwv
Rm9ybUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xTdGF0ZTo6
c2VyaWFsaXplVG8pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xTdGF0ZTo6ZGVzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2F2ZWRGb3JtU3RhdGU6OnNlcmlhbGl6ZVRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlNhdmVkRm9ybVN0YXRlOjpnZXRSZWZlcmVuY2VkRmlsZVBhdGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sbGVyOjpjcmVhdGVTYXZlZEZvcm1TdGF0
ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRzU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUNvbnRyb2xsZXI6OnJlc3RvcmVDb250cm9sU3Rh
dGVJbik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQ29udHJvbGxlcjo6Z2V0UmVmZXJlbmNlZEZp
bGVQYXRocyk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpoYXNOb25FbXB0eUJveCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxDYW52
YXNFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpub3RpZnlP
YnNlcnZlcnNDYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnRz
SW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6Omxlbmd0aCk6CisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmaXJzdE5hbWVkSXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1
Ym1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJv
bSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6Omxlbmd0aCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpnZXRUZXh0RmllbGRWYWx1ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OmRlZmF1bHRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpj
aGVja0ludmFsaWRDb250cm9sc0FuZENvbGxlY3RVbmhhbmRsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGcm9tUGFzdE5hbWVzTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKToK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VBY2NlcHRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxLZXlnZW5FbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFHcm91cCk6CisgICAgICAgICogaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVu
dDo6aW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNl
bGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2Vs
ZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXREZWZh
dWx0VmFsdWUpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnBvcHVsYXRlSW5wdXRUeXBlRmFjdG9yeU1hcCk6CisgICAgICAgICogaHRtbC9NZWRpYUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoTWVkaWFDb250cm9sbGVyOjpkdXJhdGlvbik6CisgICAg
ICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKE1lZGlhQ29u
dHJvbGxlcjo6cGxheSk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldFBsYXliYWNrUmF0
ZSk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldFZvbHVtZSk6CisgICAgICAgIChNZWRp
YUNvbnRyb2xsZXI6OnNldE11dGVkKToKKyAgICAgICAgKHBsYXliYWNrU3RhdGVXYWl0aW5nKToK
KyAgICAgICAgKE1lZGlhQ29udHJvbGxlcjo6dXBkYXRlTWVkaWFFbGVtZW50cyk6CisgICAgICAg
IChNZWRpYUNvbnRyb2xsZXI6OmJyaW5nRWxlbWVudFVwVG9TcGVlZCk6CisgICAgICAgIChNZWRp
YUNvbnRyb2xsZXI6OmlzQmxvY2tlZCk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6Omhhc0Vu
ZGVkKToKKyAgICAgICAgKE1lZGlhQ29udHJvbGxlcjo6YXN5bmNFdmVudFRpbWVyRmlyZWQpOgor
ICAgICAgICAoTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXJGaXJlZCk6CisgICAg
ICAgIChNZWRpYUNvbnRyb2xsZXI6Omhhc0F1ZGlvKToKKyAgICAgICAgKE1lZGlhQ29udHJvbGxl
cjo6aGFzVmlkZW8pOgorICAgICAgICAoTWVkaWFDb250cm9sbGVyOjpoYXNDbG9zZWRDYXB0aW9u
cyk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZSk6
CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OnN1cHBvcnRzU2Nhbm5pbmcpOgorICAgICAgICAo
TWVkaWFDb250cm9sbGVyOjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChNZWRpYUNvbnRyb2xs
ZXI6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChNZWRpYUNvbnRyb2xsZXI6OmNhblBsYXkpOgor
ICAgICAgICAoTWVkaWFDb250cm9sbGVyOjppc0xpdmVTdHJlYW0pOgorICAgICAgICAoTWVkaWFD
b250cm9sbGVyOjpoYXNDdXJyZW50U3JjKToKKyAgICAgICAgKE1lZGlhQ29udHJvbGxlcjo6cmV0
dXJuVG9SZWFsdGltZSk6CisgICAgICAgICogaHRtbC9NZWRpYUZyYWdtZW50VVJJUGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRnJhZ21lbnRVUklQYXJzZXI6OnBhcnNlVGltZUZy
YWdtZW50KToKKyAgICAgICAgKiBodG1sL1B1YmxpY1VSTE1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UHVibGljVVJMTWFuYWdlcjo6cmV2b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1
YmxpY1VSTE1hbmFnZXI6OnN0b3ApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpnZXRDYWNoZWRNYXhJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6c2V0Q2FjaGVkTWF4SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OnNldFRhcmdldCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250
ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RHJhd0J1ZmZlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEcmF3QnVmZmVyczo6c2F0
aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVi
dWZmZXI6OmRlbGV0ZU9iamVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1
ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6OmRyYXdCdWZmZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6On5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlT2JqZWN0SW1wbCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21p
Y0hUTUxUb2tlbjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fya0NvbmRpdGlv
bik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJvY2Vz
c0F0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2VtaWNvbG9uU2VwYXJhdGVkVmFsdWVDb250YWluc0phdmFTY3JpcHRV
UkwpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVt
ZW50OjpyZWJ1aWxkVHJhY2tMaXN0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRhdGVBY3RpdmVDdWVzRm9udFNpemUpOgor
ICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwOgorICAgICAgICAoQXVkaW9U
cmFja0xpc3Q6OmdldFRyYWNrQnlJZCk6CisgICAgICAgICogaHRtbC90cmFjay9Mb2FkYWJsZVRl
eHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVRleHRUcmFjazo6bmV3Q3Vl
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkYWJsZVRleHRUcmFjazo6bmV3UmVn
aW9uc0F2YWlsYWJsZSk6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q6OmdldEN1ZUJ5SWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdDo6YWN0aXZlQ3Vlcyk6CisgICAgICAgICog
aHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcDoKKyAgICAgICAgKFRleHRUcmFja0xpc3Q6Omdl
dFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MpOgorICAgICAgICAoVGV4dFRyYWNr
TGlzdDo6aW52YWxpZGF0ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2spOgorICAgICAgICAqIGh0bWwv
dHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6CisgICAgICAgIChUcmFja0xpc3RCYXNlOjppc0FueVRy
YWNrRW5hYmxlZCk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHA6Cisg
ICAgICAgIChWaWRlb1RyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKToKKwogMjAxNS0xMC0wMSAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbG91dCByMTkwNDQ2IGZv
ciB0aGUgbW9tZW50LiBJdCBicm9rZSB0aGUgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAkocmV2aXNpb24gMTkwNDUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9E
T01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nyw5IEBAIERPTUZvcm1E
YXRhOjpET01Gb3JtRGF0YShIVE1MRm9ybUVsZW1lbnQKICAgICBpZiAoIWZvcm0pCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5hc3NvY2lhdGVk
RWxlbWVudHMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQm
IGVsZW1lbnQgPSAqZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKClbaV07Ci0gICAgICAgIGlmICgh
ZWxlbWVudC5hc0hUTUxFbGVtZW50KCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCi0gICAgICAg
ICAgICBlbGVtZW50LmFwcGVuZEZvcm1EYXRhKCp0aGlzLCB0cnVlKTsKKyAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSkgeworICAgICAgICBpZiAoIWVs
ZW1lbnQtPmFzSFRNTEVsZW1lbnQoKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKKyAgICAgICAg
ICAgIGVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKCp0aGlzLCB0cnVlKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxOTA0NTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0VtYWlsSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjUsOCArNjUsOCBAQCBib29sIEVtYWlsSW5wdXRUeXBlOjp0eXBlTWlzbWF0Y2hGb3Io
Y29uCiAgICAgICAgIHJldHVybiAhaXNWYWxpZEVtYWlsQWRkcmVzcyh2YWx1ZSk7CiAgICAgVmVj
dG9yPFN0cmluZz4gYWRkcmVzc2VzOwogICAgIHZhbHVlLnNwbGl0KCcsJywgdHJ1ZSwgYWRkcmVz
c2VzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWRkcmVzc2VzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmICghaXNWYWxpZEVtYWlsQWRkcmVzcyhzdHJpcExlYWRpbmdBbmRUcmFp
bGluZ0hUTUxTcGFjZXMoYWRkcmVzc2VzW2ldKSkpCisgICAgZm9yIChhdXRvJiBhZGRyZXNzIDog
YWRkcmVzc2VzKSB7CisgICAgICAgIGlmICghaXNWYWxpZEVtYWlsQWRkcmVzcyhzdHJpcExlYWRp
bmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoYWRkcmVzcykpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
RmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9GaWxl
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTkwNDUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9G
aWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDggKzM5OSw4IEBAIGJvb2wg
RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcygKICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dCA9ICZlbGVtZW50KCk7CiAKICAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4g
ZmlsZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhdGhzLnNpemUoKTsgKytpKQot
ICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29zZXJGaWxlSW5mbyhwYXRoc1tpXSkpOworICAg
IGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKQorICAgICAgICBmaWxlcy5hcHBlbmQoRmlsZUNob29z
ZXJGaWxlSW5mbyhwYXRoKSk7CiAKICAgICBpZiAoaW5wdXQtPmZhc3RIYXNBdHRyaWJ1dGUobXVs
dGlwbGVBdHRyKSkKICAgICAgICAgZmlsZXNDaG9zZW4oZmlsZXMpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1
NSw4IEBAIHZvaWQgRm9ybUNvbnRyb2xTdGF0ZTo6c2VyaWFsaXplVG8oVmVjdG8KIHsKICAgICBB
U1NFUlQoIWlzRmFpbHVyZSgpKTsKICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIobV92YWx1ZXMuc2l6ZSgpKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhbHVl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKG1fdmFsdWVzW2ldLmlz
TnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IG1fdmFsdWVzW2ldKTsKKyAgICBmb3IgKGF1dG8mIHZh
bHVlIDogbV92YWx1ZXMpCisgICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZCh2YWx1ZS5pc051bGwo
KSA/IGVtcHR5U3RyaW5nKCkgOiB2YWx1ZSk7CiB9CiAKIEZvcm1Db250cm9sU3RhdGUgRm9ybUNv
bnRyb2xTdGF0ZTo6ZGVzZXJpYWxpemUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9y
LCBzaXplX3QmIGluZGV4KQpAQCAtMjIyLDEzICsyMjIsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPFNh
dmVkRm9ybVN0YXRlPiBTYXZlZEZvcgogdm9pZCBTYXZlZEZvcm1TdGF0ZTo6c2VyaWFsaXplVG8o
VmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKSBjb25zdAogewogICAgIHN0YXRlVmVjdG9yLmFw
cGVuZChTdHJpbmc6Om51bWJlcihtX2NvbnRyb2xTdGF0ZUNvdW50KSk7Ci0gICAgZm9yIChGb3Jt
RWxlbWVudFN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxl
bWVudHMuYmVnaW4oKTsgaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKTsgKytp
dCkgewotICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gaXQtPmtleTsKLSAgICAg
ICAgY29uc3QgRGVxdWU8Rm9ybUNvbnRyb2xTdGF0ZT4mIHF1ZXVlID0gaXQtPnZhbHVlOwotICAg
ICAgICBmb3IgKERlcXVlPEZvcm1Db250cm9sU3RhdGU+Ojpjb25zdF9pdGVyYXRvciBxdWVJdGVy
YXRvciA9IHF1ZXVlLmJlZ2luKCk7IHF1ZUl0ZXJhdG9yICE9IHF1ZXVlLmVuZCgpOyArK3F1ZUl0
ZXJhdG9yKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9zdGF0ZUZvck5ld0Zvcm1FbGVt
ZW50cykgeworICAgICAgICBjb25zdCBGb3JtRWxlbWVudEtleSYga2V5ID0gZWxlbWVudC5rZXk7
CisgICAgICAgIGZvciAoYXV0byYgc3RhdGUgOiBlbGVtZW50LnZhbHVlKSB7CiAgICAgICAgICAg
ICBzdGF0ZVZlY3Rvci5hcHBlbmQoa2V5Lm5hbWUoKSk7CiAgICAgICAgICAgICBzdGF0ZVZlY3Rv
ci5hcHBlbmQoa2V5LnR5cGUoKSk7Ci0gICAgICAgICAgICBxdWVJdGVyYXRvci0+c2VyaWFsaXpl
VG8oc3RhdGVWZWN0b3IpOworICAgICAgICAgICAgc3RhdGUuc2VyaWFsaXplVG8oc3RhdGVWZWN0
b3IpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjY1LDE1ICsyNjQsMTIgQEAgRm9ybUNvbnRy
b2xTdGF0ZSBTYXZlZEZvcm1TdGF0ZTo6dGFrZUNvbgogVmVjdG9yPFN0cmluZz4gU2F2ZWRGb3Jt
U3RhdGU6OmdldFJlZmVyZW5jZWRGaWxlUGF0aHMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJp
bmc+IHRvUmV0dXJuOwotICAgIGZvciAoRm9ybUVsZW1lbnRTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fc3RhdGVG
b3JOZXdGb3JtRWxlbWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgY29uc3QgRm9ybUVsZW1l
bnRLZXkmIGtleSA9IGl0LT5rZXk7Ci0gICAgICAgIGlmICghZXF1YWwoa2V5LnR5cGUoKSwgImZp
bGUiLCA0KSkKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzKSB7CisgICAgICAgIGlmICghZXF1YWwoZWxlbWVudC5rZXkudHlwZSgpLCAiZmlsZSIsIDQp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IERlcXVlPEZvcm1Db250cm9s
U3RhdGU+JiBxdWV1ZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgZm9yIChEZXF1ZTxGb3JtQ29udHJv
bFN0YXRlPjo6Y29uc3RfaXRlcmF0b3IgcXVlSXRlcmF0b3IgPSBxdWV1ZS5iZWdpbigpOyBxdWVJ
dGVyYXRvciAhPSBxdWV1ZS5lbmQoKTsgKytxdWVJdGVyYXRvcikgewotICAgICAgICAgICAgY29u
c3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBzZWxlY3RlZEZpbGVzID0gSFRNTElucHV0
RWxlbWVudDo6ZmlsZXNGcm9tRmlsZUlucHV0Rm9ybUNvbnRyb2xTdGF0ZSgqcXVlSXRlcmF0b3Ip
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWxlY3RlZEZpbGVzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgICAgIHRvUmV0dXJuLmFwcGVuZChzZWxlY3RlZEZpbGVzW2ld
LnBhdGgpOworICAgICAgICBmb3IgKGF1dG8mIHN0YXRlIDogZWxlbWVudC52YWx1ZSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogSFRNTElucHV0RWxlbWVudDo6ZmlsZXNGcm9tRmls
ZUlucHV0Rm9ybUNvbnRyb2xTdGF0ZShzdGF0ZSkpCisgICAgICAgICAgICAgICAgdG9SZXR1cm4u
YXBwZW5kKGZpbGUucGF0aCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRvUmV0dXJu
OwpAQCAtMzk4LDggKzM5NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb3JtQ29udHJvbGxlcjo6U2F2
ZWRGb3IKIHsKICAgICBGb3JtS2V5R2VuZXJhdG9yIGtleUdlbmVyYXRvcjsKICAgICBhdXRvIHN0
YXRlTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxTYXZlZEZvcm1TdGF0ZU1hcD4oKTsKLSAgICBmb3Ig
KEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29udHJvbExpc3Qu
YmVnaW4oKTsgaXQgIT0gY29udHJvbExpc3QuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSogY29udHJvbCA9IGl0LT5nZXQoKTsKKyAgICBmb3Ig
KGF1dG8mIGNvbnRyb2wgOiBjb250cm9sTGlzdCkgewogICAgICAgICBpZiAoIWNvbnRyb2wtPnNo
b3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGF1dG8mIGZvcm1TdGF0ZSA9IHN0YXRlTWFwLT5hZGQoa2V5R2VuZXJhdG9y
LmZvcm1LZXkoKmNvbnRyb2wpLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwpAQCAt
NDE2LDkgKzQxMSw5IEBAIFZlY3RvcjxTdHJpbmc+IEZvcm1Db250cm9sbGVyOjpmb3JtRWxlbWUK
ICAgICBWZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKICAgICBzdGF0ZVZlY3Rvci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDQpOwogICAg
IHN0YXRlVmVjdG9yLmFwcGVuZChmb3JtU3RhdGVTaWduYXR1cmUoKSk7Ci0gICAgZm9yIChTYXZl
ZEZvcm1TdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZU1hcC0+YmVnaW4oKTsgaXQg
IT0gc3RhdGVNYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHN0YXRlVmVjdG9yLmFwcGVuZChp
dC0+a2V5LmdldCgpKTsKLSAgICAgICAgaXQtPnZhbHVlLT5zZXJpYWxpemVUbyhzdGF0ZVZlY3Rv
cik7CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6ICpzdGF0ZU1hcCkgeworICAgICAgICBzdGF0ZVZl
Y3Rvci5hcHBlbmQoc3RhdGUua2V5LmdldCgpKTsKKyAgICAgICAgc3RhdGUudmFsdWUtPnNlcmlh
bGl6ZVRvKHN0YXRlVmVjdG9yKTsKICAgICB9CiAgICAgYm9vbCBoYXNPbmx5U2lnbmF0dXJlID0g
c3RhdGVWZWN0b3Iuc2l6ZSgpID09IDE7CiAgICAgaWYgKGhhc09ubHlTaWduYXR1cmUpCkBAIC00
ODksMTEgKzQ4NCwxMCBAQCB2b2lkIEZvcm1Db250cm9sbGVyOjpyZXN0b3JlQ29udHJvbFN0YXRl
CiAKIHZvaWQgRm9ybUNvbnRyb2xsZXI6OnJlc3RvcmVDb250cm9sU3RhdGVJbihIVE1MRm9ybUVs
ZW1lbnQmIGZvcm0pCiB7Ci0gICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+
JiBlbGVtZW50cyA9IGZvcm0uYXNzb2NpYXRlZEVsZW1lbnRzKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWVsZW1lbnRz
W2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpKQorICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGZvcm0uYXNzb2NpYXRlZEVsZW1lbnRzKCkpIHsKKyAgICAgICAgaWYgKCFlbGVtZW50
LT5pc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGNvbnRyb2wgPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKj4oZWxlbWVudHNbaV0pOwor
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiBjb250cm9sID0gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+KGVsZW1lbnQpOwogICAgICAg
ICBpZiAoIWNvbnRyb2wtPnNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChvd25lckZvcm1Gb3JTdGF0ZSgqY29u
dHJvbCkgIT0gJmZvcm0pCkBAIC01MDksOCArNTAzLDggQEAgVmVjdG9yPFN0cmluZz4gRm9ybUNv
bnRyb2xsZXI6OmdldFJlZmVyZQogICAgIFZlY3RvcjxTdHJpbmc+IHRvUmV0dXJuOwogICAgIFNh
dmVkRm9ybVN0YXRlTWFwIG1hcDsKICAgICBmb3JtU3RhdGVzRnJvbVN0YXRlVmVjdG9yKHN0YXRl
VmVjdG9yLCBtYXApOwotICAgIGZvciAoU2F2ZWRGb3JtU3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICB0b1JldHVybi5hcHBlbmRWZWN0b3IoaXQtPnZhbHVlLT5nZXRSZWZlcmVuY2VkRmlsZVBh
dGhzKCkpOworICAgIGZvciAoYXV0byYgc3RhdGUgOiBtYXAudmFsdWVzKCkpCisgICAgICAgIHRv
UmV0dXJuLmFwcGVuZFZlY3RvcihzdGF0ZS0+Z2V0UmVmZXJlbmNlZEZpbGVQYXRocygpKTsKICAg
ICByZXR1cm4gdG9SZXR1cm47CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSw4IEBA
IHN0YXRpYyBib29sIGhhc05vbkVtcHR5Qm94KFJlbmRlckJveE1vZGUKICAgICAvLyBwYXNzIGlu
IDAsMCBmb3IgdGhlIGxheW91dCBwb2ludCBpbnN0ZWFkIG9mIGNhbGxpbmcgbG9jYWxUb0Fic29s
dXRlPwogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKICAgICByZW5kZXJlci0+YWJzb2x1dGVS
ZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUo
KSkpOwotICAgIHNpemVfdCBzaXplID0gcmVjdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICghcmVjdHNbaV0uaXNFbXB0eSgpKQor
ICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKSB7CisgICAgICAgIGlmICghcmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksOCArOTksOCBAQCBSZWY8SFRNTENhbnZhc0VsZW1lbnQ+IEhUTUxDYW52YXNFbGVtZW50CiAK
IEhUTUxDYW52YXNFbGVtZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQoKQogewotICAgIGZvciAoYXV0
byBpdCA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCksIGVuZCA9IG1fb2JzZXJ2ZXJzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5jYW52YXNEZXN0cm95ZWQoKnRoaXMpOworICAg
IGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXItPmNh
bnZhc0Rlc3Ryb3llZCgqdGhpcyk7CiAKICAgICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1
cmUgdGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1ZmZlci4KIH0KQEAgLTI4NCw4ICsy
ODQsOCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0IEZsCiAKIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6Om5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGZvciAoYXV0byBpdCA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCks
IGVuZCA9IG1fb2JzZXJ2ZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQp
LT5jYW52YXNDaGFuZ2VkKCp0aGlzLCByZWN0KTsKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDog
bV9vYnNlcnZlcnMpCisgICAgICAgIG9ic2VydmVyLT5jYW52YXNDaGFuZ2VkKCp0aGlzLCByZWN0
KTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQpAQCAtMzQ0LDggKzM0NCw4
IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGZvciAoYXV0byBpdCA9IG1fb2JzZXJ2ZXJzLmJlZ2luKCksIGVuZCA9IG1fb2JzZXJ2ZXJz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5jYW52YXNSZXNpemVkKCp0
aGlzKTsKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCisgICAgICAgIG9i
c2VydmVyLT5jYW52YXNSZXNpemVkKCp0aGlzKTsKIH0KIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVu
dDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Myw4ICsxOTMsOCBAQCB1bnNpZ25lZCBIVE1MRmllbGRTZXRFbGVtZW50OjpsZW5ndGgoKSBj
CiB7CiAgICAgcmVmcmVzaEVsZW1lbnRzSWZOZWVkZWQoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlzRW51
bWVyYXRhYmxlKCkpCisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVu
dHMpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkpCiAgICAgICAgICAg
ICArK2xlbmd0aDsKICAgICB9CiAgICAgcmV0dXJuIGxlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE5ICsxMDMsMTggQEAgc3RhdGljIEhUTUxF
bGVtZW50KiBmaXJzdE5hbWVkSXRlbShjb25zdAogewogICAgIEFTU0VSVChhdHRyTmFtZSA9PSBp
ZEF0dHIgfHwgYXR0ck5hbWUgPT0gbmFtZUF0dHIpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQm
IGVsZW1lbnQgPSBlbGVtZW50c0FycmF5W2ldLT5hc0hUTUxFbGVtZW50KCk7Ci0gICAgICAgIGlm
IChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpICYmIGVsZW1lbnQuZmFzdEdldEF0
dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZWxlbWVu
dHNBcnJheSkgeworICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9IGVudHJ5LT5hc0hUTUxF
bGVtZW50KCk7CisgICAgICAgIGlmIChlbnRyeS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlbGVtZW50
LmZhc3RHZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpCiAgICAgICAgICAgICByZXR1cm4g
JmVsZW1lbnQ7CiAgICAgfQogCiAgICAgaWYgKCFpbWFnZUVsZW1lbnRzQXJyYXkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltYWdlRWxlbWVudHNB
cnJheS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCA9
ICooKmltYWdlRWxlbWVudHNBcnJheSlbaV07Ci0gICAgICAgIGlmIChlbGVtZW50LmZhc3RHZXRB
dHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gJmVsZW1lbnQ7
CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogKmltYWdlRWxlbWVudHNBcnJheSkgeworICAgICAg
ICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkKKyAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50OwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTkwNDUy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NiwxMCArODYsMTAgQEAgSFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50
KCkKICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKQogICAgICAgICBkb2N1bWVudCgpLnVu
cmVnaXN0ZXJGb3JQYWdlQ2FjaGVTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+Zm9ybVdpbGxCZURlc3Ryb3llZCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1faW1hZ2VFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKKyAgICBmb3IgKGF1dG8m
IGFzc29jaWF0ZWRFbGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpCisgICAgICAgIGFzc29j
aWF0ZWRFbGVtZW50LT5mb3JtV2lsbEJlRGVzdHJveWVkKCk7CisgICAgZm9yIChhdXRvJiBpbWFn
ZUVsZW1lbnQgOiBtX2ltYWdlRWxlbWVudHMpCisgICAgICAgIGltYWdlRWxlbWVudC0+bV9mb3Jt
ID0gbnVsbHB0cjsKIH0KIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1Xb3VsZEhhdmVTZWN1
cmVTdWJtaXNzaW9uKGNvbnN0IFN0cmluZyYgdXJsKQpAQCAtMTQ3LDggKzE0Nyw4IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWkKIHsKICAgICBOb2RlKiByb290ID0g
ZmluZFJvb3QodGhpcyk7CiAgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+IGFzc29j
aWF0ZWRFbGVtZW50cyhtX2Fzc29jaWF0ZWRFbGVtZW50cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgYXNzb2Np
YXRlZEVsZW1lbnRzW2ldLT5mb3JtUmVtb3ZlZEZyb21UcmVlKHJvb3QpOworICAgIGZvciAoYXV0
byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBhc3NvY2lhdGVkRWxlbWVudHMpCisgICAgICAgIGFzc29j
aWF0ZWRFbGVtZW50LT5mb3JtUmVtb3ZlZEZyb21UcmVlKHJvb3QpOwogICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiB9CiAKQEAgLTE2NSw5ICsxNjUsMTAgQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmhhbmRsZUxvY2FsRXZlbnRzKAogdW5zaWduZWQgSFRNTEZv
cm1FbGVtZW50OjpsZW5ndGgoKSBjb25zdAogewogICAgIHVuc2lnbmVkIGxlbiA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytp
KQotICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlzRW51bWVyYXRhYmxlKCkp
CisgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6IG1fYXNzb2NpYXRlZEVsZW1lbnRz
KSB7CisgICAgICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFibGUoKSkKICAg
ICAgICAgICAgICsrbGVuOworICAgIH0KICAgICByZXR1cm4gbGVuOwogfQogCkBAIC0xNzksOCAr
MTgwLDcgQEAgTm9kZSogSFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnbmVkIGluZAogdm9pZCBI
VE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50LCBib29sIGZyb21J
bXBsaWNpdFN1Ym1pc3Npb25UcmlnZ2VyKQogewogICAgIHVuc2lnbmVkIHN1Ym1pc3Npb25Ucmln
Z2VyQ291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRF
bGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGZv
cm1Bc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgIGZvciAo
YXV0byYgZm9ybUFzc29jaWF0ZWRFbGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpIHsKICAg
ICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZm9ybUFzc29jaWF0ZWRFbGVt
ZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50JiBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpmb3Jt
QXNzb2NpYXRlZEVsZW1lbnQpOwpAQCAtMjIxLDkgKzIyMSw5IEBAIGJvb2wgSFRNTEZvcm1FbGVt
ZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICBpZiAoc3VibWl0RWxlbWVudCAmJiBzdWJtaXRF
bGVtZW50LT5mb3JtTm9WYWxpZGF0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVs
ZW1lbnRzW2ldKSkKLSAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkuaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgp
OworICAgIGZvciAoYXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29jaWF0ZWRFbGVtZW50
cykgeworICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmFzc29jaWF0ZWRF
bGVtZW50KSkKKyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCph
c3NvY2lhdGVkRWxlbWVudCkuaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIH0K
IAogICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Pj4gdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzOwpAQCAtMjM5LDggKzIzOSw4IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp2
YWxpZGF0ZUludGVyYWN0aXYKICAgICBSZWY8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0KCp0aGlz
KTsKIAogICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgY29udHJvbCBhbmQgc2hv
dyBhIHZhbGlkYXRpb24gbWVzc2FnZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5o
YW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50
JiBlbGVtZW50ID0gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLT5hc0hUTUxFbGVtZW50KCk7
CisgICAgZm9yIChhdXRvJiBjb250cm9sIDogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKSB7Cisg
ICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gY29udHJvbC0+YXNIVE1MRWxlbWVudCgpOwog
ICAgICAgICBpZiAoZWxlbWVudC5pbkRvY3VtZW50KCkgJiYgZWxlbWVudC5pc0ZvY3VzYWJsZSgp
KSB7CiAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwog
ICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOwpAQCAtMjUyLDEzICsyNTIsMTIgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdgogCiAgICAgLy8gV2FybiBhYm91dCBh
bGwgb2YgdW5mb2N1c2FibGUgY29udHJvbHMuCiAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQmIGNv
bnRyb2wgPSAqdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldOwotICAgICAgICAgICAgSFRNTEVs
ZW1lbnQmIGVsZW1lbnQgPSBjb250cm9sLmFzSFRNTEVsZW1lbnQoKTsKKyAgICAgICAgZm9yIChh
dXRvJiBjb250cm9sIDogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKSB7CisgICAgICAgICAgICBI
VE1MRWxlbWVudCYgZWxlbWVudCA9IGNvbnRyb2wtPmFzSFRNTEVsZW1lbnQoKTsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50LmluRG9jdW1lbnQoKSAmJiBlbGVtZW50LmlzRm9jdXNhYmxlKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSgiQW4g
aW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90IGZvY3VzYWJsZS4i
KTsKLSAgICAgICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCBjb250cm9sLm5hbWUoKSk7
CisgICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgY29udHJvbC0+bmFtZSgpKTsK
ICAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTMxMiw5ICszMTEsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6Z2V0VGV4dEZpZWxk
VmFsdWVzCiAgICAgQVNTRVJUX0FSRyhmaWVsZE5hbWVzQW5kVmFsdWVzLCBmaWVsZE5hbWVzQW5k
VmFsdWVzLmlzRW1wdHkoKSk7CiAKICAgICBmaWVsZE5hbWVzQW5kVmFsdWVzLnJlc2VydmVDYXBh
Y2l0eShtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQmIGNvbnRyb2wgPSAqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0g
ICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gY29udHJvbC5hc0hUTUxFbGVtZW50KCk7Cisg
ICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6IG1fYXNzb2NpYXRlZEVsZW1lbnRzKSB7
CisgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gYXNzb2NpYXRlZEVsZW1lbnQtPmFzSFRN
TEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOwpAQCAtMzQyLDggKzM0MCw3IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICBSZWZQdHI8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4gZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uOwogICAgIGJv
b2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24gPSBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbjsgLy8gZG8gd2Ug
bmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1pdCBidXR0b24/CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldOworICAgIGZvciAoYXV0byYgYXNzb2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29jaWF0ZWRF
bGVtZW50cykgewogICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3Nv
Y2lhdGVkRWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5lZWRC
dXR0b25BY3RpdmF0aW9uKSB7CkBAIC0zODIsOSArMzc5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnJlc2V0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkK
LSAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXSkucmVzZXQoKTsKKyAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZWRFbGVtZW50
IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KCphc3NvY2lhdGVkRWxlbWVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PigqYXNzb2NpYXRlZEVsZW1lbnQpLnJlc2V0KCk7CiAgICAgfQog
CiAgICAgbV9pc0luUmVzZXRGdW5jdGlvbiA9IGZhbHNlOwpAQCAtNjkyLDEwICs2ODksMTAgQEAg
Ym9vbCBIVE1MRm9ybUVsZW1lbnQ6Ondhc1VzZXJTdWJtaXR0ZWQoKQogCiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OmRlZmF1bHRCdXR0b24oKSBjb25zdAogewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXSkpCisgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6IG1fYXNz
b2NpYXRlZEVsZW1lbnRzKSB7CisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oKmFzc29jaWF0ZWRFbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50JiBjb250cm9sID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKKyAgICAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCYgY29udHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCph
c3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmIChjb250cm9sLmlzU3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuICZjb250cm9sOwogICAgIH0KQEAgLTcxNiwx
MiArNzEzLDEyIEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpjaGVja0ludmFsaWRDb250cm8KICAg
ICAvLyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkgbWlnaHQgY2hhbmdl
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLgogICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRF
bGVtZW50Pj4gZWxlbWVudHM7CiAgICAgZWxlbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNz
b2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBlbGVtZW50cy5hcHBlbmQobV9h
c3NvY2lhdGVkRWxlbWVudHNbaV0pOworICAgIGZvciAoYXV0byYgYXNzb2NpYXRlZEVsZW1lbnQg
OiBtX2Fzc29jaWF0ZWRFbGVtZW50cykKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKGFzc29jaWF0
ZWRFbGVtZW50KTsKICAgICBib29sIGhhc0ludmFsaWRDb250cm9scyA9IGZhbHNlOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAoZWxlbWVudHNbaV0tPmZvcm0oKSA9PSB0aGlzICYmIGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplbGVtZW50c1tpXSkpIHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQm
IGNvbnRyb2wgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudHNbaV0p
OworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7CisgICAgICAgIGlmIChlbGVt
ZW50LT5mb3JtKCkgPT0gdGhpcyAmJiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dCkpIHsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGNvbnRyb2wgPSBkb3du
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAo
IWNvbnRyb2wuY2hlY2tWYWxpZGl0eSgmdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKSAmJiBjb250
cm9sLmZvcm0oKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgIGhhc0ludmFsaWRDb250cm9scyA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTc3NywxMCArNzc0LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OnJlbW92ZUZyb21QYXN0TmFtZQogICAgIGlmICghbV9wYXN0TmFtZXNNYXApCiAgICAgICAg
IHJldHVybjsKIAotICAgIFBhc3ROYW1lc01hcDo6aXRlcmF0b3IgZW5kID0gbV9wYXN0TmFtZXNN
YXAtPmVuZCgpOwotICAgIGZvciAoUGFzdE5hbWVzTWFwOjppdGVyYXRvciBpdCA9IG1fcGFzdE5h
bWVzTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1
ZSA9PSBpdGVtKQotICAgICAgICAgICAgaXQtPnZhbHVlID0gMDsgLy8gS2VlcCBsb29waW5nLiBT
aW5nbGUgZWxlbWVudCBjYW4gaGF2ZSBtdWx0aXBsZSBuYW1lcy4KKyAgICBmb3IgKGF1dG8mIHBh
c3ROYW1lIDogbV9wYXN0TmFtZXNNYXAtPnZhbHVlcygpKSB7CisgICAgICAgIGlmIChwYXN0TmFt
ZSA9PSBpdGVtKQorICAgICAgICAgICAgcGFzdE5hbWUgPSBudWxscHRyOyAvLyBLZWVwIGxvb3Bp
bmcuIFNpbmdsZSBlbGVtZW50IGNhbiBoYXZlIG11bHRpcGxlIG5hbWVzLgogICAgIH0KIH0KIApA
QCAtODEzLDkgKzgwOSw5IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpkb2N1bWVudERpZFJlc3Vt
ZUYKIHsKICAgICBBU1NFUlQoIXNob3VsZEF1dG9jb21wbGV0ZSgpKTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNzb2NpYXRlZEVsZW1lbnRz
W2ldKSkKLSAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXSkucmVzZXQoKTsKKyAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZWRF
bGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCphc3NvY2lhdGVkRWxlbWVudCkpCisgICAgICAgICAgICBkb3duY2Fz
dDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqYXNzb2NpYXRlZEVsZW1lbnQpLnJlc2V0KCk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjQsOCArMTIyNCw4IEBAIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBwYXJzZUFjY2VwdEF0dHJpYnUKIAogICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0VHlw
ZXM7CiAgICAgYWNjZXB0U3RyaW5nLnNwbGl0KCcsJywgZmFsc2UsIHNwbGl0VHlwZXMpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3BsaXRUeXBlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBTdHJpbmcgdHJpbW1lZFR5cGUgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMo
c3BsaXRUeXBlc1tpXSk7CisgICAgZm9yIChhdXRvJiBzcGxpdFR5cGUgOiBzcGxpdFR5cGVzKSB7
CisgICAgICAgIFN0cmluZyB0cmltbWVkVHlwZSA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyhzcGxpdFR5cGUpOwogICAgICAgICBpZiAodHJpbW1lZFR5cGUuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghcHJlZGljYXRlKHRyaW1tZWRUeXBl
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTAgKzc0LDEwIEBAIGlubGluZSBIVE1MS2V5Z2VuRWxl
bWVudDo6SFRNTEtleWdlbkVsZW0KICAgICBnZXRTdXBwb3J0ZWRLZXlTaXplcyhrZXlzKTsKIAog
ICAgIFJlZjxIVE1MU2VsZWN0RWxlbWVudD4gc2VsZWN0ID0gS2V5Z2VuU2VsZWN0RWxlbWVudDo6
Y3JlYXRlKGRvY3VtZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKICAgICAgICAgUmVmPEhUTUxP
cHRpb25FbGVtZW50PiBvcHRpb24gPSBIVE1MT3B0aW9uRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKICAgICAgICAgc2VsZWN0LT5hcHBlbmRDaGlsZChvcHRpb24uY29weVJlZigpLCBJR05PUkVf
RVhDRVBUSU9OKTsKLSAgICAgICAgb3B0aW9uLT5hcHBlbmRDaGlsZChUZXh0OjpjcmVhdGUoZG9j
dW1lbnQsIGtleXNbaV0pLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgb3B0aW9uLT5hcHBl
bmRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIGtleSksIElHTk9SRV9FWENFUFRJT04pOwog
ICAgIH0KIAogICAgIGVuc3VyZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKS5hcHBlbmRDaGlsZChXVEY6
Om1vdmUoc2VsZWN0KSwgSUdOT1JFX0VYQ0VQVElPTik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MjYsMTUg
KzU3MjYsMTUgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNZWRpYUdyb3VwKGNvbgogICAg
IC8vIDQuIElmIHRoZXJlIGlzIGFub3RoZXIgbWVkaWEgZWxlbWVudCB3aG9zZSBEb2N1bWVudCBp
cyB0aGUgc2FtZSBhcyBtJ3MgRG9jdW1lbnQgKGV2ZW4gaWYgb25lIG9yIGJvdGgKICAgICAvLyBv
ZiB0aGVzZSBlbGVtZW50cyBhcmUgbm90IGFjdHVhbGx5IGluIHRoZSBEb2N1bWVudCksIAogICAg
IEhhc2hTZXQ8SFRNTE1lZGlhRWxlbWVudCo+IGVsZW1lbnRzID0gZG9jdW1lbnRUb0VsZW1lbnRT
ZXRNYXAoKS5nZXQoJmRvY3VtZW50KCkpOwotICAgIGZvciAoSGFzaFNldDxIVE1MTWVkaWFFbGVt
ZW50Kj46Oml0ZXJhdG9yIGkgPSBlbGVtZW50cy5iZWdpbigpOyBpICE9IGVsZW1lbnRzLmVuZCgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCppID09IHRoaXMpCisgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogZWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQgPT0gdGhpcykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIC8vIGFuZCB3aGljaCBhbHNvIGhhcyBhIG1lZGlhZ3JvdXAg
YXR0cmlidXRlLCBhbmQgd2hvc2UgbWVkaWFncm91cCBhdHRyaWJ1dGUgaGFzIHRoZSBzYW1lIHZh
bHVlIGFzCiAgICAgICAgIC8vIHRoZSBuZXcgdmFsdWUgb2YgbSdzIG1lZGlhZ3JvdXAgYXR0cmli
dXRlLCAgICAgICAgCi0gICAgICAgIGlmICgoKmkpLT5tZWRpYUdyb3VwKCkgPT0gZ3JvdXApIHsK
KyAgICAgICAgaWYgKGVsZW1lbnQtPm1lZGlhR3JvdXAoKSA9PSBncm91cCkgewogICAgICAgICAg
ICAgLy8gIHRoZW4gbGV0IGNvbnRyb2xsZXIgYmUgdGhhdCBtZWRpYSBlbGVtZW50J3MgY3VycmVu
dCBtZWRpYSBjb250cm9sbGVyLgotICAgICAgICAgICAgc2V0Q29udHJvbGxlcigoKmkpLT5jb250
cm9sbGVyKCkpOworICAgICAgICAgICAgc2V0Q29udHJvbGxlcihlbGVtZW50LT5jb250cm9sbGVy
KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTYsMTIgKzE1NiwxMCBAQCBpbnQgSFRNTE9wdGlvbkVsZW1lbnQ6OmluZGV4KCkgY29u
c3QKIAogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiYgaXRlbXMgPSBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMoKTsKLSAgICBzaXplX3Qg
bGVuZ3RoID0gaXRlbXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKml0ZW1zW2ldKSkK
KyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBzZWxlY3RFbGVtZW50LT5saXN0SXRlbXMoKSkgeworICAg
ICAgICBpZiAoIWlzPEhUTUxPcHRpb25FbGVtZW50PigqaXRlbSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGl0ZW1zW2ldID09IHRoaXMpCisgICAgICAgIGlmIChpdGVtID09
IHRoaXMpCiAgICAgICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CiAgICAgICAgICsrb3B0aW9u
SW5kZXg7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDgsMTEgKzYwOCw4IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW8KICAgICB9CiAKICAgICBtX2xhc3RPbkNo
YW5nZVNlbGVjdGlvbi5jbGVhcigpOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7ICsraSkgewotICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGl0ZW1zW2ldOwor
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQogICAgICAgICBtX2xhc3RPbkNo
YW5nZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBk
b3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOwotICAgIH0K
IH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgoaW50IGluZGV4KQpAQCAtNjIzLDExICs2MjAsOCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpzZXRBY3RpdmVTZWxlY3RpCiAgICAgLy8gc2VsZWN0aW9uIHBpdm90cyBhcm91bmQgdGhpcyBh
bmNob3IgaW5kZXguCiAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5jbGVhcigp
OwogCi0gICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07CisgICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogbGlzdEl0ZW1zKCkpCiAgICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rp
b24uYXBwZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKLSAgICB9CiB9CiAKIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkK
QEAgLTg0Myw5ICs4MzcsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgo
KSBjCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgdGhlIGZpcnN0IG9wdGlvbiBzZWxlY3RlZC4KLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gaXRlbXNb
aV07CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1zKCkpIHsKICAgICAgICAgaWYg
KGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmIChkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OwpAQCAtOTcxLDkgKzk2Myw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW4KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxl
Y3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKEhUTUxFbGVtZW50KiBleGNsdWRlRWxlbWVudCkKIHsK
LSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoZWxlbWVudCAhPSBleGNsdWRlRWxlbWVudCAm
JiBpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgZG93bmNhc3Q8
SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAg
ICB9CkBAIC05ODEsMTMgKzk3MSwxMSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVj
dEl0ZW1zV2l0CiAKIEZvcm1Db250cm9sU3RhdGUgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVGb3Jt
Q29udHJvbFN0YXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
aXRlbXMgPSBsaXN0SXRlbXMoKTsKLSAgICBzaXplX3QgbGVuZ3RoID0gaXRlbXMuc2l6ZSgpOwog
ICAgIEZvcm1Db250cm9sU3RhdGUgc3RhdGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVt
c1tpXSkpCisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1zKCkpIHsKKyAgICAgICAg
aWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50JiBvcHRpb24gPSBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKml0ZW1zW2ldKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9wdGlv
biA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCk7CiAgICAgICAgIGlmICgh
b3B0aW9uLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc3RhdGUu
YXBwZW5kKG9wdGlvbi52YWx1ZSgpKTsKQEAgLTEwMTksMTAgKzEwMDcsMTAgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cgogICAgIGlmICghaXRlbXNTaXplKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zU2l6ZTsgKytp
KSB7Ci0gICAgICAgIGlmICghaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCppdGVtc1tpXSkpCisgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogaXRlbXMpIHsKKyAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRvd25j
YXN0PEhUTUxPcHRpb25FbGVtZW50PigqaXRlbXNbaV0pLnNldFNlbGVjdGVkU3RhdGUoZmFsc2Up
OworICAgICAgICBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNldFNlbGVj
dGVkU3RhdGUoZmFsc2UpOwogICAgIH0KIAogICAgIGlmICghbXVsdGlwbGUoKSkgewpAQCAtMTA2
MywxMCArMTA1MSw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBzdWNjZXNzZnVsID0gZmFsc2U7Ci0g
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBpdGVtc1tpXTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBsaXN0SXRlbXMoKSkgewogICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkg
JiYgIWRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1D
b250cm9sKCkpIHsKICAgICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnZhbHVlKCkpOwogICAgICAgICAgICAgc3VjY2Vz
c2Z1bCA9IHRydWU7CkBAIC0xMDg0LDkgKzEwNjksNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpyZXNldCgpCiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZpcnN0T3B0aW9uID0gbnVsbHB0cjsK
ICAgICBIVE1MT3B0aW9uRWxlbWVudCogc2VsZWN0ZWRPcHRpb24gPSBudWxscHRyOwogCi0gICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gaXRlbXNbaV07CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlz
dEl0ZW1zKCkpIHsKICAgICAgICAgaWYgKCFpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
KQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTkwNDUyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEwLDkg
KzQxMCw4IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0RGVmYXVsdFZhbHUKICAgICBm
b3IgKFRleHQqIHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQoKnRoaXMp
OyB0ZXh0Tm9kZTsgdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRl
eHROb2RlKSkKICAgICAgICAgdGV4dE5vZGVzLmFwcGVuZCgqdGV4dE5vZGUpOwogCi0gICAgc2l6
ZV90IHNpemUgPSB0ZXh0Tm9kZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICByZW1vdmVDaGlsZCh0ZXh0Tm9kZXNbaV0uZ2V0KCksIElHTk9S
RV9FWENFUFRJT04pOworICAgIGZvciAoYXV0byYgdGV4dE5vZGUgOiB0ZXh0Tm9kZXMpCisgICAg
ICAgIHJlbW92ZUNoaWxkKHRleHROb2RlLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAg
IC8vIE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MuCiAgICAgU3RyaW5nIHZhbHVlID0gZGVmYXVsdFZh
bHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTkwNDUyKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDAsMTAgKzE0MCwxMCBAQCBzdGF0aWMgdm9pZCBwb3B1bGF0ZUlucHV0VHlwZUZhY3RvcnlNYXAo
CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgInRleHQiIGJlY2F1c2UgaXQgaXMgdGhl
IGRlZmF1bHQgdHlwZS4KICAgICB9OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdU
Rl9BUlJBWV9MRU5HVEgoaW5wdXRUeXBlcyk7ICsraSkgewotICAgICAgICBhdXRvIGNvbmRpdGlv
bmFsRnVuY3Rpb24gPSBpbnB1dFR5cGVzW2ldLmNvbmRpdGlvbmFsRnVuY3Rpb247CisgICAgZm9y
IChhdXRvJiBpbnB1dFR5cGUgOiBpbnB1dFR5cGVzKSB7CisgICAgICAgIGF1dG8gY29uZGl0aW9u
YWxGdW5jdGlvbiA9IGlucHV0VHlwZS5jb25kaXRpb25hbEZ1bmN0aW9uOwogICAgICAgICBpZiAo
IWNvbmRpdGlvbmFsRnVuY3Rpb24gfHwgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuKmNvbmRpdGlvbmFsRnVuY3Rpb24pKCkpCi0gICAgICAgICAgICBtYXAuYWRkKGlu
cHV0VHlwZXNbaV0ubmFtZUZ1bmN0aW9uKCksIGlucHV0VHlwZXNbaV0uZmFjdG9yeUZ1bmN0aW9u
KTsKKyAgICAgICAgICAgIG1hcC5hZGQoaW5wdXRUeXBlLm5hbWVGdW5jdGlvbigpLCBpbnB1dFR5
cGUuZmFjdG9yeUZ1bmN0aW9uKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvTWVkaWFDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDggKzEzMiw4
IEBAIGRvdWJsZSBNZWRpYUNvbnRyb2xsZXI6OmR1cmF0aW9uKCkgY29uc3QKICAgICAvLyBGSVhN
RTogSW52ZXN0aWdhdGUgY2FjaGluZyB0aGUgbWF4aW11bSBkdXJhdGlvbiBhbmQgb25seSB1cGRh
dGluZyB0aGUgY2FjaGVkIHZhbHVlCiAgICAgLy8gd2hlbiB0aGUgc2xhdmVkIG1lZGlhIGVsZW1l
bnRzJyBkdXJhdGlvbnMgY2hhbmdlLgogICAgIGRvdWJsZSBtYXhEdXJhdGlvbiA9IDA7Ci0gICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVtZW50cy5zaXplKCk7ICsr
aW5kZXgpIHsKLSAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gbV9tZWRpYUVsZW1lbnRzW2luZGV4
XS0+ZHVyYXRpb24oKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVt
ZW50cykgeworICAgICAgICBkb3VibGUgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9u
KCk7CiAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGR1cmF0aW9uKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBtYXhEdXJhdGlvbiA9IHN0ZDo6bWF4KG1heER1cmF0aW9uLCBkdXJhdGlv
bik7CkBAIC0xNzAsOCArMTcwLDggQEAgdm9pZCBNZWRpYUNvbnRyb2xsZXI6OnNldEN1cnJlbnRU
aW1lKGRvdQogICAgIG1fY2xvY2stPnNldEN1cnJlbnRUaW1lKHRpbWUpOwogICAgIAogICAgIC8v
IFNlZWsgZWFjaCBzbGF2ZWQgbWVkaWEgZWxlbWVudCB0byB0aGUgbmV3IHBsYXliYWNrIHBvc2l0
aW9uIHJlbGF0aXZlIHRvIHRoZSBtZWRpYSBlbGVtZW50IHRpbWVsaW5lLgotICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQot
ICAgICAgICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5zZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0
aERvdWJsZSh0aW1lKSk7CisgICAgZm9yIChhdXRvJiBtZWRpYUVsZW1lbnQgOiBtX21lZGlhRWxl
bWVudHMpCisgICAgICAgIG1lZGlhRWxlbWVudC0+c2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhE
b3VibGUodGltZSkpOwogCiAgICAgc2NoZWR1bGVUaW1ldXBkYXRlRXZlbnQoKTsKICAgICBtX3Jl
c2V0Q3VycmVudFRpbWVJbk5leHRQbGF5ID0gZmFsc2U7CkBAIC0xOTQsOCArMTk0LDggQEAgdm9p
ZCBNZWRpYUNvbnRyb2xsZXI6OnBsYXkoKQogewogICAgIC8vIFdoZW4gdGhlIHBsYXkoKSBtZXRo
b2QgaXMgaW52b2tlZCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBpbnZva2UgdGhlIHBsYXkgbWV0aG9k
IG9mIGVhY2gKICAgICAvLyBzbGF2ZWQgbWVkaWEgZWxlbWVudCBpbiB0dXJuLAotICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4
KQotICAgICAgICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5wbGF5KCk7CisgICAgZm9yIChhdXRv
JiBtZWRpYUVsZW1lbnQgOiBtX21lZGlhRWxlbWVudHMpCisgICAgICAgIG1lZGlhRWxlbWVudC0+
cGxheSgpOwogCiAgICAgLy8gYW5kIHRoZW4gaW52b2tlIHRoZSB1bnBhdXNlIG1ldGhvZCBvZiB0
aGUgTWVkaWFDb250cm9sbGVyLgogICAgIHVucGF1c2UoKTsKQEAgLTI0Miw4ICsyNDIsOCBAQCB2
b2lkIE1lZGlhQ29udHJvbGxlcjo6c2V0UGxheWJhY2tSYXRlKGRvCiAgICAgLy8gcGxheWJhY2sg
cmF0ZSB0byB0aGUgbmV3IHZhbHVlLAogICAgIG1fY2xvY2stPnNldFBsYXlSYXRlKHJhdGUpOwog
Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVtZW50cy5zaXpl
KCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnVwZGF0ZVBsYXli
YWNrUmF0ZSgpOworICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRz
KQorICAgICAgICBtZWRpYUVsZW1lbnQtPnVwZGF0ZVBsYXliYWNrUmF0ZSgpOwogCiAgICAgLy8g
dGhlbiBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCByYXRlY2hhbmdl
IGF0IHRoZSBNZWRpYUNvbnRyb2xsZXIuCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCku
cmF0ZWNoYW5nZUV2ZW50KTsKQEAgLTI2OCw4ICsyNjgsOCBAQCB2b2lkIE1lZGlhQ29udHJvbGxl
cjo6c2V0Vm9sdW1lKGRvdWJsZSBsCiAgICAgLy8gYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEg
c2ltcGxlIGV2ZW50IG5hbWVkIHZvbHVtZWNoYW5nZSBhdCB0aGUgTWVkaWFDb250cm9sbGVyLgog
ICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KTsKIAotICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyAr
K2luZGV4KQotICAgICAgICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT51cGRhdGVWb2x1bWUoKTsK
KyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykKKyAgICAgICAg
bWVkaWFFbGVtZW50LT51cGRhdGVWb2x1bWUoKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xsZXI6
OnNldE11dGVkKGJvb2wgZmxhZykKQEAgLTI4NCw4ICsyODQsOCBAQCB2b2lkIE1lZGlhQ29udHJv
bGxlcjo6c2V0TXV0ZWQoYm9vbCBmbGFnCiAgICAgLy8gYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJl
IGEgc2ltcGxlIGV2ZW50IG5hbWVkIHZvbHVtZWNoYW5nZSBhdCB0aGUgTWVkaWFDb250cm9sbGVy
LgogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnZvbHVtZWNoYW5nZUV2ZW50KTsKIAot
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgp
OyArK2luZGV4KQotICAgICAgICBtX21lZGlhRWxlbWVudHNbaW5kZXhdLT51cGRhdGVWb2x1bWUo
KTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykKKyAgICAg
ICAgbWVkaWFFbGVtZW50LT51cGRhdGVWb2x1bWUoKTsKIH0KIAogc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgcGxheWJhY2tTdGF0ZVdhaXRpbmcoKQpAQCAtNDcyLDggKzQ3Miw4IEBAIHZvaWQg
TWVkaWFDb250cm9sbGVyOjp1cGRhdGVQbGF5YmFja1N0YXQKIAogdm9pZCBNZWRpYUNvbnRyb2xs
ZXI6OnVwZGF0ZU1lZGlhRWxlbWVudHMoKQogewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICBtX21lZGlh
RWxlbWVudHNbaW5kZXhdLT51cGRhdGVQbGF5U3RhdGUoKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlh
RWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykKKyAgICAgICAgbWVkaWFFbGVtZW50LT51cGRhdGVQ
bGF5U3RhdGUoKTsKIH0KIAogdm9pZCBNZWRpYUNvbnRyb2xsZXI6OmJyaW5nRWxlbWVudFVwVG9T
cGVlZChIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQpAQCAtNDk4LDggKzQ5OCw3IEBAIGJvb2wg
TWVkaWFDb250cm9sbGVyOjppc0Jsb2NrZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgYm9vbCBhbGxQYXVzZWQgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAg
IEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBtX21lZGlhRWxlbWVudHNbaW5kZXhdOworICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykgewogICAgICAgICAvLyAgb3Ig
aWYgYW55IG9mIGl0cyBzbGF2ZWQgbWVkaWEgZWxlbWVudHMgYXJlIGJsb2NrZWQgbWVkaWEgZWxl
bWVudHMsCiAgICAgICAgIGlmIChlbGVtZW50LT5pc0Jsb2NrZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNTI5LDggKzUyOCw4IEBAIGJvb2wgTWVkaWFDb250cm9sbGVyOjpoYXNF
bmRlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBib29sIGFsbEhh
dmVFbmRlZCA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVk
aWFFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFtX21lZGlhRWxlbWVu
dHNbaW5kZXhdLT5lbmRlZCgpKQorICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRp
YUVsZW1lbnRzKSB7CisgICAgICAgIGlmICghbWVkaWFFbGVtZW50LT5lbmRlZCgpKQogICAgICAg
ICAgICAgYWxsSGF2ZUVuZGVkID0gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBhbGxIYXZlRW5k
ZWQ7CkBAIC01NDgsOSArNTQ3LDggQEAgdm9pZCBNZWRpYUNvbnRyb2xsZXI6OmFzeW5jRXZlbnRU
aW1lckZpcgogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBwZW5kaW5nRXZlbnRzOwogCiAgICAg
bV9wZW5kaW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7Ci0gICAgc2l6ZV90IGNvdW50ID0g
cGVuZGluZ0V2ZW50cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IGNvdW50OyArK2luZGV4KQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVudHNbaW5k
ZXhdLnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZm9yIChhdXRvJiBwZW5kaW5n
RXZlbnQgOiBwZW5kaW5nRXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVu
dC5yZWxlYXNlKCksIElHTk9SRV9FWENFUFRJT04pOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbGxl
cjo6Y2xlYXJQb3NpdGlvblRpbWVyRmlyZWQoKQpAQCAtNTYwLDggKzU1OCw4IEBAIHZvaWQgTWVk
aWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXIKIAogYm9vbCBNZWRpYUNvbnRyb2xsZXI6
Omhhc0F1ZGlvKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
bV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBpZiAobV9tZWRpYUVs
ZW1lbnRzW2luZGV4XS0+aGFzQXVkaW8oKSkKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6
IG1fbWVkaWFFbGVtZW50cykgeworICAgICAgICBpZiAobWVkaWFFbGVtZW50LT5oYXNBdWRpbygp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAg
LTU2OSw4ICs1NjcsOCBAQCBib29sIE1lZGlhQ29udHJvbGxlcjo6aGFzQXVkaW8oKSBjb25zdAog
CiBib29sIE1lZGlhQ29udHJvbGxlcjo6aGFzVmlkZW8oKSBjb25zdAogewotICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX21lZGlhRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KSB7
Ci0gICAgICAgIGlmIChtX21lZGlhRWxlbWVudHNbaW5kZXhdLT5oYXNWaWRlbygpKQorICAgIGZv
ciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKSB7CisgICAgICAgIGlmICht
ZWRpYUVsZW1lbnQtPmhhc1ZpZGVvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTc4LDggKzU3Niw4IEBAIGJvb2wgTWVkaWFDb250cm9s
bGVyOjpoYXNWaWRlbygpIGNvbnN0CiAKIGJvb2wgTWVkaWFDb250cm9sbGVyOjpoYXNDbG9zZWRD
YXB0aW9ucygpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1f
bWVkaWFFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFFbGVt
ZW50c1tpbmRleF0tPmhhc0Nsb3NlZENhcHRpb25zKCkpCisgICAgZm9yIChhdXRvJiBtZWRpYUVs
ZW1lbnQgOiBtX21lZGlhRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKG1lZGlhRWxlbWVudC0+aGFz
Q2xvc2VkQ2FwdGlvbnMoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC01ODgsMTQgKzU4NiwxNCBAQCBib29sIE1lZGlhQ29udHJvbGxlcjo6
aGFzQ2xvc2VkQ2FwdGlvbnMoCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6c2V0Q2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBtX2Nsb3NlZENhcHRpb25zVmlzaWJsZSA9
IHZpc2libGU7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVt
ZW50cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnNl
dENsb3NlZENhcHRpb25zVmlzaWJsZSh2aXNpYmxlKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxl
bWVudCA6IG1fbWVkaWFFbGVtZW50cykKKyAgICAgICAgbWVkaWFFbGVtZW50LT5zZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUodmlzaWJsZSk7CiB9CiAKIGJvb2wgTWVkaWFDb250cm9sbGVyOjpzdXBw
b3J0c1NjYW5uaW5nKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBpZiAoIW1fbWVk
aWFFbGVtZW50c1tpbmRleF0tPnN1cHBvcnRzU2Nhbm5pbmcoKSkKKyAgICBmb3IgKGF1dG8mIG1l
ZGlhRWxlbWVudCA6IG1fbWVkaWFFbGVtZW50cykgeworICAgICAgICBpZiAoIW1lZGlhRWxlbWVu
dC0+c3VwcG9ydHNTY2FubmluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYwMywxNiArNjAxLDE2IEBAIGJvb2wgTWVkaWFDb250cm9s
bGVyOjpzdXBwb3J0c1NjYW5uaW5nKCkKIAogdm9pZCBNZWRpYUNvbnRyb2xsZXI6OmJlZ2luU2Ny
dWJiaW5nKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9tZWRpYUVs
ZW1lbnRzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnRzW2luZGV4XS0+
YmVnaW5TY3J1YmJpbmcoKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFF
bGVtZW50cykKKyAgICAgICAgbWVkaWFFbGVtZW50LT5iZWdpblNjcnViYmluZygpOwogICAgIGlm
IChtX3BsYXliYWNrU3RhdGUgPT0gUExBWUlORykKICAgICAgICAgbV9jbG9jay0+c3RvcCgpOwog
fQogCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6ZW5kU2NydWJiaW5nKCkKIHsKLSAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkK
LSAgICAgICAgbV9tZWRpYUVsZW1lbnRzW2luZGV4XS0+ZW5kU2NydWJiaW5nKCk7CisgICAgZm9y
IChhdXRvJiBtZWRpYUVsZW1lbnQgOiBtX21lZGlhRWxlbWVudHMpCisgICAgICAgIG1lZGlhRWxl
bWVudC0+ZW5kU2NydWJiaW5nKCk7CiAgICAgaWYgKG1fcGxheWJhY2tTdGF0ZSA9PSBQTEFZSU5H
KQogICAgICAgICBtX2Nsb2NrLT5zdGFydCgpOwogfQpAQCAtNjM0LDggKzYzMiw4IEBAIGJvb2wg
TWVkaWFDb250cm9sbGVyOjpjYW5QbGF5KCkgY29uc3QKICAgICBpZiAobV9wYXVzZWQpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1f
bWVkaWFFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFtX21lZGlhRWxl
bWVudHNbaW5kZXhdLT5jYW5QbGF5KCkpCisgICAgZm9yIChhdXRvJiBtZWRpYUVsZW1lbnQgOiBt
X21lZGlhRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKCFtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC02
NDMsOCArNjQxLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xsZXI6OmNhblBsYXkoKSBjb25zdAogCiBi
b29sIE1lZGlhQ29udHJvbGxlcjo6aXNMaXZlU3RyZWFtKCkgY29uc3QKIHsKLSAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9tZWRpYUVsZW1lbnRzLnNpemUoKTsgKytpbmRleCkg
ewotICAgICAgICBpZiAoIW1fbWVkaWFFbGVtZW50c1tpbmRleF0tPmlzTGl2ZVN0cmVhbSgpKQor
ICAgIGZvciAoYXV0byYgbWVkaWFFbGVtZW50IDogbV9tZWRpYUVsZW1lbnRzKSB7CisgICAgICAg
IGlmICghbWVkaWFFbGVtZW50LT5pc0xpdmVTdHJlYW0oKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC02NTIsOCArNjUwLDggQEAgYm9vbCBN
ZWRpYUNvbnRyb2xsZXI6OmlzTGl2ZVN0cmVhbSgpIGNvbgogCiBib29sIE1lZGlhQ29udHJvbGxl
cjo6aGFzQ3VycmVudFNyYygpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IG1fbWVkaWFFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKCFt
X21lZGlhRWxlbWVudHNbaW5kZXhdLT5oYXNDdXJyZW50U3JjKCkpCisgICAgZm9yIChhdXRvJiBt
ZWRpYUVsZW1lbnQgOiBtX21lZGlhRWxlbWVudHMpIHsKKyAgICAgICAgaWYgKCFtZWRpYUVsZW1l
bnQtPmhhc0N1cnJlbnRTcmMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC02NjEsOCArNjU5LDggQEAgYm9vbCBNZWRpYUNvbnRyb2xsZXI6
Omhhc0N1cnJlbnRTcmMoKSBjbwogCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6cmV0dXJuVG9SZWFs
dGltZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG1fbWVkaWFFbGVt
ZW50cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIG1fbWVkaWFFbGVtZW50c1tpbmRleF0tPnJl
dHVyblRvUmVhbHRpbWUoKTsKKyAgICBmb3IgKGF1dG8mIG1lZGlhRWxlbWVudCA6IG1fbWVkaWFF
bGVtZW50cykKKyAgICAgICAgbWVkaWFFbGVtZW50LT5yZXR1cm5Ub1JlYWx0aW1lKCk7CiB9CiAK
IC8vIFRoZSBzcGVjIHNheXMgdG8gZmlyZSBwZXJpb2RpYyB0aW1ldXBkYXRlIGV2ZW50cyAodGhv
c2Ugc2VudCB3aGlsZSBwbGF5aW5nKSBldmVyeQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9N
ZWRpYUZyYWdtZW50VVJJUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL01lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjEsOSArMTYxLDcgQEAgdm9pZCBNZWRpYUZyYWdtZW50VVJJUGFyc2VyOjpwYXJzZVRp
bWVGcgogCiAgICAgbV90aW1lRm9ybWF0ID0gSW52YWxpZDsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2ZyYWdtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+JiBmcmFnbWVudCA9IG1fZnJhZ21lbnRzW2ldOwotCisgICAgZm9yIChh
dXRvJiBmcmFnbWVudCA6IG1fZnJhZ21lbnRzKSB7CiAgICAgICAgIEFTU0VSVChmcmFnbWVudC5m
aXJzdC5pczhCaXQoKSk7CiAgICAgICAgIEFTU0VSVChmcmFnbWVudC5zZWNvbmQuaXM4Qml0KCkp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1B1YmxpY1VSTE1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvUHVibGljVVJMTWFuYWdlci5jcHAJKHJldmlz
aW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUHVibGljVVJMTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMCBAQCB2b2lkIFB1YmxpY1VSTE1hbmFnZXI6
OnJlZ2lzdGVyVVJMKFNlY3VyCiAKIHZvaWQgUHVibGljVVJMTWFuYWdlcjo6cmV2b2tlKGNvbnN0
IFVSTCYgdXJsKQogewotICAgIGZvciAoUmVnaXN0cnlVUkxNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jl
Z2lzdHJ5VG9VUkwuYmVnaW4oKTsgaSAhPSBtX3JlZ2lzdHJ5VG9VUkwuZW5kKCk7ICsraSkgewot
ICAgICAgICBpZiAoaS0+dmFsdWUuY29udGFpbnModXJsLnN0cmluZygpKSkgewotICAgICAgICAg
ICAgaS0+a2V5LT51bnJlZ2lzdGVyVVJMKHVybCk7Ci0gICAgICAgICAgICBpLT52YWx1ZS5yZW1v
dmUodXJsLnN0cmluZygpKTsKKyAgICBmb3IgKGF1dG8mIHJlZ2lzdHJ5IDogbV9yZWdpc3RyeVRv
VVJMKSB7CisgICAgICAgIGlmIChyZWdpc3RyeS52YWx1ZS5jb250YWlucyh1cmwuc3RyaW5nKCkp
KSB7CisgICAgICAgICAgICByZWdpc3RyeS5rZXktPnVucmVnaXN0ZXJVUkwodXJsKTsKKyAgICAg
ICAgICAgIHJlZ2lzdHJ5LnZhbHVlLnJlbW92ZSh1cmwuc3RyaW5nKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC03Miw5ICs3Miw5IEBAIHZvaWQgUHVibGljVVJM
TWFuYWdlcjo6c3RvcCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNTdG9wcGVkID0gdHJ1
ZTsKLSAgICBmb3IgKFJlZ2lzdHJ5VVJMTWFwOjppdGVyYXRvciBpID0gbV9yZWdpc3RyeVRvVVJM
LmJlZ2luKCk7IGkgIT0gbV9yZWdpc3RyeVRvVVJMLmVuZCgpOyArK2kpIHsKLSAgICAgICAgZm9y
IChVUkxTZXQ6Oml0ZXJhdG9yIGogPSBpLT52YWx1ZS5iZWdpbigpOyBqICE9IGktPnZhbHVlLmVu
ZCgpOyArK2opCi0gICAgICAgICAgICBpLT5rZXktPnVucmVnaXN0ZXJVUkwoVVJMKFBhcnNlZFVS
TFN0cmluZywgKmopKTsKKyAgICBmb3IgKGF1dG8mIHJlZ2lzdHJ5IDogbV9yZWdpc3RyeVRvVVJM
KSB7CisgICAgICAgIGZvciAoYXV0byYgdXJsIDogcmVnaXN0cnkudmFsdWUpCisgICAgICAgICAg
ICByZWdpc3RyeS5rZXktPnVucmVnaXN0ZXJVUkwoVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSk7
CiAgICAgfQogCiAgICAgbV9yZWdpc3RyeVRvVVJMLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NiwyMyArMTY2LDI0IEBAIEdDM0RzaXplaXB0ciBXZWJHTEJ1ZmZlcjo6Ynl0ZUxlbmd0
aCgpIGMKIAogaW50IFdlYkdMQnVmZmVyOjpnZXRDYWNoZWRNYXhJbmRleChHQzNEZW51bSB0eXBl
KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX21heElu
ZGV4Q2FjaGUpOyArK2kpCi0gICAgICAgIGlmIChtX21heEluZGV4Q2FjaGVbaV0udHlwZSA9PSB0
eXBlKQotICAgICAgICAgICAgcmV0dXJuIG1fbWF4SW5kZXhDYWNoZVtpXS5tYXhJbmRleDsKKyAg
ICBmb3IgKGF1dG8mIGNhY2hlIDogbV9tYXhJbmRleENhY2hlKSB7CisgICAgICAgIGlmIChjYWNo
ZS50eXBlID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF4SW5kZXg7CisgICAg
fQogICAgIHJldHVybiAtMTsKIH0KIAogdm9pZCBXZWJHTEJ1ZmZlcjo6c2V0Q2FjaGVkTWF4SW5k
ZXgoR0MzRGVudW0gdHlwZSwgaW50IHZhbHVlKQogewotICAgIHNpemVfdCBudW1FbnRyaWVzID0g
V1RGX0FSUkFZX0xFTkdUSChtX21heEluZGV4Q2FjaGUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtRW50cmllczsgKytpKQotICAgICAgICBpZiAobV9tYXhJbmRleENhY2hlW2ldLnR5
cGUgPT0gdHlwZSkgewotICAgICAgICAgICAgbV9tYXhJbmRleENhY2hlW2ldLm1heEluZGV4ID0g
dmFsdWU7CisgICAgZm9yIChhdXRvJiBjYWNoZSA6IG1fbWF4SW5kZXhDYWNoZSkgeworICAgICAg
ICBpZiAoY2FjaGUudHlwZSA9PSB0eXBlKSB7CisgICAgICAgICAgICBjYWNoZS5tYXhJbmRleCA9
IHZhbHVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgfQogICAgIG1fbWF4
SW5kZXhDYWNoZVttX25leHRBdmFpbGFibGVDYWNoZUVudHJ5XS50eXBlID0gdHlwZTsKICAgICBt
X21heEluZGV4Q2FjaGVbbV9uZXh0QXZhaWxhYmxlQ2FjaGVFbnRyeV0ubWF4SW5kZXggPSB2YWx1
ZTsKLSAgICBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5ID0gKG1fbmV4dEF2YWlsYWJsZUNhY2hl
RW50cnkgKyAxKSAlIG51bUVudHJpZXM7CisgICAgbV9uZXh0QXZhaWxhYmxlQ2FjaGVFbnRyeSA9
IChtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5ICsgMSkgJSBXVEZfQVJSQVlfTEVOR1RIKG1fbWF4
SW5kZXhDYWNoZSk7CiB9CiAKIHZvaWQgV2ViR0xCdWZmZXI6OnNldFRhcmdldChHQzNEZW51bSB0
YXJnZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0R3JvdXAuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDggKzkwLDgg
QEAgdm9pZCBXZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogCiB2b2lkIFdlYkdM
Q29udGV4dEdyb3VwOjpsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
Okxvc3RDb250ZXh0TW9kZSBtb2RlKQogewotICAgIGZvciAoSGFzaFNldDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBt
X2NvbnRleHRzLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1v
ZGUpOworICAgIGZvciAoYXV0byYgY29udGV4dCA6IG1fY29udGV4dHMpCisgICAgICAgIGNvbnRl
eHQtPmxvc2VDb250ZXh0SW1wbChtb2RlKTsKIAogICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJh
d0J1ZmZlcnMuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDggKzE3Myw4
IEBAIGJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXEKICAgICAgICAgY29u
dGV4dC0+ZGVsZXRlVGV4dHVyZShkZXB0aCk7CiAgICAgaWYgKHN1cHBvcnRzRGVwdGhTdGVuY2ls
KQogICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKGRlcHRoU3RlbmNpbCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb2xvcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbnRleHQt
PmRlbGV0ZVRleHR1cmUoY29sb3JzW2ldKTsKKyAgICBmb3IgKGF1dG8mIGNvbG9yIDogY29sb3Jz
KQorICAgICAgICBjb250ZXh0LT5kZWxldGVUZXh0dXJlKGNvbG9yKTsKICAgICByZXR1cm4gb2s7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDEwICszNzEsMTAg
QEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RgogICAgIGJvb2wgY2hl
Y2tNb3JlID0gdHJ1ZTsKICAgICBkbyB7CiAgICAgICAgIGNoZWNrTW9yZSA9IGZhbHNlOwotICAg
ICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdp
bigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBXZWJH
TEF0dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKSB7CisgICAgICAgICAgICBXZWJHTEF0
dGFjaG1lbnQqIGF0dGFjaG1lbnRPYmplY3QgPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAg
ICAgIGlmIChhdHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2htZW50KSkgewot
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKKyAgICAg
ICAgICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGVudHJ5LmtleTsKICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCksIGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZW1vdmVBdHRhY2ht
ZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAg
IGNoZWNrTW9yZSA9IHRydWU7CkBAIC00MjMsOSArNDIzLDkgQEAgR0MzRGVudW0gV2ViR0xGcmFt
ZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoYwogICAgIGJvb2wgaGF2ZURlcHRoID0gZmFsc2U7CiAgICAg
Ym9vbCBoYXZlU3RlbmNpbCA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZURlcHRoU3RlbmNpbCA9IGZh
bHNlOwotICAgIGZvciAoQXR0YWNobWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0dGFj
aG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgV2ViR0xBdHRhY2htZW50KiBhdHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAg
ICBpZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQsIGl0LT5rZXksIHJlYXNvbikp
CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpIHsKKyAgICAgICAgV2ViR0xB
dHRhY2htZW50KiBhdHRhY2htZW50ID0gZW50cnkudmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICgh
aXNBdHRhY2htZW50Q29tcGxldGUoYXR0YWNobWVudCwgZW50cnkua2V5LCByZWFzb24pKQogICAg
ICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CiAgICAgICAgIGlmICghYXR0YWNobWVudC0+aXNWYWxpZCgpKSB7CiAgICAg
ICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgaXMgbm90IHZhbGlkIjsKQEAgLTQ0MSw3ICs0
NDEsNyBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjCiAgICAgICAg
ICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgaXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IjsKICAg
ICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOwogICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAoaXQtPmtleSkgeworICAg
ICAgICBzd2l0Y2ggKGVudHJ5LmtleSkgewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9BVFRBQ0hNRU5UOgogICAgICAgICAgICAgaGF2ZURlcHRoID0gdHJ1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNDk4LDggKzQ5OCw4IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6
aGFzU3RlbmNpbEJ1ZmZlcigKIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQogewotICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBtX2F0dGFjaG1lbnRz
LmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGl0LT52
YWx1ZS0+b25EZXRhY2hlZChjb250ZXh0M2QpOworICAgIGZvciAoYXV0byYgYXR0YWNobWVudCA6
IG1fYXR0YWNobWVudHMudmFsdWVzKCkpCisgICAgICAgIGF0dGFjaG1lbnQtPm9uRGV0YWNoZWQo
Y29udGV4dDNkKTsKIAogICAgIGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsK
IH0KQEAgLTUwOSw5ICs1MDksOSBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVB
dHRhY2htCiAgICAgQVNTRVJUKG9iamVjdCgpKTsKICAgICBHQzNEYml0ZmllbGQgbWFzayA9IDA7
CiAKLSAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5i
ZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEdDM0Rl
bnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsKLSAgICAgICAgV2ViR0xBdHRhY2htZW50KiBh
dHRhY2htZW50ID0gaXQtPnZhbHVlLmdldCgpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2F0
dGFjaG1lbnRzKSB7CisgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gZW50cnkua2V5
OworICAgICAgICBXZWJHTEF0dGFjaG1lbnQqIGF0dGFjaG1lbnQgPSBlbnRyeS52YWx1ZS5nZXQo
KTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc0luaXRpYWxpemVkKCkpCiAgICAgICAgICAg
IG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUo
YXR0YWNobWVudFR5cGUpOwogICAgIH0KQEAgLTYwMCw4ICs2MDAsOCBAQCB2b2lkIFdlYkdMRnJh
bWVidWZmZXI6OmRyYXdCdWZmZXJzKGNvbnN0CiB7CiAgICAgbV9kcmF3QnVmZmVycyA9IGJ1ZnM7
CiAgICAgbV9maWx0ZXJlZERyYXdCdWZmZXJzLnJlc2l6ZShtX2RyYXdCdWZmZXJzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSA9IEdyYXBoaWNzQ29udGV4
dDNEOjpOT05FOworICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9maWx0ZXJlZERyYXdCdWZmZXJz
KQorICAgICAgICBidWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKICAgICBkcmF3QnVm
ZmVyc0lmTmVjZXNzYXJ5KHRydWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNp
b24gMTkwNDUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMSw5ICs2MDEsOSBAQCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpCiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgPSBudWxscHRyOwogICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IG51bGxwdHI7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOwotICAg
ICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwor
ICAgIGZvciAoYXV0byYgdGV4dHVyZVVuaXQgOiBtX3RleHR1cmVVbml0cykgeworICAgICAgICB0
ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAgICAgdGV4dHVyZVVu
aXQudGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKICAgICB9CiAKICAgICBtX2JsYWNr
VGV4dHVyZTJEID0gbnVsbHB0cjsKQEAgLTE1MjEsMTEgKzE1MjEsMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZQogewogICAgIGlmICghZGVsZXRlT2JqZWN0KHRl
eHR1cmUpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1f
dGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7CisgICAgZm9yIChh
dXRvJiB0ZXh0dXJlVW5pdCA6IG1fdGV4dHVyZVVuaXRzKSB7CisgICAgICAgIGlmICh0ZXh0dXJl
ID09IHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcpCisgICAgICAgICAgICB0ZXh0dXJlVW5p
dC50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gdGV4
dHVyZVVuaXQudGV4dHVyZUN1YmVNYXBCaW5kaW5nKQorICAgICAgICAgICAgdGV4dHVyZVVuaXQu
dGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNo
bWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHRleHR1cmUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAJKHJldmlz
aW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw3IEBAIHZvaWQgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlT2JqZWMKICAgICBpZiAobV9ib3VuZEVsZW1lbnRBcnJh
eUJ1ZmZlcikKICAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChj
b250ZXh0M2QpOwogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZXJ0ZXhBdHRy
aWJTdGF0ZS5zaXplKCk7ICsraSkgewotICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX3ZlcnRleEF0dHJpYlN0YXRlW2ldOworICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRl
eEF0dHJpYlN0YXRlKSB7CiAgICAgICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nKQogICAgICAg
ICAgICAgc3RhdGUuYnVmZmVyQmluZGluZy0+b25EZXRhY2hlZChjb250ZXh0M2QpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsOCArNzEsNyBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0
ZU9iCiAgICAgaWYgKG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIpCiAgICAgICAgIG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXItPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCk7ICsraSkgewotICAgICAg
ICBWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlW2ldOworICAg
IGZvciAoYXV0byYgc3RhdGUgOiBtX3ZlcnRleEF0dHJpYlN0YXRlKSB7CiAgICAgICAgIGlmIChz
dGF0ZS5idWZmZXJCaW5kaW5nKQogICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZy0+b25E
ZXRhY2hlZChjb250ZXh0M2QpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0F0b21pY0hUTUxUb2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0F0b21pY0hUTUxUb2tlbi5oCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTg2
LDggKzE4Niw3IEBAIGlubGluZSB2b2lkIEF0b21pY0hUTUxUb2tlbjo6aW5pdGlhbGl6ZUEKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9hdHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2l6ZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTsK
KyAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZS5uYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
Q29uc3RydWN0aW9uU2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw4ICsyNzQsNyBAQCB2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0CiAgICAgaWYgKHRva2VuLT5h
dHRyaWJ1dGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG9rZW4tPmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUmIHRva2VuQXR0cmlidXRlID0gdG9rZW4tPmF0dHJpYnV0ZXMoKS5h
dChpKTsKKyAgICBmb3IgKGF1dG8mIHRva2VuQXR0cmlidXRlIDogdG9rZW4tPmF0dHJpYnV0ZXMo
KSkgewogICAgICAgICBpZiAoIWVsZW1lbnQtPmVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQtPmZp
bmRBdHRyaWJ1dGVCeU5hbWUodG9rZW5BdHRyaWJ1dGUubmFtZSgpKSkKICAgICAgICAgICAgIGVs
ZW1lbnQtPnNldEF0dHJpYnV0ZSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCksIHRva2VuQXR0cmlidXRl
LnZhbHVlKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCShyZXZpc2lvbiAxOTA0NTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsOCBAQCB2b2lkIEhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OmVuc3VyZU5vCiAgICAgVmVjdG9yPEhUTUxTdGFja0l0ZW0qPiByZW1h
aW5pbmdDYW5kaWRhdGVzOwogICAgIHJlbWFpbmluZ0NhbmRpZGF0ZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShjYW5kaWRhdGVzLnNpemUoKSk7CiAKLSAgICBjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcyA9IG5ld0l0ZW0tPmF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGF0dHJpYnV0ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmli
dXRlJiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgY2FuZGlkYXRlcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgSFRNTFN0YWNr
SXRlbSogY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tqXTsKLQorICAgIGZvciAoYXV0byYgYXR0cmli
dXRlIDogbmV3SXRlbS0+YXR0cmlidXRlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FuZGlk
YXRlIDogY2FuZGlkYXRlcykgewogICAgICAgICAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91
bGQgYWxyZWFkeSBoYXZlIGJlZW4gY2hlY2tlZCBieSB0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0
aW9uUXVpY2tseS4KICAgICAgICAgICAgIEFTU0VSVChuZXdJdGVtLT5hdHRyaWJ1dGVzKCkuc2l6
ZSgpID09IGNhbmRpZGF0ZS0+YXR0cmlidXRlcygpLnNpemUoKSk7CiAgICAgICAgICAgICBBU1NF
UlQobmV3SXRlbS0+bG9jYWxOYW1lKCkgPT0gY2FuZGlkYXRlLT5sb2NhbE5hbWUoKSAmJiBuZXdJ
dGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBjYW5kaWRhdGUtPm5hbWVzcGFjZVVSSSgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cAkocmV2aXNpb24gMTkwNDUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBy
ZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw5IEBAIHB1Ymxp
YzoKICAgICAgICAgaWYgKG1fdGFnSWQgPj0gVGFnSWQ6OlVua25vd24pCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZShpdGVy
LT5uYW1lKTsKLSAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZ0ltcGw6
OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGl0ZXItPnZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiBh
dHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmli
dXRlTmFtZShhdHRyaWJ1dGUubmFtZSk7CisgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFs
dWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShhdHRyaWJ1dGUudmFsdWUpOwog
ICAgICAgICAgICAgcHJvY2Vzc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1
ZSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVk
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVk
aXRvci5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1hTU0F1ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsOCArMTk3LDggQEAgc3RhdGlj
IGJvb2wgc2VtaWNvbG9uU2VwYXJhdGVkVmFsdWVDb250YQogewogICAgIFZlY3RvcjxTdHJpbmc+
IHZhbHVlTGlzdDsKICAgICB2YWx1ZS5zcGxpdCgnOycsIHZhbHVlTGlzdCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHBy
b3RvY29sSXNKYXZhU2NyaXB0KHZhbHVlTGlzdFtpXSkpCisgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IHZhbHVlTGlzdCkgeworICAgICAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQodmFsdWUpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNw
cAkocmV2aXNpb24gMTkwNDUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dERpc3RyaWJ1dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTMgKzc4LDExIEBAIHZvaWQg
Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEVsZW0KICAgICBtX3ZhbGlkaXR5ID0gVmFs
aWQ7CiAKICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGhvc3QtPnNoYWRvd1Jvb3QoKSkgewot
ICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEluc2VydGlvblBvaW50Pj4mIGluc2VydGlvblBv
aW50cyA9IGVuc3VyZUluc2VydGlvblBvaW50TGlzdChyb290KTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbnNlcnRpb25Qb2ludHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IEluc2VydGlvblBvaW50KiBwb2ludCA9IGluc2VydGlvblBvaW50c1tpXS5nZXQoKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBwb2ludCA6IGVuc3VyZUluc2VydGlvblBvaW50TGlzdChyb290KSkgewog
ICAgICAgICAgICAgaWYgKCFwb2ludC0+aXNBY3RpdmUoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhwb2ludCwgaG9zdCk7
CisgICAgICAgICAgICBkaXN0cmlidXRlU2VsZWN0aW9uc1RvKHBvaW50LmdldCgpLCBob3N0KTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTk1LDEwICs5Myw5IEBAIGJvb2wgQ29udGVudERpc3Ry
aWJ1dG9yOjppbnZhbGlkYXRlKEVsZW0KICAgICBib29sIG5lZWRzUmVhdHRhY2ggPSAobV92YWxp
ZGl0eSA9PSBVbmRldGVybWluZWQpIHx8ICFtX25vZGVUb0luc2VydGlvblBvaW50LmlzRW1wdHko
KTsKIAogICAgIGlmIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+c2hhZG93Um9vdCgpKSB7Ci0g
ICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SW5zZXJ0aW9uUG9pbnQ+PiYgaW5zZXJ0aW9uUG9p
bnRzID0gZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3QpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluc2VydGlvblBvaW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3Ig
KGF1dG8mIHBvaW50IDogZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KHJvb3QpKSB7CiAgICAgICAg
ICAgICBuZWVkc1JlYXR0YWNoID0gdHJ1ZTsKLSAgICAgICAgICAgIGluc2VydGlvblBvaW50c1tp
XS0+Y2xlYXJEaXN0cmlidXRpb24oKTsKKyAgICAgICAgICAgIHBvaW50LT5jbGVhckRpc3RyaWJ1
dGlvbigpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxOTA0NTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0Myw5ICs3NDMsNyBAQCB2b2lkIE1lZGlhQ29udHJvbENsb3Nl
ZENhcHRpb25zVHJhY2tMaXN0CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG9mZk1lbnVJdGVtOwogICAg
IGJvb2wgdHJhY2tNZW51SXRlbVNlbGVjdGVkID0gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBsZW5ndGggPSBtX21lbnVJdGVtcy5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gdHJhY2tJdGVtID0gbV9tZW51SXRlbXNbaV07Ci0KKyAg
ICBmb3IgKGF1dG8mIHRyYWNrSXRlbSA6IG1fbWVudUl0ZW1zKSB7CiAgICAgICAgIFJlZlB0cjxU
ZXh0VHJhY2s+IHRleHRUcmFjazsKICAgICAgICAgTWVudUl0ZW1Ub1RyYWNrTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9tZW51VG9UcmFja01hcC5maW5kKHRyYWNrSXRlbS5nZXQoKSk7CiAgICAgICAg
IGlmIChpdGVyID09IG1fbWVudVRvVHJhY2tNYXAuZW5kKCkpCkBAIC04MTIsOCArODEwLDcgQEAg
dm9pZCBNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdAogICAgIGFwcGVuZENoaWxk
KFdURjo6bW92ZShjYXB0aW9uc0hlYWRlcikpOwogICAgIFJlZjxFbGVtZW50PiBjYXB0aW9uc01l
bnVMaXN0ID0gZG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KHVsVGFnLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHRyYWNrc0Zvck1lbnUu
c2l6ZSgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4
dFRyYWNrID0gdHJhY2tzRm9yTWVudVtpXTsKKyAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHRy
YWNrc0Zvck1lbnUpIHsKICAgICAgICAgUmVmPEVsZW1lbnQ+IG1lbnVJdGVtID0gZG9jdW1lbnQo
KS5jcmVhdGVFbGVtZW50KGxpVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICAgICAgbWVu
dUl0ZW0tPmFwcGVuZENoaWxkKGRvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoY2FwdGlvblByZWZl
cmVuY2VzLT5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSkpKTsKICAgICAgICAg
Y2FwdGlvbnNNZW51TGlzdC0+YXBwZW5kQ2hpbGQobWVudUl0ZW0uY29weVJlZigpKTsKQEAgLTEy
MjQsMTAgKzEyMjEsOSBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1l
CiAgICAgZmxvYXQgc21hbGxlc3REaW1lbnNpb24gPSBzdGQ6Om1pbihtX3ZpZGVvRGlzcGxheVNp
emUuc2l6ZSgpLmhlaWdodCgpLCBtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLndpZHRoKCkpOwog
ICAgIGZsb2F0IGZvbnRTY2FsZSA9IGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25Q
cmVmZXJlbmNlcygpLT5jYXB0aW9uRm9udFNpemVTY2FsZUFuZEltcG9ydGFuY2UobV9mb250U2l6
ZUlzSW1wb3J0YW50KTsKICAgICBtX2ZvbnRTaXplID0gbHJvdW5kZihzbWFsbGVzdERpbWVuc2lv
biAqIGZvbnRTY2FsZSk7Ci0gICAgCi0gICAgQ3VlTGlzdCBhY3RpdmVDdWVzID0gbWVkaWFFbGVt
ZW50LT5jdXJyZW50bHlBY3RpdmVDdWVzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
Y3RpdmVDdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRleHRUcmFja0N1ZSogY3VlID0gYWN0
aXZlQ3Vlc1tpXS5kYXRhKCk7CisKKyAgICBmb3IgKGF1dG8mIGFjdGl2ZUN1ZSA6IG1lZGlhRWxl
bWVudC0+Y3VycmVudGx5QWN0aXZlQ3VlcygpKSB7CisgICAgICAgIFRleHRUcmFja0N1ZSogY3Vl
ID0gYWN0aXZlQ3VlLmRhdGEoKTsKICAgICAgICAgaWYgKCFjdWUtPmlzUmVuZGVyYWJsZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
QXVkaW9UcmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svQXVkaW9UcmFja0xpc3QuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCAr
NzQsOCBAQCBBdWRpb1RyYWNrKiBBdWRpb1RyYWNrTGlzdDo6aXRlbSh1bnNpZ25lCiAKIEF1ZGlv
VHJhY2sqIEF1ZGlvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBp
ZCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5iYW5kVHJhY2tzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvVHJhY2sqIHRyYWNrID0gdG9BdWRpb1RyYWNrKG1f
aW5iYW5kVHJhY2tzW2ldLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9p
bmJhbmRUcmFja3MpIHsKKyAgICAgICAgQXVkaW9UcmFjayogdHJhY2sgPSB0b0F1ZGlvVHJhY2so
aW5iYW5kVHJhY2suZ2V0KCkpOwogICAgICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCiAgICAg
ICAgICAgICByZXR1cm4gdHJhY2s7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAJKHJldmlzaW9uIDE5MDQ1MikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTAsOSArMTEwLDkgQEAgdm9pZCBMb2FkYWJsZVRleHRUcmFjazo6bmV3Q3Vlc0F2
YWlsYWJsZQogICAgIGlmICghbV9jdWVzKQogICAgICAgICBtX2N1ZXMgPSBUZXh0VHJhY2tDdWVM
aXN0OjpjcmVhdGUoKTsgICAgCiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ld0N1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgbmV3Q3Vlc1tpXS0+c2V0VHJhY2sodGhpcyk7Ci0gICAg
ICAgIG1fY3Vlcy0+YWRkKG5ld0N1ZXNbaV0pOworICAgIGZvciAoYXV0byYgbmV3Q3VlIDogbmV3
Q3VlcykgeworICAgICAgICBuZXdDdWUtPnNldFRyYWNrKHRoaXMpOworICAgICAgICBtX2N1ZXMt
PmFkZChuZXdDdWUpOwogICAgIH0KIAogICAgIGlmIChjbGllbnQoKSkKQEAgLTEzNiw5ICsxMzYs
OSBAQCB2b2lkIExvYWRhYmxlVGV4dFRyYWNrOjpuZXdSZWdpb25zQXZhaWxhCiAgICAgVmVjdG9y
PFJlZlB0cjxWVFRSZWdpb24+PiBuZXdSZWdpb25zOwogICAgIG1fbG9hZGVyLT5nZXROZXdSZWdp
b25zKG5ld1JlZ2lvbnMpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdSZWdpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG5ld1JlZ2lvbnNbaV0tPnNldFRyYWNrKHRoaXMpOwot
ICAgICAgICByZWdpb25zKCktPmFkZChuZXdSZWdpb25zW2ldKTsKKyAgICBmb3IgKGF1dG8mIG5l
d1JlZ2lvbiA6IG5ld1JlZ2lvbnMpIHsKKyAgICAgICAgbmV3UmVnaW9uLT5zZXRUcmFjayh0aGlz
KTsKKyAgICAgICAgcmVnaW9ucygpLT5hZGQobmV3UmVnaW9uKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNwcAkocmV2
aXNpb24gMTkwNDUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsOSBAQCBUZXh0VHJhY2tDdWUqIFRl
eHRUcmFja0N1ZUxpc3Q6Oml0ZW0odW5zCiAKIFRleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlTGlz
dDo6Z2V0Q3VlQnlJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2xpc3RbaV0t
PmlkKCkgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gbV9saXN0W2ldLmdldCgpOworICAgIGZv
ciAoYXV0byYgY3VlIDogbV9saXN0KSB7CisgICAgICAgIGlmIChjdWUtPmlkKCkgPT0gaWQpCisg
ICAgICAgICAgICByZXR1cm4gY3VlLmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAg
LTY3LDggKzY3LDcgQEAgVGV4dFRyYWNrQ3VlTGlzdCogVGV4dFRyYWNrQ3VlTGlzdDo6YWN0aQog
ICAgICAgICBtX2FjdGl2ZUN1ZXMgPSBjcmVhdGUoKTsKIAogICAgIG1fYWN0aXZlQ3Vlcy0+Y2xl
YXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdC5zaXplKCk7ICsraSkgewot
ICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBtX2xpc3RbaV07CisgICAgZm9yIChh
dXRvJiBjdWUgOiBtX2xpc3QpIHsKICAgICAgICAgaWYgKGN1ZS0+aXNBY3RpdmUoKSkKICAgICAg
ICAgICAgIG1fYWN0aXZlQ3Vlcy0+YWRkKGN1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MiwyOSArNzIsMjkgQEAgaW50IFRleHRUcmFja0xpc3Q6OmdldFRyYWNrSW5kZXhSZWxh
dGl2ZQogICAgIC8vIENhbGN1bGF0ZSB0aGUgIkxldCBuIGJlIHRoZSBudW1iZXIgb2YgdGV4dCB0
cmFja3Mgd2hvc2UgdGV4dCB0cmFjayBtb2RlIGlzIHNob3dpbmcgYW5kIHRoYXQgYXJlIGluIHRo
ZSBtZWRpYSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcyBiZWZvcmUgdHJhY2suIgogICAg
IGludCB0cmFja0luZGV4ID0gMDsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbGVt
ZW50VHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghdG9UZXh0VHJhY2sobV9lbGVt
ZW50VHJhY2tzW2ldLmdldCgpKS0+aXNSZW5kZXJlZCgpKQorICAgIGZvciAoYXV0byYgZWxlbWVu
dFRyYWNrIDogbV9lbGVtZW50VHJhY2tzKSB7CisgICAgICAgIGlmICghdG9UZXh0VHJhY2soZWxl
bWVudFRyYWNrLmdldCgpKS0+aXNSZW5kZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKG1fZWxlbWVudFRyYWNrc1tpXSA9PSB0ZXh0VHJhY2spCisgICAgICAgIGlm
IChlbGVtZW50VHJhY2sgPT0gdGV4dFRyYWNrKQogICAgICAgICAgICAgcmV0dXJuIHRyYWNrSW5k
ZXg7CiAgICAgICAgICsrdHJhY2tJbmRleDsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCF0b1Rl
eHRUcmFjayhtX2FkZFRyYWNrVHJhY2tzW2ldLmdldCgpKS0+aXNSZW5kZXJlZCgpKQorICAgIGZv
ciAoYXV0byYgYWRkVHJhY2sgOiBtX2FkZFRyYWNrVHJhY2tzKSB7CisgICAgICAgIGlmICghdG9U
ZXh0VHJhY2soYWRkVHJhY2suZ2V0KCkpLT5pc1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAobV9hZGRUcmFja1RyYWNrc1tpXSA9PSB0ZXh0VHJhY2spCisg
ICAgICAgIGlmIChhZGRUcmFjayA9PSB0ZXh0VHJhY2spCiAgICAgICAgICAgICByZXR1cm4gdHJh
Y2tJbmRleDsKICAgICAgICAgKyt0cmFja0luZGV4OwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCF0
b1RleHRUcmFjayhtX2luYmFuZFRyYWNrc1tpXS5nZXQoKSktPmlzUmVuZGVyZWQoKSkKKyAgICBm
b3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9pbmJhbmRUcmFja3MpIHsKKyAgICAgICAgaWYgKCF0
b1RleHRUcmFjayhpbmJhbmRUcmFjay5nZXQoKSktPmlzUmVuZGVyZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtX2luYmFuZFRyYWNrc1tpXSA9PSB0ZXh0VHJhY2sp
CisgICAgICAgIGlmIChpbmJhbmRUcmFjayA9PSB0ZXh0VHJhY2spCiAgICAgICAgICAgICByZXR1
cm4gdHJhY2tJbmRleDsKICAgICAgICAgKyt0cmFja0luZGV4OwogICAgIH0KQEAgLTE0OSwxNCAr
MTQ5LDE0IEBAIHZvaWQgVGV4dFRyYWNrTGlzdDo6aW52YWxpZGF0ZVRyYWNrSW5kZXgKIAogICAg
IGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpIHsKICAg
ICAgICAgdHJhY2tzID0gJm1fZWxlbWVudFRyYWNrczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FkZFRyYWNrVHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdG9UZXh0
VHJhY2sobV9hZGRUcmFja1RyYWNrc1tpXS5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICB0b1RleHRUcmFjayhtX2luYmFuZFRyYWNrc1tpXS5nZXQoKSktPmlu
dmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgIGZvciAoYXV0byYgYWRkVHJhY2sgOiBtX2Fk
ZFRyYWNrVHJhY2tzKQorICAgICAgICAgICAgdG9UZXh0VHJhY2soYWRkVHJhY2suZ2V0KCkpLT5p
bnZhbGlkYXRlVHJhY2tJbmRleCgpOworICAgICAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDog
bV9pbmJhbmRUcmFja3MpCisgICAgICAgICAgICB0b1RleHRUcmFjayhpbmJhbmRUcmFjay5nZXQo
KSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7CiAgICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tU
eXBlKCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFjaykgewogICAgICAgICB0cmFja3MgPSAmbV9hZGRU
cmFja1RyYWNrczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luYmFuZFRyYWNr
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHRvVGV4dFRyYWNrKG1faW5iYW5kVHJhY2tzW2ld
LmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpbmJh
bmRUcmFjayA6IG1faW5iYW5kVHJhY2tzKQorICAgICAgICAgICAgdG9UZXh0VHJhY2soaW5iYW5k
VHJhY2suZ2V0KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOwogICAgIH0gZWxzZSBpZiAodHJh
Y2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQogICAgICAgICB0cmFja3MgPSAm
bV9pbmJhbmRUcmFja3M7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UcmFja0xpc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RyYWNrTGlzdEJhc2UuY3BwCShyZXZpc2lvbiAxOTA0NTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksOCAr
MTU5LDcgQEAgdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVsZUNoYW5nZUV2ZW50KAogCiBib29s
IFRyYWNrTGlzdEJhc2U6OmlzQW55VHJhY2tFbmFibGVkKCkgY29uc3QKIHsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1faW5iYW5kVHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRy
YWNrQmFzZSogdHJhY2sgPSBtX2luYmFuZFRyYWNrc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV9pbmJhbmRUcmFja3MpIHsKICAgICAgICAgaWYgKHRyYWNrLT5lbmFibGVkKCkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAkocmV2aXNpb24gMTkwNDUyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDggKzczLDggQEAgVmlkZW9UcmFjayogVmlkZW9UcmFja0xpc3Q6Oml0ZW0odW5zaWdu
ZQogCiBWaWRlb1RyYWNrKiBWaWRlb1RyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgIFZpZGVvVHJhY2sqIHRyYWNrID0gdG9WaWRlb1RyYWNrKG1faW5i
YW5kVHJhY2tzW2ldLmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrcyA6IG1faW5i
YW5kVHJhY2tzKSB7CisgICAgICAgIFZpZGVvVHJhY2sqIHRyYWNrID0gdG9WaWRlb1RyYWNrKGlu
YmFuZFRyYWNrcy5nZXQoKSk7CiAgICAgICAgIGlmICh0cmFjay0+aWQoKSA9PSBpZCkKICAgICAg
ICAgICAgIHJldHVybiB0cmFjazsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>