<?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>137284</bug_id>
          
          <creation_ts>2014-09-30 19:55:31 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for Event classes</short_desc>
          <delta_ts>2019-02-06 09:18:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137056</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1038437</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 19:55:31 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for Event classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038441</commentid>
    <comment_count>1</comment_count>
      <attachid>238989</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 20:24:30 -0700</bug_when>
    <thetext>Created attachment 238989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038442</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 20:26:35 -0700</bug_when>
    <thetext>Attachment 238989 did not pass style-queue:


ERROR: Source/WebCore/html/MediaDocument.cpp:213:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 46 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038465</commentid>
    <comment_count>3</comment_count>
      <attachid>238999</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 22:23:07 -0700</bug_when>
    <thetext>Created attachment 238999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038466</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 22:24:45 -0700</bug_when>
    <thetext>Attachment 238999 did not pass style-queue:


ERROR: Source/WebCore/html/MediaDocument.cpp:213:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038468</commentid>
    <comment_count>5</comment_count>
      <attachid>239000</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 22:32:25 -0700</bug_when>
    <thetext>Created attachment 239000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038469</commentid>
    <comment_count>6</comment_count>
      <attachid>239001</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 22:33:36 -0700</bug_when>
    <thetext>Created attachment 239001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038470</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 22:34:55 -0700</bug_when>
    <thetext>Attachment 239001 did not pass style-queue:


ERROR: Source/WebCore/html/MediaDocument.cpp:213:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038471</commentid>
    <comment_count>8</comment_count>
      <attachid>239002</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 22:40:32 -0700</bug_when>
    <thetext>Created attachment 239002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038472</commentid>
    <comment_count>9</comment_count>
      <attachid>239003</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-30 22:41:54 -0700</bug_when>
    <thetext>Created attachment 239003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038473</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-30 22:44:55 -0700</bug_when>
    <thetext>Attachment 239003 did not pass style-queue:


ERROR: Source/WebCore/html/MediaDocument.cpp:213:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038677</commentid>
    <comment_count>11</comment_count>
      <attachid>239003</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-01 15:29:24 -0700</bug_when>
    <thetext>Comment on attachment 239003
Patch

Clearing flags on attachment: 239003

Committed r174178: &lt;http://trac.webkit.org/changeset/174178&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038678</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-01 15:29:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503262</commentid>
    <comment_count>13</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:18:51 -0800</bug_when>
    <thetext>Mass move bugs into the DOM component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238989</attachid>
            <date>2014-09-30 20:24:30 -0700</date>
            <delta_ts>2014-09-30 22:23:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137284-20140930202431.patch</filename>
            <type>text/plain</type>
            <size>74245</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uZjRlMTI2ZDA3NTgzYTRjY2UwOWRiMDQ2ZmQ3Yzll
YWZjZTg1Y2RkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgRXZlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3Mjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRXZl
bnQgY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJv
ckV2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5oOgorICAgICAgICAq
IGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVs
YXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAqIGRvbS9VSUV2ZW50Lmg6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjppc0VudGVyS2V5S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzTGlua0NsaWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN1
bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL01l
ZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNp
dGx5KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
czo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAq
IHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZs
b3cgd2l0aCBlbm9ybW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWMxMzQ0NzVlYTU3M2Uw
NjMwY2U4OGE0Yzg1NTNmMTEzYzIzZWQ0YS4uN2FkMWNhMDVlMDc4ZTFkMjgzYTY4N2U4NzllY2U3
OWI3NDQ2NDZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFdmVudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFdmVu
dCBjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisKIDIwMTQtMDkt
MzAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBSZW5hbWUgVEVTVF9USEVNRV9ESVIgbWFjcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCBlYTUxZjc5ZjJkNDgwMDJlYTYxYzk5ZjVm
OWMxNzJlZTc5ZTU0MGIwLi41NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBA
IC01OSwxNCArNTksMTQgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAKLSAgICBpZiAoZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKCFpczxF
cnJvckV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSB0b0Vycm9yRXZl
bnQoZXZlbnQpOworICAgIEVycm9yRXZlbnQmIGVycm9yRXZlbnQgPSBkb3duY2FzdDxFcnJvckV2
ZW50PigqZXZlbnQpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKSk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+bWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsK
LSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+Y29sbm8oKSkpOworICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2ZW50Lm1lc3NhZ2Uo
KSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2
ZW50LmZpbGVuYW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVu
dC5saW5lbm8oKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LmNv
bG5vKCkpKTsKIAogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNWM3NmI2ZDQ1ZmIyZWRkNDNmODg2
MDExZGJmMGNjZjJlZjYyMjI0Ny4uNGFjNWUxOWU1YTcyY2Q2NzY4Mzc5NGViZGNkZmNmZjFhYjYy
MGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAgICAg
ICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwog
ICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5pc0JlZm9yZVVubG9hZEV2ZW50KCkpCi0gICAgICAgICAgICAgICAgdG9CZWZvcmVVbmxv
YWRFdmVudChldmVudCktPnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAm
JiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PEJlZm9yZVVubG9hZEV2ZW50PigqZXZlbnQpLnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCmluZGV4IGJiZTQxMTVjZDAyMjQ3ZWRiZjZlNzU0MGE5NzFiZGI0
OWI3NTRiZWQuLjc1NDIwMzU5Y2NlZTI0MzcwNTg2Mjg5Nzc3NzJhMmI3MzM5NTBiMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCkBAIC01MSw4ICs1
MSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZv
cmVVbmxvYWRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgK
aW5kZXggZWY3MmI3MzQ1MDU5Yjc5ZTM2ZTBjZmZjMzEwZGQ4NTEyZTA1NWQ0MS4uNTg3NjY5NmRj
MTU1YjUwZjRhNzMwODdjYjU5ZDFlYzI3ZTU2MjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9y
ZVVubG9hZEV2ZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9y
ZXR1cm5WYWx1ZTsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoQmVmb3JlVW5sb2FkRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChC
ZWZvcmVVbmxvYWRFdmVudCkKKwogI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5oCmluZGV4IGI1OGU3OWNjMGI3MzdhZWQyMTdkYjM0M2IzNzhkNTU4MmZm
MjUyOGMuLmM4ZGZkMzEwODM5MzAwOTBhMjIyM2JlMmIzOThjNDg4OWQzYmYxYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaApAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fY29sdW1uTnVtYmVyOwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhFcnJvckV2ZW50KQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRXJy
b3JFdmVudCkKKwogI2VuZGlmIC8vIEVycm9yRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAxYmU1
ZWJiODBhZTA3OTMzMzNjYTkzMjhjMjIxMzJhNTA5ZTYxMDRkLi42N2Y0MjZlMmI1ZGI1ZTQxY2Yx
NTQ5N2JiYjU3M2YxZWIwYmRiNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwNSwxMCArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50PiBtX3VuZGVy
bHlpbmdFdmVudDsKIH07CiAKLSNkZWZpbmUgRVZFTlRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBFdmVudCwgZXZlbnQs
IGV2ZW50LT5pcyMjVG9WYWx1ZVR5cGVOYW1lKCksIGV2ZW50LmlzIyNUb1ZhbHVlVHlwZU5hbWUo
KSkKLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkV2ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXMjI1RvVmFsdWVU
eXBlTmFtZSgpOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggYmZjYTlkMzlkOTI4
MTRiNTc0NDMzMzZmNzc1OTU5Nzk1MTJkZjVmOC4uY2M5NjI4MjljNzhmNGYxYjI4NTJhYjIzMGYz
OTkzY2FmOGQ5YjAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTc2LDEy
ICs3NiwxMiBAQCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKQogCiB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSk7CisgICAgQVNTRVJUKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBpczxGb2N1c0V2ZW50PihldmVudCkpOwogICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQp
IHsKLSAgICAgICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGV2ZW50LmlzRm9jdXNFdmVudCgpKQotICAgICAgICAgICAgdG9Gb2N1
c0V2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxN
b3VzZUV2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OworICAgICAgICBlbHNlIGlmIChpczxGb2N1c0V2ZW50PihldmVudCkpCisgICAgICAgICAgICBk
b3duY2FzdDxGb2N1c0V2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCkpOwogICAgIH0KICAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCmluZGV4IDkxYzg4N2U3ZjNlNmM3Mjc0NzBl
YmUwNDYxMmM3NTk1YjA0OGJmMzUuLmI5NjY4NjZlMGU3NDU1Yjg4MGE2OWEzYTg3MzUxZDYwYWNj
NDg1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuaApAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwogfTsKIAotRVZFTlRf
VFlQRV9DQVNUUyhGb2N1c0V2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRm9jdXNFdmVudCkKKwogI2VuZGlmIC8vIEZvY3VzRXZl
bnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCmluZGV4IGY5ZDgyOWRkZjYwMjU2
NjE4ZWY4MjNlNmFkYjZiZWVhMjBkOGIyNDEuLmI0MDMxNDBhOTgwZmEzODNjNjVkNWUzMDQyOGE5
NTQ1NmE0MWRlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKQEAgLTIyMCw5
ICsyMjAsOSBAQCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogS2V5Ym9hcmRFdmVu
dCogZmluZEtleWJvYXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAoRXZlbnQqIGUg
PSBldmVudDsgZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQotICAgICAgICBpZiAoZS0+aXNL
ZXlib2FyZEV2ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9LZXlib2FyZEV2ZW50KGUpOwot
ICAgIHJldHVybiAwOworICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZSkpCisgICAgICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZSk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9LZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5oCmluZGV4IDg2ODdiMWZmODZmNGI2YTMzYTZlYTQwMGUyOTQ5MjhjNTRmYzFjNWYuLmFiOTQ1
NzcxZDc1MDFmYWU2ZTEzMDllMGUzMzYwODNlNzFlNjU2ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuaApAQCAtMTE5LDEwICsxMTksMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAot
RVZFTlRfVFlQRV9DQVNUUyhLZXlib2FyZEV2ZW50KQotCiBLZXlib2FyZEV2ZW50KiBmaW5kS2V5
Ym9hcmRFdmVudChFdmVudCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRVZFTlQoS2V5Ym9hcmRFdmVudCkKKwogI2VuZGlmIC8vIEtleWJvYXJk
RXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCmluZGV4IGE5YWZlNjBiYzgxNTZhY2My
OGMyMTZmNjYzMDhiZTZkZjUwODU2NjguLjU4ZDNkNjBjZDE1MzM5MmQ2YTU2MmJkN2NkZTVlMTRl
YzVmNTljNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKQEAgLTI3NiwxMCArMjc2LDEw
IEBAIFNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQCiAgICAgfQogICAgIHNldFVuZGVybHlpbmdFdmVu
dCh1bmRlcmx5aW5nRXZlbnQpOwogCi0gICAgaWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYm
IHRoaXMtPnVuZGVybHlpbmdFdmVudCgpLT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBNb3Vz
ZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KHRoaXMtPnVuZGVybHlpbmdFdmVudCgp
KTsKLSAgICAgICAgbV9zY3JlZW5Mb2NhdGlvbiA9IG1vdXNlRXZlbnQtPnNjcmVlbkxvY2F0aW9u
KCk7Ci0gICAgICAgIGluaXRDb29yZGluYXRlcyhtb3VzZUV2ZW50LT5jbGllbnRMb2NhdGlvbigp
KTsKKyAgICBpZiAodGhpcy0+dW5kZXJseWluZ0V2ZW50KCkgJiYgaXM8TW91c2VFdmVudD4odGhp
cy0+dW5kZXJseWluZ0V2ZW50KCkpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQg
PSBkb3duY2FzdDxNb3VzZUV2ZW50PigqdGhpcy0+dW5kZXJseWluZ0V2ZW50KCkpOworICAgICAg
ICBtX3NjcmVlbkxvY2F0aW9uID0gbW91c2VFdmVudC5zY3JlZW5Mb2NhdGlvbigpOworICAgICAg
ICBpbml0Q29vcmRpbmF0ZXMobW91c2VFdmVudC5jbGllbnRMb2NhdGlvbigpKTsKICAgICB9IGVs
c2UgaWYgKHRhcmdldCkgewogICAgICAgICBtX3NjcmVlbkxvY2F0aW9uID0gdGFyZ2V0LT5zY3Jl
ZW5SZWN0KCkuY2VudGVyKCk7CiAgICAgICAgIGluaXRDb29yZGluYXRlcyhMYXlvdXRQb2ludCh0
YXJnZXQtPmNsaWVudFJlY3QoKS5jZW50ZXIoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL01vdXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKaW5k
ZXggNmRjNzZjODZiZDQxNGQwMjhkOTZlZTFmMTA3ZGY5NDNjMTYwZjVlNS4uYWZjN2JkZjA3OGRi
ZWMxMjM5OTBmMmI1Y2UyZGVlZjlmZTZmMWE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL01vdXNlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCkBA
IC0xMzIsOCArMTMyLDggQEAgcHJpdmF0ZToKICAgICBTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIFBhc3NS
ZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCwgRWxlbWVudCogdGFyZ2V0KTsKIH07CiAKLUVW
RU5UX1RZUEVfQ0FTVFMoTW91c2VFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKE1vdXNlRXZlbnQpCisKICNlbmRpZiAvLyBNb3Vz
ZUV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBmOGMzM2Q2NzQ0MTRlNDQxZDc4NDljYzVmMjI2
YjI1OWEzZGViMzhiLi45MGQ3N2UzMDEzODUwNDk1MWIyMjJmOTkxNzVhNmQ3YzQ4MzE0YWU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCkBAIC0yMTAwLDExICsyMTAwLDEyIEBAIHZvaWQgTm9kZTo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CiAgICAgaWYgKGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KQorICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIodG9LZXlib2Fy
ZEV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRl
ZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldmVudCkp
OworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQpIHsKLSAgICAgICAgaW50IGRldGFpbCA9IGV2ZW50LT5pc1VJRXZlbnQoKSA/IHRv
VUlFdmVudChldmVudCktPmRldGFpbCgpIDogMDsKKyAgICAgICAgaW50IGRldGFpbCA9IGlzPFVJ
RXZlbnQ+KGV2ZW50KSA/IGRvd25jYXN0PFVJRXZlbnQ+KCpldmVudCkuZGV0YWlsKCkgOiAwOwog
ICAgICAgICBpZiAoZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50KGRldGFpbCwgZXZlbnQpKQogICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAjaWYgRU5BQkxFKENPTlRFWFRf
TUVOVVMpCkBAIC0yMTE0LDEyICsyMTE1LDEzIEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCkuaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7CiAjZW5kaWYKICAgICB9IGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQpIHsKLSAgICAg
ICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRleHRFdmVudEludGVyZmFjZVR5cGUp
CisgICAgICAgIGlmIChpczxUZXh0RXZlbnQ+KGV2ZW50KSkgewogICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcih0b1RleHRFdmVudChl
dmVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0VGV4
dElucHV0RXZlbnRIYW5kbGVyKGRvd25jYXN0PFRleHRFdmVudD4oZXZlbnQpKTsKKyAgICAgICAg
fQogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsK
LSAgICAgICAgaWYgKHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IE1pZGRsZUJ1dHRv
bikgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYgKGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uKSB7CiAgICAgICAgICAg
ICBpZiAoZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogCkBAIC0yMTMzLDcgKzIxMzUsNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKLSAg
ICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGV2ZW50LT5ldmVudElu
dGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKSB7CisgICAgfSBlbHNlIGlmICgo
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2ZW50PihldmVudCkpIHsKIAog
ICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIHNlbmQgdGhlIHdoZWVsIGV2
ZW50IHRvIHRoZSBmaXJzdCBub2RlIHdlIGZpbmQgd2l0aCBhIHJlbmRlcmVyLgogICAgICAgICAv
LyBUaGlzIGlzIG5lZWRlZCBmb3IgPG9wdGlvbj4gYW5kIDxvcHRncm91cD4gZWxlbWVudHMgc28g
dGhhdCA8c2VsZWN0PnMgZ2V0IGEgd2hlZWwgc2Nyb2xsLgpAQCAtMjE0Myw3ICsyMTQ1LDcgQEAg
dm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgCiAg
ICAgICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKQogICAgICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKHN0YXJ0Tm9k
ZSwgdG9XaGVlbEV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihzdGFydE5vZGUsIGRvd25jYXN0PFdoZWVs
RXZlbnQ+KGV2ZW50KSk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgUExBVEZPUk0oSU9T
KQogICAgIH0gZWxzZSBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVG91Y2hFdmVudElu
dGVyZmFjZVR5cGUgJiYgZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkg
ewogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UZXh0RXZlbnQuaAppbmRleCBjNTU2ZTE1ZDc4MDdlODY2Yjc3YTM4NzhkODcyMDY3ZWQz
ZDk4NjU3Li44OGQwNjFmNDE1ZDM3YWVhZmYyZTNkNDRiNGY2MjU3ZDRkMjdjOWY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1RleHRFdmVudC5oCkBAIC04Nyw4ICs4Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZl
czsKICAgICB9OwogCi1FVkVOVF9UWVBFX0NBU1RTKFRleHRFdmVudCkKLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKFRleHRFdmVudCkKKwog
I2VuZGlmIC8vIFRleHRFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVUlF
dmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaAppbmRleCBkMzFlYmJjZDI2OWJh
YzZmMGYwZDA1ZTVlOTY0ZGNmZDQzNmNlNzdjLi5hYmE4NzU5MjcwZmMxZWNlOTFhZGM1MzNiMTRm
MDhiZTQ0MDcyNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgKQEAgLTg1LDggKzg1LDggQEAgcHJpdmF0
ZToKICAgICBpbnQgbV9kZXRhaWw7CiB9OwogCi1FVkVOVF9UWVBFX0NBU1RTKFVJRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChV
SUV2ZW50KQorCiAjZW5kaWYgLy8gVUlFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAppbmRl
eCBkZTNiZGQ4MjA3MDkxNGQ2ZDk1OGFjYzZmYjU5M2RhMjJhNmFmMjE3Li42NzA1ZDRhODhiMjdi
ZjdiOGI0MzhkYzAwNGUyNmQ0MWQyMWY0NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgKQEAg
LTExNCw4ICsxMTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbml0aWFsaXplZFdpdGhQbGF0
Zm9ybVdoZWVsRXZlbnQ7CiB9OwogCi1FVkVOVF9UWVBFX0NBU1RTKFdoZWVsRXZlbnQpCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChXaGVl
bEV2ZW50KQorCiAjZW5kaWYgLy8gV2hlZWxFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCmluZGV4IDVjNTMzNWY2NzUzYTI5NGJkZmE4NGYzNWQxZmY1ODVh
NDQ2ZTJkODcuLjkxNWUyYWFjZjk3YTYwMmU1ODc1MjQ3MWYwOTg5ZjU2YmEyM2RhZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC0xNTIsNyArMTUyLDcg
QEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2
ZW50KiBldmVudCkgY29uc3QKIAogc3RhdGljIHZvaWQgYXBwZW5kU2VydmVyTWFwTW91c2VQb3Np
dGlvbihTdHJpbmdCdWlsZGVyJiB1cmwsIEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50
LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CkBAIC0xNzAsNyArMTcw
LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU2VydmVyTWFwTW91c2VQb3NpdGlvbihTdHJpbmdCdWls
ZGVyJiB1cmwsIEV2ZW50KiBldmVudCkKICAgICBSZW5kZXJJbWFnZSYgcmVuZGVyZXIgPSB0b1Jl
bmRlckltYWdlKCppbWFnZUVsZW1lbnQucmVuZGVyZXIoKSk7CiAKICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgcGFzcyB0cnVlIGZvciB1c2VUcmFuc2Zvcm1zLgotICAgIEZsb2F0
UG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBv
aW50KHRvTW91c2VFdmVudChldmVudCktPnBhZ2VYKCksIHRvTW91c2VFdmVudChldmVudCktPnBh
Z2VZKCkpKTsKKyAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24gPSByZW5kZXJlci5hYnNv
bHV0ZVRvTG9jYWwoRmxvYXRQb2ludChkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnBhZ2VY
KCksIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkucGFnZVkoKSkpOwogICAgIGludCB4ID0g
YWJzb2x1dGVQb3NpdGlvbi54KCk7CiAgICAgaW50IHkgPSBhYnNvbHV0ZVBvc2l0aW9uLnkoKTsK
ICAgICB1cmwuYXBwZW5kKCc/Jyk7CkBAIC0xOTYsOSArMTk2LDkgQEAgdm9pZCBIVE1MQW5jaG9y
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIGlmICho
YXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgdHJhY2sgb2Yg
dGhlIGVkaXRhYmxlIGJsb2NrIHRoYXQgdGhlIHNlbGVjdGlvbiB3YXMgaW4gKGlmIGl0IHdhcyBp
biBvbmUpIGp1c3QgYmVmb3JlIHRoZSBsaW5rIHdhcyBjbGlja2VkCiAgICAgICAgICAgICAvLyBm
b3IgdGhlIExpdmVXaGVuTm90Rm9jdXNlZCBlZGl0YWJsZSBsaW5rIGJlaGF2aW9yCi0gICAgICAg
ICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYg
ZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpICE9
IFJpZ2h0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKSkgeworICAgICAgICAgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZl
bnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpICE9IFJp
Z2h0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKSkgewogICAgICAgICAgICAgICAgIHNldFJv
b3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bihkb2N1bWVudCgpLmZyYW1l
KCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgbV93YXNTaGlmdEtleURvd25Pbk1vdXNlRG93biA9IHRvTW91c2VFdmVudChl
dmVudCktPnNoaWZ0S2V5KCk7CisgICAgICAgICAgICAgICAgbV93YXNTaGlmdEtleURvd25Pbk1v
dXNlRG93biA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuc2hpZnRLZXkoKTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVy
RXZlbnQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgY2xlYXJlZCBvbiBtb3VzZW92
ZXIgYW5kIG5vdCBtb3VzZW91dCBiZWNhdXNlIHRoZWlyIHZhbHVlcyBhcmUgbmVlZGVkIGZvciBk
cmFnIGV2ZW50cywKICAgICAgICAgICAgICAgICAvLyBidXQgZHJhZyBldmVudHMgaGFwcGVuIGFm
dGVyIG1vdXNlIG91dCBldmVudHMuCkBAIC01NTUsOSArNTU1LDkgQEAgdm9pZCBIVE1MQW5jaG9y
RWxlbWVudDo6aGFuZGxlQ2xpY2soRXZlbnQqIGV2ZW50KQogCiBIVE1MQW5jaG9yRWxlbWVudDo6
RXZlbnRUeXBlIEhUTUxBbmNob3JFbGVtZW50OjpldmVudFR5cGUoRXZlbnQqIGV2ZW50KQogewot
ICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4o
ZXZlbnQpKQogICAgICAgICByZXR1cm4gTm9uTW91c2VFdmVudDsKLSAgICByZXR1cm4gdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKSA/IE1vdXNlRXZlbnRXaXRoU2hpZnRLZXkgOiBNb3Vz
ZUV2ZW50V2l0aG91dFNoaWZ0S2V5OworICAgIHJldHVybiBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpLnNoaWZ0S2V5KCkgPyBNb3VzZUV2ZW50V2l0aFNoaWZ0S2V5IDogTW91c2VFdmVudFdp
dGhvdXRTaGlmdEtleTsKIH0KIAogYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNM
aXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVudFR5cGUpIGNvbnN0CkBAIC01OTIsMTIgKzU5
MiwxMiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojp0cmVhdExpbmtBc0xpdmVGb3JFdmVudFR5
cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkgY29uc3QKIAogYm9vbCBpc0VudGVyS2V5S2V5ZG93bkV2
ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiB0b0tleWJv
YXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIkVudGVyIjsKKyAgICByZXR1cm4g
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJk
RXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpLmtleUlkZW50
aWZpZXIoKSA9PSAiRW50ZXIiOwogfQogCiBib29sIGlzTGlua0NsaWNrKEV2ZW50KiBldmVudCkK
IHsKLSAgICByZXR1cm4gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAm
JiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24o
KSAhPSBSaWdodEJ1dHRvbik7CisgICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgKCFpczxNb3VzZUV2ZW50PihldmVudCkgfHwgZG93bmNhc3Q8TW91
c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSAhPSBSaWdodEJ1dHRvbik7CiB9CiAKIGJvb2wgc2hv
dWxkUHJvaGliaXRMaW5rcyhFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxCdXR0b25FbGVtZW50LmNwcAppbmRleCA5MmUyNmE3YTZmZjAxZDY1ZGY5OGE0MTZjZjQ5Zjg5
NGYxMjExODAxLi40NTI5ZjhiMzM4YjllOWY0YjUzMWUzNjhmNTA4ODUwMzI2ODE5MDNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcApAQCAtMTIzLDI4ICsxMjMs
MjkgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVu
dCgpKSB7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3du
RXZlbnQgJiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpID09ICJVKzAw
MjAiKSB7CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgeworICAgICAgICBLZXli
b2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50
KTsKKyAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlk
b3duRXZlbnQgJiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsK
ICAgICAgICAgICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKICAgICAgICAgICAgIC8vIE5vIHNl
dERlZmF1bHRIYW5kbGVkKCkgLSBJRSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNl
LgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KHRvS2V5Ym9hcmRFdmVudChldmVudCktPmNoYXJDb2RlKCkpIHsKKyAgICAgICAgaWYgKGtleWJv
YXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGtleWJvYXJkRXZlbnQuY2hhckNvZGUoKSkgewogICAgICAgICAgICAgICAg
IGNhc2UgJ1xyJzoKLSAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhl
dmVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
ICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKCZrZXlib2FyZEV2ZW50
KTsKKyAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2FzZSAnICc6
CiAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nIGRvd24gdGhlIHBhZ2Uu
Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAg
ICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCAmJiB0b0tleWJvYXJk
RXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKKyAgICAgICAgaWYg
KGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50ICYmIGtleWJv
YXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICBpZiAo
YWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7
Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAg
ICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKCZrZXlib2FyZEV2ZW50KTsKKyAgICAgICAgICAgIGtl
eWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQu
Y3BwCmluZGV4IDRkMDdiZmNhOGE0MDQ2ODc5YWFjZTE4MmJkM2VlZTc1Y2ZiYjYyYWMuLjM1ZWE1
MmNiY2VjYmM0OTRjMGZmN2U2N2U0ZDM0NTljY2Q1OWZkOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcApAQCAtMTg3LDE1ICsxODcsMTUgQEAgdm9pZCBI
VE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsQXR0YWNoUmVuZGVyZXJzKCkKICAgICAgICAgbV9ub3Jl
c2l6ZSA9IGNvbnRhaW5pbmdGcmFtZVNldC0+bm9SZXNpemUoKTsKIH0KIAotdm9pZCBIVE1MRnJh
bWVTZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit2b2lkIEhUTUxG
cmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAg
IGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmICFtX25vcmVzaXplICYmIHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+aXNGcmFtZVNldCgpKSB7Ci0gICAgICAgIGlmICh0b1JlbmRlckZyYW1lU2V0
KHJlbmRlcmVyKCkpLT51c2VyUmVzaXplKHRvTW91c2VFdmVudChldnQpKSkgewotICAgICAgICAg
ICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVu
dCkgJiYgIW1fbm9yZXNpemUgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ZyYW1lU2V0
KCkpIHsKKyAgICAgICAgaWYgKHRvUmVuZGVyRnJhbWVTZXQocmVuZGVyZXIoKSktPnVzZXJSZXNp
emUoZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpKSkgeworICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
Ci0gICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKKyAgICBIVE1MRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKIGJvb2wgSFRNTEZyYW1lU2V0
RWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA0MzlhMGExY2ZiODdlZGQ4ZTI3YjUxOTdlMTZl
M2U5ZmVkOWVmYzM0Li4yZmVhYzhiNDcwOTk0ZGQ3NDAyODg3MDcxODE3YmJmNDc5ZmU0OTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEwMzIsNyArMTAz
Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6d2lsbERpc3BhdGNoRXZlbnQoRXZlbnQmIGV2
ZW50LCBJbnB1dEVsZW1lbnRDbGlja1N0YXRlJiBzCiB7CiAgICAgaWYgKGV2ZW50LnR5cGUoKSA9
PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgbV9pbnB1dFR5cGUtPnNob3VsZFN1Ym1p
dEltcGxpY2l0bHkoJmV2ZW50KSkKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0g
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBldmVudC5p
c01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoJmV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQg
JiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KS5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIG1faW5wdXRUeXBlLT53aWxsRGlzcGF0
Y2hDbGljayhzdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN0YXRlZnVsID0gdHJ1ZTsKICAgICB9CkBA
IC0xMDQ1LDggKzEwNDUsOCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZERpc3BhdGNoQ2xp
Y2tFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVudENsaQogCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKIHsKLSAgICBpZiAo
ZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tF
dmVudCAmJiB0b01vdXNlRXZlbnQoZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAg
ICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tFdmVudCh0b01vdXNlRXZlbnQoZXZ0KSk7Cisg
ICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2dCkuYnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tFdmVudChkb3duY2Fz
dDxNb3VzZUV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDU5LDggKzEwNTksOCBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKICAgICB9CiAj
ZW5kaWYKIAotICAgIGlmIChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRs
ZUtleWRvd25FdmVudCh0b0tleWJvYXJkRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPEtleWJvYXJk
RXZlbnQ+KGV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkg
eworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5ZG93bkV2ZW50KGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwODYsMTYgKzEwODYsMTcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAKICAgICAvLyBV
c2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZl
bnRzCiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUg
a2V5IHByZXNzIGV2ZW50LgotICAgIGlmIChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRU
eXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50KHRvS2V5Ym9hcmRFdmVudChldnQpKTsKLSAgICAgICAg
aWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5dXBFdmVudCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVu
dCh0b0tleWJvYXJkRXZlbnQoZXZ0KSk7Ci0gICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVk
KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkp
IHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KCpldnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5k
bGVLZXlwcmVzc0V2ZW50KCZrZXlib2FyZEV2ZW50KTsKKyAgICAgICAgICAgIGlmIChrZXlib2Fy
ZEV2ZW50LmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9IGVsc2UgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2
ZW50KSB7CisgICAgICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudCgma2V5Ym9h
cmRFdmVudCk7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5kZWZhdWx0SGFuZGxlZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICht
X2lucHV0VHlwZS0+c2hvdWxkU3VibWl0SW1wbGljaXRseShldnQpKSB7CkBAIC0xMTE3LDExICsx
MTE4LDExIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZ0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGV2dC0+aXNCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCgpKQotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQodG9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChldnQpKTsKKyAgICBpZiAo
aXM8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2dCkpCisgICAgICAgIG1faW5wdXRUeXBlLT5o
YW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChkb3duY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudD4oZXZ0KSk7CiAKLSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUt
PmhhbmRsZU1vdXNlRG93bkV2ZW50KHRvTW91c2VFdmVudChldnQpKTsKKyAgICBpZiAoaXM8TW91
c2VFdmVudD4oZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQpIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93bkV2ZW50KGRvd25jYXN0
PE1vdXNlRXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwCmluZGV4IDM2OTBlOWM3ZmVlYzEwYzQwOTIyN2FjNTk3ODVh
ODZiOTUzZTUwMDUuLjNiODY4ODQ5ZjMzNDNjN2Y1YzMzYWY3ZTZjYWQ3YWVjODEzMmFhY2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAt
NzQ3LDExICs3NDcsMTEgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBSZW5kZXJFbGVtZW50KiByID0gcmVuZGVy
ZXIoKTsKICAgICBpZiAociAmJiByLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAgICAgaWYg
KGlzUGx1Z0luSW1hZ2VFbGVtZW50KCkgJiYgZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNu
YXBzaG90ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50
ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50LT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgICAgICAgICAgdXNlckRpZENsaWNrU25hcHNo
b3QobW91c2VFdmVudCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBXYWl0aW5nRm9yU25hcHNo
b3QgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQpIHsKKyAgICAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBk
b3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQu
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICAgICAgICAgIHVzZXJEaWRDbGlja1Nu
YXBzaG90KCZtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNl
dERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmlu
ZGV4IGVjYzg3ZTI3NWNiNmI3NTU1ZGJlZGE0N2MyYWU2MGViY2Q4OGI5MDEuLmY5NjQ4ZGI5OGQx
OWJhMzAxZTQ1NTY3MTY1NDNlMzBiOTliNTVjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCkBAIC0xMTQ2LDEwICsxMTQ2LDExIEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAg
UmVmUHRyPFJlbmRlclRoZW1lPiByZW5kZXJUaGVtZSA9IHBhZ2UgPyAmcGFnZS0+dGhlbWUoKSA6
IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNLZXli
b2FyZEV2ZW50KCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVu
dCh0b0tleWJvYXJkRXZlbnQoZXZlbnQpKSkKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9h
cmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChw
bGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudCgma2V5Ym9hcmRFdmVudCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgLy8gV2hlbiB1c2luZyBzcGF0aWFsIG5hdmlnYXRpb24sIHdlIHdh
bnQgdG8gYmUgYWJsZSB0byBuYXZpZ2F0ZSBhd2F5CkBAIC0xMTYwLDcgKzExNjEsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0
IFN0cmluZyYga2V5SWRlbnRpZmllciA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50
aWZpZXIoKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRF
dmVudC5rZXlJZGVudGlmaWVyKCk7CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0SXRl
bXMoKTsKICAgICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVk
SW5kZXgoKSk7CkBAIC0xMTkyLDIyICsxMTkzLDIzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICBz
ZWxlY3RPcHRpb24obGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgRGVzZWxlY3RPdGhlck9w
dGlvbnMgfCBEaXNwYXRjaENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CiAKICAgICAgICAgaWYg
KGhhbmRsZWQpCi0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAKICAgICAv
LyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2Ug
ZXZlbnRzCiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0
aGUga2V5IHByZXNzIGV2ZW50LgogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBpbnQga2V5Q29kZSA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtl
eUNvZGUoKTsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0
PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGludCBrZXlDb2RlID0ga2V5Ym9hcmRF
dmVudC5rZXlDb2RlKCk7CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAg
IGlmIChrZXlDb2RlID09ICcgJyAmJiBpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVu
dCgpLmZyYW1lKCkpKSB7CiAgICAgICAgICAgICAvLyBVc2Ugc3BhY2UgdG8gdG9nZ2xlIGFycm93
IGtleSBoYW5kbGluZyBmb3Igc2VsZWN0aW9uIGNoYW5nZSBvciBzcGF0aWFsIG5hdmlnYXRpb24u
CiAgICAgICAgICAgICBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gIW1fYWN0aXZlU2VsZWN0aW9u
U3RhdGU7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
ICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0xMjQ2LDE3ICsxMjQ4LDE3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAg
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUg
PT0gJ1xyJykgewogICAgICAgICAgICAgICAgIGlmIChmb3JtKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICBmb3JtKCktPnN1Ym1pdEltcGxpY2l0bHkoJmtleWJvYXJkRXZlbnQsIGZhbHNlKTsK
ICAgICAgICAgICAgICAgICBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChoYW5kbGVkKQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
fQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3Vz
ZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgZm9jdXMo
KTsKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT5pc01lbnVMaXN0KCkpIHsKQEAgLTEzMzYsMzUgKzEzMzgsMzUgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewog
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0SXRl
bXMoKTsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZv
Y3VzKCk7CiAgICAgICAgIC8vIENhbGxpbmcgZm9jdXMoKSBtYXkgcmVtb3ZlIG9yIGNoYW5nZSBv
dXIgcmVuZGVyZXIsIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBoYW5kbGUgdGhlIGV2
ZW50IGZ1cnRoZXIuCiAgICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNM
aXN0Qm94KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gQ29udmVydCB0byBj
b29yZHMgcmVsYXRpdmUgdG8gdGhlIGxpc3QgYm94IGlmIG5lZWRlZC4KLSAgICAgICAgTW91c2VF
dmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgICAgIEludFBvaW50
IGxvY2FsT2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2Nh
bChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICAg
ICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7
CisgICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHJlbmRlcmVy
KCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJh
bnNmb3JtcykpOwogICAgICAgICBpbnQgbGlzdEluZGV4ID0gdG9SZW5kZXJMaXN0Qm94KHJlbmRl
cmVyKCkpLT5saXN0SW5kZXhBdE9mZnNldCh0b0ludFNpemUobG9jYWxPZmZzZXQpKTsKICAgICAg
ICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgICAgICBpZiAoIWlzRGlzYWJsZWRGb3Jt
Q29udHJvbCgpKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICAgICAgdXBkYXRl
U2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZlbnQtPm1ldGFLZXkoKSwgbW91c2VFdmVu
dC0+c2hpZnRLZXkoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShsaXN0
SW5kZXgsIG1vdXNlRXZlbnQubWV0YUtleSgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5KCkpOwogI2Vs
c2UKLSAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJbmRleCwgbW91c2VF
dmVudC0+Y3RybEtleSgpLCBtb3VzZUV2ZW50LT5zaGlmdEtleSgpKTsKKyAgICAgICAgICAgICAg
ICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJbmRleCwgbW91c2VFdmVudC5jdHJsS2V5KCksIG1v
dXNlRXZlbnQuc2hpZnRLZXkoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldE1vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCgpOwog
Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1v
dXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgZXZlbnQtPmlz
TW91c2VFdmVudCgpICYmICF0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2FuQmVTY3JvbGxlZEFu
ZEhhc1Njcm9sbGFibGVBcmVhKCkpIHsKLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9
IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgICAgIGlmIChtb3VzZUV2ZW50LT5idXR0b24oKSAh
PSBMZWZ0QnV0dG9uIHx8ICFtb3VzZUV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCAmJiBpczxNb3Vz
ZUV2ZW50PihldmVudCkgJiYgIXRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jYW5CZVNjcm9sbGVk
QW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50
ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnQu
YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbiB8fCAhbW91c2VFdmVudC5idXR0b25Eb3duKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3VuZGVk
SW50UG9pbnQocmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRl
TG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOworICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNl
dCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVu
dC5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKICAgICAgICAgaW50IGxpc3RJ
bmRleCA9IHRvUmVuZGVyTGlzdEJveChyZW5kZXJlcigpKS0+bGlzdEluZGV4QXRPZmZzZXQodG9J
bnRTaXplKGxvY2FsT2Zmc2V0KSk7CiAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCkgewogICAg
ICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewpAQCAtMTM4MSw5ICsxMzgz
LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9u
KHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRv
TW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigp
KSB7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLmF1dG9zY3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpIHsKICAgICAgICAg
Ly8gVGhpcyBjbGljayBvciBkcmFnIGV2ZW50IHdhcyBub3Qgb3ZlciBhbnkgb2YgdGhlIG9wdGlv
bnMuCiAgICAgICAgIGlmIChtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMzkyLDkgKzEzOTQsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAv
LyB0aW1lciBzdG9wcy4KICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAg
aWYgKCFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRF
dmVudD4oZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCBTdHJpbmcm
IGtleUlkZW50aWZpZXIgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCk7
CisKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9
IGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpOwogCiAgICAgICAgIGJvb2wgaGFuZGxlZCA9
IGZhbHNlOwogICAgICAgICBpbnQgZW5kSW5kZXggPSAwOwpAQCAtMTQ1NiwxNSArMTQ2MCwxNSBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBtX2FsbG93c05vbkNv
bnRpZ3VvdXNTZWxlY3Rpb24gPSBtX211bHRpcGxlICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGRvY3VtZW50KCkuZnJhbWUoKSk7CiAjZWxzZQotICAgICAgICAgICAgbV9hbGxvd3NOb25D
b250aWd1b3VzU2VsZWN0aW9uID0gbV9tdWx0aXBsZSAmJiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVu
YWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgpKSB8fCB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5jdHJs
S2V5KCkpOworICAgICAgICAgICAgbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0aW9uID0gbV9t
dWx0aXBsZSAmJiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgp
KSB8fCBrZXlib2FyZEV2ZW50LmN0cmxLZXkoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wg
c2VsZWN0TmV3SXRlbSA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPnNoaWZ0S2V5KCkgfHwgIW1f
YWxsb3dzTm9uQ29udGlndW91c1NlbGVjdGlvbjsKKyAgICAgICAgICAgIGJvb2wgc2VsZWN0TmV3
SXRlbSA9IGtleWJvYXJkRXZlbnQuc2hpZnRLZXkoKSB8fCAhbV9hbGxvd3NOb25Db250aWd1b3Vz
U2VsZWN0aW9uOwogCiAgICAgICAgICAgICBpZiAoc2VsZWN0TmV3SXRlbSkKICAgICAgICAgICAg
ICAgICBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIElmIHRo
ZSBhbmNob3IgaXMgdW5pdGlhbGl6ZWQsIG9yIGlmIHdlJ3JlIGdvaW5nIHRvIGRlc2VsZWN0IGFs
bAogICAgICAgICAgICAgLy8gb3RoZXIgb3B0aW9ucywgdGhlbiBzZXQgdGhlIGFuY2hvciBpbmRl
eCBlcXVhbCB0byB0aGUgZW5kIGluZGV4LgotICAgICAgICAgICAgYm9vbCBkZXNlbGVjdE90aGVy
cyA9ICFtX211bHRpcGxlIHx8ICghdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKSAm
JiBzZWxlY3ROZXdJdGVtKTsKKyAgICAgICAgICAgIGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhbV9t
dWx0aXBsZSB8fCAoIWtleWJvYXJkRXZlbnQuc2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVtKTsK
ICAgICAgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8fCBkZXNl
bGVjdE90aGVycykgewogICAgICAgICAgICAgICAgIGlmIChkZXNlbGVjdE90aGVycykKICAgICAg
ICAgICAgICAgICAgICAgZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKCk7CkBAIC0xNDc4
LDE3ICsxNDgyLDE4IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7CiAKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgaW50IGtleUNvZGUgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlD
b2RlKCk7CisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxL
ZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpbnQga2V5Q29kZSA9IGtleWJvYXJkRXZl
bnQua2V5Q29kZSgpOwogCiAgICAgICAgIGlmIChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAg
ICAgIGlmIChmb3JtKCkpCi0gICAgICAgICAgICAgICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5
KGV2ZW50LCBmYWxzZSk7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICAgICAgICAgICAgICBmb3JtKCktPnN1Ym1pdEltcGxpY2l0bHkoJmtleWJvYXJkRXZlbnQs
IGZhbHNlKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICAgICAgfSBlbHNlIGlmIChtX211bHRpcGxlICYmIGtleUNvZGUgPT0gJyAnICYmIG1fYWxs
b3dzTm9uQ29udGlndW91c1NlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gVXNlIHNwYWNlIHRv
IHRvZ2dsZSBzZWxlY3Rpb24gY2hhbmdlLgogICAgICAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25T
dGF0ZSA9ICFtX2FjdGl2ZVNlbGVjdGlvblN0YXRlOwpAQCAtMTQ5Nyw3ICsxNTAyLDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgICAgICAgICAgQVNTRVJUKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1z
W21fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXhdKSk7CiAgICAgICAgICAgICB1cGRhdGVTZWxlY3Rl
ZFN0YXRlKG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgsIHRydWUgLyptdWx0aSovLCBmYWxzZSAv
KnNoaWZ0Ki8pOwogICAgICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7Ci0gICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0
RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE1MjMsOSArMTUyOCw5
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYg
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7Ci0gICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJv
YXJkRXZlbnQgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpOwotICAgICAgICBpZiAoIWtleWJvYXJk
RXZlbnQtPmN0cmxLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC0+YWx0S2V5KCkgJiYgIWtleWJvYXJk
RXZlbnQtPm1ldGFLZXkoKSAmJiB1X2lzcHJpbnQoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSkp
IHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAm
JiBpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5
Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlm
ICgha2V5Ym9hcmRFdmVudC5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQuYWx0S2V5KCkgJiYg
IWtleWJvYXJkRXZlbnQubWV0YUtleSgpICYmIHVfaXNwcmludChrZXlib2FyZEV2ZW50LmNoYXJD
b2RlKCkpKSB7CiAgICAgICAgICAgICB0eXBlQWhlYWRGaW5kKGtleWJvYXJkRXZlbnQpOwogICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xNTY1LDkgKzE1NzAsOSBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0
SW5kZXgoaW50IGluZGV4KSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKIH0KIAot
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50KiBldmVu
dCkKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgaW50IGluZGV4ID0gbV90eXBlQWhlYWQuaGFuZGxlRXZlbnQoZXZlbnQs
IFR5cGVBaGVhZDo6TWF0Y2hQcmVmaXggfCBUeXBlQWhlYWQ6OkN5Y2xlRmlyc3RDaGFyKTsKKyAg
ICBpbnQgaW5kZXggPSBtX3R5cGVBaGVhZC5oYW5kbGVFdmVudCgmZXZlbnQsIFR5cGVBaGVhZDo6
TWF0Y2hQcmVmaXggfCBUeXBlQWhlYWQ6OkN5Y2xlRmlyc3RDaGFyKTsKICAgICBpZiAoaW5kZXgg
PCAwKQogICAgICAgICByZXR1cm47CiAgICAgc2VsZWN0T3B0aW9uKGxpc3RUb09wdGlvbkluZGV4
KGluZGV4KSwgRGVzZWxlY3RPdGhlck9wdGlvbnMgfCBEaXNwYXRjaENoYW5nZUV2ZW50IHwgVXNl
ckRyaXZlbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKaW5kZXggMjdm
ZWZkNjBiNGZjZGJhYzEzOTFlZDZlODljOWE4YWZmNTM2OTY2NC4uZGE3ZjE1YTg5YTA1Y2Q3Mjhj
MzJhNjU1OTJhMDVkZTRhMmNjMGIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaApAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNhbGNMaXN0
SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0OwogCiAgICAgdm9p
ZCBkZXNlbGVjdEl0ZW1zKEhUTUxPcHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCA9IDApOwot
ICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCB0eXBlQWhl
YWRGaW5kKEtleWJvYXJkRXZlbnQmKTsKICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAK
ICAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENv
bnRhaW5lck5vZGUmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFN1bW1hcnlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlF
bGVtZW50LmNwcAppbmRleCBlYzZjM2EyMGZmOTliYTJjOTQxNDkzM2ViZDZhOGE5MDhjM2E2ODQy
Li4xMTJkMmZkMzYyNGMxOWQyODg0NjY3NGQ3Yzg4NTU1NTMxOTYwMWM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCkBAIC0xMjYsMjggKzEyNiwyOSBAQCB2
b2lkIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZXZlbnQtPmlz
S2V5Ym9hcmRFdmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50
aWZpZXIoKSA9PSAiVSswMDIwIikgeworICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZl
bnQpKSB7CisgICAgICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNh
c3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5
SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlKHRy
dWUsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5kbGVkKCkgLSBJ
RSBkaXNwYXRjaGVzIGEga2V5cHJlc3MgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0b0tl
eWJvYXJkRXZlbnQoZXZlbnQpLT5jaGFyQ29kZSgpKSB7CisgICAgICAgICAgICBpZiAoa2V5Ym9h
cmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGtleWJvYXJkRXZlbnQuY2hhckNvZGUoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgJ1xyJzoKICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
ayhldmVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBjYXNlICcgJzoK
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4K
LSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50ICYm
IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewor
ICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1
cEV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSgpKQogICAgICAgICAgICAgICAgICAgICBkaXNwYXRj
aFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAyYTRj
NWM1YWNmMWFiM2M5NmQ0ZGM1MzQ5YzdjMjkwNTIyN2U2YmM1Li4zNWZhZTEyYzY0NjYyNTZmNTg5
ZjZiMzA5MDMzMjJiZjVkYjVkMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKQEAgLTI3MCw4ICsyNzAsOCBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChyZW5kZXJl
cigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwg
ZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAgICAgZm9yd2FyZEV2
ZW50KGV2ZW50KTsKLSAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KCkpCi0gICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KHRvQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoZXZlbnQpKTsKKyAgICBlbHNlIGlmIChyZW5kZXJl
cigpICYmIGlzPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkpCisgICAgICAgIGhhbmRs
ZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
PihldmVudCkpOwogCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKaW5k
ZXggMWViZWM3N2MxMWMxMDAzYTU1OTMzZDAxZGE3NzQzNWZkNmYyMDFkNC4uY2M5YmRjOTkwYTY4
NTZmMGE4ZDYzYjkxZGViZjU5MTVhYzFlMGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCkBAIC0zOTgsOCArMzk4LDggQEAgdm9pZCBJbWFnZUV2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpCiB7CiAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KQogICAgICAgICBt
X2RvY3VtZW50LndpbmRvd1NpemVDaGFuZ2VkKCk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsK
LSAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IHRvTW91c2VFdmVudCgqZXZlbnQpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYg
aXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQg
PSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwogICAgICAgICBtX2RvY3VtZW50LmltYWdl
Q2xpY2tlZChtb3VzZUV2ZW50LngoKSwgbW91c2VFdmVudC55KCkpOwogICAgIH0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKaW5kZXggZDBlMjViZTE5MDdlM2M5MmVhZmUz
NjgzNmQ4ODFkNjJiZjhjYjUwOC4uMjg5YTllZDI1ZWFjYzQyYWRmYTkwZGQwODhkZjc5ZTgzNDhi
N2M2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKQEAgLTg5LDggKzg5
LDggQEAgdm9pZCBJbWFnZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCog
ZXZlbnQpCiAgICAgbV9jbGlja0xvY2F0aW9uID0gSW50UG9pbnQoKTsKICAgICBpZiAoZXZlbnQt
PnVuZGVybHlpbmdFdmVudCgpKSB7CiAgICAgICAgIEV2ZW50JiB1bmRlcmx5aW5nRXZlbnQgPSAq
ZXZlbnQtPnVuZGVybHlpbmdFdmVudCgpOwotICAgICAgICBpZiAodW5kZXJseWluZ0V2ZW50Lmlz
TW91c2VFdmVudCgpKSB7Ci0gICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gdG9N
b3VzZUV2ZW50KHVuZGVybHlpbmdFdmVudCk7CisgICAgICAgIGlmIChpczxNb3VzZUV2ZW50Pih1
bmRlcmx5aW5nRXZlbnQpKSB7CisgICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0g
ZG93bmNhc3Q8TW91c2VFdmVudD4odW5kZXJseWluZ0V2ZW50KTsKICAgICAgICAgICAgIGlmICgh
bW91c2VFdmVudC5pc1NpbXVsYXRlZCgpKQogICAgICAgICAgICAgICAgIG1fY2xpY2tMb2NhdGlv
biA9IEludFBvaW50KG1vdXNlRXZlbnQub2Zmc2V0WCgpLCBtb3VzZUV2ZW50Lm9mZnNldFkoKSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCAxNTcwMjZkODlkMmE0
MDhhOGIxNTJkNTE1ZDg1YWIwMmQ2NWQ1OGM5Li4zYjIyN2FiMDBjNDk4NDYxNmJiMDhmMTI1ODIy
MzNjMTg2Yjc0NDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC00NzEsNyArNDcx
LDcgQEAgdm9pZCBJbnB1dFR5cGU6OmZvcndhcmRFdmVudChFdmVudCopCiAKIGJvb2wgSW5wdXRU
eXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4g
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQgJiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y2hhckNvZGUoKSA9PSAn
XHInOworICAgIHJldHVybiBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBkb3duY2FzdDxLZXlib2FyZEV2ZW50
PigqZXZlbnQpLmNoYXJDb2RlKCkgPT0gJ1xyJzsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9ybUVs
ZW1lbnQ+IElucHV0VHlwZTo6Zm9ybUZvclN1Ym1pc3Npb24oKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvTWVkaWFEb2N1bWVudC5jcHAKaW5kZXggOWYwN2ZhM2RkZWI5ZTA5ZDQxZDdjMmU2M2YzMzEy
N2U4MTJmZjZmNC4uN2RhOWJiODQ1MGFlYWU0MmZjZDUzY2UxMjhiYjEwYzY2MDhkNzQ1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwCkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2
b2lkIE1lZGlhRG9jdW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAg
IGlmICghaXM8Q29udGFpbmVyTm9kZT4odGFyZ2V0Tm9kZSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBDb250YWluZXJOb2RlJiB0YXJnZXRDb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXJOb2Rl
PigqdGFyZ2V0Tm9kZSk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eWRvd25FdmVudCAmJiBldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKKyAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+
KGV2ZW50KSkgewogICAgICAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyA9IGRlc2NlbmRlbnRW
aWRlb0VsZW1lbnQodGFyZ2V0Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCF2aWRlbykKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0g
dG9LZXlib2FyZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQtPmtleUlk
ZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeyAvLyBzcGFjZQorICAgICAgICBLZXlib2FyZEV2ZW50
JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAg
ICAgaWYgKGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7IC8vIHNw
YWNlCiAgICAgICAgICAgICBpZiAodmlkZW8tPnBhdXNlZCgpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKHZpZGVvLT5jYW5QbGF5KCkpCiAgICAgICAgICAgICAgICAgICAgIHZpZGVvLT5wbGF5KCk7
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB2aWRlby0+cGF1c2UoKTsKLSAg
ICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAga2V5Ym9h
cmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IGUxNTAxNDliYzE0MDli
MWE3MTU1MjViMTcxZWUzYjBhYTY2ZGJhNDMuLjdhOWZlMTQxNmIyMzE0OWJhMTc2MDA4ZDYxYmQy
YjI2Zjc2NTdiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAKQEAgLTIwNiw3ICsyMDYsOCBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmx1
ckV2ZW50KCkKIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0
bHkoRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2
ZW50SW50ZXJmYWNlVHlwZSAmJiB0b1RleHRFdmVudChldmVudCktPmRhdGEoKSA9PSAiXG4iKSB8
fCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOworICAgIHJldHVybiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgaXM8VGV4dEV2
ZW50PihldmVudCkgJiYgZG93bmNhc3Q8VGV4dEV2ZW50PigqZXZlbnQpLmRhdGEoKSA9PSAiXG4i
KQorICAgICAgICB8fCBJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOwog
fQogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVJ
bnB1dFJlbmRlcmVyKFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKaW5k
ZXggOWU4M2U2MmY5NjdiZjE2YjA5YjRhMTI2MmY2OGJiOGU5MWU5Mzk3YS4uMjYzODYzYmU3MDYw
Y2Q5NWFlZDU5NzhkOWUzZWMwNGUzMjA4ODAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCkBAIC0xOTYsNyAr
MTk2LDcgQEAgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9s
dW1lU2xpZGVyRWxlbWVudChEb2N1bWVudCYgZG9jdW0KIHZvaWQgTWVkaWFDb250cm9sVm9sdW1l
U2xpZGVyRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAg
Ly8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBi
dXR0b24uCi0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZl
bnQpLT5idXR0b24oKSkKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghcmVuZGVyZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcAppbmRleCBkNWE0NTZiYTk4MzJjZjlhZDk5ZGUzOWMwYzBhZDQ3
MGI0ODAyNzk3Li4zMmYzYTUzMzRkY2NkMzZmOTg4MmM5ZTgxNmFiNjkxMjhlYTgxZWQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwCkBAIC0yMjEsOCArMjIxLDggQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIE1lZGlhQ29udHJvbERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogCi0gICAgaWYgKGV2ZW50LT5pc01v
dXNlRXZlbnQoKSkgewotICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IHRvTW91c2VFdmVu
dChldmVudCktPmFic29sdXRlTG9jYXRpb24oKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZl
bnQpKSB7CisgICAgICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVu
dD4oKmV2ZW50KS5hYnNvbHV0ZUxvY2F0aW9uKCk7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+dGFyZ2V0KCkgPT0gdGhp
cykgewogICAgICAgICAgICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtMzM3LDEyICszMzcsMTIgQEAgUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNy
ZWF0ZUVsZW1lbnQKIAogdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50
LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91
dEV2ZW50KQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8IGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFBvb3IgbWFuJ3MgbW91c2VsZWF2ZSBldmVudCBkZXRlY3Rpb24uCi0gICAgTW91c2VFdmVudCog
bW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgRXZlbnRUYXJnZXQqIHJlbGF0
ZWRUYXJnZXQgPSBtb3VzZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgTW91c2VFdmVudCYg
bW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgRXZlbnRUYXJn
ZXQqIHJlbGF0ZWRUYXJnZXQgPSBtb3VzZUV2ZW50LnJlbGF0ZWRUYXJnZXQoKTsKICAgICBpZiAo
IXJlbGF0ZWRUYXJnZXQgfHwgIXJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTg1MSw3ICs4NTEsNyBAQCBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5l
RWxlbWVudD4gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpjcmVhdGUoRG9jdQogdm9pZCBN
ZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogewogICAgIC8vIExlZnQgYnV0dG9uIGlzIDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5v
dCBmcm9tIGxlZnQgYnV0dG9uLgotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9N
b3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkpCisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50
KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbHMuY3BwCmluZGV4IGZhMWJlYmY0MzYwMzMwMDI4ZjBkNWEwMjY1NzQyNTM3
NzZkOGJiMWUuLjRkM2VjZjgwZDI5MmZhMjU1Mzc1YmRmNGE2YWYzZDQ5ZTQzMGI2M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCkBAIC0zNjYsOSAr
MzY2LDkgQEAgdm9pZCBNZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1Rp
bWVyKCkKIAogYm9vbCBNZWRpYUNvbnRyb2xzOjpjb250YWluc1JlbGF0ZWRUYXJnZXQoRXZlbnQq
IGV2ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8
TW91c2VFdmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRXZlbnRUYXJn
ZXQqIHJlbGF0ZWRUYXJnZXQgPSB0b01vdXNlRXZlbnQoZXZlbnQpLT5yZWxhdGVkVGFyZ2V0KCk7
CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpLnJlbGF0ZWRUYXJnZXQoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gY29udGFpbnMocmVsYXRlZFRhcmdldC0+dG9Ob2Rl
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
c0FwcGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBs
ZS5jcHAKaW5kZXggMTE5NmE3MTg3NjYwYjdlMzUwMjdkNDU2NTNjMzkzOTAwNjNlZmMzZS4uOGM4
NGRhNzNiZjY2MDBmNDVjMTQyYjYzMzRlYWE2MzRjNDNkOGU4NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCkBAIC01ODgsMTAgKzU4
OCwxMCBAQCB2b2lkIE1lZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudAogewogICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQogICAgICAgICBtX21lZGlhQ29udHJvbHMtPmhh
bmRsZUNsaWNrRXZlbnQoZXZlbnQpOwotICAgIGVsc2UgaWYgKChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNld2hlZWxFdmVudCkgJiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudElu
dGVyZmFjZVR5cGUpIHsKLSAgICAgICAgV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHRvV2hlZWxF
dmVudChldmVudCk7Ci0gICAgICAgIGlmIChtX21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENh
cHRpb25zQ29udGFpbmVyUHJldmVudFBhZ2VTY3JvbGxpbmcod2hlZWxFdmVudC0+d2hlZWxEZWx0
YVkoKSkpCi0gICAgICAgICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKKyAgICBlbHNlIGlm
ICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGlzPFdoZWVsRXZlbnQ+KGV2
ZW50KSkgeworICAgICAgICBXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gZG93bmNhc3Q8V2hlZWxF
dmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKG1fbWVkaWFDb250cm9scy0+c2hvdWxkQ2xvc2Vk
Q2FwdGlvbnNDb250YWluZXJQcmV2ZW50UGFnZVNjcm9sbGluZyh3aGVlbEV2ZW50LndoZWVsRGVs
dGFZKCkpKQorICAgICAgICAgICAgd2hlZWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVu
dC5jcHAKaW5kZXggODFjMjA2ODBkOTI1Y2E4MjAyODViMmZmNTYzZGYyYTUxYjJhYzBjYi4uMjJi
ZTYzYjQ3NWUwOTUxMjc1Njc4Yjg0OGZiYWI1ZDMyODY0OWQ3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0zMzMsNyArMzMz
LDcgQEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OnN0b3BEcmFnZ2luZygpCiAjaWYgIVBMQVRG
T1JNKElPUykKIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgIGlm
ICghaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Nyw5
ICszNDcsOSBAQCB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKLSAgICBib29sIGlzTGVmdEJ1dHRvbiA9
IG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b247Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZl
bnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgIGJvb2wgaXNMZWZ0QnV0dG9u
ID0gbW91c2VFdmVudC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlID0gbW91c2VFdmVudC50eXBlKCk7CiAKICAgICAvLyBXZSBpbnRlbnRp
b25hbGx5IGRvIG5vdCBjYWxsIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpIGhlcmUgYmVjYXVz
ZQogICAgIC8vIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cigpIHdhbnRzIHRvIGhhbmRsZSB0aGVzZQpAQCAtMzYyLDExICszNjIsMTEgQEAgdm9pZCBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
bW92ZUV2ZW50KSB7CiAgICAgICAgIGlmIChtX2luRHJhZ01vZGUpCi0gICAgICAgICAgICBzZXRQ
b3NpdGlvbkZyb21Qb2ludChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOworICAgICAg
ICAgICAgc2V0UG9zaXRpb25Gcm9tUG9pbnQobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0aW9uKCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOworICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKCZtb3VzZUV2ZW50KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAKaW5kZXggNTAzYjM1YjZiZjVhNzgxNWRkNzFl
N2E5YzYxOThhZGM4NzIwMDZlNS4uZmUzY2EzYmYzMmY3YmNmNzM0ODhhNWM2OGIyYmNhN2JjMGRj
YjFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojp3aWxsRGV0
YWNoUmVuZGVyZXJzKCkKIAogdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsK
KyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgewogICAgICAgICBpZiAoIWV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwogICAgICAgICByZXR1cm47CkBAIC04Niw5ICs4Niw5IEBAIHZvaWQg
U3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91
c2VFdmVudChldmVudCk7Ci0gICAgSW50UG9pbnQgbG9jYWwgPSByb3VuZGVkSW50UG9pbnQoYm94
LT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFu
c2Zvcm1zKSk7Ci0gICAgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAg
IE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwor
ICAgIEludFBvaW50IGxvY2FsID0gcm91bmRlZEludFBvaW50KGJveC0+YWJzb2x1dGVUb0xvY2Fs
KG1vdXNlRXZlbnQuYWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgaWYg
KG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3Vz
ZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKGJveC0+cGl4ZWxT
bmFwcGVkQm9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgICAgICAgLy8g
VGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgb2YgSFRNTElucHV0RWxlbWVudCBtYXkgcnVuIEphdmFT
Y3JpcHQKICAgICAgICAgICAgIC8vIGNvZGUgd2hpY2ggZGV0YWNoZXMgdGhpcyBzaGFkb3cgbm9k
ZS4gV2UgbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNlCkBAIC0xMDcsMTEgKzEwNywxMSBAQCB2b2lk
IFNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICAgICAgICAgICAgICAgICAgZG9TdGVwQWN0aW9uKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDog
LTEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0
SGFuZGxlZCgpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKQorICAgIH0gZWxzZSBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pCiAg
ICAgICAgIHN0b3BSZXBlYXRpbmdUaW1lcigpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CisgICAgZWxzZSBpZiAobW91c2VFdmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CiAgICAgICAgIGlmIChi
b3gtPnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKS5jb250YWlucyhsb2NhbCkpIHsKICAgICAg
ICAgICAgIGlmICghbV9jYXB0dXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKSB7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBTcGlu
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBI
VE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgaWYgKCFtb3Vz
ZUV2ZW50LmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKCZtb3VzZUV2ZW50KTsKIH0KIAogdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6
d2lsbE9wZW5Qb3B1cCgpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVu
dDo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKICAgICBpZiAoIXJlbmRlckJveCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgIT0gV2hlZWxF
dmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3NwaW5CdXR0b25Pd25lcikKQEAgLTE1NSw3ICsxNTUs
NyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQog
ICAgIGlmICghbV9zcGluQnV0dG9uT3duZXItPnNob3VsZFNwaW5CdXR0b25SZXNwb25kVG9XaGVl
bEV2ZW50cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb1N0ZXBBY3Rpb24odG9XaGVlbEV2
ZW50KGV2ZW50KS0+d2hlZWxEZWx0YVkoKSk7CisgICAgZG9TdGVwQWN0aW9uKGRvd25jYXN0PFdo
ZWVsRXZlbnQ+KCpldmVudCkud2hlZWxEZWx0YVkoKSk7CiAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDE5MmY4ZTAwNjNmYTVhMDhlOGY0ODIx
ZmRlZGUwM2ZmZTIwYWQwMWMuLjdiMjk1M2Q4NzhiOTBhZDMyMWZhNWRkMmIyZjFiMDc0ZWI2YmRm
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7
CiAgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRlZAogICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93
SG9zdCgpKTsKLSAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChl
dmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoaW5wdXQgJiYgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
ZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgp
OwogI2lmICFQTEFURk9STShJT1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNl
RXZlbnQoZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0
b24pIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5m
cmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1
cmluZ01vdXNlRXZlbnRzRWxlbWVudCh0aGlzKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CiAgICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChl
dmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBk
b3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAg
ICAgICAgaWYgKG1fY2FwdHVyaW5nKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxl
cigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudChudWxscHRyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggODU2
OTA5NjhkZWM0YWIwOGM5Yjg4NGE5MzhjMWE0NjkxZDE4ZWRhOS4uMDMzYWFjODNlMDczOTljYjJm
OTAwNjI1MjNlNmMwNDU3NmM5ZmI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTI4NCwxMiArMjg0LDEyIEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25z
dCBWZWN0b3I8Q29udGV4dE1lCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hF
dmVudEFzQ29udGV4dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpICYmIFVTRShBQ0NFU1NJQklMSVRZX0NPTlRFWFRfTUVOVVMpCi0gICAgaWYgKCFl
dmVudCB8fCAhZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghZXZlbnQgfHwgIWlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIGZyYW1lID0g
ZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIE1vdXNl
RXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgIEludFBvaW50IG1v
dXNlUG9pbnQgPSBJbnRQb2ludChtb3VzZUV2ZW50LT5jbGllbnRYKCksIG1vdXNlRXZlbnQtPmNs
aWVudFkoKSk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZl
bnQ+KCpldmVudCk7CisgICAgSW50UG9pbnQgbW91c2VQb2ludCA9IEludFBvaW50KG1vdXNlRXZl
bnQuY2xpZW50WCgpLCBtb3VzZUV2ZW50LmNsaWVudFkoKSk7CiAKICAgICBtX2Zyb250ZW5kUGFn
ZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuc2hvd0NvbnRleHRNZW51QXQoZnJhbWUsIG1vdXNl
UG9pbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9s
bGVyLmNwcAppbmRleCBhM2Y1OTA3ZTRkNDdmMjA0YWFiMzk0YjhjMDIzYjhlNWRkMzEyOWNhLi43
NmU4ODFjZTI4ZWJlN2VjNzJkN2MyMjBlMmQwMTRkNzcxOGY1OGZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsMTAgKzE1MCwxMCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q29udHJvbGxlcjo6bWF5
YmVDcmVhdGVDb250ZXh0TWVudShFdmVudAogewogICAgIEFTU0VSVChldmVudCk7CiAgICAgCi0g
ICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50Pihl
dmVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTW91c2VFdmVudCYgbW91c2VF
dmVudCA9IHRvTW91c2VFdmVudCgqZXZlbnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQg
PSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
KG1vdXNlRXZlbnQuYWJzb2x1dGVMb2NhdGlvbigpKTsKIAogICAgIE5vZGUqIG5vZGUgPSBldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmlu
ZGV4IDMzYTlhNTM4OWJjYzlmNDM4MTc1NjdmMzM3YWI4YWQ2ODBhMzJkMjcuLjM4Y2ZhNzI5ZWJh
M2U1Y2FmNTJiODVmMDRkZWVjZWZjNzg3ZTk1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTM1MjMsNyArMzUyMyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVU
ZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlCiB7
CiAgICAgLy8gUGxhdGZvcm1zIHNob3VsZCBkaWZmZXJlbnRpYXRlIHJlYWwgY29tbWFuZHMgbGlr
ZSBzZWxlY3RBbGwgZnJvbSB0ZXh0IGlucHV0IGluIGRpc2d1aXNlIChsaWtlIGluc2VydE5ld2xp
bmUpLAogICAgIC8vIGFuZCBhdm9pZCBkaXNwYXRjaGluZyB0ZXh0IGlucHV0IGV2ZW50cyBmcm9t
IGtleWRvd24gZGVmYXVsdCBoYW5kbGVycy4KLSAgICBBU1NFUlQoIXVuZGVybHlpbmdFdmVudCB8
fCAhdW5kZXJseWluZ0V2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSB8fCB0b0tleWJvYXJkRXZlbnQo
dW5kZXJseWluZ0V2ZW50KS0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsK
KyAgICBBU1NFUlQoIXVuZGVybHlpbmdFdmVudCB8fCAhaXM8S2V5Ym9hcmRFdmVudD4odW5kZXJs
eWluZ0V2ZW50KSB8fCBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2ZW50KS50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCiAgICAgRXZlbnRUYXJnZXQq
IHRhcmdldDsKICAgICBpZiAodW5kZXJseWluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggMTQ5MDYwYWFhNTZiOTM0
ZTFjOTlmYWMwYzA3MDI0ZTg3Y2Y4YjFiNS4uYjQ2NGNjNzMzMDRjMTY4YzM1OTgxMTQzYmIyZThk
YTRjYjZmOTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwCkBAIC01OTAsOSArNTkwLDkgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6aXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW4KICAgICAgICAgJiYgaW5kaWNhdG9yUmVjdC5jb250YWlucyhwb2ludCk7CiB9CiAKLWJvb2wg
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihNb3Vz
ZUV2ZW50KiBldmVudCkgY29uc3QKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2
YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBNb3VzZUV2ZW50JiBldmVudCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGFic29sdXRlVG9Mb2Nh
bChldmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgcmV0dXJu
IGlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihhYnNvbHV0ZVRvTG9jYWwoZXZlbnQuYWJz
b2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CiB9CiAKIHZvaWQgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqIGV2
ZW50KQpAQCAtNjAwLDIxICs2MDAsMjEgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFu
ZGxlVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYg
KCFzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3Bs
dWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFl
dmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZl
bnQoZXZlbnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpOwogICAgIEhUTUxQbHVnSW5FbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
SFRNTFBsdWdJbkVsZW1lbnQ+KGZyYW1lT3duZXJFbGVtZW50KCkpOwotICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiB0b01vdXNlRXZlbnQoZXZl
bnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKICAgICAgICAgbV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2lu
SW5kaWNhdG9yID0gaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpOwog
ICAgICAgICBpZiAobV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKSB7
CiAgICAgICAgICAgICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZl
bnRzRWxlbWVudCgmZWxlbWVudCk7CiAgICAgICAgICAgICBlbGVtZW50LnNldElzQ2FwdHVyaW5n
TW91c2VFdmVudHModHJ1ZSk7CiAgICAgICAgICAgICBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGlj
YXRvcklzUHJlc3NlZCh0cnVlKTsKICAgICAgICAgfQotICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAg
IH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYm
IHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAo
bW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2
ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKG1fdW5hdmFpbGFibGVQ
bHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQpIHsKICAgICAgICAgICAgIGZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkuc2V0Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50KG51bGxwdHIpOwogICAgICAgICAg
ICAgZWxlbWVudC5zZXRJc0NhcHR1cmluZ01vdXNlRXZlbnRzKGZhbHNlKTsKQEAgLTYyNyw5ICs2
MjcsOSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpoYW5kbGVVbmF2YWlsYWJsZVBsdWdp
bkluZGljYXRvckV2ZW50KEV2ZW50KiBldmVudCkKICAgICAgICAgbV9tb3VzZURvd25XYXNJblVu
YXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yID0gZmFsc2U7CiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CiAgICAgICAgIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5k
aWNhdG9ySXNQcmVzc2VkKG1fbW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRv
ciAmJiBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IobW91c2VFdmVudCkpOwotICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgbW91c2VFdmVudC5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuaAppbmRleCA0ZDM0MmQ3ODQ0MTBiN2E3MmU3MTEzYjZiZDgy
YTgxYTZlNzVkNGE1Li4yYmZiZWMxODFjOGFiYzQ4NDM0YTEzZTNmYjE1NDFlMmNiMmRiN2QzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApA
QCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xs
KFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCBz
ZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3NlZChib29sKTsKLSAgICBib29sIGlz
SW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihNb3VzZUV2ZW50KikgY29uc3Q7CisgICAgYm9v
bCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VFdmVudCYpIGNvbnN0
OwogICAgIGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKICAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxv
YXRSZWN0JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZs
b2F0UmVjdCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgpIGNv
bnN0OwogICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JCb3VuZHMoY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCmluZGV4IGRlMzcyNmQyYzM2ZWQzYjVhNWFi
YmNkOGJkZTMwZmI2NmI5ZTZkY2QuLjg3MGE1NDE0MDRkMWM1ZTBiMjg5MWZkZDIzMmZlYmVjNGQ0
NTg1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hv
dHRlZFBsdWdJbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBz
aG90dGVkUGx1Z0luLmNwcApAQCAtMTU1LDEwICsxNTUsMTAgQEAgQ3Vyc29yRGlyZWN0aXZlIFJl
bmRlclNuYXBzaG90dGVkUGx1Z0luOjpnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
LCBDdXIKIAogdm9pZCBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQoRXZlbnQq
IGV2ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8
TW91c2VFdmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2
ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKIAogICAgIC8vIElmIHdlJ3JlIGEg
c25hcHNob3R0ZWQgcGx1Z2luLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhY3RpdmF0ZSBvbgog
ICAgIC8vIGNsaWNrcyBldmVuIGlmIHRoZSBwYWdlIGlzIHByZXZlbnRpbmcgb3VyIGRlZmF1bHQg
YmVoYXZpb3VyLiBPdGhlcndpc2UKQEAgLTE2OCwyMCArMTY4LDIwIEBAIHZvaWQgUmVuZGVyU25h
cHNob3R0ZWRQbHVnSW46OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICAvLyBldmVudC4g
VGhlIGNvZGUgYmVsb3cgaXMgbm90IGNvbXBsZXRlbHkgZm9vbHByb29mLCBidXQgdGhlIHdvcnN0
IHRoYXQKICAgICAvLyBjb3VsZCBoYXBwZW4gaXMgdGhhdCBhIHNuYXBzaG90dGVkIHBsdWdpbiBy
ZXN0YXJ0cy4KIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91
dEV2ZW50KQorICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dXRFdmVudCkKICAgICAgICAgbV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiA9IGZhbHNlOwog
Ci0gICAgaWYgKG1vdXNlRXZlbnQtPmJ1dHRvbigpICE9IExlZnRCdXR0b24pCisgICAgaWYgKG1v
dXNlRXZlbnQuYnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgKG1faXNQb3Rl
bnRpYWxNb3VzZUFjdGl2YXRpb24gJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50KSkgeworICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCB8fCAobV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiAmJiBtb3VzZUV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSkgewogICAgICAgICBtX2lzUG90
ZW50aWFsTW91c2VBY3RpdmF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgY2xpY2tXYXNPbk92
ZXJsYXkgPSBwbHVnSW5JbWFnZUVsZW1lbnQoKS5wYXJ0T2ZTbmFwc2hvdE92ZXJsYXkoZXZlbnQt
PnRhcmdldCgpLT50b05vZGUoKSk7Ci0gICAgICAgIHBsdWdJbkltYWdlRWxlbWVudCgpLnVzZXJE
aWRDbGlja1NuYXBzaG90KG1vdXNlRXZlbnQsICFjbGlja1dhc09uT3ZlcmxheSk7Ci0gICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgYm9vbCBjbGlja1dh
c09uT3ZlcmxheSA9IHBsdWdJbkltYWdlRWxlbWVudCgpLnBhcnRPZlNuYXBzaG90T3ZlcmxheSht
b3VzZUV2ZW50LnRhcmdldCgpLT50b05vZGUoKSk7CisgICAgICAgIHBsdWdJbkltYWdlRWxlbWVu
dCgpLnVzZXJEaWRDbGlja1NuYXBzaG90KCZtb3VzZUV2ZW50LCAhY2xpY2tXYXNPbk92ZXJsYXkp
OworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfSBlbHNlIGlm
IChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKICAg
ICAgICAgbV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiA9IHRydWU7Ci0gICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZjY3NTE4YmE2YzYxOTllMWFhZmMxY2IxYzI4NmJhN2Ez
MmMxYmQwOC4uZTQ5MzI5MjdkM2ZkMzJjMTY2Yzk4MjU0YWFjNjMyNmNhZjEwMjJlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAt
ODkyLDggKzg5Miw4IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50
KQogCiAgICAgY29uc3QgV2ViRXZlbnQqIGN1cnJlbnRFdmVudCA9IFdlYlBhZ2U6OmN1cnJlbnRF
dmVudCgpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJFdmVudD4gc2ltdWxhdGVkV2ViRXZlbnQ7
Ci0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5p
c1NpbXVsYXRlZCgpKSB7Ci0gICAgICAgIHNpbXVsYXRlZFdlYkV2ZW50ID0gY3JlYXRlV2ViRXZl
bnQodG9Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAm
JiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmlzU2ltdWxhdGVkKCkpIHsKKyAgICAgICAg
c2ltdWxhdGVkV2ViRXZlbnQgPSBjcmVhdGVXZWJFdmVudChkb3duY2FzdDxNb3VzZUV2ZW50Pihl
dmVudCkpOwogICAgICAgICBjdXJyZW50RXZlbnQgPSBzaW11bGF0ZWRXZWJFdmVudC5nZXQoKTsK
ICAgICB9CiAgICAgaWYgKCFjdXJyZW50RXZlbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238999</attachid>
            <date>2014-09-30 22:23:07 -0700</date>
            <delta_ts>2014-09-30 22:32:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137284-20140930222308.patch</filename>
            <type>text/plain</type>
            <size>77365</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uZjRlMTI2ZDA3NTgzYTRjY2UwOWRiMDQ2ZmQ3Yzll
YWZjZTg1Y2RkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgRXZlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3Mjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRXZl
bnQgY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJv
ckV2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5oOgorICAgICAgICAq
IGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVs
YXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAqIGRvbS9VSUV2ZW50Lmg6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjppc0VudGVyS2V5S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzTGlua0NsaWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN1
bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL01l
ZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNp
dGx5KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
czo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAq
IHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZs
b3cgd2l0aCBlbm9ybW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWMxMzQ0NzVlYTU3M2Uw
NjMwY2U4OGE0Yzg1NTNmMTEzYzIzZWQ0YS4uN2FkMWNhMDVlMDc4ZTFkMjgzYTY4N2U4NzllY2U3
OWI3NDQ2NDZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFdmVudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFdmVu
dCBjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisKIDIwMTQtMDkt
MzAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBSZW5hbWUgVEVTVF9USEVNRV9ESVIgbWFjcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCBlYTUxZjc5ZjJkNDgwMDJlYTYxYzk5ZjVm
OWMxNzJlZTc5ZTU0MGIwLi41NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBA
IC01OSwxNCArNTksMTQgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAKLSAgICBpZiAoZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKCFpczxF
cnJvckV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSB0b0Vycm9yRXZl
bnQoZXZlbnQpOworICAgIEVycm9yRXZlbnQmIGVycm9yRXZlbnQgPSBkb3duY2FzdDxFcnJvckV2
ZW50PigqZXZlbnQpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKSk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+bWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsK
LSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+Y29sbm8oKSkpOworICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2ZW50Lm1lc3NhZ2Uo
KSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2
ZW50LmZpbGVuYW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVu
dC5saW5lbm8oKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LmNv
bG5vKCkpKTsKIAogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNWM3NmI2ZDQ1ZmIyZWRkNDNmODg2
MDExZGJmMGNjZjJlZjYyMjI0Ny4uNGFjNWUxOWU1YTcyY2Q2NzY4Mzc5NGViZGNkZmNmZjFhYjYy
MGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAgICAg
ICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwog
ICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5pc0JlZm9yZVVubG9hZEV2ZW50KCkpCi0gICAgICAgICAgICAgICAgdG9CZWZvcmVVbmxv
YWRFdmVudChldmVudCktPnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAm
JiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PEJlZm9yZVVubG9hZEV2ZW50PigqZXZlbnQpLnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCmluZGV4IGJiZTQxMTVjZDAyMjQ3ZWRiZjZlNzU0MGE5NzFiZGI0
OWI3NTRiZWQuLjc1NDIwMzU5Y2NlZTI0MzcwNTg2Mjg5Nzc3NzJhMmI3MzM5NTBiMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCkBAIC01MSw4ICs1
MSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZv
cmVVbmxvYWRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgK
aW5kZXggZWY3MmI3MzQ1MDU5Yjc5ZTM2ZTBjZmZjMzEwZGQ4NTEyZTA1NWQ0MS4uNTg3NjY5NmRj
MTU1YjUwZjRhNzMwODdjYjU5ZDFlYzI3ZTU2MjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9y
ZVVubG9hZEV2ZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9y
ZXR1cm5WYWx1ZTsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoQmVmb3JlVW5sb2FkRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChC
ZWZvcmVVbmxvYWRFdmVudCkKKwogI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5oCmluZGV4IGI1OGU3OWNjMGI3MzdhZWQyMTdkYjM0M2IzNzhkNTU4MmZm
MjUyOGMuLmM4ZGZkMzEwODM5MzAwOTBhMjIyM2JlMmIzOThjNDg4OWQzYmYxYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaApAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fY29sdW1uTnVtYmVyOwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhFcnJvckV2ZW50KQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRXJy
b3JFdmVudCkKKwogI2VuZGlmIC8vIEVycm9yRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAxYmU1
ZWJiODBhZTA3OTMzMzNjYTkzMjhjMjIxMzJhNTA5ZTYxMDRkLi42N2Y0MjZlMmI1ZGI1ZTQxY2Yx
NTQ5N2JiYjU3M2YxZWIwYmRiNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwNSwxMCArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50PiBtX3VuZGVy
bHlpbmdFdmVudDsKIH07CiAKLSNkZWZpbmUgRVZFTlRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBFdmVudCwgZXZlbnQs
IGV2ZW50LT5pcyMjVG9WYWx1ZVR5cGVOYW1lKCksIGV2ZW50LmlzIyNUb1ZhbHVlVHlwZU5hbWUo
KSkKLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkV2ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXMjI1RvVmFsdWVU
eXBlTmFtZSgpOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggYmZjYTlkMzlkOTI4
MTRiNTc0NDMzMzZmNzc1OTU5Nzk1MTJkZjVmOC4uNmRmZmM2ZmYyOWUxMmI3YjlhNWFjYTk4Y2Iy
ZjRhYTQ2MWZhZmY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTc2LDEy
ICs3NiwxMiBAQCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKQogCiB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSk7CisgICAgQVNTRVJUKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBpczxGb2N1c0V2ZW50PihldmVudCkpOwogICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQp
IHsKLSAgICAgICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGV2ZW50LmlzRm9jdXNFdmVudCgpKQotICAgICAgICAgICAgdG9Gb2N1
c0V2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxN
b3VzZUV2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OworICAgICAgICBlbHNlIGlmIChpczxGb2N1c0V2ZW50PihldmVudCkpCisgICAgICAgICAgICBk
b3duY2FzdDxGb2N1c0V2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCkpOwogICAgIH0KICAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50KTsKIH0KQEAgLTExMSw4ICsxMTEsOCBAQCB2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQpIGNvbnN0CiAgICAgY2hlY2tSZWFjaGFiaWxpdHko
bV90YXJnZXRUb3VjaGVzLmdldCgpKTsKICAgICBjaGVja1JlYWNoYWJpbGl0eShtX2NoYW5nZWRU
b3VjaGVzLmdldCgpKTsKICNlbmRpZgotICAgIEFTU0VSVChldmVudC5pc1RvdWNoRXZlbnQoKSk7
Ci0gICAgVG91Y2hFdmVudCYgdG91Y2hFdmVudCA9IHRvVG91Y2hFdmVudChldmVudCk7CisgICAg
QVNTRVJUKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSk7CisgICAgVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKICAgICB0b3VjaEV2ZW50LnNldFRvdWNo
ZXMobV90b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldFRhcmdldFRvdWNoZXMobV90YXJnZXRU
b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNo
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBjNmUyNWVkOWQ5
Yzg2Yzk5MDI1MGVlNmUyYzZjNmM3OTEzZWM2NzU2Li42MzI3OGJmZDcxYjhjMjJiZTc2ZDUzMTFm
NzVkMmYwOWE3MGRjZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApA
QCAtMzQyLDggKzM0Miw4IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5v
ZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgaWYgKEV2ZW50VGFy
Z2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKICAgICAgICAgZXZl
bnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChldmVudC0+aXNUb3Vj
aEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cygqdG9U
b3VjaEV2ZW50KGV2ZW50LmdldCgpKSkpCisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkg
eworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNo
RXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRm9jdXNFdmVudC5oCmluZGV4IDkxYzg4N2U3ZjNlNmM3Mjc0NzBlYmUwNDYxMmM3
NTk1YjA0OGJmMzUuLmI5NjY4NjZlMGU3NDU1Yjg4MGE2OWEzYTg3MzUxZDYwYWNjNDg1MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0ZvY3VzRXZlbnQuaApAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwogfTsKIAotRVZFTlRfVFlQRV9DQVNU
UyhGb2N1c0V2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRVZFTlQoRm9jdXNFdmVudCkKKwogI2VuZGlmIC8vIEZvY3VzRXZlbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCmluZGV4IGY5ZDgyOWRkZjYwMjU2NjE4ZWY4MjNl
NmFkYjZiZWVhMjBkOGIyNDEuLmI0MDMxNDBhOTgwZmEzODNjNjVkNWUzMDQyOGE5NTQ1NmE0MWRl
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKQEAgLTIyMCw5ICsyMjAsOSBA
QCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogS2V5Ym9hcmRFdmVudCogZmluZEtl
eWJvYXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAoRXZlbnQqIGUgPSBldmVudDsg
ZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQotICAgICAgICBpZiAoZS0+aXNLZXlib2FyZEV2
ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9LZXlib2FyZEV2ZW50KGUpOwotICAgIHJldHVy
biAwOworICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZSkpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCmluZGV4
IDg2ODdiMWZmODZmNGI2YTMzYTZlYTQwMGUyOTQ5MjhjNTRmYzFjNWYuLmFiOTQ1NzcxZDc1MDFm
YWU2ZTEzMDllMGUzMzYwODNlNzFlNjU2ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQu
aApAQCAtMTE5LDEwICsxMTksMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotRVZFTlRfVFlQ
RV9DQVNUUyhLZXlib2FyZEV2ZW50KQotCiBLZXlib2FyZEV2ZW50KiBmaW5kS2V5Ym9hcmRFdmVu
dChFdmVudCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRVZFTlQoS2V5Ym9hcmRFdmVudCkKKwogI2VuZGlmIC8vIEtleWJvYXJkRXZlbnRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCmluZGV4IGE5YWZlNjBiYzgxNTZhY2MyOGMyMTZmNjYz
MDhiZTZkZjUwODU2NjguLjU4ZDNkNjBjZDE1MzM5MmQ2YTU2MmJkN2NkZTVlMTRlYzVmNTljNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKQEAgLTI3NiwxMCArMjc2LDEwIEBAIFNpbXVs
YXRlZE1vdXNlRXZlbnQ6OlNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQCiAgICAgfQogICAgIHNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5
aW5nRXZlbnQpOwogCi0gICAgaWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYmIHRoaXMtPnVu
ZGVybHlpbmdFdmVudCgpLT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KHRoaXMtPnVuZGVybHlpbmdFdmVudCgpKTsKLSAgICAg
ICAgbV9zY3JlZW5Mb2NhdGlvbiA9IG1vdXNlRXZlbnQtPnNjcmVlbkxvY2F0aW9uKCk7Ci0gICAg
ICAgIGluaXRDb29yZGluYXRlcyhtb3VzZUV2ZW50LT5jbGllbnRMb2NhdGlvbigpKTsKKyAgICBp
ZiAodGhpcy0+dW5kZXJseWluZ0V2ZW50KCkgJiYgaXM8TW91c2VFdmVudD4odGhpcy0+dW5kZXJs
eWluZ0V2ZW50KCkpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqdGhpcy0+dW5kZXJseWluZ0V2ZW50KCkpOworICAgICAgICBtX3NjcmVl
bkxvY2F0aW9uID0gbW91c2VFdmVudC5zY3JlZW5Mb2NhdGlvbigpOworICAgICAgICBpbml0Q29v
cmRpbmF0ZXMobW91c2VFdmVudC5jbGllbnRMb2NhdGlvbigpKTsKICAgICB9IGVsc2UgaWYgKHRh
cmdldCkgewogICAgICAgICBtX3NjcmVlbkxvY2F0aW9uID0gdGFyZ2V0LT5zY3JlZW5SZWN0KCku
Y2VudGVyKCk7CiAgICAgICAgIGluaXRDb29yZGluYXRlcyhMYXlvdXRQb2ludCh0YXJnZXQtPmNs
aWVudFJlY3QoKS5jZW50ZXIoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKaW5kZXggNmRjNzZj
ODZiZDQxNGQwMjhkOTZlZTFmMTA3ZGY5NDNjMTYwZjVlNS4uYWZjN2JkZjA3OGRiZWMxMjM5OTBm
MmI1Y2UyZGVlZjlmZTZmMWE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNl
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCkBAIC0xMzIsOCAr
MTMyLDggQEAgcHJpdmF0ZToKICAgICBTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIFBhc3NSZWZQdHI8RXZl
bnQ+IHVuZGVybHlpbmdFdmVudCwgRWxlbWVudCogdGFyZ2V0KTsKIH07CiAKLUVWRU5UX1RZUEVf
Q0FTVFMoTW91c2VFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VWRU5UKE1vdXNlRXZlbnQpCisKICNlbmRpZiAvLyBNb3VzZUV2ZW50X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCBmOGMzM2Q2NzQ0MTRlNDQxZDc4NDljYzVmMjI2YjI1OWEzZGVi
MzhiLi45Mzc2OTc5MjVlMGM2ZWUxNmFjZTY3YTk5M2EwOTdlOTFjZmM2MzU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0yMDMyLDggKzIwMzIsOCBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBM
QVRGT1JNKElPUykKLSAgICBpZiAoZXZlbnQtPmlzVG91Y2hFdmVudCgpKQotICAgICAgICByZXR1
cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKHRvVG91Y2hFdmVudChldmVudC5sZWFrUmVm
KCkpKSk7CisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGRp
c3BhdGNoVG91Y2hFdmVudChhZG9wdFJlZihkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudC5sZWFr
UmVmKCkpKSk7CiAjZW5kaWYKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KHRoaXMsIGV2ZW50KTsKIH0KQEAgLTIxMDAsMTEgKzIxMDAsMTIgQEAgdm9pZCBOb2RlOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKICAgICBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2
ZW50KCkpCisgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKICAgICAgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgICAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcih0b0tl
eWJvYXJkRXZlbnQoZXZlbnQpKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2
ZW50KSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewotICAgICAgICBpbnQgZGV0YWlsID0gZXZlbnQtPmlzVUlFdmVudCgp
ID8gdG9VSUV2ZW50KGV2ZW50KS0+ZGV0YWlsKCkgOiAwOworICAgICAgICBpbnQgZGV0YWlsID0g
aXM8VUlFdmVudD4oZXZlbnQpID8gZG93bmNhc3Q8VUlFdmVudD4oKmV2ZW50KS5kZXRhaWwoKSA6
IDA7CiAgICAgICAgIGlmIChkaXNwYXRjaERPTUFjdGl2YXRlRXZlbnQoZGV0YWlsLCBldmVudCkp
CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKQEAgLTIxMTQsMTIgKzIxMTUsMTMgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVu
dUNvbnRyb2xsZXIoKS5oYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKICNlbmRpZgogICAg
IH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCkgewot
ICAgICAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNl
VHlwZSkKKyAgICAgICAgaWYgKGlzPFRleHRFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKHRvVGV4dEV2
ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1
bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoZG93bmNhc3Q8VGV4dEV2ZW50PihldmVudCkpOworICAg
ICAgICB9CiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCi0gICAgfSBlbHNlIGlmIChldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQo
KSkgewotICAgICAgICBpZiAodG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTWlkZGxl
QnV0dG9uKSB7CisgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgeworICAgICAgICBpZiAoZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBNaWRkbGVCdXR0b24pIHsKICAgICAg
ICAgICAgIGlmIChlbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAKQEAgLTIxMzMsNyArMjEzNSw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRp
ZgotICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8
fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsKKyAgICB9IGVsc2Ug
aWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkg
ewogCiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSByZW5kZXJlciwgc2VuZCB0aGUgd2hl
ZWwgZXZlbnQgdG8gdGhlIGZpcnN0IG5vZGUgd2UgZmluZCB3aXRoIGEgcmVuZGVyZXIuCiAgICAg
ICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciA8b3B0aW9uPiBhbmQgPG9wdGdyb3VwPiBlbGVtZW50
cyBzbyB0aGF0IDxzZWxlY3Q+cyBnZXQgYSB3aGVlbCBzY3JvbGwuCkBAIC0yMTQzLDE2ICsyMTQ1
LDE2IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAg
ICAgIAogICAgICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihz
dGFydE5vZGUsIHRvV2hlZWxFdmVudChldmVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS5kZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoc3RhcnROb2RlLCBkb3duY2Fz
dDxXaGVlbEV2ZW50PihldmVudCkpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBMQVRG
T1JNKElPUykKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRvdWNo
RXZlbnRJbnRlcmZhY2VUeXBlICYmIGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50
VHlwZSkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSAmJiBldmVudE5h
bWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKSB7CiAgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICB3aGlsZSAocmVuZGVyZXIg
JiYgKCFyZW5kZXJlci0+aXNCb3goKSB8fCAhdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jYW5CZVNj
cm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkpCiAgICAgICAgICAgICByZW5kZXJlciA9IHJl
bmRlcmVyLT5wYXJlbnQoKTsKIAogICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPm5v
ZGUoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUo
KSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRvdWNoRXZl
bnRIYW5kbGVyKHJlbmRlcmVyLT5ub2RlKCksIHRvVG91Y2hFdmVudChldmVudCkpOworICAgICAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0VG91Y2hFdmVudEhhbmRsZXIo
cmVuZGVyZXItPm5vZGUoKSwgZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQpKTsKICAgICAgICAg
fQogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UZXh0RXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaApp
bmRleCBjNTU2ZTE1ZDc4MDdlODY2Yjc3YTM4NzhkODcyMDY3ZWQzZDk4NjU3Li44OGQwNjFmNDE1
ZDM3YWVhZmYyZTNkNDRiNGY2MjU3ZDRkMjdjOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVGV4dEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCkBA
IC04Nyw4ICs4Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPERpY3Rh
dGlvbkFsdGVybmF0aXZlPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlczsKICAgICB9OwogCi1FVkVO
VF9UWVBFX0NBU1RTKFRleHRFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKFRleHRFdmVudCkKKwogI2VuZGlmIC8vIFRleHRFdmVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAppbmRleCBhZGEwZTg3NzQ3MGNlY2Q0ZDhkZDlkYzZk
NmMyZDg0ZjNiOTE2NjA0Li4zYTY4OGI2ZGUxMmY1ZTBhZmJlMWQzMjAxZTZlZjMwMzAzNTA0Y2Q5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKQEAgLTg2LDEwICs4NiwxMCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1fY2hhbmdlZFRvdWNoZXM7CiB9OwogCi1FVkVOVF9UWVBF
X0NBU1RTKFRvdWNoRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FVkVOVChUb3VjaEV2ZW50KQorCiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNI
X0VWRU5UUykKIAogI2VuZGlmIC8vIFRvdWNoRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1VJRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgKaW5kZXgg
ZDMxZWJiY2QyNjliYWM2ZjBmMGQwNWU1ZTk2NGRjZmQ0MzZjZTc3Yy4uYWJhODc1OTI3MGZjMWVj
ZTkxYWRjNTMzYjE0ZjA4YmU0NDA3MjQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1VJRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5oCkBAIC04NSw4ICs4
NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZGV0YWlsOwogfTsKIAotRVZFTlRfVFlQRV9DQVNU
UyhVSUV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRVZFTlQoVUlFdmVudCkKKwogI2VuZGlmIC8vIFVJRXZlbnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVl
bEV2ZW50LmgKaW5kZXggZGUzYmRkODIwNzA5MTRkNmQ5NThhY2M2ZmI1OTNkYTIyYTZhZjIxNy4u
NjcwNWQ0YTg4YjI3YmY3YjhiNDM4ZGMwMDRlMjZkNDFkMjFmNDQzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2hl
ZWxFdmVudC5oCkBAIC0xMTQsOCArMTE0LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5pdGlh
bGl6ZWRXaXRoUGxhdGZvcm1XaGVlbEV2ZW50OwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhXaGVl
bEV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRVZFTlQoV2hlZWxFdmVudCkKKwogI2VuZGlmIC8vIFdoZWVsRXZlbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAppbmRleCA1YzUzMzVmNjc1M2EyOTRiZGZh
ODRmMzVkMWZmNTg1YTQ0NmUyZDg3Li45MTVlMmFhY2Y5N2E2MDJlNTg3NTI0NzFmMDk4OWY1NmJh
MjNkYWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAt
MTUyLDcgKzE1Miw3IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAKIHN0YXRpYyB2b2lkIGFwcGVuZFNlcnZl
ck1hcE1vdXNlUG9zaXRpb24oU3RyaW5nQnVpbGRlciYgdXJsLCBFdmVudCogZXZlbnQpCiB7Ci0g
ICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50Pihl
dmVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOwpA
QCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24oU3RyaW5nQnVpbGRlciYgdXJsLCBFdmVudCogZXZlbnQpCiAgICAgUmVuZGVySW1hZ2UmIHJl
bmRlcmVyID0gdG9SZW5kZXJJbWFnZSgqaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3MgdHJ1ZSBmb3IgdXNlVHJhbnNmb3Jt
cy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24gPSByZW5kZXJlci5hYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludCh0b01vdXNlRXZlbnQoZXZlbnQpLT5wYWdlWCgpLCB0b01vdXNlRXZl
bnQoZXZlbnQpLT5wYWdlWSgpKSk7CisgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0g
cmVuZGVyZXIuYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoZG93bmNhc3Q8TW91c2VFdmVudD4o
KmV2ZW50KS5wYWdlWCgpLCBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnBhZ2VZKCkpKTsK
ICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJzb2x1dGVQ
b3NpdGlvbi55KCk7CiAgICAgdXJsLmFwcGVuZCgnPycpOwpAQCAtMTk2LDkgKzE5Niw5IEBAIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICBpZiAoaGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGtl
ZXBzIHRyYWNrIG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24gd2FzIGlu
IChpZiBpdCB3YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tlZAogICAg
ICAgICAgICAgLy8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGluayBiZWhh
dmlvcgotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQp
LT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICAg
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAm
JiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5i
dXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAg
ICAgICAgICBzZXRSb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oZG9j
dW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVt
ZW50KCkpOwotICAgICAgICAgICAgICAgIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd24gPSB0
b01vdXNlRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpOworICAgICAgICAgICAgICAgIG1fd2FzU2hp
ZnRLZXlEb3duT25Nb3VzZURvd24gPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnNoaWZ0
S2V5KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGNsZWFy
ZWQgb24gbW91c2VvdmVyIGFuZCBub3QgbW91c2VvdXQgYmVjYXVzZSB0aGVpciB2YWx1ZXMgYXJl
IG5lZWRlZCBmb3IgZHJhZyBldmVudHMsCiAgICAgICAgICAgICAgICAgLy8gYnV0IGRyYWcgZXZl
bnRzIGhhcHBlbiBhZnRlciBtb3VzZSBvdXQgZXZlbnRzLgpAQCAtNTU1LDkgKzU1NSw5IEBAIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW50KiBldmVudCkKIAogSFRNTEFu
Y2hvckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRWxlbWVudDo6ZXZlbnRUeXBlKEV2ZW50
KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIE5vbk1vdXNlRXZlbnQ7Ci0gICAg
cmV0dXJuIHRvTW91c2VFdmVudChldmVudCktPnNoaWZ0S2V5KCkgPyBNb3VzZUV2ZW50V2l0aFNo
aWZ0S2V5IDogTW91c2VFdmVudFdpdGhvdXRTaGlmdEtleTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KS5zaGlmdEtleSgpID8gTW91c2VFdmVudFdpdGhTaGlmdEtleSA6
IE1vdXNlRXZlbnRXaXRob3V0U2hpZnRLZXk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6
OnRyZWF0TGlua0FzTGl2ZUZvckV2ZW50VHlwZShFdmVudFR5cGUgZXZlbnRUeXBlKSBjb25zdApA
QCAtNTkyLDEyICs1OTIsMTIgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNM
aXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVudFR5cGUpIGNvbnN0CiAKIGJvb2wgaXNFbnRl
cktleUtleWRvd25FdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+aXNLZXlib2FyZEV2ZW50
KCkgJiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpID09ICJFbnRlciI7
CisgICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAm
JiBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2
ZW50KS5rZXlJZGVudGlmaWVyKCkgPT0gIkVudGVyIjsKIH0KIAogYm9vbCBpc0xpbmtDbGljayhF
dmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQgJiYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgdG9Nb3VzZUV2ZW50KGV2
ZW50KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pOworICAgIHJldHVybiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmICghaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8
IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pOwog
fQogCiBib29sIHNob3VsZFByb2hpYml0TGlua3MoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKaW5kZXggOTJlMjZhN2E2ZmYwMWQ2NWRm
OThhNDE2Y2Y0OWY4OTRmMTIxMTgwMS4uNDUyOWY4YjMzOGI5ZTlmNGI1MzFlMzY4ZjUwODg1MDMy
NjgxOTAzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKQEAg
LTEyMywyOCArMTIzLDI5IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkgewotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDIwIikgeworICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsK
KyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJk
RXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09
ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICBzZXRBY3RpdmUodHJ1ZSwgdHJ1ZSk7CiAgICAgICAg
ICAgICAvLyBObyBzZXREZWZhdWx0SGFuZGxlZCgpIC0gSUUgZGlzcGF0Y2hlcyBhIGtleXByZXNz
IGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAg
ICAgICAgc3dpdGNoICh0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5jaGFyQ29kZSgpKSB7CisgICAg
ICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgeworICAgICAgICAgICAgc3dpdGNoIChrZXlib2FyZEV2ZW50LmNoYXJDb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2lt
dWxhdGVkQ2xpY2soZXZlbnQpOwotICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygm
a2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIGNhc2UgJyAnOgogICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHNjcm9sbGluZyBk
b3duIHRoZSBwYWdlLgotICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQg
JiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7
CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBF
dmVudCAmJiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewogICAg
ICAgICAgICAgaWYgKGFjdGl2ZSgpKQotICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVk
Q2xpY2soZXZlbnQpOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygma2V5Ym9hcmRFdmVudCk7Cisg
ICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVTZXRFbGVtZW50LmNwcAppbmRleCA0ZDA3YmZjYThhNDA0Njg3OWFhY2UxODJiZDNlZWU3NWNm
YmI2MmFjLi4zNWVhNTJjYmNlY2JjNDk0YzBmZjdlNjdlNGQzNDU5Y2NkNTlmZDlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKQEAgLTE4NywxNSArMTg3
LDE1IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6d2lsbEF0dGFjaFJlbmRlcmVycygpCiAg
ICAgICAgIG1fbm9yZXNpemUgPSBjb250YWluaW5nRnJhbWVTZXQtPm5vUmVzaXplKCk7CiB9CiAK
LXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0
KQordm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiAhbV9ub3Jlc2l6ZSAmJiBy
ZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzRnJhbWVTZXQoKSkgewotICAgICAgICBpZiAodG9S
ZW5kZXJGcmFtZVNldChyZW5kZXJlcigpKS0+dXNlclJlc2l6ZSh0b01vdXNlRXZlbnQoZXZ0KSkp
IHsKLSAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBpZiAoaXM8TW91
c2VFdmVudD4oZXZlbnQpICYmICFtX25vcmVzaXplICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+aXNGcmFtZVNldCgpKSB7CisgICAgICAgIGlmICh0b1JlbmRlckZyYW1lU2V0KHJlbmRlcmVy
KCkpLT51c2VyUmVzaXplKGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KSkpIHsKKyAgICAgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQotICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7
CisgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCiBib29s
IEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNDM5YTBhMWNmYjg3ZWRk
OGUyN2I1MTk3ZTE2ZTNlOWZlZDllZmMzNC4uZWFmMjY1NGU1OTdiYjBlNDkyYThmODlmMzcyNzE0
Y2MxZTU0NDNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBA
IC0xMDMyLDcgKzEwMzIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxEaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCwgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgcwogewogICAgIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIG1faW5wdXRUeXBl
LT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5KCZldmVudCkpCiAgICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOwotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQgJiYgZXZlbnQuaXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KCZldmVudCktPmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PihldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBtX2lucHV0VHlw
ZS0+d2lsbERpc3BhdGNoQ2xpY2soc3RhdGUpOwogICAgICAgICBzdGF0ZS5zdGF0ZWZ1bCA9IHRy
dWU7CiAgICAgfQpAQCAtMTA0NSwyMiArMTA0NSwyMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmRpZERpc3BhdGNoQ2xpY2tFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVudENs
aQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
dCkKIHsKLSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCAmJiB0b01vdXNlRXZlbnQoZXZ0KS0+YnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tFdmVudCh0b01vdXNl
RXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2dCkgJiYgZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2dCku
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xp
Y2tFdmVudChkb3duY2FzdDxNb3VzZUV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVm
YXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgIGlmIChldnQtPmlzVG91Y2hFdmVudCgpKSB7Ci0gICAgICAgIG1f
aW5wdXRUeXBlLT5oYW5kbGVUb3VjaEV2ZW50KHRvVG91Y2hFdmVudChldnQpKTsKKyAgICBpZiAo
aXM8VG91Y2hFdmVudD4oZXZ0KSkgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlVG91Y2hF
dmVudChkb3duY2FzdDxUb3VjaEV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVs
dEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGlm
IChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleWRvd25FdmVudCh0
b0tleWJvYXJkRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkgJiYg
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBtX2lu
cHV0VHlwZS0+aGFuZGxlS2V5ZG93bkV2ZW50KGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2dCkp
OwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTEwODYsMTYgKzEwODYsMTcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2
ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24g
a2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50
LgotICAgIGlmIChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlw
cmVzc0V2ZW50KHRvS2V5Ym9hcmRFdmVudChldnQpKTsKLSAgICAgICAgaWYgKGV2dC0+ZGVmYXVs
dEhhbmRsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZXZ0LT5p
c0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVu
dCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudCh0b0tleWJvYXJkRXZl
bnQoZXZ0KSk7Ci0gICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkpIHsKKyAgICAgICAgS2V5
Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldnQp
OworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpIHsKKyAgICAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50
KCZrZXlib2FyZEV2ZW50KTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGtl
eWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CisgICAgICAg
ICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudCgma2V5Ym9hcmRFdmVudCk7CisgICAg
ICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX2lucHV0VHlwZS0+c2hv
dWxkU3VibWl0SW1wbGljaXRseShldnQpKSB7CkBAIC0xMTE3LDExICsxMTE4LDExIEBAIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGV2dC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCgpKQotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
dG9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChldnQpKTsKKyAgICBpZiAoaXM8QmVmb3JlVGV4dElu
c2VydGVkRXZlbnQ+KGV2dCkpCisgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudChkb3duY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZ0KSk7CiAK
LSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93
bkV2ZW50KHRvTW91c2VFdmVudChldnQpKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZ0KSAm
JiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAg
bV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93bkV2ZW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2
dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwCmluZGV4IDM2OTBlOWM3ZmVlYzEwYzQwOTIyN2FjNTk3ODVhODZiOTUzZTUwMDUuLjNi
ODY4ODQ5ZjMzNDNjN2Y1YzMzYWY3ZTZjYWQ3YWVjODEzMmFhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAtNzQ3LDExICs3NDcsMTEg
QEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKIHsKICAgICBSZW5kZXJFbGVtZW50KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAo
ciAmJiByLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGlzUGx1Z0luSW1hZ2VF
bGVtZW50KCkgJiYgZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNuYXBzaG90ICYmIGV2ZW50
LT5pc01vdXNlRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50KSB7Ci0gICAgICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50
KGV2ZW50KTsKLSAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0
dG9uKSB7Ci0gICAgICAgICAgICAgICAgdXNlckRpZENsaWNrU25hcHNob3QobW91c2VFdmVudCwg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBXYWl0aW5nRm9yU25hcHNob3QgJiYgaXM8TW91c2VF
dmVudD4oZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKKyAgICAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpOworICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgeworICAgICAgICAgICAgICAgIHVzZXJEaWRDbGlja1NuYXBzaG90KCZtb3VzZUV2
ZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IGVjYzg3ZTI3NWNi
NmI3NTU1ZGJlZGE0N2MyYWU2MGViY2Q4OGI5MDEuLmY5NjQ4ZGI5OGQxOWJhMzAxZTQ1NTY3MTY1
NDNlMzBiOTliNTVjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCkBAIC0xMTQ2LDEwICsxMTQ2LDExIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVM
aXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgUmVmUHRyPFJlbmRlclRo
ZW1lPiByZW5kZXJUaGVtZSA9IHBhZ2UgPyAmcGFnZS0+dGhlbWUoKSA6IFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisg
ICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGlmIChwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudCh0b0tleWJvYXJkRXZl
bnQoZXZlbnQpKSkKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25j
YXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChwbGF0Zm9ybUhhbmRsZUtl
eWRvd25FdmVudCgma2V5Ym9hcmRFdmVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgLy8gV2hlbiB1c2luZyBzcGF0aWFsIG5hdmlnYXRpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0
byBuYXZpZ2F0ZSBhd2F5CkBAIC0xMTYwLDcgKzExNjEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRl
bnRpZmllciA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlm
aWVyKCk7CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0SXRlbXMoKTsKICAgICAgICAg
aW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CkBAIC0x
MTkyLDIyICsxMTkzLDIzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICBzZWxlY3RPcHRpb24obGlz
dFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgRGVzZWxlY3RPdGhlck9wdGlvbnMgfCBEaXNwYXRj
aENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CiAKICAgICAgICAgaWYgKGhhbmRsZWQpCi0gICAg
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJk
RXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAKICAgICAvLyBVc2Uga2V5IHByZXNz
IGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8g
b24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2
ZW50LgogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAo
IWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBpbnQga2V5Q29kZSA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUNvZGUoKTsKKyAgICAg
ICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+
KCpldmVudCk7CisgICAgICAgIGludCBrZXlDb2RlID0ga2V5Ym9hcmRFdmVudC5rZXlDb2RlKCk7
CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAgIGlmIChrZXlDb2RlID09
ICcgJyAmJiBpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLmZyYW1lKCkpKSB7
CiAgICAgICAgICAgICAvLyBVc2Ugc3BhY2UgdG8gdG9nZ2xlIGFycm93IGtleSBoYW5kbGluZyBm
b3Igc2VsZWN0aW9uIGNoYW5nZSBvciBzcGF0aWFsIG5hdmlnYXRpb24uCiAgICAgICAgICAgICBt
X2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gIW1fYWN0aXZlU2VsZWN0aW9uU3RhdGU7Ci0gICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZl
bnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xMjQ2LDE3ICsxMjQ4LDE3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0
RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT0gJ1xyJykgewogICAg
ICAgICAgICAgICAgIGlmIChmb3JtKCkpCi0gICAgICAgICAgICAgICAgICAgIGZvcm0oKS0+c3Vi
bWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb3JtKCkt
PnN1Ym1pdEltcGxpY2l0bHkoJmtleWJvYXJkRXZlbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAg
ICBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChoYW5k
bGVkKQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogCi0gICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01v
dXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQp
LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgZm9jdXMoKTsKICNpZiAhUExBVEZP
Uk0oSU9TKQogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc01lbnVMaXN0
KCkpIHsKQEAgLTEzMzYsMzUgKzEzMzgsMzUgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlz
dEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0SXRlbXMoKTsKIAotICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+
aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2
ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAgICAgICAg
IC8vIENhbGxpbmcgZm9jdXMoKSBtYXkgcmVtb3ZlIG9yIGNoYW5nZSBvdXIgcmVuZGVyZXIsIGlu
IHdoaWNoIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBoYW5kbGUgdGhlIGV2ZW50IGZ1cnRoZXIuCiAg
ICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNMaXN0Qm94KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gQ29udmVydCB0byBjb29yZHMgcmVsYXRpdmUg
dG8gdGhlIGxpc3QgYm94IGlmIG5lZWRlZC4KLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVu
dCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0g
cm91bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5h
YnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICAgICAgTW91c2VFdmVudCYg
bW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgICAgIEludFBv
aW50IGxvY2FsT2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9M
b2NhbChtb3VzZUV2ZW50LmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOwogICAg
ICAgICBpbnQgbGlzdEluZGV4ID0gdG9SZW5kZXJMaXN0Qm94KHJlbmRlcmVyKCkpLT5saXN0SW5k
ZXhBdE9mZnNldCh0b0ludFNpemUobG9jYWxPZmZzZXQpKTsKICAgICAgICAgaWYgKGxpc3RJbmRl
eCA+PSAwKSB7CiAgICAgICAgICAgICBpZiAoIWlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShs
aXN0SW5kZXgsIG1vdXNlRXZlbnQtPm1ldGFLZXkoKSwgbW91c2VFdmVudC0+c2hpZnRLZXkoKSk7
CisgICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZl
bnQubWV0YUtleSgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5KCkpOwogI2Vsc2UKLSAgICAgICAgICAg
ICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJbmRleCwgbW91c2VFdmVudC0+Y3RybEtleSgp
LCBtb3VzZUV2ZW50LT5zaGlmdEtleSgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3Rl
ZFN0YXRlKGxpc3RJbmRleCwgbW91c2VFdmVudC5jdHJsS2V5KCksIG1vdXNlRXZlbnQuc2hpZnRL
ZXkoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLnNldE1vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCgpOwogCi0gICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYm
ICF0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVB
cmVhKCkpIHsKLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChl
dmVudCk7Ci0gICAgICAgIGlmIChtb3VzZUV2ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uIHx8
ICFtb3VzZUV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkg
JiYgIXRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJs
ZUFyZWEoKSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91
c2VFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gTGVm
dEJ1dHRvbiB8fCAhbW91c2VFdmVudC5idXR0b25Eb3duKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVy
ZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgVXNl
VHJhbnNmb3JtcykpOworICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQ
b2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0
aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKICAgICAgICAgaW50IGxpc3RJbmRleCA9IHRvUmVuZGVy
TGlzdEJveChyZW5kZXJlcigpKS0+bGlzdEluZGV4QXRPZmZzZXQodG9JbnRTaXplKGxvY2FsT2Zm
c2V0KSk7CiAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCkgewogICAgICAgICAgICAgaWYgKCFp
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewpAQCAtMTM4MSw5ICsxMzgzLDkgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKHRydWUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVu
dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKSB7CisgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXM8TW91
c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmF1dG9z
Y3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gVGhpcyBjbGljayBv
ciBkcmFnIGV2ZW50IHdhcyBub3Qgb3ZlciBhbnkgb2YgdGhlIG9wdGlvbnMuCiAgICAgICAgIGlm
IChtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xMzkyLDkgKzEzOTQsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAvLyB0aW1lciBzdG9wcy4K
ICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNL
ZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIg
PSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICAgICAgS2V5
Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVu
dCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQu
a2V5SWRlbnRpZmllcigpOwogCiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogICAgICAg
ICBpbnQgZW5kSW5kZXggPSAwOwpAQCAtMTQ1NiwxNSArMTQ2MCwxNSBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBtX2FsbG93c05vbkNvbnRpZ3VvdXNTZWxlY3Rp
b24gPSBtX211bHRpcGxlICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCku
ZnJhbWUoKSk7CiAjZWxzZQotICAgICAgICAgICAgbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0
aW9uID0gbV9tdWx0aXBsZSAmJiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQo
KS5mcmFtZSgpKSB8fCB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5jdHJsS2V5KCkpOworICAgICAg
ICAgICAgbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0aW9uID0gbV9tdWx0aXBsZSAmJiAoaXNT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgpKSB8fCBrZXlib2FyZEV2
ZW50LmN0cmxLZXkoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wgc2VsZWN0TmV3SXRlbSA9
IHRvS2V5Ym9hcmRFdmVudChldmVudCktPnNoaWZ0S2V5KCkgfHwgIW1fYWxsb3dzTm9uQ29udGln
dW91c1NlbGVjdGlvbjsKKyAgICAgICAgICAgIGJvb2wgc2VsZWN0TmV3SXRlbSA9IGtleWJvYXJk
RXZlbnQuc2hpZnRLZXkoKSB8fCAhbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0aW9uOwogCiAg
ICAgICAgICAgICBpZiAoc2VsZWN0TmV3SXRlbSkKICAgICAgICAgICAgICAgICBtX2FjdGl2ZVNl
bGVjdGlvblN0YXRlID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBhbmNob3IgaXMgdW5p
dGlhbGl6ZWQsIG9yIGlmIHdlJ3JlIGdvaW5nIHRvIGRlc2VsZWN0IGFsbAogICAgICAgICAgICAg
Ly8gb3RoZXIgb3B0aW9ucywgdGhlbiBzZXQgdGhlIGFuY2hvciBpbmRleCBlcXVhbCB0byB0aGUg
ZW5kIGluZGV4LgotICAgICAgICAgICAgYm9vbCBkZXNlbGVjdE90aGVycyA9ICFtX211bHRpcGxl
IHx8ICghdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVt
KTsKKyAgICAgICAgICAgIGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhbV9tdWx0aXBsZSB8fCAoIWtl
eWJvYXJkRXZlbnQuc2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVtKTsKICAgICAgICAgICAgIGlm
IChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8fCBkZXNlbGVjdE90aGVycykgewog
ICAgICAgICAgICAgICAgIGlmIChkZXNlbGVjdE90aGVycykKICAgICAgICAgICAgICAgICAgICAg
ZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKCk7CkBAIC0xNDc4LDE3ICsxNDgyLDE4IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHNjcm9sbFRvU2Vs
ZWN0aW9uKCk7CiAKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAo
IWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aW50IGtleUNvZGUgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlDb2RlKCk7CisgICAgICAg
IEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50Pigq
ZXZlbnQpOworICAgICAgICBpbnQga2V5Q29kZSA9IGtleWJvYXJkRXZlbnQua2V5Q29kZSgpOwog
CiAgICAgICAgIGlmIChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgIGlmIChmb3JtKCkp
Ci0gICAgICAgICAgICAgICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KGV2ZW50LCBmYWxzZSk7
Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAg
ICBmb3JtKCktPnN1Ym1pdEltcGxpY2l0bHkoJmtleWJvYXJkRXZlbnQsIGZhbHNlKTsKKyAgICAg
ICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfSBlbHNl
IGlmIChtX211bHRpcGxlICYmIGtleUNvZGUgPT0gJyAnICYmIG1fYWxsb3dzTm9uQ29udGlndW91
c1NlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gVXNlIHNwYWNlIHRvIHRvZ2dsZSBzZWxlY3Rp
b24gY2hhbmdlLgogICAgICAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9ICFtX2FjdGl2
ZVNlbGVjdGlvblN0YXRlOwpAQCAtMTQ5Nyw3ICsxNTAyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgQVNTRVJUKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zW21fYWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXhdKSk7CiAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKG1fYWN0aXZl
U2VsZWN0aW9uRW5kSW5kZXgsIHRydWUgLyptdWx0aSovLCBmYWxzZSAvKnNoaWZ0Ki8pOwogICAg
ICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE1MjMsOSArMTUyOCw5IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmIChl
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpKSB7Ci0gICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSB0b0tl
eWJvYXJkRXZlbnQoZXZlbnQpOwotICAgICAgICBpZiAoIWtleWJvYXJkRXZlbnQtPmN0cmxLZXko
KSAmJiAha2V5Ym9hcmRFdmVudC0+YWx0S2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPm1ldGFLZXko
KSAmJiB1X2lzcHJpbnQoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSkpIHsKKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBpczxLZXlib2FyZEV2
ZW50PihldmVudCkpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRv
d25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmICgha2V5Ym9hcmRFdmVu
dC5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQuYWx0S2V5KCkgJiYgIWtleWJvYXJkRXZlbnQu
bWV0YUtleSgpICYmIHVfaXNwcmludChrZXlib2FyZEV2ZW50LmNoYXJDb2RlKCkpKSB7CiAgICAg
ICAgICAgICB0eXBlQWhlYWRGaW5kKGtleWJvYXJkRXZlbnQpOwogICAgICAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTY1LDkgKzE1
NzAsOSBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50IGluZGV4
KSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7Ci0gICAg
aW50IGluZGV4ID0gbV90eXBlQWhlYWQuaGFuZGxlRXZlbnQoZXZlbnQsIFR5cGVBaGVhZDo6TWF0
Y2hQcmVmaXggfCBUeXBlQWhlYWQ6OkN5Y2xlRmlyc3RDaGFyKTsKKyAgICBpbnQgaW5kZXggPSBt
X3R5cGVBaGVhZC5oYW5kbGVFdmVudCgmZXZlbnQsIFR5cGVBaGVhZDo6TWF0Y2hQcmVmaXggfCBU
eXBlQWhlYWQ6OkN5Y2xlRmlyc3RDaGFyKTsKICAgICBpZiAoaW5kZXggPCAwKQogICAgICAgICBy
ZXR1cm47CiAgICAgc2VsZWN0T3B0aW9uKGxpc3RUb09wdGlvbkluZGV4KGluZGV4KSwgRGVzZWxl
Y3RPdGhlck9wdGlvbnMgfCBEaXNwYXRjaENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKaW5kZXggMjdmZWZkNjBiNGZjZGJhYzEz
OTFlZDZlODljOWE4YWZmNTM2OTY2NC4uZGE3ZjE1YTg5YTA1Y2Q3MjhjMzJhNjU1OTJhMDVkZTRh
MmNjMGIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaApAQCAtMTUx
LDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRh
dGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0OwogCiAgICAgdm9pZCBkZXNlbGVjdEl0ZW1z
KEhUTUxPcHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCA9IDApOwotICAgIHZvaWQgdHlwZUFo
ZWFkRmluZChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJk
RXZlbnQmKTsKICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKICAgICB2aXJ0dWFsIElu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAppbmRl
eCBlYzZjM2EyMGZmOTliYTJjOTQxNDkzM2ViZDZhOGE5MDhjM2E2ODQyLi4xMTJkMmZkMzYyNGMx
OWQyODg0NjY3NGQ3Yzg4NTU1NTMxOTYwMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U3VtbWFyeUVsZW1lbnQuY3BwCkBAIC0xMjYsMjggKzEyNiwyOSBAQCB2b2lkIEhUTUxTdW1tYXJ5
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSsw
MDIwIikgeworICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgICAg
ICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVu
dD4oKmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09
ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlKHRydWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5kbGVkKCkgLSBJRSBkaXNwYXRjaGVzIGEg
a2V5cHJlc3MgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0b0tleWJvYXJkRXZlbnQoZXZl
bnQpLT5jaGFyQ29kZSgpKSB7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGtleWJvYXJkRXZlbnQuY2hhckNvZGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoK
ICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBjYXNlICcgJzoKICAgICAgICAgICAgICAg
ICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4KLSAgICAgICAgICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGtl
eWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVu
dChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeworICAgICAgICAgICAgaWYg
KGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50ICYmIGtleWJv
YXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGFjdGl2ZSgpKQogICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNr
KGV2ZW50KTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAyYTRjNWM1YWNmMWFiM2M5NmQ0
ZGM1MzQ5YzdjMjkwNTIyN2U2YmM1Li4zNWZhZTEyYzY0NjYyNTZmNTg5ZjZiMzA5MDMzMjJiZjVk
YjVkMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAK
QEAgLTI3MCw4ICsyNzAsOCBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmV2ZW50SW50
ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAgICAgZm9yd2FyZEV2ZW50KGV2ZW50KTsKLSAg
ICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KCkpCi0gICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRvQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoZXZlbnQpKTsKKyAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGlzPEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkpCisgICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkpOwogCiAg
ICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKaW5kZXggMWViZWM3N2MxMWMx
MDAzYTU1OTMzZDAxZGE3NzQzNWZkNmYyMDFkNC4uY2M5YmRjOTkwYTY4NTZmMGE4ZDYzYjkxZGVi
ZjU5MTVhYzFlMGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC0z
OTgsOCArMzk4LDggQEAgdm9pZCBJbWFnZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KQogICAgICAgICBtX2RvY3VtZW50LndpbmRv
d1NpemVDaGFuZ2VkKCk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgTW91c2VF
dmVudCYgbW91c2VFdmVudCA9IHRvTW91c2VFdmVudCgqZXZlbnQpOworICAgIGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
ZXZlbnQpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3Vz
ZUV2ZW50PigqZXZlbnQpOwogICAgICAgICBtX2RvY3VtZW50LmltYWdlQ2xpY2tlZChtb3VzZUV2
ZW50LngoKSwgbW91c2VFdmVudC55KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUlucHV0VHlwZS5jcHAKaW5kZXggZDBlMjViZTE5MDdlM2M5MmVhZmUzNjgzNmQ4ODFkNjJiZjhj
YjUwOC4uMjg5YTllZDI1ZWFjYzQyYWRmYTkwZGQwODhkZjc5ZTgzNDhiN2M2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKQEAgLTg5LDggKzg5LDggQEAgdm9pZCBJbWFn
ZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCogZXZlbnQpCiAgICAgbV9j
bGlja0xvY2F0aW9uID0gSW50UG9pbnQoKTsKICAgICBpZiAoZXZlbnQtPnVuZGVybHlpbmdFdmVu
dCgpKSB7CiAgICAgICAgIEV2ZW50JiB1bmRlcmx5aW5nRXZlbnQgPSAqZXZlbnQtPnVuZGVybHlp
bmdFdmVudCgpOwotICAgICAgICBpZiAodW5kZXJseWluZ0V2ZW50LmlzTW91c2VFdmVudCgpKSB7
Ci0gICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KHVuZGVy
bHlpbmdFdmVudCk7CisgICAgICAgIGlmIChpczxNb3VzZUV2ZW50Pih1bmRlcmx5aW5nRXZlbnQp
KSB7CisgICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VF
dmVudD4odW5kZXJseWluZ0V2ZW50KTsKICAgICAgICAgICAgIGlmICghbW91c2VFdmVudC5pc1Np
bXVsYXRlZCgpKQogICAgICAgICAgICAgICAgIG1fY2xpY2tMb2NhdGlvbiA9IEludFBvaW50KG1v
dXNlRXZlbnQub2Zmc2V0WCgpLCBtb3VzZUV2ZW50Lm9mZnNldFkoKSk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCAxNTcwMjZkODlkMmE0MDhhOGIxNTJkNTE1ZDg1
YWIwMmQ2NWQ1OGM5Li4zYjIyN2FiMDBjNDk4NDYxNmJiMDhmMTI1ODIyMzNjMTg2Yjc0NDI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBJbnB1
dFR5cGU6OmZvcndhcmRFdmVudChFdmVudCopCiAKIGJvb2wgSW5wdXRUeXBlOjpzaG91bGRTdWJt
aXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4gZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQg
JiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y2hhckNvZGUoKSA9PSAnXHInOworICAgIHJldHVy
biBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5cHJlc3NFdmVudCAmJiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpLmNoYXJD
b2RlKCkgPT0gJ1xyJzsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IElucHV0VHlw
ZTo6Zm9ybUZvclN1Ym1pc3Npb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9NZWRpYURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVu
dC5jcHAKaW5kZXggOWYwN2ZhM2RkZWI5ZTA5ZDQxZDdjMmU2M2YzMzEyN2U4MTJmZjZmNC4uN2Rh
OWJiODQ1MGFlYWU0MmZjZDUzY2UxMjhiYjEwYzY2MDhkNzQ1MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhRG9jdW1lbnQuY3BwCkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2b2lkIE1lZGlhRG9jdW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmICghaXM8Q29udGFp
bmVyTm9kZT4odGFyZ2V0Tm9kZSkpCiAgICAgICAgIHJldHVybjsKICAgICBDb250YWluZXJOb2Rl
JiB0YXJnZXRDb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGFyZ2V0Tm9kZSk7
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBl
dmVudC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgewogICAg
ICAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyA9IGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQodGFy
Z2V0Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCF2aWRlbykKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0gdG9LZXlib2FyZEV2ZW50
KGV2ZW50KTsKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAi
VSswMDIwIikgeyAvLyBzcGFjZQorICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50
ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKGtleWJvYXJk
RXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7IC8vIHNwYWNlCiAgICAgICAgICAg
ICBpZiAodmlkZW8tPnBhdXNlZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZpZGVvLT5jYW5Q
bGF5KCkpCiAgICAgICAgICAgICAgICAgICAgIHZpZGVvLT5wbGF5KCk7CiAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICB2aWRlby0+cGF1c2UoKTsKLSAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IGUxNTAxNDliYzE0MDliMWE3MTU1MjViMTcxZWUz
YjBhYTY2ZGJhNDMuLjdhOWZlMTQxNmIyMzE0OWJhMTc2MDA4ZDYxYmQyYjI2Zjc2NTdiYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTIwNiw3ICsy
MDYsOCBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KCkKIAogYm9v
bCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50
KQogewotICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0
RXZlbnQgJiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNlVHlw
ZSAmJiB0b1RleHRFdmVudChldmVudCktPmRhdGEoKSA9PSAiXG4iKSB8fCBJbnB1dFR5cGU6OnNo
b3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOworICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgaXM8VGV4dEV2ZW50PihldmVudCkgJiYg
ZG93bmNhc3Q8VGV4dEV2ZW50PigqZXZlbnQpLmRhdGEoKSA9PSAiXG4iKQorICAgICAgICB8fCBJ
bnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOwogfQogCiBSZW5kZXJQdHI8
UmVuZGVyRWxlbWVudD4gVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVyKFBh
c3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKaW5kZXggOWU4M2U2MmY5Njdi
ZjE2YjA5YjRhMTI2MmY2OGJiOGU5MWU5Mzk3YS4uMjYzODYzYmU3MDYwY2Q5NWFlZDU5NzhkOWUz
ZWMwNGUzMjA4ODAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dChEb2N1bWVudCYgZG9jdW0KIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gTGVmdCBidXR0b24g
aXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSkK
KyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCkuYnV0dG9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcmVuZGVyZXIoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAppbmRleCBkNWE0NTZiYTk4MzJjZjlhZDk5ZGUzOWMwYzBhZDQ3MGI0ODAyNzk3Li4zMmYz
YTUzMzRkY2NkMzZmOTg4MmM5ZTgxNmFiNjkxMjhlYTgxZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0yMjEsOCAr
MjIxLDggQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogewogICAgIE1lZGlhQ29udHJvbERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwogCi0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewot
ICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IHRvTW91c2VFdmVudChldmVudCktPmFic29s
dXRlTG9jYXRpb24oKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgICAg
IExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5hYnNv
bHV0ZUxvY2F0aW9uKCk7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+dGFyZ2V0KCkgPT0gdGhpcykgewogICAgICAgICAg
ICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwpAQCAtMzM3LDEyICszMzcsMTIgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnQKIAog
dm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgIGlm
ICghaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8IGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygp
Lm1vdXNlb3V0RXZlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFBvb3IgbWFuJ3MgbW91
c2VsZWF2ZSBldmVudCBkZXRlY3Rpb24uCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRv
TW91c2VFdmVudChldmVudCk7Ci0gICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBtb3Vz
ZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRv
d25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSBtb3VzZUV2ZW50LnJlbGF0ZWRUYXJnZXQoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQg
fHwgIXJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTg1MSw3
ICs4NTEsNyBAQCBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFD
b250cm9sVGltZWxpbmVFbGVtZW50OjpjcmVhdGUoRG9jdQogdm9pZCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8v
IExlZnQgYnV0dG9uIGlzIDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0
dG9uLgotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50
KS0+YnV0dG9uKCkpCisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxN
b3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IXJlbmRlcmVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
Y3BwCmluZGV4IGZhMWJlYmY0MzYwMzMwMDI4ZjBkNWEwMjY1NzQyNTM3NzZkOGJiMWUuLjRkM2Vj
ZjgwZDI5MmZhMjU1Mzc1YmRmNGE2YWYzZDQ5ZTQzMGI2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCkBAIC0zNjYsOSArMzY2LDkgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKIAogYm9vbCBN
ZWRpYUNvbnRyb2xzOjpjb250YWluc1JlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50KQogewotICAg
IGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZl
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSB0b01vdXNlRXZlbnQoZXZlbnQpLT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgRXZlbnRUYXJn
ZXQqIHJlbGF0ZWRUYXJnZXQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnJlbGF0ZWRU
YXJnZXQoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gY29udGFpbnMocmVsYXRlZFRhcmdldC0+dG9Ob2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAKaW5kZXggMTE5
NmE3MTg3NjYwYjdlMzUwMjdkNDU2NTNjMzkzOTAwNjNlZmMzZS4uOGM4NGRhNzNiZjY2MDBmNDVj
MTQyYjYzMzRlYWE2MzRjNDNkOGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCkBAIC01ODgsMTAgKzU4OCwxMCBAQCB2b2lkIE1l
ZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFdmVudAogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KQogICAgICAgICBtX21lZGlhQ29udHJvbHMtPmhhbmRsZUNsaWNrRXZlbnQo
ZXZlbnQpOwotICAgIGVsc2UgaWYgKChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVl
bEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkg
JiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsK
LSAgICAgICAgV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHRvV2hlZWxFdmVudChldmVudCk7Ci0g
ICAgICAgIGlmIChtX21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENhcHRpb25zQ29udGFpbmVy
UHJldmVudFBhZ2VTY3JvbGxpbmcod2hlZWxFdmVudC0+d2hlZWxEZWx0YVkoKSkpCi0gICAgICAg
ICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKKyAgICBlbHNlIGlmICgoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkgeworICAgICAg
ICBXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gZG93bmNhc3Q8V2hlZWxFdmVudD4oKmV2ZW50KTsK
KyAgICAgICAgaWYgKG1fbWVkaWFDb250cm9scy0+c2hvdWxkQ2xvc2VkQ2FwdGlvbnNDb250YWlu
ZXJQcmV2ZW50UGFnZVNjcm9sbGluZyh3aGVlbEV2ZW50LndoZWVsRGVsdGFZKCkpKQorICAgICAg
ICAgICAgd2hlZWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKaW5kZXggODFj
MjA2ODBkOTI1Y2E4MjAyODViMmZmNTYzZGYyYTUxYjJhYzBjYi4uMjJiZTYzYjQ3NWUwOTUxMjc1
Njc4Yjg0OGZiYWI1ZDMyODY0OWQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OnN0b3BEcmFnZ2luZygpCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQg
U2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
LSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgIGlmICghaXM8TW91c2VFdmVu
dD4oZXZlbnQpKSB7CiAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Nyw5ICszNDcsOSBAQCB2b2lk
IFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9N
b3VzZUV2ZW50KGV2ZW50KTsKLSAgICBib29sIGlzTGVmdEJ1dHRvbiA9IG1vdXNlRXZlbnQtPmJ1
dHRvbigpID09IExlZnRCdXR0b247Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUg
PSBldmVudC0+dHlwZSgpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxN
b3VzZUV2ZW50PigqZXZlbnQpOworICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91c2VFdmVudC5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
ID0gbW91c2VFdmVudC50eXBlKCk7CiAKICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBj
YWxsIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpIGhlcmUgYmVjYXVzZQogICAgIC8vIE1lZGlh
Q29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigpIHdhbnRzIHRvIGhh
bmRsZSB0aGVzZQpAQCAtMzYyLDExICszNjIsMTEgQEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAg
fSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CiAg
ICAgICAgIGlmIChtX2luRHJhZ01vZGUpCi0gICAgICAgICAgICBzZXRQb3NpdGlvbkZyb21Qb2lu
dChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOworICAgICAgICAgICAgc2V0UG9zaXRp
b25Gcm9tUG9pbnQobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOworICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKCZtb3VzZUV2ZW50
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9T
cGluQnV0dG9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0
dG9uRWxlbWVudC5jcHAKaW5kZXggNTAzYjM1YjZiZjVhNzgxNWRkNzFlN2E5YzYxOThhZGM4NzIw
MDZlNS4uZmUzY2EzYmYzMmY3YmNmNzM0ODhhNWM2OGIyYmNhN2JjMGRjYjFjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtNjcs
NyArNjcsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojp3aWxsRGV0YWNoUmVuZGVyZXJzKCkK
IAogdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICBpZiAoIWlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSkgewogICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwogICAgICAgICByZXR1cm47CkBAIC04Niw5ICs4Niw5IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7
Ci0gICAgSW50UG9pbnQgbG9jYWwgPSByb3VuZGVkSW50UG9pbnQoYm94LT5hYnNvbHV0ZVRvTG9j
YWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7Ci0gICAg
aWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYg
bW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIE1vdXNlRXZlbnQmIG1v
dXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgIEludFBvaW50IGxv
Y2FsID0gcm91bmRlZEludFBvaW50KGJveC0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQuYWJz
b2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgaWYgKG1vdXNlRXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKGJveC0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94
UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBm
dW5jdGlvbnMgb2YgSFRNTElucHV0RWxlbWVudCBtYXkgcnVuIEphdmFTY3JpcHQKICAgICAgICAg
ICAgIC8vIGNvZGUgd2hpY2ggZGV0YWNoZXMgdGhpcyBzaGFkb3cgbm9kZS4gV2UgbmVlZCB0byB0
YWtlIGEgcmVmZXJlbmNlCkBAIC0xMDcsMTEgKzEwNywxMSBAQCB2b2lkIFNwaW5CdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICAg
ICAgZG9TdGVwQWN0aW9uKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKQorICAg
IH0gZWxzZSBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pCiAgICAgICAgIHN0b3BSZXBl
YXRpbmdUaW1lcigpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlbW92ZUV2ZW50KSB7CisgICAgZWxzZSBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CiAgICAgICAgIGlmIChib3gtPnBpeGVsU25hcHBl
ZEJvcmRlckJveFJlY3QoKS5jb250YWlucyhsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICghbV9j
YXB0dXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpKSB7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgaWYgKCFtb3VzZUV2ZW50LmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKCZt
b3VzZUV2ZW50KTsKIH0KIAogdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbE9wZW5Qb3B1cCgp
CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50
KEV2ZW50KiBldmVudCkKICAgICBpZiAoIXJlbmRlckJveCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgIT0gV2hlZWxFdmVudEludGVyZmFjZVR5
cGUpCisgICAgaWYgKGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFtX3NwaW5CdXR0b25Pd25lcikKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFNwaW5C
dXR0b25FbGVtZW50Ojpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmICghbV9zcGlu
QnV0dG9uT3duZXItPnNob3VsZFNwaW5CdXR0b25SZXNwb25kVG9XaGVlbEV2ZW50cygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkb1N0ZXBBY3Rpb24odG9XaGVlbEV2ZW50KGV2ZW50KS0+d2hl
ZWxEZWx0YVkoKSk7CisgICAgZG9TdGVwQWN0aW9uKGRvd25jYXN0PFdoZWVsRXZlbnQ+KCpldmVu
dCkud2hlZWxEZWx0YVkoKSk7CiAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCmluZGV4IDE5MmY4ZTAwNjNmYTVhMDhlOGY0ODIxZmRlZGUwM2ZmZTIwYWQw
MWMuLjdiMjk1M2Q4NzhiOTBhZDMyMWZhNWRkMmIyZjFiMDc0ZWI2YmRmNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gT24gbW91
c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRlZAogICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgpKTsKLSAgICBp
ZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAg
ICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwogI2lmICFQTEFURk9S
TShJT1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93
bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAg
aWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpKSB7CiAg
ICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAg
ICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRz
RWxlbWVudCh0aGlzKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAg
IGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAg
ICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKG1fY2Fw
dHVyaW5nKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFt
ZSgpKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmlu
Z01vdXNlRXZlbnRzRWxlbWVudChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggODU2OTA5NjhkZWM0YWIwOGM5
Yjg4NGE5MzhjMWE0NjkxZDE4ZWRhOS4uMDMzYWFjODNlMDczOTljYjJmOTAwNjI1MjNlNmMwNDU3
NmM5ZmI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAKQEAgLTI4NCwxMiArMjg0LDEyIEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4
dE1lCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hFdmVudEFzQ29udGV4dE1l
bnVFdmVudChFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpICYmIFVT
RShBQ0NFU1NJQklMSVRZX0NPTlRFWFRfTUVOVVMpCi0gICAgaWYgKCFldmVudCB8fCAhZXZlbnQt
PmlzTW91c2VFdmVudCgpKQorICAgIGlmICghZXZlbnQgfHwgIWlzPE1vdXNlRXZlbnQ+KGV2ZW50
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnQtPnRhcmdldCgp
LT50b05vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZl
bnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgIEludFBvaW50IG1vdXNlUG9pbnQgPSBJbnRQ
b2ludChtb3VzZUV2ZW50LT5jbGllbnRYKCksIG1vdXNlRXZlbnQtPmNsaWVudFkoKSk7CisgICAg
TW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7Cisg
ICAgSW50UG9pbnQgbW91c2VQb2ludCA9IEludFBvaW50KG1vdXNlRXZlbnQuY2xpZW50WCgpLCBt
b3VzZUV2ZW50LmNsaWVudFkoKSk7CiAKICAgICBtX2Zyb250ZW5kUGFnZS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCkuc2hvd0NvbnRleHRNZW51QXQoZnJhbWUsIG1vdXNlUG9pbnQpOwogI2Vsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCBh
M2Y1OTA3ZTRkNDdmMjA0YWFiMzk0YjhjMDIzYjhlNWRkMzEyOWNhLi43NmU4ODFjZTI4ZWJlN2Vj
NzJkN2MyMjBlMmQwMTRkNzcxOGY1OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsMTAgKzE1MCwxMCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0
TWVudShFdmVudAogewogICAgIEFTU0VSVChldmVudCk7CiAgICAgCi0gICAgaWYgKCFldmVudC0+
aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IHRvTW91c2VF
dmVudCgqZXZlbnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3Vz
ZUV2ZW50PigqZXZlbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1vdXNlRXZlbnQuYWJz
b2x1dGVMb2NhdGlvbigpKTsKIAogICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRv
Tm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDMzYTlhNTM4OWJj
YzlmNDM4MTc1NjdmMzM3YWI4YWQ2ODBhMzJkMjcuLjM4Y2ZhNzI5ZWJhM2U1Y2FmNTJiODVmMDRk
ZWVjZWZjNzg3ZTk1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM1
MjMsNyArMzUyMyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudChj
b25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlCiB7CiAgICAgLy8gUGxhdGZv
cm1zIHNob3VsZCBkaWZmZXJlbnRpYXRlIHJlYWwgY29tbWFuZHMgbGlrZSBzZWxlY3RBbGwgZnJv
bSB0ZXh0IGlucHV0IGluIGRpc2d1aXNlIChsaWtlIGluc2VydE5ld2xpbmUpLAogICAgIC8vIGFu
ZCBhdm9pZCBkaXNwYXRjaGluZyB0ZXh0IGlucHV0IGV2ZW50cyBmcm9tIGtleWRvd24gZGVmYXVs
dCBoYW5kbGVycy4KLSAgICBBU1NFUlQoIXVuZGVybHlpbmdFdmVudCB8fCAhdW5kZXJseWluZ0V2
ZW50LT5pc0tleWJvYXJkRXZlbnQoKSB8fCB0b0tleWJvYXJkRXZlbnQodW5kZXJseWluZ0V2ZW50
KS0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKKyAgICBBU1NFUlQoIXVu
ZGVybHlpbmdFdmVudCB8fCAhaXM8S2V5Ym9hcmRFdmVudD4odW5kZXJseWluZ0V2ZW50KSB8fCBk
b3duY2FzdDxLZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2ZW50KS50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldDsKICAgICBp
ZiAodW5kZXJseWluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggMTQ5MDYwYWFhNTZiOTM0ZTFjOTlmYWMwYzA3MDI0
ZTg3Y2Y4YjFiNS4uYjQ2NGNjNzMzMDRjMTY4YzM1OTgxMTQzYmIyZThkYTRjYjZmOTY1MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CkBAIC01OTAsOSArNTkwLDkgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJblVuYXZh
aWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW4KICAgICAgICAgJiYg
aW5kaWNhdG9yUmVjdC5jb250YWlucyhwb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyRW1iZWRkZWRP
YmplY3Q6OmlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihNb3VzZUV2ZW50KiBldmVudCkg
Y29uc3QKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWJsZVBsdWdpbklu
ZGljYXRvcihjb25zdCBNb3VzZUV2ZW50JiBldmVudCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNJ
blVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGFic29sdXRlVG9Mb2NhbChldmVudC0+YWJzb2x1
dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgcmV0dXJuIGlzSW5VbmF2YWlsYWJs
ZVBsdWdpbkluZGljYXRvcihhYnNvbHV0ZVRvTG9jYWwoZXZlbnQuYWJzb2x1dGVMb2NhdGlvbigp
LCBVc2VUcmFuc2Zvcm1zKSk7CiB9CiAKIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRs
ZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqIGV2ZW50KQpAQCAtNjAwLDIx
ICs2MDAsMjEgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFuZGxlVW5hdmFpbGFibGVQ
bHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKCFzaG91bGRVbmF2YWls
YWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2
ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOworICAg
IE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwog
ICAgIEhUTUxQbHVnSW5FbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkVsZW1l
bnQ+KGZyYW1lT3duZXJFbGVtZW50KCkpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsK
ICAgICAgICAgbV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yID0gaXNJ
blVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpOwogICAgICAgICBpZiAobV9t
b3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKSB7CiAgICAgICAgICAgICBm
cmFtZSgpLmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudCgmZWxl
bWVudCk7CiAgICAgICAgICAgICBlbGVtZW50LnNldElzQ2FwdHVyaW5nTW91c2VFdmVudHModHJ1
ZSk7CiAgICAgICAgICAgICBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3NlZCh0
cnVlKTsKICAgICAgICAgfQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIHRvTW91c2VFdmVudChl
dmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAobW91c2VFdmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKG1fdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJ
c1ByZXNzZWQpIHsKICAgICAgICAgICAgIGZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50KG51bGxwdHIpOwogICAgICAgICAgICAgZWxlbWVudC5zZXRJ
c0NhcHR1cmluZ01vdXNlRXZlbnRzKGZhbHNlKTsKQEAgLTYyNyw5ICs2MjcsOSBAQCB2b2lkIFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpoYW5kbGVVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvckV2ZW50
KEV2ZW50KiBldmVudCkKICAgICAgICAgbV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2lu
SW5kaWNhdG9yID0gZmFsc2U7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZl
bnQpIHsKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92
ZUV2ZW50KSB7CiAgICAgICAgIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2Vk
KG1fbW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvciAmJiBpc0luVW5hdmFp
bGFibGVQbHVnaW5JbmRpY2F0b3IobW91c2VFdmVudCkpOwotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuaAppbmRleCA0ZDM0MmQ3ODQ0MTBiN2E3MmU3MTEzYjZiZDgyYTgxYTZlNzVkNGE1Li4y
YmZiZWMxODFjOGFiYzQ4NDM0YTEzZTNmYjE1NDFlMmNiMmRiN2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApAQCAtODQsNyArODQsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiog
c3RvcEVsZW1lbnQpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCBzZXRVbmF2YWlsYWJsZVBs
dWdpbkluZGljYXRvcklzUHJlc3NlZChib29sKTsKLSAgICBib29sIGlzSW5VbmF2YWlsYWJsZVBs
dWdpbkluZGljYXRvcihNb3VzZUV2ZW50KikgY29uc3Q7CisgICAgYm9vbCBpc0luVW5hdmFpbGFi
bGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VFdmVudCYpIGNvbnN0OwogICAgIGJvb2wgaXNJ
blVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAg
ICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBpbmRpY2F0
b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0UmVjdCYgYXJyb3dS
ZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0OwogICAgIExheW91
dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JCb3VuZHMoY29uc3QgTGF5b3V0UG9pbnQm
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFw
c2hvdHRlZFBsdWdJbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNo
b3R0ZWRQbHVnSW4uY3BwCmluZGV4IGRlMzcyNmQyYzM2ZWQzYjVhNWFiYmNkOGJkZTMwZmI2NmI5
ZTZkY2QuLjg3MGE1NDE0MDRkMWM1ZTBiMjg5MWZkZDIzMmZlYmVjNGQ0NTg1YTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNw
cApAQCAtMTU1LDEwICsxNTUsMTAgQEAgQ3Vyc29yRGlyZWN0aXZlIFJlbmRlclNuYXBzaG90dGVk
UGx1Z0luOjpnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBDdXIKIAogdm9pZCBS
ZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAg
IGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZl
bnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9N
b3VzZUV2ZW50KGV2ZW50KTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KTsKIAogICAgIC8vIElmIHdlJ3JlIGEgc25hcHNob3R0ZWQgcGx1
Z2luLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhY3RpdmF0ZSBvbgogICAgIC8vIGNsaWNrcyBl
dmVuIGlmIHRoZSBwYWdlIGlzIHByZXZlbnRpbmcgb3VyIGRlZmF1bHQgYmVoYXZpb3VyLiBPdGhl
cndpc2UKQEAgLTE2OCwyMCArMTY4LDIwIEBAIHZvaWQgUmVuZGVyU25hcHNob3R0ZWRQbHVnSW46
OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICAvLyBldmVudC4gVGhlIGNvZGUgYmVsb3cg
aXMgbm90IGNvbXBsZXRlbHkgZm9vbHByb29mLCBidXQgdGhlIHdvcnN0IHRoYXQKICAgICAvLyBj
b3VsZCBoYXBwZW4gaXMgdGhhdCBhIHNuYXBzaG90dGVkIHBsdWdpbiByZXN0YXJ0cy4KIAotICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgIGlm
IChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKICAgICAg
ICAgbV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiA9IGZhbHNlOwogCi0gICAgaWYgKG1vdXNl
RXZlbnQtPmJ1dHRvbigpICE9IExlZnRCdXR0b24pCisgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9u
KCkgIT0gTGVmdEJ1dHRvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgKG1faXNQb3RlbnRpYWxNb3VzZUFjdGl2
YXRpb24gJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSkgewor
ICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCAo
bV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiAmJiBtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50KSkgewogICAgICAgICBtX2lzUG90ZW50aWFsTW91c2VBY3Rp
dmF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgY2xpY2tXYXNPbk92ZXJsYXkgPSBwbHVnSW5J
bWFnZUVsZW1lbnQoKS5wYXJ0T2ZTbmFwc2hvdE92ZXJsYXkoZXZlbnQtPnRhcmdldCgpLT50b05v
ZGUoKSk7Ci0gICAgICAgIHBsdWdJbkltYWdlRWxlbWVudCgpLnVzZXJEaWRDbGlja1NuYXBzaG90
KG1vdXNlRXZlbnQsICFjbGlja1dhc09uT3ZlcmxheSk7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgYm9vbCBjbGlja1dhc09uT3ZlcmxheSA9IHBs
dWdJbkltYWdlRWxlbWVudCgpLnBhcnRPZlNuYXBzaG90T3ZlcmxheShtb3VzZUV2ZW50LnRhcmdl
dCgpLT50b05vZGUoKSk7CisgICAgICAgIHBsdWdJbkltYWdlRWxlbWVudCgpLnVzZXJEaWRDbGlj
a1NuYXBzaG90KCZtb3VzZUV2ZW50LCAhY2xpY2tXYXNPbk92ZXJsYXkpOworICAgICAgICBtb3Vz
ZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKICAgICAgICAgbV9pc1BvdGVu
dGlhbE1vdXNlQWN0aXZhdGlvbiA9IHRydWU7Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKaW5kZXggZjY3NTE4YmE2YzYxOTllMWFhZmMxY2IxYzI4NmJhN2EzMmMxYmQwOC4uZTQ5MzI5
MjdkM2ZkMzJjMTY2Yzk4MjU0YWFjNjMyNmNhZjEwMjJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtODkyLDggKzg5Miw4IEBA
IHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogCiAgICAgY29uc3Qg
V2ViRXZlbnQqIGN1cnJlbnRFdmVudCA9IFdlYlBhZ2U6OmN1cnJlbnRFdmVudCgpOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJFdmVudD4gc2ltdWxhdGVkV2ViRXZlbnQ7Ci0gICAgaWYgKGV2ZW50
LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5pc1NpbXVsYXRlZCgpKSB7
Ci0gICAgICAgIHNpbXVsYXRlZFdlYkV2ZW50ID0gY3JlYXRlV2ViRXZlbnQodG9Nb3VzZUV2ZW50
KGV2ZW50KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3Vz
ZUV2ZW50PigqZXZlbnQpLmlzU2ltdWxhdGVkKCkpIHsKKyAgICAgICAgc2ltdWxhdGVkV2ViRXZl
bnQgPSBjcmVhdGVXZWJFdmVudChkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkpOwogICAgICAg
ICBjdXJyZW50RXZlbnQgPSBzaW11bGF0ZWRXZWJFdmVudC5nZXQoKTsKICAgICB9CiAgICAgaWYg
KCFjdXJyZW50RXZlbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239000</attachid>
            <date>2014-09-30 22:32:25 -0700</date>
            <delta_ts>2014-09-30 22:33:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137284-20140930223225.patch</filename>
            <type>text/plain</type>
            <size>77366</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uZjRlMTI2ZDA3NTgzYTRjY2UwOWRiMDQ2ZmQ3Yzll
YWZjZTg1Y2RkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgRXZlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3Mjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRXZl
bnQgY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJv
ckV2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5oOgorICAgICAgICAq
IGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVs
YXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAqIGRvbS9VSUV2ZW50Lmg6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjppc0VudGVyS2V5S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzTGlua0NsaWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN1
bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL01l
ZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNp
dGx5KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
czo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAq
IHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZs
b3cgd2l0aCBlbm9ybW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWMxMzQ0NzVlYTU3M2Uw
NjMwY2U4OGE0Yzg1NTNmMTEzYzIzZWQ0YS4uN2FkMWNhMDVlMDc4ZTFkMjgzYTY4N2U4NzllY2U3
OWI3NDQ2NDZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFdmVudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFdmVu
dCBjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisKIDIwMTQtMDkt
MzAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBSZW5hbWUgVEVTVF9USEVNRV9ESVIgbWFjcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCBlYTUxZjc5ZjJkNDgwMDJlYTYxYzk5ZjVm
OWMxNzJlZTc5ZTU0MGIwLi41NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBA
IC01OSwxNCArNTksMTQgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAKLSAgICBpZiAoZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKCFpczxF
cnJvckV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSB0b0Vycm9yRXZl
bnQoZXZlbnQpOworICAgIEVycm9yRXZlbnQmIGVycm9yRXZlbnQgPSBkb3duY2FzdDxFcnJvckV2
ZW50PigqZXZlbnQpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKSk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+bWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsK
LSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+Y29sbm8oKSkpOworICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2ZW50Lm1lc3NhZ2Uo
KSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2
ZW50LmZpbGVuYW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVu
dC5saW5lbm8oKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LmNv
bG5vKCkpKTsKIAogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNWM3NmI2ZDQ1ZmIyZWRkNDNmODg2
MDExZGJmMGNjZjJlZjYyMjI0Ny4uNGFjNWUxOWU1YTcyY2Q2NzY4Mzc5NGViZGNkZmNmZjFhYjYy
MGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAgICAg
ICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwog
ICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5pc0JlZm9yZVVubG9hZEV2ZW50KCkpCi0gICAgICAgICAgICAgICAgdG9CZWZvcmVVbmxv
YWRFdmVudChldmVudCktPnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAm
JiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PEJlZm9yZVVubG9hZEV2ZW50PigqZXZlbnQpLnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCmluZGV4IGJiZTQxMTVjZDAyMjQ3ZWRiZjZlNzU0MGE5NzFiZGI0
OWI3NTRiZWQuLjc1NDIwMzU5Y2NlZTI0MzcwNTg2Mjg5Nzc3NzJhMmI3MzM5NTBiMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCkBAIC01MSw4ICs1
MSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZv
cmVVbmxvYWRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgK
aW5kZXggZWY3MmI3MzQ1MDU5Yjc5ZTM2ZTBjZmZjMzEwZGQ4NTEyZTA1NWQ0MS4uNTg3NjY5NmRj
MTU1YjUwZjRhNzMwODdjYjU5ZDFlYzI3ZTU2MjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9y
ZVVubG9hZEV2ZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9y
ZXR1cm5WYWx1ZTsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoQmVmb3JlVW5sb2FkRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChC
ZWZvcmVVbmxvYWRFdmVudCkKKwogI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5oCmluZGV4IGI1OGU3OWNjMGI3MzdhZWQyMTdkYjM0M2IzNzhkNTU4MmZm
MjUyOGMuLmM4ZGZkMzEwODM5MzAwOTBhMjIyM2JlMmIzOThjNDg4OWQzYmYxYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaApAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fY29sdW1uTnVtYmVyOwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhFcnJvckV2ZW50KQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRXJy
b3JFdmVudCkKKwogI2VuZGlmIC8vIEVycm9yRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAxYmU1
ZWJiODBhZTA3OTMzMzNjYTkzMjhjMjIxMzJhNTA5ZTYxMDRkLi42N2Y0MjZlMmI1ZGI1ZTQxY2Yx
NTQ5N2JiYjU3M2YxZWIwYmRiNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwNSwxMCArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50PiBtX3VuZGVy
bHlpbmdFdmVudDsKIH07CiAKLSNkZWZpbmUgRVZFTlRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBFdmVudCwgZXZlbnQs
IGV2ZW50LT5pcyMjVG9WYWx1ZVR5cGVOYW1lKCksIGV2ZW50LmlzIyNUb1ZhbHVlVHlwZU5hbWUo
KSkKLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkV2ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXMjI1RvVmFsdWVU
eXBlTmFtZSgpOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggYmZjYTlkMzlkOTI4
MTRiNTc0NDMzMzZmNzc1OTU5Nzk1MTJkZjVmOC4uNmRmZmM2ZmYyOWUxMmI3YjlhNWFjYTk4Y2Iy
ZjRhYTQ2MWZhZmY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTc2LDEy
ICs3NiwxMiBAQCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKQogCiB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSk7CisgICAgQVNTRVJUKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBpczxGb2N1c0V2ZW50PihldmVudCkpOwogICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQp
IHsKLSAgICAgICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGV2ZW50LmlzRm9jdXNFdmVudCgpKQotICAgICAgICAgICAgdG9Gb2N1
c0V2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxN
b3VzZUV2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OworICAgICAgICBlbHNlIGlmIChpczxGb2N1c0V2ZW50PihldmVudCkpCisgICAgICAgICAgICBk
b3duY2FzdDxGb2N1c0V2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCkpOwogICAgIH0KICAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50KTsKIH0KQEAgLTExMSw4ICsxMTEsOCBAQCB2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQpIGNvbnN0CiAgICAgY2hlY2tSZWFjaGFiaWxpdHko
bV90YXJnZXRUb3VjaGVzLmdldCgpKTsKICAgICBjaGVja1JlYWNoYWJpbGl0eShtX2NoYW5nZWRU
b3VjaGVzLmdldCgpKTsKICNlbmRpZgotICAgIEFTU0VSVChldmVudC5pc1RvdWNoRXZlbnQoKSk7
Ci0gICAgVG91Y2hFdmVudCYgdG91Y2hFdmVudCA9IHRvVG91Y2hFdmVudChldmVudCk7CisgICAg
QVNTRVJUKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSk7CisgICAgVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKICAgICB0b3VjaEV2ZW50LnNldFRvdWNo
ZXMobV90b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldFRhcmdldFRvdWNoZXMobV90YXJnZXRU
b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNo
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBjNmUyNWVkOWQ5
Yzg2Yzk5MDI1MGVlNmUyYzZjNmM3OTEzZWM2NzU2Li42MzI3OGJmZDcxYjhjMjJiZTc2ZDUzMTFm
NzVkMmYwOWE3MGRjZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApA
QCAtMzQyLDggKzM0Miw4IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5v
ZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgaWYgKEV2ZW50VGFy
Z2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKICAgICAgICAgZXZl
bnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChldmVudC0+aXNUb3Vj
aEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cygqdG9U
b3VjaEV2ZW50KGV2ZW50LmdldCgpKSkpCisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkg
eworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNo
RXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRm9jdXNFdmVudC5oCmluZGV4IDkxYzg4N2U3ZjNlNmM3Mjc0NzBlYmUwNDYxMmM3
NTk1YjA0OGJmMzUuLmI5NjY4NjZlMGU3NDU1Yjg4MGE2OWEzYTg3MzUxZDYwYWNjNDg1MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0ZvY3VzRXZlbnQuaApAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwogfTsKIAotRVZFTlRfVFlQRV9DQVNU
UyhGb2N1c0V2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRVZFTlQoRm9jdXNFdmVudCkKKwogI2VuZGlmIC8vIEZvY3VzRXZlbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCmluZGV4IGY5ZDgyOWRkZjYwMjU2NjE4ZWY4MjNl
NmFkYjZiZWVhMjBkOGIyNDEuLmI0MDMxNDBhOTgwZmEzODNjNjVkNWUzMDQyOGE5NTQ1NmE0MWRl
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKQEAgLTIyMCw5ICsyMjAsOSBA
QCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogS2V5Ym9hcmRFdmVudCogZmluZEtl
eWJvYXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAoRXZlbnQqIGUgPSBldmVudDsg
ZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQotICAgICAgICBpZiAoZS0+aXNLZXlib2FyZEV2
ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9LZXlib2FyZEV2ZW50KGUpOwotICAgIHJldHVy
biAwOworICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZSkpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oZSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCmluZGV4
IDg2ODdiMWZmODZmNGI2YTMzYTZlYTQwMGUyOTQ5MjhjNTRmYzFjNWYuLmFiOTQ1NzcxZDc1MDFm
YWU2ZTEzMDllMGUzMzYwODNlNzFlNjU2ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQu
aApAQCAtMTE5LDEwICsxMTksMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotRVZFTlRfVFlQ
RV9DQVNUUyhLZXlib2FyZEV2ZW50KQotCiBLZXlib2FyZEV2ZW50KiBmaW5kS2V5Ym9hcmRFdmVu
dChFdmVudCopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRVZFTlQoS2V5Ym9hcmRFdmVudCkKKwogI2VuZGlmIC8vIEtleWJvYXJkRXZlbnRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCmluZGV4IGE5YWZlNjBiYzgxNTZhY2MyOGMyMTZmNjYz
MDhiZTZkZjUwODU2NjguLjU4ZDNkNjBjZDE1MzM5MmQ2YTU2MmJkN2NkZTVlMTRlYzVmNTljNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKQEAgLTI3NiwxMCArMjc2LDEwIEBAIFNpbXVs
YXRlZE1vdXNlRXZlbnQ6OlNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQCiAgICAgfQogICAgIHNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5
aW5nRXZlbnQpOwogCi0gICAgaWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYmIHRoaXMtPnVu
ZGVybHlpbmdFdmVudCgpLT5pc01vdXNlRXZlbnQoKSkgewotICAgICAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KHRoaXMtPnVuZGVybHlpbmdFdmVudCgpKTsKLSAgICAg
ICAgbV9zY3JlZW5Mb2NhdGlvbiA9IG1vdXNlRXZlbnQtPnNjcmVlbkxvY2F0aW9uKCk7Ci0gICAg
ICAgIGluaXRDb29yZGluYXRlcyhtb3VzZUV2ZW50LT5jbGllbnRMb2NhdGlvbigpKTsKKyAgICBp
ZiAodGhpcy0+dW5kZXJseWluZ0V2ZW50KCkgJiYgaXM8TW91c2VFdmVudD4odGhpcy0+dW5kZXJs
eWluZ0V2ZW50KCkpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqdGhpcy0+dW5kZXJseWluZ0V2ZW50KCkpOworICAgICAgICBtX3NjcmVl
bkxvY2F0aW9uID0gbW91c2VFdmVudC5zY3JlZW5Mb2NhdGlvbigpOworICAgICAgICBpbml0Q29v
cmRpbmF0ZXMobW91c2VFdmVudC5jbGllbnRMb2NhdGlvbigpKTsKICAgICB9IGVsc2UgaWYgKHRh
cmdldCkgewogICAgICAgICBtX3NjcmVlbkxvY2F0aW9uID0gdGFyZ2V0LT5zY3JlZW5SZWN0KCku
Y2VudGVyKCk7CiAgICAgICAgIGluaXRDb29yZGluYXRlcyhMYXlvdXRQb2ludCh0YXJnZXQtPmNs
aWVudFJlY3QoKS5jZW50ZXIoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKaW5kZXggNmRjNzZj
ODZiZDQxNGQwMjhkOTZlZTFmMTA3ZGY5NDNjMTYwZjVlNS4uYWZjN2JkZjA3OGRiZWMxMjM5OTBm
MmI1Y2UyZGVlZjlmZTZmMWE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNl
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCkBAIC0xMzIsOCAr
MTMyLDggQEAgcHJpdmF0ZToKICAgICBTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIFBhc3NSZWZQdHI8RXZl
bnQ+IHVuZGVybHlpbmdFdmVudCwgRWxlbWVudCogdGFyZ2V0KTsKIH07CiAKLUVWRU5UX1RZUEVf
Q0FTVFMoTW91c2VFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VWRU5UKE1vdXNlRXZlbnQpCisKICNlbmRpZiAvLyBNb3VzZUV2ZW50X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCBmOGMzM2Q2NzQ0MTRlNDQxZDc4NDljYzVmMjI2YjI1OWEzZGVi
MzhiLi45Mzc2OTc5MjVlMGM2ZWUxNmFjZTY3YTk5M2EwOTdlOTFjZmM2MzU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC0yMDMyLDggKzIwMzIsOCBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBM
QVRGT1JNKElPUykKLSAgICBpZiAoZXZlbnQtPmlzVG91Y2hFdmVudCgpKQotICAgICAgICByZXR1
cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKHRvVG91Y2hFdmVudChldmVudC5sZWFrUmVm
KCkpKSk7CisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGRp
c3BhdGNoVG91Y2hFdmVudChhZG9wdFJlZihkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudC5sZWFr
UmVmKCkpKSk7CiAjZW5kaWYKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KHRoaXMsIGV2ZW50KTsKIH0KQEAgLTIxMDAsMTEgKzIxMDAsMTIgQEAgdm9pZCBOb2RlOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKICAgICBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2
ZW50KCkpCisgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKICAgICAgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgICAgICAg
ICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcih0b0tl
eWJvYXJkRXZlbnQoZXZlbnQpKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2
ZW50KSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkgewotICAgICAgICBpbnQgZGV0YWlsID0gZXZlbnQtPmlzVUlFdmVudCgp
ID8gdG9VSUV2ZW50KGV2ZW50KS0+ZGV0YWlsKCkgOiAwOworICAgICAgICBpbnQgZGV0YWlsID0g
aXM8VUlFdmVudD4oZXZlbnQpID8gZG93bmNhc3Q8VUlFdmVudD4oKmV2ZW50KS5kZXRhaWwoKSA6
IDA7CiAgICAgICAgIGlmIChkaXNwYXRjaERPTUFjdGl2YXRlRXZlbnQoZGV0YWlsLCBldmVudCkp
CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKQEAgLTIxMTQsMTIgKzIxMTUsMTMgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVu
dUNvbnRyb2xsZXIoKS5oYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKICNlbmRpZgogICAg
IH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCkgewot
ICAgICAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNl
VHlwZSkKKyAgICAgICAgaWYgKGlzPFRleHRFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKHRvVGV4dEV2
ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1
bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoZG93bmNhc3Q8VGV4dEV2ZW50PihldmVudCkpOworICAg
ICAgICB9CiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCi0gICAgfSBlbHNlIGlmIChldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQo
KSkgewotICAgICAgICBpZiAodG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTWlkZGxl
QnV0dG9uKSB7CisgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgeworICAgICAgICBpZiAoZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBNaWRkbGVCdXR0b24pIHsKICAgICAg
ICAgICAgIGlmIChlbmNsb3NpbmdMaW5rRXZlbnRQYXJlbnRPclNlbGYoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAKQEAgLTIxMzMsNyArMjEzNSw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRp
ZgotICAgIH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8
fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsKKyAgICB9IGVsc2Ug
aWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkg
ewogCiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSByZW5kZXJlciwgc2VuZCB0aGUgd2hl
ZWwgZXZlbnQgdG8gdGhlIGZpcnN0IG5vZGUgd2UgZmluZCB3aXRoIGEgcmVuZGVyZXIuCiAgICAg
ICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciA8b3B0aW9uPiBhbmQgPG9wdGdyb3VwPiBlbGVtZW50
cyBzbyB0aGF0IDxzZWxlY3Q+cyBnZXQgYSB3aGVlbCBzY3JvbGwuCkBAIC0yMTQzLDE2ICsyMTQ1
LDE2IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAg
ICAgIAogICAgICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihz
dGFydE5vZGUsIHRvV2hlZWxFdmVudChldmVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS5kZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoc3RhcnROb2RlLCBkb3duY2Fz
dDxXaGVlbEV2ZW50PihldmVudCkpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBMQVRG
T1JNKElPUykKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRvdWNo
RXZlbnRJbnRlcmZhY2VUeXBlICYmIGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50
VHlwZSkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSAmJiBldmVudE5h
bWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKSB7CiAgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICB3aGlsZSAocmVuZGVyZXIg
JiYgKCFyZW5kZXJlci0+aXNCb3goKSB8fCAhdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5jYW5CZVNj
cm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkpCiAgICAgICAgICAgICByZW5kZXJlciA9IHJl
bmRlcmVyLT5wYXJlbnQoKTsKIAogICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPm5v
ZGUoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUo
KSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRvdWNoRXZl
bnRIYW5kbGVyKHJlbmRlcmVyLT5ub2RlKCksIHRvVG91Y2hFdmVudChldmVudCkpOworICAgICAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0VG91Y2hFdmVudEhhbmRsZXIo
cmVuZGVyZXItPm5vZGUoKSwgZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQpKTsKICAgICAgICAg
fQogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9UZXh0RXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaApp
bmRleCBjNTU2ZTE1ZDc4MDdlODY2Yjc3YTM4NzhkODcyMDY3ZWQzZDk4NjU3Li44OGQwNjFmNDE1
ZDM3YWVhZmYyZTNkNDRiNGY2MjU3ZDRkMjdjOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVGV4dEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCkBA
IC04Nyw4ICs4Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVmVjdG9yPERpY3Rh
dGlvbkFsdGVybmF0aXZlPiBtX2RpY3RhdGlvbkFsdGVybmF0aXZlczsKICAgICB9OwogCi1FVkVO
VF9UWVBFX0NBU1RTKFRleHRFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKFRleHRFdmVudCkKKwogI2VuZGlmIC8vIFRleHRFdmVu
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAppbmRleCBhZGEwZTg3NzQ3MGNlY2Q0ZDhkZDlkYzZk
NmMyZDg0ZjNiOTE2NjA0Li4zYTY4OGI2ZGUxMmY1ZTBhZmJlMWQzMjAxZTZlZjMwMzAzNTA0Y2Q5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKQEAgLTg2LDEwICs4NiwxMCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1fY2hhbmdlZFRvdWNoZXM7CiB9OwogCi1FVkVOVF9UWVBF
X0NBU1RTKFRvdWNoRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FVkVOVChUb3VjaEV2ZW50KQorCiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNI
X0VWRU5UUykKIAogI2VuZGlmIC8vIFRvdWNoRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1VJRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgKaW5kZXgg
ZDMxZWJiY2QyNjliYWM2ZjBmMGQwNWU1ZTk2NGRjZmQ0MzZjZTc3Yy4uYWJhODc1OTI3MGZjMWVj
ZTkxYWRjNTMzYjE0ZjA4YmU0NDA3MjQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1VJRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5oCkBAIC04NSw4ICs4
NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZGV0YWlsOwogfTsKIAotRVZFTlRfVFlQRV9DQVNU
UyhVSUV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRVZFTlQoVUlFdmVudCkKKwogI2VuZGlmIC8vIFVJRXZlbnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVl
bEV2ZW50LmgKaW5kZXggZGUzYmRkODIwNzA5MTRkNmQ5NThhY2M2ZmI1OTNkYTIyYTZhZjIxNy4u
NjcwNWQ0YTg4YjI3YmY3YjhiNDM4ZGMwMDRlMjZkNDFkMjFmNDQzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2hl
ZWxFdmVudC5oCkBAIC0xMTQsOCArMTE0LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5pdGlh
bGl6ZWRXaXRoUGxhdGZvcm1XaGVlbEV2ZW50OwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhXaGVl
bEV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRVZFTlQoV2hlZWxFdmVudCkKKwogI2VuZGlmIC8vIFdoZWVsRXZlbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAppbmRleCA1YzUzMzVmNjc1M2EyOTRiZGZh
ODRmMzVkMWZmNTg1YTQ0NmUyZDg3Li45MTVlMmFhY2Y5N2E2MDJlNTg3NTI0NzFmMDk4OWY1NmJh
MjNkYWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAt
MTUyLDcgKzE1Miw3IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiAKIHN0YXRpYyB2b2lkIGFwcGVuZFNlcnZl
ck1hcE1vdXNlUG9zaXRpb24oU3RyaW5nQnVpbGRlciYgdXJsLCBFdmVudCogZXZlbnQpCiB7Ci0g
ICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50Pihl
dmVudCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkpOwpA
QCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24oU3RyaW5nQnVpbGRlciYgdXJsLCBFdmVudCogZXZlbnQpCiAgICAgUmVuZGVySW1hZ2UmIHJl
bmRlcmVyID0gdG9SZW5kZXJJbWFnZSgqaW1hZ2VFbGVtZW50LnJlbmRlcmVyKCkpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3MgdHJ1ZSBmb3IgdXNlVHJhbnNmb3Jt
cy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24gPSByZW5kZXJlci5hYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludCh0b01vdXNlRXZlbnQoZXZlbnQpLT5wYWdlWCgpLCB0b01vdXNlRXZl
bnQoZXZlbnQpLT5wYWdlWSgpKSk7CisgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0g
cmVuZGVyZXIuYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoZG93bmNhc3Q8TW91c2VFdmVudD4o
KmV2ZW50KS5wYWdlWCgpLCBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnBhZ2VZKCkpKTsK
ICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJzb2x1dGVQ
b3NpdGlvbi55KCk7CiAgICAgdXJsLmFwcGVuZCgnPycpOwpAQCAtMTk2LDkgKzE5Niw5IEBAIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICBpZiAoaGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGtl
ZXBzIHRyYWNrIG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24gd2FzIGlu
IChpZiBpdCB3YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tlZAogICAg
ICAgICAgICAgLy8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGluayBiZWhh
dmlvcgotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQp
LT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICAg
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAm
JiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5i
dXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAg
ICAgICAgICBzZXRSb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oZG9j
dW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVt
ZW50KCkpOwotICAgICAgICAgICAgICAgIG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd24gPSB0
b01vdXNlRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpOworICAgICAgICAgICAgICAgIG1fd2FzU2hp
ZnRLZXlEb3duT25Nb3VzZURvd24gPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnNoaWZ0
S2V5KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGNsZWFy
ZWQgb24gbW91c2VvdmVyIGFuZCBub3QgbW91c2VvdXQgYmVjYXVzZSB0aGVpciB2YWx1ZXMgYXJl
IG5lZWRlZCBmb3IgZHJhZyBldmVudHMsCiAgICAgICAgICAgICAgICAgLy8gYnV0IGRyYWcgZXZl
bnRzIGhhcHBlbiBhZnRlciBtb3VzZSBvdXQgZXZlbnRzLgpAQCAtNTU1LDkgKzU1NSw5IEBAIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW50KiBldmVudCkKIAogSFRNTEFu
Y2hvckVsZW1lbnQ6OkV2ZW50VHlwZSBIVE1MQW5jaG9yRWxlbWVudDo6ZXZlbnRUeXBlKEV2ZW50
KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIE5vbk1vdXNlRXZlbnQ7Ci0gICAg
cmV0dXJuIHRvTW91c2VFdmVudChldmVudCktPnNoaWZ0S2V5KCkgPyBNb3VzZUV2ZW50V2l0aFNo
aWZ0S2V5IDogTW91c2VFdmVudFdpdGhvdXRTaGlmdEtleTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KS5zaGlmdEtleSgpID8gTW91c2VFdmVudFdpdGhTaGlmdEtleSA6
IE1vdXNlRXZlbnRXaXRob3V0U2hpZnRLZXk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6
OnRyZWF0TGlua0FzTGl2ZUZvckV2ZW50VHlwZShFdmVudFR5cGUgZXZlbnRUeXBlKSBjb25zdApA
QCAtNTkyLDEyICs1OTIsMTIgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6dHJlYXRMaW5rQXNM
aXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVudFR5cGUpIGNvbnN0CiAKIGJvb2wgaXNFbnRl
cktleUtleWRvd25FdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+aXNLZXlib2FyZEV2ZW50
KCkgJiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpID09ICJFbnRlciI7
CisgICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAm
JiBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2
ZW50KS5rZXlJZGVudGlmaWVyKCkgPT0gIkVudGVyIjsKIH0KIAogYm9vbCBpc0xpbmtDbGljayhF
dmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQgJiYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwgdG9Nb3VzZUV2ZW50KGV2
ZW50KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pOworICAgIHJldHVybiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmICghaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8
IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24pOwog
fQogCiBib29sIHNob3VsZFByb2hpYml0TGlua3MoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKaW5kZXggOTJlMjZhN2E2ZmYwMWQ2NWRm
OThhNDE2Y2Y0OWY4OTRmMTIxMTgwMS4uNDUyOWY4YjMzOGI5ZTlmNGI1MzFlMzY4ZjUwODg1MDMy
NjgxOTAzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKQEAg
LTEyMywyOCArMTIzLDI5IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkgewotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDIwIikgeworICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsK
KyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJk
RXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09
ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICBzZXRBY3RpdmUodHJ1ZSwgdHJ1ZSk7CiAgICAgICAg
ICAgICAvLyBObyBzZXREZWZhdWx0SGFuZGxlZCgpIC0gSUUgZGlzcGF0Y2hlcyBhIGtleXByZXNz
IGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAg
ICAgICAgc3dpdGNoICh0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5jaGFyQ29kZSgpKSB7CisgICAg
ICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgeworICAgICAgICAgICAgc3dpdGNoIChrZXlib2FyZEV2ZW50LmNoYXJDb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2lt
dWxhdGVkQ2xpY2soZXZlbnQpOwotICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygm
a2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIGNhc2UgJyAnOgogICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHNjcm9sbGluZyBk
b3duIHRoZSBwYWdlLgotICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQg
JiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7
CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBF
dmVudCAmJiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewogICAg
ICAgICAgICAgaWYgKGFjdGl2ZSgpKQotICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVk
Q2xpY2soZXZlbnQpOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljaygma2V5Ym9hcmRFdmVudCk7Cisg
ICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVTZXRFbGVtZW50LmNwcAppbmRleCA0ZDA3YmZjYThhNDA0Njg3OWFhY2UxODJiZDNlZWU3NWNm
YmI2MmFjLi4zNWVhNTJjYmNlY2JjNDk0YzBmZjdlNjdlNGQzNDU5Y2NkNTlmZDlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKQEAgLTE4NywxNSArMTg3
LDE1IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6d2lsbEF0dGFjaFJlbmRlcmVycygpCiAg
ICAgICAgIG1fbm9yZXNpemUgPSBjb250YWluaW5nRnJhbWVTZXQtPm5vUmVzaXplKCk7CiB9CiAK
LXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0
KQordm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKIHsKLSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiAhbV9ub3Jlc2l6ZSAmJiBy
ZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzRnJhbWVTZXQoKSkgewotICAgICAgICBpZiAodG9S
ZW5kZXJGcmFtZVNldChyZW5kZXJlcigpKS0+dXNlclJlc2l6ZSh0b01vdXNlRXZlbnQoZXZ0KSkp
IHsKLSAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBpZiAoaXM8TW91
c2VFdmVudD4oZXZlbnQpICYmICFtX25vcmVzaXplICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+aXNGcmFtZVNldCgpKSB7CisgICAgICAgIGlmICh0b1JlbmRlckZyYW1lU2V0KHJlbmRlcmVy
KCkpLT51c2VyUmVzaXplKGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KSkpIHsKKyAgICAgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQotICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7
CisgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCiBib29s
IEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNDM5YTBhMWNmYjg3ZWRk
OGUyN2I1MTk3ZTE2ZTNlOWZlZDllZmMzNC4uZWFmMjY1NGU1OTdiYjBlNDkyYThmODlmMzcyNzE0
Y2MxZTU0NDNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBA
IC0xMDMyLDcgKzEwMzIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OndpbGxEaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCwgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSYgcwogewogICAgIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIG1faW5wdXRUeXBl
LT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5KCZldmVudCkpCiAgICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOwotICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQgJiYgZXZlbnQuaXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KCZldmVudCktPmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PihldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBtX2lucHV0VHlw
ZS0+d2lsbERpc3BhdGNoQ2xpY2soc3RhdGUpOwogICAgICAgICBzdGF0ZS5zdGF0ZWZ1bCA9IHRy
dWU7CiAgICAgfQpAQCAtMTA0NSwyMiArMTA0NSwyMiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmRpZERpc3BhdGNoQ2xpY2tFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IElucHV0RWxlbWVudENs
aQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
dCkKIHsKLSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCAmJiB0b01vdXNlRXZlbnQoZXZ0KS0+YnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xpY2tFdmVudCh0b01vdXNl
RXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2dCkgJiYgZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2dCku
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQ2xp
Y2tFdmVudChkb3duY2FzdDxNb3VzZUV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVm
YXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotICAgIGlmIChldnQtPmlzVG91Y2hFdmVudCgpKSB7Ci0gICAgICAgIG1f
aW5wdXRUeXBlLT5oYW5kbGVUb3VjaEV2ZW50KHRvVG91Y2hFdmVudChldnQpKTsKKyAgICBpZiAo
aXM8VG91Y2hFdmVudD4oZXZ0KSkgeworICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlVG91Y2hF
dmVudChkb3duY2FzdDxUb3VjaEV2ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVs
dEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIGlm
IChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleWRvd25FdmVudCh0
b0tleWJvYXJkRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkgJiYg
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBtX2lu
cHV0VHlwZS0+aGFuZGxlS2V5ZG93bkV2ZW50KGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGV2dCkp
OwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTEwODYsMTYgKzEwODYsMTcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2
ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24g
a2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50
LgotICAgIGlmIChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlw
cmVzc0V2ZW50KHRvS2V5Ym9hcmRFdmVudChldnQpKTsKLSAgICAgICAgaWYgKGV2dC0+ZGVmYXVs
dEhhbmRsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZXZ0LT5p
c0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVu
dCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudCh0b0tleWJvYXJkRXZl
bnQoZXZ0KSk7Ci0gICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2dCkpIHsKKyAgICAgICAgS2V5
Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldnQp
OworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpIHsKKyAgICAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlwcmVzc0V2ZW50
KCZrZXlib2FyZEV2ZW50KTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGtl
eWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CisgICAgICAg
ICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5dXBFdmVudCgma2V5Ym9hcmRFdmVudCk7CisgICAg
ICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX2lucHV0VHlwZS0+c2hv
dWxkU3VibWl0SW1wbGljaXRseShldnQpKSB7CkBAIC0xMTE3LDExICsxMTE4LDExIEBAIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGV2dC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCgpKQotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
dG9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChldnQpKTsKKyAgICBpZiAoaXM8QmVmb3JlVGV4dElu
c2VydGVkRXZlbnQ+KGV2dCkpCisgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudChkb3duY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZ0KSk7CiAK
LSAgICBpZiAoZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93
bkV2ZW50KHRvTW91c2VFdmVudChldnQpKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZ0KSAm
JiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAg
bV9pbnB1dFR5cGUtPmhhbmRsZU1vdXNlRG93bkV2ZW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2
dCkpOwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwCmluZGV4IDM2OTBlOWM3ZmVlYzEwYzQwOTIyN2FjNTk3ODVhODZiOTUzZTUwMDUuLjNi
ODY4ODQ5ZjMzNDNjN2Y1YzMzYWY3ZTZjYWQ3YWVjODEzMmFhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAtNzQ3LDExICs3NDcsMTEg
QEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKIHsKICAgICBSZW5kZXJFbGVtZW50KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAo
ciAmJiByLT5pc0VtYmVkZGVkT2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGlzUGx1Z0luSW1hZ2VF
bGVtZW50KCkgJiYgZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNuYXBzaG90ICYmIGV2ZW50
LT5pc01vdXNlRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50KSB7Ci0gICAgICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50
KGV2ZW50KTsKLSAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0
dG9uKSB7Ci0gICAgICAgICAgICAgICAgdXNlckRpZENsaWNrU25hcHNob3QobW91c2VFdmVudCwg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBXYWl0aW5nRm9yU25hcHNob3QgJiYgaXM8TW91c2VF
dmVudD4oZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQp
IHsKKyAgICAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpOworICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgeworICAgICAgICAgICAgICAgIHVzZXJEaWRDbGlja1NuYXBzaG90KCZtb3VzZUV2
ZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IGVjYzg3ZTI3NWNi
NmI3NTU1ZGJlZGE0N2MyYWU2MGViY2Q4OGI5MDEuLmY5NjQ4ZGI5OGQxOWJhMzAxZTQ1NTY3MTY1
NDNlMzBiOTliNTVjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCkBAIC0xMTQ2LDEwICsxMTQ2LDExIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVM
aXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgUmVmUHRyPFJlbmRlclRo
ZW1lPiByZW5kZXJUaGVtZSA9IHBhZ2UgPyAmcGFnZS0+dGhlbWUoKSA6IFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisg
ICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGlmIChwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudCh0b0tleWJvYXJkRXZl
bnQoZXZlbnQpKSkKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25j
YXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChwbGF0Zm9ybUhhbmRsZUtl
eWRvd25FdmVudCgma2V5Ym9hcmRFdmVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgLy8gV2hlbiB1c2luZyBzcGF0aWFsIG5hdmlnYXRpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0
byBuYXZpZ2F0ZSBhd2F5CkBAIC0xMTYwLDcgKzExNjEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRl
bnRpZmllciA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlm
aWVyKCk7CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0SXRlbXMoKTsKICAgICAgICAg
aW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CkBAIC0x
MTkyLDIyICsxMTkzLDIzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICBzZWxlY3RPcHRpb24obGlz
dFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgRGVzZWxlY3RPdGhlck9wdGlvbnMgfCBEaXNwYXRj
aENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CiAKICAgICAgICAgaWYgKGhhbmRsZWQpCi0gICAg
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJk
RXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAKICAgICAvLyBVc2Uga2V5IHByZXNz
IGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8g
b24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2
ZW50LgogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAo
IWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBpbnQga2V5Q29kZSA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUNvZGUoKTsKKyAgICAg
ICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+
KCpldmVudCk7CisgICAgICAgIGludCBrZXlDb2RlID0ga2V5Ym9hcmRFdmVudC5rZXlDb2RlKCk7
CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAgIGlmIChrZXlDb2RlID09
ICcgJyAmJiBpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLmZyYW1lKCkpKSB7
CiAgICAgICAgICAgICAvLyBVc2Ugc3BhY2UgdG8gdG9nZ2xlIGFycm93IGtleSBoYW5kbGluZyBm
b3Igc2VsZWN0aW9uIGNoYW5nZSBvciBzcGF0aWFsIG5hdmlnYXRpb24uCiAgICAgICAgICAgICBt
X2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gIW1fYWN0aXZlU2VsZWN0aW9uU3RhdGU7Ci0gICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZl
bnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xMjQ2LDE3ICsxMjQ4LDE3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0
RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT0gJ1xyJykgewogICAg
ICAgICAgICAgICAgIGlmIChmb3JtKCkpCi0gICAgICAgICAgICAgICAgICAgIGZvcm0oKS0+c3Vi
bWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb3JtKCkt
PnN1Ym1pdEltcGxpY2l0bHkoJmtleWJvYXJkRXZlbnQsIGZhbHNlKTsKICAgICAgICAgICAgICAg
ICBkaXNwYXRjaENoYW5nZUV2ZW50Rm9yTWVudUxpc3QoKTsKICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChoYW5k
bGVkKQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogCi0gICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01v
dXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQp
LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgZm9jdXMoKTsKICNpZiAhUExBVEZP
Uk0oSU9TKQogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc01lbnVMaXN0
KCkpIHsKQEAgLTEzMzYsMzUgKzEzMzgsMzUgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlz
dEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSB0aGlzLT5saXN0SXRlbXMoKTsKIAotICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+
aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2
ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAgICAgICAg
IC8vIENhbGxpbmcgZm9jdXMoKSBtYXkgcmVtb3ZlIG9yIGNoYW5nZSBvdXIgcmVuZGVyZXIsIGlu
IHdoaWNoIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byBoYW5kbGUgdGhlIGV2ZW50IGZ1cnRoZXIuCiAg
ICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aXNMaXN0Qm94KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gQ29udmVydCB0byBjb29yZHMgcmVsYXRpdmUg
dG8gdGhlIGxpc3QgYm94IGlmIG5lZWRlZC4KLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVu
dCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0g
cm91bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5h
YnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICAgICAgTW91c2VFdmVudCYg
bW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgICAgIEludFBv
aW50IGxvY2FsT2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9M
b2NhbChtb3VzZUV2ZW50LmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOwogICAg
ICAgICBpbnQgbGlzdEluZGV4ID0gdG9SZW5kZXJMaXN0Qm94KHJlbmRlcmVyKCkpLT5saXN0SW5k
ZXhBdE9mZnNldCh0b0ludFNpemUobG9jYWxPZmZzZXQpKTsKICAgICAgICAgaWYgKGxpc3RJbmRl
eCA+PSAwKSB7CiAgICAgICAgICAgICBpZiAoIWlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShs
aXN0SW5kZXgsIG1vdXNlRXZlbnQtPm1ldGFLZXkoKSwgbW91c2VFdmVudC0+c2hpZnRLZXkoKSk7
CisgICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZl
bnQubWV0YUtleSgpLCBtb3VzZUV2ZW50LnNoaWZ0S2V5KCkpOwogI2Vsc2UKLSAgICAgICAgICAg
ICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJbmRleCwgbW91c2VFdmVudC0+Y3RybEtleSgp
LCBtb3VzZUV2ZW50LT5zaGlmdEtleSgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3Rl
ZFN0YXRlKGxpc3RJbmRleCwgbW91c2VFdmVudC5jdHJsS2V5KCksIG1vdXNlRXZlbnQuc2hpZnRL
ZXkoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLnNldE1vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCgpOwogCi0gICAgICAgICAgICBl
dmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYm
ICF0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVB
cmVhKCkpIHsKLSAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChl
dmVudCk7Ci0gICAgICAgIGlmIChtb3VzZUV2ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uIHx8
ICFtb3VzZUV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkg
JiYgIXRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJs
ZUFyZWEoKSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91
c2VFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gTGVm
dEJ1dHRvbiB8fCAhbW91c2VFdmVudC5idXR0b25Eb3duKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVy
ZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgVXNl
VHJhbnNmb3JtcykpOworICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQ
b2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0
aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKICAgICAgICAgaW50IGxpc3RJbmRleCA9IHRvUmVuZGVy
TGlzdEJveChyZW5kZXJlcigpKS0+bGlzdEluZGV4QXRPZmZzZXQodG9JbnRTaXplKGxvY2FsT2Zm
c2V0KSk7CiAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCkgewogICAgICAgICAgICAgaWYgKCFp
c0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewpAQCAtMTM4MSw5ICsxMzgzLDkgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKHRydWUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVu
dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKSB7CisgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXM8TW91
c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLmF1dG9z
Y3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gVGhpcyBjbGljayBv
ciBkcmFnIGV2ZW50IHdhcyBub3Qgb3ZlciBhbnkgb2YgdGhlIG9wdGlvbnMuCiAgICAgICAgIGlm
IChtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xMzkyLDkgKzEzOTQsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAvLyB0aW1lciBzdG9wcy4K
ICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNL
ZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIg
PSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICAgICAgS2V5
Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVu
dCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQu
a2V5SWRlbnRpZmllcigpOwogCiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwogICAgICAg
ICBpbnQgZW5kSW5kZXggPSAwOwpAQCAtMTQ1NiwxNSArMTQ2MCwxNSBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBtX2FsbG93c05vbkNvbnRpZ3VvdXNTZWxlY3Rp
b24gPSBtX211bHRpcGxlICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCku
ZnJhbWUoKSk7CiAjZWxzZQotICAgICAgICAgICAgbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0
aW9uID0gbV9tdWx0aXBsZSAmJiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQo
KS5mcmFtZSgpKSB8fCB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5jdHJsS2V5KCkpOworICAgICAg
ICAgICAgbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0aW9uID0gbV9tdWx0aXBsZSAmJiAoaXNT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgpKSB8fCBrZXlib2FyZEV2
ZW50LmN0cmxLZXkoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wgc2VsZWN0TmV3SXRlbSA9
IHRvS2V5Ym9hcmRFdmVudChldmVudCktPnNoaWZ0S2V5KCkgfHwgIW1fYWxsb3dzTm9uQ29udGln
dW91c1NlbGVjdGlvbjsKKyAgICAgICAgICAgIGJvb2wgc2VsZWN0TmV3SXRlbSA9IGtleWJvYXJk
RXZlbnQuc2hpZnRLZXkoKSB8fCAhbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0aW9uOwogCiAg
ICAgICAgICAgICBpZiAoc2VsZWN0TmV3SXRlbSkKICAgICAgICAgICAgICAgICBtX2FjdGl2ZVNl
bGVjdGlvblN0YXRlID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBhbmNob3IgaXMgdW5p
dGlhbGl6ZWQsIG9yIGlmIHdlJ3JlIGdvaW5nIHRvIGRlc2VsZWN0IGFsbAogICAgICAgICAgICAg
Ly8gb3RoZXIgb3B0aW9ucywgdGhlbiBzZXQgdGhlIGFuY2hvciBpbmRleCBlcXVhbCB0byB0aGUg
ZW5kIGluZGV4LgotICAgICAgICAgICAgYm9vbCBkZXNlbGVjdE90aGVycyA9ICFtX211bHRpcGxl
IHx8ICghdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVt
KTsKKyAgICAgICAgICAgIGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhbV9tdWx0aXBsZSB8fCAoIWtl
eWJvYXJkRXZlbnQuc2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVtKTsKICAgICAgICAgICAgIGlm
IChtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4IDwgMCB8fCBkZXNlbGVjdE90aGVycykgewog
ICAgICAgICAgICAgICAgIGlmIChkZXNlbGVjdE90aGVycykKICAgICAgICAgICAgICAgICAgICAg
ZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKCk7CkBAIC0xNDc4LDE3ICsxNDgyLDE4IEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHNjcm9sbFRvU2Vs
ZWN0aW9uKCk7CiAKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAo
IWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aW50IGtleUNvZGUgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlDb2RlKCk7CisgICAgICAg
IEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50Pigq
ZXZlbnQpOworICAgICAgICBpbnQga2V5Q29kZSA9IGtleWJvYXJkRXZlbnQua2V5Q29kZSgpOwog
CiAgICAgICAgIGlmIChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgIGlmIChmb3JtKCkp
Ci0gICAgICAgICAgICAgICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KGV2ZW50LCBmYWxzZSk7
Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAg
ICBmb3JtKCktPnN1Ym1pdEltcGxpY2l0bHkoJmtleWJvYXJkRXZlbnQsIGZhbHNlKTsKKyAgICAg
ICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfSBlbHNl
IGlmIChtX211bHRpcGxlICYmIGtleUNvZGUgPT0gJyAnICYmIG1fYWxsb3dzTm9uQ29udGlndW91
c1NlbGVjdGlvbikgewogICAgICAgICAgICAgLy8gVXNlIHNwYWNlIHRvIHRvZ2dsZSBzZWxlY3Rp
b24gY2hhbmdlLgogICAgICAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9ICFtX2FjdGl2
ZVNlbGVjdGlvblN0YXRlOwpAQCAtMTQ5Nyw3ICsxNTAyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgQVNTRVJUKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1zW21fYWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXhdKSk7CiAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKG1fYWN0aXZl
U2VsZWN0aW9uRW5kSW5kZXgsIHRydWUgLyptdWx0aSovLCBmYWxzZSAvKnNoaWZ0Ki8pOwogICAg
ICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE1MjMsOSArMTUyOCw5IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmIChl
dmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpKSB7Ci0gICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSB0b0tl
eWJvYXJkRXZlbnQoZXZlbnQpOwotICAgICAgICBpZiAoIWtleWJvYXJkRXZlbnQtPmN0cmxLZXko
KSAmJiAha2V5Ym9hcmRFdmVudC0+YWx0S2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPm1ldGFLZXko
KSAmJiB1X2lzcHJpbnQoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSkpIHsKKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBpczxLZXlib2FyZEV2
ZW50PihldmVudCkpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRv
d25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmICgha2V5Ym9hcmRFdmVu
dC5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQuYWx0S2V5KCkgJiYgIWtleWJvYXJkRXZlbnQu
bWV0YUtleSgpICYmIHVfaXNwcmludChrZXlib2FyZEV2ZW50LmNoYXJDb2RlKCkpKSB7CiAgICAg
ICAgICAgICB0eXBlQWhlYWRGaW5kKGtleWJvYXJkRXZlbnQpOwogICAgICAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTY1LDkgKzE1
NzAsOSBAQCBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbkF0SW5kZXgoaW50IGluZGV4
KSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7Ci0gICAg
aW50IGluZGV4ID0gbV90eXBlQWhlYWQuaGFuZGxlRXZlbnQoZXZlbnQsIFR5cGVBaGVhZDo6TWF0
Y2hQcmVmaXggfCBUeXBlQWhlYWQ6OkN5Y2xlRmlyc3RDaGFyKTsKKyAgICBpbnQgaW5kZXggPSBt
X3R5cGVBaGVhZC5oYW5kbGVFdmVudCgmZXZlbnQsIFR5cGVBaGVhZDo6TWF0Y2hQcmVmaXggfCBU
eXBlQWhlYWQ6OkN5Y2xlRmlyc3RDaGFyKTsKICAgICBpZiAoaW5kZXggPCAwKQogICAgICAgICBy
ZXR1cm47CiAgICAgc2VsZWN0T3B0aW9uKGxpc3RUb09wdGlvbkluZGV4KGluZGV4KSwgRGVzZWxl
Y3RPdGhlck9wdGlvbnMgfCBEaXNwYXRjaENoYW5nZUV2ZW50IHwgVXNlckRyaXZlbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKaW5kZXggMjdmZWZkNjBiNGZjZGJhYzEz
OTFlZDZlODljOWE4YWZmNTM2OTY2NC4uZGE3ZjE1YTg5YTA1Y2Q3MjhjMzJhNjU1OTJhMDVkZTRh
MmNjMGIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaApAQCAtMTUx
LDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRh
dGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0OwogCiAgICAgdm9pZCBkZXNlbGVjdEl0ZW1z
KEhUTUxPcHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCA9IDApOwotICAgIHZvaWQgdHlwZUFo
ZWFkRmluZChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJk
RXZlbnQmKTsKICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKICAgICB2aXJ0dWFsIElu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAppbmRl
eCBlYzZjM2EyMGZmOTliYTJjOTQxNDkzM2ViZDZhOGE5MDhjM2E2ODQyLi4xMTJkMmZkMzYyNGMx
OWQyODg0NjY3NGQ3Yzg4NTU1NTMxOTYwMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U3VtbWFyeUVsZW1lbnQuY3BwCkBAIC0xMjYsMjggKzEyNiwyOSBAQCB2b2lkIEhUTUxTdW1tYXJ5
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSsw
MDIwIikgeworICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgICAg
ICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVu
dD4oKmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09
ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICAgICAgc2V0QWN0aXZlKHRydWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5kbGVkKCkgLSBJRSBkaXNwYXRjaGVzIGEg
a2V5cHJlc3MgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0b0tleWJvYXJkRXZlbnQoZXZl
bnQpLT5jaGFyQ29kZSgpKSB7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGtleWJvYXJkRXZlbnQuY2hhckNvZGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoK
ICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBjYXNlICcgJzoKICAgICAgICAgICAgICAg
ICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4KLSAgICAgICAgICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGtl
eWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVu
dChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeworICAgICAgICAgICAgaWYg
KGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50ICYmIGtleWJv
YXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGFjdGl2ZSgpKQogICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNr
KGV2ZW50KTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAyYTRjNWM1YWNmMWFiM2M5NmQ0
ZGM1MzQ5YzdjMjkwNTIyN2U2YmM1Li4zNWZhZTEyYzY0NjYyNTZmNTg5ZjZiMzA5MDMzMjJiZjVk
YjVkMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAK
QEAgLTI3MCw4ICsyNzAsOCBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+
aXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmV2ZW50SW50
ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAgICAgZm9yd2FyZEV2ZW50KGV2ZW50KTsKLSAg
ICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KCkpCi0gICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHRvQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoZXZlbnQpKTsKKyAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGlzPEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkpCisgICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PihldmVudCkpOwogCiAg
ICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKaW5kZXggMWViZWM3N2MxMWMx
MDAzYTU1OTMzZDAxZGE3NzQzNWZkNmYyMDFkNC4uY2M5YmRjOTkwYTY4NTZmMGE4ZDYzYjkxZGVi
ZjU5MTVhYzFlMGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3Vt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC0z
OTgsOCArMzk4LDggQEAgdm9pZCBJbWFnZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KQogICAgICAgICBtX2RvY3VtZW50LndpbmRv
d1NpemVDaGFuZ2VkKCk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgTW91c2VF
dmVudCYgbW91c2VFdmVudCA9IHRvTW91c2VFdmVudCgqZXZlbnQpOworICAgIGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
ZXZlbnQpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3Vz
ZUV2ZW50PigqZXZlbnQpOwogICAgICAgICBtX2RvY3VtZW50LmltYWdlQ2xpY2tlZChtb3VzZUV2
ZW50LngoKSwgbW91c2VFdmVudC55KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUlucHV0VHlwZS5jcHAKaW5kZXggZDBlMjViZTE5MDdlM2M5MmVhZmUzNjgzNmQ4ODFkNjJiZjhj
YjUwOC4uMjg5YTllZDI1ZWFjYzQyYWRmYTkwZGQwODhkZjc5ZTgzNDhiN2M2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKQEAgLTg5LDggKzg5LDggQEAgdm9pZCBJbWFn
ZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCogZXZlbnQpCiAgICAgbV9j
bGlja0xvY2F0aW9uID0gSW50UG9pbnQoKTsKICAgICBpZiAoZXZlbnQtPnVuZGVybHlpbmdFdmVu
dCgpKSB7CiAgICAgICAgIEV2ZW50JiB1bmRlcmx5aW5nRXZlbnQgPSAqZXZlbnQtPnVuZGVybHlp
bmdFdmVudCgpOwotICAgICAgICBpZiAodW5kZXJseWluZ0V2ZW50LmlzTW91c2VFdmVudCgpKSB7
Ci0gICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KHVuZGVy
bHlpbmdFdmVudCk7CisgICAgICAgIGlmIChpczxNb3VzZUV2ZW50Pih1bmRlcmx5aW5nRXZlbnQp
KSB7CisgICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VF
dmVudD4odW5kZXJseWluZ0V2ZW50KTsKICAgICAgICAgICAgIGlmICghbW91c2VFdmVudC5pc1Np
bXVsYXRlZCgpKQogICAgICAgICAgICAgICAgIG1fY2xpY2tMb2NhdGlvbiA9IEludFBvaW50KG1v
dXNlRXZlbnQub2Zmc2V0WCgpLCBtb3VzZUV2ZW50Lm9mZnNldFkoKSk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCAxNTcwMjZkODlkMmE0MDhhOGIxNTJkNTE1ZDg1
YWIwMmQ2NWQ1OGM5Li4zYjIyN2FiMDBjNDk4NDYxNmJiMDhmMTI1ODIyMzNjMTg2Yjc0NDI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBJbnB1
dFR5cGU6OmZvcndhcmRFdmVudChFdmVudCopCiAKIGJvb2wgSW5wdXRUeXBlOjpzaG91bGRTdWJt
aXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4gZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQg
JiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y2hhckNvZGUoKSA9PSAnXHInOworICAgIHJldHVy
biBpczxLZXlib2FyZEV2ZW50PihldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5cHJlc3NFdmVudCAmJiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpLmNoYXJD
b2RlKCkgPT0gJ1xyJzsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IElucHV0VHlw
ZTo6Zm9ybUZvclN1Ym1pc3Npb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9NZWRpYURvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVu
dC5jcHAKaW5kZXggOWYwN2ZhM2RkZWI5ZTA5ZDQxZDdjMmU2M2YzMzEyN2U4MTJmZjZmNC4uN2Rh
OWJiODQ1MGFlYWU0MmZjZDUzY2UxMjhiYjEwYzY2MDhkNzQ1MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhRG9jdW1lbnQuY3BwCkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2b2lkIE1lZGlhRG9jdW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmICghaXM8Q29udGFp
bmVyTm9kZT4odGFyZ2V0Tm9kZSkpCiAgICAgICAgIHJldHVybjsKICAgICBDb250YWluZXJOb2Rl
JiB0YXJnZXRDb250YWluZXIgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqdGFyZ2V0Tm9kZSk7
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBl
dmVudC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgewogICAg
ICAgICBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyA9IGRlc2NlbmRlbnRWaWRlb0VsZW1lbnQodGFy
Z2V0Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCF2aWRlbykKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0gdG9LZXlib2FyZEV2ZW50
KGV2ZW50KTsKLSAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAi
VSswMDIwIikgeyAvLyBzcGFjZQorICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50
ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKGtleWJvYXJk
RXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7IC8vIHNwYWNlCiAgICAgICAgICAg
ICBpZiAodmlkZW8tPnBhdXNlZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZpZGVvLT5jYW5Q
bGF5KCkpCiAgICAgICAgICAgICAgICAgICAgIHZpZGVvLT5wbGF5KCk7CiAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICB2aWRlby0+cGF1c2UoKTsKLSAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IGUxNTAxNDliYzE0MDliMWE3MTU1MjViMTcxZWUz
YjBhYTY2ZGJhNDMuLjdhOWZlMTQxNmIyMzE0OWJhMTc2MDA4ZDYxYmQyYjI2Zjc2NTdiYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTIwNiw3ICsy
MDYsOCBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmx1ckV2ZW50KCkKIAogYm9v
bCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50
KQogewotICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0
RXZlbnQgJiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gVGV4dEV2ZW50SW50ZXJmYWNlVHlw
ZSAmJiB0b1RleHRFdmVudChldmVudCktPmRhdGEoKSA9PSAiXG4iKSB8fCBJbnB1dFR5cGU6OnNo
b3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOworICAgIHJldHVybiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgaXM8VGV4dEV2ZW50PihldmVudCkgJiYg
ZG93bmNhc3Q8VGV4dEV2ZW50PigqZXZlbnQpLmRhdGEoKSA9PSAiXG4iKQorICAgICAgICB8fCBJ
bnB1dFR5cGU6OnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZlbnQpOwogfQogCiBSZW5kZXJQdHI8
UmVuZGVyRWxlbWVudD4gVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVJbnB1dFJlbmRlcmVyKFBh
c3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKaW5kZXggOWU4M2U2MmY5Njdi
ZjE2YjA5YjRhMTI2MmY2OGJiOGU5MWU5Mzk3YS4uMjYzODYzYmU3MDYwY2Q5NWFlZDU5NzhkOWUz
ZWMwNGUzMjA4ODAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgTWVkaWFD
b250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVu
dChEb2N1bWVudCYgZG9jdW0KIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gTGVmdCBidXR0b24g
aXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20gbGVmdCBidXR0b24uCi0gICAgaWYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSkK
KyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCkuYnV0dG9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcmVuZGVyZXIoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAppbmRleCBkNWE0NTZiYTk4MzJjZjlhZDk5ZGUzOWMwYzBhZDQ3MGI0ODAyNzk3Li4zMmYz
YTUzMzRkY2NkMzZmOTg4MmM5ZTgxNmFiNjkxMjhlYTgxZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0yMjEsOCAr
MjIxLDggQEAgdm9pZCBNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogewogICAgIE1lZGlhQ29udHJvbERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwogCi0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewot
ICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IHRvTW91c2VFdmVudChldmVudCktPmFic29s
dXRlTG9jYXRpb24oKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgICAg
IExheW91dFBvaW50IGxvY2F0aW9uID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5hYnNv
bHV0ZUxvY2F0aW9uKCk7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+dGFyZ2V0KCkgPT0gdGhpcykgewogICAgICAgICAg
ICAgc3RhcnREcmFnKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwpAQCAtMzM3LDEyICszMzcsMTIgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IE1l
ZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnQKIAog
dm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgIGlm
ICghaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8IGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygp
Lm1vdXNlb3V0RXZlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFBvb3IgbWFuJ3MgbW91
c2VsZWF2ZSBldmVudCBkZXRlY3Rpb24uCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRv
TW91c2VFdmVudChldmVudCk7Ci0gICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBtb3Vz
ZUV2ZW50LT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRv
d25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSBtb3VzZUV2ZW50LnJlbGF0ZWRUYXJnZXQoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQg
fHwgIXJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTg1MSw3
ICs4NTEsNyBAQCBQYXNzUmVmUHRyPE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudD4gTWVkaWFD
b250cm9sVGltZWxpbmVFbGVtZW50OjpjcmVhdGUoRG9jdQogdm9pZCBNZWRpYUNvbnRyb2xUaW1l
bGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8v
IExlZnQgYnV0dG9uIGlzIDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0
dG9uLgotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50
KS0+YnV0dG9uKCkpCisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxN
b3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IXJlbmRlcmVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRp
YUNvbnRyb2xzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMu
Y3BwCmluZGV4IGZhMWJlYmY0MzYwMzMwMDI4ZjBkNWEwMjY1NzQyNTM3NzZkOGJiMWUuLjRkM2Vj
ZjgwZDI5MmZhMjU1Mzc1YmRmNGE2YWYzZDQ5ZTQzMGI2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuY3BwCkBAIC0zNjYsOSArMzY2LDkgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xzOjpzdG9wSGlkZUZ1bGxzY3JlZW5Db250cm9sc1RpbWVyKCkKIAogYm9vbCBN
ZWRpYUNvbnRyb2xzOjpjb250YWluc1JlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50KQogewotICAg
IGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZl
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSB0b01vdXNlRXZlbnQoZXZlbnQpLT5yZWxhdGVkVGFyZ2V0KCk7CisgICAgRXZlbnRUYXJn
ZXQqIHJlbGF0ZWRUYXJnZXQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnJlbGF0ZWRU
YXJnZXQoKTsKICAgICBpZiAoIXJlbGF0ZWRUYXJnZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gY29udGFpbnMocmVsYXRlZFRhcmdldC0+dG9Ob2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAKaW5kZXggMTE5
NmE3MTg3NjYwYjdlMzUwMjdkNDU2NTNjMzkzOTAwNjNlZmMzZS4uOGM4NGRhNzNiZjY2MDBmNDVj
MTQyYjYzMzRlYWE2MzRjNDNkOGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCkBAIC01ODgsMTAgKzU4OCwxMCBAQCB2b2lkIE1l
ZGlhQ29udHJvbHNBcHBsZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBFdmVudAogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KQogICAgICAgICBtX21lZGlhQ29udHJvbHMtPmhhbmRsZUNsaWNrRXZlbnQo
ZXZlbnQpOwotICAgIGVsc2UgaWYgKChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVl
bEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkg
JiYgZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgPT0gV2hlZWxFdmVudEludGVyZmFjZVR5cGUpIHsK
LSAgICAgICAgV2hlZWxFdmVudCogd2hlZWxFdmVudCA9IHRvV2hlZWxFdmVudChldmVudCk7Ci0g
ICAgICAgIGlmIChtX21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENhcHRpb25zQ29udGFpbmVy
UHJldmVudFBhZ2VTY3JvbGxpbmcod2hlZWxFdmVudC0+d2hlZWxEZWx0YVkoKSkpCi0gICAgICAg
ICAgICBldmVudC0+cHJldmVudERlZmF1bHQoKTsKKyAgICBlbHNlIGlmICgoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkgeworICAgICAg
ICBXaGVlbEV2ZW50JiB3aGVlbEV2ZW50ID0gZG93bmNhc3Q8V2hlZWxFdmVudD4oKmV2ZW50KTsK
KyAgICAgICAgaWYgKG1fbWVkaWFDb250cm9scy0+c2hvdWxkQ2xvc2VkQ2FwdGlvbnNDb250YWlu
ZXJQcmV2ZW50UGFnZVNjcm9sbGluZyh3aGVlbEV2ZW50LndoZWVsRGVsdGFZKCkpKQorICAgICAg
ICAgICAgd2hlZWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKaW5kZXggODFj
MjA2ODBkOTI1Y2E4MjAyODViMmZmNTYzZGYyYTUxYjJhYzBjYi4uMjJiZTYzYjQ3NWUwOTUxMjc1
Njc4Yjg0OGZiYWI1ZDMyODY0OWQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBTbGlk
ZXJUaHVtYkVsZW1lbnQ6OnN0b3BEcmFnZ2luZygpCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQg
U2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
LSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgIGlmICghaXM8TW91c2VFdmVu
dD4oZXZlbnQpKSB7CiAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Nyw5ICszNDcsOSBAQCB2b2lk
IFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9N
b3VzZUV2ZW50KGV2ZW50KTsKLSAgICBib29sIGlzTGVmdEJ1dHRvbiA9IG1vdXNlRXZlbnQtPmJ1
dHRvbigpID09IExlZnRCdXR0b247Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUg
PSBldmVudC0+dHlwZSgpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxN
b3VzZUV2ZW50PigqZXZlbnQpOworICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91c2VFdmVudC5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
ID0gbW91c2VFdmVudC50eXBlKCk7CiAKICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGRvIG5vdCBj
YWxsIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpIGhlcmUgYmVjYXVzZQogICAgIC8vIE1lZGlh
Q29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigpIHdhbnRzIHRvIGhh
bmRsZSB0aGVzZQpAQCAtMzYyLDExICszNjIsMTEgQEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAg
fSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CiAg
ICAgICAgIGlmIChtX2luRHJhZ01vZGUpCi0gICAgICAgICAgICBzZXRQb3NpdGlvbkZyb21Qb2lu
dChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOworICAgICAgICAgICAgc2V0UG9zaXRp
b25Gcm9tUG9pbnQobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOworICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKCZtb3VzZUV2ZW50
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9T
cGluQnV0dG9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0
dG9uRWxlbWVudC5jcHAKaW5kZXggNTAzYjM1YjZiZjVhNzgxNWRkNzFlN2E5YzYxOThhZGM4NzIw
MDZlNS4uMzhhNDBhNDNkZDY4NTU4MTYwMjhkMWNkYmU4YWRmNGM5NmIyYjQ1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcApAQCAtNjcs
NyArNjcsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojp3aWxsRGV0YWNoUmVuZGVyZXJzKCkK
IAogdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICBpZiAoIWlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSkgewogICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
KQogICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OwogICAgICAgICByZXR1cm47CkBAIC04Niw5ICs4Niw5IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7
Ci0gICAgSW50UG9pbnQgbG9jYWwgPSByb3VuZGVkSW50UG9pbnQoYm94LT5hYnNvbHV0ZVRvTG9j
YWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7Ci0gICAg
aWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYg
bW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIE1vdXNlRXZlbnQmIG1v
dXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgIEludFBvaW50IGxv
Y2FsID0gcm91bmRlZEludFBvaW50KGJveC0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQuYWJz
b2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgaWYgKG1vdXNlRXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKGJveC0+cGl4ZWxTbmFwcGVkQm9yZGVyQm94
UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBm
dW5jdGlvbnMgb2YgSFRNTElucHV0RWxlbWVudCBtYXkgcnVuIEphdmFTY3JpcHQKICAgICAgICAg
ICAgIC8vIGNvZGUgd2hpY2ggZGV0YWNoZXMgdGhpcyBzaGFkb3cgbm9kZS4gV2UgbmVlZCB0byB0
YWtlIGEgcmVmZXJlbmNlCkBAIC0xMDcsMTEgKzEwNywxMSBAQCB2b2lkIFNwaW5CdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAgICAg
ICAgZG9TdGVwQWN0aW9uKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKQorICAg
IH0gZWxzZSBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24pCiAgICAgICAgIHN0b3BSZXBl
YXRpbmdUaW1lcigpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlbW92ZUV2ZW50KSB7CisgICAgZWxzZSBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlbW92ZUV2ZW50KSB7CiAgICAgICAgIGlmIChib3gtPnBpeGVsU25hcHBl
ZEJvcmRlckJveFJlY3QoKS5jb250YWlucyhsb2NhbCkpIHsKICAgICAgICAgICAgIGlmICghbV9j
YXB0dXJpbmcpIHsKICAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpKSB7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBIVE1MRGl2RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgaWYgKCFtb3VzZUV2ZW50LmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKCZt
b3VzZUV2ZW50KTsKIH0KIAogdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbE9wZW5Qb3B1cCgp
CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50
KEV2ZW50KiBldmVudCkKICAgICBpZiAoIXJlbmRlckJveCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkgIT0gV2hlZWxFdmVudEludGVyZmFjZVR5
cGUpCisgICAgaWYgKCFpczxXaGVlbEV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghbV9zcGluQnV0dG9uT3duZXIpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTcGlu
QnV0dG9uRWxlbWVudDo6Zm9yd2FyZEV2ZW50KEV2ZW50KiBldmVudCkKICAgICBpZiAoIW1fc3Bp
bkJ1dHRvbk93bmVyLT5zaG91bGRTcGluQnV0dG9uUmVzcG9uZFRvV2hlZWxFdmVudHMoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZG9TdGVwQWN0aW9uKHRvV2hlZWxFdmVudChldmVudCktPndo
ZWVsRGVsdGFZKCkpOworICAgIGRvU3RlcEFjdGlvbihkb3duY2FzdDxXaGVlbEV2ZW50PigqZXZl
bnQpLndoZWVsRGVsdGFZKCkpOwogICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAppbmRleCAxOTJmOGUwMDYzZmE1YTA4ZThmNDgyMWZkZWRlMDNmZmUyMGFk
MDFjLi43YjI5NTNkODc4YjkwYWQzMjFmYTVkZDJiMmYxYjA3NGViNmJkZjRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8vIE9uIG1v
dXNlZG93biwgYnJpbmcgdXAgYSBtZW51LCBpZiBuZWVkZWQKICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNoYWRvd0hvc3QoKSk7Ci0gICAg
aWYgKGlucHV0ICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50
ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGlucHV0ICYmIGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3du
Y2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAg
ICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICNpZiAhUExBVEZP
Uk0oSU9TKQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAg
IGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKSkgewog
ICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkgewogICAg
ICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50
c0VsZW1lbnQodGhpcyk7CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAg
ICBpbnB1dC0+c2VsZWN0KCk7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50
ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNldXBFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VF
dmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChtX2Nh
cHR1cmluZykgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJh
bWUoKSkgewogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJp
bmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDg1NjkwOTY4ZGVjNGFiMDhj
OWI4ODRhOTM4YzFhNDY5MWQxOGVkYTkuLjAzM2FhYzgzZTA3Mzk5Y2IyZjkwMDYyNTIzZTZjMDQ1
NzZjOWZiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCkBAIC0yODQsMTIgKzI4NCwxMiBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KEV2ZW50KiBldmVudCwgY29uc3QgVmVjdG9yPENvbnRl
eHRNZQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRN
ZW51RXZlbnQoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKSAmJiBV
U0UoQUNDRVNTSUJJTElUWV9DT05URVhUX01FTlVTKQotICAgIGlmICghZXZlbnQgfHwgIWV2ZW50
LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWV2ZW50IHx8ICFpczxNb3VzZUV2ZW50PihldmVu
dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50LT50YXJnZXQo
KS0+dG9Ob2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2
ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKLSAgICBJbnRQb2ludCBtb3VzZVBvaW50ID0gSW50
UG9pbnQobW91c2VFdmVudC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZKCkpOworICAg
IE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwor
ICAgIEludFBvaW50IG1vdXNlUG9pbnQgPSBJbnRQb2ludChtb3VzZUV2ZW50LmNsaWVudFgoKSwg
bW91c2VFdmVudC5jbGllbnRZKCkpOwogCiAgICAgbV9mcm9udGVuZFBhZ2UtPmNvbnRleHRNZW51
Q29udHJvbGxlcigpLnNob3dDb250ZXh0TWVudUF0KGZyYW1lLCBtb3VzZVBvaW50KTsKICNlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXgg
YTNmNTkwN2U0ZDQ3ZjIwNGFhYjM5NGI4YzAyM2I4ZTVkZDMxMjljYS4uNzZlODgxY2UyOGViZTdl
YzcyZDdjMjIwZTJkMDE0ZDc3MThmNThmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMTUwLDEwICsxNTAsMTAgQEAgc3RkOjp1bmlxdWVf
cHRyPENvbnRleHRNZW51PiBDb250ZXh0TWVudUNvbnRyb2xsZXI6Om1heWJlQ3JlYXRlQ29udGV4
dE1lbnUoRXZlbnQKIHsKICAgICBBU1NFUlQoZXZlbnQpOwogICAgIAotICAgIGlmICghZXZlbnQt
PmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSB0b01vdXNl
RXZlbnQoKmV2ZW50KTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91
c2VFdmVudD4oKmV2ZW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtb3VzZUV2ZW50LmFi
c29sdXRlTG9jYXRpb24oKSk7CiAKICAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50
b05vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAzM2E5YTUzODli
Y2M5ZjQzODE3NTY3ZjMzN2FiOGFkNjgwYTMyZDI3Li4zOGNmYTcyOWViYTNlNWNhZjUyYjg1ZjA0
ZGVlY2VmYzc4N2U5NWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0z
NTIzLDcgKzM1MjMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogewogICAgIC8vIFBsYXRm
b3JtcyBzaG91bGQgZGlmZmVyZW50aWF0ZSByZWFsIGNvbW1hbmRzIGxpa2Ugc2VsZWN0QWxsIGZy
b20gdGV4dCBpbnB1dCBpbiBkaXNndWlzZSAobGlrZSBpbnNlcnROZXdsaW5lKSwKICAgICAvLyBh
bmQgYXZvaWQgZGlzcGF0Y2hpbmcgdGV4dCBpbnB1dCBldmVudHMgZnJvbSBrZXlkb3duIGRlZmF1
bHQgaGFuZGxlcnMuCi0gICAgQVNTRVJUKCF1bmRlcmx5aW5nRXZlbnQgfHwgIXVuZGVybHlpbmdF
dmVudC0+aXNLZXlib2FyZEV2ZW50KCkgfHwgdG9LZXlib2FyZEV2ZW50KHVuZGVybHlpbmdFdmVu
dCktPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CisgICAgQVNTRVJUKCF1
bmRlcmx5aW5nRXZlbnQgfHwgIWlzPEtleWJvYXJkRXZlbnQ+KHVuZGVybHlpbmdFdmVudCkgfHwg
ZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKnVuZGVybHlpbmdFdmVudCkudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKIAogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQ7CiAgICAg
aWYgKHVuZGVybHlpbmdFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwCmluZGV4IDE0OTA2MGFhYTU2YjkzNGUxYzk5ZmFjMGMwNzAy
NGU4N2NmOGIxYjUuLmI0NjRjYzczMzA0YzE2OGMzNTk4MTE0M2JiMmU4ZGE0Y2I2Zjk2NTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cApAQCAtNTkwLDkgKzU5MCw5IEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2
YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBGbG9hdFBvaW50JiBwb2luCiAgICAgICAgICYm
IGluZGljYXRvclJlY3QuY29udGFpbnMocG9pbnQpOwogfQogCi1ib29sIFJlbmRlckVtYmVkZGVk
T2JqZWN0Ojppc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoTW91c2VFdmVudCogZXZlbnQp
IGNvbnN0Citib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5hdmFpbGFibGVQbHVnaW5J
bmRpY2F0b3IoY29uc3QgTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlz
SW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihhYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29s
dXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOworICAgIHJldHVybiBpc0luVW5hdmFpbGFi
bGVQbHVnaW5JbmRpY2F0b3IoYWJzb2x1dGVUb0xvY2FsKGV2ZW50LmFic29sdXRlTG9jYXRpb24o
KSwgVXNlVHJhbnNmb3JtcykpOwogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpoYW5k
bGVVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvckV2ZW50KEV2ZW50KiBldmVudCkKQEAgLTYwMCwy
MSArNjAwLDIxIEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxl
UGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmICghc2hvdWxkVW5hdmFp
bGFibGVQbHVnaW5NZXNzYWdlQmVCdXR0b24oZG9jdW1lbnQoKSwgbV9wbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZXZlbnQtPmlzTW91c2VF
dmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAg
ICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsK
ICAgICBIVE1MUGx1Z0luRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxQbHVnSW5FbGVt
ZW50PihmcmFtZU93bmVyRWxlbWVudCgpKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7
CiAgICAgICAgIG1fbW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvciA9IGlz
SW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihtb3VzZUV2ZW50KTsKICAgICAgICAgaWYgKG1f
bW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcikgewogICAgICAgICAgICAg
ZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQoJmVs
ZW1lbnQpOwogICAgICAgICAgICAgZWxlbWVudC5zZXRJc0NhcHR1cmluZ01vdXNlRXZlbnRzKHRy
dWUpOwogICAgICAgICAgICAgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQo
dHJ1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9Ci0gICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiB0b01vdXNlRXZlbnQo
ZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKG1vdXNlRXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgbW91c2VFdmVudC5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChtX3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9y
SXNQcmVzc2VkKSB7CiAgICAgICAgICAgICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLnNldENhcHR1
cmluZ01vdXNlRXZlbnRzRWxlbWVudChudWxscHRyKTsKICAgICAgICAgICAgIGVsZW1lbnQuc2V0
SXNDYXB0dXJpbmdNb3VzZUV2ZW50cyhmYWxzZSk7CkBAIC02MjcsOSArNjI3LDkgQEAgdm9pZCBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFuZGxlVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVu
dChFdmVudCogZXZlbnQpCiAgICAgICAgIG1fbW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBsdWdp
bkluZGljYXRvciA9IGZhbHNlOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2
ZW50KSB7CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1v
dmVFdmVudCkgewogICAgICAgICBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3Nl
ZChtX21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IgJiYgaXNJblVuYXZh
aWxhYmxlUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpKTsKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmgKaW5kZXggNGQzNDJkNzg0NDEwYjdhNzJlNzExM2I2YmQ4MmE4MWE2ZTc1ZDRhNS4u
MmJmYmVjMTgxYzhhYmM0ODQzNGExM2UzZmIxNTQxZTJjYjJkYjdkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKQEAgLTg0LDcgKzg0LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2Fs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoq
IHN0b3BFbGVtZW50KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZvaWQgc2V0VW5hdmFpbGFibGVQ
bHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCk7Ci0gICAgYm9vbCBpc0luVW5hdmFpbGFibGVQ
bHVnaW5JbmRpY2F0b3IoTW91c2VFdmVudCopIGNvbnN0OworICAgIGJvb2wgaXNJblVuYXZhaWxh
YmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IE1vdXNlRXZlbnQmKSBjb25zdDsKICAgICBib29sIGlz
SW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAg
ICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIEZsb2F0UmVjdCYgaW5kaWNh
dG9yUmVjdCwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFJlY3QmIGFycm93
UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKSBjb25zdDsKICAgICBMYXlv
dXRSZWN0IHVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yQm91bmRzKGNvbnN0IExheW91dFBvaW50
JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25h
cHNob3R0ZWRQbHVnSW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBz
aG90dGVkUGx1Z0luLmNwcAppbmRleCBkZTM3MjZkMmMzNmVkM2I1YTVhYmJjZDhiZGUzMGZiNjZi
OWU2ZGNkLi44NzBhNTQxNDA0ZDFjNWUwYjI4OTFmZGQyMzJmZWJlYzRkNDU4NWEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5j
cHAKQEAgLTE1NSwxMCArMTU1LDEwIEBAIEN1cnNvckRpcmVjdGl2ZSBSZW5kZXJTbmFwc2hvdHRl
ZFBsdWdJbjo6Z2V0Q3Vyc29yKGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgQ3VyCiAKIHZvaWQg
UmVuZGVyU25hcHNob3R0ZWRQbHVnSW46OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAg
ICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRv
TW91c2VFdmVudChldmVudCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCk7CiAKICAgICAvLyBJZiB3ZSdyZSBhIHNuYXBzaG90dGVkIHBs
dWdpbiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYWN0aXZhdGUgb24KICAgICAvLyBjbGlja3Mg
ZXZlbiBpZiB0aGUgcGFnZSBpcyBwcmV2ZW50aW5nIG91ciBkZWZhdWx0IGJlaGF2aW91ci4gT3Ro
ZXJ3aXNlCkBAIC0xNjgsMjAgKzE2OCwyMCBAQCB2b2lkIFJlbmRlclNuYXBzaG90dGVkUGx1Z0lu
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCiAgICAgLy8gZXZlbnQuIFRoZSBjb2RlIGJlbG93
IGlzIG5vdCBjb21wbGV0ZWx5IGZvb2xwcm9vZiwgYnV0IHRoZSB3b3JzdCB0aGF0CiAgICAgLy8g
Y291bGQgaGFwcGVuIGlzIHRoYXQgYSBzbmFwc2hvdHRlZCBwbHVnaW4gcmVzdGFydHMuCiAKLSAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKKyAgICBp
ZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCiAgICAg
ICAgIG1faXNQb3RlbnRpYWxNb3VzZUFjdGl2YXRpb24gPSBmYWxzZTsKIAotICAgIGlmIChtb3Vz
ZUV2ZW50LT5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQorICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRv
bigpICE9IExlZnRCdXR0b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8IChtX2lzUG90ZW50aWFsTW91c2VBY3Rp
dmF0aW9uICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkpIHsK
KyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwg
KG1faXNQb3RlbnRpYWxNb3VzZUFjdGl2YXRpb24gJiYgbW91c2VFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNldXBFdmVudCkpIHsKICAgICAgICAgbV9pc1BvdGVudGlhbE1vdXNlQWN0
aXZhdGlvbiA9IGZhbHNlOwotICAgICAgICBib29sIGNsaWNrV2FzT25PdmVybGF5ID0gcGx1Z0lu
SW1hZ2VFbGVtZW50KCkucGFydE9mU25hcHNob3RPdmVybGF5KGV2ZW50LT50YXJnZXQoKS0+dG9O
b2RlKCkpOwotICAgICAgICBwbHVnSW5JbWFnZUVsZW1lbnQoKS51c2VyRGlkQ2xpY2tTbmFwc2hv
dChtb3VzZUV2ZW50LCAhY2xpY2tXYXNPbk92ZXJsYXkpOwotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIGJvb2wgY2xpY2tXYXNPbk92ZXJsYXkgPSBw
bHVnSW5JbWFnZUVsZW1lbnQoKS5wYXJ0T2ZTbmFwc2hvdE92ZXJsYXkobW91c2VFdmVudC50YXJn
ZXQoKS0+dG9Ob2RlKCkpOworICAgICAgICBwbHVnSW5JbWFnZUVsZW1lbnQoKS51c2VyRGlkQ2xp
Y2tTbmFwc2hvdCgmbW91c2VFdmVudCwgIWNsaWNrV2FzT25PdmVybGF5KTsKKyAgICAgICAgbW91
c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0gZWxzZSBpZiAobW91c2VFdmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CiAgICAgICAgIG1faXNQb3Rl
bnRpYWxNb3VzZUFjdGl2YXRpb24gPSB0cnVlOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCmluZGV4IGY2NzUxOGJhNmM2MTk5ZTFhYWZjMWNiMWMyODZiYTdhMzJjMWJkMDguLmU0OTMy
OTI3ZDNmZDMyYzE2NmM5ODI1NGFhYzYzMjZjYWYxMDIyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTg5Miw4ICs4OTIsOCBA
QCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKIAogICAgIGNvbnN0
IFdlYkV2ZW50KiBjdXJyZW50RXZlbnQgPSBXZWJQYWdlOjpjdXJyZW50RXZlbnQoKTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViRXZlbnQ+IHNpbXVsYXRlZFdlYkV2ZW50OwotICAgIGlmIChldmVu
dC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+aXNTaW11bGF0ZWQoKSkg
ewotICAgICAgICBzaW11bGF0ZWRXZWJFdmVudCA9IGNyZWF0ZVdlYkV2ZW50KHRvTW91c2VFdmVu
dChldmVudCkpOworICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91
c2VFdmVudD4oKmV2ZW50KS5pc1NpbXVsYXRlZCgpKSB7CisgICAgICAgIHNpbXVsYXRlZFdlYkV2
ZW50ID0gY3JlYXRlV2ViRXZlbnQoZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpKTsKICAgICAg
ICAgY3VycmVudEV2ZW50ID0gc2ltdWxhdGVkV2ViRXZlbnQuZ2V0KCk7CiAgICAgfQogICAgIGlm
ICghY3VycmVudEV2ZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239001</attachid>
            <date>2014-09-30 22:33:36 -0700</date>
            <delta_ts>2014-09-30 22:40:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137284-20140930223336.patch</filename>
            <type>text/plain</type>
            <size>77367</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uZjRlMTI2ZDA3NTgzYTRjY2UwOWRiMDQ2ZmQ3Yzll
YWZjZTg1Y2RkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgRXZlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3Mjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRXZl
bnQgY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJv
ckV2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5oOgorICAgICAgICAq
IGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVs
YXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAqIGRvbS9VSUV2ZW50Lmg6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjppc0VudGVyS2V5S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzTGlua0NsaWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN1
bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL01l
ZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNp
dGx5KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
czo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAq
IHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZs
b3cgd2l0aCBlbm9ybW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWMxMzQ0NzVlYTU3M2Uw
NjMwY2U4OGE0Yzg1NTNmMTEzYzIzZWQ0YS4uN2FkMWNhMDVlMDc4ZTFkMjgzYTY4N2U4NzllY2U3
OWI3NDQ2NDZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFdmVudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFdmVu
dCBjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisKIDIwMTQtMDkt
MzAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBSZW5hbWUgVEVTVF9USEVNRV9ESVIgbWFjcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCBlYTUxZjc5ZjJkNDgwMDJlYTYxYzk5ZjVm
OWMxNzJlZTc5ZTU0MGIwLi41NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBA
IC01OSwxNCArNTksMTQgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAKLSAgICBpZiAoZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKCFpczxF
cnJvckV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSB0b0Vycm9yRXZl
bnQoZXZlbnQpOworICAgIEVycm9yRXZlbnQmIGVycm9yRXZlbnQgPSBkb3duY2FzdDxFcnJvckV2
ZW50PigqZXZlbnQpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKSk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+bWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsK
LSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+Y29sbm8oKSkpOworICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2ZW50Lm1lc3NhZ2Uo
KSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2
ZW50LmZpbGVuYW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVu
dC5saW5lbm8oKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LmNv
bG5vKCkpKTsKIAogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNWM3NmI2ZDQ1ZmIyZWRkNDNmODg2
MDExZGJmMGNjZjJlZjYyMjI0Ny4uNGFjNWUxOWU1YTcyY2Q2NzY4Mzc5NGViZGNkZmNmZjFhYjYy
MGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAgICAg
ICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwog
ICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5pc0JlZm9yZVVubG9hZEV2ZW50KCkpCi0gICAgICAgICAgICAgICAgdG9CZWZvcmVVbmxv
YWRFdmVudChldmVudCktPnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAm
JiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PEJlZm9yZVVubG9hZEV2ZW50PigqZXZlbnQpLnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCmluZGV4IGJiZTQxMTVjZDAyMjQ3ZWRiZjZlNzU0MGE5NzFiZGI0
OWI3NTRiZWQuLjc1NDIwMzU5Y2NlZTI0MzcwNTg2Mjg5Nzc3NzJhMmI3MzM5NTBiMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCkBAIC01MSw4ICs1
MSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZv
cmVVbmxvYWRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgK
aW5kZXggZWY3MmI3MzQ1MDU5Yjc5ZTM2ZTBjZmZjMzEwZGQ4NTEyZTA1NWQ0MS4uNTg3NjY5NmRj
MTU1YjUwZjRhNzMwODdjYjU5ZDFlYzI3ZTU2MjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9y
ZVVubG9hZEV2ZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9y
ZXR1cm5WYWx1ZTsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoQmVmb3JlVW5sb2FkRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChC
ZWZvcmVVbmxvYWRFdmVudCkKKwogI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5oCmluZGV4IGI1OGU3OWNjMGI3MzdhZWQyMTdkYjM0M2IzNzhkNTU4MmZm
MjUyOGMuLmM4ZGZkMzEwODM5MzAwOTBhMjIyM2JlMmIzOThjNDg4OWQzYmYxYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaApAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fY29sdW1uTnVtYmVyOwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhFcnJvckV2ZW50KQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRXJy
b3JFdmVudCkKKwogI2VuZGlmIC8vIEVycm9yRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAxYmU1
ZWJiODBhZTA3OTMzMzNjYTkzMjhjMjIxMzJhNTA5ZTYxMDRkLi42N2Y0MjZlMmI1ZGI1ZTQxY2Yx
NTQ5N2JiYjU3M2YxZWIwYmRiNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwNSwxMCArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50PiBtX3VuZGVy
bHlpbmdFdmVudDsKIH07CiAKLSNkZWZpbmUgRVZFTlRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBFdmVudCwgZXZlbnQs
IGV2ZW50LT5pcyMjVG9WYWx1ZVR5cGVOYW1lKCksIGV2ZW50LmlzIyNUb1ZhbHVlVHlwZU5hbWUo
KSkKLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkV2ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXMjI1RvVmFsdWVU
eXBlTmFtZSgpOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggYmZjYTlkMzlkOTI4
MTRiNTc0NDMzMzZmNzc1OTU5Nzk1MTJkZjVmOC4uNmRmZmM2ZmYyOWUxMmI3YjlhNWFjYTk4Y2Iy
ZjRhYTQ2MWZhZmY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTc2LDEy
ICs3NiwxMiBAQCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKQogCiB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSk7CisgICAgQVNTRVJUKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBpczxGb2N1c0V2ZW50PihldmVudCkpOwogICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQp
IHsKLSAgICAgICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGV2ZW50LmlzRm9jdXNFdmVudCgpKQotICAgICAgICAgICAgdG9Gb2N1
c0V2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxN
b3VzZUV2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OworICAgICAgICBlbHNlIGlmIChpczxGb2N1c0V2ZW50PihldmVudCkpCisgICAgICAgICAgICBk
b3duY2FzdDxGb2N1c0V2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCkpOwogICAgIH0KICAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50KTsKIH0KQEAgLTExMSw4ICsxMTEsOCBAQCB2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQpIGNvbnN0CiAgICAgY2hlY2tSZWFjaGFiaWxpdHko
bV90YXJnZXRUb3VjaGVzLmdldCgpKTsKICAgICBjaGVja1JlYWNoYWJpbGl0eShtX2NoYW5nZWRU
b3VjaGVzLmdldCgpKTsKICNlbmRpZgotICAgIEFTU0VSVChldmVudC5pc1RvdWNoRXZlbnQoKSk7
Ci0gICAgVG91Y2hFdmVudCYgdG91Y2hFdmVudCA9IHRvVG91Y2hFdmVudChldmVudCk7CisgICAg
QVNTRVJUKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSk7CisgICAgVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKICAgICB0b3VjaEV2ZW50LnNldFRvdWNo
ZXMobV90b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldFRhcmdldFRvdWNoZXMobV90YXJnZXRU
b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNo
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBjNmUyNWVkOWQ5
Yzg2Yzk5MDI1MGVlNmUyYzZjNmM3OTEzZWM2NzU2Li5kNTk1NjM1ZjhjYmJjZDRiMmFlYzk3ZTli
NWI1YWE3YmI4NjdiMjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApA
QCAtMzQyLDggKzM0Miw4IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5v
ZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgaWYgKEV2ZW50VGFy
Z2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKICAgICAgICAgZXZl
bnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChldmVudC0+aXNUb3Vj
aEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cygqdG9U
b3VjaEV2ZW50KGV2ZW50LmdldCgpKSkpCisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkg
eworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNo
RXZlbnQ+KCpldmVudCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0ZvY3VzRXZlbnQuaAppbmRleCA5MWM4ODdlN2YzZTZjNzI3NDcwZWJlMDQ2MTJj
NzU5NWIwNDhiZjM1Li5iOTY2ODY2ZTBlNzQ1NWI4ODBhNjlhM2E4NzM1MWQ2MGFjYzQ4NTFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgKQEAgLTcwLDggKzcwLDggQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVsYXRlZFRhcmdldDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoRm9jdXNFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VWRU5UKEZvY3VzRXZlbnQpCisKICNlbmRpZiAvLyBGb2N1c0V2ZW50X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAppbmRleCBmOWQ4MjlkZGY2MDI1NjYxOGVmODIz
ZTZhZGI2YmVlYTIwZDhiMjQxLi5iNDAzMTQwYTk4MGZhMzgzYzY1ZDVlMzA0MjhhOTU0NTZhNDFk
ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCkBAIC0yMjAsOSArMjIwLDkg
QEAgaW50IEtleWJvYXJkRXZlbnQ6OndoaWNoKCkgY29uc3QKIEtleWJvYXJkRXZlbnQqIGZpbmRL
ZXlib2FyZEV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBmb3IgKEV2ZW50KiBlID0gZXZlbnQ7
IGU7IGUgPSBlLT51bmRlcmx5aW5nRXZlbnQoKSkKLSAgICAgICAgaWYgKGUtPmlzS2V5Ym9hcmRF
dmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvS2V5Ym9hcmRFdmVudChlKTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGUpKQorICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGUpOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
S2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAppbmRl
eCA4Njg3YjFmZjg2ZjRiNmEzM2E2ZWE0MDBlMjk0OTI4YzU0ZmMxYzVmLi5hYjk0NTc3MWQ3NTAx
ZmFlNmUxMzA5ZTBlMzM2MDgzZTcxZTY1NmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50
LmgKQEAgLTExOSwxMCArMTE5LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLUVWRU5UX1RZ
UEVfQ0FTVFMoS2V5Ym9hcmRFdmVudCkKLQogS2V5Ym9hcmRFdmVudCogZmluZEtleWJvYXJkRXZl
bnQoRXZlbnQqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VWRU5UKEtleWJvYXJkRXZlbnQpCisKICNlbmRpZiAvLyBLZXlib2FyZEV2ZW50X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRleCBhOWFmZTYwYmM4MTU2YWNjMjhjMjE2ZjY2
MzA4YmU2ZGY1MDg1NjY4Li41OGQzZDYwY2QxNTMzOTJkNmE1NjJiZDdjZGU1ZTE0ZWM1ZjU5YzZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCkBAIC0yNzYsMTAgKzI3NiwxMCBAQCBTaW11
bGF0ZWRNb3VzZUV2ZW50OjpTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUAogICAgIH0KICAgICBzZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJs
eWluZ0V2ZW50KTsKIAotICAgIGlmICh0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSAmJiB0aGlzLT51
bmRlcmx5aW5nRXZlbnQoKS0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgTW91c2VFdmVudCog
bW91c2VFdmVudCA9IHRvTW91c2VFdmVudCh0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSk7Ci0gICAg
ICAgIG1fc2NyZWVuTG9jYXRpb24gPSBtb3VzZUV2ZW50LT5zY3JlZW5Mb2NhdGlvbigpOwotICAg
ICAgICBpbml0Q29vcmRpbmF0ZXMobW91c2VFdmVudC0+Y2xpZW50TG9jYXRpb24oKSk7CisgICAg
aWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYmIGlzPE1vdXNlRXZlbnQ+KHRoaXMtPnVuZGVy
bHlpbmdFdmVudCgpKSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKnRoaXMtPnVuZGVybHlpbmdFdmVudCgpKTsKKyAgICAgICAgbV9zY3Jl
ZW5Mb2NhdGlvbiA9IG1vdXNlRXZlbnQuc2NyZWVuTG9jYXRpb24oKTsKKyAgICAgICAgaW5pdENv
b3JkaW5hdGVzKG1vdXNlRXZlbnQuY2xpZW50TG9jYXRpb24oKSk7CiAgICAgfSBlbHNlIGlmICh0
YXJnZXQpIHsKICAgICAgICAgbV9zY3JlZW5Mb2NhdGlvbiA9IHRhcmdldC0+c2NyZWVuUmVjdCgp
LmNlbnRlcigpOwogICAgICAgICBpbml0Q29vcmRpbmF0ZXMoTGF5b3V0UG9pbnQodGFyZ2V0LT5j
bGllbnRSZWN0KCkuY2VudGVyKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9N
b3VzZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCmluZGV4IDZkYzc2
Yzg2YmQ0MTRkMDI4ZDk2ZWUxZjEwN2RmOTQzYzE2MGY1ZTUuLmFmYzdiZGYwNzhkYmVjMTIzOTkw
ZjJiNWNlMmRlZWY5ZmU2ZjFhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaApAQCAtMTMyLDgg
KzEzMiw4IEBAIHByaXZhdGU6CiAgICAgU2ltdWxhdGVkTW91c2VFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBQYXNzUmVmUHRyPEV2
ZW50PiB1bmRlcmx5aW5nRXZlbnQsIEVsZW1lbnQqIHRhcmdldCk7CiB9OwogCi1FVkVOVF9UWVBF
X0NBU1RTKE1vdXNlRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FVkVOVChNb3VzZUV2ZW50KQorCiAjZW5kaWYgLy8gTW91c2VFdmVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggZjhjMzNkNjc0NDE0ZTQ0MWQ3ODQ5Y2M1ZjIyNmIyNTlhM2Rl
YjM4Yi4uOTM3Njk3OTI1ZTBjNmVlMTZhY2U2N2E5OTNhMDk3ZTkxY2ZjNjM1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtMjAzMiw4ICsyMDMyLDggQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFNjb3BlZEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQ
TEFURk9STShJT1MpCi0gICAgaWYgKGV2ZW50LT5pc1RvdWNoRXZlbnQoKSkKLSAgICAgICAgcmV0
dXJuIGRpc3BhdGNoVG91Y2hFdmVudChhZG9wdFJlZih0b1RvdWNoRXZlbnQoZXZlbnQubGVha1Jl
ZigpKSkpOworICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpCisgICAgICAgIHJldHVybiBk
aXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRSZWYoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQubGVh
a1JlZigpKSkpOwogI2VuZGlmCiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudCh0aGlzLCBldmVudCk7CiB9CkBAIC0yMTAwLDExICsyMTAwLDEyIEBAIHZvaWQgTm9kZTo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CiAgICAgaWYgKGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRF
dmVudCgpKQorICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CiAgICAgICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIodG9L
ZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxl
cigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxLZXlib2FyZEV2ZW50Pihl
dmVudCkpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaW50IGRldGFpbCA9IGV2ZW50LT5pc1VJRXZlbnQo
KSA/IHRvVUlFdmVudChldmVudCktPmRldGFpbCgpIDogMDsKKyAgICAgICAgaW50IGRldGFpbCA9
IGlzPFVJRXZlbnQ+KGV2ZW50KSA/IGRvd25jYXN0PFVJRXZlbnQ+KCpldmVudCkuZGV0YWlsKCkg
OiAwOwogICAgICAgICBpZiAoZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50KGRldGFpbCwgZXZlbnQp
KQogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCkBAIC0yMTE0LDEyICsyMTE1LDEzIEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y29udGV4dE1l
bnVDb250cm9sbGVyKCkuaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7CiAjZW5kaWYKICAg
ICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQpIHsK
LSAgICAgICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRleHRFdmVudEludGVyZmFj
ZVR5cGUpCisgICAgICAgIGlmIChpczxUZXh0RXZlbnQ+KGV2ZW50KSkgewogICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcih0b1RleHRF
dmVudChldmVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZh
dWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKGRvd25jYXN0PFRleHRFdmVudD4oZXZlbnQpKTsKKyAg
ICAgICAgfQogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQotICAgIH0gZWxzZSBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50
KCkpIHsKLSAgICAgICAgaWYgKHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IE1pZGRs
ZUJ1dHRvbikgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYgKGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uKSB7CiAgICAg
ICAgICAgICBpZiAoZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yMTMzLDcgKzIxMzUsNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5k
aWYKLSAgICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGV2ZW50LT5l
dmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKSB7CisgICAgfSBlbHNl
IGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2ZW50PihldmVudCkp
IHsKIAogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIHNlbmQgdGhlIHdo
ZWVsIGV2ZW50IHRvIHRoZSBmaXJzdCBub2RlIHdlIGZpbmQgd2l0aCBhIHJlbmRlcmVyLgogICAg
ICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgPG9wdGlvbj4gYW5kIDxvcHRncm91cD4gZWxlbWVu
dHMgc28gdGhhdCA8c2VsZWN0PnMgZ2V0IGEgd2hlZWwgc2Nyb2xsLgpAQCAtMjE0MywxNiArMjE0
NSwxNiBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAg
ICAgICAKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIo
c3RhcnROb2RlLCB0b1doZWVsRXZlbnQoZXZlbnQpKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKHN0YXJ0Tm9kZSwgZG93bmNh
c3Q8V2hlZWxFdmVudD4oZXZlbnQpKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFU
Rk9STShJT1MpCi0gICAgfSBlbHNlIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBUb3Vj
aEV2ZW50SW50ZXJmYWNlVHlwZSAmJiBldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVu
dFR5cGUpKSB7CisgICAgfSBlbHNlIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkgJiYgZXZlbnRO
YW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgewogICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAgd2hpbGUgKHJlbmRlcmVy
ICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94KHJlbmRlcmVyKS0+Y2FuQmVT
Y3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQogICAgICAgICAgICAgcmVuZGVyZXIgPSBy
ZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5u
b2RlKCkpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1l
KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRUb3VjaEV2
ZW50SGFuZGxlcihyZW5kZXJlci0+bm9kZSgpLCB0b1RvdWNoRXZlbnQoZXZlbnQpKTsKKyAgICAg
ICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRvdWNoRXZlbnRIYW5kbGVy
KHJlbmRlcmVyLT5ub2RlKCksIGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSk7CiAgICAgICAg
IH0KICNlbmRpZgogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
d2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmgK
aW5kZXggYzU1NmUxNWQ3ODA3ZTg2NmI3N2EzODc4ZDg3MjA2N2VkM2Q5ODY1Ny4uODhkMDYxZjQx
NWQzN2FlYWZmMmUzZDQ0YjRmNjI1N2Q0ZDI3YzlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1RleHRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaApA
QCAtODcsOCArODcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxEaWN0
YXRpb25BbHRlcm5hdGl2ZT4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZXM7CiAgICAgfTsKIAotRVZF
TlRfVFlQRV9DQVNUUyhUZXh0RXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChUZXh0RXZlbnQpCisKICNlbmRpZiAvLyBUZXh0RXZl
bnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKaW5kZXggYWRhMGU4Nzc0NzBjZWNkNGQ4ZGQ5ZGM2
ZDZjMmQ4NGYzYjkxNjYwNC4uM2E2ODhiNmRlMTJmNWUwYWZiZTFkMzIwMWU2ZWYzMDMwMzUwNGNk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCkBAIC04NiwxMCArODYsMTAgQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX2NoYW5nZWRUb3VjaGVzOwogfTsKIAotRVZFTlRfVFlQ
RV9DQVNUUyhUb3VjaEV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRVZFTlQoVG91Y2hFdmVudCkKKwogI2VuZGlmIC8vIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAKICNlbmRpZiAvLyBUb3VjaEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9VSUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5oCmluZGV4
IGQzMWViYmNkMjY5YmFjNmYwZjBkMDVlNWU5NjRkY2ZkNDM2Y2U3N2MuLmFiYTg3NTkyNzBmYzFl
Y2U5MWFkYzUzM2IxNGYwOGJlNDQwNzI0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9VSUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaApAQCAtODUsOCAr
ODUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2RldGFpbDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoVUlFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VWRU5UKFVJRXZlbnQpCisKICNlbmRpZiAvLyBVSUV2ZW50X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2hl
ZWxFdmVudC5oCmluZGV4IGRlM2JkZDgyMDcwOTE0ZDZkOTU4YWNjNmZiNTkzZGEyMmE2YWYyMTcu
LjY3MDVkNGE4OGIyN2JmN2I4YjQzOGRjMDA0ZTI2ZDQxZDIxZjQ0MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1do
ZWVsRXZlbnQuaApAQCAtMTE0LDggKzExNCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2luaXRp
YWxpemVkV2l0aFBsYXRmb3JtV2hlZWxFdmVudDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoV2hl
ZWxFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VWRU5UKFdoZWVsRXZlbnQpCisKICNlbmRpZiAvLyBXaGVlbEV2ZW50X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKaW5kZXggNWM1MzM1ZjY3NTNhMjk0YmRm
YTg0ZjM1ZDFmZjU4NWE0NDZlMmQ4Ny4uOTE1ZTJhYWNmOTdhNjAyZTU4NzUyNDcxZjA5ODlmNTZi
YTIzZGFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKQEAg
LTE1Miw3ICsxNTIsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNh
YmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBlbmRTZXJ2
ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2ZW50KQogewot
ICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VFdmVudD4o
ZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsK
QEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0
aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2ZW50KQogICAgIFJlbmRlckltYWdlJiBy
ZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoKmltYWdlRWxlbWVudC5yZW5kZXJlcigpKTsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBwYXNzIHRydWUgZm9yIHVzZVRyYW5zZm9y
bXMuCi0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0gcmVuZGVyZXIuYWJzb2x1dGVU
b0xvY2FsKEZsb2F0UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVgoKSwgdG9Nb3VzZUV2
ZW50KGV2ZW50KS0+cGFnZVkoKSkpOworICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9
IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+
KCpldmVudCkucGFnZVgoKSwgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5wYWdlWSgpKSk7
CiAgICAgaW50IHggPSBhYnNvbHV0ZVBvc2l0aW9uLngoKTsKICAgICBpbnQgeSA9IGFic29sdXRl
UG9zaXRpb24ueSgpOwogICAgIHVybC5hcHBlbmQoJz8nKTsKQEAgLTE5Niw5ICsxOTYsOSBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICAgICAgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhpcyBr
ZWVwcyB0cmFjayBvZiB0aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUgc2VsZWN0aW9uIHdhcyBp
biAoaWYgaXQgd2FzIGluIG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsgd2FzIGNsaWNrZWQKICAg
ICAgICAgICAgIC8vIGZvciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVkaXRhYmxlIGxpbmsgYmVo
YXZpb3IKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50
KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAg
ICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
JiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCku
YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAg
ICAgICAgICAgc2V0Um9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VEb3duKGRv
Y3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxl
bWVudCgpKTsKLSAgICAgICAgICAgICAgICBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duID0g
dG9Nb3VzZUV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKTsKKyAgICAgICAgICAgICAgICBtX3dhc1No
aWZ0S2V5RG93bk9uTW91c2VEb3duID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5zaGlm
dEtleSgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZW92ZXJFdmVudCkgewogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBjbGVh
cmVkIG9uIG1vdXNlb3ZlciBhbmQgbm90IG1vdXNlb3V0IGJlY2F1c2UgdGhlaXIgdmFsdWVzIGFy
ZSBuZWVkZWQgZm9yIGRyYWcgZXZlbnRzLAogICAgICAgICAgICAgICAgIC8vIGJ1dCBkcmFnIGV2
ZW50cyBoYXBwZW4gYWZ0ZXIgbW91c2Ugb3V0IGV2ZW50cy4KQEAgLTU1NSw5ICs1NTUsOSBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpoYW5kbGVDbGljayhFdmVudCogZXZlbnQpCiAKIEhUTUxB
bmNob3JFbGVtZW50OjpFdmVudFR5cGUgSFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZShFdmVu
dCogZXZlbnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFp
czxNb3VzZUV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBOb25Nb3VzZUV2ZW50OwotICAg
IHJldHVybiB0b01vdXNlRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpID8gTW91c2VFdmVudFdpdGhT
aGlmdEtleSA6IE1vdXNlRXZlbnRXaXRob3V0U2hpZnRLZXk7CisgICAgcmV0dXJuIGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCkuc2hpZnRLZXkoKSA/IE1vdXNlRXZlbnRXaXRoU2hpZnRLZXkg
OiBNb3VzZUV2ZW50V2l0aG91dFNoaWZ0S2V5OwogfQogCiBib29sIEhUTUxBbmNob3JFbGVtZW50
Ojp0cmVhdExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkgY29uc3QK
QEAgLTU5MiwxMiArNTkyLDEyIEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OnRyZWF0TGlua0Fz
TGl2ZUZvckV2ZW50VHlwZShFdmVudFR5cGUgZXZlbnRUeXBlKSBjb25zdAogCiBib29sIGlzRW50
ZXJLZXlLZXlkb3duRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZlbnQtPmlzS2V5Ym9hcmRFdmVu
dCgpICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiRW50ZXIi
OworICAgIHJldHVybiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQg
JiYgaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpl
dmVudCkua2V5SWRlbnRpZmllcigpID09ICJFbnRlciI7CiB9CiAKIGJvb2wgaXNMaW5rQ2xpY2so
RXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50ICYmICghZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IHRvTW91c2VFdmVudChl
dmVudCktPmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uKTsKKyAgICByZXR1cm4gZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8
fCBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uKTsK
IH0KIAogYm9vbCBzaG91bGRQcm9oaWJpdExpbmtzKEVsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCmluZGV4IDkyZTI2YTdhNmZmMDFkNjVk
Zjk4YTQxNmNmNDlmODk0ZjEyMTE4MDEuLjQ1MjlmOGIzMzhiOWU5ZjRiNTMxZTM2OGY1MDg4NTAz
MjY4MTkwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCkBA
IC0xMjMsMjggKzEyMywyOSBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChldmVudC0+
aXNLZXlib2FyZEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlm
aWVyKCkgPT0gIlUrMDAyMCIpIHsKKyAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7
CisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2Fy
ZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9
PSAiVSswMDIwIikgewogICAgICAgICAgICAgc2V0QWN0aXZlKHRydWUsIHRydWUpOwogICAgICAg
ICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRsZWQoKSAtIElFIGRpc3BhdGNoZXMgYSBrZXlwcmVz
cyBpbiB0aGlzIGNhc2UuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAodG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y2hhckNvZGUoKSkgeworICAg
ICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmRFdmVudC5jaGFyQ29kZSgpKSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFNp
bXVsYXRlZENsaWNrKGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2so
JmtleWJvYXJkRXZlbnQpOworICAgICAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICBjYXNlICcgJzoKICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcg
ZG93biB0aGUgcGFnZS4KLSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50
ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikg
eworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVw
RXZlbnQgJiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKICAg
ICAgICAgICAgIGlmIChhY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRl
ZENsaWNrKGV2ZW50KTsKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
ICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soJmtleWJvYXJkRXZlbnQpOwor
ICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5jcHAKaW5kZXggNGQwN2JmY2E4YTQwNDY4NzlhYWNlMTgyYmQzZWVlNzVj
ZmJiNjJhYy4uMzVlYTUyY2JjZWNiYzQ5NGMwZmY3ZTY3ZTRkMzQ1OWNjZDU5ZmQ5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCkBAIC0xODcsMTUgKzE4
NywxNSBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxBdHRhY2hSZW5kZXJlcnMoKQog
ICAgICAgICBtX25vcmVzaXplID0gY29udGFpbmluZ0ZyYW1lU2V0LT5ub1Jlc2l6ZSgpOwogfQog
Ci12b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
dCkKK3ZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiB7Ci0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgIW1fbm9yZXNpemUgJiYg
cmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ZyYW1lU2V0KCkpIHsKLSAgICAgICAgaWYgKHRv
UmVuZGVyRnJhbWVTZXQocmVuZGVyZXIoKSktPnVzZXJSZXNpemUodG9Nb3VzZUV2ZW50KGV2dCkp
KSB7Ci0gICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgaWYgKGlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSAmJiAhbV9ub3Jlc2l6ZSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPmlzRnJhbWVTZXQoKSkgeworICAgICAgICBpZiAodG9SZW5kZXJGcmFtZVNldChyZW5kZXJl
cigpKS0+dXNlclJlc2l6ZShkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkpKSB7CisgICAgICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KLSAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQp
OworICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0KIAogYm9v
bCBIVE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5nZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDQzOWEwYTFjZmI4N2Vk
ZDhlMjdiNTE5N2UxNmUzZTlmZWQ5ZWZjMzQuLmVhZjI2NTRlNTk3YmIwZTQ5MmE4Zjg5ZjM3Mjcx
NGNjMWU1NDQzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApA
QCAtMTAzMiw3ICsxMDMyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hF
dmVudChFdmVudCYgZXZlbnQsIElucHV0RWxlbWVudENsaWNrU3RhdGUmIHMKIHsKICAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBtX2lucHV0VHlw
ZS0+c2hvdWxkU3VibWl0SW1wbGljaXRseSgmZXZlbnQpKQogICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50ICYmIGV2ZW50LmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudCgmZXZlbnQpLT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VF
dmVudD4oZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgbV9pbnB1dFR5
cGUtPndpbGxEaXNwYXRjaENsaWNrKHN0YXRlKTsKICAgICAgICAgc3RhdGUuc3RhdGVmdWwgPSB0
cnVlOwogICAgIH0KQEAgLTEwNDUsMjIgKzEwNDUsMjIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpkaWREaXNwYXRjaENsaWNrRXZlbnQoRXZlbnQmIGV2ZW50LCBjb25zdCBJbnB1dEVsZW1lbnRD
bGkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dnQpCiB7Ci0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQgJiYgdG9Nb3VzZUV2ZW50KGV2dCktPmJ1dHRvbigpID09IExl
ZnRCdXR0b24pIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUNsaWNrRXZlbnQodG9Nb3Vz
ZUV2ZW50KGV2dCkpOworICAgIGlmIChpczxNb3VzZUV2ZW50PihldnQpICYmIGV2dC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldnQp
LmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUNs
aWNrRXZlbnQoZG93bmNhc3Q8TW91c2VFdmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRl
ZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKLSAgICBpZiAoZXZ0LT5pc1RvdWNoRXZlbnQoKSkgewotICAgICAgICBt
X2lucHV0VHlwZS0+aGFuZGxlVG91Y2hFdmVudCh0b1RvdWNoRXZlbnQoZXZ0KSk7CisgICAgaWYg
KGlzPFRvdWNoRXZlbnQ+KGV2dCkpIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZVRvdWNo
RXZlbnQoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1
bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBp
ZiAoZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlkb3duRXZlbnQo
dG9LZXlib2FyZEV2ZW50KGV2dCkpOworICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldnQpICYm
IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgbV9p
bnB1dFR5cGUtPmhhbmRsZUtleWRvd25FdmVudChkb3duY2FzdDxLZXlib2FyZEV2ZW50PihldnQp
KTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMDg2LDE2ICsxMDg2LDE3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogCiAgICAgLy8gVXNlIGtleSBwcmVzcyBl
dmVudCBoZXJlIHNpbmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cwogICAgIC8vIG9u
IGtleSBkb3duIGJsb2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVzcyBldmVu
dC4KLSAgICBpZiAoZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5
cHJlc3NFdmVudCh0b0tleWJvYXJkRXZlbnQoZXZ0KSk7Ci0gICAgICAgIGlmIChldnQtPmRlZmF1
bHRIYW5kbGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGV2dC0+
aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZl
bnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleXVwRXZlbnQodG9LZXlib2FyZEV2
ZW50KGV2dCkpOwotICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldnQpKSB7CisgICAgICAgIEtl
eWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZ0
KTsKKyAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KSB7CisgICAgICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5cHJlc3NFdmVu
dCgma2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5kZWZhdWx0
SGFuZGxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChr
ZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgeworICAgICAg
ICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleXVwRXZlbnQoJmtleWJvYXJkRXZlbnQpOworICAg
ICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9pbnB1dFR5cGUtPnNo
b3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZ0KSkgewpAQCAtMTExNywxMSArMTExOCwxMSBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChldnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQoKSkKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KHRvQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50PihldnQpKQorICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoZG93bmNhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2dCkpOwog
Ci0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVNb3VzZURv
d25FdmVudCh0b01vdXNlRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2dCkg
JiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAg
IG1faW5wdXRUeXBlLT5oYW5kbGVNb3VzZURvd25FdmVudChkb3duY2FzdDxNb3VzZUV2ZW50Pihl
dnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAppbmRleCAzNjkwZTljN2ZlZWMxMGM0MDkyMjdhYzU5Nzg1YTg2Yjk1M2U1MDA1Li4z
Yjg2ODg0OWYzMzQzYzdmNWMzM2FmN2U2Y2FkN2FlYzgxMzJhYWNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTc0NywxMSArNzQ3LDEx
IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogciA9IHJlbmRlcmVyKCk7CiAgICAgaWYg
KHIgJiYgci0+aXNFbWJlZGRlZE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChpc1BsdWdJbkltYWdl
RWxlbWVudCgpICYmIGRpc3BsYXlTdGF0ZSgpID09IFdhaXRpbmdGb3JTbmFwc2hvdCAmJiBldmVu
dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tF
dmVudCkgewotICAgICAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVu
dChldmVudCk7Ci0gICAgICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewotICAgICAgICAgICAgICAgIHVzZXJEaWRDbGlja1NuYXBzaG90KG1vdXNlRXZlbnQs
IHRydWUpOwotICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNuYXBzaG90ICYmIGlzPE1vdXNl
RXZlbnQ+KGV2ZW50KSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
KSB7CisgICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VF
dmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigpID09IExl
ZnRCdXR0b24pIHsKKyAgICAgICAgICAgICAgICB1c2VyRGlkQ2xpY2tTbmFwc2hvdCgmbW91c2VF
dmVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCBlY2M4N2UyNzVj
YjZiNzU1NWRiZWRhNDdjMmFlNjBlYmNkODhiOTAxLi5mOTY0OGRiOThkMTliYTMwMWU0NTU2NzE2
NTQzZTMwYjk5YjU1Yzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcApAQCAtMTE0NiwxMCArMTE0NiwxMSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51
TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIFJlZlB0cjxSZW5kZXJU
aGVtZT4gcmVuZGVyVGhlbWUgPSBwYWdlID8gJnBhZ2UtPnRoZW1lKCkgOiBSZW5kZXJUaGVtZTo6
ZGVmYXVsdFRoZW1lKCk7CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQor
ICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBpZiAocGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQodG9LZXlib2FyZEV2
ZW50KGV2ZW50KSkpCisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3du
Y2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAocGxhdGZvcm1IYW5kbGVL
ZXlkb3duRXZlbnQoJmtleWJvYXJkRXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIC8vIFdoZW4gdXNpbmcgc3BhdGlhbCBuYXZpZ2F0aW9uLCB3ZSB3YW50IHRvIGJlIGFibGUg
dG8gbmF2aWdhdGUgYXdheQpAQCAtMTE2MCw3ICsxMTYxLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlk
ZW50aWZpZXIgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCk7CisgICAg
ICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQua2V5SWRlbnRp
ZmllcigpOwogICAgICAgICBib29sIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdGhpcy0+bGlzdEl0ZW1zKCk7CiAgICAgICAg
IGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4KCkpOwpAQCAt
MTE5MiwyMiArMTE5MywyMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgc2VsZWN0T3B0aW9uKGxp
c3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIERlc2VsZWN0T3RoZXJPcHRpb25zIHwgRGlzcGF0
Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwogCiAgICAgICAgIGlmIChoYW5kbGVkKQotICAg
ICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBrZXlib2Fy
ZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogCiAgICAgLy8gVXNlIGtleSBwcmVz
cyBldmVudCBoZXJlIHNpbmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cwogICAgIC8v
IG9uIGtleSBkb3duIGJsb2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVzcyBl
dmVudC4KICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgewotICAgICAgICBpZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYg
KCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgaW50IGtleUNvZGUgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlDb2RlKCk7CisgICAg
ICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50
PigqZXZlbnQpOworICAgICAgICBpbnQga2V5Q29kZSA9IGtleWJvYXJkRXZlbnQua2V5Q29kZSgp
OwogICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKIAogICAgICAgICBpZiAoa2V5Q29kZSA9
PSAnICcgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFtZSgpKSkg
ewogICAgICAgICAgICAgLy8gVXNlIHNwYWNlIHRvIHRvZ2dsZSBhcnJvdyBrZXkgaGFuZGxpbmcg
Zm9yIHNlbGVjdGlvbiBjaGFuZ2Ugb3Igc3BhdGlhbCBuYXZpZ2F0aW9uLgogICAgICAgICAgICAg
bV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9ICFtX2FjdGl2ZVNlbGVjdGlvblN0YXRlOwotICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBrZXlib2FyZEV2
ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtMTI0NiwxNyArMTI0OCwxNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlz
dERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09ICdccicpIHsKICAg
ICAgICAgICAgICAgICBpZiAoZm9ybSgpKQotICAgICAgICAgICAgICAgICAgICBmb3JtKCktPnN1
Ym1pdEltcGxpY2l0bHkoZXZlbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybSgp
LT5zdWJtaXRJbXBsaWNpdGx5KCZrZXlib2FyZEV2ZW50LCBmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaGFu
ZGxlZCkKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAg
ICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KIAotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNN
b3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50
KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAjaWYgIVBMQVRG
T1JNKElPUykKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNNZW51TGlz
dCgpKSB7CkBAIC0xMzM2LDM1ICsxMzM4LDM1IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxp
c3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdGhpcy0+bGlzdEl0ZW1zKCk7CiAKLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQt
PmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IExlZnRC
dXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBmb2N1cygpOwogICAgICAg
ICAvLyBDYWxsaW5nIGZvY3VzKCkgbWF5IHJlbW92ZSBvciBjaGFuZ2Ugb3VyIHJlbmRlcmVyLCBp
biB3aGljaCBjYXNlIHdlIGRvbid0IHdhbnQgdG8gaGFuZGxlIHRoZSBldmVudCBmdXJ0aGVyLgog
ICAgICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzTGlzdEJveCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIENvbnZlcnQgdG8gY29vcmRzIHJlbGF0aXZl
IHRvIHRoZSBsaXN0IGJveCBpZiBuZWVkZWQuCi0gICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZl
bnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNldCA9
IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+
YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgICAgIE1vdXNlRXZlbnQm
IG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgICAgICBJbnRQ
b2ludCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRv
TG9jYWwobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKICAg
ICAgICAgaW50IGxpc3RJbmRleCA9IHRvUmVuZGVyTGlzdEJveChyZW5kZXJlcigpKS0+bGlzdElu
ZGV4QXRPZmZzZXQodG9JbnRTaXplKGxvY2FsT2Zmc2V0KSk7CiAgICAgICAgIGlmIChsaXN0SW5k
ZXggPj0gMCkgewogICAgICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkgewog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUo
bGlzdEluZGV4LCBtb3VzZUV2ZW50LT5tZXRhS2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0S2V5KCkp
OworICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUobGlzdEluZGV4LCBtb3VzZUV2
ZW50Lm1ldGFLZXkoKSwgbW91c2VFdmVudC5zaGlmdEtleSgpKTsKICNlbHNlCi0gICAgICAgICAg
ICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZlbnQtPmN0cmxLZXko
KSwgbW91c2VFdmVudC0+c2hpZnRLZXkoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0
ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZlbnQuY3RybEtleSgpLCBtb3VzZUV2ZW50LnNoaWZ0
S2V5KCkpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS5zZXRNb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoKTsKIAotICAgICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAm
JiAhdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxl
QXJlYSgpKSB7Ci0gICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQo
ZXZlbnQpOwotICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbiB8
fCAhbW91c2VFdmVudC0+YnV0dG9uRG93bigpKQorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQp
ICYmICF0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCkpIHsKKyAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigpICE9IExl
ZnRCdXR0b24gfHwgIW1vdXNlRXZlbnQuYnV0dG9uRG93bigpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0gcm91bmRlZEludFBvaW50KHJlbmRl
cmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIFVz
ZVRyYW5zZm9ybXMpKTsKKyAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3VuZGVkSW50
UG9pbnQocmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQuYWJzb2x1dGVMb2Nh
dGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CiAgICAgICAgIGludCBsaXN0SW5kZXggPSB0b1JlbmRl
ckxpc3RCb3gocmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0KHRvSW50U2l6ZShsb2NhbE9m
ZnNldCkpOwogICAgICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKICAgICAgICAgICAgIGlmICgh
aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKQEAgLTEzODEsOSArMTM4Myw5IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlvbih0cnVlKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZl
bnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCkuYXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgeworICAgIH0gZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigp
ID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5hdXRv
c2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFRoaXMgY2xpY2sg
b3IgZHJhZyBldmVudCB3YXMgbm90IG92ZXIgYW55IG9mIHRoZSBvcHRpb25zLgogICAgICAgICBp
ZiAobV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTM5Miw5ICsxMzk0LDExIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hE
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gdGltZXIgc3RvcHMu
CiAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlz
S2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVy
ID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpOworCisgICAgICAgIEtl
eWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZl
bnQpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2FyZEV2ZW50
LmtleUlkZW50aWZpZXIoKTsKIAogICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKICAgICAg
ICAgaW50IGVuZEluZGV4ID0gMDsKQEAgLTE0NTYsMTUgKzE0NjAsMTUgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgICAgICAgICAgbV9hbGxvd3NOb25Db250aWd1b3VzU2VsZWN0
aW9uID0gbV9tdWx0aXBsZSAmJiBpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgp
LmZyYW1lKCkpOwogI2Vsc2UKLSAgICAgICAgICAgIG1fYWxsb3dzTm9uQ29udGlndW91c1NlbGVj
dGlvbiA9IG1fbXVsdGlwbGUgJiYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50
KCkuZnJhbWUoKSkgfHwgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y3RybEtleSgpKTsKKyAgICAg
ICAgICAgIG1fYWxsb3dzTm9uQ29udGlndW91c1NlbGVjdGlvbiA9IG1fbXVsdGlwbGUgJiYgKGlz
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCkuZnJhbWUoKSkgfHwga2V5Ym9hcmRF
dmVudC5jdHJsS2V5KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBib29sIHNlbGVjdE5ld0l0ZW0g
PSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpIHx8ICFtX2FsbG93c05vbkNvbnRp
Z3VvdXNTZWxlY3Rpb247CisgICAgICAgICAgICBib29sIHNlbGVjdE5ld0l0ZW0gPSBrZXlib2Fy
ZEV2ZW50LnNoaWZ0S2V5KCkgfHwgIW1fYWxsb3dzTm9uQ29udGlndW91c1NlbGVjdGlvbjsKIAog
ICAgICAgICAgICAgaWYgKHNlbGVjdE5ld0l0ZW0pCiAgICAgICAgICAgICAgICAgbV9hY3RpdmVT
ZWxlY3Rpb25TdGF0ZSA9IHRydWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9yIGlzIHVu
aXRpYWxpemVkLCBvciBpZiB3ZSdyZSBnb2luZyB0byBkZXNlbGVjdCBhbGwKICAgICAgICAgICAg
IC8vIG90aGVyIG9wdGlvbnMsIHRoZW4gc2V0IHRoZSBhbmNob3IgaW5kZXggZXF1YWwgdG8gdGhl
IGVuZCBpbmRleC4KLSAgICAgICAgICAgIGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhbV9tdWx0aXBs
ZSB8fCAoIXRvS2V5Ym9hcmRFdmVudChldmVudCktPnNoaWZ0S2V5KCkgJiYgc2VsZWN0TmV3SXRl
bSk7CisgICAgICAgICAgICBib29sIGRlc2VsZWN0T3RoZXJzID0gIW1fbXVsdGlwbGUgfHwgKCFr
ZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkgJiYgc2VsZWN0TmV3SXRlbSk7CiAgICAgICAgICAgICBp
ZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgfHwgZGVzZWxlY3RPdGhlcnMpIHsK
ICAgICAgICAgICAgICAgICBpZiAoZGVzZWxlY3RPdGhlcnMpCiAgICAgICAgICAgICAgICAgICAg
IGRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbigpOwpAQCAtMTQ3OCwxNyArMTQ4MiwxOCBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZlbnQpCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzY3JvbGxUb1Nl
bGVjdGlvbigpOwogCi0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVu
dCkgewotICAgICAgICBpZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYg
KCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGludCBrZXlDb2RlID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5Q29kZSgpOworICAgICAg
ICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4o
KmV2ZW50KTsKKyAgICAgICAgaW50IGtleUNvZGUgPSBrZXlib2FyZEV2ZW50LmtleUNvZGUoKTsK
IAogICAgICAgICBpZiAoa2V5Q29kZSA9PSAnXHInKSB7CiAgICAgICAgICAgICBpZiAoZm9ybSgp
KQotICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseShldmVudCwgZmFsc2Up
OwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAg
ICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KCZrZXlib2FyZEV2ZW50LCBmYWxzZSk7CisgICAg
ICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0gZWxz
ZSBpZiAobV9tdWx0aXBsZSAmJiBrZXlDb2RlID09ICcgJyAmJiBtX2FsbG93c05vbkNvbnRpZ3Vv
dXNTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIFVzZSBzcGFjZSB0byB0b2dnbGUgc2VsZWN0
aW9uIGNoYW5nZS4KICAgICAgICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSAhbV9hY3Rp
dmVTZWxlY3Rpb25TdGF0ZTsKQEAgLTE0OTcsNyArMTUwMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAg
ICAgIEFTU0VSVChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtc1ttX2FjdGl2ZVNlbGVj
dGlvbkVuZEluZGV4XSkpOwogICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShtX2FjdGl2
ZVNlbGVjdGlvbkVuZEluZGV4LCB0cnVlIC8qbXVsdGkqLywgZmFsc2UgLypzaGlmdCovKTsKICAg
ICAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTIzLDkgKzE1MjgsOSBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAo
ZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGV2ZW50LT5pc0tleWJv
YXJkRXZlbnQoKSkgewotICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0gdG9L
ZXlib2FyZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LT5jdHJsS2V5
KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5tZXRhS2V5
KCkgJiYgdV9pc3ByaW50KGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCkpKSB7CisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgaXM8S2V5Ym9hcmRF
dmVudD4oZXZlbnQpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBk
b3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAoIWtleWJvYXJkRXZl
bnQuY3RybEtleSgpICYmICFrZXlib2FyZEV2ZW50LmFsdEtleSgpICYmICFrZXlib2FyZEV2ZW50
Lm1ldGFLZXkoKSAmJiB1X2lzcHJpbnQoa2V5Ym9hcmRFdmVudC5jaGFyQ29kZSgpKSkgewogICAg
ICAgICAgICAgdHlwZUFoZWFkRmluZChrZXlib2FyZEV2ZW50KTsKICAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU2NSw5ICsx
NTcwLDkgQEAgU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25BdEluZGV4KGludCBpbmRl
eCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiB9CiAKLXZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAg
IGludCBpbmRleCA9IG1fdHlwZUFoZWFkLmhhbmRsZUV2ZW50KGV2ZW50LCBUeXBlQWhlYWQ6Ok1h
dGNoUHJlZml4IHwgVHlwZUFoZWFkOjpDeWNsZUZpcnN0Q2hhcik7CisgICAgaW50IGluZGV4ID0g
bV90eXBlQWhlYWQuaGFuZGxlRXZlbnQoJmV2ZW50LCBUeXBlQWhlYWQ6Ok1hdGNoUHJlZml4IHwg
VHlwZUFoZWFkOjpDeWNsZUZpcnN0Q2hhcik7CiAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICAg
cmV0dXJuOwogICAgIHNlbGVjdE9wdGlvbihsaXN0VG9PcHRpb25JbmRleChpbmRleCksIERlc2Vs
ZWN0T3RoZXJPcHRpb25zIHwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCmluZGV4IDI3ZmVmZDYwYjRmY2RiYWMx
MzkxZWQ2ZTg5YzlhOGFmZjUzNjk2NjQuLmRhN2YxNWE4OWEwNWNkNzI4YzMyYTY1NTkyYTA1ZGU0
YTJjYzBiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKQEAgLTE1
MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBk
YXRlU2VsZWN0ZWRTdGF0ZXMgPSB0cnVlKSBjb25zdDsKIAogICAgIHZvaWQgZGVzZWxlY3RJdGVt
cyhIVE1MT3B0aW9uRWxlbWVudCogZXhjbHVkZUVsZW1lbnQgPSAwKTsKLSAgICB2b2lkIHR5cGVB
aGVhZEZpbmQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2Fy
ZEV2ZW50Jik7CiAgICAgdm9pZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAgdmlydHVhbCBJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5k
ZXggZWM2YzNhMjBmZjk5YmEyYzk0MTQ5MzNlYmQ2YThhOTA4YzNhNjg0Mi4uMTEyZDJmZDM2MjRj
MTlkMjg4NDY2NzRkN2M4ODU1NTUzMTk2MDFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFN1bW1hcnlFbGVtZW50LmNwcApAQCAtMTI2LDI4ICsxMjYsMjkgQEAgdm9pZCBIVE1MU3VtbWFy
eUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQo
KSkgewotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRv
d25FdmVudCAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUr
MDAyMCIpIHsKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgeworICAgICAg
ICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZl
bnQ+KCpldmVudCk7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9
PSAiVSswMDIwIikgewogICAgICAgICAgICAgICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVlKTsKICAg
ICAgICAgICAgICAgICAvLyBObyBzZXREZWZhdWx0SGFuZGxlZCgpIC0gSUUgZGlzcGF0Y2hlcyBh
IGtleXByZXNzIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodG9LZXlib2FyZEV2ZW50KGV2
ZW50KS0+Y2hhckNvZGUoKSkgeworICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChrZXlib2FyZEV2ZW50LmNoYXJDb2RlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlICdccic6
CiAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwotICAg
ICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2FzZSAnICc6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nIGRvd24gdGhlIHBhZ2UuCi0gICAgICAgICAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgICAgICBr
ZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCAmJiB0b0tleWJvYXJkRXZl
bnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKKyAgICAgICAgICAgIGlm
IChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCAmJiBrZXli
b2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewogICAgICAgICAgICAgICAg
IGlmIChhY3RpdmUoKSkKICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0ZWRDbGlj
ayhldmVudCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggMmE0YzVjNWFjZjFhYjNjOTZk
NGRjNTM0OWM3YzI5MDUyMjdlNmJjNS4uMzVmYWUxMmM2NDY2MjU2ZjU4OWY2YjMwOTAzMzIyYmY1
ZGI1ZDJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CkBAIC0yNzAsOCArMjcwLDggQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQt
PmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5ldmVudElu
dGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlIHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIGZvcndhcmRFdmVudChldmVudCk7Ci0g
ICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCgpKQotICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCh0b0JlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KGV2ZW50KSk7CisgICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBpczxCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZlbnQpKQorICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChkb3duY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZlbnQpKTsKIAog
ICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCmluZGV4IDFlYmVjNzdjMTFj
MTAwM2E1NTkzM2QwMWRhNzc0MzVmZDZmMjAxZDQuLmNjOWJkYzk5MGE2ODU2ZjBhOGQ2M2I5MWRl
YmY1OTE1YWMxZTBmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcApAQCAt
Mzk4LDggKzM5OCw4IEBAIHZvaWQgSW1hZ2VFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkKICAgICAgICAgbV9kb2N1bWVudC53aW5k
b3dTaXplQ2hhbmdlZCgpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAgIE1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoKmV2ZW50KTsKKyAgICBlbHNlIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+
KGV2ZW50KSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91
c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgbV9kb2N1bWVudC5pbWFnZUNsaWNrZWQobW91c2VF
dmVudC54KCksIG1vdXNlRXZlbnQueSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VJbnB1dFR5cGUuY3BwCmluZGV4IGQwZTI1YmUxOTA3ZTNjOTJlYWZlMzY4MzZkODgxZDYyYmY4
Y2I1MDguLjI4OWE5ZWQyNWVhY2M0MmFkZmE5MGRkMDg4ZGY3OWU4MzQ4YjdjNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCkBAIC04OSw4ICs4OSw4IEBAIHZvaWQgSW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIG1f
Y2xpY2tMb2NhdGlvbiA9IEludFBvaW50KCk7CiAgICAgaWYgKGV2ZW50LT51bmRlcmx5aW5nRXZl
bnQoKSkgewogICAgICAgICBFdmVudCYgdW5kZXJseWluZ0V2ZW50ID0gKmV2ZW50LT51bmRlcmx5
aW5nRXZlbnQoKTsKLSAgICAgICAgaWYgKHVuZGVybHlpbmdFdmVudC5pc01vdXNlRXZlbnQoKSkg
ewotICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IHRvTW91c2VFdmVudCh1bmRl
cmx5aW5nRXZlbnQpOworICAgICAgICBpZiAoaXM8TW91c2VFdmVudD4odW5kZXJseWluZ0V2ZW50
KSkgeworICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNl
RXZlbnQ+KHVuZGVybHlpbmdFdmVudCk7CiAgICAgICAgICAgICBpZiAoIW1vdXNlRXZlbnQuaXNT
aW11bGF0ZWQoKSkKICAgICAgICAgICAgICAgICBtX2NsaWNrTG9jYXRpb24gPSBJbnRQb2ludCht
b3VzZUV2ZW50Lm9mZnNldFgoKSwgbW91c2VFdmVudC5vZmZzZXRZKCkpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0lucHV0VHlwZS5jcHAKaW5kZXggMTU3MDI2ZDg5ZDJhNDA4YThiMTUyZDUxNWQ4
NWFiMDJkNjVkNThjOS4uM2IyMjdhYjAwYzQ5ODQ2MTZiYjA4ZjEyNTgyMjMzYzE4NmI3NDQyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcApAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQgSW5w
dXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqKQogCiBib29sIElucHV0VHlwZTo6c2hvdWxkU3Vi
bWl0SW1wbGljaXRseShFdmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV2ZW50LT5pc0tleWJv
YXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmNoYXJDb2RlKCkgPT0gJ1xyJzsKKyAgICByZXR1
cm4gaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleXByZXNzRXZlbnQgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KS5jaGFy
Q29kZSgpID09ICdccic7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBJbnB1dFR5
cGU6OmZvcm1Gb3JTdWJtaXNzaW9uKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvTWVkaWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1l
bnQuY3BwCmluZGV4IDlmMDdmYTNkZGViOWUwOWQ0MWQ3YzJlNjNmMzMxMjdlODEyZmY2ZjQuLjdk
YTliYjg0NTBhZWFlNDJmY2Q1M2NlMTI4YmIxMGM2NjA4ZDc0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9NZWRpYURvY3VtZW50LmNwcApAQCAtMjA0LDE5ICsyMDQsMTkgQEAgdm9pZCBNZWRpYURvY3Vt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoIWlzPENvbnRh
aW5lck5vZGU+KHRhcmdldE5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgQ29udGFpbmVyTm9k
ZSYgdGFyZ2V0Q29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnRhcmdldE5vZGUp
OwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYg
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCAmJiBpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsKICAg
ICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8gPSBkZXNjZW5kZW50VmlkZW9FbGVtZW50KHRh
cmdldENvbnRhaW5lcik7CiAgICAgICAgIGlmICghdmlkZW8pCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHRvS2V5Ym9hcmRFdmVu
dChldmVudCk7Ci0gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0g
IlUrMDAyMCIpIHsgLy8gc3BhY2UKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVu
dCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChrZXlib2Fy
ZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeyAvLyBzcGFjZQogICAgICAgICAg
ICAgaWYgKHZpZGVvLT5wYXVzZWQoKSkgewogICAgICAgICAgICAgICAgIGlmICh2aWRlby0+Y2Fu
UGxheSgpKQogICAgICAgICAgICAgICAgICAgICB2aWRlby0+cGxheSgpOwogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgdmlkZW8tPnBhdXNlKCk7Ci0gICAgICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVm
YXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCBlMTUwMTQ5YmMxNDA5YjFhNzE1NTI1YjE3MWVl
M2IwYWE2NmRiYTQzLi43YTlmZTE0MTZiMjMxNDliYTE3NjAwOGQ2MWJkMmIyNmY3NjU3YmI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC0yMDYsNyAr
MjA2LDggQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgpCiAKIGJv
b2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVu
dCkKIHsKLSAgICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1
dEV2ZW50ICYmIGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRleHRFdmVudEludGVyZmFjZVR5
cGUgJiYgdG9UZXh0RXZlbnQoZXZlbnQpLT5kYXRhKCkgPT0gIlxuIikgfHwgSW5wdXRUeXBlOjpz
aG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KTsKKyAgICByZXR1cm4gKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIGlzPFRleHRFdmVudD4oZXZlbnQpICYm
IGRvd25jYXN0PFRleHRFdmVudD4oKmV2ZW50KS5kYXRhKCkgPT0gIlxuIikKKyAgICAgICAgfHwg
SW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KTsKIH0KIAogUmVuZGVyUHRy
PFJlbmRlckVsZW1lbnQ+IFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5kZXJlcihQ
YXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCmluZGV4IDllODNlNjJmOTY3
YmYxNmIwOWI0YTEyNjJmNjhiYjhlOTFlOTM5N2EuLjI2Mzg2M2JlNzA2MGNkOTVhZWQ1OTc4ZDll
M2VjMDRlMzIwODgwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIE1lZGlh
Q29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtCiB2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8vIExlZnQgYnV0dG9u
IGlzIDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0dG9uLgotICAgIGlm
IChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkp
CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpLmJ1dHRvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXJlbmRlcmVyKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKaW5kZXggZDVhNDU2YmE5ODMyY2Y5YWQ5OWRlMzljMGMwYWQ0NzBiNDgwMjc5Ny4uMzJm
M2E1MzM0ZGNjZDM2Zjk4ODJjOWU4MTZhYjY5MTI4ZWE4MWVkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMjIxLDgg
KzIyMSw4IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2ZW50KTsKIAotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsK
LSAgICAgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSB0b01vdXNlRXZlbnQoZXZlbnQpLT5hYnNv
bHV0ZUxvY2F0aW9uKCk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgeworICAgICAg
ICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYWJz
b2x1dGVMb2NhdGlvbigpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPnRhcmdldCgpID09IHRoaXMpIHsKICAgICAgICAg
ICAgIHN0YXJ0RHJhZyhsb2NhdGlvbik7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKQEAgLTMzNywxMiArMzM3LDEyIEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBN
ZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVtZW50CiAK
IHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50
KCkgfHwgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkKKyAgICBp
ZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMo
KS5tb3VzZW91dEV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQb29yIG1hbidzIG1v
dXNlbGVhdmUgZXZlbnQgZGV0ZWN0aW9uLgotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0
b01vdXNlRXZlbnQoZXZlbnQpOwotICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gbW91
c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBk
b3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFy
Z2V0ID0gbW91c2VFdmVudC5yZWxhdGVkVGFyZ2V0KCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0
IHx8ICFyZWxhdGVkVGFyZ2V0LT50b05vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04NTEs
NyArODUxLDcgQEAgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+IE1lZGlh
Q29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKERvY3UKIHZvaWQgTWVkaWFDb250cm9sVGlt
ZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAv
LyBMZWZ0IGJ1dHRvbiBpcyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1
dHRvbi4KLSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVu
dCktPmJ1dHRvbigpKQorICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFyZW5kZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xz
LmNwcAppbmRleCBmYTFiZWJmNDM2MDMzMDAyOGYwZDVhMDI2NTc0MjUzNzc2ZDhiYjFlLi40ZDNl
Y2Y4MGQyOTJmYTI1NTM3NWJkZjRhNmFmM2Q0OWU0MzBiNjNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtMzY2LDkgKzM2Niw5IEBAIHZvaWQg
TWVkaWFDb250cm9sczo6c3RvcEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpCiAKIGJvb2wg
TWVkaWFDb250cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCkKIHsKLSAg
ICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFy
Z2V0ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KS0+cmVsYXRlZFRhcmdldCgpOworICAgIEV2ZW50VGFy
Z2V0KiByZWxhdGVkVGFyZ2V0ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5yZWxhdGVk
VGFyZ2V0KCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIGNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCmluZGV4IDEx
OTZhNzE4NzY2MGI3ZTM1MDI3ZDQ1NjUzYzM5MzkwMDYzZWZjM2UuLjhjODRkYTczYmY2NjAwZjQ1
YzE0MmI2MzM0ZWFhNjM0YzQzZDhlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcApAQCAtNTg4LDEwICs1ODgsMTAgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xzQXBwbGVFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRXZlbnQKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuY2xpY2tFdmVudCkKICAgICAgICAgbV9tZWRpYUNvbnRyb2xzLT5oYW5kbGVDbGlja0V2ZW50
KGV2ZW50KTsKLSAgICBlbHNlIGlmICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hl
ZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQp
ICYmIGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKSB7
Ci0gICAgICAgIFdoZWVsRXZlbnQqIHdoZWVsRXZlbnQgPSB0b1doZWVsRXZlbnQoZXZlbnQpOwot
ICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xzLT5zaG91bGRDbG9zZWRDYXB0aW9uc0NvbnRhaW5l
clByZXZlbnRQYWdlU2Nyb2xsaW5nKHdoZWVsRXZlbnQtPndoZWVsRGVsdGFZKCkpKQotICAgICAg
ICAgICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CisgICAgZWxzZSBpZiAoKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2ZW50PihldmVudCkpIHsKKyAgICAg
ICAgV2hlZWxFdmVudCYgd2hlZWxFdmVudCA9IGRvd25jYXN0PFdoZWVsRXZlbnQ+KCpldmVudCk7
CisgICAgICAgIGlmIChtX21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENhcHRpb25zQ29udGFp
bmVyUHJldmVudFBhZ2VTY3JvbGxpbmcod2hlZWxFdmVudC53aGVlbERlbHRhWSgpKSkKKyAgICAg
ICAgICAgIHdoZWVsRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCmluZGV4IDgx
YzIwNjgwZDkyNWNhODIwMjg1YjJmZjU2M2RmMmE1MWIyYWMwY2IuLjIyYmU2M2I0NzVlMDk1MTI3
NTY3OGI4NDhmYmFiNWQzMjg2NDlkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcApAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgU2xp
ZGVyVGh1bWJFbGVtZW50OjpzdG9wRHJhZ2dpbmcoKQogI2lmICFQTEFURk9STShJT1MpCiB2b2lk
IFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7
Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICBpZiAoIWlzPE1vdXNlRXZl
bnQ+KGV2ZW50KSkgewogICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDcsOSArMzQ3LDkgQEAgdm9p
ZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRv
TW91c2VFdmVudChldmVudCk7Ci0gICAgYm9vbCBpc0xlZnRCdXR0b24gPSBtb3VzZUV2ZW50LT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
ID0gZXZlbnQtPnR5cGUoKTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICBib29sIGlzTGVmdEJ1dHRvbiA9IG1vdXNlRXZlbnQu
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSA9IG1vdXNlRXZlbnQudHlwZSgpOwogCiAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBkbyBub3Qg
Y2FsbCBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKSBoZXJlIGJlY2F1c2UKICAgICAvLyBNZWRp
YUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoKSB3YW50cyB0byBo
YW5kbGUgdGhlc2UKQEAgLTM2MiwxMSArMzYyLDExIEBAIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewog
ICAgICAgICBpZiAobV9pbkRyYWdNb2RlKQotICAgICAgICAgICAgc2V0UG9zaXRpb25Gcm9tUG9p
bnQobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHNldFBvc2l0
aW9uRnJvbVBvaW50KG1vdXNlRXZlbnQuYWJzb2x1dGVMb2NhdGlvbigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2
ZW50KTsKKyAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigmbW91c2VFdmVu
dCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
U3BpbkJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1
dHRvbkVsZW1lbnQuY3BwCmluZGV4IDUwM2IzNWI2YmY1YTc4MTVkZDcxZTdhOWM2MTk4YWRjODcy
MDA2ZTUuLjM4YTQwYTQzZGQ2ODU1ODE2MDI4ZDFjZGJlOGFkZjRjOTZiMmI0NTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAKQEAgLTY3
LDcgKzY3LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbERldGFjaFJlbmRlcmVycygp
CiAKIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgaWYgKCFpczxN
b3VzZUV2ZW50PihldmVudCkpIHsKICAgICAgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQo
KSkKICAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtODYsOSArODYsOSBAQCB2b2lkIFNwaW5CdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoZXZlbnQp
OwotICAgIEludFBvaW50IGxvY2FsID0gcm91bmRlZEludFBvaW50KGJveC0+YWJzb2x1dGVUb0xv
Y2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOwotICAg
IGlmIChtb3VzZUV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYm
IG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBNb3VzZUV2ZW50JiBt
b3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICBJbnRQb2ludCBs
b2NhbCA9IHJvdW5kZWRJbnRQb2ludChib3gtPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LmFi
c29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOworICAgIGlmIChtb3VzZUV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChib3gtPnBpeGVsU25hcHBlZEJvcmRlckJv
eFJlY3QoKS5jb250YWlucyhsb2NhbCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zIG9mIEhUTUxJbnB1dEVsZW1lbnQgbWF5IHJ1biBKYXZhU2NyaXB0CiAgICAgICAg
ICAgICAvLyBjb2RlIHdoaWNoIGRldGFjaGVzIHRoaXMgc2hhZG93IG5vZGUuIFdlIG5lZWQgdG8g
dGFrZSBhIHJlZmVyZW5jZQpAQCAtMTA3LDExICsxMDcsMTEgQEAgdm9pZCBTcGluQnV0dG9uRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAg
ICAgIGRvU3RlcEFjdGlvbihtX3VwRG93blN0YXRlID09IFVwID8gMSA6IC0xKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikKKyAg
ICB9IGVsc2UgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQgJiYgbW91c2VFdmVudC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKQogICAgICAgICBzdG9wUmVw
ZWF0aW5nVGltZXIoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZW1vdmVFdmVudCkgeworICAgIGVsc2UgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewogICAgICAgICBpZiAoYm94LT5waXhlbFNuYXBw
ZWRCb3JkZXJCb3hSZWN0KCkuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2FwdHVyaW5nKSB7CiAgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCkuZnJhbWUoKSkgewpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgSFRNTERpdkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgIGlmICghbW91c2VFdmVudC5kZWZhdWx0
SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigm
bW91c2VFdmVudCk7CiB9CiAKIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OndpbGxPcGVuUG9wdXAo
KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmZvcndhcmRFdmVu
dChFdmVudCogZXZlbnQpCiAgICAgaWYgKCFyZW5kZXJCb3goKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpICE9IFdoZWVsRXZlbnRJbnRlcmZhY2VU
eXBlKQorICAgIGlmICghaXM8V2hlZWxFdmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIW1fc3BpbkJ1dHRvbk93bmVyKQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgU3Bp
bkJ1dHRvbkVsZW1lbnQ6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKCFtX3Nw
aW5CdXR0b25Pd25lci0+c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb1doZWVsRXZlbnRzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGRvU3RlcEFjdGlvbih0b1doZWVsRXZlbnQoZXZlbnQpLT53
aGVlbERlbHRhWSgpKTsKKyAgICBkb1N0ZXBBY3Rpb24oZG93bmNhc3Q8V2hlZWxFdmVudD4oKmV2
ZW50KS53aGVlbERlbHRhWSgpKTsKICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAKaW5kZXggMTkyZjhlMDA2M2ZhNWEwOGU4ZjQ4MjFmZGVkZTAzZmZlMjBh
ZDAxYy4uN2IyOTUzZDg3OGI5MGFkMzIxZmE1ZGQyYjJmMWIwNzRlYjZiZGY0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBPbiBt
b3VzZWRvd24sIGJyaW5nIHVwIGEgbWVudSwgaWYgbmVlZGVkCiAgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFkb3dIb3N0KCkpOwotICAg
IGlmIChpbnB1dCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9u
KCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChpbnB1dCAmJiBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93
bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAg
ICAgIGlucHV0LT5mb2N1cygpOwogICAgICAgICBpbnB1dC0+c2VsZWN0KCk7CiAjaWYgIVBMQVRG
T1JNKElPUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCkt
PmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsK
ICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKICAg
ICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVyaW5nTW91c2VFdmVu
dHNFbGVtZW50KHRoaXMpOwpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgU2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAg
ICAgaW5wdXQtPnNlbGVjdCgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVu
dCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9u
KCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXVwRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNl
RXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpZiAobV9j
YXB0dXJpbmcpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZy
YW1lKCkpIHsKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCA4NTY5MDk2OGRlYzRhYjA4
YzliODg0YTkzOGMxYTQ2OTFkMThlZGE5Li4wMzNhYWM4M2UwNzM5OWNiMmY5MDA2MjUyM2U2YzA0
NTc2YzlmYjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcApAQCAtMjg0LDEyICsyODQsMTIgQEAgdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250
ZXh0TWUKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkaXNwYXRjaEV2ZW50QXNDb250ZXh0
TWVudUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykgJiYg
VVNFKEFDQ0VTU0lCSUxJVFlfQ09OVEVYVF9NRU5VUykKLSAgICBpZiAoIWV2ZW50IHx8ICFldmVu
dC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFldmVudCB8fCAhaXM8TW91c2VFdmVudD4oZXZl
bnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSogZnJhbWUgPSBldmVudC0+dGFyZ2V0
KCktPnRvTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgTW91c2VFdmVudCogbW91c2VF
dmVudCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgSW50UG9pbnQgbW91c2VQb2ludCA9IElu
dFBvaW50KG1vdXNlRXZlbnQtPmNsaWVudFgoKSwgbW91c2VFdmVudC0+Y2xpZW50WSgpKTsKKyAg
ICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsK
KyAgICBJbnRQb2ludCBtb3VzZVBvaW50ID0gSW50UG9pbnQobW91c2VFdmVudC5jbGllbnRYKCks
IG1vdXNlRXZlbnQuY2xpZW50WSgpKTsKIAogICAgIG1fZnJvbnRlbmRQYWdlLT5jb250ZXh0TWVu
dUNvbnRyb2xsZXIoKS5zaG93Q29udGV4dE1lbnVBdChmcmFtZSwgbW91c2VQb2ludCk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4
IGEzZjU5MDdlNGQ0N2YyMDRhYWIzOTRiOGMwMjNiOGU1ZGQzMTI5Y2EuLjc2ZTg4MWNlMjhlYmU3
ZWM3MmQ3YzIyMGUyZDAxNGQ3NzE4ZjU4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTE1MCwxMCArMTUwLDEwIEBAIHN0ZDo6dW5pcXVl
X3B0cjxDb250ZXh0TWVudT4gQ29udGV4dE1lbnVDb250cm9sbGVyOjptYXliZUNyZWF0ZUNvbnRl
eHRNZW51KEV2ZW50CiB7CiAgICAgQVNTRVJUKGV2ZW50KTsKICAgICAKLSAgICBpZiAoIWV2ZW50
LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gdG9Nb3Vz
ZUV2ZW50KCpldmVudCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQobW91c2VFdmVudC5h
YnNvbHV0ZUxvY2F0aW9uKCkpOwogCiAgICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+
dG9Ob2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzNhOWE1Mzg5
YmNjOWY0MzgxNzU2N2YzMzdhYjhhZDY4MGEzMmQyNy4uMzhjZmE3MjllYmEzZTVjYWY1MmI4NWYw
NGRlZWNlZmM3ODdlOTViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAt
MzUyMyw3ICszNTIzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50
KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmUKIHsKICAgICAvLyBQbGF0
Zm9ybXMgc2hvdWxkIGRpZmZlcmVudGlhdGUgcmVhbCBjb21tYW5kcyBsaWtlIHNlbGVjdEFsbCBm
cm9tIHRleHQgaW5wdXQgaW4gZGlzZ3Vpc2UgKGxpa2UgaW5zZXJ0TmV3bGluZSksCiAgICAgLy8g
YW5kIGF2b2lkIGRpc3BhdGNoaW5nIHRleHQgaW5wdXQgZXZlbnRzIGZyb20ga2V5ZG93biBkZWZh
dWx0IGhhbmRsZXJzLgotICAgIEFTU0VSVCghdW5kZXJseWluZ0V2ZW50IHx8ICF1bmRlcmx5aW5n
RXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpIHx8IHRvS2V5Ym9hcmRFdmVudCh1bmRlcmx5aW5nRXZl
bnQpLT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOworICAgIEFTU0VSVCgh
dW5kZXJseWluZ0V2ZW50IHx8ICFpczxLZXlib2FyZEV2ZW50Pih1bmRlcmx5aW5nRXZlbnQpIHx8
IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCp1bmRlcmx5aW5nRXZlbnQpLnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CiAKICAgICBFdmVudFRhcmdldCogdGFyZ2V0OwogICAg
IGlmICh1bmRlcmx5aW5nRXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCAxNDkwNjBhYWE1NmI5MzRlMWM5OWZhYzBjMDcw
MjRlODdjZjhiMWI1Li5iNDY0Y2M3MzMwNGMxNjhjMzU5ODExNDNiYjJlOGRhNGNiNmY5NjUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAKQEAgLTU5MCw5ICs1OTAsOSBAQCBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgRmxvYXRQb2ludCYgcG9pbgogICAgICAgICAm
JiBpbmRpY2F0b3JSZWN0LmNvbnRhaW5zKHBvaW50KTsKIH0KIAotYm9vbCBSZW5kZXJFbWJlZGRl
ZE9iamVjdDo6aXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZlbnQqIGV2ZW50
KSBjb25zdAorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJblVuYXZhaWxhYmxlUGx1Z2lu
SW5kaWNhdG9yKGNvbnN0IE1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIHJldHVybiBp
c0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoYWJzb2x1dGVUb0xvY2FsKGV2ZW50LT5hYnNv
bHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICByZXR1cm4gaXNJblVuYXZhaWxh
YmxlUGx1Z2luSW5kaWNhdG9yKGFic29sdXRlVG9Mb2NhbChldmVudC5hYnNvbHV0ZUxvY2F0aW9u
KCksIFVzZVRyYW5zZm9ybXMpKTsKIH0KIAogdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFu
ZGxlVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCkBAIC02MDAs
MjEgKzYwMCwyMSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpoYW5kbGVVbmF2YWlsYWJs
ZVBsdWdpbkluZGljYXRvckV2ZW50KEV2ZW50KiBldmVudCkKICAgICBpZiAoIXNob3VsZFVuYXZh
aWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKGRvY3VtZW50KCksIG1fcGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNl
RXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7Cisg
ICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7
CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luRWxl
bWVudD4oZnJhbWVPd25lckVsZW1lbnQoKSk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikg
ewogICAgICAgICBtX21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IgPSBp
c0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IobW91c2VFdmVudCk7CiAgICAgICAgIGlmICht
X21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpIHsKICAgICAgICAgICAg
IGZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50KCZl
bGVtZW50KTsKICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNDYXB0dXJpbmdNb3VzZUV2ZW50cyh0
cnVlKTsKICAgICAgICAgICAgIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2Vk
KHRydWUpOwogICAgICAgICB9Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
ICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgdG9Nb3VzZUV2ZW50
KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChtb3VzZUV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpZiAobV91bmF2YWlsYWJsZVBsdWdpbkluZGljYXRv
cklzUHJlc3NlZCkgewogICAgICAgICAgICAgZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zZXRDYXB0
dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7CiAgICAgICAgICAgICBlbGVtZW50LnNl
dElzQ2FwdHVyaW5nTW91c2VFdmVudHMoZmFsc2UpOwpAQCAtNjI3LDkgKzYyNyw5IEBAIHZvaWQg
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZl
bnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBtX21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVn
aW5JbmRpY2F0b3IgPSBmYWxzZTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVF
dmVudCkgeworICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQpIHsKICAgICAgICAgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNz
ZWQobV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yICYmIGlzSW5VbmF2
YWlsYWJsZVBsdWdpbkluZGljYXRvcihtb3VzZUV2ZW50KSk7Ci0gICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5oCmluZGV4IDRkMzQyZDc4NDQxMGI3YTcyZTcxMTNiNmJkODJhODFhNmU3NWQ0YTUu
LjJiZmJlYzE4MWM4YWJjNDg0MzRhMTNlM2ZiMTU0MWUyY2IyZGI3ZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCkBAIC04NCw3ICs4NCw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNh
bERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQq
KiBzdG9wRWxlbWVudCkgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2b2lkIHNldFVuYXZhaWxhYmxl
UGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGJvb2wpOwotICAgIGJvb2wgaXNJblVuYXZhaWxhYmxl
UGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZlbnQqKSBjb25zdDsKKyAgICBib29sIGlzSW5VbmF2YWls
YWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBNb3VzZUV2ZW50JikgY29uc3Q7CiAgICAgYm9vbCBp
c0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owog
ICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJlY3QmIGluZGlj
YXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0JiBhcnJv
d1JlY3QsIEZvbnQmLCBUZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3Q7CiAgICAgTGF5
b3V0UmVjdCB1bmF2YWlsYWJsZVBsdWdpbkluZGljYXRvckJvdW5kcyhjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNu
YXBzaG90dGVkUGx1Z0luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFw
c2hvdHRlZFBsdWdJbi5jcHAKaW5kZXggZGUzNzI2ZDJjMzZlZDNiNWE1YWJiY2Q4YmRlMzBmYjY2
YjllNmRjZC4uODcwYTU0MTQwNGQxYzVlMGIyODkxZmRkMjMyZmViZWM0ZDQ1ODVhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4u
Y3BwCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBDdXJzb3JEaXJlY3RpdmUgUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW46OmdldEN1cnNvcihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIEN1cgogCiB2b2lk
IFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0g
ICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50Pihl
dmVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0
b01vdXNlRXZlbnQoZXZlbnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqZXZlbnQpOwogCiAgICAgLy8gSWYgd2UncmUgYSBzbmFwc2hvdHRlZCBw
bHVnaW4sIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFjdGl2YXRlIG9uCiAgICAgLy8gY2xpY2tz
IGV2ZW4gaWYgdGhlIHBhZ2UgaXMgcHJldmVudGluZyBvdXIgZGVmYXVsdCBiZWhhdmlvdXIuIE90
aGVyd2lzZQpAQCAtMTY4LDIwICsxNjgsMjAgQEAgdm9pZCBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJ
bjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIC8vIGV2ZW50LiBUaGUgY29kZSBiZWxv
dyBpcyBub3QgY29tcGxldGVseSBmb29scHJvb2YsIGJ1dCB0aGUgd29yc3QgdGhhdAogICAgIC8v
IGNvdWxkIGhhcHBlbiBpcyB0aGF0IGEgc25hcHNob3R0ZWQgcGx1Z2luIHJlc3RhcnRzLgogCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpCisgICAg
aWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQogICAg
ICAgICBtX2lzUG90ZW50aWFsTW91c2VBY3RpdmF0aW9uID0gZmFsc2U7CiAKLSAgICBpZiAobW91
c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKKyAgICBpZiAobW91c2VFdmVudC5idXR0
b24oKSAhPSBMZWZ0QnV0dG9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCAobV9pc1BvdGVudGlhbE1vdXNlQWN0
aXZhdGlvbiAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpKSB7
CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50IHx8
IChtX2lzUG90ZW50aWFsTW91c2VBY3RpdmF0aW9uICYmIG1vdXNlRXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpKSB7CiAgICAgICAgIG1faXNQb3RlbnRpYWxNb3VzZUFj
dGl2YXRpb24gPSBmYWxzZTsKLSAgICAgICAgYm9vbCBjbGlja1dhc09uT3ZlcmxheSA9IHBsdWdJ
bkltYWdlRWxlbWVudCgpLnBhcnRPZlNuYXBzaG90T3ZlcmxheShldmVudC0+dGFyZ2V0KCktPnRv
Tm9kZSgpKTsKLSAgICAgICAgcGx1Z0luSW1hZ2VFbGVtZW50KCkudXNlckRpZENsaWNrU25hcHNo
b3QobW91c2VFdmVudCwgIWNsaWNrV2FzT25PdmVybGF5KTsKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICBib29sIGNsaWNrV2FzT25PdmVybGF5ID0g
cGx1Z0luSW1hZ2VFbGVtZW50KCkucGFydE9mU25hcHNob3RPdmVybGF5KG1vdXNlRXZlbnQudGFy
Z2V0KCktPnRvTm9kZSgpKTsKKyAgICAgICAgcGx1Z0luSW1hZ2VFbGVtZW50KCkudXNlckRpZENs
aWNrU25hcHNob3QoJm1vdXNlRXZlbnQsICFjbGlja1dhc09uT3ZlcmxheSk7CisgICAgICAgIG1v
dXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9IGVsc2UgaWYgKG1vdXNlRXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewogICAgICAgICBtX2lzUG90
ZW50aWFsTW91c2VBY3RpdmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAppbmRleCBmNjc1MThiYTZjNjE5OWUxYWFmYzFjYjFjMjg2YmE3YTMyYzFiZDA4Li5lNDkz
MjkyN2QzZmQzMmMxNjZjOTgyNTRhYWM2MzI2Y2FmMTAyMmUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC04OTIsOCArODkyLDgg
QEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCiAKICAgICBjb25z
dCBXZWJFdmVudCogY3VycmVudEV2ZW50ID0gV2ViUGFnZTo6Y3VycmVudEV2ZW50KCk7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkV2ZW50PiBzaW11bGF0ZWRXZWJFdmVudDsKLSAgICBpZiAoZXZl
bnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmlzU2ltdWxhdGVkKCkp
IHsKLSAgICAgICAgc2ltdWxhdGVkV2ViRXZlbnQgPSBjcmVhdGVXZWJFdmVudCh0b01vdXNlRXZl
bnQoZXZlbnQpKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1v
dXNlRXZlbnQ+KCpldmVudCkuaXNTaW11bGF0ZWQoKSkgeworICAgICAgICBzaW11bGF0ZWRXZWJF
dmVudCA9IGNyZWF0ZVdlYkV2ZW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KSk7CiAgICAg
ICAgIGN1cnJlbnRFdmVudCA9IHNpbXVsYXRlZFdlYkV2ZW50LmdldCgpOwogICAgIH0KICAgICBp
ZiAoIWN1cnJlbnRFdmVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239002</attachid>
            <date>2014-09-30 22:40:32 -0700</date>
            <delta_ts>2014-09-30 22:41:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137284-20140930224032.patch</filename>
            <type>text/plain</type>
            <size>77373</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uZjRlMTI2ZDA3NTgzYTRjY2UwOWRiMDQ2ZmQ3Yzll
YWZjZTg1Y2RkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgRXZlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3Mjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRXZl
bnQgY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJv
ckV2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5oOgorICAgICAgICAq
IGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVs
YXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAqIGRvbS9VSUV2ZW50Lmg6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjppc0VudGVyS2V5S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzTGlua0NsaWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN1
bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL01l
ZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNp
dGx5KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
czo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAq
IHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZs
b3cgd2l0aCBlbm9ybW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWMxMzQ0NzVlYTU3M2Uw
NjMwY2U4OGE0Yzg1NTNmMTEzYzIzZWQ0YS4uN2FkMWNhMDVlMDc4ZTFkMjgzYTY4N2U4NzllY2U3
OWI3NDQ2NDZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFdmVudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFdmVu
dCBjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisKIDIwMTQtMDkt
MzAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBSZW5hbWUgVEVTVF9USEVNRV9ESVIgbWFjcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCBlYTUxZjc5ZjJkNDgwMDJlYTYxYzk5ZjVm
OWMxNzJlZTc5ZTU0MGIwLi41NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBA
IC01OSwxNCArNTksMTQgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAKLSAgICBpZiAoZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKCFpczxF
cnJvckV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSB0b0Vycm9yRXZl
bnQoZXZlbnQpOworICAgIEVycm9yRXZlbnQmIGVycm9yRXZlbnQgPSBkb3duY2FzdDxFcnJvckV2
ZW50PigqZXZlbnQpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKSk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+bWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsK
LSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+Y29sbm8oKSkpOworICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2ZW50Lm1lc3NhZ2Uo
KSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2
ZW50LmZpbGVuYW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVu
dC5saW5lbm8oKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LmNv
bG5vKCkpKTsKIAogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNWM3NmI2ZDQ1ZmIyZWRkNDNmODg2
MDExZGJmMGNjZjJlZjYyMjI0Ny4uNGFjNWUxOWU1YTcyY2Q2NzY4Mzc5NGViZGNkZmNmZjFhYjYy
MGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAgICAg
ICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwog
ICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5pc0JlZm9yZVVubG9hZEV2ZW50KCkpCi0gICAgICAgICAgICAgICAgdG9CZWZvcmVVbmxv
YWRFdmVudChldmVudCktPnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAm
JiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PEJlZm9yZVVubG9hZEV2ZW50PigqZXZlbnQpLnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCmluZGV4IGJiZTQxMTVjZDAyMjQ3ZWRiZjZlNzU0MGE5NzFiZGI0
OWI3NTRiZWQuLjc1NDIwMzU5Y2NlZTI0MzcwNTg2Mjg5Nzc3NzJhMmI3MzM5NTBiMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCkBAIC01MSw4ICs1
MSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZv
cmVVbmxvYWRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgK
aW5kZXggZWY3MmI3MzQ1MDU5Yjc5ZTM2ZTBjZmZjMzEwZGQ4NTEyZTA1NWQ0MS4uNTg3NjY5NmRj
MTU1YjUwZjRhNzMwODdjYjU5ZDFlYzI3ZTU2MjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9y
ZVVubG9hZEV2ZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9y
ZXR1cm5WYWx1ZTsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoQmVmb3JlVW5sb2FkRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChC
ZWZvcmVVbmxvYWRFdmVudCkKKwogI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5oCmluZGV4IGI1OGU3OWNjMGI3MzdhZWQyMTdkYjM0M2IzNzhkNTU4MmZm
MjUyOGMuLmM4ZGZkMzEwODM5MzAwOTBhMjIyM2JlMmIzOThjNDg4OWQzYmYxYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaApAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fY29sdW1uTnVtYmVyOwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhFcnJvckV2ZW50KQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRXJy
b3JFdmVudCkKKwogI2VuZGlmIC8vIEVycm9yRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAxYmU1
ZWJiODBhZTA3OTMzMzNjYTkzMjhjMjIxMzJhNTA5ZTYxMDRkLi42N2Y0MjZlMmI1ZGI1ZTQxY2Yx
NTQ5N2JiYjU3M2YxZWIwYmRiNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwNSwxMCArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50PiBtX3VuZGVy
bHlpbmdFdmVudDsKIH07CiAKLSNkZWZpbmUgRVZFTlRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBFdmVudCwgZXZlbnQs
IGV2ZW50LT5pcyMjVG9WYWx1ZVR5cGVOYW1lKCksIGV2ZW50LmlzIyNUb1ZhbHVlVHlwZU5hbWUo
KSkKLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkV2ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXMjI1RvVmFsdWVU
eXBlTmFtZSgpOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggYmZjYTlkMzlkOTI4
MTRiNTc0NDMzMzZmNzc1OTU5Nzk1MTJkZjVmOC4uNmRmZmM2ZmYyOWUxMmI3YjlhNWFjYTk4Y2Iy
ZjRhYTQ2MWZhZmY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTc2LDEy
ICs3NiwxMiBAQCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKQogCiB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSk7CisgICAgQVNTRVJUKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBpczxGb2N1c0V2ZW50PihldmVudCkpOwogICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQp
IHsKLSAgICAgICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGV2ZW50LmlzRm9jdXNFdmVudCgpKQotICAgICAgICAgICAgdG9Gb2N1
c0V2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxN
b3VzZUV2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OworICAgICAgICBlbHNlIGlmIChpczxGb2N1c0V2ZW50PihldmVudCkpCisgICAgICAgICAgICBk
b3duY2FzdDxGb2N1c0V2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCkpOwogICAgIH0KICAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50KTsKIH0KQEAgLTExMSw4ICsxMTEsOCBAQCB2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQpIGNvbnN0CiAgICAgY2hlY2tSZWFjaGFiaWxpdHko
bV90YXJnZXRUb3VjaGVzLmdldCgpKTsKICAgICBjaGVja1JlYWNoYWJpbGl0eShtX2NoYW5nZWRU
b3VjaGVzLmdldCgpKTsKICNlbmRpZgotICAgIEFTU0VSVChldmVudC5pc1RvdWNoRXZlbnQoKSk7
Ci0gICAgVG91Y2hFdmVudCYgdG91Y2hFdmVudCA9IHRvVG91Y2hFdmVudChldmVudCk7CisgICAg
QVNTRVJUKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSk7CisgICAgVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKICAgICB0b3VjaEV2ZW50LnNldFRvdWNo
ZXMobV90b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldFRhcmdldFRvdWNoZXMobV90YXJnZXRU
b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNo
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBjNmUyNWVkOWQ5
Yzg2Yzk5MDI1MGVlNmUyYzZjNmM3OTEzZWM2NzU2Li5kNTk1NjM1ZjhjYmJjZDRiMmFlYzk3ZTli
NWI1YWE3YmI4NjdiMjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApA
QCAtMzQyLDggKzM0Miw4IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5v
ZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgaWYgKEV2ZW50VGFy
Z2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKICAgICAgICAgZXZl
bnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChldmVudC0+aXNUb3Vj
aEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cygqdG9U
b3VjaEV2ZW50KGV2ZW50LmdldCgpKSkpCisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkg
eworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNo
RXZlbnQ+KCpldmVudCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0ZvY3VzRXZlbnQuaAppbmRleCA5MWM4ODdlN2YzZTZjNzI3NDcwZWJlMDQ2MTJj
NzU5NWIwNDhiZjM1Li5iOTY2ODY2ZTBlNzQ1NWI4ODBhNjlhM2E4NzM1MWQ2MGFjYzQ4NTFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgKQEAgLTcwLDggKzcwLDggQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8RXZlbnRUYXJnZXQ+IG1fcmVsYXRlZFRhcmdldDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoRm9jdXNFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VWRU5UKEZvY3VzRXZlbnQpCisKICNlbmRpZiAvLyBGb2N1c0V2ZW50X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAppbmRleCBmOWQ4MjlkZGY2MDI1NjYxOGVmODIz
ZTZhZGI2YmVlYTIwZDhiMjQxLi5iNDAzMTQwYTk4MGZhMzgzYzY1ZDVlMzA0MjhhOTU0NTZhNDFk
ZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCkBAIC0yMjAsOSArMjIwLDkg
QEAgaW50IEtleWJvYXJkRXZlbnQ6OndoaWNoKCkgY29uc3QKIEtleWJvYXJkRXZlbnQqIGZpbmRL
ZXlib2FyZEV2ZW50KEV2ZW50KiBldmVudCkKIHsKICAgICBmb3IgKEV2ZW50KiBlID0gZXZlbnQ7
IGU7IGUgPSBlLT51bmRlcmx5aW5nRXZlbnQoKSkKLSAgICAgICAgaWYgKGUtPmlzS2V5Ym9hcmRF
dmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvS2V5Ym9hcmRFdmVudChlKTsKLSAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGUpKQorICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KGUpOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
S2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAppbmRl
eCA4Njg3YjFmZjg2ZjRiNmEzM2E2ZWE0MDBlMjk0OTI4YzU0ZmMxYzVmLi5hYjk0NTc3MWQ3NTAx
ZmFlNmUxMzA5ZTBlMzM2MDgzZTcxZTY1NmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50
LmgKQEAgLTExOSwxMCArMTE5LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLUVWRU5UX1RZ
UEVfQ0FTVFMoS2V5Ym9hcmRFdmVudCkKLQogS2V5Ym9hcmRFdmVudCogZmluZEtleWJvYXJkRXZl
bnQoRXZlbnQqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VWRU5UKEtleWJvYXJkRXZlbnQpCisKICNlbmRpZiAvLyBLZXlib2FyZEV2ZW50X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRleCBhOWFmZTYwYmM4MTU2YWNjMjhjMjE2ZjY2
MzA4YmU2ZGY1MDg1NjY4Li41OGQzZDYwY2QxNTMzOTJkNmE1NjJiZDdjZGU1ZTE0ZWM1ZjU5YzZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCkBAIC0yNzYsMTAgKzI3NiwxMCBAQCBTaW11
bGF0ZWRNb3VzZUV2ZW50OjpTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUAogICAgIH0KICAgICBzZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJs
eWluZ0V2ZW50KTsKIAotICAgIGlmICh0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSAmJiB0aGlzLT51
bmRlcmx5aW5nRXZlbnQoKS0+aXNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgTW91c2VFdmVudCog
bW91c2VFdmVudCA9IHRvTW91c2VFdmVudCh0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSk7Ci0gICAg
ICAgIG1fc2NyZWVuTG9jYXRpb24gPSBtb3VzZUV2ZW50LT5zY3JlZW5Mb2NhdGlvbigpOwotICAg
ICAgICBpbml0Q29vcmRpbmF0ZXMobW91c2VFdmVudC0+Y2xpZW50TG9jYXRpb24oKSk7CisgICAg
aWYgKHRoaXMtPnVuZGVybHlpbmdFdmVudCgpICYmIGlzPE1vdXNlRXZlbnQ+KHRoaXMtPnVuZGVy
bHlpbmdFdmVudCgpKSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKnRoaXMtPnVuZGVybHlpbmdFdmVudCgpKTsKKyAgICAgICAgbV9zY3Jl
ZW5Mb2NhdGlvbiA9IG1vdXNlRXZlbnQuc2NyZWVuTG9jYXRpb24oKTsKKyAgICAgICAgaW5pdENv
b3JkaW5hdGVzKG1vdXNlRXZlbnQuY2xpZW50TG9jYXRpb24oKSk7CiAgICAgfSBlbHNlIGlmICh0
YXJnZXQpIHsKICAgICAgICAgbV9zY3JlZW5Mb2NhdGlvbiA9IHRhcmdldC0+c2NyZWVuUmVjdCgp
LmNlbnRlcigpOwogICAgICAgICBpbml0Q29vcmRpbmF0ZXMoTGF5b3V0UG9pbnQodGFyZ2V0LT5j
bGllbnRSZWN0KCkuY2VudGVyKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9N
b3VzZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCmluZGV4IDZkYzc2
Yzg2YmQ0MTRkMDI4ZDk2ZWUxZjEwN2RmOTQzYzE2MGY1ZTUuLmFmYzdiZGYwNzhkYmVjMTIzOTkw
ZjJiNWNlMmRlZWY5ZmU2ZjFhNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaApAQCAtMTMyLDgg
KzEzMiw4IEBAIHByaXZhdGU6CiAgICAgU2ltdWxhdGVkTW91c2VFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBQYXNzUmVmUHRyPEV2
ZW50PiB1bmRlcmx5aW5nRXZlbnQsIEVsZW1lbnQqIHRhcmdldCk7CiB9OwogCi1FVkVOVF9UWVBF
X0NBU1RTKE1vdXNlRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FVkVOVChNb3VzZUV2ZW50KQorCiAjZW5kaWYgLy8gTW91c2VFdmVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggZjhjMzNkNjc0NDE0ZTQ0MWQ3ODQ5Y2M1ZjIyNmIyNTlhM2Rl
YjM4Yi4uNTZjNzZjMDgzOTgxYjNhYjJjZjBhOGEyMmNhM2I2MjBiOTJhZTdhZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtMjAzMiw4ICsyMDMyLDggQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFNjb3BlZEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQ
TEFURk9STShJT1MpCi0gICAgaWYgKGV2ZW50LT5pc1RvdWNoRXZlbnQoKSkKLSAgICAgICAgcmV0
dXJuIGRpc3BhdGNoVG91Y2hFdmVudChhZG9wdFJlZih0b1RvdWNoRXZlbnQoZXZlbnQubGVha1Jl
ZigpKSkpOworICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudC5nZXQoKSkpCisgICAgICAgIHJl
dHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRSZWYoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZl
bnQubGVha1JlZigpKSkpOwogI2VuZGlmCiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudCh0aGlzLCBldmVudCk7CiB9CkBAIC0yMTAwLDExICsyMTAwLDEyIEBAIHZvaWQg
Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CiAgICAg
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBpZiAoZXZlbnQtPmlzS2V5
Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKSB7CiAg
ICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRs
ZXIodG9LZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihkb3duY2FzdDxLZXlib2FyZEV2
ZW50PihldmVudCkpOworICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQpIHsKLSAgICAgICAgaW50IGRldGFpbCA9IGV2ZW50LT5pc1VJ
RXZlbnQoKSA/IHRvVUlFdmVudChldmVudCktPmRldGFpbCgpIDogMDsKKyAgICAgICAgaW50IGRl
dGFpbCA9IGlzPFVJRXZlbnQ+KGV2ZW50KSA/IGRvd25jYXN0PFVJRXZlbnQ+KCpldmVudCkuZGV0
YWlsKCkgOiAwOwogICAgICAgICBpZiAoZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50KGRldGFpbCwg
ZXZlbnQpKQogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAjaWYgRU5B
QkxFKENPTlRFWFRfTUVOVVMpCkBAIC0yMTE0LDEyICsyMTE1LDEzIEBAIHZvaWQgTm9kZTo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAgcGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCkuaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCk7CiAjZW5k
aWYKICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZl
bnQpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRleHRFdmVudElu
dGVyZmFjZVR5cGUpCisgICAgICAgIGlmIChpczxUZXh0RXZlbnQ+KGV2ZW50KSkgewogICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAgICAgICAg
ICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcih0
b1RleHRFdmVudChldmVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS5kZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKGRvd25jYXN0PFRleHRFdmVudD4oZXZlbnQp
KTsKKyAgICAgICAgfQogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQotICAgIH0gZWxzZSBpZiAo
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3Vz
ZUV2ZW50KCkpIHsKLSAgICAgICAgaWYgKHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09
IE1pZGRsZUJ1dHRvbikgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYg
KGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uKSB7
CiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTMzLDcgKzIxMzUsNyBAQCB2b2lkIE5vZGU6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndoZWVs
RXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpICYmIGV2
ZW50LT5ldmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlKSB7CisgICAg
fSBlbHNlIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2ZW50Pihl
dmVudCkpIHsKIAogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIHNlbmQg
dGhlIHdoZWVsIGV2ZW50IHRvIHRoZSBmaXJzdCBub2RlIHdlIGZpbmQgd2l0aCBhIHJlbmRlcmVy
LgogICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgPG9wdGlvbj4gYW5kIDxvcHRncm91cD4g
ZWxlbWVudHMgc28gdGhhdCA8c2VsZWN0PnMgZ2V0IGEgd2hlZWwgc2Nyb2xsLgpAQCAtMjE0Mywx
NiArMjE0NSwxNiBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogICAgICAgICAKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVy
KCkpCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQot
ICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0V2hlZWxFdmVudEhh
bmRsZXIoc3RhcnROb2RlLCB0b1doZWVsRXZlbnQoZXZlbnQpKTsKKyAgICAgICAgICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKHN0YXJ0Tm9kZSwg
ZG93bmNhc3Q8V2hlZWxFdmVudD4oZXZlbnQpKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAm
JiBQTEFURk9STShJT1MpCi0gICAgfSBlbHNlIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9
PSBUb3VjaEV2ZW50SW50ZXJmYWNlVHlwZSAmJiBldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlw
ZShldmVudFR5cGUpKSB7CisgICAgfSBlbHNlIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkgJiYg
ZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkgewogICAgICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAgd2hpbGUgKHJl
bmRlcmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94KHJlbmRlcmVyKS0+
Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQogICAgICAgICAgICAgcmVuZGVy
ZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRl
cmVyLT5ub2RlKCkpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgp
LmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRU
b3VjaEV2ZW50SGFuZGxlcihyZW5kZXJlci0+bm9kZSgpLCB0b1RvdWNoRXZlbnQoZXZlbnQpKTsK
KyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFRvdWNoRXZlbnRI
YW5kbGVyKHJlbmRlcmVyLT5ub2RlKCksIGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSk7CiAg
ICAgICAgIH0KICNlbmRpZgogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2
ZW50LmgKaW5kZXggYzU1NmUxNWQ3ODA3ZTg2NmI3N2EzODc4ZDg3MjA2N2VkM2Q5ODY1Ny4uODhk
MDYxZjQxNWQzN2FlYWZmMmUzZDQ0YjRmNjI1N2Q0ZDI3YzlmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1RleHRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZl
bnQuaApAQCAtODcsOCArODcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3Rv
cjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4gbV9kaWN0YXRpb25BbHRlcm5hdGl2ZXM7CiAgICAgfTsK
IAotRVZFTlRfVFlQRV9DQVNUUyhUZXh0RXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChUZXh0RXZlbnQpCisKICNlbmRpZiAvLyBU
ZXh0RXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKaW5kZXggYWRhMGU4Nzc0NzBjZWNkNGQ4
ZGQ5ZGM2ZDZjMmQ4NGYzYjkxNjYwNC4uM2E2ODhiNmRlMTJmNWUwYWZiZTFkMzIwMWU2ZWYzMDMw
MzUwNGNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCkBAIC04NiwxMCArODYsMTAgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX2NoYW5nZWRUb3VjaGVzOwogfTsKIAotRVZF
TlRfVFlQRV9DQVNUUyhUb3VjaEV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoVG91Y2hFdmVudCkKKwogI2VuZGlmIC8vIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAKICNlbmRpZiAvLyBUb3VjaEV2ZW50X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5o
CmluZGV4IGQzMWViYmNkMjY5YmFjNmYwZjBkMDVlNWU5NjRkY2ZkNDM2Y2U3N2MuLmFiYTg3NTky
NzBmYzFlY2U5MWFkYzUzM2IxNGYwOGJlNDQwNzI0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9VSUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaApAQCAt
ODUsOCArODUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2RldGFpbDsKIH07CiAKLUVWRU5UX1RZ
UEVfQ0FTVFMoVUlFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VWRU5UKFVJRXZlbnQpCisKICNlbmRpZiAvLyBVSUV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vV2hlZWxFdmVudC5oCmluZGV4IGRlM2JkZDgyMDcwOTE0ZDZkOTU4YWNjNmZiNTkzZGEyMmE2
YWYyMTcuLjY3MDVkNGE4OGIyN2JmN2I4YjQzOGRjMDA0ZTI2ZDQxZDIxZjQ0MzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuaApAQCAtMTE0LDggKzExNCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2luaXRpYWxpemVkV2l0aFBsYXRmb3JtV2hlZWxFdmVudDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoV2hlZWxFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VWRU5UKFdoZWVsRXZlbnQpCisKICNlbmRpZiAvLyBXaGVlbEV2ZW50X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKaW5kZXggNWM1MzM1ZjY3NTNh
Mjk0YmRmYTg0ZjM1ZDFmZjU4NWE0NDZlMmQ4Ny4uOTE1ZTJhYWNmOTdhNjAyZTU4NzUyNDcxZjA5
ODlmNTZiYTIzZGFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHAKQEAgLTE1Miw3ICsxNTIsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJk
Rm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogCiBzdGF0aWMgdm9pZCBhcHBl
bmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2ZW50
KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VF
dmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdl
dCgpKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3Vz
ZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwgRXZlbnQqIGV2ZW50KQogICAgIFJlbmRlcklt
YWdlJiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoKmltYWdlRWxlbWVudC5yZW5kZXJlcigpKTsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBwYXNzIHRydWUgZm9yIHVzZVRy
YW5zZm9ybXMuCi0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0gcmVuZGVyZXIuYWJz
b2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQodG9Nb3VzZUV2ZW50KGV2ZW50KS0+cGFnZVgoKSwgdG9N
b3VzZUV2ZW50KGV2ZW50KS0+cGFnZVkoKSkpOworICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb3Np
dGlvbiA9IHJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KGRvd25jYXN0PE1vdXNl
RXZlbnQ+KCpldmVudCkucGFnZVgoKSwgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5wYWdl
WSgpKSk7CiAgICAgaW50IHggPSBhYnNvbHV0ZVBvc2l0aW9uLngoKTsKICAgICBpbnQgeSA9IGFi
c29sdXRlUG9zaXRpb24ueSgpOwogICAgIHVybC5hcHBlbmQoJz8nKTsKQEAgLTE5Niw5ICsxOTYs
OSBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKICAgICAgICAgaWYgKGhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICAgICAgLy8g
VGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUgc2VsZWN0aW9u
IHdhcyBpbiAoaWYgaXQgd2FzIGluIG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsgd2FzIGNsaWNr
ZWQKICAgICAgICAgICAgIC8vIGZvciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVkaXRhYmxlIGxp
bmsgYmVoYXZpb3IKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50
KGV2ZW50KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7
CisgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCkuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAg
ICAgICAgICAgICAgICAgc2V0Um9vdEVkaXRhYmxlRWxlbWVudEZvclNlbGVjdGlvbk9uTW91c2VE
b3duKGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgICBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VE
b3duID0gdG9Nb3VzZUV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKTsKKyAgICAgICAgICAgICAgICBt
X3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50
KS5zaGlmdEtleSgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewogICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFy
ZSBjbGVhcmVkIG9uIG1vdXNlb3ZlciBhbmQgbm90IG1vdXNlb3V0IGJlY2F1c2UgdGhlaXIgdmFs
dWVzIGFyZSBuZWVkZWQgZm9yIGRyYWcgZXZlbnRzLAogICAgICAgICAgICAgICAgIC8vIGJ1dCBk
cmFnIGV2ZW50cyBoYXBwZW4gYWZ0ZXIgbW91c2Ugb3V0IGV2ZW50cy4KQEAgLTU1NSw5ICs1NTUs
OSBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpoYW5kbGVDbGljayhFdmVudCogZXZlbnQpCiAK
IEhUTUxBbmNob3JFbGVtZW50OjpFdmVudFR5cGUgSFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlw
ZShFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAg
aWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBOb25Nb3VzZUV2ZW50
OwotICAgIHJldHVybiB0b01vdXNlRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpID8gTW91c2VFdmVu
dFdpdGhTaGlmdEtleSA6IE1vdXNlRXZlbnRXaXRob3V0U2hpZnRLZXk7CisgICAgcmV0dXJuIGRv
d25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuc2hpZnRLZXkoKSA/IE1vdXNlRXZlbnRXaXRoU2hp
ZnRLZXkgOiBNb3VzZUV2ZW50V2l0aG91dFNoaWZ0S2V5OwogfQogCiBib29sIEhUTUxBbmNob3JF
bGVtZW50Ojp0cmVhdExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkg
Y29uc3QKQEAgLTU5MiwxMiArNTkyLDEyIEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OnRyZWF0
TGlua0FzTGl2ZUZvckV2ZW50VHlwZShFdmVudFR5cGUgZXZlbnRUeXBlKSBjb25zdAogCiBib29s
IGlzRW50ZXJLZXlLZXlkb3duRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgZXZlbnQtPmlzS2V5Ym9h
cmRFdmVudCgpICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAi
RW50ZXIiOworICAgIHJldHVybiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3du
RXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PEtleWJvYXJkRXZl
bnQ+KCpldmVudCkua2V5SWRlbnRpZmllcigpID09ICJFbnRlciI7CiB9CiAKIGJvb2wgaXNMaW5r
Q2xpY2soRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50ICYmICghZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IHRvTW91c2VF
dmVudChldmVudCktPmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uKTsKKyAgICByZXR1cm4gZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiAoIWlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpICE9IFJpZ2h0QnV0
dG9uKTsKIH0KIAogYm9vbCBzaG91bGRQcm9oaWJpdExpbmtzKEVsZW1lbnQqIGVsZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCmluZGV4IDkyZTI2YTdhNmZm
MDFkNjVkZjk4YTQxNmNmNDlmODk0ZjEyMTE4MDEuLjQ1MjlmOGIzMzhiOWU5ZjRiNTMxZTM2OGY1
MDg4NTAzMjY4MTkwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRv
bkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQu
Y3BwCkBAIC0xMjMsMjggKzEyMywyOSBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChl
dmVudC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJ
ZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKKyAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZl
bnQpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxL
ZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDIwIikgewogICAgICAgICAgICAgc2V0QWN0aXZlKHRydWUsIHRydWUpOwog
ICAgICAgICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRsZWQoKSAtIElFIGRpc3BhdGNoZXMgYSBr
ZXlwcmVzcyBpbiB0aGlzIGNhc2UuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAodG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y2hhckNvZGUoKSkg
eworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmRFdmVudC5jaGFyQ29kZSgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgICAgICBkaXNw
YXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVk
Q2xpY2soJmtleWJvYXJkRXZlbnQpOworICAgICAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICBjYXNlICcgJzoKICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBzY3Jv
bGxpbmcgZG93biB0aGUgcGFnZS4KLSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVs
dEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1
cEV2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiVSsw
MDIwIikgeworICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleXVwRXZlbnQgJiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIp
IHsKICAgICAgICAgICAgIGlmIChhY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBkaXNwYXRjaFNp
bXVsYXRlZENsaWNrKGV2ZW50KTsKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soJmtleWJvYXJkRXZl
bnQpOworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKaW5kZXggNGQwN2JmY2E4YTQwNDY4NzlhYWNlMTgyYmQz
ZWVlNzVjZmJiNjJhYy4uMzVlYTUyY2JjZWNiYzQ5NGMwZmY3ZTY3ZTRkMzQ1OWNjZDU5ZmQ5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCkBAIC0xODcs
MTUgKzE4NywxNSBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxBdHRhY2hSZW5kZXJl
cnMoKQogICAgICAgICBtX25vcmVzaXplID0gY29udGFpbmluZ0ZyYW1lU2V0LT5ub1Jlc2l6ZSgp
OwogfQogCi12b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2dCkKK3ZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgIW1fbm9yZXNp
emUgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0ZyYW1lU2V0KCkpIHsKLSAgICAgICAg
aWYgKHRvUmVuZGVyRnJhbWVTZXQocmVuZGVyZXIoKSktPnVzZXJSZXNpemUodG9Nb3VzZUV2ZW50
KGV2dCkpKSB7Ci0gICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgaWYg
KGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiAhbV9ub3Jlc2l6ZSAmJiByZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPmlzRnJhbWVTZXQoKSkgeworICAgICAgICBpZiAodG9SZW5kZXJGcmFtZVNldChy
ZW5kZXJlcigpKS0+dXNlclJlc2l6ZShkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkpKSB7Cisg
ICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KLSAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldnQpOworICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0K
IAogYm9vbCBIVE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5n
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDQzOWEwYTFj
ZmI4N2VkZDhlMjdiNTE5N2UxNmUzZTlmZWQ5ZWZjMzQuLmVhZjI2NTRlNTk3YmIwZTQ5MmE4Zjg5
ZjM3MjcxNGNjMWU1NDQzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcApAQCAtMTAzMiw3ICsxMDMyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlz
cGF0Y2hFdmVudChFdmVudCYgZXZlbnQsIElucHV0RWxlbWVudENsaWNrU3RhdGUmIHMKIHsKICAg
ICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBtX2lu
cHV0VHlwZS0+c2hvdWxkU3VibWl0SW1wbGljaXRseSgmZXZlbnQpKQogICAgICAgICBldmVudC5z
dG9wUHJvcGFnYXRpb24oKTsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5j
bGlja0V2ZW50ICYmIGV2ZW50LmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudCgmZXZlbnQp
LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8
TW91c2VFdmVudD4oZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgbV9p
bnB1dFR5cGUtPndpbGxEaXNwYXRjaENsaWNrKHN0YXRlKTsKICAgICAgICAgc3RhdGUuc3RhdGVm
dWwgPSB0cnVlOwogICAgIH0KQEAgLTEwNDUsMjIgKzEwNDUsMjIgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpkaWREaXNwYXRjaENsaWNrRXZlbnQoRXZlbnQmIGV2ZW50LCBjb25zdCBJbnB1dEVs
ZW1lbnRDbGkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldnQpCiB7Ci0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgdG9Nb3VzZUV2ZW50KGV2dCktPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUNsaWNrRXZlbnQo
dG9Nb3VzZUV2ZW50KGV2dCkpOworICAgIGlmIChpczxNb3VzZUV2ZW50PihldnQpICYmIGV2dC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+
KCpldnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhh
bmRsZUNsaWNrRXZlbnQoZG93bmNhc3Q8TW91c2VFdmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChl
dnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoZXZ0LT5pc1RvdWNoRXZlbnQoKSkgewotICAg
ICAgICBtX2lucHV0VHlwZS0+aGFuZGxlVG91Y2hFdmVudCh0b1RvdWNoRXZlbnQoZXZ0KSk7Cisg
ICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2dCkpIHsKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRs
ZVRvdWNoRXZlbnQoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQt
PmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAK
LSAgICBpZiAoZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlkb3du
RXZlbnQodG9LZXlib2FyZEV2ZW50KGV2dCkpOworICAgIGlmIChpczxLZXlib2FyZEV2ZW50Pihl
dnQpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAg
ICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleWRvd25FdmVudChkb3duY2FzdDxLZXlib2FyZEV2ZW50
PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xMDg2LDE2ICsxMDg2LDE3IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogCiAgICAgLy8gVXNlIGtleSBw
cmVzcyBldmVudCBoZXJlIHNpbmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cwogICAg
IC8vIG9uIGtleSBkb3duIGJsb2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVz
cyBldmVudC4KLSAgICBpZiAoZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFu
ZGxlS2V5cHJlc3NFdmVudCh0b0tleWJvYXJkRXZlbnQoZXZ0KSk7Ci0gICAgICAgIGlmIChldnQt
PmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGV2dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eXVwRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleXVwRXZlbnQodG9LZXli
b2FyZEV2ZW50KGV2dCkpOwotICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQotICAg
ICAgICAgICAgcmV0dXJuOworICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldnQpKSB7CisgICAg
ICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50
PigqZXZ0KTsKKyAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5cHJl
c3NFdmVudCgma2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5k
ZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNl
IGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgewor
ICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleXVwRXZlbnQoJmtleWJvYXJkRXZlbnQp
OworICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9pbnB1dFR5
cGUtPnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoZXZ0KSkgewpAQCAtMTExNywxMSArMTExOCwxMSBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChldnQtPmlzQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQoKSkKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KHRvQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50PihldnQpKQorICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoZG93bmNhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2
dCkpOwogCi0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVN
b3VzZURvd25FdmVudCh0b01vdXNlRXZlbnQoZXZ0KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+
KGV2dCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Cisg
ICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVNb3VzZURvd25FdmVudChkb3duY2FzdDxNb3VzZUV2
ZW50PihldnQpKTsKICAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmNwcAppbmRleCAzNjkwZTljN2ZlZWMxMGM0MDkyMjdhYzU5Nzg1YTg2Yjk1M2U1
MDA1Li4zYjg2ODg0OWYzMzQzYzdmNWMzM2FmN2U2Y2FkN2FlYzgxMzJhYWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTc0NywxMSAr
NzQ3LDExIEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogciA9IHJlbmRlcmVyKCk7CiAg
ICAgaWYgKHIgJiYgci0+aXNFbWJlZGRlZE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChpc1BsdWdJ
bkltYWdlRWxlbWVudCgpICYmIGRpc3BsYXlTdGF0ZSgpID09IFdhaXRpbmdGb3JTbmFwc2hvdCAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCkgewotICAgICAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91
c2VFdmVudChldmVudCk7Ci0gICAgICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgPT0g
TGVmdEJ1dHRvbikgewotICAgICAgICAgICAgICAgIHVzZXJEaWRDbGlja1NuYXBzaG90KG1vdXNl
RXZlbnQsIHRydWUpOwotICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gV2FpdGluZ0ZvclNuYXBzaG90ICYmIGlz
PE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50KSB7CisgICAgICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8
TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigp
ID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgICAgICAgICB1c2VyRGlkQ2xpY2tTbmFwc2hvdCgm
bW91c2VFdmVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0
SGFuZGxlZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCBlY2M4
N2UyNzVjYjZiNzU1NWRiZWRhNDdjMmFlNjBlYmNkODhiOTAxLi5mOTY0OGRiOThkMTliYTMwMWU0
NTU2NzE2NTQzZTMwYjk5YjU1Yzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcApAQCAtMTE0NiwxMCArMTE0NiwxMSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIFJlZlB0cjxS
ZW5kZXJUaGVtZT4gcmVuZGVyVGhlbWUgPSBwYWdlID8gJnBhZ2UtPnRoZW1lKCkgOiBSZW5kZXJU
aGVtZTo6ZGVmYXVsdFRoZW1lKCk7CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghZXZlbnQtPmlzS2V5Ym9hcmRFdmVu
dCgpKQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBpZiAocGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQodG9LZXli
b2FyZEV2ZW50KGV2ZW50KSkpCisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQg
PSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAocGxhdGZvcm1I
YW5kbGVLZXlkb3duRXZlbnQoJmtleWJvYXJkRXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIC8vIFdoZW4gdXNpbmcgc3BhdGlhbCBuYXZpZ2F0aW9uLCB3ZSB3YW50IHRvIGJl
IGFibGUgdG8gbmF2aWdhdGUgYXdheQpAQCAtMTE2MCw3ICsxMTYxLDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBTdHJpbmcm
IGtleUlkZW50aWZpZXIgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCk7
CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IGtleWJvYXJkRXZlbnQua2V5
SWRlbnRpZmllcigpOwogICAgICAgICBib29sIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdGhpcy0+bGlzdEl0ZW1zKCk7CiAg
ICAgICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4KCkp
OwpAQCAtMTE5MiwyMiArMTE5MywyMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlz
dERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgc2VsZWN0T3B0
aW9uKGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCksIERlc2VsZWN0T3RoZXJPcHRpb25zIHwg
RGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4pOwogCiAgICAgICAgIGlmIChoYW5kbGVk
KQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBr
ZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQogCiAgICAgLy8gVXNlIGtl
eSBwcmVzcyBldmVudCBoZXJlIHNpbmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cwog
ICAgIC8vIG9uIGtleSBkb3duIGJsb2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBw
cmVzcyBldmVudC4KICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCkgewotICAgICAgICBpZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAg
ICAgaWYgKCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgaW50IGtleUNvZGUgPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlDb2RlKCk7
CisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2Fy
ZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpbnQga2V5Q29kZSA9IGtleWJvYXJkRXZlbnQua2V5
Q29kZSgpOwogICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKIAogICAgICAgICBpZiAoa2V5
Q29kZSA9PSAnICcgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS5mcmFt
ZSgpKSkgewogICAgICAgICAgICAgLy8gVXNlIHNwYWNlIHRvIHRvZ2dsZSBhcnJvdyBrZXkgaGFu
ZGxpbmcgZm9yIHNlbGVjdGlvbiBjaGFuZ2Ugb3Igc3BhdGlhbCBuYXZpZ2F0aW9uLgogICAgICAg
ICAgICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9ICFtX2FjdGl2ZVNlbGVjdGlvblN0YXRlOwot
ICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBrZXli
b2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMTI0NiwxNyArMTI0OCwxNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpt
ZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09ICdccicp
IHsKICAgICAgICAgICAgICAgICBpZiAoZm9ybSgpKQotICAgICAgICAgICAgICAgICAgICBmb3Jt
KCktPnN1Ym1pdEltcGxpY2l0bHkoZXZlbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KCZrZXlib2FyZEV2ZW50LCBmYWxzZSk7CiAgICAgICAg
ICAgICAgICAgZGlzcGF0Y2hDaGFuZ2VFdmVudEZvck1lbnVMaXN0KCk7CiAgICAgICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaGFuZGxlZCkKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KIAotICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVu
dC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4o
KmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGZvY3VzKCk7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNN
ZW51TGlzdCgpKSB7CkBAIC0xMzM2LDM1ICsxMzM4LDM1IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdGhpcy0+bGlzdEl0ZW1zKCk7CiAK
LSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYg
ZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZl
bnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBmb2N1cygpOwog
ICAgICAgICAvLyBDYWxsaW5nIGZvY3VzKCkgbWF5IHJlbW92ZSBvciBjaGFuZ2Ugb3VyIHJlbmRl
cmVyLCBpbiB3aGljaCBjYXNlIHdlIGRvbid0IHdhbnQgdG8gaGFuZGxlIHRoZSBldmVudCBmdXJ0
aGVyLgogICAgICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzTGlzdEJveCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIENvbnZlcnQgdG8gY29vcmRzIHJl
bGF0aXZlIHRvIHRoZSBsaXN0IGJveCBpZiBuZWVkZWQuCi0gICAgICAgIE1vdXNlRXZlbnQqIG1v
dXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgICAgICBJbnRQb2ludCBsb2NhbE9m
ZnNldCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VF
dmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgICAgIE1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgICAg
ICBJbnRQb2ludCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNv
bHV0ZVRvTG9jYWwobW91c2VFdmVudC5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMp
KTsKICAgICAgICAgaW50IGxpc3RJbmRleCA9IHRvUmVuZGVyTGlzdEJveChyZW5kZXJlcigpKS0+
bGlzdEluZGV4QXRPZmZzZXQodG9JbnRTaXplKGxvY2FsT2Zmc2V0KSk7CiAgICAgICAgIGlmIChs
aXN0SW5kZXggPj0gMCkgewogICAgICAgICAgICAgaWYgKCFpc0Rpc2FibGVkRm9ybUNvbnRyb2wo
KSkgewogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVk
U3RhdGUobGlzdEluZGV4LCBtb3VzZUV2ZW50LT5tZXRhS2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0
S2V5KCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUobGlzdEluZGV4LCBt
b3VzZUV2ZW50Lm1ldGFLZXkoKSwgbW91c2VFdmVudC5zaGlmdEtleSgpKTsKICNlbHNlCi0gICAg
ICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZlbnQtPmN0
cmxLZXkoKSwgbW91c2VFdmVudC0+c2hpZnRLZXkoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRl
U2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZlbnQuY3RybEtleSgpLCBtb3VzZUV2ZW50
LnNoaWZ0S2V5KCkpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS5zZXRNb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoKTsKIAotICAgICAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBtb3VzZUV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZl
bnQoKSAmJiAhdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3Jv
bGxhYmxlQXJlYSgpKSB7Ci0gICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNl
RXZlbnQoZXZlbnQpOwotICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1
dHRvbiB8fCAhbW91c2VFdmVudC0+YnV0dG9uRG93bigpKQorICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgJiYgaXM8TW91c2VFdmVudD4o
ZXZlbnQpICYmICF0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Nj
cm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigp
ICE9IExlZnRCdXR0b24gfHwgIW1vdXNlRXZlbnQuYnV0dG9uRG93bigpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0gcm91bmRlZEludFBvaW50
KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9u
KCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3Vu
ZGVkSW50UG9pbnQocmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQuYWJzb2x1
dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CiAgICAgICAgIGludCBsaXN0SW5kZXggPSB0
b1JlbmRlckxpc3RCb3gocmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0KHRvSW50U2l6ZShs
b2NhbE9mZnNldCkpOwogICAgICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKICAgICAgICAgICAg
IGlmICghaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKQEAgLTEzODEsOSArMTM4Myw5IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlvbih0cnVlKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRs
ZWQoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZl
bnQoZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgeworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYm
IGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1
dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsUmVuZGVyZXIoKSAhPSByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2xpY2sgb3IgZHJhZyBldmVudCB3YXMgbm90IG92ZXIgYW55IG9mIHRoZSBvcHRpb25zLgogICAg
ICAgICBpZiAobV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTM5Miw5ICsxMzk0LDExIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxp
c3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gdGltZXIg
c3RvcHMuCiAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAgIGlmICghZXZl
bnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAoIWlzPEtleWJvYXJkRXZlbnQ+KGV2
ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVu
dGlmaWVyID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpOworCisgICAg
ICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50
PigqZXZlbnQpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2Fy
ZEV2ZW50LmtleUlkZW50aWZpZXIoKTsKIAogICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsK
ICAgICAgICAgaW50IGVuZEluZGV4ID0gMDsKQEAgLTE0NTYsMTUgKzE0NjAsMTUgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAgICAgbV9hbGxvd3NOb25Db250aWd1b3Vz
U2VsZWN0aW9uID0gbV9tdWx0aXBsZSAmJiBpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1
bWVudCgpLmZyYW1lKCkpOwogI2Vsc2UKLSAgICAgICAgICAgIG1fYWxsb3dzTm9uQ29udGlndW91
c1NlbGVjdGlvbiA9IG1fbXVsdGlwbGUgJiYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRv
Y3VtZW50KCkuZnJhbWUoKSkgfHwgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+Y3RybEtleSgpKTsK
KyAgICAgICAgICAgIG1fYWxsb3dzTm9uQ29udGlndW91c1NlbGVjdGlvbiA9IG1fbXVsdGlwbGUg
JiYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCkuZnJhbWUoKSkgfHwga2V5
Ym9hcmRFdmVudC5jdHJsS2V5KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBib29sIHNlbGVjdE5l
d0l0ZW0gPSB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpIHx8ICFtX2FsbG93c05v
bkNvbnRpZ3VvdXNTZWxlY3Rpb247CisgICAgICAgICAgICBib29sIHNlbGVjdE5ld0l0ZW0gPSBr
ZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkgfHwgIW1fYWxsb3dzTm9uQ29udGlndW91c1NlbGVjdGlv
bjsKIAogICAgICAgICAgICAgaWYgKHNlbGVjdE5ld0l0ZW0pCiAgICAgICAgICAgICAgICAgbV9h
Y3RpdmVTZWxlY3Rpb25TdGF0ZSA9IHRydWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9y
IGlzIHVuaXRpYWxpemVkLCBvciBpZiB3ZSdyZSBnb2luZyB0byBkZXNlbGVjdCBhbGwKICAgICAg
ICAgICAgIC8vIG90aGVyIG9wdGlvbnMsIHRoZW4gc2V0IHRoZSBhbmNob3IgaW5kZXggZXF1YWwg
dG8gdGhlIGVuZCBpbmRleC4KLSAgICAgICAgICAgIGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhbV9t
dWx0aXBsZSB8fCAoIXRvS2V5Ym9hcmRFdmVudChldmVudCktPnNoaWZ0S2V5KCkgJiYgc2VsZWN0
TmV3SXRlbSk7CisgICAgICAgICAgICBib29sIGRlc2VsZWN0T3RoZXJzID0gIW1fbXVsdGlwbGUg
fHwgKCFrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkgJiYgc2VsZWN0TmV3SXRlbSk7CiAgICAgICAg
ICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgfHwgZGVzZWxlY3RPdGhl
cnMpIHsKICAgICAgICAgICAgICAgICBpZiAoZGVzZWxlY3RPdGhlcnMpCiAgICAgICAgICAgICAg
ICAgICAgIGRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbigpOwpAQCAtMTQ3OCwxNyArMTQ4
MiwxOCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzY3Jv
bGxUb1NlbGVjdGlvbigpOwogCi0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCkgewotICAgICAgICBpZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAg
ICAgaWYgKCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGludCBrZXlDb2RlID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5Q29kZSgpOwor
ICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRF
dmVudD4oKmV2ZW50KTsKKyAgICAgICAgaW50IGtleUNvZGUgPSBrZXlib2FyZEV2ZW50LmtleUNv
ZGUoKTsKIAogICAgICAgICBpZiAoa2V5Q29kZSA9PSAnXHInKSB7CiAgICAgICAgICAgICBpZiAo
Zm9ybSgpKQotICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseShldmVudCwg
ZmFsc2UpOwotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAg
ICAgICAgICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KCZrZXlib2FyZEV2ZW50LCBmYWxzZSk7
CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
IH0gZWxzZSBpZiAobV9tdWx0aXBsZSAmJiBrZXlDb2RlID09ICcgJyAmJiBtX2FsbG93c05vbkNv
bnRpZ3VvdXNTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIFVzZSBzcGFjZSB0byB0b2dnbGUg
c2VsZWN0aW9uIGNoYW5nZS4KICAgICAgICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSAh
bV9hY3RpdmVTZWxlY3Rpb25TdGF0ZTsKQEAgLTE0OTcsNyArMTUwMiw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICAgICAgICAgIEFTU0VSVChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtc1ttX2FjdGl2
ZVNlbGVjdGlvbkVuZEluZGV4XSkpOwogICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZSht
X2FjdGl2ZVNlbGVjdGlvbkVuZEluZGV4LCB0cnVlIC8qbXVsdGkqLywgZmFsc2UgLypzaGlmdCov
KTsKICAgICAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwotICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRI
YW5kbGVkKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTIzLDkgKzE1MjgsOSBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkgewotICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50
ID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LT5j
dHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5t
ZXRhS2V5KCkgJiYgdV9pc3ByaW50KGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCkpKSB7CisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgaXM8S2V5
Ym9hcmRFdmVudD4oZXZlbnQpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZl
bnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAoIWtleWJv
YXJkRXZlbnQuY3RybEtleSgpICYmICFrZXlib2FyZEV2ZW50LmFsdEtleSgpICYmICFrZXlib2Fy
ZEV2ZW50Lm1ldGFLZXkoKSAmJiB1X2lzcHJpbnQoa2V5Ym9hcmRFdmVudC5jaGFyQ29kZSgpKSkg
ewogICAgICAgICAgICAgdHlwZUFoZWFkRmluZChrZXlib2FyZEV2ZW50KTsKICAgICAgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU2
NSw5ICsxNTcwLDkgQEAgU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25BdEluZGV4KGlu
dCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiB9CiAKLXZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2b2lk
IEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQmIGV2ZW50KQog
ewotICAgIGludCBpbmRleCA9IG1fdHlwZUFoZWFkLmhhbmRsZUV2ZW50KGV2ZW50LCBUeXBlQWhl
YWQ6Ok1hdGNoUHJlZml4IHwgVHlwZUFoZWFkOjpDeWNsZUZpcnN0Q2hhcik7CisgICAgaW50IGlu
ZGV4ID0gbV90eXBlQWhlYWQuaGFuZGxlRXZlbnQoJmV2ZW50LCBUeXBlQWhlYWQ6Ok1hdGNoUHJl
Zml4IHwgVHlwZUFoZWFkOjpDeWNsZUZpcnN0Q2hhcik7CiAgICAgaWYgKGluZGV4IDwgMCkKICAg
ICAgICAgcmV0dXJuOwogICAgIHNlbGVjdE9wdGlvbihsaXN0VG9PcHRpb25JbmRleChpbmRleCks
IERlc2VsZWN0T3RoZXJPcHRpb25zIHwgRGlzcGF0Y2hDaGFuZ2VFdmVudCB8IFVzZXJEcml2ZW4p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCmluZGV4IDI3ZmVmZDYwYjRm
Y2RiYWMxMzkxZWQ2ZTg5YzlhOGFmZjUzNjk2NjQuLmRhN2YxNWE4OWEwNWNkNzI4YzMyYTY1NTky
YTA1ZGU0YTJjYzBiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgK
QEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjYWxjTGlzdEl0ZW1zKGJv
b2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMgPSB0cnVlKSBjb25zdDsKIAogICAgIHZvaWQgZGVzZWxl
Y3RJdGVtcyhIVE1MT3B0aW9uRWxlbWVudCogZXhjbHVkZUVsZW1lbnQgPSAwKTsKLSAgICB2b2lk
IHR5cGVBaGVhZEZpbmQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgdHlwZUFoZWFkRmluZChL
ZXlib2FyZEV2ZW50Jik7CiAgICAgdm9pZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAgdmly
dHVhbCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1t
YXJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5j
cHAKaW5kZXggZWM2YzNhMjBmZjk5YmEyYzk0MTQ5MzNlYmQ2YThhOTA4YzNhNjg0Mi4uMTEyZDJm
ZDM2MjRjMTlkMjg4NDY2NzRkN2M4ODU1NTUzMTk2MDFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcApAQCAtMTI2LDI4ICsxMjYsMjkgQEAgdm9pZCBIVE1M
U3VtbWFyeUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGV2ZW50LT5pc0tleWJvYXJk
RXZlbnQoKSkgewotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkg
PT0gIlUrMDAyMCIpIHsKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgewor
ICAgICAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJv
YXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDIwIikgewogICAgICAgICAgICAgICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVl
KTsKICAgICAgICAgICAgICAgICAvLyBObyBzZXREZWZhdWx0SGFuZGxlZCgpIC0gSUUgZGlzcGF0
Y2hlcyBhIGtleXByZXNzIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAodG9LZXlib2FyZEV2
ZW50KGV2ZW50KS0+Y2hhckNvZGUoKSkgeworICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChrZXlib2FyZEV2ZW50LmNoYXJDb2RlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNl
ICdccic6CiAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQp
OwotICAgICAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2FzZSAnICc6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nIGRvd24gdGhlIHBhZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAg
ICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCAmJiB0b0tleWJv
YXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKKyAgICAgICAg
ICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCAm
JiBrZXlib2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgewogICAgICAgICAg
ICAgICAgIGlmIChhY3RpdmUoKSkKICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hTaW11bGF0
ZWRDbGljayhldmVudCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggMmE0YzVjNWFjZjFh
YjNjOTZkNGRjNTM0OWM3YzI5MDUyMjdlNmJjNS4uMzVmYWUxMmM2NDY2MjU2ZjU4OWY2YjMwOTAz
MzIyYmY1ZGI1ZDJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwCkBAIC0yNzAsOCArMjcwLDggQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiAo
ZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5l
dmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VUeXBlIHx8IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIGZvcndhcmRFdmVudChldmVu
dCk7Ci0gICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCgpKQotICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCh0b0JlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50KGV2ZW50KSk7CisgICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBp
czxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZlbnQpKQorICAgICAgICBoYW5kbGVCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudChkb3duY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZlbnQp
KTsKIAogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCmluZGV4IDFlYmVj
NzdjMTFjMTAwM2E1NTkzM2QwMWRhNzc0MzVmZDZmMjAxZDQuLmNjOWJkYzk5MGE2ODU2ZjBhOGQ2
M2I5MWRlYmY1OTE1YWMxZTBmYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNw
cApAQCAtMzk4LDggKzM5OCw4IEBAIHZvaWQgSW1hZ2VFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCkKICAgICAgICAgbV9kb2N1bWVu
dC53aW5kb3dTaXplQ2hhbmdlZCgpOwotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAg
IE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoKmV2ZW50KTsKKyAgICBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGlzPE1vdXNl
RXZlbnQ+KGV2ZW50KSkgeworICAgICAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNh
c3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKICAgICAgICAgbV9kb2N1bWVudC5pbWFnZUNsaWNrZWQo
bW91c2VFdmVudC54KCksIG1vdXNlRXZlbnQueSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCmluZGV4IGQwZTI1YmUxOTA3ZTNjOTJlYWZlMzY4MzZkODgx
ZDYyYmY4Y2I1MDguLjI4OWE5ZWQyNWVhY2M0MmFkZmE5MGRkMDg4ZGY3OWU4MzQ4YjdjNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCkBAIC04OSw4ICs4OSw4IEBAIHZv
aWQgSW1hZ2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQoRXZlbnQqIGV2ZW50KQog
ICAgIG1fY2xpY2tMb2NhdGlvbiA9IEludFBvaW50KCk7CiAgICAgaWYgKGV2ZW50LT51bmRlcmx5
aW5nRXZlbnQoKSkgewogICAgICAgICBFdmVudCYgdW5kZXJseWluZ0V2ZW50ID0gKmV2ZW50LT51
bmRlcmx5aW5nRXZlbnQoKTsKLSAgICAgICAgaWYgKHVuZGVybHlpbmdFdmVudC5pc01vdXNlRXZl
bnQoKSkgewotICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IHRvTW91c2VFdmVu
dCh1bmRlcmx5aW5nRXZlbnQpOworICAgICAgICBpZiAoaXM8TW91c2VFdmVudD4odW5kZXJseWlu
Z0V2ZW50KSkgeworICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0
PE1vdXNlRXZlbnQ+KHVuZGVybHlpbmdFdmVudCk7CiAgICAgICAgICAgICBpZiAoIW1vdXNlRXZl
bnQuaXNTaW11bGF0ZWQoKSkKICAgICAgICAgICAgICAgICBtX2NsaWNrTG9jYXRpb24gPSBJbnRQ
b2ludChtb3VzZUV2ZW50Lm9mZnNldFgoKSwgbW91c2VFdmVudC5vZmZzZXRZKCkpOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKaW5kZXggMTU3MDI2ZDg5ZDJhNDA4YThiMTUy
ZDUxNWQ4NWFiMDJkNjVkNThjOS4uM2IyMjdhYjAwYzQ5ODQ2MTZiYjA4ZjEyNTgyMjMzYzE4NmI3
NDQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcApAQCAtNDcxLDcgKzQ3MSw3IEBAIHZv
aWQgSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqKQogCiBib29sIElucHV0VHlwZTo6c2hv
dWxkU3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVz
c0V2ZW50ICYmIHRvS2V5Ym9hcmRFdmVudChldmVudCktPmNoYXJDb2RlKCkgPT0gJ1xyJzsKKyAg
ICByZXR1cm4gaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleXByZXNzRXZlbnQgJiYgZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50
KS5jaGFyQ29kZSgpID09ICdccic7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBJ
bnB1dFR5cGU6OmZvcm1Gb3JTdWJtaXNzaW9uKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlh
RG9jdW1lbnQuY3BwCmluZGV4IDlmMDdmYTNkZGViOWUwOWQ0MWQ3YzJlNjNmMzMxMjdlODEyZmY2
ZjQuLjdkYTliYjg0NTBhZWFlNDJmY2Q1M2NlMTI4YmIxMGM2NjA4ZDc0NTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcApAQCAtMjA0LDE5ICsyMDQsMTkgQEAgdm9pZCBNZWRp
YURvY3VtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoIWlz
PENvbnRhaW5lck5vZGU+KHRhcmdldE5vZGUpKQogICAgICAgICByZXR1cm47CiAgICAgQ29udGFp
bmVyTm9kZSYgdGFyZ2V0Q29udGFpbmVyID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKnRhcmdl
dE5vZGUpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZl
bnQgJiYgZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBpczxLZXlib2FyZEV2ZW50PihldmVudCkp
IHsKICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8gPSBkZXNjZW5kZW50VmlkZW9FbGVt
ZW50KHRhcmdldENvbnRhaW5lcik7CiAgICAgICAgIGlmICghdmlkZW8pCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHRvS2V5Ym9h
cmRFdmVudChldmVudCk7Ci0gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LT5rZXlJZGVudGlmaWVy
KCkgPT0gIlUrMDAyMCIpIHsgLy8gc3BhY2UKKyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9h
cmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVudCk7CisgICAgICAgIGlmIChr
ZXlib2FyZEV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDIwIikgeyAvLyBzcGFjZQogICAg
ICAgICAgICAgaWYgKHZpZGVvLT5wYXVzZWQoKSkgewogICAgICAgICAgICAgICAgIGlmICh2aWRl
by0+Y2FuUGxheSgpKQogICAgICAgICAgICAgICAgICAgICB2aWRlby0+cGxheSgpOwogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgdmlkZW8tPnBhdXNlKCk7Ci0gICAgICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQu
c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCBlMTUwMTQ5YmMxNDA5YjFhNzE1NTI1
YjE3MWVlM2IwYWE2NmRiYTQzLi43YTlmZTE0MTZiMjMxNDliYTE3NjAwOGQ2MWJkMmIyNmY3NjU3
YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC0y
MDYsNyArMjA2LDggQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJsdXJFdmVudCgp
CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50
KiBldmVudCkKIHsKLSAgICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRl
eHRJbnB1dEV2ZW50ICYmIGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFRleHRFdmVudEludGVy
ZmFjZVR5cGUgJiYgdG9UZXh0RXZlbnQoZXZlbnQpLT5kYXRhKCkgPT0gIlxuIikgfHwgSW5wdXRU
eXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KTsKKyAgICByZXR1cm4gKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYmIGlzPFRleHRFdmVudD4oZXZl
bnQpICYmIGRvd25jYXN0PFRleHRFdmVudD4oKmV2ZW50KS5kYXRhKCkgPT0gIlxuIikKKyAgICAg
ICAgfHwgSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KTsKIH0KIAogUmVu
ZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFRleHRGaWVsZElucHV0VHlwZTo6Y3JlYXRlSW5wdXRSZW5k
ZXJlcihQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCmluZGV4IDllODNl
NjJmOTY3YmYxNmIwOWI0YTEyNjJmNjhiYjhlOTFlOTM5N2EuLjI2Mzg2M2JlNzA2MGNkOTVhZWQ1
OTc4ZDllM2VjMDRlMzIwODgwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcApAQCAtMTk2LDcgKzE5Niw3IEBA
IE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVsZW1lbnQ6Ok1lZGlhQ29udHJvbFZvbHVtZVNsaWRl
ckVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtCiB2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIC8vIExlZnQg
YnV0dG9uIGlzIDAuIFJlamVjdHMgbW91c2UgZXZlbnRzIG5vdCBmcm9tIGxlZnQgYnV0dG9uLgot
ICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+YnV0
dG9uKCkpCisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpLmJ1dHRvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXJlbmRl
cmVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKaW5kZXggZDVhNDU2YmE5ODMyY2Y5YWQ5OWRlMzljMGMwYWQ0NzBiNDgwMjc5
Ny4uMzJmM2E1MzM0ZGNjZDM2Zjk4ODJjOWU4MTZhYjY5MTI4ZWE4MWVkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAt
MjIxLDggKzIyMSw4IEBAIHZvaWQgTWVkaWFDb250cm9sUGFuZWxFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICBNZWRpYUNvbnRyb2xEaXZFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIAotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50
KCkpIHsKLSAgICAgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSB0b01vdXNlRXZlbnQoZXZlbnQp
LT5hYnNvbHV0ZUxvY2F0aW9uKCk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkgewor
ICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVu
dCkuYWJzb2x1dGVMb2NhdGlvbigpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPnRhcmdldCgpID09IHRoaXMpIHsKICAg
ICAgICAgICAgIHN0YXJ0RHJhZyhsb2NhdGlvbik7CiAgICAgICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKQEAgLTMzNywxMiArMzM3LDEyIEBAIFJlbmRlclB0cjxSZW5kZXJFbGVt
ZW50PiBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJDb250YWluZXJFbGVtZW50OjpjcmVhdGVFbGVt
ZW50CiAKIHZvaWQgTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3Vz
ZUV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkK
KyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC0+dHlwZSgpICE9IGV2ZW50
TmFtZXMoKS5tb3VzZW91dEV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQb29yIG1h
bidzIG1vdXNlbGVhdmUgZXZlbnQgZGV0ZWN0aW9uLgotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZl
bnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0
ID0gbW91c2VFdmVudC0+cmVsYXRlZFRhcmdldCgpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZl
bnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgIEV2ZW50VGFyZ2V0KiByZWxh
dGVkVGFyZ2V0ID0gbW91c2VFdmVudC5yZWxhdGVkVGFyZ2V0KCk7CiAgICAgaWYgKCFyZWxhdGVk
VGFyZ2V0IHx8ICFyZWxhdGVkVGFyZ2V0LT50b05vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC04NTEsNyArODUxLDcgQEAgUGFzc1JlZlB0cjxNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ+
IE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6Y3JlYXRlKERvY3UKIHZvaWQgTWVkaWFDb250
cm9sVGltZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
ICAgICAvLyBMZWZ0IGJ1dHRvbiBpcyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBs
ZWZ0IGJ1dHRvbi4KLSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVu
dChldmVudCktPmJ1dHRvbigpKQorICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93
bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFyZW5kZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzLmNwcAppbmRleCBmYTFiZWJmNDM2MDMzMDAyOGYwZDVhMDI2NTc0MjUzNzc2ZDhiYjFl
Li40ZDNlY2Y4MGQyOTJmYTI1NTM3NWJkZjRhNmFmM2Q0OWU0MzBiNjNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApAQCAtMzY2LDkgKzM2Niw5IEBA
IHZvaWQgTWVkaWFDb250cm9sczo6c3RvcEhpZGVGdWxsc2NyZWVuQ29udHJvbHNUaW1lcigpCiAK
IGJvb2wgTWVkaWFDb250cm9sczo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KEV2ZW50KiBldmVudCkK
IHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZl
bnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEV2ZW50VGFyZ2V0KiByZWxh
dGVkVGFyZ2V0ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KS0+cmVsYXRlZFRhcmdldCgpOworICAgIEV2
ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5y
ZWxhdGVkVGFyZ2V0KCk7CiAgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIGNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQtPnRvTm9kZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCmlu
ZGV4IDExOTZhNzE4NzY2MGI3ZTM1MDI3ZDQ1NjUzYzM5MzkwMDYzZWZjM2UuLjhjODRkYTczYmY2
NjAwZjQ1YzE0MmI2MzM0ZWFhNjM0YzQzZDhlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcApAQCAtNTg4LDEwICs1ODgsMTAgQEAg
dm9pZCBNZWRpYUNvbnRyb2xzQXBwbGVFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRXZlbnQKIHsKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkKICAgICAgICAgbV9tZWRpYUNvbnRyb2xzLT5oYW5kbGVDbGlj
a0V2ZW50KGV2ZW50KTsKLSAgICBlbHNlIGlmICgoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVs
RXZlbnQpICYmIGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFdoZWVsRXZlbnRJbnRlcmZhY2VU
eXBlKSB7Ci0gICAgICAgIFdoZWVsRXZlbnQqIHdoZWVsRXZlbnQgPSB0b1doZWVsRXZlbnQoZXZl
bnQpOwotICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xzLT5zaG91bGRDbG9zZWRDYXB0aW9uc0Nv
bnRhaW5lclByZXZlbnRQYWdlU2Nyb2xsaW5nKHdoZWVsRXZlbnQtPndoZWVsRGVsdGFZKCkpKQot
ICAgICAgICAgICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CisgICAgZWxzZSBpZiAoKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBpczxXaGVlbEV2ZW50PihldmVudCkpIHsK
KyAgICAgICAgV2hlZWxFdmVudCYgd2hlZWxFdmVudCA9IGRvd25jYXN0PFdoZWVsRXZlbnQ+KCpl
dmVudCk7CisgICAgICAgIGlmIChtX21lZGlhQ29udHJvbHMtPnNob3VsZENsb3NlZENhcHRpb25z
Q29udGFpbmVyUHJldmVudFBhZ2VTY3JvbGxpbmcod2hlZWxFdmVudC53aGVlbERlbHRhWSgpKSkK
KyAgICAgICAgICAgIHdoZWVsRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCmlu
ZGV4IDgxYzIwNjgwZDkyNWNhODIwMjg1YjJmZjU2M2RmMmE1MWIyYWMwY2IuLjIyYmU2M2I0NzVl
MDk1MTI3NTY3OGI4NDhmYmFiNWQzMjg2NDlkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcApAQCAtMzMzLDcgKzMzMyw3IEBAIHZv
aWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzdG9wRHJhZ2dpbmcoKQogI2lmICFQTEFURk9STShJT1Mp
CiB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpIHsKKyAgICBpZiAoIWlzPE1v
dXNlRXZlbnQ+KGV2ZW50KSkgewogICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihldmVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDcsOSArMzQ3LDkg
QEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVu
dCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgYm9vbCBpc0xlZnRCdXR0b24gPSBtb3VzZUV2
ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93
bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICBib29sIGlzTGVmdEJ1dHRvbiA9IG1vdXNl
RXZlbnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbjsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSA9IG1vdXNlRXZlbnQudHlwZSgpOwogCiAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBk
byBub3QgY2FsbCBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKSBoZXJlIGJlY2F1c2UKICAgICAv
LyBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoKSB3YW50
cyB0byBoYW5kbGUgdGhlc2UKQEAgLTM2MiwxMSArMzYyLDExIEBAIHZvaWQgU2xpZGVyVGh1bWJF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVu
dCkgewogICAgICAgICBpZiAobV9pbkRyYWdNb2RlKQotICAgICAgICAgICAgc2V0UG9zaXRpb25G
cm9tUG9pbnQobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHNl
dFBvc2l0aW9uRnJvbVBvaW50KG1vdXNlRXZlbnQuYWJzb2x1dGVMb2NhdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKKyAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcigmbW91
c2VFdmVudCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
U3BpbkJ1dHRvbkVsZW1lbnQuY3BwCmluZGV4IDUwM2IzNWI2YmY1YTc4MTVkZDcxZTdhOWM2MTk4
YWRjODcyMDA2ZTUuLjM4YTQwYTQzZGQ2ODU1ODE2MDI4ZDFjZGJlOGFkZjRjOTZiMmI0NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAK
QEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbERldGFjaFJlbmRl
cmVycygpCiAKIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgaWYg
KCFpczxNb3VzZUV2ZW50PihldmVudCkpIHsKICAgICAgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhh
bmRsZWQoKSkKICAgICAgICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwpAQCAtODYsOSArODYsOSBAQCB2b2lkIFNwaW5CdXR0
b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQo
ZXZlbnQpOwotICAgIEludFBvaW50IGxvY2FsID0gcm91bmRlZEludFBvaW50KGJveC0+YWJzb2x1
dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3Jtcykp
OwotICAgIGlmIChtb3VzZUV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBNb3VzZUV2
ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICBJbnRQ
b2ludCBsb2NhbCA9IHJvdW5kZWRJbnRQb2ludChib3gtPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2
ZW50LmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOworICAgIGlmIChtb3VzZUV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgbW91c2VFdmVudC5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChib3gtPnBpeGVsU25hcHBlZEJv
cmRlckJveFJlY3QoKS5jb250YWlucyhsb2NhbCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgZnVuY3Rpb25zIG9mIEhUTUxJbnB1dEVsZW1lbnQgbWF5IHJ1biBKYXZhU2NyaXB0CiAg
ICAgICAgICAgICAvLyBjb2RlIHdoaWNoIGRldGFjaGVzIHRoaXMgc2hhZG93IG5vZGUuIFdlIG5l
ZWQgdG8gdGFrZSBhIHJlZmVyZW5jZQpAQCAtMTA3LDExICsxMDcsMTEgQEAgdm9pZCBTcGluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAg
ICAgICAgICAgIGRvU3RlcEFjdGlvbihtX3VwRG93blN0YXRlID09IFVwID8gMSA6IC0xKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgbW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikKKyAgICB9IGVsc2UgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQgJiYgbW91c2VFdmVudC5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKQogICAgICAgICBz
dG9wUmVwZWF0aW5nVGltZXIoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgeworICAgIGVsc2UgaWYgKG1vdXNlRXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgewogICAgICAgICBpZiAoYm94LT5waXhl
bFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgICAgICBp
ZiAoIW1fY2FwdHVyaW5nKSB7CiAgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCkuZnJhbWUoKSkgewpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgU3BpbkJ1dHRvbkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgIGlmICghbW91c2VFdmVudC5k
ZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcigmbW91c2VFdmVudCk7CiB9CiAKIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OndpbGxPcGVu
UG9wdXAoKQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmZvcndh
cmRFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKCFyZW5kZXJCb3goKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpICE9IFdoZWVsRXZlbnRJbnRl
cmZhY2VUeXBlKQorICAgIGlmICghaXM8V2hlZWxFdmVudD4oZXZlbnQpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIW1fc3BpbkJ1dHRvbk93bmVyKQpAQCAtMTU1LDcgKzE1NSw3IEBAIHZv
aWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYg
KCFtX3NwaW5CdXR0b25Pd25lci0+c2hvdWxkU3BpbkJ1dHRvblJlc3BvbmRUb1doZWVsRXZlbnRz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvU3RlcEFjdGlvbih0b1doZWVsRXZlbnQoZXZl
bnQpLT53aGVlbERlbHRhWSgpKTsKKyAgICBkb1N0ZXBBY3Rpb24oZG93bmNhc3Q8V2hlZWxFdmVu
dD4oKmV2ZW50KS53aGVlbERlbHRhWSgpKTsKICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMTkyZjhlMDA2M2ZhNWEwOGU4ZjQ4MjFmZGVkZTAz
ZmZlMjBhZDAxYy4uN2IyOTUzZDg3OGI5MGFkMzIxZmE1ZGQyYjJmMWIwNzRlYjZiZGY0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAv
LyBPbiBtb3VzZWRvd24sIGJyaW5nIHVwIGEgbWVudSwgaWYgbmVlZGVkCiAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFkb3dIb3N0KCkp
OwotICAgIGlmIChpbnB1dCAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChpbnB1dCAmJiBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBpczxNb3VzZUV2ZW50PihldmVudCkg
JiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7
CiAgICAgICAgIGlucHV0LT5mb2N1cygpOwogICAgICAgICBpbnB1dC0+c2VsZWN0KCk7CiAjaWYg
IVBMQVRGT1JNKElPUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChl
dmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYm
IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewog
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5n
KCkpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkp
IHsKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVyaW5nTW91
c2VFdmVudHNFbGVtZW50KHRoaXMpOwpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgU2VhcmNoRmll
bGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
ICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKICAgICB9Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2ZW50KGV2ZW50KS0+
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBp
ZiAobV9jYXB0dXJpbmcpIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dCgpLmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0
Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCA4NTY5MDk2OGRl
YzRhYjA4YzliODg0YTkzOGMxYTQ2OTFkMThlZGE5Li4wMzNhYWM4M2UwNzM5OWNiMmY5MDA2MjUy
M2U2YzA0NTc2YzlmYjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtMjg0LDEyICsyODQsMTIgQEAgdm9pZCBJbnNwZWN0
b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZlY3Rv
cjxDb250ZXh0TWUKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkaXNwYXRjaEV2ZW50QXND
b250ZXh0TWVudUV2ZW50KEV2ZW50KiBldmVudCkKIHsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5V
UykgJiYgVVNFKEFDQ0VTU0lCSUxJVFlfQ09OVEVYVF9NRU5VUykKLSAgICBpZiAoIWV2ZW50IHx8
ICFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFldmVudCB8fCAhaXM8TW91c2VFdmVu
dD4oZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSogZnJhbWUgPSBldmVudC0+
dGFyZ2V0KCktPnRvTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgTW91c2VFdmVudCog
bW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVudCk7Ci0gICAgSW50UG9pbnQgbW91c2VQb2lu
dCA9IEludFBvaW50KG1vdXNlRXZlbnQtPmNsaWVudFgoKSwgbW91c2VFdmVudC0+Y2xpZW50WSgp
KTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2
ZW50KTsKKyAgICBJbnRQb2ludCBtb3VzZVBvaW50ID0gSW50UG9pbnQobW91c2VFdmVudC5jbGll
bnRYKCksIG1vdXNlRXZlbnQuY2xpZW50WSgpKTsKIAogICAgIG1fZnJvbnRlbmRQYWdlLT5jb250
ZXh0TWVudUNvbnRyb2xsZXIoKS5zaG93Q29udGV4dE1lbnVBdChmcmFtZSwgbW91c2VQb2ludCk7
CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGEzZjU5MDdlNGQ0N2YyMDRhYWIzOTRiOGMwMjNiOGU1ZGQzMTI5Y2EuLjc2ZTg4MWNl
MjhlYmU3ZWM3MmQ3YzIyMGUyZDAxNGQ3NzE4ZjU4ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTE1MCwxMCArMTUwLDEwIEBAIHN0ZDo6
dW5pcXVlX3B0cjxDb250ZXh0TWVudT4gQ29udGV4dE1lbnVDb250cm9sbGVyOjptYXliZUNyZWF0
ZUNvbnRleHRNZW51KEV2ZW50CiB7CiAgICAgQVNTRVJUKGV2ZW50KTsKICAgICAKLSAgICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0g
dG9Nb3VzZUV2ZW50KCpldmVudCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQobW91c2VF
dmVudC5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogCiAgICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJn
ZXQoKS0+dG9Ob2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzNh
OWE1Mzg5YmNjOWY0MzgxNzU2N2YzMzdhYjhhZDY4MGEzMmQyNy4uMzhjZmE3MjllYmEzZTVjYWY1
MmI4NWYwNGRlZWNlZmM3ODdlOTViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cApAQCAtMzUyMyw3ICszNTIzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1
dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmUKIHsKICAgICAv
LyBQbGF0Zm9ybXMgc2hvdWxkIGRpZmZlcmVudGlhdGUgcmVhbCBjb21tYW5kcyBsaWtlIHNlbGVj
dEFsbCBmcm9tIHRleHQgaW5wdXQgaW4gZGlzZ3Vpc2UgKGxpa2UgaW5zZXJ0TmV3bGluZSksCiAg
ICAgLy8gYW5kIGF2b2lkIGRpc3BhdGNoaW5nIHRleHQgaW5wdXQgZXZlbnRzIGZyb20ga2V5ZG93
biBkZWZhdWx0IGhhbmRsZXJzLgotICAgIEFTU0VSVCghdW5kZXJseWluZ0V2ZW50IHx8ICF1bmRl
cmx5aW5nRXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpIHx8IHRvS2V5Ym9hcmRFdmVudCh1bmRlcmx5
aW5nRXZlbnQpLT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOworICAgIEFT
U0VSVCghdW5kZXJseWluZ0V2ZW50IHx8ICFpczxLZXlib2FyZEV2ZW50Pih1bmRlcmx5aW5nRXZl
bnQpIHx8IGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCp1bmRlcmx5aW5nRXZlbnQpLnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CiAKICAgICBFdmVudFRhcmdldCogdGFyZ2V0
OwogICAgIGlmICh1bmRlcmx5aW5nRXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAppbmRleCAxNDkwNjBhYWE1NmI5MzRlMWM5OWZh
YzBjMDcwMjRlODdjZjhiMWI1Li5iNDY0Y2M3MzMwNGMxNjhjMzU5ODExNDNiYjJlOGRhNGNiNmY5
NjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKQEAgLTU5MCw5ICs1OTAsOSBAQCBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpp
c0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgRmxvYXRQb2ludCYgcG9pbgogICAg
ICAgICAmJiBpbmRpY2F0b3JSZWN0LmNvbnRhaW5zKHBvaW50KTsKIH0KIAotYm9vbCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6aXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZlbnQq
IGV2ZW50KSBjb25zdAorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJblVuYXZhaWxhYmxl
UGx1Z2luSW5kaWNhdG9yKGNvbnN0IE1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIHJl
dHVybiBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoYWJzb2x1dGVUb0xvY2FsKGV2ZW50
LT5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICByZXR1cm4gaXNJblVu
YXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGFic29sdXRlVG9Mb2NhbChldmVudC5hYnNvbHV0ZUxv
Y2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKIH0KIAogdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVj
dDo6aGFuZGxlVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCkBA
IC02MDAsMjEgKzYwMCwyMSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpoYW5kbGVVbmF2
YWlsYWJsZVBsdWdpbkluZGljYXRvckV2ZW50KEV2ZW50KiBldmVudCkKICAgICBpZiAoIXNob3Vs
ZFVuYXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKGRvY3VtZW50KCksIG1fcGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWV2ZW50LT5p
c01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNlRXZlbnQ+KGV2ZW50KSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHRvTW91c2VFdmVudChldmVu
dCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCk7CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1
Z0luRWxlbWVudD4oZnJhbWVPd25lckVsZW1lbnQoKSk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewogICAgICAgICBtX21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0
b3IgPSBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IobW91c2VFdmVudCk7CiAgICAgICAg
IGlmIChtX21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpIHsKICAgICAg
ICAgICAgIGZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc2V0Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVt
ZW50KCZlbGVtZW50KTsKICAgICAgICAgICAgIGVsZW1lbnQuc2V0SXNDYXB0dXJpbmdNb3VzZUV2
ZW50cyh0cnVlKTsKICAgICAgICAgICAgIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQ
cmVzc2VkKHRydWUpOwogICAgICAgICB9Ci0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQotICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChtb3VzZUV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpZiAobV91bmF2YWlsYWJsZVBsdWdpbklu
ZGljYXRvcklzUHJlc3NlZCkgewogICAgICAgICAgICAgZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5z
ZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQobnVsbHB0cik7CiAgICAgICAgICAgICBlbGVt
ZW50LnNldElzQ2FwdHVyaW5nTW91c2VFdmVudHMoZmFsc2UpOwpAQCAtNjI3LDkgKzYyNyw5IEBA
IHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNh
dG9yRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgICAgICBtX21vdXNlRG93bldhc0luVW5hdmFpbGFi
bGVQbHVnaW5JbmRpY2F0b3IgPSBmYWxzZTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudCkgeworICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpIHsKICAgICAgICAgc2V0VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJ
c1ByZXNzZWQobV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yICYmIGlz
SW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihtb3VzZUV2ZW50KSk7Ci0gICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5oCmluZGV4IDRkMzQyZDc4NDQxMGI3YTcyZTcxMTNiNmJkODJhODFhNmU3
NWQ0YTUuLjJiZmJlYzE4MWM4YWJjNDg0MzRhMTNlM2ZiMTU0MWUyY2IyZGI3ZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCkBAIC04NCw3
ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xs
TG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVs
ZW1lbnQqKiBzdG9wRWxlbWVudCkgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2b2lkIHNldFVuYXZh
aWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGJvb2wpOwotICAgIGJvb2wgaXNJblVuYXZh
aWxhYmxlUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZlbnQqKSBjb25zdDsKKyAgICBib29sIGlzSW5V
bmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihjb25zdCBNb3VzZUV2ZW50JikgY29uc3Q7CiAgICAg
Ym9vbCBpc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OwogICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBGbG9hdFJlY3Qm
IGluZGljYXRvclJlY3QsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRSZWN0
JiBhcnJvd1JlY3QsIEZvbnQmLCBUZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCkgY29uc3Q7CiAg
ICAgTGF5b3V0UmVjdCB1bmF2YWlsYWJsZVBsdWdpbkluZGljYXRvckJvdW5kcyhjb25zdCBMYXlv
dXRQb2ludCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAKaW5kZXggZGUzNzI2ZDJjMzZlZDNiNWE1YWJiY2Q4YmRl
MzBmYjY2YjllNmRjZC4uODcwYTU0MTQwNGQxYzVlMGIyODkxZmRkMjMyZmViZWM0ZDQ1ODVhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU25hcHNob3R0ZWRQ
bHVnSW4uY3BwCkBAIC0xNTUsMTAgKzE1NSwxMCBAQCBDdXJzb3JEaXJlY3RpdmUgUmVuZGVyU25h
cHNob3R0ZWRQbHVnSW46OmdldEN1cnNvcihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIEN1cgog
CiB2b2lkIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQp
CiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2
ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZl
bnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBk
b3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwogCiAgICAgLy8gSWYgd2UncmUgYSBzbmFwc2hv
dHRlZCBwbHVnaW4sIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFjdGl2YXRlIG9uCiAgICAgLy8g
Y2xpY2tzIGV2ZW4gaWYgdGhlIHBhZ2UgaXMgcHJldmVudGluZyBvdXIgZGVmYXVsdCBiZWhhdmlv
dXIuIE90aGVyd2lzZQpAQCAtMTY4LDIwICsxNjgsMjAgQEAgdm9pZCBSZW5kZXJTbmFwc2hvdHRl
ZFBsdWdJbjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIC8vIGV2ZW50LiBUaGUgY29k
ZSBiZWxvdyBpcyBub3QgY29tcGxldGVseSBmb29scHJvb2YsIGJ1dCB0aGUgd29yc3QgdGhhdAog
ICAgIC8vIGNvdWxkIGhhcHBlbiBpcyB0aGF0IGEgc25hcHNob3R0ZWQgcGx1Z2luIHJlc3RhcnRz
LgogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQp
CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
KQogICAgICAgICBtX2lzUG90ZW50aWFsTW91c2VBY3RpdmF0aW9uID0gZmFsc2U7CiAKLSAgICBp
ZiAobW91c2VFdmVudC0+YnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKKyAgICBpZiAobW91c2VFdmVu
dC5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCAobV9pc1BvdGVudGlhbE1v
dXNlQWN0aXZhdGlvbiAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQpKSB7CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2
ZW50IHx8IChtX2lzUG90ZW50aWFsTW91c2VBY3RpdmF0aW9uICYmIG1vdXNlRXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpKSB7CiAgICAgICAgIG1faXNQb3RlbnRpYWxN
b3VzZUFjdGl2YXRpb24gPSBmYWxzZTsKLSAgICAgICAgYm9vbCBjbGlja1dhc09uT3ZlcmxheSA9
IHBsdWdJbkltYWdlRWxlbWVudCgpLnBhcnRPZlNuYXBzaG90T3ZlcmxheShldmVudC0+dGFyZ2V0
KCktPnRvTm9kZSgpKTsKLSAgICAgICAgcGx1Z0luSW1hZ2VFbGVtZW50KCkudXNlckRpZENsaWNr
U25hcHNob3QobW91c2VFdmVudCwgIWNsaWNrV2FzT25PdmVybGF5KTsKLSAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICBib29sIGNsaWNrV2FzT25PdmVy
bGF5ID0gcGx1Z0luSW1hZ2VFbGVtZW50KCkucGFydE9mU25hcHNob3RPdmVybGF5KG1vdXNlRXZl
bnQudGFyZ2V0KCktPnRvTm9kZSgpKTsKKyAgICAgICAgcGx1Z0luSW1hZ2VFbGVtZW50KCkudXNl
ckRpZENsaWNrU25hcHNob3QoJm1vdXNlRXZlbnQsICFjbGlja1dhc09uT3ZlcmxheSk7CisgICAg
ICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9IGVsc2UgaWYgKG1vdXNl
RXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewogICAgICAgICBt
X2lzUG90ZW50aWFsTW91c2VBY3RpdmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCBmNjc1MThiYTZjNjE5OWUxYWFmYzFjYjFjMjg2YmE3YTMyYzFiZDA4
Li5lNDkzMjkyN2QzZmQzMmMxNjZjOTgyNTRhYWM2MzI2Y2FmMTAyMmUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC04OTIsOCAr
ODkyLDggQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCiAKICAg
ICBjb25zdCBXZWJFdmVudCogY3VycmVudEV2ZW50ID0gV2ViUGFnZTo6Y3VycmVudEV2ZW50KCk7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkV2ZW50PiBzaW11bGF0ZWRXZWJFdmVudDsKLSAgICBp
ZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmlzU2ltdWxh
dGVkKCkpIHsKLSAgICAgICAgc2ltdWxhdGVkV2ViRXZlbnQgPSBjcmVhdGVXZWJFdmVudCh0b01v
dXNlRXZlbnQoZXZlbnQpKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuaXNTaW11bGF0ZWQoKSkgeworICAgICAgICBzaW11bGF0
ZWRXZWJFdmVudCA9IGNyZWF0ZVdlYkV2ZW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2ZW50KSk7
CiAgICAgICAgIGN1cnJlbnRFdmVudCA9IHNpbXVsYXRlZFdlYkV2ZW50LmdldCgpOwogICAgIH0K
ICAgICBpZiAoIWN1cnJlbnRFdmVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239003</attachid>
            <date>2014-09-30 22:41:54 -0700</date>
            <delta_ts>2014-10-01 15:29:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137284-20140930224155.patch</filename>
            <type>text/plain</type>
            <size>77374</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk2OTAzODk2NDNhZjE3
MzdjNWZiMmQwMzBkZmUxMzZmMjA1YWM5ZS4uZjRlMTI2ZDA3NTgzYTRjY2UwOWRiMDQ2ZmQ3Yzll
YWZjZTg1Y2RkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wOS0zMCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgRXZlbnQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3Mjg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgRXZl
bnQgY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
OgorICAgICAgICAqIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5oOgorICAgICAgICAqIGRvbS9FcnJv
ckV2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50Q29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRm9jdXNFdmVudC5oOgorICAgICAgICAq
IGRvbS9LZXlib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIGRvbS9Nb3Vz
ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXVsYXRlZE1vdXNlRXZlbnQ6OlNpbXVs
YXRlZE1vdXNlRXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50Lmg6CisgICAgICAgICog
ZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxl
cik6CisgICAgICAgICogZG9tL1RleHRFdmVudC5oOgorICAgICAgICAqIGRvbS9VSUV2ZW50Lmg6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmV2ZW50VHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjppc0VudGVyS2V5S2V5ZG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzTGlua0NsaWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
KiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAg
ICogaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN1
bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9JbWFnZURvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgor
ICAgICAgICAqIGh0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1w
bGljaXRseSk6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL01l
ZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1bWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNp
dGx5KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnRyb2xQYW5lbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRy
b2xUaW1lbGluZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L01lZGlhQ29udHJvbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
czo6Y29udGFpbnNSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNv
bnRyb2xzQXBwbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0FwcGxlRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVtYkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmRpc3BhdGNoRXZlbnRBc0NvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAq
IHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5k
bGVUZXh0SW5wdXRFdmVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQpOgorCiAyMDE0LTA5LTMwICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2sgb3ZlcmZs
b3cgd2l0aCBlbm9ybW91cyBTVkcgZmlsdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWMxMzQ0NzVlYTU3M2Uw
NjMwY2U4OGE0Yzg1NTNmMTEzYzIzZWQ0YS4uN2FkMWNhMDVlMDc4ZTFkMjgzYTY4N2U4NzllY2U3
OWI3NDQ2NDZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTMwICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgaXM8PigpIC8g
ZG93bmNhc3Q8PigpIGZvciBFdmVudCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBFdmVu
dCBjbGFzc2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVudCk6CisKIDIwMTQtMDkt
MzAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBb
RUZMXSBSZW5hbWUgVEVTVF9USEVNRV9ESVIgbWFjcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAppbmRleCBlYTUxZjc5ZjJkNDgwMDJlYTYxYzk5ZjVm
OWMxNzJlZTc5ZTU0MGIwLi41NGJlMjRiZTdjYzU1Mzk5MTc2YjE2Y2Y0MDlhMzNmMzY1Y2VmYjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBA
IC01OSwxNCArNTksMTQgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigpCiB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBFdmVudCogZXZlbnQpCiB7CiAKLSAgICBpZiAoZXZlbnQtPmV2
ZW50SW50ZXJmYWNlKCkgIT0gRXJyb3JFdmVudEludGVyZmFjZVR5cGUpCisgICAgaWYgKCFpczxF
cnJvckV2ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSB0b0Vycm9yRXZl
bnQoZXZlbnQpOworICAgIEVycm9yRXZlbnQmIGVycm9yRXZlbnQgPSBkb3duY2FzdDxFcnJvckV2
ZW50PigqZXZlbnQpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKSk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgZXJyb3JFdmVudC0+bWVzc2FnZSgpKSk7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGVycm9yRXZlbnQtPmZpbGVuYW1lKCkpKTsK
LSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+bGluZW5vKCkpKTsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVudC0+Y29sbm8oKSkpOworICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2ZW50Lm1lc3NhZ2Uo
KSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBlcnJvckV2
ZW50LmZpbGVuYW1lKCkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoZXJyb3JFdmVu
dC5saW5lbm8oKSkpOworICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihlcnJvckV2ZW50LmNv
bG5vKCkpKTsKIAogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29w
ZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggNWM3NmI2ZDQ1ZmIyZWRkNDNmODg2
MDExZGJmMGNjZjJlZjYyMjI0Ny4uNGFjNWUxOWU1YTcyY2Q2NzY4Mzc5NGViZGNkZmNmZjFhYjYy
MGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICAgICAg
ICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOwog
ICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2
ZW50LT5pc0JlZm9yZVVubG9hZEV2ZW50KCkpCi0gICAgICAgICAgICAgICAgdG9CZWZvcmVVbmxv
YWRFdmVudChldmVudCktPnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgaWYgKCFyZXR2YWwuaXNVbmRlZmluZWRPck51bGwoKSAm
JiBpczxCZWZvcmVVbmxvYWRFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgICAgIGRvd25jYXN0
PEJlZm9yZVVubG9hZEV2ZW50PigqZXZlbnQpLnNldFJldHVyblZhbHVlKHJldHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICAgICAgICAgaWYgKG1faXNBdHRyaWJ1dGUpIHsK
ICAgICAgICAgICAgICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudC5oCmluZGV4IGJiZTQxMTVjZDAyMjQ3ZWRiZjZlNzU0MGE5NzFiZGI0
OWI3NTRiZWQuLjc1NDIwMzU5Y2NlZTI0MzcwNTg2Mjg5Nzc3NzJhMmI3MzM5NTBiMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCkBAIC01MSw4ICs1
MSw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CiAKLUVWRU5UX1RZUEVfQ0FT
VFMoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9CZWZv
cmVVbmxvYWRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgK
aW5kZXggZWY3MmI3MzQ1MDU5Yjc5ZTM2ZTBjZmZjMzEwZGQ4NTEyZTA1NWQ0MS4uNTg3NjY5NmRj
MTU1YjUwZjRhNzMwODdjYjU5ZDFlYzI3ZTU2MjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JlZm9y
ZVVubG9hZEV2ZW50LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9y
ZXR1cm5WYWx1ZTsKIH07CiAKLUVWRU5UX1RZUEVfQ0FTVFMoQmVmb3JlVW5sb2FkRXZlbnQpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FVkVOVChC
ZWZvcmVVbmxvYWRFdmVudCkKKwogI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5oCmluZGV4IGI1OGU3OWNjMGI3MzdhZWQyMTdkYjM0M2IzNzhkNTU4MmZm
MjUyOGMuLmM4ZGZkMzEwODM5MzAwOTBhMjIyM2JlMmIzOThjNDg4OWQzYmYxYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaApAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1fY29sdW1uTnVtYmVyOwogfTsKIAotRVZFTlRfVFlQRV9DQVNUUyhFcnJvckV2ZW50KQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoRXJy
b3JFdmVudCkKKwogI2VuZGlmIC8vIEVycm9yRXZlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAxYmU1
ZWJiODBhZTA3OTMzMzNjYTkzMjhjMjIxMzJhNTA5ZTYxMDRkLi42N2Y0MjZlMmI1ZGI1ZTQxY2Yx
NTQ5N2JiYjU3M2YxZWIwYmRiNjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTIwNSwxMCArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50PiBtX3VuZGVy
bHlpbmdFdmVudDsKIH07CiAKLSNkZWZpbmUgRVZFTlRfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5h
bWUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBFdmVudCwgZXZlbnQs
IGV2ZW50LT5pcyMjVG9WYWx1ZVR5cGVOYW1lKCksIGV2ZW50LmlzIyNUb1ZhbHVlVHlwZU5hbWUo
KSkKLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkV2ZW50JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXMjI1RvVmFsdWVU
eXBlTmFtZSgpOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggYmZjYTlkMzlkOTI4
MTRiNTc0NDMzMzZmNzc1OTU5Nzk1MTJkZjVmOC4uNmRmZmM2ZmYyOWUxMmI3YjlhNWFjYTk4Y2Iy
ZjRhYTQ2MWZhZmY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKQEAgLTc2LDEy
ICs3NiwxMiBAQCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKQogCiB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC5pc01vdXNlRXZlbnQo
KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSk7CisgICAgQVNTRVJUKGlzPE1vdXNlRXZlbnQ+KGV2
ZW50KSB8fCBpczxGb2N1c0V2ZW50PihldmVudCkpOwogICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQp
IHsKLSAgICAgICAgaWYgKGV2ZW50LmlzTW91c2VFdmVudCgpKQotICAgICAgICAgICAgdG9Nb3Vz
ZUV2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGV2ZW50LmlzRm9jdXNFdmVudCgpKQotICAgICAgICAgICAgdG9Gb2N1
c0V2ZW50KGV2ZW50KS5zZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpCisgICAgICAgICAgICBkb3duY2FzdDxN
b3VzZUV2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OworICAgICAgICBlbHNlIGlmIChpczxGb2N1c0V2ZW50PihldmVudCkpCisgICAgICAgICAgICBk
b3duY2FzdDxGb2N1c0V2ZW50PihldmVudCkuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCkpOwogICAgIH0KICAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50KTsKIH0KQEAgLTExMSw4ICsxMTEsOCBAQCB2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQpIGNvbnN0CiAgICAgY2hlY2tSZWFjaGFiaWxpdHko
bV90YXJnZXRUb3VjaGVzLmdldCgpKTsKICAgICBjaGVja1JlYWNoYWJpbGl0eShtX2NoYW5nZWRU
b3VjaGVzLmdldCgpKTsKICNlbmRpZgotICAgIEFTU0VSVChldmVudC5pc1RvdWNoRXZlbnQoKSk7
Ci0gICAgVG91Y2hFdmVudCYgdG91Y2hFdmVudCA9IHRvVG91Y2hFdmVudChldmVudCk7CisgICAg
QVNTRVJUKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSk7CisgICAgVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKICAgICB0b3VjaEV2ZW50LnNldFRvdWNo
ZXMobV90b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldFRhcmdldFRvdWNoZXMobV90YXJnZXRU
b3VjaGVzKTsKICAgICB0b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNo
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBjNmUyNWVkOWQ5
Yzg2Yzk5MDI1MGVlNmUyYzZjNmM3OTEzZWM2NzU2Li5mNzc5OGQzMGE0MDcyOWYwMmNlMWZhZGJj
ZDg2YjA3MTQxMDhjMWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApA
QCAtMzQyLDggKzM0Miw4IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5v
ZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgaWYgKEV2ZW50VGFy
Z2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKICAgICAgICAgZXZl
bnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChldmVudC0+aXNUb3Vj
aEV2ZW50KCkpIHsKLSAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cygqdG9U
b3VjaEV2ZW50KGV2ZW50LmdldCgpKSkpCisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KCpldmVudCkp
IHsKKyAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3duY2FzdDxUb3Vj
aEV2ZW50PigqZXZlbnQpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmgKaW5kZXggOTFjODg3ZTdmM2U2YzcyNzQ3MGViZTA0NjEy
Yzc1OTViMDQ4YmYzNS4uYjk2Njg2NmUwZTc0NTViODgwYTY5YTNhODczNTFkNjBhY2M0ODUxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRm9jdXNFdmVudC5oCkBAIC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3JlbGF0ZWRUYXJnZXQ7CiB9OwogCi1FVkVOVF9UWVBFX0NB
U1RTKEZvY3VzRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FVkVOVChGb2N1c0V2ZW50KQorCiAjZW5kaWYgLy8gRm9jdXNFdmVudF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKaW5kZXggZjlkODI5ZGRmNjAyNTY2MThlZjgy
M2U2YWRiNmJlZWEyMGQ4YjI0MS4uYjQwMzE0MGE5ODBmYTM4M2M2NWQ1ZTMwNDI4YTk1NDU2YTQx
ZGViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApAQCAtMjIwLDkgKzIyMCw5
IEBAIGludCBLZXlib2FyZEV2ZW50Ojp3aGljaCgpIGNvbnN0CiBLZXlib2FyZEV2ZW50KiBmaW5k
S2V5Ym9hcmRFdmVudChFdmVudCogZXZlbnQpCiB7CiAgICAgZm9yIChFdmVudCogZSA9IGV2ZW50
OyBlOyBlID0gZS0+dW5kZXJseWluZ0V2ZW50KCkpCi0gICAgICAgIGlmIChlLT5pc0tleWJvYXJk
RXZlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiB0b0tleWJvYXJkRXZlbnQoZSk7Ci0gICAgcmV0
dXJuIDA7CisgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihlKSkKKyAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxLZXlib2FyZEV2ZW50PihlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0tleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKaW5k
ZXggODY4N2IxZmY4NmY0YjZhMzNhNmVhNDAwZTI5NDkyOGM1NGZjMWM1Zi4uYWI5NDU3NzFkNzUw
MWZhZTZlMTMwOWUwZTMzNjA4M2U3MWU2NTZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0tleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5oCkBAIC0xMTksMTAgKzExOSwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1FVkVOVF9U
WVBFX0NBU1RTKEtleWJvYXJkRXZlbnQpCi0KIEtleWJvYXJkRXZlbnQqIGZpbmRLZXlib2FyZEV2
ZW50KEV2ZW50Kik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FVkVOVChLZXlib2FyZEV2ZW50KQorCiAjZW5kaWYgLy8gS2V5Ym9hcmRFdmVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggYTlhZmU2MGJjODE1NmFjYzI4YzIxNmY2
NjMwOGJlNmRmNTA4NTY2OC4uNThkM2Q2MGNkMTUzMzkyZDZhNTYyYmQ3Y2RlNWUxNGVjNWY1OWM2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjc2LDEwICsyNzYsMTAgQEAgU2lt
dWxhdGVkTW91c2VFdmVudDo6U2ltdWxhdGVkTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUGFzc1JlZlAKICAgICB9CiAgICAgc2V0VW5kZXJseWluZ0V2ZW50KHVuZGVy
bHlpbmdFdmVudCk7CiAKLSAgICBpZiAodGhpcy0+dW5kZXJseWluZ0V2ZW50KCkgJiYgdGhpcy0+
dW5kZXJseWluZ0V2ZW50KCktPmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAgIE1vdXNlRXZlbnQq
IG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQodGhpcy0+dW5kZXJseWluZ0V2ZW50KCkpOwotICAg
ICAgICBtX3NjcmVlbkxvY2F0aW9uID0gbW91c2VFdmVudC0+c2NyZWVuTG9jYXRpb24oKTsKLSAg
ICAgICAgaW5pdENvb3JkaW5hdGVzKG1vdXNlRXZlbnQtPmNsaWVudExvY2F0aW9uKCkpOworICAg
IGlmICh0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSAmJiBpczxNb3VzZUV2ZW50Pih0aGlzLT51bmRl
cmx5aW5nRXZlbnQoKSkpIHsKKyAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCp0aGlzLT51bmRlcmx5aW5nRXZlbnQoKSk7CisgICAgICAgIG1fc2Ny
ZWVuTG9jYXRpb24gPSBtb3VzZUV2ZW50LnNjcmVlbkxvY2F0aW9uKCk7CisgICAgICAgIGluaXRD
b29yZGluYXRlcyhtb3VzZUV2ZW50LmNsaWVudExvY2F0aW9uKCkpOwogICAgIH0gZWxzZSBpZiAo
dGFyZ2V0KSB7CiAgICAgICAgIG1fc2NyZWVuTG9jYXRpb24gPSB0YXJnZXQtPnNjcmVlblJlY3Qo
KS5jZW50ZXIoKTsKICAgICAgICAgaW5pdENvb3JkaW5hdGVzKExheW91dFBvaW50KHRhcmdldC0+
Y2xpZW50UmVjdCgpLmNlbnRlcigpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TW91c2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAppbmRleCA2ZGM3
NmM4NmJkNDE0ZDAyOGQ5NmVlMWYxMDdkZjk0M2MxNjBmNWU1Li5hZmM3YmRmMDc4ZGJlYzEyMzk5
MGYyYjVjZTJkZWVmOWZlNmYxYTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91
c2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgKQEAgLTEzMiw4
ICsxMzIsOCBAQCBwcml2YXRlOgogICAgIFNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgUGFzc1JlZlB0cjxF
dmVudD4gdW5kZXJseWluZ0V2ZW50LCBFbGVtZW50KiB0YXJnZXQpOwogfTsKIAotRVZFTlRfVFlQ
RV9DQVNUUyhNb3VzZUV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRVZFTlQoTW91c2VFdmVudCkKKwogI2VuZGlmIC8vIE1vdXNlRXZlbnRf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IGY4YzMzZDY3NDQxNGU0NDFkNzg0OWNjNWYyMjZiMjU5YTNk
ZWIzOGIuLjU2Yzc2YzA4Mzk4MWIzYWIyY2YwYThhMjJjYTNiNjIwYjkyYWU3YWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTIwMzIsOCArMjAzMiw4IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAh
UExBVEZPUk0oSU9TKQotICAgIGlmIChldmVudC0+aXNUb3VjaEV2ZW50KCkpCi0gICAgICAgIHJl
dHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRSZWYodG9Ub3VjaEV2ZW50KGV2ZW50LmxlYWtS
ZWYoKSkpKTsKKyAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQuZ2V0KCkpKQorICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2
ZW50LmxlYWtSZWYoKSkpKTsKICNlbmRpZgogICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwogfQpAQCAtMjEwMCwxMSArMjEwMCwxMiBAQCB2b2lk
IE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm47
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwogICAg
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5pc0tl
eWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSkgewog
ICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAg
ICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5k
bGVyKHRvS2V5Ym9hcmRFdmVudChldmVudCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5kZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoZG93bmNhc3Q8S2V5Ym9hcmRF
dmVudD4oZXZlbnQpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB7Ci0gICAgICAgIGludCBkZXRhaWwgPSBldmVudC0+aXNV
SUV2ZW50KCkgPyB0b1VJRXZlbnQoZXZlbnQpLT5kZXRhaWwoKSA6IDA7CisgICAgICAgIGludCBk
ZXRhaWwgPSBpczxVSUV2ZW50PihldmVudCkgPyBkb3duY2FzdDxVSUV2ZW50PigqZXZlbnQpLmRl
dGFpbCgpIDogMDsKICAgICAgICAgaWYgKGRpc3BhdGNoRE9NQWN0aXZhdGVFdmVudChkZXRhaWws
IGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogI2lmIEVO
QUJMRShDT05URVhUX01FTlVTKQpAQCAtMjExNCwxMiArMjExNSwxMyBAQCB2b2lkIE5vZGU6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgICAgIHBhZ2UtPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQpOwogI2Vu
ZGlmCiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2
ZW50KSB7Ci0gICAgICAgIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBUZXh0RXZlbnRJ
bnRlcmZhY2VUeXBlKQorICAgICAgICBpZiAoaXM8VGV4dEV2ZW50PihldmVudCkpIHsKICAgICAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgICAg
ICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIo
dG9UZXh0RXZlbnQoZXZlbnQpKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihkb3duY2FzdDxUZXh0RXZlbnQ+KGV2ZW50
KSk7CisgICAgICAgIH0KICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKLSAgICB9IGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91
c2VFdmVudCgpKSB7Ci0gICAgICAgIGlmICh0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSA9
PSBNaWRkbGVCdXR0b24pIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CisgICAgICAgIGlm
IChkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IE1pZGRsZUJ1dHRvbikg
ewogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9yU2VsZigpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjEzMyw3ICsyMTM1LDcgQEAgdm9pZCBOb2RlOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogI2VuZGlmCi0gICAgfSBlbHNlIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53aGVl
bEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KSAmJiBl
dmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZSkgeworICAg
IH0gZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgaXM8V2hlZWxFdmVudD4o
ZXZlbnQpKSB7CiAKICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBzZW5k
IHRoZSB3aGVlbCBldmVudCB0byB0aGUgZmlyc3Qgbm9kZSB3ZSBmaW5kIHdpdGggYSByZW5kZXJl
ci4KICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIDxvcHRpb24+IGFuZCA8b3B0Z3JvdXA+
IGVsZW1lbnRzIHNvIHRoYXQgPHNlbGVjdD5zIGdldCBhIHdoZWVsIHNjcm9sbC4KQEAgLTIxNDMs
MTYgKzIxNDUsMTYgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKICAgICAgICAgCiAgICAgICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJl
cigpKQogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkK
LSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZGVmYXVsdFdoZWVsRXZlbnRI
YW5kbGVyKHN0YXJ0Tm9kZSwgdG9XaGVlbEV2ZW50KGV2ZW50KSk7CisgICAgICAgICAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihzdGFydE5vZGUs
IGRvd25jYXN0PFdoZWVsRXZlbnQ+KGV2ZW50KSk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgUExBVEZPUk0oSU9TKQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPmV2ZW50SW50ZXJmYWNlKCkg
PT0gVG91Y2hFdmVudEludGVyZmFjZVR5cGUgJiYgZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5
cGUoZXZlbnRUeXBlKSkgeworICAgIH0gZWxzZSBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpICYm
IGV2ZW50TmFtZXMoKS5pc1RvdWNoRXZlbnRUeXBlKGV2ZW50VHlwZSkpIHsKICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgICAgIHdoaWxlIChy
ZW5kZXJlciAmJiAoIXJlbmRlcmVyLT5pc0JveCgpIHx8ICF0b1JlbmRlckJveChyZW5kZXJlcikt
PmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKSkKICAgICAgICAgICAgIHJlbmRl
cmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5k
ZXJlci0+bm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS5mcmFtZSgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kZWZhdWx0
VG91Y2hFdmVudEhhbmRsZXIocmVuZGVyZXItPm5vZGUoKSwgdG9Ub3VjaEV2ZW50KGV2ZW50KSk7
CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmRlZmF1bHRUb3VjaEV2ZW50
SGFuZGxlcihyZW5kZXJlci0+bm9kZSgpLCBkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCkpOwog
ICAgICAgICB9CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRF
dmVudC5oCmluZGV4IGM1NTZlMTVkNzgwN2U4NjZiNzdhMzg3OGQ4NzIwNjdlZDNkOTg2NTcuLjg4
ZDA2MWY0MTVkMzdhZWFmZjJlM2Q0NGI0ZjYyNTdkNGQyN2M5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2
ZW50LmgKQEAgLTg3LDggKzg3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0
b3I8RGljdGF0aW9uQWx0ZXJuYXRpdmU+IG1fZGljdGF0aW9uQWx0ZXJuYXRpdmVzOwogICAgIH07
CiAKLUVWRU5UX1RZUEVfQ0FTVFMoVGV4dEV2ZW50KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRVZFTlQoVGV4dEV2ZW50KQorCiAjZW5kaWYgLy8g
VGV4dEV2ZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVG91Y2hFdmVudC5oCmluZGV4IGFkYTBlODc3NDcwY2VjZDRk
OGRkOWRjNmQ2YzJkODRmM2I5MTY2MDQuLjNhNjg4YjZkZTEyZjVlMGFmYmUxZDMyMDFlNmVmMzAz
MDM1MDRjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ub3VjaEV2ZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1RvdWNoRXZlbnQuaApAQCAtODYsMTAgKzg2LDEwIEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV9jaGFuZ2VkVG91Y2hlczsKIH07CiAKLUVW
RU5UX1RZUEVfQ0FTVFMoVG91Y2hFdmVudCkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VWRU5UKFRvdWNoRXZlbnQpCisKICNlbmRpZiAvLyBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogCiAjZW5kaWYgLy8gVG91Y2hFdmVudF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQu
aAppbmRleCBkMzFlYmJjZDI2OWJhYzZmMGYwZDA1ZTVlOTY0ZGNmZDQzNmNlNzdjLi5hYmE4NzU5
MjcwZmMxZWNlOTFhZGM1MzNiMTRmMDhiZTQ0MDcyNDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vVUlFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgKQEAg
LTg1LDggKzg1LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9kZXRhaWw7CiB9OwogCi1FVkVOVF9U
WVBFX0NBU1RTKFVJRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FVkVOVChVSUV2ZW50KQorCiAjZW5kaWYgLy8gVUlFdmVudF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuaAppbmRleCBkZTNiZGQ4MjA3MDkxNGQ2ZDk1OGFjYzZmYjU5M2RhMjJh
NmFmMjE3Li42NzA1ZDRhODhiMjdiZjdiOGI0MzhkYzAwNGUyNmQ0MWQyMWY0NDMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9XaGVlbEV2ZW50LmgKQEAgLTExNCw4ICsxMTQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pbml0aWFsaXplZFdpdGhQbGF0Zm9ybVdoZWVsRXZlbnQ7CiB9OwogCi1FVkVOVF9UWVBFX0NB
U1RTKFdoZWVsRXZlbnQpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FVkVOVChXaGVlbEV2ZW50KQorCiAjZW5kaWYgLy8gV2hlZWxFdmVudF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCmluZGV4IDVjNTMzNWY2NzUz
YTI5NGJkZmE4NGYzNWQxZmY1ODVhNDQ2ZTJkODcuLjkxNWUyYWFjZjk3YTYwMmU1ODc1MjQ3MWYw
OTg5ZjU2YmEyM2RhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hv
ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQu
Y3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNLZXlib2Fy
ZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKIAogc3RhdGljIHZvaWQgYXBw
ZW5kU2VydmVyTWFwTW91c2VQb3NpdGlvbihTdHJpbmdCdWlsZGVyJiB1cmwsIEV2ZW50KiBldmVu
dCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWlzPE1vdXNl
RXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGV2ZW50LT50YXJn
ZXQoKSk7CkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kU2VydmVyTWFwTW91
c2VQb3NpdGlvbihTdHJpbmdCdWlsZGVyJiB1cmwsIEV2ZW50KiBldmVudCkKICAgICBSZW5kZXJJ
bWFnZSYgcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKCppbWFnZUVsZW1lbnQucmVuZGVyZXIoKSk7
CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgcGFzcyB0cnVlIGZvciB1c2VU
cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLmFi
c29sdXRlVG9Mb2NhbChGbG9hdFBvaW50KHRvTW91c2VFdmVudChldmVudCktPnBhZ2VYKCksIHRv
TW91c2VFdmVudChldmVudCktPnBhZ2VZKCkpKTsKKyAgICBGbG9hdFBvaW50IGFic29sdXRlUG9z
aXRpb24gPSByZW5kZXJlci5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludChkb3duY2FzdDxNb3Vz
ZUV2ZW50PigqZXZlbnQpLnBhZ2VYKCksIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkucGFn
ZVkoKSkpOwogICAgIGludCB4ID0gYWJzb2x1dGVQb3NpdGlvbi54KCk7CiAgICAgaW50IHkgPSBh
YnNvbHV0ZVBvc2l0aW9uLnkoKTsKICAgICB1cmwuYXBwZW5kKCc/Jyk7CkBAIC0xOTYsOSArMTk2
LDkgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiAgICAgICAgIGlmIChoYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8v
IFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRhYmxlIGJsb2NrIHRoYXQgdGhlIHNlbGVjdGlv
biB3YXMgaW4gKGlmIGl0IHdhcyBpbiBvbmUpIGp1c3QgYmVmb3JlIHRoZSBsaW5rIHdhcyBjbGlj
a2VkCiAgICAgICAgICAgICAvLyBmb3IgdGhlIExpdmVXaGVuTm90Rm9jdXNlZCBlZGl0YWJsZSBs
aW5rIGJlaGF2aW9yCi0gICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVu
dChldmVudCktPmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKSkg
eworICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93
bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpLmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKSkgewog
ICAgICAgICAgICAgICAgIHNldFJvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNl
RG93bihkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgbV93YXNTaGlmdEtleURvd25Pbk1vdXNl
RG93biA9IHRvTW91c2VFdmVudChldmVudCktPnNoaWZ0S2V5KCk7CisgICAgICAgICAgICAgICAg
bV93YXNTaGlmdEtleURvd25Pbk1vdXNlRG93biA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVu
dCkuc2hpZnRLZXkoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBh
cmUgY2xlYXJlZCBvbiBtb3VzZW92ZXIgYW5kIG5vdCBtb3VzZW91dCBiZWNhdXNlIHRoZWlyIHZh
bHVlcyBhcmUgbmVlZGVkIGZvciBkcmFnIGV2ZW50cywKICAgICAgICAgICAgICAgICAvLyBidXQg
ZHJhZyBldmVudHMgaGFwcGVuIGFmdGVyIG1vdXNlIG91dCBldmVudHMuCkBAIC01NTUsOSArNTU1
LDkgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6aGFuZGxlQ2xpY2soRXZlbnQqIGV2ZW50KQog
CiBIVE1MQW5jaG9yRWxlbWVudDo6RXZlbnRUeXBlIEhUTUxBbmNob3JFbGVtZW50OjpldmVudFR5
cGUoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAg
IGlmICghaXM8TW91c2VFdmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm4gTm9uTW91c2VFdmVu
dDsKLSAgICByZXR1cm4gdG9Nb3VzZUV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKSA/IE1vdXNlRXZl
bnRXaXRoU2hpZnRLZXkgOiBNb3VzZUV2ZW50V2l0aG91dFNoaWZ0S2V5OworICAgIHJldHVybiBk
b3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLnNoaWZ0S2V5KCkgPyBNb3VzZUV2ZW50V2l0aFNo
aWZ0S2V5IDogTW91c2VFdmVudFdpdGhvdXRTaGlmdEtleTsKIH0KIAogYm9vbCBIVE1MQW5jaG9y
RWxlbWVudDo6dHJlYXRMaW5rQXNMaXZlRm9yRXZlbnRUeXBlKEV2ZW50VHlwZSBldmVudFR5cGUp
IGNvbnN0CkBAIC01OTIsMTIgKzU5MiwxMiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojp0cmVh
dExpbmtBc0xpdmVGb3JFdmVudFR5cGUoRXZlbnRUeXBlIGV2ZW50VHlwZSkgY29uc3QKIAogYm9v
bCBpc0VudGVyS2V5S2V5ZG93bkV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4gZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2ZW50LT5pc0tleWJv
YXJkRXZlbnQoKSAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0g
IkVudGVyIjsKKyAgICByZXR1cm4gZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50ICYmIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxLZXlib2FyZEV2
ZW50PigqZXZlbnQpLmtleUlkZW50aWZpZXIoKSA9PSAiRW50ZXIiOwogfQogCiBib29sIGlzTGlu
a0NsaWNrKEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4gZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCAmJiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCB0b01vdXNl
RXZlbnQoZXZlbnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbik7CisgICAgcmV0dXJuIGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgJiYgKCFpczxNb3VzZUV2ZW50Pihl
dmVudCkgfHwgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5idXR0b24oKSAhPSBSaWdodEJ1
dHRvbik7CiB9CiAKIGJvb2wgc2hvdWxkUHJvaGliaXRMaW5rcyhFbGVtZW50KiBlbGVtZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAppbmRleCA5MmUyNmE3YTZm
ZjAxZDY1ZGY5OGE0MTZjZjQ5Zjg5NGYxMjExODAxLi40NTI5ZjhiMzM4YjllOWY0YjUzMWUzNjhm
NTA4ODUwMzI2ODE5MDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0
b25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50
LmNwcApAQCAtMTIzLDI4ICsxMjMsMjkgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5
SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CisgICAgaWYgKGlzPEtleWJvYXJkRXZlbnQ+KGV2
ZW50KSkgeworICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8
S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlm
aWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAgICAgIHNldEFjdGl2ZSh0cnVlLCB0cnVlKTsK
ICAgICAgICAgICAgIC8vIE5vIHNldERlZmF1bHRIYW5kbGVkKCkgLSBJRSBkaXNwYXRjaGVzIGEg
a2V5cHJlc3MgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRvS2V5Ym9hcmRFdmVudChldmVudCktPmNoYXJDb2RlKCkp
IHsKKyAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGtleWJvYXJkRXZlbnQuY2hhckNvZGUo
KSkgewogICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAgICAgICAgICAgZGlz
cGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRl
ZENsaWNrKCZrZXlib2FyZEV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVu
dC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgY2FzZSAnICc6CiAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgc2Ny
b2xsaW5nIGRvd24gdGhlIHBhZ2UuCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgICAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1
bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5
dXBFdmVudCAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5rZXlJZGVudGlmaWVyKCkgPT0gIlUr
MDAyMCIpIHsKKyAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXl1cEV2ZW50ICYmIGtleWJvYXJkRXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAi
KSB7CiAgICAgICAgICAgICBpZiAoYWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hT
aW11bGF0ZWRDbGljayhldmVudCk7Ci0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKCZrZXlib2FyZEV2
ZW50KTsKKyAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCmluZGV4IDRkMDdiZmNhOGE0MDQ2ODc5YWFjZTE4MmJk
M2VlZTc1Y2ZiYjYyYWMuLjM1ZWE1MmNiY2VjYmM0OTRjMGZmN2U2N2U0ZDM0NTljY2Q1OWZkOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcApAQCAtMTg3
LDE1ICsxODcsMTUgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50Ojp3aWxsQXR0YWNoUmVuZGVy
ZXJzKCkKICAgICAgICAgbV9ub3Jlc2l6ZSA9IGNvbnRhaW5pbmdGcmFtZVNldC0+bm9SZXNpemUo
KTsKIH0KIAotdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldnQpCit2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2ZW50KQogewotICAgIGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmICFtX25vcmVz
aXplICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNGcmFtZVNldCgpKSB7Ci0gICAgICAg
IGlmICh0b1JlbmRlckZyYW1lU2V0KHJlbmRlcmVyKCkpLT51c2VyUmVzaXplKHRvTW91c2VFdmVu
dChldnQpKSkgewotICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIGlm
IChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgIW1fbm9yZXNpemUgJiYgcmVuZGVyZXIoKSAmJiBy
ZW5kZXJlcigpLT5pc0ZyYW1lU2V0KCkpIHsKKyAgICAgICAgaWYgKHRvUmVuZGVyRnJhbWVTZXQo
cmVuZGVyZXIoKSktPnVzZXJSZXNpemUoZG93bmNhc3Q8TW91c2VFdmVudD4oZXZlbnQpKSkgewor
ICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZ0KTsKKyAgICBIVE1MRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9
CiAKIGJvb2wgSFRNTEZyYW1lU2V0RWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFu
Z2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA0MzlhMGEx
Y2ZiODdlZGQ4ZTI3YjUxOTdlMTZlM2U5ZmVkOWVmYzM0Li5lYWYyNjU0ZTU5N2JiMGU0OTJhOGY4
OWYzNzI3MTRjYzFlNTQ0M2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKQEAgLTEwMzIsNyArMTAzMiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6d2lsbERp
c3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50LCBJbnB1dEVsZW1lbnRDbGlja1N0YXRlJiBzCiB7CiAg
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgbV9p
bnB1dFR5cGUtPnNob3VsZFN1Ym1pdEltcGxpY2l0bHkoJmV2ZW50KSkKICAgICAgICAgZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudCAmJiBldmVudC5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoJmV2ZW50
KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0
PE1vdXNlRXZlbnQ+KGV2ZW50KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIG1f
aW5wdXRUeXBlLT53aWxsRGlzcGF0Y2hDbGljayhzdGF0ZSk7CiAgICAgICAgIHN0YXRlLnN0YXRl
ZnVsID0gdHJ1ZTsKICAgICB9CkBAIC0xMDQ1LDIyICsxMDQ1LDIyIEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KEV2ZW50JiBldmVudCwgY29uc3QgSW5wdXRF
bGVtZW50Q2xpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZ0KQogewotICAgIGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmIGV2dC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIHRvTW91c2VFdmVudChldnQpLT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVDbGlja0V2ZW50
KHRvTW91c2VFdmVudChldnQpKTsKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZ0KSAmJiBldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBkb3duY2FzdDxNb3VzZUV2ZW50
PigqZXZ0KS5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIG1faW5wdXRUeXBlLT5o
YW5kbGVDbGlja0V2ZW50KGRvd25jYXN0PE1vdXNlRXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAo
ZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKGV2dC0+aXNUb3VjaEV2ZW50KCkpIHsKLSAg
ICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZVRvdWNoRXZlbnQodG9Ub3VjaEV2ZW50KGV2dCkpOwor
ICAgIGlmIChpczxUb3VjaEV2ZW50PihldnQpKSB7CisgICAgICAgIG1faW5wdXRUeXBlLT5oYW5k
bGVUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2dCkpOwogICAgICAgICBpZiAoZXZ0
LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgog
Ci0gICAgaWYgKGV2dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlS2V5ZG93
bkV2ZW50KHRvS2V5Ym9hcmRFdmVudChldnQpKTsKKyAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4o
ZXZ0KSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAg
ICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXlkb3duRXZlbnQoZG93bmNhc3Q8S2V5Ym9hcmRFdmVu
dD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTA4NiwxNiArMTA4NiwxNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKIAogICAgIC8vIFVzZSBrZXkg
cHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBtb3VzZSBldmVudHMKICAg
ICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5nIG9mIHRoZSBrZXkgcHJl
c3MgZXZlbnQuCi0gICAgaWYgKGV2dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgbV9pbnB1dFR5cGUtPmhh
bmRsZUtleXByZXNzRXZlbnQodG9LZXlib2FyZEV2ZW50KGV2dCkpOwotICAgICAgICBpZiAoZXZ0
LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KSB7Ci0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXl1cEV2ZW50KHRvS2V5
Ym9hcmRFdmVudChldnQpKTsKLSAgICAgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXM8S2V5Ym9hcmRFdmVudD4oZXZ0KSkgeworICAg
ICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVu
dD4oKmV2dCk7CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUtleXBy
ZXNzRXZlbnQoJmtleWJvYXJkRXZlbnQpOworICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQu
ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxz
ZSBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsK
KyAgICAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVLZXl1cEV2ZW50KCZrZXlib2FyZEV2ZW50
KTsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmRlZmF1bHRIYW5kbGVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1faW5wdXRU
eXBlLT5zaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2dCkpIHsKQEAgLTExMTcsMTEgKzExMTgsMTEg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZXZ0LT5pc0JlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KCkpCi0gICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCh0b0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGV2dCkpOworICAgIGlmIChpczxCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudD4oZXZ0KSkKKyAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50KGRvd25jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Pihl
dnQpKTsKIAotICAgIGlmIChldnQtPmlzTW91c2VFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxl
TW91c2VEb3duRXZlbnQodG9Nb3VzZUV2ZW50KGV2dCkpOworICAgIGlmIChpczxNb3VzZUV2ZW50
PihldnQpICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewor
ICAgICAgICBtX2lucHV0VHlwZS0+aGFuZGxlTW91c2VEb3duRXZlbnQoZG93bmNhc3Q8TW91c2VF
dmVudD4oZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAKaW5kZXggMzY5MGU5YzdmZWVjMTBjNDA5MjI3YWM1OTc4NWE4NmI5NTNl
NTAwNS4uM2I4Njg4NDlmMzM0M2M3ZjVjMzNhZjdlNmNhZDdhZWM4MTMyYWFjYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC03NDcsMTEg
Kzc0NywxMSBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogewogICAgIFJlbmRlckVsZW1lbnQqIHIgPSByZW5kZXJlcigpOwog
ICAgIGlmIChyICYmIHItPmlzRW1iZWRkZWRPYmplY3QoKSkgewotICAgICAgICBpZiAoaXNQbHVn
SW5JbWFnZUVsZW1lbnQoKSAmJiBkaXNwbGF5U3RhdGUoKSA9PSBXYWl0aW5nRm9yU25hcHNob3Qg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNsaWNrRXZlbnQpIHsKLSAgICAgICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01v
dXNlRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQtPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKLSAgICAgICAgICAgICAgICB1c2VyRGlkQ2xpY2tTbmFwc2hvdChtb3Vz
ZUV2ZW50LCB0cnVlKTsKLSAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IFdhaXRpbmdGb3JTbmFwc2hvdCAmJiBp
czxNb3VzZUV2ZW50PihldmVudCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xp
Y2tFdmVudCkgeworICAgICAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0
PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgICAgICAgICBpZiAobW91c2VFdmVudC5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgICAgICAgICAgdXNlckRpZENsaWNrU25hcHNob3Qo
Jm1vdXNlRXZlbnQsIHRydWUpOworICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQuc2V0RGVmYXVs
dEhhbmRsZWQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggZWNj
ODdlMjc1Y2I2Yjc1NTVkYmVkYTQ3YzJhZTYwZWJjZDg4YjkwMS4uZjk2NDhkYjk4ZDE5YmEzMDFl
NDU1NjcxNjU0M2UzMGI5OWI1NWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5jcHAKQEAgLTExNDYsMTAgKzExNDYsMTEgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBSZWZQdHI8
UmVuZGVyVGhlbWU+IHJlbmRlclRoZW1lID0gcGFnZSA/ICZwYWdlLT50aGVtZSgpIDogUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCkgewotICAgICAgICBpZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZl
bnQoKSkKKyAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50PihldmVudCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgaWYgKHBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KHRvS2V5
Ym9hcmRFdmVudChldmVudCkpKQorICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50
ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKHBsYXRmb3Jt
SGFuZGxlS2V5ZG93bkV2ZW50KCZrZXlib2FyZEV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAvLyBXaGVuIHVzaW5nIHNwYXRpYWwgbmF2aWdhdGlvbiwgd2Ugd2FudCB0byBi
ZSBhYmxlIHRvIG5hdmlnYXRlIGF3YXkKQEAgLTExNjAsNyArMTE2MSw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgU3RyaW5n
JiBrZXlJZGVudGlmaWVyID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigp
OworICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBrZXlib2FyZEV2ZW50Lmtl
eUlkZW50aWZpZXIoKTsKICAgICAgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRoaXMtPmxpc3RJdGVtcygpOwog
ICAgICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgp
KTsKQEAgLTExOTIsMjIgKzExOTMsMjMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxp
c3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIHNlbGVjdE9w
dGlvbihsaXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCBEZXNlbGVjdE90aGVyT3B0aW9ucyB8
IERpc3BhdGNoQ2hhbmdlRXZlbnQgfCBVc2VyRHJpdmVuKTsKIAogICAgICAgICBpZiAoaGFuZGxl
ZCkKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAg
a2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KIAogICAgIC8vIFVzZSBr
ZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBtb3VzZSBldmVudHMK
ICAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5nIG9mIHRoZSBrZXkg
cHJlc3MgZXZlbnQuCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAg
ICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIGludCBrZXlDb2RlID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5Q29kZSgp
OworICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9h
cmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaW50IGtleUNvZGUgPSBrZXlib2FyZEV2ZW50Lmtl
eUNvZGUoKTsKICAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAKICAgICAgICAgaWYgKGtl
eUNvZGUgPT0gJyAnICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGRvY3VtZW50KCkuZnJh
bWUoKSkpIHsKICAgICAgICAgICAgIC8vIFVzZSBzcGFjZSB0byB0b2dnbGUgYXJyb3cga2V5IGhh
bmRsaW5nIGZvciBzZWxlY3Rpb24gY2hhbmdlIG9yIHNwYXRpYWwgbmF2aWdhdGlvbi4KICAgICAg
ICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSAhbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZTsK
LSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAga2V5
Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTEyNDYsMTcgKzEyNDgsMTcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSAnXHIn
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGZvcm0oKSkKLSAgICAgICAgICAgICAgICAgICAgZm9y
bSgpLT5zdWJtaXRJbXBsaWNpdGx5KGV2ZW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IGZvcm0oKS0+c3VibWl0SW1wbGljaXRseSgma2V5Ym9hcmRFdmVudCwgZmFsc2UpOwogICAgICAg
ICAgICAgICAgIGRpc3BhdGNoQ2hhbmdlRXZlbnRGb3JNZW51TGlzdCgpOwogICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGhhbmRsZWQpCi0gICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAKLSAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZl
bnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IExl
ZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+
KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBmb2N1cygpOwogI2lm
ICFQTEFURk9STShJT1MpCiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
TWVudUxpc3QoKSkgewpAQCAtMTMzNiwzNSArMTMzOCwzNSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRoaXMtPmxpc3RJdGVtcygpOwog
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYm
IGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5idXR0b24oKSA9
PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2FzdDxNb3VzZUV2
ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgZm9jdXMoKTsK
ICAgICAgICAgLy8gQ2FsbGluZyBmb2N1cygpIG1heSByZW1vdmUgb3IgY2hhbmdlIG91ciByZW5k
ZXJlciwgaW4gd2hpY2ggY2FzZSB3ZSBkb24ndCB3YW50IHRvIGhhbmRsZSB0aGUgZXZlbnQgZnVy
dGhlci4KICAgICAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5pc0xpc3RCb3go
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBDb252ZXJ0IHRvIGNvb3JkcyBy
ZWxhdGl2ZSB0byB0aGUgbGlzdCBib3ggaWYgbmVlZGVkLgotICAgICAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgSW50UG9pbnQgbG9jYWxP
ZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNl
RXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOworICAgICAgICBNb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICAg
ICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVyZXIoKS0+YWJz
b2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQuYWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1z
KSk7CiAgICAgICAgIGludCBsaXN0SW5kZXggPSB0b1JlbmRlckxpc3RCb3gocmVuZGVyZXIoKSkt
Pmxpc3RJbmRleEF0T2Zmc2V0KHRvSW50U2l6ZShsb2NhbE9mZnNldCkpOwogICAgICAgICBpZiAo
bGlzdEluZGV4ID49IDApIHsKICAgICAgICAgICAgIGlmICghaXNEaXNhYmxlZEZvcm1Db250cm9s
KCkpIHsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3Rl
ZFN0YXRlKGxpc3RJbmRleCwgbW91c2VFdmVudC0+bWV0YUtleSgpLCBtb3VzZUV2ZW50LT5zaGlm
dEtleSgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJbmRleCwg
bW91c2VFdmVudC5tZXRhS2V5KCksIG1vdXNlRXZlbnQuc2hpZnRLZXkoKSk7CiAjZWxzZQotICAg
ICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUobGlzdEluZGV4LCBtb3VzZUV2ZW50LT5j
dHJsS2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0S2V5KCkpOworICAgICAgICAgICAgICAgIHVwZGF0
ZVNlbGVjdGVkU3RhdGUobGlzdEluZGV4LCBtb3VzZUV2ZW50LmN0cmxLZXkoKSwgbW91c2VFdmVu
dC5zaGlmdEtleSgpKTsKICNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCkuc2V0TW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsKCk7CiAKLSAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgbW91c2VFdmVu
dC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2
ZW50KCkgJiYgIXRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Ny
b2xsYWJsZUFyZWEoKSkgewotICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9Nb3Vz
ZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgaWYgKG1vdXNlRXZlbnQtPmJ1dHRvbigpICE9IExlZnRC
dXR0b24gfHwgIW1vdXNlRXZlbnQtPmJ1dHRvbkRvd24oKSkKKyAgICB9IGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+
KGV2ZW50KSAmJiAhdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmNhbkJlU2Nyb2xsZWRBbmRIYXNT
Y3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3du
Y2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAobW91c2VFdmVudC5idXR0b24o
KSAhPSBMZWZ0QnV0dG9uIHx8ICFtb3VzZUV2ZW50LmJ1dHRvbkRvd24oKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQb2lu
dChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlv
bigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0gcm91
bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50LmFic29s
dXRlTG9jYXRpb24oKSwgVXNlVHJhbnNmb3JtcykpOwogICAgICAgICBpbnQgbGlzdEluZGV4ID0g
dG9SZW5kZXJMaXN0Qm94KHJlbmRlcmVyKCkpLT5saXN0SW5kZXhBdE9mZnNldCh0b0ludFNpemUo
bG9jYWxPZmZzZXQpKTsKICAgICAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAgICAg
ICBpZiAoIWlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKSB7CkBAIC0xMzgxLDkgKzEzODMsOSBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24odHJ1ZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNldXBFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgdG9Nb3VzZUV2
ZW50KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLmZyYW1lKCkt
PmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpIHsKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAm
JiBpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KS5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCkuYXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBUaGlz
IGNsaWNrIG9yIGRyYWcgZXZlbnQgd2FzIG5vdCBvdmVyIGFueSBvZiB0aGUgb3B0aW9ucy4KICAg
ICAgICAgaWYgKG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTEzOTIsOSArMTM5NCwxMSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojps
aXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIC8vIHRpbWVy
IHN0b3BzLgogICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKICAgICB9IGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewotICAgICAgICBpZiAoIWV2
ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYgKCFpczxLZXlib2FyZEV2ZW50Pihl
dmVudCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRl
bnRpZmllciA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUlkZW50aWZpZXIoKTsKKworICAg
ICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVu
dD4oKmV2ZW50KTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyID0ga2V5Ym9h
cmRFdmVudC5rZXlJZGVudGlmaWVyKCk7CiAKICAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
CiAgICAgICAgIGludCBlbmRJbmRleCA9IDA7CkBAIC0xNDU2LDE1ICsxNDYwLDE1IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVu
dCkKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgIG1fYWxsb3dzTm9uQ29udGlndW91
c1NlbGVjdGlvbiA9IG1fbXVsdGlwbGUgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9j
dW1lbnQoKS5mcmFtZSgpKTsKICNlbHNlCi0gICAgICAgICAgICBtX2FsbG93c05vbkNvbnRpZ3Vv
dXNTZWxlY3Rpb24gPSBtX211bHRpcGxlICYmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChk
b2N1bWVudCgpLmZyYW1lKCkpIHx8IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmN0cmxLZXkoKSk7
CisgICAgICAgICAgICBtX2FsbG93c05vbkNvbnRpZ3VvdXNTZWxlY3Rpb24gPSBtX211bHRpcGxl
ICYmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLmZyYW1lKCkpIHx8IGtl
eWJvYXJkRXZlbnQuY3RybEtleSgpKTsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBzZWxlY3RO
ZXdJdGVtID0gdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+c2hpZnRLZXkoKSB8fCAhbV9hbGxvd3NO
b25Db250aWd1b3VzU2VsZWN0aW9uOworICAgICAgICAgICAgYm9vbCBzZWxlY3ROZXdJdGVtID0g
a2V5Ym9hcmRFdmVudC5zaGlmdEtleSgpIHx8ICFtX2FsbG93c05vbkNvbnRpZ3VvdXNTZWxlY3Rp
b247CiAKICAgICAgICAgICAgIGlmIChzZWxlY3ROZXdJdGVtKQogICAgICAgICAgICAgICAgIG1f
YWN0aXZlU2VsZWN0aW9uU3RhdGUgPSB0cnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIGFuY2hv
ciBpcyB1bml0aWFsaXplZCwgb3IgaWYgd2UncmUgZ29pbmcgdG8gZGVzZWxlY3QgYWxsCiAgICAg
ICAgICAgICAvLyBvdGhlciBvcHRpb25zLCB0aGVuIHNldCB0aGUgYW5jaG9yIGluZGV4IGVxdWFs
IHRvIHRoZSBlbmQgaW5kZXguCi0gICAgICAgICAgICBib29sIGRlc2VsZWN0T3RoZXJzID0gIW1f
bXVsdGlwbGUgfHwgKCF0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5zaGlmdEtleSgpICYmIHNlbGVj
dE5ld0l0ZW0pOworICAgICAgICAgICAgYm9vbCBkZXNlbGVjdE90aGVycyA9ICFtX211bHRpcGxl
IHx8ICgha2V5Ym9hcmRFdmVudC5zaGlmdEtleSgpICYmIHNlbGVjdE5ld0l0ZW0pOwogICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IGRlc2VsZWN0T3Ro
ZXJzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRlc2VsZWN0T3RoZXJzKQogICAgICAgICAgICAg
ICAgICAgICBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oKTsKQEAgLTE0NzgsMTcgKzE0
ODIsMTggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgc2Ny
b2xsVG9TZWxlY3Rpb24oKTsKIAotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpIHsKLSAgICAgICAgaWYgKCFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAg
ICAgIGlmICghaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBpbnQga2V5Q29kZSA9IHRvS2V5Ym9hcmRFdmVudChldmVudCktPmtleUNvZGUoKTsK
KyAgICAgICAgS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCA9IGRvd25jYXN0PEtleWJvYXJk
RXZlbnQ+KCpldmVudCk7CisgICAgICAgIGludCBrZXlDb2RlID0ga2V5Ym9hcmRFdmVudC5rZXlD
b2RlKCk7CiAKICAgICAgICAgaWYgKGtleUNvZGUgPT0gJ1xyJykgewogICAgICAgICAgICAgaWYg
KGZvcm0oKSkKLSAgICAgICAgICAgICAgICBmb3JtKCktPnN1Ym1pdEltcGxpY2l0bHkoZXZlbnQs
IGZhbHNlKTsKLSAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAg
ICAgICAgICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseSgma2V5Ym9hcmRFdmVudCwgZmFsc2Up
OworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICB9IGVsc2UgaWYgKG1fbXVsdGlwbGUgJiYga2V5Q29kZSA9PSAnICcgJiYgbV9hbGxvd3NOb25D
b250aWd1b3VzU2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAvLyBVc2Ugc3BhY2UgdG8gdG9nZ2xl
IHNlbGVjdGlvbiBjaGFuZ2UuCiAgICAgICAgICAgICBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0g
IW1fYWN0aXZlU2VsZWN0aW9uU3RhdGU7CkBAIC0xNDk3LDcgKzE1MDIsNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAg
ICAgICAgICAgICBBU1NFUlQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbXNbbV9hY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleF0pKTsKICAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUo
bV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCwgdHJ1ZSAvKm11bHRpKi8sIGZhbHNlIC8qc2hpZnQq
Lyk7CiAgICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKLSAgICAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0
SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTUyMyw5ICsxNTI4LDkgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAg
ICAgaWYgKGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBldmVudC0+
aXNLZXlib2FyZEV2ZW50KCkpIHsKLSAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVu
dCA9IHRvS2V5Ym9hcmRFdmVudChldmVudCk7Ci0gICAgICAgIGlmICgha2V5Ym9hcmRFdmVudC0+
Y3RybEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5hbHRLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC0+
bWV0YUtleSgpICYmIHVfaXNwcmludChrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpKSkgeworICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGlzPEtl
eWJvYXJkRXZlbnQ+KGV2ZW50KSkgeworICAgICAgICBLZXlib2FyZEV2ZW50JiBrZXlib2FyZEV2
ZW50ID0gZG93bmNhc3Q8S2V5Ym9hcmRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgaWYgKCFrZXli
b2FyZEV2ZW50LmN0cmxLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC5hbHRLZXkoKSAmJiAha2V5Ym9h
cmRFdmVudC5tZXRhS2V5KCkgJiYgdV9pc3ByaW50KGtleWJvYXJkRXZlbnQuY2hhckNvZGUoKSkp
IHsKICAgICAgICAgICAgIHR5cGVBaGVhZEZpbmQoa2V5Ym9hcmRFdmVudCk7CiAgICAgICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
NjUsOSArMTU3MCw5IEBAIFN0cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uQXRJbmRleChp
bnQgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkudGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogfQogCi12b2lkIEhU
TUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50JiBldmVudCkK
IHsKLSAgICBpbnQgaW5kZXggPSBtX3R5cGVBaGVhZC5oYW5kbGVFdmVudChldmVudCwgVHlwZUFo
ZWFkOjpNYXRjaFByZWZpeCB8IFR5cGVBaGVhZDo6Q3ljbGVGaXJzdENoYXIpOworICAgIGludCBp
bmRleCA9IG1fdHlwZUFoZWFkLmhhbmRsZUV2ZW50KCZldmVudCwgVHlwZUFoZWFkOjpNYXRjaFBy
ZWZpeCB8IFR5cGVBaGVhZDo6Q3ljbGVGaXJzdENoYXIpOwogICAgIGlmIChpbmRleCA8IDApCiAg
ICAgICAgIHJldHVybjsKICAgICBzZWxlY3RPcHRpb24obGlzdFRvT3B0aW9uSW5kZXgoaW5kZXgp
LCBEZXNlbGVjdE90aGVyT3B0aW9ucyB8IERpc3BhdGNoQ2hhbmdlRXZlbnQgfCBVc2VyRHJpdmVu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAppbmRleCAyN2ZlZmQ2MGI0
ZmNkYmFjMTM5MWVkNmU4OWM5YThhZmY1MzY5NjY0Li5kYTdmMTVhODlhMDVjZDcyOGMzMmE2NTU5
MmEwNWRlNGEyY2MwYjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
CkBAIC0xNTEsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhi
b29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkgY29uc3Q7CiAKICAgICB2b2lkIGRlc2Vs
ZWN0SXRlbXMoSFRNTE9wdGlvbkVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMCk7Ci0gICAgdm9p
ZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIHR5cGVBaGVhZEZpbmQo
S2V5Ym9hcmRFdmVudCYpOwogICAgIHZvaWQgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKIAogICAgIHZp
cnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3Vt
bWFyeUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQu
Y3BwCmluZGV4IGVjNmMzYTIwZmY5OWJhMmM5NDE0OTMzZWJkNmE4YTkwOGMzYTY4NDIuLjExMmQy
ZmQzNjI0YzE5ZDI4ODQ2Njc0ZDdjODg1NTU1MzE5NjAxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKQEAgLTEyNiwyOCArMTI2LDI5IEBAIHZvaWQgSFRN
TFN1bW1hcnlFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChldmVudC0+aXNLZXlib2Fy
ZEV2ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlkb3duRXZlbnQgJiYgdG9LZXlib2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigp
ID09ICJVKzAwMjAiKSB7CisgICAgICAgIGlmIChpczxLZXlib2FyZEV2ZW50PihldmVudCkpIHsK
KyAgICAgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQgPSBkb3duY2FzdDxLZXli
b2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlm
aWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAgICAgICAgICBzZXRBY3RpdmUodHJ1ZSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgLy8gTm8gc2V0RGVmYXVsdEhhbmRsZWQoKSAtIElFIGRpc3Bh
dGNoZXMgYSBrZXlwcmVzcyBpbiB0aGlzIGNhc2UuCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRvS2V5Ym9hcmRF
dmVudChldmVudCktPmNoYXJDb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoa2V5Ym9hcmRFdmVudC5jaGFyQ29kZSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSAnXHInOgogICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGNhc2UgJyAnOgogICAgICAg
ICAgICAgICAgICAgICAvLyBQcmV2ZW50IHNjcm9sbGluZyBkb3duIHRoZSBwYWdlLgotICAgICAg
ICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgICAg
ICAgICAga2V5Ym9hcmRFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQgJiYgdG9LZXli
b2FyZEV2ZW50KGV2ZW50KS0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMjAiKSB7CisgICAgICAg
ICAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQg
JiYga2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYWN0aXZlKCkpCiAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoU2ltdWxh
dGVkQ2xpY2soZXZlbnQpOwotICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDJhNGM1YzVhY2Yx
YWIzYzk2ZDRkYzUzNDljN2MyOTA1MjI3ZTZiYzUuLjM1ZmFlMTJjNjQ2NjI1NmY1ODlmNmIzMDkw
MzMyMmJmNWRiNWQyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcApAQCAtMjcwLDggKzI3MCw4IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+
ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJmYWNlVHlwZSB8fCBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQogICAgICAgICBmb3J3YXJkRXZlbnQoZXZl
bnQpOwotICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgZXZlbnQtPmlzQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQoKSkKLSAgICAgICAgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQodG9CZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudChldmVudCkpOworICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYg
aXM8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAgaGFuZGxlQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQoZG93bmNhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+KGV2ZW50
KSk7CiAKICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAppbmRleCAxZWJl
Yzc3YzExYzEwMDNhNTU5MzNkMDFkYTc3NDM1ZmQ2ZjIwMWQ0Li5jYzliZGM5OTBhNjg1NmYwYThk
NjNiOTFkZWJmNTkxNWFjMWUwZmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5j
cHAKQEAgLTM5OCw4ICszOTgsOCBAQCB2b2lkIEltYWdlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzaXplRXZlbnQpCiAgICAgICAgIG1fZG9jdW1l
bnQud2luZG93U2l6ZUNoYW5nZWQoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSkgewotICAgICAg
ICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50KCpldmVudCk7CisgICAgZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCAmJiBpczxNb3Vz
ZUV2ZW50PihldmVudCkpIHsKKyAgICAgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25j
YXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CiAgICAgICAgIG1fZG9jdW1lbnQuaW1hZ2VDbGlja2Vk
KG1vdXNlRXZlbnQueCgpLCBtb3VzZUV2ZW50LnkoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlSW5wdXRUeXBlLmNwcAppbmRleCBkMGUyNWJlMTkwN2UzYzkyZWFmZTM2ODM2ZDg4
MWQ2MmJmOGNiNTA4Li4yODlhOWVkMjVlYWNjNDJhZGZhOTBkZDA4OGRmNzllODM0OGI3YzY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcApAQCAtODksOCArODksOCBAQCB2
b2lkIEltYWdlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50KiBldmVudCkK
ICAgICBtX2NsaWNrTG9jYXRpb24gPSBJbnRQb2ludCgpOwogICAgIGlmIChldmVudC0+dW5kZXJs
eWluZ0V2ZW50KCkpIHsKICAgICAgICAgRXZlbnQmIHVuZGVybHlpbmdFdmVudCA9ICpldmVudC0+
dW5kZXJseWluZ0V2ZW50KCk7Ci0gICAgICAgIGlmICh1bmRlcmx5aW5nRXZlbnQuaXNNb3VzZUV2
ZW50KCkpIHsKLSAgICAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZl
bnQodW5kZXJseWluZ0V2ZW50KTsKKyAgICAgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KHVuZGVybHlp
bmdFdmVudCkpIHsKKyAgICAgICAgICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2Fz
dDxNb3VzZUV2ZW50Pih1bmRlcmx5aW5nRXZlbnQpOwogICAgICAgICAgICAgaWYgKCFtb3VzZUV2
ZW50LmlzU2ltdWxhdGVkKCkpCiAgICAgICAgICAgICAgICAgbV9jbGlja0xvY2F0aW9uID0gSW50
UG9pbnQobW91c2VFdmVudC5vZmZzZXRYKCksIG1vdXNlRXZlbnQub2Zmc2V0WSgpKTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IDE1NzAyNmQ4OWQyYTQwOGE4YjE1
MmQ1MTVkODVhYjAyZDY1ZDU4YzkuLjNiMjI3YWIwMGM0OTg0NjE2YmIwOGYxMjU4MjIzM2MxODZi
NzQ0MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2
b2lkIElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2ZW50KikKIAogYm9vbCBJbnB1dFR5cGU6OnNo
b3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50KQogewotICAgIHJldHVybiBldmVudC0+
aXNLZXlib2FyZEV2ZW50KCkgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJl
c3NFdmVudCAmJiB0b0tleWJvYXJkRXZlbnQoZXZlbnQpLT5jaGFyQ29kZSgpID09ICdccic7Cisg
ICAgcmV0dXJuIGlzPEtleWJvYXJkRXZlbnQ+KGV2ZW50KSAmJiBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGRvd25jYXN0PEtleWJvYXJkRXZlbnQ+KCpldmVu
dCkuY2hhckNvZGUoKSA9PSAnXHInOwogfQogCiBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4g
SW5wdXRUeXBlOjpmb3JtRm9yU3VibWlzc2lvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRp
YURvY3VtZW50LmNwcAppbmRleCA5ZjA3ZmEzZGRlYjllMDlkNDFkN2MyZTYzZjMzMTI3ZTgxMmZm
NmY0Li43ZGE5YmI4NDUwYWVhZTQyZmNkNTNjZTEyOGJiMTBjNjYwOGQ3NDUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKQEAgLTIwNCwxOSArMjA0LDE5IEBAIHZvaWQgTWVk
aWFEb2N1bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgaWYgKCFp
czxDb250YWluZXJOb2RlPih0YXJnZXROb2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIENvbnRh
aW5lck5vZGUmIHRhcmdldENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCp0YXJn
ZXROb2RlKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2
ZW50ICYmIGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkgeworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgJiYgaXM8S2V5Ym9hcmRFdmVudD4oZXZlbnQp
KSB7CiAgICAgICAgIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvID0gZGVzY2VuZGVudFZpZGVvRWxl
bWVudCh0YXJnZXRDb250YWluZXIpOwogICAgICAgICBpZiAoIXZpZGVvKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSB0b0tleWJv
YXJkRXZlbnQoZXZlbnQpOwotICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC0+a2V5SWRlbnRpZmll
cigpID09ICJVKzAwMjAiKSB7IC8vIHNwYWNlCisgICAgICAgIEtleWJvYXJkRXZlbnQmIGtleWJv
YXJkRXZlbnQgPSBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqZXZlbnQpOworICAgICAgICBpZiAo
a2V5Ym9hcmRFdmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAyMCIpIHsgLy8gc3BhY2UKICAg
ICAgICAgICAgIGlmICh2aWRlby0+cGF1c2VkKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodmlk
ZW8tPmNhblBsYXkoKSkKICAgICAgICAgICAgICAgICAgICAgdmlkZW8tPnBsYXkoKTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHZpZGVvLT5wYXVzZSgpOwotICAgICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBrZXlib2FyZEV2ZW50
LnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggZTE1MDE0OWJjMTQwOWIxYTcxNTUy
NWIxNzFlZTNiMGFhNjZkYmE0My4uN2E5ZmUxNDE2YjIzMTQ5YmExNzYwMDhkNjFiZDJiMjZmNzY1
N2JiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAt
MjA2LDcgKzIwNiw4IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCbHVyRXZlbnQo
KQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVu
dCogZXZlbnQpCiB7Ci0gICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50
ZXh0SW5wdXRFdmVudCAmJiBldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBUZXh0RXZlbnRJbnRl
cmZhY2VUeXBlICYmIHRvVGV4dEV2ZW50KGV2ZW50KS0+ZGF0YSgpID09ICJcbiIpIHx8IElucHV0
VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVudCk7CisgICAgcmV0dXJuIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBpczxUZXh0RXZlbnQ+KGV2
ZW50KSAmJiBkb3duY2FzdDxUZXh0RXZlbnQ+KCpldmVudCkuZGF0YSgpID09ICJcbiIpCisgICAg
ICAgIHx8IElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVudCk7CiB9CiAKIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZUlucHV0UmVu
ZGVyZXIoUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudFR5cGVzLmNwcAppbmRleCA5ZTgz
ZTYyZjk2N2JmMTZiMDliNGExMjYyZjY4YmI4ZTkxZTkzOTdhLi4yNjM4NjNiZTcwNjBjZDk1YWVk
NTk3OGQ5ZTNlYzA0ZTMyMDg4MDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50VHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAKQEAgLTE5Niw3ICsxOTYsNyBA
QCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJFbGVtZW50OjpNZWRpYUNvbnRyb2xWb2x1bWVTbGlk
ZXJFbGVtZW50KERvY3VtZW50JiBkb2N1bQogdm9pZCBNZWRpYUNvbnRyb2xWb2x1bWVTbGlkZXJF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBMZWZ0
IGJ1dHRvbiBpcyAwLiBSZWplY3RzIG1vdXNlIGV2ZW50cyBub3QgZnJvbSBsZWZ0IGJ1dHRvbi4K
LSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCktPmJ1
dHRvbigpKQorICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkgJiYgZG93bmNhc3Q8TW91c2VF
dmVudD4oKmV2ZW50KS5idXR0b24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFyZW5k
ZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCmluZGV4IGQ1YTQ1NmJhOTgzMmNmOWFkOTlkZTM5YzBjMGFkNDcwYjQ4MDI3
OTcuLjMyZjNhNTMzNGRjY2QzNmY5ODgyYzllODE2YWI2OTEyOGVhODFlZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAg
LTIyMSw4ICsyMjEsOCBAQCB2b2lkIE1lZGlhQ29udHJvbFBhbmVsRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgTWVkaWFDb250cm9sRGl2RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiAKLSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVu
dCgpKSB7Ci0gICAgICAgIExheW91dFBvaW50IGxvY2F0aW9uID0gdG9Nb3VzZUV2ZW50KGV2ZW50
KS0+YWJzb2x1dGVMb2NhdGlvbigpOworICAgIGlmIChpczxNb3VzZUV2ZW50PihldmVudCkpIHsK
KyAgICAgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24gPSBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZl
bnQpLmFic29sdXRlTG9jYXRpb24oKTsKICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKSB7CiAg
ICAgICAgICAgICBzdGFydERyYWcobG9jYXRpb24pOwogICAgICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CkBAIC0zMzcsMTIgKzMzNywxMiBAQCBSZW5kZXJQdHI8UmVuZGVyRWxl
bWVudD4gTWVkaWFDb250cm9sVm9sdW1lU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxl
bWVudAogCiB2b2lkIE1lZGlhQ29udHJvbFZvbHVtZVNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91
c2VFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQp
CisgICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkgfHwgZXZlbnQtPnR5cGUoKSAhPSBldmVu
dE5hbWVzKCkubW91c2VvdXRFdmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUG9vciBt
YW4ncyBtb3VzZWxlYXZlIGV2ZW50IGRldGVjdGlvbi4KLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2
ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKLSAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdl
dCA9IG1vdXNlRXZlbnQtPnJlbGF0ZWRUYXJnZXQoKTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2
ZW50ID0gZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKKyAgICBFdmVudFRhcmdldCogcmVs
YXRlZFRhcmdldCA9IG1vdXNlRXZlbnQucmVsYXRlZFRhcmdldCgpOwogICAgIGlmICghcmVsYXRl
ZFRhcmdldCB8fCAhcmVsYXRlZFRhcmdldC0+dG9Ob2RlKCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtODUxLDcgKzg1MSw3IEBAIFBhc3NSZWZQdHI8TWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50
PiBNZWRpYUNvbnRyb2xUaW1lbGluZUVsZW1lbnQ6OmNyZWF0ZShEb2N1CiB2b2lkIE1lZGlhQ29u
dHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7
CiAgICAgLy8gTGVmdCBidXR0b24gaXMgMC4gUmVqZWN0cyBtb3VzZSBldmVudHMgbm90IGZyb20g
bGVmdCBidXR0b24uCi0gICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZl
bnQoZXZlbnQpLT5idXR0b24oKSkKKyAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpICYmIGRv
d25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghcmVuZGVyZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9scy5jcHAKaW5kZXggZmExYmViZjQzNjAzMzAwMjhmMGQ1YTAyNjU3NDI1Mzc3NmQ4YmIx
ZS4uNGQzZWNmODBkMjkyZmEyNTUzNzViZGY0YTZhZjNkNDllNDMwYjYzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5jcHAKQEAgLTM2Niw5ICszNjYsOSBA
QCB2b2lkIE1lZGlhQ29udHJvbHM6OnN0b3BIaWRlRnVsbHNjcmVlbkNvbnRyb2xzVGltZXIoKQog
CiBib29sIE1lZGlhQ29udHJvbHM6OmNvbnRhaW5zUmVsYXRlZFRhcmdldChFdmVudCogZXZlbnQp
CiB7Ci0gICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2
ZW50PihldmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFdmVudFRhcmdldCogcmVs
YXRlZFRhcmdldCA9IHRvTW91c2VFdmVudChldmVudCktPnJlbGF0ZWRUYXJnZXQoKTsKKyAgICBF
dmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCku
cmVsYXRlZFRhcmdldCgpOwogICAgIGlmICghcmVsYXRlZFRhcmdldCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBjb250YWlucyhyZWxhdGVkVGFyZ2V0LT50b05vZGUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sc0FwcGxlLmNwcApp
bmRleCAxMTk2YTcxODc2NjBiN2UzNTAyN2Q0NTY1M2MzOTM5MDA2M2VmYzNlLi44Yzg0ZGE3M2Jm
NjYwMGY0NWMxNDJiNjMzNGVhYTYzNGM0M2Q4ZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzQXBwbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHNBcHBsZS5jcHAKQEAgLTU4OCwxMCArNTg4LDEwIEBA
IHZvaWQgTWVkaWFDb250cm9sc0FwcGxlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50CiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNsaWNrRXZlbnQpCiAgICAgICAgIG1fbWVkaWFDb250cm9scy0+aGFuZGxlQ2xp
Y2tFdmVudChldmVudCk7Ci0gICAgZWxzZSBpZiAoKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVl
bEV2ZW50KSAmJiBldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBXaGVlbEV2ZW50SW50ZXJmYWNl
VHlwZSkgewotICAgICAgICBXaGVlbEV2ZW50KiB3aGVlbEV2ZW50ID0gdG9XaGVlbEV2ZW50KGV2
ZW50KTsKLSAgICAgICAgaWYgKG1fbWVkaWFDb250cm9scy0+c2hvdWxkQ2xvc2VkQ2FwdGlvbnND
b250YWluZXJQcmV2ZW50UGFnZVNjcm9sbGluZyh3aGVlbEV2ZW50LT53aGVlbERlbHRhWSgpKSkK
LSAgICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOworICAgIGVsc2UgaWYgKChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkgJiYgaXM8V2hlZWxFdmVudD4oZXZlbnQpKSB7
CisgICAgICAgIFdoZWVsRXZlbnQmIHdoZWVsRXZlbnQgPSBkb3duY2FzdDxXaGVlbEV2ZW50Pigq
ZXZlbnQpOworICAgICAgICBpZiAobV9tZWRpYUNvbnRyb2xzLT5zaG91bGRDbG9zZWRDYXB0aW9u
c0NvbnRhaW5lclByZXZlbnRQYWdlU2Nyb2xsaW5nKHdoZWVsRXZlbnQud2hlZWxEZWx0YVkoKSkp
CisgICAgICAgICAgICB3aGVlbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcApp
bmRleCA4MWMyMDY4MGQ5MjVjYTgyMDI4NWIyZmY1NjNkZjJhNTFiMmFjMGNiLi4yMmJlNjNiNDc1
ZTA5NTEyNzU2NzhiODQ4ZmJhYjVkMzI4NjQ5ZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTMzMyw3ICszMzMsNyBAQCB2
b2lkIFNsaWRlclRodW1iRWxlbWVudDo6c3RvcERyYWdnaW5nKCkKICNpZiAhUExBVEZPUk0oSU9T
KQogdm9pZCBTbGlkZXJUaHVtYkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2
ZW50KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CisgICAgaWYgKCFpczxN
b3VzZUV2ZW50PihldmVudCkpIHsKICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ3LDkgKzM0Nyw5
IEBAIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZl
bnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgIGJvb2wgaXNMZWZ0QnV0dG9uID0gbW91c2VF
dmVudC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSA9IGV2ZW50LT50eXBlKCk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRv
d25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgYm9vbCBpc0xlZnRCdXR0b24gPSBtb3Vz
ZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b247CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUgPSBtb3VzZUV2ZW50LnR5cGUoKTsKIAogICAgIC8vIFdlIGludGVudGlvbmFsbHkg
ZG8gbm90IGNhbGwgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCkgaGVyZSBiZWNhdXNlCiAgICAg
Ly8gTWVkaWFDb250cm9sVGltZWxpbmVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKCkgd2Fu
dHMgdG8gaGFuZGxlIHRoZXNlCkBAIC0zNjIsMTEgKzM2MiwxMSBAQCB2b2lkIFNsaWRlclRodW1i
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVy
bjsKICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZl
bnQpIHsKICAgICAgICAgaWYgKG1faW5EcmFnTW9kZSkKLSAgICAgICAgICAgIHNldFBvc2l0aW9u
RnJvbVBvaW50KG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSk7CisgICAgICAgICAgICBz
ZXRQb3NpdGlvbkZyb21Qb2ludChtb3VzZUV2ZW50LmFic29sdXRlTG9jYXRpb24oKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihldmVudCk7CisgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoJm1v
dXNlRXZlbnQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1NwaW5CdXR0b25FbGVtZW50LmNwcAppbmRleCA1MDNiMzViNmJmNWE3ODE1ZGQ3MWU3YTljNjE5
OGFkYzg3MjAwNmU1Li4zOGE0MGE0M2RkNjg1NTgxNjAyOGQxY2RiZThhZGY0Yzk2YjJiNDU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuY3Bw
CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OndpbGxEZXRhY2hSZW5k
ZXJlcnMoKQogCiB2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgIGlm
ICghaXM8TW91c2VFdmVudD4oZXZlbnQpKSB7CiAgICAgICAgIGlmICghZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkpCiAgICAgICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihldmVudCk7CiAgICAgICAgIHJldHVybjsKQEAgLTg2LDkgKzg2LDkgQEAgdm9pZCBTcGluQnV0
dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gdG9Nb3VzZUV2ZW50
KGV2ZW50KTsKLSAgICBJbnRQb2ludCBsb2NhbCA9IHJvdW5kZWRJbnRQb2ludChib3gtPmFic29s
dXRlVG9Mb2NhbChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMp
KTsKLSAgICBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25F
dmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgTW91c2VF
dmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCk7CisgICAgSW50
UG9pbnQgbG9jYWwgPSByb3VuZGVkSW50UG9pbnQoYm94LT5hYnNvbHV0ZVRvTG9jYWwobW91c2VF
dmVudC5hYnNvbHV0ZUxvY2F0aW9uKCksIFVzZVRyYW5zZm9ybXMpKTsKKyAgICBpZiAobW91c2VF
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIG1vdXNlRXZlbnQu
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpZiAoYm94LT5waXhlbFNuYXBwZWRC
b3JkZXJCb3hSZWN0KCkuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgICAgICAvLyBUaGUgZm9s
bG93aW5nIGZ1bmN0aW9ucyBvZiBIVE1MSW5wdXRFbGVtZW50IG1heSBydW4gSmF2YVNjcmlwdAog
ICAgICAgICAgICAgLy8gY29kZSB3aGljaCBkZXRhY2hlcyB0aGlzIHNoYWRvdyBub2RlLiBXZSBu
ZWVkIHRvIHRha2UgYSByZWZlcmVuY2UKQEAgLTEwNywxMSArMTA3LDExIEBAIHZvaWQgU3BpbkJ1
dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgICAgICAgICBkb1N0ZXBBY3Rpb24obV91cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVk
KCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1vdXNlRXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIG1vdXNlRXZlbnQtPmJ1dHRvbigpID09IExlZnRCdXR0
b24pCisgICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2V1cEV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikKICAgICAgICAg
c3RvcFJlcGVhdGluZ1RpbWVyKCk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICBlbHNlIGlmIChtb3VzZUV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKICAgICAgICAgaWYgKGJveC0+cGl4
ZWxTbmFwcGVkQm9yZGVyQm94UmVjdCgpLmNvbnRhaW5zKGxvY2FsKSkgewogICAgICAgICAgICAg
aWYgKCFtX2NhcHR1cmluZykgewogICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLmZyYW1lKCkpIHsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lkIFNwaW5CdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEhUTUxEaXZF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICBpZiAoIW1vdXNlRXZlbnQu
ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoJm1vdXNlRXZlbnQpOwogfQogCiB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojp3aWxsT3Bl
blBvcHVwKCkKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpmb3J3
YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmICghcmVuZGVyQm94KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSAhPSBXaGVlbEV2ZW50SW50
ZXJmYWNlVHlwZSkKKyAgICBpZiAoIWlzPFdoZWVsRXZlbnQ+KGV2ZW50KSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFtX3NwaW5CdXR0b25Pd25lcikKQEAgLTE1NSw3ICsxNTUsNyBAQCB2
b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlm
ICghbV9zcGluQnV0dG9uT3duZXItPnNob3VsZFNwaW5CdXR0b25SZXNwb25kVG9XaGVlbEV2ZW50
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb1N0ZXBBY3Rpb24odG9XaGVlbEV2ZW50KGV2
ZW50KS0+d2hlZWxEZWx0YVkoKSk7CisgICAgZG9TdGVwQWN0aW9uKGRvd25jYXN0PFdoZWVsRXZl
bnQ+KCpldmVudCkud2hlZWxEZWx0YVkoKSk7CiAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDE5MmY4ZTAwNjNmYTVhMDhlOGY0ODIxZmRlZGUw
M2ZmZTIwYWQwMWMuLjdiMjk1M2Q4NzhiOTBhZDMyMWZhNWRkMmIyZjFiMDc0ZWI2YmRmNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAg
Ly8gT24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1lbnUsIGlmIG5lZWRlZAogICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgp
KTsKLSAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vk
b3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCkt
PmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoaW5wdXQgJiYgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgaXM8TW91c2VFdmVudD4oZXZlbnQp
ICYmIGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpldmVudCkuYnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikg
ewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwogI2lm
ICFQTEFURk9STShJT1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQo
ZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAm
JiBkb3duY2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGlu
ZygpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgp
KSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01v
dXNlRXZlbnRzRWxlbWVudCh0aGlzKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgfQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHRvTW91c2VFdmVudChldmVudCkt
PmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3duY2Fz
dDxNb3VzZUV2ZW50PigqZXZlbnQpLmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAg
aWYgKG1fY2FwdHVyaW5nKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQoKS5mcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLnNl
dENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudChudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggODU2OTA5Njhk
ZWM0YWIwOGM5Yjg4NGE5MzhjMWE0NjkxZDE4ZWRhOS4uMDMzYWFjODNlMDczOTljYjJmOTAwNjI1
MjNlNmMwNDU3NmM5ZmI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTI4NCwxMiArMjg0LDEyIEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0
b3I8Q29udGV4dE1lCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlzcGF0Y2hFdmVudEFz
Q29udGV4dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVO
VVMpICYmIFVTRShBQ0NFU1NJQklMSVRZX0NPTlRFWFRfTUVOVVMpCi0gICAgaWYgKCFldmVudCB8
fCAhZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghZXZlbnQgfHwgIWlzPE1vdXNlRXZl
bnQ+KGV2ZW50KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnQt
PnRhcmdldCgpLT50b05vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotICAgIE1vdXNlRXZlbnQq
IG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoZXZlbnQpOwotICAgIEludFBvaW50IG1vdXNlUG9p
bnQgPSBJbnRQb2ludChtb3VzZUV2ZW50LT5jbGllbnRYKCksIG1vdXNlRXZlbnQtPmNsaWVudFko
KSk7CisgICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9IGRvd25jYXN0PE1vdXNlRXZlbnQ+KCpl
dmVudCk7CisgICAgSW50UG9pbnQgbW91c2VQb2ludCA9IEludFBvaW50KG1vdXNlRXZlbnQuY2xp
ZW50WCgpLCBtb3VzZUV2ZW50LmNsaWVudFkoKSk7CiAKICAgICBtX2Zyb250ZW5kUGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCkuc2hvd0NvbnRleHRNZW51QXQoZnJhbWUsIG1vdXNlUG9pbnQp
OwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAppbmRleCBhM2Y1OTA3ZTRkNDdmMjA0YWFiMzk0YjhjMDIzYjhlNWRkMzEyOWNhLi43NmU4ODFj
ZTI4ZWJlN2VjNzJkN2MyMjBlMmQwMTRkNzcxOGY1OGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsMTAgKzE1MCwxMCBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGV4dE1lbnU+IENvbnRleHRNZW51Q29udHJvbGxlcjo6bWF5YmVDcmVh
dGVDb250ZXh0TWVudShFdmVudAogewogICAgIEFTU0VSVChldmVudCk7CiAgICAgCi0gICAgaWYg
KCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTW91c2VFdmVudCYgbW91c2VFdmVudCA9
IHRvTW91c2VFdmVudCgqZXZlbnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3du
Y2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1vdXNl
RXZlbnQuYWJzb2x1dGVMb2NhdGlvbigpKTsKIAogICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFy
Z2V0KCktPnRvTm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDMz
YTlhNTM4OWJjYzlmNDM4MTc1NjdmMzM3YWI4YWQ2ODBhMzJkMjcuLjM4Y2ZhNzI5ZWJhM2U1Y2Fm
NTJiODVmMDRkZWVjZWZjNzg3ZTk1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKQEAgLTM1MjMsNyArMzUyMyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5w
dXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlCiB7CiAgICAg
Ly8gUGxhdGZvcm1zIHNob3VsZCBkaWZmZXJlbnRpYXRlIHJlYWwgY29tbWFuZHMgbGlrZSBzZWxl
Y3RBbGwgZnJvbSB0ZXh0IGlucHV0IGluIGRpc2d1aXNlIChsaWtlIGluc2VydE5ld2xpbmUpLAog
ICAgIC8vIGFuZCBhdm9pZCBkaXNwYXRjaGluZyB0ZXh0IGlucHV0IGV2ZW50cyBmcm9tIGtleWRv
d24gZGVmYXVsdCBoYW5kbGVycy4KLSAgICBBU1NFUlQoIXVuZGVybHlpbmdFdmVudCB8fCAhdW5k
ZXJseWluZ0V2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSB8fCB0b0tleWJvYXJkRXZlbnQodW5kZXJs
eWluZ0V2ZW50KS0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKKyAgICBB
U1NFUlQoIXVuZGVybHlpbmdFdmVudCB8fCAhaXM8S2V5Ym9hcmRFdmVudD4odW5kZXJseWluZ0V2
ZW50KSB8fCBkb3duY2FzdDxLZXlib2FyZEV2ZW50PigqdW5kZXJseWluZ0V2ZW50KS50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdl
dDsKICAgICBpZiAodW5kZXJseWluZ0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggMTQ5MDYwYWFhNTZiOTM0ZTFjOTlm
YWMwYzA3MDI0ZTg3Y2Y4YjFiNS4uYjQ2NGNjNzMzMDRjMTY4YzM1OTgxMTQzYmIyZThkYTRjYjZm
OTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCkBAIC01OTAsOSArNTkwLDkgQEAgYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
aXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW4KICAg
ICAgICAgJiYgaW5kaWNhdG9yUmVjdC5jb250YWlucyhwb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihNb3VzZUV2ZW50
KiBldmVudCkgY29uc3QKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5VbmF2YWlsYWJs
ZVBsdWdpbkluZGljYXRvcihjb25zdCBNb3VzZUV2ZW50JiBldmVudCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGFic29sdXRlVG9Mb2NhbChldmVu
dC0+YWJzb2x1dGVMb2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CisgICAgcmV0dXJuIGlzSW5V
bmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcihhYnNvbHV0ZVRvTG9jYWwoZXZlbnQuYWJzb2x1dGVM
b2NhdGlvbigpLCBVc2VUcmFuc2Zvcm1zKSk7CiB9CiAKIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OmhhbmRsZVVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqIGV2ZW50KQpA
QCAtNjAwLDIxICs2MDAsMjEgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFuZGxlVW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKCFzaG91
bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihkb2N1bWVudCgpLCBtX3BsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFldmVudC0+
aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFpczxNb3VzZUV2ZW50PihldmVudCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSB0b01vdXNlRXZlbnQoZXZl
bnQpOworICAgIE1vdXNlRXZlbnQmIG1vdXNlRXZlbnQgPSBkb3duY2FzdDxNb3VzZUV2ZW50Pigq
ZXZlbnQpOwogICAgIEhUTUxQbHVnSW5FbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBs
dWdJbkVsZW1lbnQ+KGZyYW1lT3duZXJFbGVtZW50KCkpOwotICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgaWYgKG1vdXNlRXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpID09IExlZnRC
dXR0b24pIHsKICAgICAgICAgbV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNh
dG9yID0gaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpOwogICAgICAg
ICBpZiAobV9tb3VzZURvd25XYXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKSB7CiAgICAg
ICAgICAgICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLnNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxl
bWVudCgmZWxlbWVudCk7CiAgICAgICAgICAgICBlbGVtZW50LnNldElzQ2FwdHVyaW5nTW91c2VF
dmVudHModHJ1ZSk7CiAgICAgICAgICAgICBzZXRVbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklz
UHJlc3NlZCh0cnVlKTsKICAgICAgICAgfQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KLSAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIHRvTW91
c2VFdmVudChldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICBpZiAobW91c2VF
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaWYgKG1fdW5hdmFpbGFibGVQbHVnaW5J
bmRpY2F0b3JJc1ByZXNzZWQpIHsKICAgICAgICAgICAgIGZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50KG51bGxwdHIpOwogICAgICAgICAgICAgZWxl
bWVudC5zZXRJc0NhcHR1cmluZ01vdXNlRXZlbnRzKGZhbHNlKTsKQEAgLTYyNyw5ICs2MjcsOSBA
QCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpoYW5kbGVVbmF2YWlsYWJsZVBsdWdpbkluZGlj
YXRvckV2ZW50KEV2ZW50KiBldmVudCkKICAgICAgICAgbV9tb3VzZURvd25XYXNJblVuYXZhaWxh
YmxlUGx1Z2luSW5kaWNhdG9yID0gZmFsc2U7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogICAgIH0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpIHsKKyAgICBpZiAobW91c2VFdmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlbW92ZUV2ZW50KSB7CiAgICAgICAgIHNldFVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9y
SXNQcmVzc2VkKG1fbW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBsdWdpbkluZGljYXRvciAmJiBp
c0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IobW91c2VFdmVudCkpOwotICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgbW91c2VFdmVudC5zZXREZWZhdWx0SGFu
ZGxlZCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RW1iZWRkZWRPYmplY3QuaAppbmRleCA0ZDM0MmQ3ODQ0MTBiN2E3MmU3MTEzYjZiZDgyYTgxYTZl
NzVkNGE1Li4yYmZiZWMxODFjOGFiYzQ4NDM0YTEzZTNmYjE1NDFlMmNiMmRiN2QzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaApAQCAtODQs
NyArODQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9s
bExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBF
bGVtZW50Kiogc3RvcEVsZW1lbnQpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCBzZXRVbmF2
YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3NlZChib29sKTsKLSAgICBib29sIGlzSW5VbmF2
YWlsYWJsZVBsdWdpbkluZGljYXRvcihNb3VzZUV2ZW50KikgY29uc3Q7CisgICAgYm9vbCBpc0lu
VW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3IoY29uc3QgTW91c2VFdmVudCYpIGNvbnN0OwogICAg
IGJvb2wgaXNJblVuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9yKGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKICAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0
JiBpbmRpY2F0b3JSZWN0LCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZsb2F0UmVj
dCYgYXJyb3dSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgpIGNvbnN0Owog
ICAgIExheW91dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JCb3VuZHMoY29uc3QgTGF5
b3V0UG9pbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwCmluZGV4IGRlMzcyNmQyYzM2ZWQzYjVhNWFiYmNkOGJk
ZTMwZmI2NmI5ZTZkY2QuLjg3MGE1NDE0MDRkMWM1ZTBiMjg5MWZkZDIzMmZlYmVjNGQ0NTg1YTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbmFwc2hvdHRlZFBs
dWdJbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNuYXBzaG90dGVk
UGx1Z0luLmNwcApAQCAtMTU1LDEwICsxNTUsMTAgQEAgQ3Vyc29yRGlyZWN0aXZlIFJlbmRlclNu
YXBzaG90dGVkUGx1Z0luOjpnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBDdXIK
IAogdm9pZCBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbjo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50
KQogewotICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgIGlmICghaXM8TW91c2VF
dmVudD4oZXZlbnQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBNb3VzZUV2ZW50KiBtb3VzZUV2
ZW50ID0gdG9Nb3VzZUV2ZW50KGV2ZW50KTsKKyAgICBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50ID0g
ZG93bmNhc3Q8TW91c2VFdmVudD4oKmV2ZW50KTsKIAogICAgIC8vIElmIHdlJ3JlIGEgc25hcHNo
b3R0ZWQgcGx1Z2luLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhY3RpdmF0ZSBvbgogICAgIC8v
IGNsaWNrcyBldmVuIGlmIHRoZSBwYWdlIGlzIHByZXZlbnRpbmcgb3VyIGRlZmF1bHQgYmVoYXZp
b3VyLiBPdGhlcndpc2UKQEAgLTE2OCwyMCArMTY4LDIwIEBAIHZvaWQgUmVuZGVyU25hcHNob3R0
ZWRQbHVnSW46OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKICAgICAvLyBldmVudC4gVGhlIGNv
ZGUgYmVsb3cgaXMgbm90IGNvbXBsZXRlbHkgZm9vbHByb29mLCBidXQgdGhlIHdvcnN0IHRoYXQK
ICAgICAvLyBjb3VsZCBoYXBwZW4gaXMgdGhhdCBhIHNuYXBzaG90dGVkIHBsdWdpbiByZXN0YXJ0
cy4KIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50
KQorICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVu
dCkKICAgICAgICAgbV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiA9IGZhbHNlOwogCi0gICAg
aWYgKG1vdXNlRXZlbnQtPmJ1dHRvbigpICE9IExlZnRCdXR0b24pCisgICAgaWYgKG1vdXNlRXZl
bnQuYnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgKG1faXNQb3RlbnRpYWxN
b3VzZUFjdGl2YXRpb24gJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50KSkgeworICAgIGlmIChtb3VzZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tF
dmVudCB8fCAobV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiAmJiBtb3VzZUV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSkgewogICAgICAgICBtX2lzUG90ZW50aWFs
TW91c2VBY3RpdmF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgY2xpY2tXYXNPbk92ZXJsYXkg
PSBwbHVnSW5JbWFnZUVsZW1lbnQoKS5wYXJ0T2ZTbmFwc2hvdE92ZXJsYXkoZXZlbnQtPnRhcmdl
dCgpLT50b05vZGUoKSk7Ci0gICAgICAgIHBsdWdJbkltYWdlRWxlbWVudCgpLnVzZXJEaWRDbGlj
a1NuYXBzaG90KG1vdXNlRXZlbnQsICFjbGlja1dhc09uT3ZlcmxheSk7Ci0gICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgYm9vbCBjbGlja1dhc09uT3Zl
cmxheSA9IHBsdWdJbkltYWdlRWxlbWVudCgpLnBhcnRPZlNuYXBzaG90T3ZlcmxheShtb3VzZUV2
ZW50LnRhcmdldCgpLT50b05vZGUoKSk7CisgICAgICAgIHBsdWdJbkltYWdlRWxlbWVudCgpLnVz
ZXJEaWRDbGlja1NuYXBzaG90KCZtb3VzZUV2ZW50LCAhY2xpY2tXYXNPbk92ZXJsYXkpOworICAg
ICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfSBlbHNlIGlmIChtb3Vz
ZUV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHsKICAgICAgICAg
bV9pc1BvdGVudGlhbE1vdXNlQWN0aXZhdGlvbiA9IHRydWU7Ci0gICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBtb3VzZUV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKaW5kZXggZjY3NTE4YmE2YzYxOTllMWFhZmMxY2IxYzI4NmJhN2EzMmMxYmQw
OC4uZTQ5MzI5MjdkM2ZkMzJjMTY2Yzk4MjU0YWFjNjMyNmNhZjEwMjJlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtODkyLDgg
Kzg5Miw4IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogCiAg
ICAgY29uc3QgV2ViRXZlbnQqIGN1cnJlbnRFdmVudCA9IFdlYlBhZ2U6OmN1cnJlbnRFdmVudCgp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJFdmVudD4gc2ltdWxhdGVkV2ViRXZlbnQ7Ci0gICAg
aWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiB0b01vdXNlRXZlbnQoZXZlbnQpLT5pc1NpbXVs
YXRlZCgpKSB7Ci0gICAgICAgIHNpbXVsYXRlZFdlYkV2ZW50ID0gY3JlYXRlV2ViRXZlbnQodG9N
b3VzZUV2ZW50KGV2ZW50KSk7CisgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSAmJiBkb3du
Y2FzdDxNb3VzZUV2ZW50PigqZXZlbnQpLmlzU2ltdWxhdGVkKCkpIHsKKyAgICAgICAgc2ltdWxh
dGVkV2ViRXZlbnQgPSBjcmVhdGVXZWJFdmVudChkb3duY2FzdDxNb3VzZUV2ZW50PihldmVudCkp
OwogICAgICAgICBjdXJyZW50RXZlbnQgPSBzaW11bGF0ZWRXZWJFdmVudC5nZXQoKTsKICAgICB9
CiAgICAgaWYgKCFjdXJyZW50RXZlbnQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>