<?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>175028</bug_id>
          
          <creation_ts>2017-08-01 09:11:34 -0700</creation_ts>
          <short_desc>Use references rather than pointers for register/unregister functions, and more</short_desc>
          <delta_ts>2019-01-22 09:57:22 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1333781</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-01 09:11:34 -0700</bug_when>
    <thetext>Use references rather than pointers for register/unregister functions, and more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333782</commentid>
    <comment_count>1</comment_count>
      <attachid>316861</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-01 09:12:35 -0700</bug_when>
    <thetext>Created attachment 316861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1333783</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-01 09:12:58 -0700</bug_when>
    <thetext>Current patch compiles on Mac, but likely not on iOS, GTK, WPE, Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344839</commentid>
    <comment_count>3</comment_count>
      <attachid>319727</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-02 12:14:30 -0700</bug_when>
    <thetext>Created attachment 319727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345154</commentid>
    <comment_count>4</comment_count>
      <attachid>319838</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 22:32:38 -0700</bug_when>
    <thetext>Created attachment 319838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345158</commentid>
    <comment_count>5</comment_count>
      <attachid>319840</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 22:55:24 -0700</bug_when>
    <thetext>Created attachment 319840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345159</commentid>
    <comment_count>6</comment_count>
      <attachid>319841</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-03 22:58:10 -0700</bug_when>
    <thetext>Created attachment 319841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345175</commentid>
    <comment_count>7</comment_count>
      <attachid>319843</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-04 00:04:47 -0700</bug_when>
    <thetext>Created attachment 319843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345221</commentid>
    <comment_count>8</comment_count>
      <attachid>319854</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-04 09:26:28 -0700</bug_when>
    <thetext>Created attachment 319854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345320</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-04 20:34:37 -0700</bug_when>
    <thetext>Need help getting this to compile on iOS. The EWS log does not include the compile error I missed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347274</commentid>
    <comment_count>10</comment_count>
      <attachid>320401</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-10 13:29:01 -0700</bug_when>
    <thetext>Created attachment 320401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496270</commentid>
    <comment_count>11</comment_count>
      <attachid>359623</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-01-19 14:05:08 -0800</bug_when>
    <thetext>Created attachment 359623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496347</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-01-20 12:36:21 -0800</bug_when>
    <thetext>Looks like this compiles, passes all tests, so ready to review and land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496436</commentid>
    <comment_count>13</comment_count>
      <attachid>359623</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-01-20 16:23:02 -0800</bug_when>
    <thetext>Comment on attachment 359623
Patch

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

I get the sense you were holding back from making more changes to keep this patch focused on the task at hand. I know I had difficulty keeping myself from commenting on other nits. I couldn’t help myself in the few comments I did make. Oops! Feel free to disregard.

&gt; Source/WebCore/dom/Document.h:1600
&gt; +    void buildAccessKeyMap(TreeScope&amp; root);

Parameter name doesn’t add much value to me :/

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:65
&gt; +    for (TextIterator markedText(&amp;range); !markedText.atEnd(); markedText.advance()) {

Ok as-is. Be a bit more idiomatic looking if we use assignment notation to invoke the constructor when initializing markedText.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:104
&gt; +    for (TextIterator markedText(&amp;range); !markedText.atEnd(); markedText.advance()) {

Ditto.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:117
&gt; +    for (TextIterator markedText(&amp;range); !markedText.atEnd(); markedText.advance()) {

Ditto

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:128
&gt; +    for (TextIterator markedText(&amp;range); !markedText.atEnd(); markedText.advance()) {

Ditto

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:138
&gt; +    for (TextIterator markedText(&amp;range); !markedText.atEnd(); markedText.advance()) {

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496617</commentid>
    <comment_count>14</comment_count>
      <attachid>359623</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-01-21 10:58:20 -0800</bug_when>
    <thetext>Comment on attachment 359623
Patch

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

&gt;&gt; Source/WebCore/dom/Document.h:1600
&gt;&gt; +    void buildAccessKeyMap(TreeScope&amp; root);
&gt; 
&gt; Parameter name doesn’t add much value to me :/

Fixed.

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.cpp:65
&gt;&gt; +    for (TextIterator markedText(&amp;range); !markedText.atEnd(); markedText.advance()) {
&gt; 
&gt; Ok as-is. Be a bit more idiomatic looking if we use assignment notation to invoke the constructor when initializing markedText.

I think the semantics here are initialization and not assignment, so it’s probably not the right thing to do. If we did want to do it, we’d have to change the TextIterator constructor to no longer be marked &quot;explicit&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496618</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-01-21 11:01:30 -0800</bug_when>
    <thetext>Committed r240237: &lt;https://trac.webkit.org/changeset/240237&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496619</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-21 11:02:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/47431526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496624</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-01-21 11:52:42 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #15)
&gt; Committed r240237: &lt;https://trac.webkit.org/changeset/240237&gt;

Reverted the Xcode project changes here:

Committed r240239: &lt;https://trac.webkit.org/changeset/240239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496800</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-01-22 09:57:22 -0800</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #17)
&gt; Reverted the Xcode project changes here:
&gt; 
&gt; Committed r240239: &lt;https://trac.webkit.org/changeset/240239&gt;

Thanks David; I just let Xcode update the file and didn’t realize there was version skew.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316861</attachid>
            <date>2017-08-01 09:12:35 -0700</date>
            <delta_ts>2017-09-02 12:14:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170801091234.patch</filename>
            <type>text/plain</type>
            <size>257573</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwMDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQwYTMxNWFhYjQyOGFm
ZTRmNTFkMDI0NmNlM2RmN2UzMjEzZDhmNC4uYjhhY2M5OWE1NDdkNDk1ZDg4YzU5ZDZjZDVkMmUw
OWU3ZWQ1MDAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA4LTAxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOC0wMSAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXZWJJRExdIFN3YXAgYSBj
dXN0b20gYXR0cmlidXRlIGZvciBhIGN1c3RvbSBtYXJrIGZ1bmN0aW9uIGZvciBIVE1MVGVtcGxh
dGVFbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcxNTJhODRjMWQ3NmY0OGNiNjg2YWFhZTM1OTZlY2Q5NTRh
ZDA2ZDkuLmEzNDU1ZWViNDJhNTQ4M2ZhZmU0NGYzNjllMDQzMGI2YmQzNzM5ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTAgQEAKKzIwMTctMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50ZXJzIGZvciBy
ZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDE3LTA4LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBQYXJ0IDEgb2Y6IFJlbmFtZSBEYXRhYmFzZVByb2Nlc3Mg
dG8gU3RvcmFnZVByb2Nlc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNjNhODhl
ZWYxNTY2NGI1Mzk1ZjI4OWE4MWZhOWJjYTQ0ZTk2ZjU5My4uNDljZGE0MGViYTM1NmI1NDVmYzRl
NzZjM2UzMzFjNGI1ZTY1NzJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEwIEBACisyMDE3LTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIv
dW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKwogMjAxNy0wNy0yOCAgSmVyZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIFdlYiBwcmVmaXggZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW4g
YW5kIFdlYlBsYXliYWNrU2Vzc2lvbiBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCmluZGV4IDFjNTdmM2I5YjBiNjM3
MGM4YTFjYWY3MmEyNGQyMjFlZjcxMzdmZWEuLmVlMWUxYzY4OTEyNjhiZGYxZWVhNGY0N2RjMjZm
YTQ4NGFmMzE4YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
QXBwbGVQYXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5
L0FwcGxlUGF5U2Vzc2lvbi5jcHAKQEAgLTY5NCw3ICs2OTQsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBBcHBsZVBheVNlc3Npb246OmJlZ2luKCkKIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6QWN0aXZl
OwogCi0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0
eSgqdGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtODAxLDcgKzgwMSw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVQYXltZW50KEFwcGxlUGF5UGF5
bWVudEF1dGhvcml6YXRpb25SCiAgICAgfQogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0
ZWQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTExOTEsNyArMTE5MSw3IEBA
IGJvb2wgQXBwbGVQYXlTZXNzaW9uOjppc0ZpbmFsU3RhdGUoKSBjb25zdAogdm9pZCBBcHBsZVBh
eVNlc3Npb246OmRpZFJlYWNoRmluYWxTdGF0ZSgpCiB7CiAgICAgQVNTRVJUKGlzRmluYWxTdGF0
ZSgpKTsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHlPd25lci5jcHAKaW5kZXggZmNjOTNlMjUxYjAyNjdhMTliY2U4MzYyY2E2NDFl
N2YxNmMzNmQwZC4uMTQ5MTNkZTlkNmY3MmE3OTE0ZmIyYzhmYzYxNGMzODJiZTJhNzM2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKQEAg
LTE5OCw3ICsxOTgsNyBAQCB2b2lkIEZldGNoQm9keU93bmVyOjpsb2FkQmxvYihjb25zdCBCbG9i
JiBibG9iLCBGZXRjaEJvZHlDb25zdW1lciogY29uc3VtZXIpCiAgICAgICAgIG1fYmxvYkxvYWRl
ciA9IHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9p
ZCBGZXRjaEJvZHlPd25lcjo6ZmluaXNoQmxvYkxvYWRpbmcoKQpAQCAtMjA2LDcgKzIwNiw3IEBA
IHZvaWQgRmV0Y2hCb2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkKICAgICBBU1NFUlQobV9i
bG9iTG9hZGVyKTsKIAogICAgIG1fYmxvYkxvYWRlciA9IHN0ZDo6bnVsbG9wdDsKLSAgICB1bnNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiB9CiAKIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmJsb2JMb2FkaW5nU3VjY2VlZGVkKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCmluZGV4IGMyZDZi
MmJmM2IyNjE2YTMzYTNjMjQxMjU1MjA2MTEwZTA2N2E3YjguLjdjZjIyNTBjMjU5MTNlNjk0MWVh
NWE4YjlmMWRmNzg2NDY1ZDM2OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hSZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaFJlc3BvbnNlLmNwcApAQCAtMTY1LDEyICsxNjUsMTIgQEAgRmV0Y2hSZXNwb25zZTo6
Qm9keUxvYWRlcjo6Qm9keUxvYWRlcihGZXRjaFJlc3BvbnNlJiByZXNwb25zZSwgRmV0Y2hQcm9t
aXNlJiYgcHIKICAgICA6IG1fcmVzcG9uc2UocmVzcG9uc2UpCiAgICAgLCBtX3Byb21pc2UoV1RG
TW92ZShwcm9taXNlKSkKIHsKLSAgICBtX3Jlc3BvbnNlLnNldFBlbmRpbmdBY3Rpdml0eSgmbV9y
ZXNwb25zZSk7CisgICAgbV9yZXNwb25zZS5zZXRQZW5kaW5nQWN0aXZpdHkobV9yZXNwb25zZSk7
CiB9CiAKIEZldGNoUmVzcG9uc2U6OkJvZHlMb2FkZXI6On5Cb2R5TG9hZGVyKCkKIHsKLSAgICBt
X3Jlc3BvbnNlLnVuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX3Jlc3BvbnNlKTsKKyAgICBtX3Jlc3Bv
bnNlLnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1fcmVzcG9uc2UpOwogfQogCiB2b2lkIEZldGNoUmVz
cG9uc2U6OkJvZHlMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNvdXJjZVJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hSZXNwb25zZVNvdXJjZS5jcHAKaW5kZXggOWZjY2QzOWEwNmEzOGRhNDNiNDMy
NTc5ZTE5ZjlkYWQyYzcxNWRjZC4uNDYxNWU2ZWVmY2IzNTU0ZTYwMjYzMTQyMDdhY2UwNzU2N2Y0
ZjYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3Bv
bnNlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVz
cG9uc2VTb3VyY2UuY3BwCkBAIC00NywxMiArNDcsMTIgQEAgYm9vbCBGZXRjaFJlc3BvbnNlU291
cmNlOjppc1JlYWRhYmxlU3RyZWFtTG9ja2VkKCkgY29uc3QKIAogdm9pZCBGZXRjaFJlc3BvbnNl
U291cmNlOjpzZXRBY3RpdmUoKQogewotICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2aXR5
KCZtX3Jlc3BvbnNlKTsKKyAgICBtX3Jlc3BvbnNlLnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3Bv
bnNlKTsKIH0KIAogdm9pZCBGZXRjaFJlc3BvbnNlU291cmNlOjpzZXRJbmFjdGl2ZSgpCiB7Ci0g
ICAgbV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9yZXNwb25zZSk7CisgICAgbV9y
ZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogdm9pZCBGZXRj
aFJlc3BvbnNlU291cmNlOjpkb1N0YXJ0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggYzJjZWZjNjliMDhhZTgwY2E0YjU3
M2M5ZjlmM2UxNWRkMjk1MTMzNi4uYjJkZmNkODQ1NTA0N2NhN2UyMmFiZWUzNjYyNmRjZjUxOGVh
NTNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRp
YVNvdXJjZS5jcHAKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNldFBy
aXZhdGVBbmRPcGVuKFJlZjxNZWRpYVNvdXJjZVByaXZhdGU+JiYgbWVkaWFTb3VyY2VQcml2YXRl
CiAKIHZvaWQgTWVkaWFTb3VyY2U6OmFkZGVkVG9SZWdpc3RyeSgpCiB7Ci0gICAgc2V0UGVuZGlu
Z0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZv
aWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogewotICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAog
TWVkaWFUaW1lIE1lZGlhU291cmNlOjpkdXJhdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IDk1MjFlMmJk
ODE4MGMzNjU5OGU4ZTk1NDkzM2NhN2E3MjliMjMwZGMuLmY4OTJhNDQyNGVkOTE1N2UyOWVlNDhl
MzhkZWRkMTMxNWIzMGU2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCkBAIC0xMjUsNyArMTI1LDcgQEAgTWVkaWFTdHJlYW06
On5NZWRpYVN0cmVhbSgpCiAgICAgICAgIHRyYWNrLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiAg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpIHsKICAgICAgICAg
aWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICAgICAgZG9jdW1lbnQt
PnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMjg2
LDcgKzI4Niw3IEBAIHZvaWQgTWVkaWFTdHJlYW06OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQg
PSB0cnVlOwotICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMp
OworICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKaW5kZXggYzBmZmZmYWRjNGExNTgy
N2YyZjY3OGQzNzM1NmFhZDNiNmQ0NmNlMy4uNTdjYmJmZDcxYWNhZTQ2NzcxYjI3MzkwZmFjNzY1
NWNjOTA1ZmQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCkBAIC02MSw3ICs2MSw3IEBAIE1lZGlhU3RyZWFt
VHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
UmVmPE1lZGlhU3RyCiAgICAgbV9wcml2YXRlLT5hZGRPYnNlcnZlcigqdGhpcyk7CiAKICAgICBp
ZiAoYXV0byBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50LT5h
ZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNl
cigqdGhpcyk7CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKQEAg
LTY5LDcgKzY5LDcgQEAgTWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2soKQogICAg
IG1fcHJpdmF0ZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+cmVtb3ZlQXVkaW9Qcm9k
dWNlcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMp
OwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6OmtpbmQoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRh
Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFD
aGFubmVsLmNwcAppbmRleCBjYzBlOWI1NGQxMDUwODhiZmI0NjEzOTJiMTBmMzk2NmQ3ZDMyNjlk
Li43NDk1MDlkMmIyMjJhMDMxY2JjNjZiMTkxMjBiZGNmZGNmMzE2ZjA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcApA
QCAtNTgsNyArNTgsNyBAQCBSZWY8UlRDRGF0YUNoYW5uZWw+IFJUQ0RhdGFDaGFubmVsOjpjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3RkOgogICAgIGF1dG8gY2hhbm5l
bCA9IGFkb3B0UmVmKCpuZXcgUlRDRGF0YUNoYW5uZWwoY29udGV4dCwgV1RGTW92ZShoYW5kbGVy
KSwgV1RGTW92ZShsYWJlbCksIFdURk1vdmUob3B0aW9ucykpKTsKICAgICBjaGFubmVsLT5zdXNw
ZW5kSWZOZWVkZWQoKTsKICAgICBjaGFubmVsLT5tX2hhbmRsZXItPnNldENsaWVudChjaGFubmVs
LmdldCgpKTsKLSAgICBjaGFubmVsLT5zZXRQZW5kaW5nQWN0aXZpdHkoY2hhbm5lbC5wdHIoKSk7
CisgICAgY2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwuZ2V0KCkpOwogICAgIHJl
dHVybiBjaGFubmVsOwogfQogCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBSVENEYXRhQ2hhbm5l
bDo6Y2xvc2UoKQogCiAgICAgbV9oYW5kbGVyLT5jbG9zZSgpOwogICAgIG1faGFuZGxlciA9IG51
bGxwdHI7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpkaWRDaGFuZ2VSZWFk
eVN0YXRlKFJUQ0RhdGFDaGFubmVsU3RhdGUgbmV3U3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4
IDkwYjIxZWE2MjNjMTQ3ZTQ1OTEyYjU5ODE1YmRjYTFkN2RkNzBkODkuLjZlMmZhODczNjM3NmQ1
ODFjNDA5ZjI4MzlmNjI4MzgxMDI0MGNhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC02MiwxMiAr
NjIsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFBlZXJDb25uZWN0aW9uOwogCiBSZWY8UlRDUGVlckNv
bm5lY3Rpb24+IFJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkKIHsKLSAgICBSZWY8UlRDUGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9u
ID0gYWRvcHRSZWYoKm5ldyBSVENQZWVyQ29ubmVjdGlvbihjb250ZXh0KSk7CisgICAgYXV0byBw
ZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29udGV4dCkp
OwogICAgIHBlZXJDb25uZWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICAvLyBSVENQZWVy
Q29ubmVjdGlvbiBtYXkgc2VuZCBldmVudHMgYXQgYWJvdXQgYW55IHRpbWUgZHVyaW5nIGl0cyBs
aWZldGltZS4KICAgICAvLyBMZXQncyBtYWtlIGl0IHVuY29sbGVjdGFibGUgdW50aWwgdGhlIHBj
IGlzIGNsb3NlZCBieSBKUyBvciB0aGUgcGFnZSBzdG9wcyBpdC4KICAgICBpZiAoIXBlZXJDb25u
ZWN0aW9uLT5pc0Nsb3NlZCgpKSB7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLT5zZXRQZW5kaW5n
QWN0aXZpdHkocGVlckNvbm5lY3Rpb24ucHRyKCkpOworICAgICAgICBwZWVyQ29ubmVjdGlvbi0+
c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJDb25uZWN0aW9uLmdldCgpKTsKIAogICAgICAgICAvLyBJ
Q0UgY2FuZGlkYXRlIGZpbHRlcmluZyBjYW4gb25seSBiZSBkaXNhYmxlZCBmb3IgY29ubmVjdGlv
bnMgZnJvbSBkb2N1bWVudHMgdGhhdCBoYXZlIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgdG9wIGRv
Y3VtZW50LAogICAgICAgICAvLyBvciBpZiB0aGUgcGFnZSB3YXMgc2V0IHRvIGRpc2FibGUgaXQu
CkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6ZG9TdG9wKCkKIAog
ICAgIG1fYmFja2VuZC0+c3RvcCgpOwogCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFJUQ1BlZXJDb25u
ZWN0aW9uOjpyZWdpc3RlclRvQ29udHJvbGxlcihSVENDb250cm9sbGVyJiBjb250cm9sbGVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0
aW9uLmNwcAppbmRleCBmNDM5NDMxOGViMWZkN2NmMDg3ZDliM2NiMDhjNzFiOWY5YmQ3OTExLi43
MmFkM2FiY2MwNjY2NTQzMjQ2Y2E4NWEzNTNlNDAyNjU2MDU5MWY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcApAQCAt
OTMsNyArOTMsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6c2hvdygpCiAgICAgfQogICAgIGlmIChj
bGllbnQuc2hvdyh0aGlzKSkgewogICAgICAgICBtX3N0YXRlID0gU2hvd2luZzsKLSAgICAgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogICAgIH0KIH0KIApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgTm90aWZpY2F0aW9uOjpm
aW5hbGl6ZSgpCiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9zdGF0ZSA9IENsb3NlZDsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAg
ICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9uOjpk
aXNwYXRjaFNob3dFdmVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCmluZGV4IDI3ZTU2YzRjNmI5
NDdhZWI4MjQ1OWVkMTNmMzNiNTgxYTNkM2EwYTQuLjA1NWJmZjVmMWViYWExYjJiZTVhN2M0NDBl
ZTA5ZjNiMTc4YjljMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCkBAIC05OSw3ICs5OSw3IEBA
IHZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0ZVB1bGxTdGF0dXMoKQogICAgICAg
ICAvLyBXaGVuIGFuIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGNvbm5lY3RlZCB0byBhIGRv
d25zdHJlYW0gbm9kZSwgaXQgd2lsbCBnZXQgcHVsbGVkIGJ5IHRoZQogICAgICAgICAvLyBkb3du
c3RyZWFtIG5vZGUsIHRodXMgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQncyBhdXRvbWF0aWMg
cHVsbCBsaXN0LgogICAgICAgICBpZiAobV9uZWVkQXV0b21hdGljUHVsbCkgewotICAgICAgICAg
ICAgY29udGV4dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAg
Y29udGV4dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAgIG1f
bmVlZEF1dG9tYXRpY1B1bGwgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0x
MDcsMTEgKzEwNywxMSBAQCB2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxs
U3RhdHVzKCkKICAgICAgICAgaWYgKG51bWJlck9mSW5wdXRDb25uZWN0aW9ucyAmJiAhbV9uZWVk
QXV0b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBkb3duc3RyZWFtIG5vZGUgd2hpbGUgc3Rp
bGwgY29ubmVjdGVkIGZyb20KICAgICAgICAgICAgIC8vIHVwc3RyZWFtIG5vZGUocyksIGFkZCBp
dCB0byB0aGUgY29udGV4dCdzIGF1dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAgICAgICAgICBjb250
ZXh0KCkuYWRkQXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBjb250ZXh0KCku
YWRkQXV0b21hdGljUHVsbE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9uZWVkQXV0b21hdGlj
UHVsbCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mSW5wdXRDb25uZWN0aW9u
cyAmJiBtX25lZWRBdXRvbWF0aWNQdWxsKSB7CiAgICAgICAgICAgICAvLyBUaGUgQXVkaW9CYXNp
Y0luc3BlY3Rvck5vZGUgaXMgY29ubmVjdGVkIHRvIG5vdGhpbmcsIHJlbW92ZSBpdCBmcm9tIHRo
ZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KLSAgICAgICAgICAgIGNvbnRleHQoKS5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5yZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQ
dWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggZDk1MDQ3YzkwMzA1MWMwYmMzZDVl
NjM4YjI3YjQ1ODU0MjRiMDUzMi4uMDEyYWU4ZmY2NDQzOGRjNjNjN2I0YjczMGQ5YmEyN2MyMzQ2
MDliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgQXVkaW9Db250ZXh0Ojpjb25zdHJ1Y3RD
b21tb24oKQogewogICAgIC8vIEFjY29yZGluZyB0byBzcGVjIEF1ZGlvQ29udGV4dCBtdXN0IGRp
ZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdhdGUuCiAgICAgLy8gTGV0cyBtYXJrIGl0IGFzIEFjdGl2
ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgYW5kIHVubWFyayBpdCBpbiBjbGVhciBt
ZXRob2QuCi0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rp
dml0eSgqdGhpcyk7CiAKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIGluaXRpYWxpemVHU3RyZWFt
ZXIoKTsKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxp
emUoKQogICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6ZSgpOwogCiAgICAgICAg
IGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRB
dWRpb1Byb2R1Y2VyKHRoaXMpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JW
aXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICAgICAgZG9jdW1l
bnQoKS0+YWRkQXVkaW9Qcm9kdWNlcigqdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5y
ZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCiAgICAg
ICAgICAgICAvLyBUaGlzIHN0YXJ0cyB0aGUgYXVkaW8gdGhyZWFkLiBUaGUgZGVzdGluYXRpb24g
bm9kZSdzIHByb3ZpZGVJbnB1dCgpIG1ldGhvZCB3aWxsIG5vdyBiZSBjYWxsZWQgcmVwZWF0ZWRs
eSB0byByZW5kZXIgYXVkaW8uCiAgICAgICAgICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0
KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24gb2YgdGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4g
TGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVyaW9kIGEgInJlbmRlciBxdWFudHVtIi4KQEAgLTI0Niw3
ICsyNDYsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y2xlYXIoKQogICAgIH0gd2hpbGUgKG1fbm9k
ZXNUb0RlbGV0ZS5zaXplKCkpOwogCiAgICAgLy8gSXQgd2FzIHNldCBpbiBjb25zdHJ1Y3RDb21t
b24uCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkKQEAg
LTI2Myw4ICsyNjMsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkKICAgICBt
X2lzQXVkaW9UaHJlYWRGaW5pc2hlZCA9IHRydWU7CiAKICAgICBpZiAoIWlzT2ZmbGluZUNvbnRl
eHQoKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVBdWRpb1Byb2R1Y2VyKHRoaXMpOwot
ICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENh
bGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcigq
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVD
aGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNvbnRl
eHRDb3VudCk7CiAgICAgICAgIC0tc19oYXJkd2FyZUNvbnRleHRDb3VudDsKQEAgLTgyNCwxNCAr
ODI0LDE0IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygp
CiAgICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5jbGVhcigpOwogfQogCi12b2lkIEF1ZGlv
Q29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9Db250
ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlJiBub2RlKQogewogICAgIEFTU0VSVChpc0dy
YXBoT3duZXIoKSk7CiAKICAgICBpZiAoaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpCi0gICAgICAg
IG1fbm9kZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXNUb0RlbGV0ZS5h
cHBlbmQoJm5vZGUpOwogICAgIGVsc2UKLSAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0aW9u
LmFwcGVuZChub2RlKTsKKyAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0aW9uLmFwcGVuZCgm
bm9kZSk7CiAKICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRpbWUgZm9yIHVzIHRv
IHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxpc3QsCiAgICAgLy8gc2luY2Ug
YWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFwaCBsb2NrLiBUaGVu
IHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKQEAgLTkyOCwxOSArOTI4LDE5IEBAIHZvaWQg
QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKQogICAgIG1fZGlydHlB
dWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQXVkaW9Db250ZXh0OjphZGRBdXRv
bWF0aWNQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6YWRkQXV0
b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJiBub2RlKQogewogICAgIEFTU0VSVChpc0dyYXBoT3du
ZXIoKSk7CiAKLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMuYWRkKG5vZGUpLmlzTmV3RW50
cnkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZCgmbm9kZSkuaXNOZXdFbnRyeSkK
ICAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOwogfQogCi12
b2lkIEF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2Rl
KQordm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYg
bm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAgaWYgKG1fYXV0b21h
dGljUHVsbE5vZGVzLnJlbW92ZShub2RlKSkKKyAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMu
cmVtb3ZlKCZub2RlKSkKICAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcg
PSB0cnVlOwogfQogCkBAIC05OTcsNyArOTk3LDcgQEAgYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxC
ZWdpblBsYXliYWNrKCkKICAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQo
KSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgICAgICBp
ZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVk
aW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwpA
QCAtMTAxNyw3ICsxMDE3LDcgQEAgYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxQYXVzZVBsYXliYWNr
KCkKICAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewogICAgICAg
ICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgICAgICBpZiAocGFnZSAmJiAh
cGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRNZWRp
YUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRNZWRp
YUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250ZXh0OjpS
ZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggNTc3MzE3ZDJlODJk
ZWQ5ZmEwNzg1OWRiMGUwNjBhMWFhODk1ZjNhZS4uNjM0OTdkYWJlMTEzMmI3ZWMzZmIxMjNjMWE2
MzA3NDdjYWU3YzYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oCkBAIC0xNTMsMTMgKzE1MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJl
ZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKIAogICAgIC8vIFdlIHNjaGVkdWxlIGRlbGV0aW9uIG9m
IGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1lIHJlbmRlciBxdWFu
dHVtLgotICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSopOworICAgIHZvaWQgbWFy
a0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYpOwogICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMoKTsK
IAogICAgIC8vIEF1ZGlvQ29udGV4dCBjYW4gcHVsbCBub2RlKHMpIGF0IHRoZSBlbmQgb2YgZWFj
aCByZW5kZXIgcXVhbnR1bSBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBhbnkg
ZG93bnN0cmVhbSBub2Rlcy4KICAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgY2FsbGVkIGJ5
IHRoZSBub2RlcyB3aG8gd2FudCB0byBhZGQvcmVtb3ZlIHRoZW1zZWx2ZXMgaW50by9mcm9tIHRo
ZSBhdXRvbWF0aWMgcHVsbCBsaXN0cy4KLSAgICB2b2lkIGFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1
ZGlvTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKik7
CisgICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKTsKKyAgICB2b2lkIHJl
bW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYpOwogCiAgICAgLy8gQ2FsbGVkIHJpZ2h0
IGJlZm9yZSBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSB0byBoYW5kbGUgbm9kZXMgd2hpY2ggbmVl
ZCB0byBiZSBwdWxsZWQgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhp
bmcuCiAgICAgdm9pZCBwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3Bw
CmluZGV4IGYyMDBiMDUwZTcyNjEyN2NjMWQ2ZjZiNWE2MzVmNjdhZjJiNGU3NzYuLjFhYzc3YWEz
N2MyNjUzN2IzZTJmZjIyMzYxYWE3MjUyZDUwMzU1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIEF1
ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQtPmRpc2Nvbm5lY3RBbGwoKTsgLy8gVGhpcyB3aWxsIGRlcmVmKCkgbm9kZXMgd2Un
cmUgY29ubmVjdGVkIHRvLgogCiAgICAgICAgICAgICAgICAgLy8gTWFyayBmb3IgZGVsZXRpb24g
YXQgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gb3Igd2hlbiBjb250ZXh0IHNodXRzIGRvd24u
Ci0gICAgICAgICAgICAgICAgY29udGV4dCgpLm1hcmtGb3JEZWxldGlvbih0aGlzKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0KCkubWFya0ZvckRlbGV0aW9uKCp0aGlzKTsKICAgICAgICAgICAg
ICAgICBtX2lzTWFya2VkRm9yRGVsZXRpb24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKHJlZlR5cGUgPT0gUmVmVHlwZUNvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGZiZjQ5NmRhNTg0
OWVmM2Q3ZDVmMDQyMTZhOWYxNmIxNDVlNjBmZmEuLjc1YWIwMDdmNGYzNWU4YmYwYzQ5ZTcyYjJl
MmQwYThkMmY0OTg4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwCkBAIC0yOTgsOCArMjk4LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2Vi
U29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cHIKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRl
eHQpOwogICAgICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigpLm1peGVkQ29udGVudENoZWNrZXIo
KS5jYW5SdW5JbnNlY3VyZUNvbnRlbnQoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgbV91cmwp
KSB7Ci0gICAgICAgICAgICAvLyBCYWxhbmNlZCBieSB0aGUgY2FsbCB0byBBY3RpdmVET01PYmpl
Y3Q6OnVuc2V0UGVuZGluZ0FjdGl2aXR5KCkgaW4gV2ViU29ja2V0OjpzdG9wKCkuCi0gICAgICAg
ICAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAg
ICAgIC8vIEJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCkgaW4g
V2ViU29ja2V0OjpzdG9wKCkuCisgICAgICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogCiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJsb2NrIHRoaXMgY29ubmVjdGlvbi4gSW5zdGVh
ZCBvZiB0aHJvd2luZyBhbiBleGNlcHRpb24sIHdlIGluZGljYXRlIHRoaXMKICAgICAgICAgICAg
IC8vIHVzaW5nIHRoZSBlcnJvciBldmVudC4gQnV0IHNpbmNlIHRoaXMgY29kZSBleGVjdXRlcyBh
cyBwYXJ0IG9mIHRoZSBXZWJTb2NrZXQncwpAQCAtMzMwLDcgKzMzMCw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHByCiAgICAgICAgIHByb3RvY29sU3RyaW5nID0gam9pblN0cmluZ3MocHJvdG9j
b2xzLCBzdWJwcm90b2NvbFNlcGFyYXRvcigpKTsKIAogICAgIG1fY2hhbm5lbC0+Y29ubmVjdCht
X3VybCwgcHJvdG9jb2xTdHJpbmcpOwotICAgIEFjdGl2ZURPTU9iamVjdDo6c2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAKICAgICByZXR1
cm4geyB9OwogfQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgV2ViU29ja2V0OjpzdG9wKCkKICAg
ICBtX3BlbmRpbmdFdmVudHMuY2xlYXIoKTsKICAgICBBY3RpdmVET01PYmplY3Q6OnN0b3AoKTsK
ICAgICBpZiAocGVuZGluZykKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQog
CiBjb25zdCBjaGFyKiBXZWJTb2NrZXQ6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdApAQCAt
NjQzLDcgKzY0Myw3IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRDbG9zZSh1bnNpZ25lZCB1bmhhbmRs
ZWRCdWZmZXJlZEFtb3VudCwgQ2xvc2luZ0hhbmRzaGFrZUNvbXBsCiAgICAgICAgIG1fY2hhbm5l
bCA9IG51bGxwdHI7CiAgICAgfQogICAgIGlmIChoYXNQZW5kaW5nQWN0aXZpdHkoKSkKLSAgICAg
ICAgQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAg
dW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFdlYlNvY2tldDo6ZGlkVXBn
cmFkZVVSTCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAppbmRleCBiNGU4ZDkyYjJkMWExMmNkMTIwMTZmYmIwMjMyZjg0ZTEwMjQ1NTE5Li4zZjgw
YWQ1YjgzYTQxYzVlZDY0N2EyNjA3NWViYmRlYTk4NmZiMjZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTM2Niw3ICszNjYsNyBAQCBK
U0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlclJlc29s
dmUoSlNDOjpKU0dsb2JhbE9iamVjdAogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVj
dCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYg
KFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+cmVzb2x2ZShn
bG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwgaW1wb3J0ZXJNb2R1
bGVLZXksIHNjcmlwdEZldGNoZXIpOworICAgICAgICByZXR1cm4gZG9jdW1lbnQtPm1vZHVsZUxv
YWRlcigpLnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5h
bWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKICAgICBKU0M6OkpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVmZXJyZWQtPnJl
amVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTM3NSw3ICszNzUsNyBAQCBKU0M6OkpT
SW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckZldGNoKEpTQzo6
SlNHbG9iYWxPYmplY3QqCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoUmVmUHRy
PERvY3VtZW50PiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5kb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLT5mZXRjaChnbG9iYWxPYmpl
Y3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKKyAgICAg
ICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5mZXRjaChnbG9iYWxPYmplY3QsIGV4
ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKICAgICBKU0M6OkpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVmZXJy
ZWQtPnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTM4NCw3ICszODQsNyBAQCBK
U0M6OkpTVmFsdWUgSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVj
dCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYg
KFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3Jk
LCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIo
KS5ldmFsdWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBt
b2R1bGVSZWNvcmQsIHNjcmlwdEZldGNoZXIpOwogICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVk
KCk7CiB9CiAKQEAgLTM5Miw3ICszOTIsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RP
TVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6OkpTR2xvYmFsTwogewog
ICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93
QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3Vt
ZW50LT5tb2R1bGVMb2FkZXIoKS0+aW1wb3J0TW9kdWxlKGdsb2JhbE9iamVjdCwgZXhlYywgbW9k
dWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBzb3VyY2VPcmlnaW4pOworICAgICAgICByZXR1cm4gZG9j
dW1lbnQtPm1vZHVsZUxvYWRlcigpLmltcG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1v
ZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwgc291cmNlT3JpZ2luKTsKICAgICBKU0M6OkpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVmZXJyZWQtPnJl
amVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9BY3RpdmVET01PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmpl
Y3QuaAppbmRleCBjNDdiMWY0NWFjOTcwMmU2NTNmMTVlMTkwYzE2MzA4ZWQzNDhmYmU3Li41YTY3
NmM3OWI0NjkzZjdiNTEwYzNlNDVjNGIxMDE0YjVkODE5NDJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5oCkBAIC02OSwxOCArNjksMTggQEAgcHVibGljOgogICAgIC8vIEl0IGNh
biwgaG93ZXZlciwgaGF2ZSBhIHNpZGUgZWZmZWN0IG9mIGRlbGV0aW5nIGFuIEFjdGl2ZURPTU9i
amVjdC4KICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4g
dm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoVCogdGhpc09iamVjdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIHNldFBlbmRpbmdBY3Rpdml0eShUJiB0aGlzT2JqZWN0KQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKHRoaXNPYmplY3QgPT0gdGhpcyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPnJl
ZigpOworICAgICAgICBBU1NFUlQoJnRoaXNPYmplY3QgPT0gdGhpcyk7CisgICAgICAgIHRoaXNP
YmplY3QucmVmKCk7CiAgICAgICAgICsrbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHVuc2V0UGVuZGluZ0FjdGl2aXR5KFQqIHRoaXNP
YmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0
eShUJiB0aGlzT2JqZWN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0FjdGl2aXR5
Q291bnQgPiAwKTsKICAgICAgICAgLS1tX3BlbmRpbmdBY3Rpdml0eUNvdW50OwotICAgICAgICB0
aGlzT2JqZWN0LT5kZXJlZigpOworICAgICAgICB0aGlzT2JqZWN0LmRlcmVmKCk7CiAgICAgfQog
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggYWU1NmQ2
OWQwZWQ0YzJlNjhiZTlkOTVmMDFiNGM3MDRjNWYxNTFjMy4uMjI4OGUzMWJhZDkwZDJmMjRiY2Mw
MjFjZjk0ZmIxYjU0ZDYxZjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApA
QCAtNTIsNyArNTIsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5n
JiBkYXRhKQogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCiAgICAgaWYgKG1f
ZGF0YSA9PSBub25OdWxsRGF0YSAmJiBjYW5Vc2VTZXREYXRhT3B0aW1pemF0aW9uKCp0aGlzKSkg
ewotICAgICAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7Cisg
ICAgICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiAgICAg
ICAgIGlmIChkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1l
KCktPnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgsIG9sZExl
bmd0aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBDaGFyYWN0ZXJE
YXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVyRGF0YT4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5vbk51bGxEYXRh
LCAwLCBvbGRMZW5ndGgsIG5vbk51bGxEYXRhLmxlbmd0aCgpKTsKLSAgICBkb2N1bWVudCgpLnRl
eHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3Zl
ZCgqdGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBDaGFyYWN0
ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCkBA
IC0xMjgsNyArMTI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0
RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIAogICAgIHNldERhdGFB
bmRVcGRhdGUobmV3U3RyLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCi0gICAgZG9jdW1l
bnQoKS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBkb2N1
bWVudCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKIAogICAg
IHJldHVybiB7IH07CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hh
cmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQog
CiAgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCi0gICAg
ZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKKyAgICBkb2N1bWVu
dCgpLnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKIAogICAgIHJldHVybiB7IH07
CiB9CkBAIC0xNjQsOCArMTY0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6
cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KICAgICBzZXRE
YXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAg
ICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNo
ZWNraW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsK
LSAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkp
OworICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOworICAg
IGRvY3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwog
CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDA5NjcwNTNl
Y2JlMGI4NDc3NjY0ZGZiN2UxNDcyMTMxYjQ1MjEyYTcuLjY3OTRlOWZkNmE3MzIwMTVjZTkxZGQx
ZDM5ZGQ3YmY3N2UwYWY5ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjk2LDIyICs2
OTYsMjAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBT
dHJpbmcmIGtleSkKICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgaWYgKCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIGJ1aWxkQWNjZXNz
S2V5TWFwKHRoaXMpOworICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgqdGhpcyk7CiAgICAgICAg
IG1fYWNjZXNzS2V5TWFwVmFsaWQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9lbGVtZW50
c0J5QWNjZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YnVpbGRB
Y2Nlc3NLZXlNYXAoVHJlZVNjb3BlKiBzY29wZSkKK3ZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNz
S2V5TWFwKFRyZWVTY29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS0+cm9vdE5v
ZGUoKSkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CisgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oc2NvcGUucm9vdE5v
ZGUoKSkpIHsKKyAgICAgICAgYXV0byYgYWNjZXNzS2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKGFjY2Vzc2tleUF0dHIpOwogICAgICAgICBpZiAoIWFjY2Vzc0tl
eS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vz
c0tleS5pbXBsKCksICZlbGVtZW50KTsKLQotICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9
IGVsZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAocm9v
dCk7CisgICAgICAgIGlmIChhdXRvKiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAg
ICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgqcm9vdCk7CiAgICAgfQogfQogCkBAIC0xNTk2LDE0
ICsxNTk0LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OnRpdGxlRWxlbWVudFRleHRDaGFuZ2VkKEVsZW1l
bnQmIHRpdGxlRWxlbWVudCkKICAgICB1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJh
Y2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lz
dGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xp
ZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRk
KGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKCZjbGll
bnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50KiBjbGllbnQpCit2b2lkIERvY3Vt
ZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmls
aXR5Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFj
a0NsaWVudHMucmVtb3ZlKGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0Ns
aWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQogCiB2b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3Rh
dGVDaGFuZ2VkKCkKQEAgLTM1OTYsMTUgKzM1OTQsMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRl
Vmlld3BvcnRVbml0c09uUmVzaXplKCkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1
ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6
OmFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYgYXVkaW9Qcm9kdWNlcikKIHsKLSAgICBt
X2F1ZGlvUHJvZHVjZXJzLmFkZChhdWRpb1Byb2R1Y2VyKTsKKyAgICBtX2F1ZGlvUHJvZHVjZXJz
LmFkZCgmYXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1By
b2R1Y2VyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2Vy
JiBhdWRpb1Byb2R1Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJv
ZHVjZXIpOworICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKCZhdWRpb1Byb2R1Y2VyKTsKICAg
ICB1cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQogCkBAIC0zNjg3LDI0ICszNjg1LDI0IEBAIHZv
aWQgRG9jdW1lbnQ6OnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wg
YW1vbmdDaGlsZHJlbk9ubHkpCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxl
bWVudERpZERldGFjaChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6aG92ZXJlZEVs
ZW1lbnREaWREZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIW1faG92ZXJlZEVs
ZW1lbnQgfHwgZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQorICAgIGlmICghbV9ob3ZlcmVk
RWxlbWVudCB8fCAmZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2hvdmVyZWRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAg
IG1faG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAo
bV9ob3ZlcmVkRWxlbWVudCAmJiAhbV9ob3ZlcmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAg
ICAgbV9ob3ZlcmVkRWxlbWVudCA9IG1faG92ZXJlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsK
ICAgICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1
bGVIb3ZlclN0YXRlVXBkYXRlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2
ZUNoYWluRGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjplbGVtZW50
SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9h
Y3RpdmVFbGVtZW50IHx8IGVsZW1lbnQgIT0gbV9hY3RpdmVFbGVtZW50KQorICAgIGlmICghbV9h
Y3RpdmVFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1fYWN0aXZlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwor
ICAgIG1fYWN0aXZlRWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxl
IChtX2FjdGl2ZUVsZW1lbnQgJiYgIW1fYWN0aXZlRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAg
ICAgbV9hY3RpdmVFbGVtZW50ID0gbV9hY3RpdmVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiB9
CkBAIC0zOTgyLDI2ICszOTgwLDI2IEBAIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25XaWxsQ2xl
YXJJZE5hbWVNYXAoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCiAgICAgbV9ub2Rl
TGlzdEFuZENvbGxlY3Rpb25Db3VudHNbSW52YWxpZGF0ZU9uSWROYW1lQXR0ckNoYW5nZV0tLTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkp
Cit2b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRv
cikKIHsKLSAgICBtX25vZGVJdGVyYXRvcnMuYWRkKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMu
YWRkKCZpdGVyYXRvcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihO
b2RlSXRlcmF0b3IqIG5pKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJ
dGVyYXRvciYgaXRlcmF0b3IpCiB7CiAgICAgLy8gVGhlIG5vZGUgaXRlcmF0b3IgY2FuIGJlIGRl
dGFjaGVkIHdpdGhvdXQgaGF2aW5nIGJlZW4gYXR0YWNoZWQgaWYgaXRzIHJvb3Qgbm9kZSBkaWRu
J3QgaGF2ZSBhIGRvY3VtZW50CiAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3Igd2FzIGNyZWF0ZWQs
IGJ1dCBoYXMgaXQgbm93LgotICAgIG1fbm9kZUl0ZXJhdG9ycy5yZW1vdmUobmkpOworICAgIG1f
bm9kZUl0ZXJhdG9ycy5yZW1vdmUoJml0ZXJhdG9yKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bW92
ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1
bWVudCkKIHsKICAgICBWZWN0b3I8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKICAgICBj
b3B5VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzLCBub2RlSXRlcmF0b3JzKTsKLSAgICBmb3IgKGF1
dG8qIGl0IDogbm9kZUl0ZXJhdG9ycykgewotICAgICAgICBpZiAoJml0LT5yb290KCkgPT0gJm5v
ZGUpIHsKLSAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcihpdCk7Ci0gICAgICAgICAgICBu
ZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgIGZvciAoYXV0byogaXRlcmF0
b3IgOiBub2RlSXRlcmF0b3JzKSB7CisgICAgICAgIGlmICgmaXRlcmF0b3ItPnJvb3QoKSA9PSAm
bm9kZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdGVyYXRvcik7CisgICAg
ICAgICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoKml0ZXJhdG9yKTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTQwNDEsNyArNDAzOSw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVD
aGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogCiAgICAgaWYg
KG1fbWFya2Vycy0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIGZvciAoVGV4dCogdGV4dE5vZGUg
PSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZChjb250YWluZXIpOyB0ZXh0Tm9kZTsgdGV4
dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKLSAgICAg
ICAgICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0Tm9kZSk7CisgICAgICAgICAgICBt
X21hcmtlcnMtPnJlbW92ZU1hcmtlcnMoKnRleHROb2RlKTsKICAgICB9CiB9CiAKQEAgLTQwNjks
NyArNDA2Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUp
CiAgICAgfQogCiAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKQotICAgICAgICBtX21hcmtlcnMtPnJl
bW92ZU1hcmtlcnMoJm5vZGUpOworICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMobm9k
ZSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBmYWxsYmFja0ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9k
ZUFmdGVyUmVtb3ZhbChOb2RlJiBub2RlKQpAQCAtNDA4OCw3ICs0MDg2LDcgQEAgdm9pZCBEb2N1
bWVudDo6cmVtb3ZlRm9jdXNOYXZpZ2F0aW9uTm9kZU9mU3VidHJlZShOb2RlJiBub2RlLCBib29s
IGFtb25nQ2hpbGRyZW4KICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChO
b2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1l
bnQ6OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGF1
dG8qIHJhbmdlIDogbV9yYW5nZXMpCkBAIC00MDk5LDcgKzQwOTcsNyBAQCB2b2lkIERvY3VtZW50
Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwog
fQogCi12b2lkIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUmIHRl
eHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5n
ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAg
LTQxMTEsMTAgKzQxMDksMTAgQEAgdm9pZCBEb2N1bWVudDo6dGV4dFJlbW92ZWQoTm9kZSogdGV4
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlm
dE1hcmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkK
K3ZvaWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZVdp
dGhJbmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOworICAgICAgICBOb2RlV2l0aEluZGV4
IG9sZE5vZGVXaXRoSW5kZXgoJm9sZE5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDog
bV9yYW5nZXMpCiAgICAgICAgICAgICByYW5nZS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRo
SW5kZXgsIG9mZnNldCk7CiAgICAgfQpAQCAtNDEyMiw3ICs0MTIwLDcgQEAgdm9pZCBEb2N1bWVu
dDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFt
bWFyIGNoZWNraW5nLgogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9s
ZE5vZGUpCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7CiAg
ICAgZm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQogICAgICAgICByYW5nZS0+dGV4dE5vZGVT
cGxpdChvbGROb2RlKTsKQEAgLTQxNDEsMTUgKzQxMzksMTUgQEAgdm9pZCBEb2N1bWVudDo6Y3Jl
YXRlRE9NV2luZG93KCkKICAgICBBU1NFUlQobV9kb21XaW5kb3ctPmZyYW1lKCkgPT0gbV9mcmFt
ZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1
bWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVu
dCkKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0g
ICAgQVNTRVJUKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1f
ZG9tV2luZG93KTsKICAgICAvLyBBIHZhbGlkIERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVk
RnJhbWUgZm9yIGl0cyBkb2N1bWVudHMuCiAgICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0g
Tm90SW5QYWdlQ2FjaGUpOwogCi0gICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5t
X2RvbVdpbmRvdyk7CisgICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2lu
ZG93KTsKICAgICBtX2RvbVdpbmRvdy0+ZGlkU2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAog
ICAgIEFTU0VSVChtX2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKQEAgLTQ3NjQsMTQg
KzQ3NjIsMTQgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lKEFjdGl2ZURPTU9iamVjdDo6UmVhc29u
Rm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi12
b2lkIERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVt
ZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVt
ZW50cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJl
Z2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLnJlbW92ZShlKTsKKyAg
ICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsK
IH0KIAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKQEAgLTQ3ODAsMTQg
KzQ3NzgsMTQgQEAgdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgICAg
ICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50
OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1fbWVkaWFWb2x1
bWVDYWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVu
cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVu
dDo6dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fbWVk
aWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKIGJvb2wgRG9j
dW1lbnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3QKQEAgLTQ4MjUs
MjkgKzQ4MjMsMjkgQEAgdm9pZCBEb2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFu
Z2UoKQogICAgICAgICBlbGVtZW50LT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwog
fQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBt
X3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZChlKTsKKyAgICBtX3ByaXZh
dGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFj
a3MoRWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZh
dGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVn
aXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT5ncm91cCgpLmNhcHRpb25Q
cmVmZXJlbmNlcygpLnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpOwog
Ci0gICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKGUpOworICAgIG1f
Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fY2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX2NhcHRpb25QcmVm
ZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3Vt
ZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKQEAgLTQ4NjAsMTQgKzQ4NTgsMTQgQEAg
dm9pZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiAKICNpZiBFTkFCTEUo
TUVESUFfQ09OVFJPTFNfU0NSSVBUKQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3Zv
aWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhI
VE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZEVsZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVt
ZW50cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFj
a3MoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3BhZ2VTY2FsZUZhY3RvckNo
YW5nZWRFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpCkBAIC00OTYyLDEwICs0OTYwLDEwIEBAIHZvaWQg
RG9jdW1lbnQ6OnBvcEN1cnJlbnRTY3JpcHQoKQogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLXZvaWQg
RG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCit2
b2lkIERvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIGlu
c3RydWN0aW9uKQogewotICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xU
UHJvY2Vzc29yOjpjcmVhdGUoKTsKLSAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoZG93
bmNhc3Q8WFNMU3R5bGVTaGVldD4ocGktPnNoZWV0KCkpKTsKKyAgICBhdXRvIHByb2Nlc3NvciA9
IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIHByb2Nlc3Nvci0+c2V0WFNMU3R5bGVTaGVl
dChkb3duY2FzdDxYU0xTdHlsZVNoZWV0PihpbnN0cnVjdGlvbi5zaGVldCgpKSk7CiAgICAgU3Ry
aW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CiAgICAgU3RyaW5nIHJl
c3VsdEVuY29kaW5nOwpAQCAtNTQ2MCwxNyArNTQ1OCwxNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRh
dGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKCkKICAgICAgICAgZWxlbWVudC0+dXBkYXRlRm9j
dXNBcHBlYXJhbmNlKG1fdXBkYXRlRm9jdXNBcHBlYXJhbmNlUmVzdG9yZXNTZWxlY3Rpb24pOwog
fQogCi12b2lkIERvY3VtZW50OjphdHRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit2b2lkIERvY3Vt
ZW50OjphdHRhY2hSYW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3Jhbmdlcy5j
b250YWlucyhyYW5nZSkpOwotICAgIG1fcmFuZ2VzLmFkZChyYW5nZSk7CisgICAgQVNTRVJUKCFt
X3Jhbmdlcy5jb250YWlucygmcmFuZ2UpKTsKKyAgICBtX3Jhbmdlcy5hZGQoJnJhbmdlKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQordm9pZCBEb2N1bWVu
dDo6ZGV0YWNoUmFuZ2UoUmFuZ2UmIHJhbmdlKQogewotICAgIC8vIFdlIGRvbid0IEFTU0VSVCBt
X3Jhbmdlcy5jb250YWlucyhyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCisgICAgLy8g
V2UgZG9uJ3QgQVNTRVJUIG1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkgdG8gYWxsb3cgdXMgdG8g
Y2FsbCB0aGlzCiAgICAgLy8gdW5jb25kaXRpb25hbGx5IHRvIGZpeDogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDQ0Ci0gICAgbV9yYW5nZXMucmVtb3ZlKHJhbmdl
KTsKKyAgICBtX3Jhbmdlcy5yZW1vdmUoJnJhbmdlKTsKIH0KIAogc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdDb250ZXh0PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtNTYy
Niw3ICs1NjI0LDcgQEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRhc2tzKEFjdGl2
ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24KIAogICAgIHN1c3BlbmRTY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICBzdXNwZW5kQWN0aXZlRE9N
T2JqZWN0cyhyZWFzb24pOwotICAgIHNjcmlwdFJ1bm5lcigpLT5zdXNwZW5kKCk7CisgICAgc2Ny
aXB0UnVubmVyKCkuc3VzcGVuZCgpOwogICAgIG1fcGVuZGluZ1Rhc2tzVGltZXIuc3RvcCgpOwog
CiAgICAgLy8gRGVmZXJyaW5nIGxvYWRpbmcgYW5kIHN1c3BlbmRpbmcgcGFyc2VyIGlzIG5lY2Vz
c2FyeSB3aGVuIHdlIG5lZWQgdG8gcHJldmVudCByZS1lbnRyYW50IEphdmFTY3JpcHQgZXhlY3V0
aW9uCkBAIC01NjUwLDcgKzU2NDgsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVTY2hlZHVsZWRU
YXNrcyhBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogICAgICAg
ICBtX3BhcnNlci0+cmVzdW1lU2NoZWR1bGVkVGFza3MoKTsKICAgICBpZiAoIW1fcGVuZGluZ1Rh
c2tzLmlzRW1wdHkoKSkKICAgICAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdGFydE9uZVNob3Qo
MF9zKTsKLSAgICBzY3JpcHRSdW5uZXIoKS0+cmVzdW1lKCk7CisgICAgc2NyaXB0UnVubmVyKCku
cmVzdW1lKCk7CiAgICAgcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhyZWFzb24pOwogICAgIHJlc3Vt
ZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIApAQCAtNTcwMywx
NiArNTcwMSwxNiBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFBvcHN0YXRlRXZlbnQoUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVjdAogICAgIGRpc3BhdGNoV2luZG93
RXZlbnQoUG9wU3RhdGVFdmVudDo6Y3JlYXRlKFdURk1vdmUoc3RhdGVPYmplY3QpLCBtX2RvbVdp
bmRvdyA/IG1fZG9tV2luZG93LT5oaXN0b3J5KCkgOiBudWxscHRyKSk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxp
c3RlbmVyKQordm9pZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKCFtX21lZGlhQ2FuU3RhcnRM
aXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKTsKLSAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5l
cnMuYWRkKGxpc3RlbmVyKTsKKyAgICBBU1NFUlQoIW1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5j
b250YWlucygmbGlzdGVuZXIpKTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKCZs
aXN0ZW5lcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6cmVtb3Zl
TWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7
Ci0gICAgQVNTRVJUKG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikp
OwotICAgIG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgIEFT
U0VSVChtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29udGFpbnMoJmxpc3RlbmVyKSk7CisgICAg
bV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLnJlbW92ZSgmbGlzdGVuZXIpOwogfQogCiBNZWRpYUNh
blN0YXJ0TGlzdGVuZXIqIERvY3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkK
QEAgLTU3MzYsMTAgKzU3MzQsOSBAQCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIERvY3Vt
ZW50OjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogCi1ib29sIERvY3VtZW50OjpmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBEb2N1bWVudDo6ZnVsbFNjcmVlbklz
QWxsb3dlZChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KTsK
LSAgICByZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3
ZWJraXRhbGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVu
dCgpKTsKKyAgICByZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5B
dHRyLCB3ZWJraXRhbGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVtZW50LmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZSBjaGVja1R5cGUpCkBAIC01
NzU4LDcgKzU3NTUsNyBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogCiAgICAgICAgIC8vIFRo
ZSBjb250ZXh0IG9iamVjdCdzIG5vZGUgZG9jdW1lbnQsIG9yIGFuIGFuY2VzdG9yIGJyb3dzaW5n
IGNvbnRleHQncyBkb2N1bWVudCBkb2VzIG5vdCBoYXZlCiAgICAgICAgIC8vIHRoZSBmdWxsc2Ny
ZWVuIGVuYWJsZWQgZmxhZyBzZXQuCi0gICAgICAgIGlmIChjaGVja1R5cGUgPT0gRW5mb3JjZUlG
cmFtZUFsbG93RnVsbFNjcmVlblJlcXVpcmVtZW50ICYmICFmdWxsU2NyZWVuSXNBbGxvd2VkRm9y
RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBFbmZvcmNlSUZyYW1l
QWxsb3dGdWxsU2NyZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxTY3JlZW5Jc0FsbG93ZWQoKmVsZW1l
bnQpKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVGhlIGNvbnRleHQgb2JqZWN0
J3Mgbm9kZSBkb2N1bWVudCBmdWxsc2NyZWVuIGVsZW1lbnQgc3RhY2sgaXMgbm90IGVtcHR5IGFu
ZCBpdHMgdG9wIGVsZW1lbnQKQEAgLTU4MzEsOCArNTgyOCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
cXVlc3RGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hl
Y2tUeXBlCiAgICAgICAgICAgICAvLyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFu
IGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUK
ICAgICAgICAgICAgIC8vIHNldCB0byB0cnVlIG9uIHRoZSBkb2N1bWVudC4KICAgICAgICAgICAg
IGlmICghZm9sbG93aW5nRG9jKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1
bGxzY3JlZW5FbGVtZW50U3RhY2soZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1l
bnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnREb2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCplbGVtZW50KTsKKyAg
ICAgICAgICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmN1
cnJlbnREb2MpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBA
IC01ODQzLDggKzU4NDAsOCBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAg
ICAgIC8vIC4uLnB1c2ggZm9sbG93aW5nIGRvY3VtZW50J3MgYnJvd3NpbmcgY29udGV4dCBjb250
YWluZXIgb24gZG9jdW1lbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQKICAgICAgICAgICAgICAgICAv
LyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3Jl
ZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAvLyBz
ZXQgdG8gdHJ1ZSBvbiBkb2N1bWVudC4KLSAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNo
RnVsbHNjcmVlbkVsZW1lbnRTdGFjayhmb2xsb3dpbmdEb2MtPm93bmVyRWxlbWVudCgpKTsKLSAg
ICAgICAgICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3Vy
cmVudERvYyk7CisgICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVt
ZW50U3RhY2soKmZvbGxvd2luZ0RvYy0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAgICAgICAg
IGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTU5MDcsNyArNTkw
NCw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAvLyB0YXNr
IHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVz
IGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgogICAgIGZvciAoYXV0byYgZG9j
dW1lbnQgOiBkZXNjZW5kYW50cykgewogICAgICAgICBkb2N1bWVudC0+Y2xlYXJGdWxsc2NyZWVu
RWxlbWVudFN0YWNrKCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZl
bnRRdWV1ZShkb2N1bWVudC5nZXQoKSk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVu
Q2hhbmdlRXZlbnRRdWV1ZSgqZG9jdW1lbnQpOwogICAgIH0KIAogICAgIC8vIDUuIFdoaWxlIGRv
YyBpcyBub3QgbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgpAQCAtNTkyNCw3ICs1OTIxLDcgQEAg
dm9pZCBEb2N1bWVudDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogCiAgICAgICAgIC8vIDIuIFF1
ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBp
dHMgYnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUKICAgICAgICAgLy8gb24gZG9jLgotICAg
ICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7
CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVu
dERvYyk7CiAKICAgICAgICAgLy8gMy4gSWYgZG9jJ3MgZnVsbHNjcmVlbiBlbGVtZW50IHN0YWNr
IGlzIGVtcHR5IGFuZCBkb2MncyBicm93c2luZyBjb250ZXh0IGhhcyBhIGJyb3dzaW5nIGNvbnRl
eHQKICAgICAgICAgLy8gY29udGFpbmVyLCBzZXQgZG9jIHRvIHRoYXQgYnJvd3NpbmcgY29udGV4
dCBjb250YWluZXIncyBub2RlIGRvY3VtZW50LgpAQCAtNTk3NCwxMyArNTk3MSwxMSBAQCBzdGF0
aWMgdm9pZCB1bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogZnVsbFNj
cmVlblJlbmRlcmVyLCBFbGVtZQogICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFyZW50RWxl
bWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1l
bnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFoYXNMaXZpbmdSZW5kZXJUcmVlKCkgfHwgcGFnZUNh
Y2hlU3RhdGUoKSAhPSBOb3RJblBhZ2VDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNT
RVJUKGVsZW1lbnQpOwotCiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBhZnRl
ciB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYWdlLgogICAgIGlmICgh
cGFnZSgpKQogICAgICAgICByZXR1cm47CkBAIC01OTg5LDEzICs1OTg0LDEyIEBAIHZvaWQgRG9j
dW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQpCiAKICAgICB1bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIobV9mdWxsU2NyZWVuUmVuZGVyZXIs
IG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOwogCi0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAg
IGVsZW1lbnQtPndpbGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOworICAgIGVsZW1lbnQud2ls
bEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCk7CiAgICAgCi0gICAgbV9mdWxsU2NyZWVuRWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9ICZlbGVtZW50OwogCiAjaWYg
VVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQt
PmlzTWVkaWFFbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQuaXNNZWRpYUVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogI2VuZGlmCiAKQEAgLTYwMTgsNyArNjAxMiw3IEBAIHZvaWQgRG9jdW1l
bnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgcmVzb2x2ZVN0eWxlKFJlc29sdmVTdHlsZVR5cGU6OlJlYnVpbGQpOwogfQogCi12b2lk
IERvY3VtZW50Ojp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQor
dm9pZCBEb2N1bWVudDo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1f
ZnVsbFNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTYwMzEsNyArNjAyNSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCopCiAgICAgbV9mdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lci5zdGFydE9uZVNob3QoMF9zKTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChF
bGVtZW50KikKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpCiB7CiAg
ICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MDQyLDcg
KzYwMzYsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqKQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPndpbGxTdG9wQmVpbmdGdWxs
c2NyZWVuRWxlbWVudCgpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVs
bFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1
cm47CkBAIC02MTgwLDE5ICs2MTc0LDE4IEBAIHZvaWQgRG9jdW1lbnQ6OnBvcEZ1bGxzY3JlZW5F
bGVtZW50U3RhY2soKQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjpwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5hcHBlbmQoZWxl
bWVudCk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCgmZWxlbWVudCk7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1
ZShEb2N1bWVudCogZG9jKQordm9pZCBEb2N1bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jKTsK
LSAgICBOb2RlKiB0YXJnZXQgPSBkb2MtPndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KCk7CisgICAg
Tm9kZSogdGFyZ2V0ID0gZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsKICAgICBp
ZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gZG9jLT53ZWJraXRDdXJyZW50RnVsbFNjcmVl
bkVsZW1lbnQoKTsKKyAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQud2Via2l0Q3VycmVudEZ1bGxT
Y3JlZW5FbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IGRvYzsK
KyAgICAgICAgdGFyZ2V0ID0gJmRvY3VtZW50OwogICAgIG1fZnVsbFNjcmVlbkNoYW5nZUV2ZW50
VGFyZ2V0UXVldWUuYXBwZW5kKHRhcmdldCk7CiB9CiAKQEAgLTY2NTAsNyArNjY0Myw3IEBAIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgIC8vIFdlIGFyZSBjbGVhcmluZyB0aGUgOmFj
dGl2ZSBjaGFpbiBiZWNhdXNlIHRoZSBtb3VzZSBoYXMgYmVlbiByZWxlYXNlZC4KICAgICAgICAg
Zm9yIChFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IG9sZEFjdGl2ZUVsZW1lbnQ7IGN1cnJlbnRF
bGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50SW5D
b21wb3NlZFRyZWUoKSkgewogICAgICAgICAgICAgY3VycmVudEVsZW1lbnQtPnNldEFjdGl2ZShm
YWxzZSk7Ci0gICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2ZUNoYWlu
KGN1cnJlbnRFbGVtZW50LCBmYWxzZSk7CisgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50
cy5zZXRJbkFjdGl2ZUNoYWluKCpjdXJyZW50RWxlbWVudCwgZmFsc2UpOwogICAgICAgICB9CiAg
ICAgICAgIG1fYWN0aXZlRWxlbWVudCA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKQEAgLTY2NjIs
NyArNjY1NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgICAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IGN1cnItPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVs
ZW1lbnQgfHwgY3Vyci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3Rp
dmVDaGFpbihlbGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVt
ZW50cy5zZXRJbkFjdGl2ZUNoYWluKCplbGVtZW50LCB0cnVlKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgbV9hY3RpdmVFbGVtZW50ID0gbmV3QWN0aXZlRWxlbWVudDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKaW5kZXggMjMyNmRkZGU3M2QxNmU1NzgxMmQwNWFkMDFhYmJkMGJlMDk1MTM1Yi4u
NzNiMzE0ZWExZWE4ZDdjZTlhODgyZDNmZGU2NDk5ODMwNDI2MTJhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKQEAgLTczMCw4ICs3MzAsOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZm9jdXNOYXZp
Z2F0aW9uU3RhcnRpbmdOb2RlKEZvY3VzRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcmVt
b3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkgPSBm
YWxzZSk7Ci0gICAgdm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Kik7Ci0gICAg
dm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Kik7CisgICAgdm9pZCBo
b3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Jik7CisgICAgdm9pZCBlbGVtZW50SW5BY3Rp
dmVDaGFpbkRpZERldGFjaChFbGVtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZl
U3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBFbGVtZW50Kik7CiAKQEAgLTc1OCwxMiArNzU4
LDEyIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW52YWxpZGF0aW9uRnVuY3Rp
b24+CiAgICAgdm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKEludmFs
aWRhdGlvbkZ1bmN0aW9uKTsKIAotICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciopOwotICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOworICAg
IHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOworICAgIHZvaWQgZGV0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOwogICAgIHZvaWQgbW92ZU5vZGVJdGVyYXRvcnNU
b05ld0RvY3VtZW50KE5vZGUmLCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBhdHRhY2hSYW5nZShS
YW5nZSopOwotICAgIHZvaWQgZGV0YWNoUmFuZ2UoUmFuZ2UqKTsKKyAgICB2b2lkIGF0dGFjaFJh
bmdlKFJhbmdlJik7CisgICAgdm9pZCBkZXRhY2hSYW5nZShSYW5nZSYpOwogCiAgICAgdm9pZCB1
cGRhdGVSYW5nZXNBZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJik7CiAgICAgLy8g
bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCBpcyB1c2VkIHdoZW4gcmVtb3ZpbmcgYWxsIG5vZGUg
Y2hpbGRyZW4gYXQgb25jZS4KQEAgLTc3NCwxMyArNzc0LDEzIEBAIHB1YmxpYzoKICAgICBlbnVt
IGNsYXNzIEFjY2VwdENoaWxkT3BlcmF0aW9uIHsgUmVwbGFjZSwgSW5zZXJ0T3JBZGQgfTsKICAg
ICBib29sIGNhbkFjY2VwdENoaWxkKGNvbnN0IE5vZGUmIG5ld0NoaWxkLCBjb25zdCBOb2RlKiBy
ZWZDaGlsZCwgQWNjZXB0Q2hpbGRPcGVyYXRpb24pIGNvbnN0OwogCi0gICAgdm9pZCB0ZXh0SW5z
ZXJ0ZWQoTm9kZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lk
IHRleHRSZW1vdmVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgdm9pZCB0ZXh0Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsK
LSAgICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSk7CisgICAgdm9pZCB0ZXh0SW5z
ZXJ0ZWQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lk
IHRleHRSZW1vdmVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdm9pZCB0ZXh0Tm9kZXNNZXJnZWQoVGV4dCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsK
KyAgICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICB2b2lkIGNyZWF0
ZURPTVdpbmRvdygpOwotICAgIHZvaWQgdGFrZURPTVdpbmRvd0Zyb20oRG9jdW1lbnQqKTsKKyAg
ICB2b2lkIHRha2VET01XaW5kb3dGcm9tKERvY3VtZW50Jik7CiAKICAgICBET01XaW5kb3cqIGRv
bVdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZG9tV2luZG93LmdldCgpOyB9CiAgICAgLy8gSW4g
RE9NIExldmVsIDIsIHRoZSBEb2N1bWVudCdzIERPTVdpbmRvdyBpcyBjYWxsZWQgdGhlIGRlZmF1
bHRWaWV3LgpAQCAtODUxLDcgKzg1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3NSZWZl
cnJlclBvbGljeShjb25zdCBTdHJpbmcmIHBvbGljeSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBv
d25pbmcgZWxlbWVudCBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgIC8vIFJldHVybnMgMCBp
ZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgLy8gUmV0dXJucyBudWxscHRy
IGlmIHRoaXMgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGlu
Z3M7IG5vIGRpcmVjdGlvbiBrbm93bi4KQEAgLTk0NSwxNyArOTQ1LDE3IEBAIHB1YmxpYzoKICAg
ICBEb2N1bWVudCogcGFyZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBE
b2N1bWVudCYgdG9wRG9jdW1lbnQoKSBjb25zdDsKICAgICAKLSAgICBTY3JpcHRSdW5uZXIqIHNj
cmlwdFJ1bm5lcigpIHsgcmV0dXJuIG1fc2NyaXB0UnVubmVyLmdldCgpOyB9Ci0gICAgU2NyaXB0
TW9kdWxlTG9hZGVyKiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiBtX21vZHVsZUxvYWRlci5nZXQo
KTsgfQorICAgIFNjcmlwdFJ1bm5lciYgc2NyaXB0UnVubmVyKCkgeyByZXR1cm4gKm1fc2NyaXB0
UnVubmVyOyB9CisgICAgU2NyaXB0TW9kdWxlTG9hZGVyJiBtb2R1bGVMb2FkZXIoKSB7IHJldHVy
biAqbV9tb2R1bGVMb2FkZXI7IH0KIAogICAgIEhUTUxTY3JpcHRFbGVtZW50KiBjdXJyZW50U2Ny
aXB0KCkgY29uc3QgeyByZXR1cm4gIW1fY3VycmVudFNjcmlwdFN0YWNrLmlzRW1wdHkoKSA/IG1f
Y3VycmVudFNjcmlwdFN0YWNrLmxhc3QoKS5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHB1
c2hDdXJyZW50U2NyaXB0KEhUTUxTY3JpcHRFbGVtZW50Kik7CiAgICAgdm9pZCBwb3BDdXJyZW50
U2NyaXB0KCk7CiAKICNpZiBFTkFCTEUoWFNMVCkKLSAgICB2b2lkIGFwcGx5WFNMVHJhbnNmb3Jt
KFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpOworICAgIHZvaWQgYXBwbHlYU0xUcmFuc2Zvcm0o
UHJvY2Vzc2luZ0luc3RydWN0aW9uJik7CiAgICAgUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1T
b3VyY2VEb2N1bWVudCgpIHsgcmV0dXJuIG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7IH0KLSAg
ICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50KiBkb2MpIHsgbV90cmFu
c2Zvcm1Tb3VyY2VEb2N1bWVudCA9IGRvYzsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNl
RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQg
PSBkb2N1bWVudDsgfQogCiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2Uoc3RkOjp1bmlxdWVf
cHRyPFRyYW5zZm9ybVNvdXJjZT4pOwogICAgIFRyYW5zZm9ybVNvdXJjZSogdHJhbnNmb3JtU291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2UuZ2V0KCk7IH0KQEAgLTk5OSwx
NyArOTk5LDE1IEBAIHB1YmxpYzoKICAgICBQYWdlQ2FjaGVTdGF0ZSBwYWdlQ2FjaGVTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNhY2hlU3RhdGU7IH0KICAgICB2b2lkIHNldFBhZ2VDYWNo
ZVN0YXRlKFBhZ2VDYWNoZVN0YXRlKTsKIAotICAgIC8vIEVsZW1lbnRzIGNhbiByZWdpc3RlciB0
aGVtc2VsdmVzIGZvciB0aGUgInN1c3BlbmQoKSIgYW5kCi0gICAgLy8gInJlc3VtZSgpIiBjYWxs
YmFja3MKLSAgICB2b2lkIHJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lv
bkNhbGxiYWNrcyhFbGVtZW50Jik7CiAKICAgICB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0
aXZlKCk7CiAgICAgdm9pZCBzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVu
c2lvbik7CiAgICAgdm9pZCByZXN1bWUoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5z
aW9uKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50
Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCop
OworICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Jik7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYpOwogICAg
IHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKIAogICAgIGJvb2wgYXVkaW9QbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUoKSBjb25zdDsKQEAgLTEwMTksMjggKzEwMTcsMjggQEAgcHVibGlj
OgogICAgIE1lZGlhU2Vzc2lvbiYgZGVmYXVsdE1lZGlhU2Vzc2lvbigpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIHJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JQcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZv
clByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CiAgICAgdm9p
ZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENoYW5nZSgpOwogICAgIHZvaWQgcHJpdmF0ZUJyb3dz
aW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lk
IHJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNr
cyhFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVm
ZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NS
SVBUKQotICAgIHZvaWQgcmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tz
KEhUTUxNZWRpYUVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVy
Rm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1M
TWVkaWFFbGVtZW50Jik7CiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxl
KCk7CiAgICAgdm9pZCByZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFu
Z2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVt
ZW50Jik7CiAgICAgdm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwog
I2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxi
YWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yVmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7Cisg
ICAgdm9pZCByZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJp
bGl0eUNoYW5nZUNsaWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0
ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOwogCiAjaWYgRU5BQkxF
KFZJREVPKQogICAgIHZvaWQgcmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxh
eWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKQEAgLTEwOTEsOCArMTA4
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoUG9wc3RhdGVFdmVudChSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0KTsKICAgICBEb2N1bWVudEV2ZW50UXVl
dWUmIGV2ZW50UXVldWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V2ZW50UXVldWU7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5T
dGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciYpOwogICAgIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogdGFrZUFueU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAt
MTEwOSwxNyArMTEwNywxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCosIEZ1bGxTY3JlZW5DaGVja1R5cGUpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgd2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOwogICAgIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtp
dERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogICAgIAogICAgIHZvaWQgc2V0RnVsbFNj
cmVlblJlbmRlcmVyKFJlbmRlckZ1bGxTY3JlZW4qKTsKICAgICBSZW5kZXJGdWxsU2NyZWVuKiBm
dWxsU2NyZWVuUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW5SZW5kZXJlcjsg
fQogICAgIHZvaWQgZnVsbFNjcmVlblJlbmRlcmVyRGVzdHJveWVkKCk7CiAgICAgCiAgICAgdm9p
ZCBmdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lckZpcmVkKCk7Ci0gICAgYm9vbCBmdWxsU2NyZWVu
SXNBbGxvd2VkRm9yRWxlbWVudChFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBmdWxsU2NyZWVu
SXNBbGxvd2VkKEVsZW1lbnQmKSBjb25zdDsKICAgICB2b2lkIGZ1bGxTY3JlZW5FbGVtZW50UmVt
b3ZlZCgpOwogICAgIHZvaWQgcmVtb3ZlRnVsbFNjcmVlbkVsZW1lbnRPZlN1YnRyZWUoTm9kZSYs
IGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkgPSBmYWxzZSk7CiAgICAgYm9vbCBpc0FuaW1hdGluZ0Z1
bGxTY3JlZW4oKSBjb25zdDsKQEAgLTExNDYsOCArMTE0NCw4IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TKQotICAgIERl
dmljZU1vdGlvbkNvbnRyb2xsZXIqIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKLSAg
ICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIGRldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
cigpIGNvbnN0OworICAgIERldmljZU1vdGlvbkNvbnRyb2xsZXImIGRldmljZU1vdGlvbkNvbnRy
b2xsZXIoKSBjb25zdDsKKyAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXImIGRldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBjb25zdCBEb2N1bWVu
dFRpbWluZyYgdGltaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFRpbWluZzsgfQpAQCAt
MTI3Niw4ICsxMjc0LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3R5bGVXaXRoVmlld3BvcnRV
bml0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU3R5bGVXaXRoVmlld3BvcnRVbml0czsgfQogICAg
IHZvaWQgdXBkYXRlVmlld3BvcnRVbml0c09uUmVzaXplKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciopOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXImKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYpOwogICAg
IE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAgdm9pZCBub3RlVXNlckludGVyYWN0aW9uV2l0aE1lZGlh
RWxlbWVudCgpIHsgbV91c2VySGFzSW50ZXJhY3RlZFdpdGhNZWRpYUVsZW1lbnQgPSB0cnVlOyB9
CiAgICAgYm9vbCBpc0NhcHR1cmluZygpIGNvbnN0IHsgcmV0dXJuIE1lZGlhUHJvZHVjZXI6Omlz
Q2FwdHVyaW5nKG1fbWVkaWFTdGF0ZSk7IH0KQEAgLTE0MTcsNyArMTQxNSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VUaW1lckZpcmVkKCk7CiAgICAgdm9pZCB1
cGRhdGVCYXNlVVJMKCk7CiAKLSAgICB2b2lkIGJ1aWxkQWNjZXNzS2V5TWFwKFRyZWVTY29wZSog
cm9vdCk7CisgICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUmIHJvb3QpOwogCiAg
ICAgdm9pZCBsb2FkRXZlbnREZWxheVRpbWVyRmlyZWQoKTsKIApAQCAtMTQzMCw4ICsxNDI4LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZU9yRXJyb3JFdmVu
dChEZXF1ZTxSZWZQdHI8Tm9kZT4+JiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIGJv
b2wgc2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50KTsKICAgICB2b2lkIGNsZWFyRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjaygpOwogICAgIHZvaWQgcG9wRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwotICAg
IHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCopOwotICAgIHZvaWQgYWRk
RG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50Kik7CisgICAgdm9p
ZCBwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50Jik7CisgICAgdm9pZCBhZGREb2N1
bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoRG9jdW1lbnQmKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCA5MTRjNDViZTkzNDc1NTU5
ZmU2ZjdjNTk5M2U4ZTcwYzE1Y2YwOGI5Li45OTRjM2FkZDMxM2ZhZWYyNTNjOTYxYWFhZjZlNjBl
OTQzZTY3YzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcApAQCAtNjIsNDYgKzYyLDQ2IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpkZXRhY2goKQogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzID0geyB9Owog
fQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlKiByYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlw
dGlvbikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2Ny
aXB0aW9uKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFy
a2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0
ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4
dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRU
ZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5l
cigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQ
aWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0
UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+
c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24pKTsKICAg
ICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2Uq
IHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQordm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5n
ZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9y
IChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBt
YXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9
IG1hcmtlZFRleHQucmFuZ2UoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0
Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQo
KSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSkpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNl
LT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0
T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkpKTsKICAgICB9CiAKIH0KIAotdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlKiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZSB0eXBlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9k
ZShOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQogewogICAgIGFkZE1hcmtlcihub2RlLCBEb2N1
bWVudE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgpKTsKIH0K
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlKiBu
b2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCit2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUmIG5vZGUsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlIHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKIHsKICAgICBhZGRNYXJrZXIo
bm9kZSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVu
Z3RoLCBXVEZNb3ZlKGRhdGEpKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNo
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcihjb25z
dCBSYW5nZSYgcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0
b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2
YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFy
a2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVk
IGVuZE9mZnNldCA9IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIGFkZE1hcmtlcigm
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcihzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5z
dGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcihzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBh
Y3RpdmVNYXRjaCkpOwogICAgIH0KIH0KIAogI2lmIFBMQVRGT1JNKElPUykKIAotdm9pZCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFk
YXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFu
Z2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFp
blB0cjxpZD4mIG1ldGFkYXRhKQogewogICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQo
cmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJh
bmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cAogICAgIH0KIH0KIAotdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXNNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRp
b25zKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW50ZXJwcmV0YXRpb25zKQogewogICAgIEFTU0VSVChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4g
MSk7CiAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXplKCkgPD0gMSkKQEAgLTEyNSw3ICsxMjUs
NyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0
aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSogcgogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSogcmFuZ2UsIGNv
bnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSYgcmFuZ2UsIGNvbnN0IFJldGFpblB0
cjxpZD4mIG1ldGFkYXRhKQogewogICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFu
Z2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKQEAgLTEzNSwy
NiArMTM1LDI2IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25S
ZXN1bHRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBSZXRhCiAKICNlbmRpZgogCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmVmUHRyPFJh
bmdlPiByYW5nZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29u
dGVudE1hcmtlcihSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dChyYW5nZS5nZXQoKSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5j
ZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5n
ZSgpOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRl
eHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgYXV0byB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIERvY3VtZW50TWFya2VyOjpEcmFnZ2Vk
Q29udGVudERhdGEgZHJhZ2dlZENvbnRlbnREYXRhIHsgbWFya2VkVGV4dC5ub2RlKCkgfTsKLSAg
ICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1lbnRN
YXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVj
ZS0+ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRhKSB9KTsKKyAgICAgICAg
YWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6
RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRP
ZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOwogICAgIH0KIH0KIAotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFuZ2UqIHJhbmdlLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtl
cnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1h
cmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9y
IG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFu
Y2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtl
ZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKCFwb3Nz
aWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgICAgIFJlZlB0cjxSYW5nZT4g
dGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOworICAgICAgICBhdXRvIHRleHRQaWVjZSA9
IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0ZXh0
UGllY2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHRleHRQ
aWVjZS0+ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIHJlbW92ZU1hcmtlcnMoJnRleHRQaWVjZS0+c3Rh
cnRDb250YWluZXIoKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJr
ZXJUeXBlcywgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgICAg
ICByZW1vdmVNYXJrZXJzKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBlcywgc2hvdWxkUmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIH0KIH0KIApAQCAtMzE5LDEzICszMTksMTMgQEAg
c3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihjb25zdCBEb2N1bWVudE1h
cmtlciYgbmV3TWFya2VyKQogLy8gTWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyIHNvcnRlZCBi
eSB0aGVpciBzdGFydCBvZmZzZXQuCiAvLyBNYXJrZXJzIG9mIHRoZSBzYW1lIHR5cGUgZG8gbm90
IG92ZXJsYXAgZWFjaCBvdGhlci4KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFk
ZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKSAKK3Zv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSYgbm9kZSwgY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikKIHsKICAgICBBU1NFUlQobmV3TWFya2VyLmVuZE9m
ZnNldCgpID49IG5ld01hcmtlci5zdGFydE9mZnNldCgpKTsKICAgICBpZiAobmV3TWFya2VyLmVu
ZE9mZnNldCgpID09IG5ld01hcmtlci5zdGFydE9mZnNldCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKSB7CisgICAgaWYgKGF1
dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBGYWN0
b3IgdGhlIG1hcmtlciBwYWludGluZyBjb2RlIG91dCBvZiBJbmxpbmVUZXh0Qm94IGFuZCB0ZWFj
aCBzaW1wbGUgbGluZSBsYXlvdXQgdG8gdXNlIGl0LgogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4
dD4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJl
cikuZW5zdXJlTGluZUJveGVzKCk7CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtl
ciYgbmV3TWEKIAogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzIHw9IG5ld01hcmtl
ci50eXBlKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBtX21h
cmtlcnMuYWRkKG5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKICAgICAgICAgbGlzdCA9IHN0ZDo6
bWFrZV91bmlxdWU8TWFya2VyTGlzdD4oKTsKQEAgLTM5MCwxNSArMzkwLDE1IEBAIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1l
bnRNYXJrZXImIG5ld01hCiAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50
TWFya2VyKHRvSW5zZXJ0KSk7CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCi0g
ICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAobm9kZS5yZW5kZXJl
cigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIAotICAgIGludmFsaWRh
dGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgIGludmFsaWRhdGVSZWN0c0Zvck1h
cmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKIC8vIGNvcGllcyBtYXJrZXJzIGZyb20gc3JjTm9kZSB0
byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3Bp
ZXMuICBUaGUgc2hpZnQgaXMKIC8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMgY3Jl
YXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNyY05v
ZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3Jj
Tm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUsIGlu
dCBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2Rl
JiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9k
ZSwgaW50IGRlbHRhKQogewogICAgIGlmIChsZW5ndGggPD0gMCkKICAgICAgICAgcmV0dXJuOwpA
QCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFy
a2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICAgICAgcmV0dXJu
OwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBs
aXN0ID0gbV9tYXJrZXJzLmdldChzcmNOb2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9t
YXJrZXJzLmdldCgmc3JjTm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAK
QEAgLTQzMywxMSArNDMzLDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5
TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICAgICAgYWRk
TWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIGRz
dE5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIGRzdE5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQo
KTsKKyAgICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS5yZW5kZXJlcigpKQorICAgICAgICBkc3RO
b2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGlu
dCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlw
ZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0
aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlcikKIHsKICAgICBpZiAobGVuZ3RoIDw9IDApCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVt
b3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKCEobV9tYXJrZXJzLmlzRW1wdHkoKSkpOwogCi0gICAgTWFya2Vy
TGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwog
CkBAIC00OTMsMTMgKzQ5MywxMyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVt
b3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgIH0KIAog
ICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9tYXJrZXJzLnJlbW92ZShub2Rl
KTsKKyAgICAgICAgbV9tYXJrZXJzLnJlbW92ZSgmbm9kZSk7CiAgICAgICAgIGlmIChtX21hcmtl
cnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMg
PSB7IH07CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUtPnJlbmRlcmVyKCkpCi0g
ICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAoZG9jRGlydHkgJiYg
bm9kZS5yZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0K
IAogRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFp
bmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUgbWFya2VyVHlwZSkKQEAgLTUyMywxMyArNTIzLDEzIEBAIERvY3VtZW50TWFya2VyKiBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlv
dXRQb2luCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5vZGUs
IE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFy
a2Vyc0ZvcihOb2RlJiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IG1hcmtlclR5cGVzKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVz
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFy
a2VyKj4gcmVzdWx0OwotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUp
OworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAo
IWxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTU1Myw3ICs1NTMsNyBAQCBWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFy
a2Vyc0luUmFuZ2UoUmFuZ2UmCiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0
TGFzdE5vZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9k
ZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewot
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICAgICAg
Zm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFy
a2VyLT5lbmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydE9mZnNldCgpKQpAQCAtNTY2LDEzICs1NjYs
MTMgQEAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlJgogICAgIHJldHVybiBmb3VuZE1hcmtlcnM7CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5v
ZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCit2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQogewogICAg
IGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAgICAgCi0gICAgTWFya2VyTWFwOjpp
dGVyYXRvciBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOworICAgIE1hcmtlck1hcDo6
aXRlcmF0b3IgaXRlcmF0b3IgPSBtX21hcmtlcnMuZmluZCgmbm9kZSk7CiAgICAgaWYgKGl0ZXJh
dG9yICE9IG1fbWFya2Vycy5lbmQoKSkKICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGl0
ZXJhdG9yLCBtYXJrZXJUeXBlcyk7CiB9CkBAIC02NjMsMTMgKzY2MywxMyBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeQogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRh
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKQogewogICAgIGlmICghcG9zc2libHlI
YXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtl
cnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjgw
LDcgKzY4MCw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMo
Tm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgICAgICBpbnQgdGFyZ2V0U3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRl
bHRhOwogICAgICAgICBpbnQgdGFyZ2V0RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgpICsg
ZGVsdGE7Ci0gICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLT5tYXhDaGFyYWN0
ZXJPZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkgeworICAgICAgICBpZiAodGFyZ2V0
U3RhcnRPZmZzZXQgPj0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZz
ZXQgPD0gMCkgewogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KQEAgLTY5OSw3ICs2OTksNyBAQCB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCBpbgogICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQo
dGFyZ2V0RW5kT2Zmc2V0IDwgbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgPyB0YXJnZXRFbmRP
ZmZzZXQgOiBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CisgICAgICAgICAgICBtYXJrZXIu
c2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkg
PyB0YXJnZXRFbmRPZmZzZXQgOiBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKTsKICAgICAgICAg
ICAgIGRpZFNoaWZ0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC03MDcsMzQg
KzcwNywzNCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5v
ZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgIH0KIAogICAgIGlmIChkaWRT
aGlmdE1hcmtlcikgewotICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2RlKCpu
b2RlKTsKKyAgICAgICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShub2RlKTsKIAot
ICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIG5vZGUtPnJlbmRlcmVy
KCktPnJlcGFpbnQoKTsKKyAgICAgICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgICAg
IG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2
ZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJhbmdl
JiByYW5nZSwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9j
dW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
IW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5k
Q29udGFpbmVyKCk7CisgICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRh
aW5lcigpOworICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwog
Ci0gICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOworICAgIE5v
ZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwogCi0gICAgZm9yIChOb2Rl
KiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIgPyByYW5nZS0+c3RhcnRPZmZzZXQoKSA6IDA7
Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lciA/IHJh
bmdlLT5lbmRPZmZzZXQoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
LSAgICAgICAgc2V0TWFya2Vyc0FjdGl2ZShub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBh
Y3RpdmUpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9
IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIgPyByYW5n
ZS5zdGFydE9mZnNldCgpIDogMDsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9kZSA9
PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgIHNldE1hcmtlcnNBY3RpdmUoKm5vZGUsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZSkKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0aXZlKQogewotICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3Qg
PSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNzUyLDggKzc1Miw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXJzQWN0aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0CiAgICAgICAgIGRp
ZEFjdGl2YXRlTWFya2VyID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZGlkQWN0aXZhdGVNYXJr
ZXIgJiYgbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWlu
dCgpOworICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtlciAmJiBub2RlLnJlbmRlcmVyKCkpCisgICAg
ICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCiBib29sIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6aGFzTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCkBAIC03NjcsNyArNzY3LDcgQEAgYm9vbCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXIKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RM
YXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgeworICAgICAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUpKSB7CiAgICAgICAgICAgICBpZiAo
IW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5lciAmJiBtYXJr
ZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5zdGFydE9mZnNl
dCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaApp
bmRleCA5MDA3YTE4NzNhZDU5YzFkY2NjYTUyNzZlODk0NmViNGVlNWE5MTBhLi5hZmVhNzZhMWFh
YzA5MGQxODZkZjU4ZTc2N2Q2ZjY2YTk4NjY0OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDgsMTkgKzQ4LDE5IEBAIHB1YmxpYzoKICAg
ICB+RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKCk7CiAKICAgICB2b2lkIGRldGFjaCgpOwotICAg
IHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAg
IHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24pOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUqLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1
bWVudE1hcmtlcjo6RGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRj
aE1hcmtlcihjb25zdCBSYW5nZSosIGJvb2wgYWN0aXZlTWF0Y2gpOworICAgIHZvaWQgYWRkTWFy
a2VyKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRkTWFy
a2VyKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24pOworICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUmLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7Cisg
ICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6
RGF0YSYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihjb25z
dCBSYW5nZSYsIGJvb2wgYWN0aXZlTWF0Y2gpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICB2b2lk
IGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJp
bmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBj
b25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGlu
dGVycHJldGF0aW9ucyk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoUmFuZ2Uq
LCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFu
Z2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlv
biwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRy
PGlkPiYgbWV0YWRhdGEpOworICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlc01hcmtlcihSYW5nZSYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMp
OworICAgIHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlJiwgY29uc3QgUmV0YWlu
UHRyPGlkPiYgbWV0YWRhdGEpOwogI2VuZGlmCi0gICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1h
cmtlcihSZWZQdHI8UmFuZ2U+KTsKKyAgICB2b2lkIGFkZERyYWdnZWRDb250ZW50TWFya2VyKFJh
bmdlJik7CiAKLSAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2RlLCBpbnQgZGVsdGEpOworICAgIHZv
aWQgY29weU1hcmtlcnMoTm9kZSYgc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBs
ZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGludCBkZWx0YSk7CiAgICAgYm9vbCBoYXNNYXJrZXJzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFtX3Bv
c3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5jb250YWlucyhEb2N1bWVudE1hcmtlcjo6YWxsTWFy
a2VycygpKSk7CkBAIC03MiwxNyArNzIsMTcgQEAgcHVibGljOgogICAgIC8vIHJlbW92ZSB0aGUg
bWFya2VyLiBJZiB0aGUgYXJndW1lbnQgaXMgZmFsc2UsIHdlIHdpbGwgYWRqdXN0IHRoZSBzcGFu
IG9mIHRoZSBtYXJrZXIgc28gdGhhdCBpdCByZXRhaW5zCiAgICAgLy8gdGhlIHBvcnRpb24gdGhh
dCBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZS4KICAgICBlbnVtIFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyT3JOb3QgeyBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
LCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciB9OwotICAgIHZvaWQgcmVtb3ZlTWFy
a2VycyhSYW5nZSosIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1
bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtl
ck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgdm9p
ZCByZW1vdmVNYXJrZXJzKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjph
bGxNYXJrZXJzKCksICBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9O
b3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgdm9pZCByZW1vdmVNYXJr
ZXJzKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
T3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICB2b2lk
IHJlbW92ZU1hcmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSwgIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05v
dFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlTWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJz
KE5vZGUqLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRN
YXJrZXI6OmFsbE1hcmtlcnMoKSk7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCBPcHRp
b25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1h
cmtlcnMoKSk7CiAgICAgdm9pZCByZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7Ci0gICAgdm9p
ZCBzaGlmdE1hcmtlcnMoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpOwot
ICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShSYW5nZSosIGJvb2wpOwotICAgIHZvaWQgc2V0TWFy
a2Vyc0FjdGl2ZShOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgYm9vbCk7CisgICAgdm9pZCBzaGlmdE1hcmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbnQgZGVsdGEpOworICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYsIGJvb2wp
OworICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNGb3IoTm9kZSosIE9wdGlvblNldDxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtl
cnNGb3IoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1
bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlJiwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CiAgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uT25N
YXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+KTsKIApAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsK
KyAgICB2b2lkIGFkZE1hcmtlcihOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKIAogICAg
IHR5cGVkZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxpc3Q7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+
PiBNYXJrZXJNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggOGVjZTlkZTQ1YjdlNmVmNWY5
OTczZTg5ZTdhYTFiMWNmOTI2ZTQ0ZS4uOTExYzU2YTAwNDI2MWNiZjZmZDQ2MGZlN2IwNGI5NmU0
MDUwZTJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTk2LDcgKzE5Niw3IEBAIEVsZW1l
bnQ6On5FbGVtZW50KCkKICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW1lbnQoKTsK
IAogICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRo
aXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVt
ZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogICAgICAgICBBU1NFUlQoIWhhc1BlbmRp
bmdSZXNvdXJjZXMoKSk7CiAgICAgfQogfQpAQCAtNTMzLDI1ICs1MzMsMjUgQEAgYm9vbCBFbGVt
ZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1l
bnRJbkFjdGl2ZUNoYWluKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVu
dCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0luQWN0
aXZlQ2hhaW4odGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRz
KCkuaXNJbkFjdGl2ZUNoYWluKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rp
b25FbGVtZW50QWN0aXZlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVu
dCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0FjdGl2
ZSh0aGlzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0Fj
dGl2ZSgqdGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxlbWVudEZvY3Vz
ZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIHJl
dHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzRm9jdXNlZCh0aGlzKTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0ZvY3VzZWQoKnRoaXMp
OwogfQogCiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRIb3ZlcmVkKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICByZXR1cm4gZG9jdW1l
bnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0hvdmVyZWQodGhpcyk7CisgICAgcmV0dXJuIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNIb3ZlcmVkKCp0aGlzKTsKIH0KIAogdm9p
ZCBFbGVtZW50OjpzZXRBY3RpdmUoYm9vbCBmbGFnLCBib29sIHBhdXNlKQpAQCAtNTU5LDcgKzU1
OSw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZmxhZywgYm9vbCBwYXVzZSkKICAg
ICBpZiAoZmxhZyA9PSBhY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQo
KS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRBY3RpdmUodGhpcywgZmxhZyk7CisgICAgZG9jdW1l
bnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRBY3RpdmUoKnRoaXMsIGZsYWcpOwogCiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gdGhpcy0+cmVuZGVyU3R5bGUoKTsKICAg
ICBib29sIHJlYWN0c1RvUHJlc3MgPSAocmVuZGVyU3R5bGUgJiYgcmVuZGVyU3R5bGUtPmFmZmVj
dGVkQnlBY3RpdmUoKSkgfHwgc3R5bGVBZmZlY3RlZEJ5QWN0aXZlKCk7CkBAIC02MDgsNyArNjA4
LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRGb2N1cyhib29sIGZsYWcpCiAgICAgaWYgKGZsYWcgPT0g
Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25F
bGVtZW50cygpLnNldEZvY3VzZWQodGhpcywgZmxhZyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0
aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKCp0aGlzLCBmbGFnKTsKICAgICBpbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVt
ZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudEluQ29tcG9zZWRUcmVlKCkpCkBA
IC02MjAsNyArNjIwLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wgZmxhZykKICAg
ICBpZiAoZmxhZyA9PSBob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50
KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0SG92ZXJlZCh0aGlzLCBmbGFnKTsKKyAgICBkb2N1
bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEhvdmVyZWQoKnRoaXMsIGZsYWcpOwogCiAg
ICAgaWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFdoZW4gc2V0dGluZyBob3ZlciB0byBm
YWxzZSwgdGhlIHN0eWxlIG5lZWRzIHRvIGJlIHJlY2FsYydkIGV2ZW4gd2hlbgpAQCAtMTU1OCwx
NiArMTU1OCwxNiBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogICAgIHJl
dHVybiBlbGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmxlbmd0aCgpOwogfQogCi1ib29s
IEVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBj
b25zdAorYm9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50
JiBvdGhlcikgY29uc3QKIHsKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBv
dGhlci0+c3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGVsZW1lbnREYXRhKCkg
PT0gb3RoZXItPmVsZW1lbnREYXRhKCkpCisgICAgb3RoZXIuc3luY2hyb25pemVBbGxBdHRyaWJ1
dGVzKCk7CisgICAgaWYgKGVsZW1lbnREYXRhKCkgPT0gb3RoZXIuZWxlbWVudERhdGEoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVy
biBlbGVtZW50RGF0YSgpLT5pc0VxdWl2YWxlbnQob3RoZXItPmVsZW1lbnREYXRhKCkpOwotICAg
IGlmIChvdGhlci0+ZWxlbWVudERhdGEoKSkKLSAgICAgICAgcmV0dXJuIG90aGVyLT5lbGVtZW50
RGF0YSgpLT5pc0VxdWl2YWxlbnQoZWxlbWVudERhdGEoKSk7CisgICAgICAgIHJldHVybiBlbGVt
ZW50RGF0YSgpLT5pc0VxdWl2YWxlbnQob3RoZXIuZWxlbWVudERhdGEoKSk7CisgICAgaWYgKG90
aGVyLmVsZW1lbnREYXRhKCkpCisgICAgICAgIHJldHVybiBvdGhlci5lbGVtZW50RGF0YSgpLT5p
c0VxdWl2YWxlbnQoZWxlbWVudERhdGEoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3
MjMsNyArMTcyMyw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYg
aW5zZXJ0aW9uUG9pbnQpCiAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9u
UG9pbnQpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3Vy
Y2VzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1v
dmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogCiAKICNpZiBQTEFURk9STShN
QUMpCkBAIC0xNzY2LDcgKzE3NjYsNyBAQCB2b2lkIEVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3QoUmVm
PFNoYWRvd1Jvb3Q+JiYgbmV3U2hhZG93Um9vdCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFB1c2hTaGFkb3dSb290KCp0aGlzLCBzaGFkb3dSb290KTsKIAogICAgIGlmIChzaGFk
b3dSb290Lm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICBkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KCZzaGFkb3dSb290KTsKKyAgICAgICAgZGlkQWRkVXNlckFn
ZW50U2hhZG93Um9vdChzaGFkb3dSb290KTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVTaGFk
b3dSb290KCkKQEAgLTM0ODcsMTAgKzM0ODcsMTAgQEAgdm9pZCBFbGVtZW50OjpjbGVhckhvdmVy
QW5kQWN0aXZlU3RhdHVzQmVmb3JlRGV0YWNoaW5nUmVuZGVyZXIoKQogICAgIGlmICghaXNVc2Vy
QWN0aW9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGhvdmVyZWQoKSkKLSAg
ICAgICAgZG9jdW1lbnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCgqdGhpcyk7CiAgICAgaWYgKGluQWN0
aXZlQ2hhaW4oKSkKLSAgICAgICAgZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRpZERl
dGFjaCh0aGlzKTsKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmRpZERldGFj
aCh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFj
aCgqdGhpcyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWREZXRhY2go
KnRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKaW5kZXggM2ZmNTU3MGFhNDk0NzY0MWU4MmEzMjc0Y2EzNzQ5OTMy
NTBkMWNlNi4uOWYzZDFhMDVmYjQxMTM1NmM1YTFhNjY4MWI3OWZkZTJjMGExOGU2NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCkBAIC0yNTksNyArMjU5LDcgQEAgcHVibGljOgogICAgIC8vIENsb25lcyBh
bGwgYXR0cmlidXRlLWRlcml2ZWQgZGF0YSwgaW5jbHVkaW5nIHN1YmNsYXNzIHNwZWNpZmljcyAo
dGhyb3VnaCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcy4pCiAgICAgdm9pZCBjbG9uZURhdGFG
cm9tRWxlbWVudChjb25zdCBFbGVtZW50Jik7CiAKLSAgICBib29sIGhhc0VxdWl2YWxlbnRBdHRy
aWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdDsKKyAgICBib29sIGhhc0VxdWl2YWxl
bnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQmIG90aGVyKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQm
KSB7IH0KIApAQCAtNTkxLDE0ICs1OTEsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNVc2VyQWN0
aW9uRWxlbWVudEZvY3VzZWQoKSBjb25zdDsKICAgICBib29sIGlzVXNlckFjdGlvbkVsZW1lbnRI
b3ZlcmVkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93
Um9vdChTaGFkb3dSb290KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2VudFNo
YWRvd1Jvb3QoU2hhZG93Um9vdCYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBhbHdheXNDcmVhdGVV
c2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEF0dHIgdG8gY2FsbCB3aWxsTW9kaWZ5QXR0cmlidXRl
L2RpZE1vZGlmeUF0dHJpYnV0ZS4KLSAgICBmcmllbmQgY2xhc3MgQXR0cjsKLQotICAgIGVudW0g
U3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIHsgTm90SW5TeW5jaHJvbml6YXRpb25PZkxh
enlBdHRyaWJ1dGUgPSAwLCBJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB9OwotCiAg
ICAgdm9pZCBkaWRBZGRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogICAgIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
ZXdWYWx1ZSk7CiAgICAgdm9pZCBkaWRNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3
VmFsdWUpOwpAQCAtNjI2LDYgKzYyMSw3IEBAIHByaXZhdGU6CiAgICAgTm9kZVR5cGUgbm9kZVR5
cGUoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNv
bnN0IGZpbmFsOwogCisgICAgZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgeyBO
b3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSwgSW5TeW5jaHJvbml6YXRpb25PZkxh
enlBdHRyaWJ1dGUgfTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZUludGVybmFsKHVuc2lnbmVkIGlu
ZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgU3lu
Y2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB2b2lkIGFkZEF0dHJpYnV0ZUludGVy
bmFsKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBTeW5j
aHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlSW50
ZXJuYWwodW5zaWduZWQgaW5kZXgsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCmluZGV4IDViNzRhMmIzNTk4ODRkMjU2NTJmZGVl
MjgwYWY4ZjIyNjcwYjUyZDAuLjE3YmNlZTZlYTczODJjYjBjYjU4MzNmMTJhYjVkYzU0YjQ3ZDYw
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAj
aW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjYsNyArNjUsNyBAQCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IE5hbWVkTm9k
ZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIFZlY3RvcjxT
dHJpbmc+IE5hbWVkTm9kZU1hcDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiB7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbmFtZXMgPSBtX2VsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsK
LSAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgaXM8SFRNTERvY3VtZW50Piht
X2VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVu
dCkgJiYgbV9lbGVtZW50LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBu
YW1lcy5yZW1vdmVBbGxNYXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKICAgICAgICAgICAgIGZv
ciAoYXV0byBjaGFyYWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CmluZGV4IDViOTdjNjhlN2I3ZGE4MzZmM2M0ODYwMTM1ODE5MDI0YjJmMDlhYTAuLmI1MjNmOTI1
ZmFjNDEyYTU5MjA0MTRjNzc2NDk1ZDJkOTM1ZDIxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTU5
OSw3ICs1OTksNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgIHdoaWxlIChOb2Rl
KiBuZXh0U2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChu
ZXh0U2libGluZy0+bm9kZVR5cGUoKSAhPSBURVhUX05PREUpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBSZWZQdHI8VGV4dD4gbmV4dFRleHQgPSBkb3duY2FzdDxUZXh0Pihu
ZXh0U2libGluZyk7CisgICAgICAgICAgICBSZWY8VGV4dD4gbmV4dFRleHQgPSBkb3duY2FzdDxU
ZXh0PigqbmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4dCBu
b2Rlcy4KICAgICAgICAgICAgIGlmICghbmV4dFRleHQtPmxlbmd0aCgpKSB7CkBAIC02MTAsNyAr
NjEwLDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAgICAgLy8gQm90aCBub24t
ZW1wdHkgdGV4dCBub2Rlcy4gTWVyZ2UgdGhlbS4KICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHRleHQtPmxlbmd0aCgpOwogICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShuZXh0VGV4
dC0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkudGV4dE5vZGVzTWVyZ2VkKG5leHRU
ZXh0LmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgZG9jdW1lbnQoKS50ZXh0Tm9kZXNNZXJn
ZWQobmV4dFRleHQsIG9mZnNldCk7CiAgICAgICAgICAgICBuZXh0VGV4dC0+cmVtb3ZlKCk7CiAg
ICAgICAgIH0KIApAQCAtMTMyMyw3ICsxMzIzLDcgQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9kZShO
b2RlKiBvdGhlcikgY29uc3QKICAgICAgICAgYXV0byYgb3RoZXJFbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm90aGVyKTsKICAgICAgICAgaWYgKHRoaXNFbGVtZW50LnRhZ1FOYW1lKCkgIT0g
b3RoZXJFbGVtZW50LnRhZ1FOYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghdGhpc0VsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoJm90aGVyRWxlbWVu
dCkpCisgICAgICAgIGlmICghdGhpc0VsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMob3Ro
ZXJFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggOGZjMjE1MWJkY2Nh
MDVkMDAxMjllYjdjY2Q5YTRmNmVhYzg2MmFmOC4uNzM0ZDNlMzY5ZjA4ZGNiMzRiNDBkYTE0MTI2
MjU4NTEwYzRhN2U0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKQEAgLTczLDcg
KzczLDcgQEAgaW5saW5lIE5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKE5vZGUmIHJvb3ROb2Rl
LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQdHI8Tm8KICAgICA6IE5vZGVJdGVyYXRvckJhc2Uo
cm9vdE5vZGUsIHdoYXRUb1Nob3csIFdURk1vdmUoZmlsdGVyKSkKICAgICAsIG1fcmVmZXJlbmNl
Tm9kZShyb290Tm9kZSwgdHJ1ZSkKIHsKLSAgICByb290KCkuZG9jdW1lbnQoKS5hdHRhY2hOb2Rl
SXRlcmF0b3IodGhpcyk7CisgICAgcm9vdCgpLmRvY3VtZW50KCkuYXR0YWNoTm9kZUl0ZXJhdG9y
KCp0aGlzKTsKIH0KIAogUmVmPE5vZGVJdGVyYXRvcj4gTm9kZUl0ZXJhdG9yOjpjcmVhdGUoTm9k
ZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlB0cjxOb2RlRmlsdGVyPiYmIGZp
bHRlcikKQEAgLTgzLDcgKzgzLDcgQEAgUmVmPE5vZGVJdGVyYXRvcj4gTm9kZUl0ZXJhdG9yOjpj
cmVhdGUoTm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlAKIAogTm9kZUl0
ZXJhdG9yOjp+Tm9kZUl0ZXJhdG9yKCkKIHsKLSAgICByb290KCkuZG9jdW1lbnQoKS5kZXRhY2hO
b2RlSXRlcmF0b3IodGhpcyk7CisgICAgcm9vdCgpLmRvY3VtZW50KCkuZGV0YWNoTm9kZUl0ZXJh
dG9yKCp0aGlzKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBOb2RlSXRlcmF0b3I6
Om5leHROb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdy
b3Vwcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4
IDRkMzM3Mjc5YzBlY2JjOTUwZGY0OWVlYjFlNTQyNzQyNzMwZDU5N2QuLjQ1ODFhOTRiMTNlZmI2
ZTM4YzM2N2JhNzE4MjY0YWNlNWU3M2Q2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0
dG9uR3JvdXBzLmNwcApAQCAtMzAsMzUgKzMwLDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFJhZGlvQnV0dG9uR3JvdXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIFJhZGlvQnV0dG9uR3JvdXAoKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX21lbWJlcnMuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBpc1JlcXVpcmVkKCkgY29u
c3QgeyByZXR1cm4gbV9yZXF1aXJlZENvdW50OyB9CiAgICAgSFRNTElucHV0RWxlbWVudCogY2hl
Y2tlZEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tlZEJ1dHRvbjsgfQotICAgIHZvaWQg
YWRkKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1M
SW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElu
cHV0RWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICBi
b29sIGNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdDsKKyAgICB2b2lkIGFkZChIVE1M
SW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxl
bWVudCYpOworICAgIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1l
bnQmKTsKKyAgICB2b2lkIHJlbW92ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgYm9vbCBjb250
YWlucyhIVE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVsZW1l
bnQqPiBtZW1iZXJzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc1N0eWxl
UmVjYWxjRm9yQWxsQnV0dG9ucygpOwogICAgIHZvaWQgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0
b25zKCk7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VDaGVja2Vk
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKICAgICB2b2lkIHNldENoZWNrZWRCdXR0b24oSFRN
TElucHV0RWxlbWVudCopOwogCiAgICAgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj4gbV9tZW1i
ZXJzOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fY2hlY2tlZEJ1dHRvbjsKLSAgICBzaXplX3Qg
bV9yZXF1aXJlZENvdW50OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fY2hlY2tlZEJ1dHRvbiB7
IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9yZXF1aXJlZENvdW50IHsgMCB9OwogfTsKIAotUmFk
aW9CdXR0b25Hcm91cDo6UmFkaW9CdXR0b25Hcm91cCgpCi0gICAgOiBtX2NoZWNrZWRCdXR0b24o
bnVsbHB0cikKLSAgICAsIG1fcmVxdWlyZWRDb3VudCgwKQotewotfQotCiBpbmxpbmUgYm9vbCBS
YWRpb0J1dHRvbkdyb3VwOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gIWlzUmVxdWly
ZWQoKSB8fCBtX2NoZWNrZWRCdXR0b247CkBAIC04OCwxNiArODAsMTYgQEAgdm9pZCBSYWRpb0J1
dHRvbkdyb3VwOjpzZXRDaGVja2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKICAg
ICAgICAgb2xkQ2hlY2tlZEJ1dHRvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CiB9CiAKLXZvaWQgUmFk
aW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9C
dXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQo
YnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmICghbV9tZW1iZXJzLmFkZChidXR0b24p
LmlzTmV3RW50cnkpCisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlm
ICghbV9tZW1iZXJzLmFkZCgmYnV0dG9uKS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CiAg
ICAgYm9vbCBncm91cFdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24tPmlzUmVx
dWlyZWQoKSkKKyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkKICAgICAgICAgKyttX3JlcXVp
cmVkQ291bnQ7Ci0gICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRDaGVja2Vk
QnV0dG9uKGJ1dHRvbik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAgIHNldENo
ZWNrZWRCdXR0b24oJmJ1dHRvbik7CiAKICAgICBib29sIGdyb3VwSXNWYWxpZCA9IGlzVmFsaWQo
KTsKICAgICBpZiAoZ3JvdXBXYXNWYWxpZCAhPSBncm91cElzVmFsaWQpCkBAIC0xMDUsMzEgKzk3
LDMxIEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRv
bikKICAgICBlbHNlIGlmICghZ3JvdXBJc1ZhbGlkKSB7CiAgICAgICAgIC8vIEEgcmFkaW8gYnV0
dG9uIG5vdCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0byBtYWtlIGl0CiAg
ICAgICAgIC8vIGludmFsaWQgb25seSBpZiB0aGUgZ3JvdXAgaXMgaW52YWxpZC4KLSAgICAgICAg
YnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRpdHko
KTsKICAgICB9CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRlQ2hlY2tlZFN0YXRl
KEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRl
Q2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQoYnV0
dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMoYnV0
dG9uKSk7CisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFTU0VSVCht
X21lbWJlcnMuY29udGFpbnMoJmJ1dHRvbikpOwogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1ZhbGlk
KCk7Ci0gICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRDaGVja2VkQnV0dG9u
KGJ1dHRvbik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAgIHNldENoZWNrZWRC
dXR0b24oJmJ1dHRvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24g
PT0gYnV0dG9uKQorICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09ICZidXR0b24pCiAgICAg
ICAgICAgICBzZXRDaGVja2VkQnV0dG9uKG51bGxwdHIpOwogICAgIH0KICAgICBpZiAod2FzVmFs
aWQgIT0gaXNWYWxpZCgpKQogICAgICAgICB1cGRhdGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMoKTsK
IH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRN
TElucHV0RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0
dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKQogewotICAgIEFTU0VSVChi
dXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgQVNTRVJUKG1fbWVtYmVycy5jb250YWlucyhi
dXR0b24pKTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0b24oKSk7CisgICAgQVNTRVJU
KG1fbWVtYmVycy5jb250YWlucygmYnV0dG9uKSk7CiAgICAgYm9vbCB3YXNWYWxpZCA9IGlzVmFs
aWQoKTsKLSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1dHRvbi5pc1Jl
cXVpcmVkKCkpCiAgICAgICAgICsrbV9yZXF1aXJlZENvdW50OwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQobV9yZXF1aXJlZENvdW50KTsKQEAgLTEzOSwyMiArMTMxLDIyIEBAIHZvaWQgUmFk
aW9CdXR0b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQq
IGJ1dHRvbikKICAgICAgICAgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7CiB9CiAKLXZv
aWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3Zv
aWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsK
LSAgICBBU1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEhhc2hTZXQ8SFRNTElu
cHV0RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fbWVtYmVycy5maW5kKGJ1dHRvbik7CisgICAg
QVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIGF1dG8gaXQgPSBtX21lbWJlcnMu
ZmluZCgmYnV0dG9uKTsKICAgICBpZiAoaXQgPT0gbV9tZW1iZXJzLmVuZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBib29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwogICAgIG1fbWVtYmVycy5y
ZW1vdmUoaXQpOwotICAgIGlmIChidXR0b24tPmlzUmVxdWlyZWQoKSkgeworICAgIGlmIChidXR0
b24uaXNSZXF1aXJlZCgpKSB7CiAgICAgICAgIEFTU0VSVChtX3JlcXVpcmVkQ291bnQpOwogICAg
ICAgICAtLW1fcmVxdWlyZWRDb3VudDsKICAgICB9CiAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbikg
ewotICAgICAgICBidXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKLSAgICAgICAg
aWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSBidXR0b24pIHsKKyAgICAgICAgYnV0dG9uLmludmFsaWRh
dGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSAmYnV0
dG9uKSB7CiAgICAgICAgICAgICBtX2NoZWNrZWRCdXR0b24gPSBudWxscHRyOwogICAgICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMoKTsKICAgICAgICAgfQpAQCAtMTY4
LDcgKzE2MCw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1l
bnQqIGJ1dHRvbikKICAgICBpZiAoIXdhc1ZhbGlkKSB7CiAgICAgICAgIC8vIEEgcmFkaW8gYnV0
dG9uIG5vdCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0byBtYWtlIGl0CiAg
ICAgICAgIC8vIHZhbGlkIG9ubHkgaWYgdGhlIGdyb3VwIHdhcyBpbnZhbGlkLgotICAgICAgICBi
dXR0b24tPnVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAgIGJ1dHRvbi51cGRhdGVWYWxpZGl0eSgp
OwogICAgIH0KIH0KIApAQCAtMTg4LDkgKzE4MCw5IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6
dXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCkKICAgICB9CiB9CiAKLWJvb2wgUmFkaW9CdXR0
b25Hcm91cDo6Y29udGFpbnMoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKSBjb25zdAorYm9vbCBS
YWRpb0J1dHRvbkdyb3VwOjpjb250YWlucyhIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fbWVtYmVycy5jb250YWlucyhidXR0b24pOworICAgIHJldHVybiBt
X21lbWJlcnMuY29udGFpbnMoJmJ1dHRvbik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNiwxNiAr
MTk4LDE2IEBAIFJhZGlvQnV0dG9uR3JvdXBzOjp+UmFkaW9CdXR0b25Hcm91cHMoKQogewogfQog
Ci12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50
JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAg
IGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFk
aW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25hbWVUb0dy
b3VwTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxOYW1lVG9Hcm91cE1hcD4oKTsKIAotICAgIGF1dG8m
IGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBncm91cCA9IG1fbmFtZVRvR3JvdXBN
YXAtPmFkZChlbGVtZW50Lm5hbWUoKS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICBpZiAoIWdyb3VwKQogICAgICAgICBncm91cCA9IHN0ZDo6bWFrZV91bmlxdWU8UmFkaW9C
dXR0b25Hcm91cD4oKTsKICAgICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQwLDMwICsyMzIs
MjYgQEAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBSYWRpb0J1dHRvbkdyb3Vwczo6Z3JvdXBN
ZW1iZXJzKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQKICAgICByZXR1cm4gZ3JvdXAtPm1lbWJlcnMo
KTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjp1cGRhdGVDaGVj
a2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVu
dC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkK
KyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5h
bWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9uYW1lVG9Hcm91
cE1hcCk7CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm47Ci0gICAg
UmFkaW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC0+
bmFtZSgpLmltcGwoKSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKLSAgICBncm91cC0+dXBkYXRlQ2hl
Y2tlZFN0YXRlKGVsZW1lbnQpOworICAgIG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50Lm5h
bWUoKS5pbXBsKCkpLT51cGRhdGVDaGVja2VkU3RhdGUoZWxlbWVudCk7CiB9CiAKLXZvaWQgUmFk
aW9CdXR0b25Hcm91cHM6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFu
Z2VkKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlz
UmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAg
QVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fbmFtZVRvR3JvdXBNYXAp
OwogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgcmV0dXJuOwotICAgIFJhZGlv
QnV0dG9uR3JvdXAqIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5hbWUo
KS5pbXBsKCkpOwotICAgIEFTU0VSVChncm91cCk7Ci0gICAgZ3JvdXAtPnJlcXVpcmVkQXR0cmli
dXRlQ2hhbmdlZChlbGVtZW50KTsKKyAgICBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC5u
YW1lKCkuaW1wbCgpKS0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKGVsZW1lbnQpOwogfQogCiBI
VE1MSW5wdXRFbGVtZW50KiBSYWRpb0J1dHRvbkdyb3Vwczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3Vw
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI3NSwzOCArMjYzLDM2IEBAIEhU
TUxJbnB1dEVsZW1lbnQqIFJhZGlvQnV0dG9uR3JvdXBzOjpjaGVja2VkQnV0dG9uRm9yR3JvdXAo
Y29uc3QgQXRvbWljU3RyaW5nJiBuCiAgICAgcmV0dXJuIGdyb3VwID8gZ3JvdXAtPmNoZWNrZWRC
dXR0b24oKSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgUmFkaW9CdXR0b25Hcm91cHM6Omhhc0NoZWNr
ZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgUmFk
aW9CdXR0b25Hcm91cHM6Omhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCYg
ZWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsK
LSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBlbGVtZW50LT5uYW1lKCk7CisgICAgQVNT
RVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUgPSBlbGVtZW50Lm5hbWUoKTsKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgfHwgIW1fbmFtZVRv
R3JvdXBNYXApCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5jaGVja2VkKCk7Ci0KLSAgICBjb25z
dCBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChuYW1lLmlt
cGwoKSk7Ci0gICAgcmV0dXJuIGdyb3VwLT5jaGVja2VkQnV0dG9uKCk7CisgICAgICAgIHJldHVy
biBlbGVtZW50LmNoZWNrZWQoKTsKKyAgICByZXR1cm4gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KG5h
bWUuaW1wbCgpKS0+Y2hlY2tlZEJ1dHRvbigpOwogfQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXBz
Ojppc0luUmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9v
bCBSYWRpb0J1dHRvbkdyb3Vwczo6aXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCYg
ZWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsK
LSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5p
c1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBN
YXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKKyAgICBhdXRvKiBncm91cCA9IG1fbmFt
ZVRvR3JvdXBNYXAtPmdldChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpOwogICAgIHJldHVybiBncm91
cCAmJiBncm91cC0+aXNSZXF1aXJlZCgpICYmIGdyb3VwLT5jb250YWlucyhlbGVtZW50KTsKIH0K
IAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZW1vdmVCdXR0b24oSFRNTElucHV0
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigp
KTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVu
dC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fbmFtZVRvR3JvdXBNYXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBOYW1l
VG9Hcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQt
Pm5hbWUoKS5pbXBsKCkpOworICAgIGF1dG8gaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVs
ZW1lbnQubmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCmluZGV4IDFlNWE1OGQ1N2RhNzY4NWUx
YzAxOGZkOTZhZmFmMjA3ZWYwMTMzNmEuLjUzMzEyZGRlOTcwNmNlOGQyNGEzZTIxNGFlYzRlY2Y1
M2VhZWE4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vw
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCkBAIC0zNCwx
MyArMzQsMTMgQEAgY2xhc3MgUmFkaW9CdXR0b25Hcm91cHMgewogcHVibGljOgogICAgIFJhZGlv
QnV0dG9uR3JvdXBzKCk7CiAgICAgflJhZGlvQnV0dG9uR3JvdXBzKCk7Ci0gICAgdm9pZCBhZGRC
dXR0b24oSFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhU
TUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1M
SW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCop
OworICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHVwZGF0
ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZXF1aXJlZEF0dHJp
YnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQmKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9y
R3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0OwotICAgIGJvb2wgaGFz
Q2hlY2tlZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7Ci0gICAgYm9vbCBp
c0luUmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBoYXND
aGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKKyAgICBib29sIGlz
SW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKICAgICBWZWN0b3I8SFRN
TElucHV0RWxlbWVudCo+IGdyb3VwTWVtYmVycyhjb25zdCBIVE1MSW5wdXRFbGVtZW50JikgY29u
c3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCAwNDk0Y2IyYmU5MDVhNDIyMDc5
MGM2NjI1MmVlMDIxMGY4ZjM1OGVmLi4xNTMyMTNkMDgxNDNjYmM1Y2JmYmE3YzM5MTE5ODQ2NWQw
MzdhNzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBA
IC03OSw3ICs3OCw3IEBAIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1l
bnQpCiAgICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBtX293bmVy
RG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNo
UmFuZ2UoKnRoaXMpOwogfQogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93
bmVyRG9jdW1lbnQpCkBAIC05Niw3ICs5NSw3IEBAIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1l
bnQmIG93bmVyRG9jdW1lbnQsIE5vZGUqIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzCiAg
ICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBtX293bmVyRG9jdW1l
bnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2Uo
KnRoaXMpOwogCiAgICAgLy8gU2ltcGx5IHNldHRpbmcgdGhlIGNvbnRhaW5lcnMgYW5kIG9mZnNl
dHMgZGlyZWN0bHkgd291bGQgbm90IGRvIGFueSBvZiB0aGUgY2hlY2tpbmcKICAgICAvLyB0aGF0
IHNldFN0YXJ0IGFuZCBzZXRFbmQgZG8sIHNvIHdlIGNhbGwgdGhvc2UgZnVuY3Rpb25zLgpAQCAt
MTI1LDcgKzEyNCw3IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3duZXJE
b2N1bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlCiAKIFJhbmdlOjp+UmFuZ2Uo
KQogewotICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25l
ckRvY3VtZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgcmFu
Z2VDb3VudGVyLmRlY3JlbWVudCgpOwpAQCAtMTM1LDExICsxMzQsMTEgQEAgUmFuZ2U6On5SYW5n
ZSgpCiB2b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAg
QVNTRVJUKG1fb3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOwotICAgIG1fb3duZXJE
b2N1bWVudC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hS
YW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgbV9zdGFy
dC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2Rl
KGRvY3VtZW50KTsKLSAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAg
IG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMpOwogfQogCiBOb2RlKiBSYW5nZTo6
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVy
QikKQEAgLTk3Nyw3ICs5NzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+
IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJgogICAgICAgICBl
bGVtZW50ID0gJmRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGVsc2UKICAgICAgICAgZWxl
bWVudCA9IG5vZGUucGFyZW50RWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCB8fCAoaXM8SFRN
TERvY3VtZW50PihlbGVtZW50LT5kb2N1bWVudCgpKSAmJiBpczxIVE1MSHRtbEVsZW1lbnQ+KCpl
bGVtZW50KSkpCisgICAgaWYgKCFlbGVtZW50IHx8IChlbGVtZW50LT5kb2N1bWVudCgpLmlzSFRN
TERvY3VtZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50PigqZWxlbWVudCkpKQogICAgICAgICBl
bGVtZW50ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICBy
ZXR1cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJrdXAs
IEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0KQEAg
LTE2NjksOSArMTY2OCw5IEBAIHZvaWQgUmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5v
ZGUpCiAgICAgYm91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZChtX2VuZCwgbm9kZSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9p
bnQmIGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gdGV4dCkKKyAgICBpZiAoYm91
bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25l
ZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgIGlmIChvZmZzZXQgPj0g
Ym91bmRhcnlPZmZzZXQpCkBAIC0xNjc5LDE3ICsxNjc4LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2Rl
KiB0ZXh0CiAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KGJvdW5kYXJ5T2Zmc2V0ICsgbGVuZ3RoKTsK
IH0KIAotdm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCh0ZXh0KTsK
LSAgICBBU1NFUlQoJnRleHQtPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAg
QVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CiAgICAgYm91bmRh
cnlUZXh0SW5zZXJ0ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJvdW5k
YXJ5VGV4dEluc2VydGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91
bmRhcnksIE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorc3Rh
dGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBi
b3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9IHRleHQpCisgICAgaWYgKGJvdW5kYXJ5
LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91
bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5k
YXJ5T2Zmc2V0KQpAQCAtMTcwMCwxMCArMTY5OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3Vu
ZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUqIHRleHQs
CiAgICAgICAgIGJvdW5kYXJ5LnNldE9mZnNldChib3VuZGFyeU9mZnNldCAtIGxlbmd0aCk7CiB9
CiAKLXZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQordm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSYgdGV4dCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKHRleHQpOwotICAg
IEFTU0VSVCgmdGV4dC0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NF
UlQoJnRleHQuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKICAgICBib3VuZGFyeVRl
eHRSZW1vdmVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRl
eHRSZW1vdmVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CkBAIC0xNzI4LDE1ICsx
NzI1LDE1IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGRO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQobV9lbmQs
IG9sZE5vZGUsIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRO
b2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sZE5vZGUpCitz
dGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9p
bnQmIGJvdW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewotICAgIGF1dG8qIHBhcmVudCA9IG9sZE5v
ZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9k
ZSkgewotICAgICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOwor
ICAgIGF1dG8qIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmIChib3VuZGFy
eS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgeworICAgICAgICB1bnNpZ25lZCBzcGxpdE9mZnNl
dCA9IG9sZE5vZGUubGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0g
Ym91bmRhcnkub2Zmc2V0KCk7CiAgICAgICAgIGlmIChib3VuZGFyeU9mZnNldCA+IHNwbGl0T2Zm
c2V0KSB7CiAgICAgICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICAgICAgIGJvdW5kYXJ5
LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBzcGxpdE9mZnNl
dCwgMCk7CisgICAgICAgICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5leHRTaWJsaW5n
KCksIGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldE9mZnNldChzcGxpdE9mZnNldCk7CiAgICAgICAg
IH0KQEAgLTE3NDQsMjAgKzE3NDEsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4
dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCogb2wKICAgICB9
CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYm91bmRhcnkuY29u
dGFpbmVyKCkgPT0gcGFyZW50ICYmIGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gb2xkTm9kZSkg
ewotICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAg
aWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9y
ZSgpID09ICZvbGROb2RlKSB7CisgICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS5uZXh0
U2libGluZygpOwogICAgICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgICAgICBib3VuZGFyeS5z
ZXRUb0FmdGVyQ2hpbGQoKm5ld0NoaWxkKTsKICAgICB9CiB9CiAKLXZvaWQgUmFuZ2U6OnRleHRO
b2RlU3BsaXQoVGV4dCogb2xkTm9kZSkKK3ZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4dCYg
b2xkTm9kZSkKIHsKLSAgICBBU1NFUlQob2xkTm9kZSk7Ci0gICAgQVNTRVJUKCZvbGROb2RlLT5k
b2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAgIEFTU0VSVChvbGROb2RlLT5pc1Rl
eHROb2RlKCkpOwotICAgIEFTU0VSVCghb2xkTm9kZS0+cGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUt
Pm5leHRTaWJsaW5nKCkpOwotICAgIEFTU0VSVCghb2xkTm9kZS0+cGFyZW50Tm9kZSgpIHx8IG9s
ZE5vZGUtPm5leHRTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKCZvbGROb2Rl
LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCFvbGROb2RlLnBh
cmVudE5vZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5nKCkpOworICAgIEFTU0VSVCghb2xkTm9k
ZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2libGluZygpLT5pc1RleHROb2RlKCkpOwog
ICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9zdGFydCwgb2xkTm9kZSk7CiAgICAgYm91bmRh
cnlUZXh0Tm9kZXNTcGxpdChtX2VuZCwgb2xkTm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGY0
M2RiMzllNWM4OWRjMTIyMjVlYzg1NWQ2YjVhMTkwYTViNzgyOTQuLjEwYTU4ZjQ1NGVhNTJjMzdi
ZDM1MGMyNTdkMDU4MmE5YjJmNTk4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xMzMsMTAgKzEzMywx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5l
ck5vZGUmKTsKICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKIAotICAgIHZvaWQg
dGV4dEluc2VydGVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5k
ZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRl
eHQqIG9sZE5vZGUpOworICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAog
ICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sg
b3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgogICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRleCBhYTVmNmJjNTZiNTVkM2U3NWRjOGQzZDc0Nzk1
NjhjM2E2ODk2OWVhLi5hNDNhNzg4ZTQ1ZmMwNzUxYjJlNjMwNzIxOTdlZDk5ZmQxMjg2NWE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0yNTYsMTEgKzI1NiwxMSBAQCBi
b29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uJiBzY3Jp
cHRTdGFydFBvc2l0aW9uLCBMZWdhYwogICAgIH0gZWxzZSBpZiAoKGlzQ2xhc3NpY0V4dGVybmFs
U2NyaXB0IHx8IHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6TW9kdWxlKSAmJiAhaGFzQXN5bmNB
dHRyaWJ1dGUoKSAmJiAhbV9mb3JjZUFzeW5jKSB7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJbk9y
ZGVyID0gdHJ1ZTsKICAgICAgICAgQVNTRVJUKG1fbG9hZGFibGVTY3JpcHQpOwotICAgICAgICBk
b2N1bWVudC5zY3JpcHRSdW5uZXIoKS0+cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oKnRoaXMsICpt
X2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7CisgICAg
ICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlz
LCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOwog
ICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgfHwgc2NyaXB0VHlwZSA9PSBTY3Jp
cHRUeXBlOjpNb2R1bGUpIHsKICAgICAgICAgQVNTRVJUKG1fbG9hZGFibGVTY3JpcHQpOwogICAg
ICAgICBBU1NFUlQoaGFzQXN5bmNBdHRyaWJ1dGUoKSB8fCBtX2ZvcmNlQXN5bmMpOwotICAgICAg
ICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS0+cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oKnRoaXMs
ICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7CisgICAg
ICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlz
LCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOwogICAg
IH0gZWxzZSBpZiAoIWhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYg
IWRvY3VtZW50LmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7CiAgICAgICAgIEFTU0VSVChzY3Jp
cHRUeXBlID09IFNjcmlwdFR5cGU6OkNsYXNzaWMpOwogICAgICAgICBtX3dpbGxCZVBhcnNlckV4
ZWN1dGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCAzZWMzMDg1MWY4ODUyOGJhMzAzZmIy
MjVkOTMwYzFiZmQ1NWU1YmFmLi5hOWU2YWMyZTA4YzAxZjI0NTA2MmVkMjExMGUwMWZhMzg5MWQ3
ZDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC03Myw3ICs3Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxU
ZXh0Pj4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgICAgIHJldHVy
biBpbnNlcnRSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIGRvY3VtZW50
KCkudGV4dE5vZGVTcGxpdCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLnRleHROb2RlU3BsaXQoKnRo
aXMpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnNldFRleHRX
aXRoT2Zmc2V0KGRhdGEoKSwgMCwgb2xkRGF0YS5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmNwcAppbmRleCBhN2RiZTUxNDZhM2M4OGM0ZWZmY2E3
ZmJiMmY3ZDIxOTM3NzQyOWQ3Li43M2UzYTYyMWQ2ZjhmODE2YjViZDhlZDE2MDc1ZjJkZmVmYjc5
Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5jcHAKQEAg
LTMyLDkgKzMyLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFVzZXJBY3Rpb25F
bGVtZW50U2V0OjpkaWREZXRhY2goRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgVXNlckFjdGlvbkVs
ZW1lbnRTZXQ6OmRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOworICAgIEFTU0VSVChlbGVtZW50LmlzVXNlckFj
dGlvbkVsZW1lbnQoKSk7CiAgICAgY2xlYXJGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcgfCBJ
bkFjdGl2ZUNoYWluRmxhZyB8IElzSG92ZXJlZEZsYWcpOwogfQogCkBAIC00MywzMSArNDMsMjgg
QEAgdm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZG9jdW1lbnREaWRSZW1vdmVMYXN0UmVmKCkK
ICAgICBtX2VsZW1lbnRzLmNsZWFyKCk7CiB9CiAKLWJvb2wgVXNlckFjdGlvbkVsZW1lbnRTZXQ6
Omhhc0ZsYWdzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKSBjb25zdAor
Ym9vbCBVc2VyQWN0aW9uRWxlbWVudFNldDo6aGFzRmxhZ3MoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgdW5zaWduZWQgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNlckFj
dGlvbkVsZW1lbnQoKSk7Ci0gICAgRWxlbWVudEZsYWdNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5k
ID0gbV9lbGVtZW50cy5maW5kKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpKTsKLSAgICBp
ZiAoZm91bmQgPT0gbV9lbGVtZW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBmb3VuZC0+dmFsdWUgJiBmbGFnczsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJB
Y3Rpb25FbGVtZW50KCkpOworICAgIHJldHVybiBtX2VsZW1lbnRzLmdldChjb25zdF9jYXN0PEVs
ZW1lbnQqPigmZWxlbWVudCkpICYgZmxhZ3M7CiB9CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1lbnRT
ZXQ6OmNsZWFyRmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCit2b2lkIFVz
ZXJBY3Rpb25FbGVtZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVk
IGZsYWdzKQogewotICAgIGlmICghZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKSB7Ci0g
ICAgICAgIEFTU0VSVChtX2VsZW1lbnRzLmVuZCgpID09IG1fZWxlbWVudHMuZmluZChlbGVtZW50
KSk7CisgICAgaWYgKCFlbGVtZW50LmlzVXNlckFjdGlvbkVsZW1lbnQoKSkgeworICAgICAgICBB
U1NFUlQoIW1fZWxlbWVudHMuY29udGFpbnMoJmVsZW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEVsZW1lbnRGbGFnTWFwOjppdGVyYXRvciBmb3VuZCA9IG1fZWxlbWVudHMu
ZmluZChlbGVtZW50KTsKKyAgICBhdXRvIGZvdW5kID0gbV9lbGVtZW50cy5maW5kKCZlbGVtZW50
KTsKICAgICBpZiAoZm91bmQgPT0gbV9lbGVtZW50cy5lbmQoKSkgewotICAgICAgICBlbGVtZW50
LT5zZXRVc2VyQWN0aW9uRWxlbWVudChmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuc2V0VXNlckFj
dGlvbkVsZW1lbnQoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdW5zaWdu
ZWQgdXBkYXRlZCA9IGZvdW5kLT52YWx1ZSAmIH5mbGFnczsKICAgICBpZiAoIXVwZGF0ZWQpIHsK
LSAgICAgICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQoZmFsc2UpOworICAgICAgICBl
bGVtZW50LnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKICAgICAgICAgbV9lbGVtZW50cy5y
ZW1vdmUoZm91bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzUsMTcgKzcyLDE2IEBA
IHZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmNsZWFyRmxhZ3MoRWxlbWVudCogZWxlbWVudCwg
dW5zaWduZWQgZmxhZ3MpCiAgICAgZm91bmQtPnZhbHVlID0gdXBkYXRlZDsKIH0KIAotdm9pZCBV
c2VyQWN0aW9uRWxlbWVudFNldDo6c2V0RmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQg
ZmxhZ3MpCit2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpzZXRGbGFncyhFbGVtZW50JiBlbGVt
ZW50LCB1bnNpZ25lZCBmbGFncykKIHsKLSAgICBFbGVtZW50RmxhZ01hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9lbGVtZW50cy5maW5kKGVsZW1lbnQpOwotICAgIGlmIChyZXN1bHQgIT0gbV9lbGVt
ZW50cy5lbmQoKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVu
dCgpKTsKLSAgICAgICAgcmVzdWx0LT52YWx1ZSB8PSBmbGFnczsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fZWxlbWVudHMuYWRkKCZlbGVtZW50LCBmbGFncyk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGZsYWdzOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQodHJ1ZSk7Ci0gICAg
bV9lbGVtZW50cy5hZGQoZWxlbWVudCwgZmxhZ3MpOworICAgIGVsZW1lbnQuc2V0VXNlckFjdGlv
bkVsZW1lbnQodHJ1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9V
c2VyQWN0aW9uRWxlbWVudFNldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVt
ZW50U2V0LmgKaW5kZXggY2U3NjRjM2ViODM3MTg3N2JmZThhMWI4OTE1OGE2OGI3MjVmODNlZi4u
YTRjNTliOTIwZmQ5ZDFmZGE0NTEwZjIxOGRjOTM4MzhkMjFiZWUxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjcsOCArMjcsOCBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzYsMTYgKzM2LDE3IEBAIGNsYXNzIEVsZW1lbnQ7CiAKIGNsYXNzIFVzZXJBY3Rpb25FbGVtZW50
U2V0IHsKIHB1YmxpYzoKLSAgICBib29sIGlzRm9jdXNlZChjb25zdCBFbGVtZW50KiBlbGVtZW50
KSB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0ZvY3VzZWRGbGFnKTsgfQotICAgIGJvb2wg
aXNBY3RpdmUoY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVu
dCwgSXNBY3RpdmVGbGFnKTsgfQotICAgIGJvb2wgaXNJbkFjdGl2ZUNoYWluKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIEluQWN0aXZlQ2hhaW5GbGFn
KTsgfQotICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJu
IGhhc0ZsYWdzKGVsZW1lbnQsIElzSG92ZXJlZEZsYWcpOyB9Ci0gICAgdm9pZCBzZXRGb2N1c2Vk
KEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJs
ZSwgSXNGb2N1c2VkRmxhZyk7IH0KLSAgICB2b2lkIHNldEFjdGl2ZShFbGVtZW50KiBlbGVtZW50
LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzQWN0aXZlRmxhZyk7
IH0KLSAgICB2b2lkIHNldEluQWN0aXZlQ2hhaW4oRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFi
bGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0KLSAg
ICB2b2lkIHNldEhvdmVyZWQoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0Rmxh
Z3MoZWxlbWVudCwgZW5hYmxlLCBJc0hvdmVyZWRGbGFnKTsgfQorICAgIGJvb2wgaXNGb2N1c2Vk
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQs
IElzRm9jdXNlZEZsYWcpOyB9CisgICAgYm9vbCBpc0FjdGl2ZShjb25zdCBFbGVtZW50JiBlbGVt
ZW50KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcpOyB9Cisg
ICAgYm9vbCBpc0luQWN0aXZlQ2hhaW4oY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyBy
ZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9CisgICAgYm9vbCBp
c0hvdmVyZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4gaGFzRmxhZ3Mo
ZWxlbWVudCwgSXNIb3ZlcmVkRmxhZyk7IH0KIAotICAgIHZvaWQgZGlkRGV0YWNoKEVsZW1lbnQq
KTsKKyAgICB2b2lkIHNldEZvY3VzZWQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUpIHsg
c2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0ZvY3VzZWRGbGFnKTsgfQorICAgIHZvaWQgc2V0
QWN0aXZlKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQs
IGVuYWJsZSwgSXNBY3RpdmVGbGFnKTsgfQorICAgIHZvaWQgc2V0SW5BY3RpdmVDaGFpbihFbGVt
ZW50JiBlbGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElu
QWN0aXZlQ2hhaW5GbGFnKTsgfQorICAgIHZvaWQgc2V0SG92ZXJlZChFbGVtZW50JiBlbGVtZW50
LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzSG92ZXJlZEZsYWcp
OyB9CisKKyAgICB2b2lkIGRpZERldGFjaChFbGVtZW50Jik7CiAgICAgdm9pZCBkb2N1bWVudERp
ZFJlbW92ZUxhc3RSZWYoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDEzICs1NywxMyBAQCBwcml2YXRl
OgogICAgICAgICBJc0ZvY3VzZWRGbGFnICAgICA9IDEgPDwgMwogICAgIH07CiAKLSAgICB2b2lk
IHNldEZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlLCB1bnNpZ25lZCBmbGFncykg
eyBlbmFibGUgPyBzZXRGbGFncyhlbGVtZW50LCBmbGFncykgOiBjbGVhckZsYWdzKGVsZW1lbnQs
IGZsYWdzKTsgfQotICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCosIHVuc2lnbmVkKTsKLSAgICB2
b2lkIGNsZWFyRmxhZ3MoRWxlbWVudCosIHVuc2lnbmVkKTsKLSAgICBib29sIGhhc0ZsYWdzKGNv
bnN0IEVsZW1lbnQqLCB1bnNpZ25lZCBmbGFncykgY29uc3Q7CisgICAgdm9pZCBzZXRGbGFncyhF
bGVtZW50JiBlbGVtZW50LCBib29sIGVuYWJsZSwgdW5zaWduZWQgZmxhZ3MpIHsgZW5hYmxlID8g
c2V0RmxhZ3MoZWxlbWVudCwgZmxhZ3MpIDogY2xlYXJGbGFncyhlbGVtZW50LCBmbGFncyk7IH0K
KyAgICB2b2lkIHNldEZsYWdzKEVsZW1lbnQmLCB1bnNpZ25lZCk7CisgICAgdm9pZCBjbGVhckZs
YWdzKEVsZW1lbnQmLCB1bnNpZ25lZCk7CisgICAgYm9vbCBoYXNGbGFncyhjb25zdCBFbGVtZW50
JiwgdW5zaWduZWQgZmxhZ3MpIGNvbnN0OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxF
bGVtZW50PiwgdW5zaWduZWQ+IEVsZW1lbnRGbGFnTWFwOwotICAgIEVsZW1lbnRGbGFnTWFwIG1f
ZWxlbWVudHM7CisgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5IHRoaXMgbmVlZHMgdG8gYmUgYSBS
ZWZQdHIuIFNob3VsZCBjaGFuZ2UgdG8gYSBjb25zdCBFbGVtZW50Ki4KKyAgICBIYXNoTWFwPFJl
ZlB0cjxFbGVtZW50PiwgdW5zaWduZWQ+IG1fZWxlbWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcAppbmRleCBkMTQ3MjQyNzcyMzc0NjhkNGY2MWZmZTMzYzc1ZmU0NmE4
MTkyM2RjLi4zYjhmOWQ3NDM2NThkY2E1YjlhNGY2NWU4ZjlkY2Q0ODE5NDJkZTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAKQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFw
cGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgLy8gcmVs
YXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4g
V2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCiAgICAgLy8gdG8gc3RvcmUg
dGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZp
cnN0IGNyZWF0ZSBhIHJhbmdlCiAgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2Yg
cGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4K
LSAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24t
PnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0byBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogCiAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlv
bk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7CiAgICAgaWYg
KCFzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCkpCkBA
IC0yMTAsNyArMjEwLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFs
dGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNv
IHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2Uu
Ci0gICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0
KCkpOworICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LnB0cigpKTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0
aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCiAg
ICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKQEAgLTIz
NCw3ICsyMzQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJu
YXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpLm1hcmtlcnMoKTsKIAogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDogbWFya2Vy
VHlwZXNUb0FkZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5n
ZXQoKSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVU
ZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBtYXJrZXJzLmFkZE1h
cmtlcigqcmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JB
cHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwogfQog
CiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZv
cmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKQEAgLTI2NiwxMiArMjY2LDEyIEBAIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAgICAgbV9m
cmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9u
VHJpZ2dlcmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9m
cmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgIGF1dG8gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSk7CiAKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0
KCksIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQp
OwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1l
bnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZSwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGlu
ZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgbWFya2Vycy5hZGRN
YXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy5h
ZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
IH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKQEAgLTM1
OSw3ICszNTksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVy
bmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdQogICAgICAgICBpZiAocmVzdWx0
Lmxlbmd0aCgpKQogICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpyYW5n
ZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJl
Y3Rpb24oKSk7CiAgICAgICAgIGVsc2UgaWYgKCFtX2lzRGlzbWlzc2VkQnlFZGl0aW5nKQotICAg
ICAgICAgICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkTWFya2VyKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtl
cjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7CisgICAgICAgICAgICByYW5n
ZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGRNYXJrZXIoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRD
b3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0
ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVT
cGVsbGluZ1N1Z2dlc3Rpb25zOgpAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250
YWluZXJOb2RlKCk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBub2RlLT5kb2N1bWVudCgpLm1h
cmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUpKSB7CisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBub2Rl
LT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICBBU1NF
UlQobWFya2VyKTsKICAgICAgICAgaWYgKHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKCptYXJr
ZXIsIHBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQxLDEyICs0NDEsMTAgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5n
KEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxp
bmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwotICAg
IGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXImIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJz
LmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAg
ICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hl
Y2tpbmdFeGVtcHRpb24pOworICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1l
LmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFu
ZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEFsdGVybmF0
aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVUZXh0
Q2xpZW50KCkKQEAgLTQ3NCw4ICs0NzIsOCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwbwogCiB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChSYW5nZSYgY2hhbmdl
ZFJhbmdlKQogewotICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCku
bWFya2VycygpLnJlbW92ZU1hcmtlcnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCkubWFya2VycygpLmFkZE1hcmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCkBAIC00ODMsOSArNDgxLDkgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5n
ZSwgY29uc3QgU3RyaW4KICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBy
ZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAg
Zm9yIChhdXRvIG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpIHsK
ICAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8
IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAgICAg
ICBtYXJrZXJzLmFkZE1hcmtlcigmcmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRT
dHJpbmcpOworICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgbWFy
a2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXJr
ZXJzLmFkZE1hcmtlcigmcmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CisgICAgICAgICAgICBt
YXJrZXJzLmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBtYXJrZXJUeXBlKTsKICAgICB9CiB9CiAK
QEAgLTUwNSw3ICs1MDMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29y
ZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKAogICAgICAgICAgICAg
Y2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2U6OkVkaXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKICAgICB9CiAKLSAgICBtYXJrZXJz
LnJlbW92ZU1hcmtlcnMoJnJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9u
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCkBAIC01MjQs
MTUgKzUyMiwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRp
bmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNlbGVj
dGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2Vs
ZWN0aW9uKTsKLSAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwg
ZW5kT2ZTZWxlY3Rpb24pOworICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5n
Q2hhcmFjdGVyUmFuZ2UucHRyKCkpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXBy
ZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0
ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAv
LyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3Jk
IGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQg
YWdhaW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7Cisg
ICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJh
Y3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdp
bmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFs
dGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKQEAgLTU3MywyMSAr
NTcxLDE5IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2Vy
QXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRp
bWVyRm9yKG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCks
IG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7Ci0gICAgaWYgKCF3b3JkUmFuZ2UpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUu
ZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRP
ZmZzZXQoKSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5w
dHIoKSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gY3VycmVudFdvcmQ7CiAgICAgc3dpdGNoIChtYXJr
ZXIudHlwZSgpKSB7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6Ci0gICAgICAg
IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAgICAgIG1fZGV0YWlscyA9IGVt
cHR5U3RyaW5nKCk7CiAgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5h
dGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgotICAgICAgICBtX3JhbmdlV2l0aEFsdGVy
bmF0aXZlID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RG
TW92ZSh3b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBtYXJrZXIuZGVzY3JpcHRpb24o
KTsKICAgICAgICAgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5
cGVSZXZlcnNpb24pOwogICAgICAgICBicmVhazsKQEAgLTU5Nyw3ICs1OTMsNyBAQCBib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0
IERvY3VtZW50TWFya2VyJgogICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8RG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOwogICAgICAgICBpZiAo
Y3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7Cisg
ICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAg
ICAgIG1fZGV0YWlscyA9IG1hcmtlckRhdGEuY29udGV4dDsKICAgICAgICAgc3RhcnRBbHRlcm5h
dGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVEaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAKaW5kZXggZDZmZDczYzIzYWNiMzE3MzVkOGM2ZDNhZjU2YTNhYjdmYjgxOTI2OC4uMWUy
MzVmNmI0ZGM2M2ZmZmQyNWNiMzdlNmRhY2E0NjgzZjVhYTNiYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTc2OCwxMyArNzY4LDEz
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vydmlu
Z01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
JiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgYXV0byBtYXJr
ZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyBjb3VudCks
IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShu
b2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIFJlZlB0cjxSYW5nZT4g
bmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2Rl
LCBvZmZzZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOworICAgIGF1dG8gbmV3UmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQg
KyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgbWFya2Vy
IDogbWFya2VycykKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXIu
YWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRp
b24oKSwgbWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJrZXIubWV0YWRhdGEoKSk7CisgICAgICAg
IG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLCBtYXJrZXIudHlwZSgpLCBtYXJr
ZXIuZGVzY3JpcHRpb24oKSwgbWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJrZXIubWV0YWRhdGEo
KSk7CiAjZWxzZQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZS5n
ZXQoKSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCkpOwotI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2Us
IG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKKyNlbmRpZgogfQogCiBQb3Np
dGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rp
Y3RhdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21t
YW5kLmNwcAppbmRleCAyODJiZGM5ZTMxNWI3MmMyNWFkNWJlODJjNmJmMDcxNGQ1YzE3YWI5Li43
OTA2NjVmZDY3MmRmYjRkNmUyMTY4MTEyYzU3NGUxZTRhMTdjM2YwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEaWN0YXRpb25NYXJrZXJTdXBwbGllcihh
bHRlcm5hdGl2ZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRl
eHQqIHRleHROb2RlLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0
ZXh0VG9CZUluc2VydGVkKSBvdmVycmlkZQorICAgIHZvaWQgYWRkTWFya2Vyc1RvVGV4dE5vZGUo
VGV4dCYgdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJpbmcm
IHRleHRUb0JlSW5zZXJ0ZWQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvJiBtYXJrZXJD
b250cm9sbGVyID0gdGV4dE5vZGUtPmRvY3VtZW50KCkubWFya2VycygpOworICAgICAgICBhdXRv
JiBtYXJrZXJDb250cm9sbGVyID0gdGV4dE5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAg
ICAgIGZvciAoYXV0byYgYWx0ZXJuYXRpdmUgOiBtX2FsdGVybmF0aXZlcykgewogICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGEgZGF0YSB7IGFsdGVybmF0aXZlLmRpY3Rh
dGlvbkNvbnRleHQsIHRleHRUb0JlSW5zZXJ0ZWQuc3Vic3RyaW5nKGFsdGVybmF0aXZlLnJhbmdl
U3RhcnQsIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoKSB9OwogICAgICAgICAgICAgbWFya2VyQ29u
dHJvbGxlci5hZGRNYXJrZXJUb05vZGUodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3RhcnQg
KyBvZmZzZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIFdURk1vdmUoZGF0YSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKaW5kZXggNTc0MDk3YTZlY2QwODM4NTMxZDgzYmQwZjFiNGY4Njg0YWJk
YmQzOC4uMjdmZmVhZDUyN2ExNDJjMzdkZTlkYjMzM2ZlOTE1ZjE4ZjRjNGI1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMTU1LDcgKzExNTUsNyBAQCBib29sIGFyZUlkZW50
aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUmIGZpcnN0LCBjb25zdCBOb2RlJiBzZWNvbmQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBmaXJzdEVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50PihmaXJzdCk7CiAgICAgYXV0byYgc2Vjb25kRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KHNlY29uZCk7Ci0gICAgcmV0dXJuIGZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNlY29uZEVsZW1l
bnQudGFnUU5hbWUoKSkgJiYgZmlyc3RFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKCZz
ZWNvbmRFbGVtZW50KTsKKyAgICByZXR1cm4gZmlyc3RFbGVtZW50Lmhhc1RhZ05hbWUoc2Vjb25k
RWxlbWVudC50YWdRTmFtZSgpKSAmJiBmaXJzdEVsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0
ZXMoc2Vjb25kRWxlbWVudCk7CiB9CiAKIGJvb2wgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVt
ZW50KGNvbnN0IE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggOTky
NDQwMzY2NWFmNWRlM2Q0MjgyYTE3NDIyYTIyZWMyY2Q2YjlhZi4uYjRlNTkzMjRiNWQxODMxNjIx
OGQyZmRlZjZhYjJjZjBhYjBkM2RlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAt
MTg5NSw3ICsxODk1LDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICAgICAg
CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQotICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAg
ICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgp
KTsKQEAgLTE5MTEsNyArMTkxMSw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAog
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVN
YXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAg
U3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NFUlQodGV4dC5sZW5ndGgoKSk7
CkBAIC0yMDc3LDEyICsyMDc3LDEyIEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgQVNTRVJUKGdyYW1tYXJE
ZXRhaWwubG9jYXRpb24gIT0gLTEgJiYgZ3JhbW1hckRldGFpbC5sZW5ndGggPiAwKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRoIGRv
dWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAotICAgICAgICBSZWZQ
dHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmdyYW1t
YXJTZWFyY2hSYW5nZSwgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwubG9jYXRp
b24sIGdyYW1tYXJEZXRhaWwubGVuZ3RoKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVM
VF9BRkZJTklUWSkpOworICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UoKmdyYW1tYXJTZWFyY2hSYW5nZSwgZ3JhbW1hclBocmFzZU9mZnNldCArIGdy
YW1tYXJEZXRhaWwubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwubGVuZ3RoKTsKKyAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFy
UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRh
aWwpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVz
Y3JpcHRpb24pOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3Jh
bW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVz
Y3JpcHRpb24pOwogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5p
c0VtcHR5KCkpIHsKQEAgLTIwOTQsNyArMjA5NCw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9O
ZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVu
dCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsK
LSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2Uu
cHRyKCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwogICAgIH0KIH0KIApAQCAtMjIyNywxMyArMjIyNywxMCBAQCBib29sIEVkaXRvcjo6c3Bl
bGxpbmdQYW5lbElzU2hvd2luZygpCiAgICAgcmV0dXJuIGNsaWVudCgpLT5zcGVsbGluZ1VJSXNT
aG93aW5nKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpjbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aW9uKQordm9pZCBFZGl0b3I6
OmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBt
b3ZpbmdTZWxlY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbW92
aW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2Up
IHsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyKTsKLSAgICB9CisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1vdmlu
Z1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCB7IERvY3VtZW50TWFya2VyOjpTcGVs
bGluZywgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIgfSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdT
ZWxlY3Rpb24pCkBAIC0yNTU1LDE0ICsyNTUyLDE0IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRl
CiAgICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2Uo
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAgICBpZiAoIW1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdS
YW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtaXNzcGVsbGlu
Z1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlciht
aXNzcGVsbGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2Vt
ZW50KTsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE1h
cmtHcmFtbWFyICYmIHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcGFy
YWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkp
IHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9u
ID49IDApOwogICAgICAgICAgICAgZm9yIChhdXRvJiBkZXRhaWwgOiByZXN1bHRzW2ldLmRldGFp
bHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLmxlbmd0aCA+IDAgJiYgZGV0YWls
LmxvY2F0aW9uID49IDApOwogICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguY2hlY2tpbmdS
YW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiArIGRldGFpbC5sb2NhdGlvbiwgZGV0YWlsLmxlbmd0
aCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBwYXJhZ3Jh
cGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5n
dGgpOwotICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5wdHIoKSwg
RG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6Okdy
YW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRFbmRMb2NhdGlvbiA8PSBzcGVsbGlu
Z1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdEVuZExvY2F0aW9uID49IHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCkKQEAgLTI2NzYsNyArMjY3Myw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9S
ZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIFRleHRDaGVj
a2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb25JbnNlcnQp
OwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5j
aGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBjaGFuZ2VkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5n
ZWRSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7Cisg
ICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5n
KCkpOwogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2VkKGNoYW5n
ZWRSYW5nZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc5MSw3ICsy
Nzg4LDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAgICAgRG9jdW1lbnRNYXJrZXI6
OkdyYW1tYXIsCiAjZW5kaWYKICAgICB9OwotICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMod29yZFJhbmdlLnB0cigpLCBtYXJrZXJUeXBlc1RvUmVtb3ZlLCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZSwgbWFya2VyVHlwZXNU
b1JlbW92ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7CiAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xlYXJEZXNjcmlwdGlvbk9u
TWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50KTsKIH0KIApAQCAtMzI3Niw3ICszMjczLDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3Vu
dE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRP
cHQKIAogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIGRvIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0
LCBvcHRpb25zICYgfkJhY2t3YXJkcykpOworICAgICAgICBhdXRvIHJlc3VsdFJhbmdlKGZpbmRQ
bGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMgJiB+QmFja3dhcmRzKSk7CiAg
ICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgICAgIGlmICgh
cmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTMyODgsMTAgKzMyODUsMTAgQEAgdW5zaWduZWQgRWRpdG9yOjpj
b3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZp
bmRPcHQKIAogICAgICAgICArK21hdGNoQ291bnQ7CiAgICAgICAgIGlmIChtYXRjaGVzKQotICAg
ICAgICAgICAgbWF0Y2hlcy0+YXBwZW5kKHJlc3VsdFJhbmdlKTsKKyAgICAgICAgICAgIG1hdGNo
ZXMtPmFwcGVuZChyZXN1bHRSYW5nZS5wdHIoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobWFy
a01hdGNoZXMpCi0gICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmVz
dWx0UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6VGV4dE1hdGNoKTsKIAogICAgICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgd2UgaGl0IHRoZSBz
cGVjaWZpZWQgbGltaXQuIEEgbGltaXQgb2YgMCBtZWFucyBubyBsaW1pdC4KICAgICAgICAgaWYg
KGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49IGxpbWl0KQpAQCAtMzQzOCwxMCArMzQzNSwxMCBA
QCB2b2lkIEVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYgcmFuZ2Us
IGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZwogICAgICAgICB1bnNpZ25lZCBzdWJyYW5nZU9mZnNl
dCA9IHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbjsKICAgICAgICAgdW5z
aWduZWQgc3VicmFuZ2VMZW5ndGggPSByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFy
dFBvc2l0aW9uICsgMTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IHN1YnJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpzdWJyYW5nZShyYW5nZSwgc3VicmFuZ2VPZmZzZXQsIHN1YnJhbmdlTGVuZ3RoKTsK
KyAgICAgICAgYXV0byBzdWJyYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2UsIHN1
YnJhbmdlT2Zmc2V0LCBzdWJyYW5nZUxlbmd0aCk7CiAKLSAgICAgICAgbWFya2VkUmFuZ2VzLmFw
cGVuZChzdWJyYW5nZSk7Ci0gICAgICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKHN1YnJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVy
KTsKKyAgICAgICAgbWFya2VkUmFuZ2VzLmFwcGVuZChzdWJyYW5nZS5wdHIoKSk7CisgICAgICAg
IHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHN1YnJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKIAogICAgICAgICBzY2FubmVyUG9zaXRpb24g
Kz0gcmVsYXRpdmVFbmRQb3NpdGlvbiArIDE7CiAgICAgfQpAQCAtMzUwNiwxMSArMzUwMywxMSBA
QCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAo
IXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJD
aGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSkgewogICAgICAgICAgICAg
aWYgKFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6
ZWRSYW5nZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1h
cmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKndvcmRSYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRleHRD
aGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VT
ZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAoUmVm
UHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6
ZWRSYW5nZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1h
cmtlcnMoc2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAg
ICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbnRlbmNl
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MzU1Miw3ICszNTQ5LDcgQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9y
KERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGkKIAogICAgIHVuc2lnbmVk
IGludCBzdGFydE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSk7CiAgICAg
dW5zaWduZWQgaW50IGVuZE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSAr
IGxlbmd0aCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0g
ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKKyAgICBWZWN0b3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKCpub2RlKTsKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAg
aWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBzdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0g
bWFya2VyLT5lbmRPZmZzZXQoKSAmJiBtYXJrZXItPnR5cGUoKSA9PSBtYXJrZXJUeXBlKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjcwLDcgKzM2NjcsNyBAQCB2b2lkIEVkaXRvcjo6
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlk
YXRlKQogCiAgICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFuZ2VF
eHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwgRGly
ZWN0aW9uQmFja3dhcmQpOwogICAgIGlmIChpbnNlcnRlZENhbmRpZGF0ZVJhbmdlKQotICAgICAg
ICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsK
KyAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQp
OwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZWZkODY1MDlh
MTVlNmM1OGRiYzlhNzBmMTk5MGJmNmY1OTAyZmRjMi4uZmJjZDJmZmZhZWVlZDQ1MjY5MDEzNTdj
YTYzNThjMjJhMWNhNDRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0Tm9kZSwgb2Zmc2V0LCBt
X3RleHQpOwogICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHROb2RlLmdldCgpLCBv
ZmZzZXQgKyBtX3RleHQubGVuZ3RoKCkpOwogICAgICAgICBpZiAobV9tYXJrZXJTdXBwbGllcikK
LSAgICAgICAgICAgIG1fbWFya2VyU3VwcGxpZXItPmFkZE1hcmtlcnNUb1RleHROb2RlKHRleHRO
b2RlLmdldCgpLCBvZmZzZXQsIG1fdGV4dCk7CisgICAgICAgICAgICBtX21hcmtlclN1cHBsaWVy
LT5hZGRNYXJrZXJzVG9UZXh0Tm9kZSgqdGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKIAogICAg
ICAgICBpZiAobV9yZWJhbGFuY2VUeXBlID09IFJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1do
aXRlc3BhY2VzKSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5zZXJ0aW9uIG1heSByZXF1aXJlIGFk
anVzdGluZyBhZGphY2VudCB3aGl0ZXNwYWNlLCBpZiBpdCBpcyBwcmVzZW50LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCmluZGV4IDliYzhiMzk5NTY3ZWQ3NTJh
YWQxOTRiNDZkODYxMzIyZDI2ZDc2MTAuLjEyZWE5ZDQ0NjA2NTE5NzY2YWZkYzA1NzJmYjU3ZjNk
YTU2MjQzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgK
QEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRJbnNlcnRpb25NYXJrZXJT
dXBwbGllciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcj4g
ewogcHVibGljOgogICAgIHZpcnR1YWwgflRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcigpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiwgdW5zaWduZWQg
b2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dEluc2VydGVkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXRP
Zkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0SW5zZXJ0ZWQpID0gMDsKIHByb3RlY3RlZDoK
ICAgICBUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggYTI5NGJiMzAzN2E0ODFiNzQwNDJmYjdkNTFi
ZDYyNGY3ZTlmOThiMi4uYWZjOTRjOTlmZTYyNWU2OGVhZTI1NjI2NTZjZTFlYWJjN2I3NTJiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtMjIzLDcgKzIyMyw3
IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoaW50IHNlcXVlbmNlLCBjb25z
dCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0CiAgICAgICAgIGlmIChyZXF1ZXN0RGF0YS5tYXNr
KCkgJiBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAgICAgICAgICAgIG1hcmtlclR5cGVzIHw9
IERvY3VtZW50TWFya2VyOjpHcmFtbWFyOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1h
cmtlcnMoJm1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMp
OworICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKICAg
ICB9CiAgICAgZGlkQ2hlY2soc2VxdWVuY2UsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5YWQwOTBmMDhmNzQ3
MDljYWQxMTc1OGE1NzQ2NGI5OGFlMDRhMGE1Li45Yjc3NjEwMmY5ZjE1YWM5NjY4OTkzODA5N2Ni
MjJlZWEyZmQwYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5k
Ojpkb0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RG
TW92ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIGRvY3VtZW50KCku
bWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIucHRyKCksIDAsIG1fb2Zmc2V0LCBtX3RleHQx
LmdldCgpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQy
LCAwLCBtX29mZnNldCwgKm1fdGV4dDEsIDApOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRUcmltVGV4
dDIoKTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9V
bmFwcGx5KCkKIAogICAgIG1fdGV4dDItPmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7CiAKLSAg
ICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAwLCBwcmVm
aXhUZXh0Lmxlbmd0aCgpLCBtX3RleHQyLnB0cigpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5jb3B5TWFya2VycygqbV90ZXh0MSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0
MiwgMCk7CiAgICAgbV90ZXh0MS0+cmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCBmNjU0MTA2NGJmZTM4OTViOTAyMjBl
NGE1MzFjOWVmZDFiMmY5MzZlLi44ZDk1ODI0MDM1NmRjNzcyYzVhNTcyYWNkMDI0MDBhMzg4ODlj
ZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
CkBAIC0yNTIsMTcgKzI1MiwxNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvbwogCiAgICAgICAg
IGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGggPiAwICYm
IG1pc3NwZWxsaW5nTG9jYXRpb24gPCB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTGVuZ3RoIDw9
IHRleHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9
IHRleHRMZW5ndGgpIHsKICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxl
ZCB3b3JkCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0
SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxs
aW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gbWlzc3Bl
bGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgY3VycmVudENodW5r
T2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogCiAgICAg
ICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRz
IG9mZnNldC4KICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgewogICAgICAgICAg
ICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uOwogICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSB0ZXh0
LnN1YnN0cmluZyhtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCkudG9TdHJp
bmcoKTsKLSAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGlu
Z1JhbmdlOworICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxs
aW5nUmFuZ2UucHRyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFN0b3JlIG1h
cmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxp
bmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgIG1p
c3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAg
ICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlz
c3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KICAgICAgICAgICAgIGlmICghbWFya0Fs
bCkKQEAgLTQyNiw4ICs0MjYsOCBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RH
cmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya0FsbCkgewotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdl
KG1fcmFuZ2UsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWls
LT5sb2NhdGlvbiwgZGV0YWlsLT5sZW5ndGgpOwotICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFt
bWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNj
cmlwdGlvbik7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZz
ZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBiYWRH
cmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNl
ckRlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmVtZW1iZXIg
dGhpcyBkZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBvdXIgY3VycmVudCBjYW5kaWRh
dGUgKHRoZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQgb3JkZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCAzNGJmMjc5N2QxNDNkMTkzNTc3YzJkOGU1OTZi
YzIxYzJmNjJhNjVjLi4wZThkOTYyOTk0MmQ1NzllMzQ2OGMwZjg5YWY0ODViYzE2OGQ4NGY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwoQmxvYiYgYmxvYiwgRmls
ZVJlYWRlckxvYWRlcjo6UmVhZFR5cAogICAgIGlmIChtX3N0YXRlID09IExPQURJTkcpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAKICAg
ICBtX2Jsb2IgPSAmYmxvYjsKICAgICBtX3JlYWRUeXBlID0gdHlwZTsKQEAgLTE2OSw3ICsxNjks
NyBAQCB2b2lkIEZpbGVSZWFkZXI6OmFib3J0KCkKICAgICAgICAgZmlyZUV2ZW50KGV2ZW50TmFt
ZXMoKS5sb2FkZW5kRXZlbnQpOwogCiAgICAgICAgIC8vIEFsbCBwb3NzaWJsZSBldmVudHMgaGF2
ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5LgotICAgICAg
ICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogICAgIH0pOwogfQogCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBGaWxlUmVh
ZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRl
bmRFdmVudCk7CiAgICAgCiAgICAgLy8gQWxsIHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVkIGFu
ZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2
b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoaW50IGVycm9yQ29kZSkKQEAgLTIyMSw3ICsyMjEsNyBA
QCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoaW50IGVycm9yQ29kZSkKICAgICBmaXJlRXZlbnQo
ZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCk7CiAgICAgCiAgICAgLy8gQWxsIHBvc3NpYmxlIGV2
ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHku
Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmZpcmVFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCmlu
ZGV4IDg1ZGI0MzgzZWZmYTYxZDQxMTE5NjhkNzA2NTI0YmNmMTc4MjZmODQuLjgxNGU5MTZmOWJm
ZjExZDRkNmY1YzIwZDM2ODg0ZTk1MTQ5YmQxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFwcGxldEVsZW1lbnQuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiRWxlbWVudEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgot
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJhbUVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCmluZGV4IGMzZjQ5
ODQ1MGZmYTdmOGUxNzA2YmZjMDg4ZTUwYjNmZjllOTg2YTUuLjQ4NGJjYjc2YzFlMDAxMjA1NWI3
ODc0OGNjMjk1ZTU2NjU5MjQ3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERldGFpbHNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxz
RWxlbWVudC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4g
SFRNTERldGFpbHNFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJgog
ICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZNb3Zl
KHN0eWxlKSk7CiB9CiAKLXZvaWQgSFRNTERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxEZXRhaWxzRWxlbWVudDo6ZGlk
QWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIGF1dG8gc3Vt
bWFyeVNsb3QgPSBIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgpKTsK
ICAgICBzdW1tYXJ5U2xvdC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihuYW1l
QXR0ciwgc3VtbWFyeVNsb3ROYW1lKCkpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSFRNTERl
dGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3Qp
CiAgICAgbV9kZWZhdWx0U3VtbWFyeSA9IGRlZmF1bHRTdW1tYXJ5LnB0cigpOwogCiAgICAgc3Vt
bWFyeVNsb3QtPmFwcGVuZENoaWxkKGRlZmF1bHRTdW1tYXJ5KTsKLSAgICByb290LT5hcHBlbmRD
aGlsZChzdW1tYXJ5U2xvdCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChzdW1tYXJ5U2xvdCk7CiAK
ICAgICBtX2RlZmF1bHRTbG90ID0gSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9j
dW1lbnQoKSk7CiAgICAgQVNTRVJUKCFtX2lzT3Blbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RGV0YWlsc0VsZW1lbnQuaAppbmRleCBmMWM0NmZmMzVkNzY2MjRhZmVlM2VjZWI2NDIwNDIzNjJm
MmQzYmYwLi5lNDgzNjU3MTYwMzg0NjgwMmU4N2EyYzE3OGU5NzdiMDFkM2E4ZGY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJp
dmF0ZToKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogICAgIHZv
aWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9v
dCYpIGZpbmFsOwogICAgIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9pc09wZW4geyBmYWxzZSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IGNiZGZkZDNlZmNhYWRhZjhmYmY0MDBiNmMyNTQ4
MGE0M2FlZDMyMDMuLjgxZWYxN2VmYjE0YzlkZmZmYmI4ODlkYTU5ZTkyMzk3ZWU1ODdhNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTg4LDYgKzg4LDE2IEBAIEhUTUxE
b2N1bWVudDo6SFRNTERvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIERvY3Vt
ZW50Q2xhc3NGbGFncyBkb2N1CiAgICAgY2xlYXJYTUxWZXJzaW9uKCk7CiB9CiAKK1JlZjxIVE1M
RG9jdW1lbnQ+IEhUTUxEb2N1bWVudDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1
cmwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1cmws
IEhUTUxEb2N1bWVudENsYXNzKSk7Cit9CisKK1JlZjxIVE1MRG9jdW1lbnQ+IEhUTUxEb2N1bWVu
dDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYgZnJhbWUsIGNvbnN0IFVSTCYgdXJs
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudCgmZnJhbWUsIHVybCwg
SFRNTERvY3VtZW50Q2xhc3MsIFN5bnRoZXNpemVkKSk7Cit9CisKIEhUTUxEb2N1bWVudDo6fkhU
TUxEb2N1bWVudCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAppbmRleCAyM2Rl
NGRjMWM2ODVhMjhhMmY0MGU4YWNkNWNmMGE2ZDhmYzI3YzZmLi4xY2Q1YzExNTRkYThkNjU2ZGE4
MjVkMjcxMDAwZjI3Y2ZiYjg2MDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKQEAg
LTI4LDE2ICsyOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTERvY3VtZW50
IDogcHVibGljIERvY3VtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVu
dD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3VtZW50
Q2xhc3MpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudD4gY3JlYXRlU3lu
dGhlc2l6ZWREb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1cmwsIEhUTUxE
b2N1bWVudENsYXNzLCBTeW50aGVzaXplZCkpOwotICAgIH0KLQorICAgIHN0YXRpYyBSZWY8SFRN
TERvY3VtZW50PiBjcmVhdGUoRnJhbWUqLCBjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgUmVmPEhU
TUxEb2N1bWVudD4gY3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYsIGNvbnN0IFVSTCYp
OwogICAgIHZpcnR1YWwgfkhUTUxEb2N1bWVudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgaW50
IHdpZHRoKCk7CkBAIC02NCw3ICs1Niw3IEBAIHByb3RlY3RlZDoKICAgICBIVE1MRG9jdW1lbnQo
RnJhbWUqLCBjb25zdCBVUkwmLCBEb2N1bWVudENsYXNzRmxhZ3MgPSAwLCB1bnNpZ25lZCBjb25z
dHJ1Y3Rpb25GbGFncyA9IDApOwogCiBwcml2YXRlOgotICAgIGJvb2wgaXNGcmFtZVNldCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IGZpbmFsOwogICAgIFJl
ZjxEb2N1bWVudFBhcnNlcj4gY3JlYXRlUGFyc2VyKCkgb3ZlcnJpZGU7CiAgICAgUmVmPERvY3Vt
ZW50PiBjbG9uZURvY3VtZW50V2l0aG91dENoaWxkcmVuKCkgY29uc3QgZmluYWw7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCA5NjkyNTM2ZjBjNTZjM2NlNTQy
ZjFhYmI2NzFlOGUxMTNhZGQ3ZGNmLi4yZDE0MDhjM2VjNWNkZTkzN2Q0NTNiMDc2NzNhNzc3M2Fh
MmY1YjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC04MSw3
ICs4MSw3IEBAIEhUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxlbWVudCgpCiB7CiAgICAgZG9j
dW1lbnQoKS5mb3JtQ29udHJvbGxlcigpLndpbGxEZWxldGVGb3JtKHRoaXMpOwogICAgIGlmICgh
c2hvdWxkQXV0b2NvbXBsZXRlKCkpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJl
Z2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgIG1fZGVm
YXVsdEJ1dHRvbiA9IG51bGxwdHI7CiAgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVudCA6
IG1fYXNzb2NpYXRlZEVsZW1lbnRzKQpAQCAtNDkxLDkgKzQ5MSw5IEBAIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpCiAgICAgICAgIG1fYXR0cmlidXRlcy5zZXRBY2NlcHRDaGFyc2V0KHZhbHVlKTsK
ICAgICBlbHNlIGlmIChuYW1lID09IGF1dG9jb21wbGV0ZUF0dHIpIHsKICAgICAgICAgaWYgKCFz
aG91bGRBdXRvY29tcGxldGUoKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgp
LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9IGVsc2UKICAgICAgICAg
SFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KQEAgLTg2Miw4ICs4
NjIsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3VzcGVuc2lv
bigpCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQm
IG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCiB7CiAgICAgaWYgKCFzaG91bGRB
dXRvY29tcGxldGUoKSkgewotICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBvbGREb2N1bWVu
dC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICAg
ICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRo
aXMpOwogICAgIH0KIAogICAgIEhUTUxFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChvbGRE
b2N1bWVudCwgbmV3RG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSUZyYW1lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmNwcAppbmRleCBkMzAzMjJkYzBjNDhmYjgyMDZlYWJiNjZjYWVmMmI4ZmU2OTdiNjRmLi4z
YmI3ZTRhN2U3YjBkNWMyOWRkYWQ2MzNmZTMyNWM3MGM1ZmRiMDI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1
bWVudFBhcnNlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5k
ZXggMzczNzc5ZjQ1OWU4NzIwMDY0NTJkOWNhZTkyN2I0NmMzNWMyN2UxOC4uYzUyNTBmZWJjMTY4
MTIxOTg0N2YxNDJlMzBjMjZjZjVlYzVkM2ZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCkBAIC0xMzksNyArMTM5LDcgQEAgSFRNTEltYWdlTG9hZGVyJiBIVE1M
SW5wdXRFbGVtZW50OjplbnN1cmVJbWFnZUxvYWRlcigpCiAgICAgcmV0dXJuICptX2ltYWdlTG9h
ZGVyOwogfQogCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCopCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNo
YWRvd1Jvb3QoU2hhZG93Um9vdCYpCiB7CiAgICAgbV9pbnB1dFR5cGUtPmNyZWF0ZVNoYWRvd1N1
YnRyZWUoKTsKICAgICB1cGRhdGVJbm5lclRleHRFbGVtZW50RWRpdGFiaWxpdHkoKTsKQEAgLTE0
OCw3ICsxNDgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCopCiBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgp
CiB7CiAgICAgaWYgKG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50
KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0
aGlzKTsKIAogICAgIC8vIE5lZWQgdG8gcmVtb3ZlIGZvcm0gYXNzb2NpYXRpb24gd2hpbGUgdGhp
cyBpcyBzdGlsbCBhbiBIVE1MSW5wdXRFbGVtZW50CiAgICAgLy8gc28gdGhhdCB2aXJ0dWFsIGZ1
bmN0aW9ucyBhcmUgY2FsbGVkIGNvcnJlY3RseS4KQEAgLTE1Niw3ICsxNTYsNyBAQCBIVE1MSW5w
dXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgLy8gc2V0Rm9ybSgwKSBtYXkgcmVn
aXN0ZXIgdGhpcyB0byBhIGRvY3VtZW50LWxldmVsIHJhZGlvIGJ1dHRvbiBncm91cC4KICAgICAv
LyBXZSBzaG91bGQgdW5yZWdpc3RlciBpdCB0byBhdm9pZCBhY2Nlc3NpbmcgYSBkZWxldGVkIG9i
amVjdC4KICAgICBpZiAoaXNSYWRpb0J1dHRvbigpKQotICAgICAgICBkb2N1bWVudCgpLmZvcm1D
b250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAg
ICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJlbW92
ZUJ1dHRvbigqdGhpcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNU
b3VjaEV2ZW50SGFuZGxlcikKICAgICAgICAgZG9jdW1lbnQoKS5kaWRSZW1vdmVFdmVudFRhcmdl
dE5vZGUoKnRoaXMpOwpAQCAtOTAzLDcgKzkwMyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0Q2hlY2tlZChib29sIG5vd0NoZWNrZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZlbnRC
CiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKFJhZGlvQnV0dG9u
R3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9ucy0+
dXBkYXRlQ2hlY2tlZFN0YXRlKHRoaXMpOworICAgICAgICBidXR0b25zLT51cGRhdGVDaGVja2Vk
U3RhdGUoKnRoaXMpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCku
aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hhbmdl
ZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKICAgICB1cGRhdGVW
YWxpZGl0eSgpOwpAQCAtMTQyMiwxMyArMTQyMiwxMyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6
Om5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVnaXN0
ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAgICAgaWYgKG5lZWRzU3VzcGVu
c2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAgICAg
aWYgKCFuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1bWVudCgpLnVucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9
CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3QK
QEAgLTE1MjcsMTEgKzE1MjcsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRNb3ZlVG9O
ZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXcKIAogICAgIC8v
IEFsd2F5cyB1bnJlZ2lzdGVyIGZvciBjYWNoZSBjYWxsYmFja3Mgd2hlbiBsZWF2aW5nIGEgZG9j
dW1lbnQsIGV2ZW4gaWYgd2Ugd291bGQgb3RoZXJ3aXNlIGxpa2UgdG8gYmUgcmVnaXN0ZXJlZAog
ICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKSB7Ci0gICAgICAgIG9sZERvY3VtZW50
LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgICAg
IG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMp
OworICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KICAgICBpZiAoaXNSYWRpb0J1dHRvbigp
KQotICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3JvdXBz
KCkucmVtb3ZlQnV0dG9uKHRoaXMpOworICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJvbGxl
cigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0aGlzKTsKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKSB7CiAgICAgICAg
IG9sZERvY3VtZW50LmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CkBAIC0xNTU4LDcg
KzE1NTgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdl
ZCgpCiB7CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRl
Q2hhbmdlZCgpOwogICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0
dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMtPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCh0
aGlzKTsKKyAgICAgICAgYnV0dG9ucy0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCp0aGlzKTsK
ICAgICBtX2lucHV0VHlwZS0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiB9CiAKQEAgLTE4
MzYsNyArMTgzNiw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNJblJlcXVpcmVkUmFkaW9C
dXR0b25Hcm91cCgpCiB7CiAgICAgQVNTRVJUKGlzUmFkaW9CdXR0b24oKSk7CiAgICAgaWYgKFJh
ZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAg
cmV0dXJuIGJ1dHRvbnMtPmlzSW5SZXF1aXJlZEdyb3VwKHRoaXMpOworICAgICAgICByZXR1cm4g
YnV0dG9ucy0+aXNJblJlcXVpcmVkR3JvdXAoKnRoaXMpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IApAQCAtMTg2OCwxNCArMTg2OCwxNCBAQCBSYWRpb0J1dHRvbkdyb3VwcyogSFRNTElucHV0RWxl
bWVudDo6cmFkaW9CdXR0b25Hcm91cHMoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjphZGRUb1JhZGlvQnV0dG9uR3JvdXAoKQogewotICAgIGlmIChSYWRpb0J1dHRvbkdy
b3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMtPmFk
ZEJ1dHRvbih0aGlzKTsKKyAgICBpZiAoYXV0byogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBz
KCkpCisgICAgICAgIGJ1dHRvbnMtPmFkZEJ1dHRvbigqdGhpcyk7CiB9CiAKIGlubGluZSB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnJlbW92ZUZyb21SYWRpb0J1dHRvbkdyb3VwKCkKIHsKLSAgICBp
ZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAg
ICAgICBidXR0b25zLT5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgaWYgKGF1dG8qIGJ1dHRvbnMg
PSByYWRpb0J1dHRvbkdyb3VwcygpKQorICAgICAgICBidXR0b25zLT5yZW1vdmVCdXR0b24oKnRo
aXMpOwogfQogCiB1bnNpZ25lZCBIVE1MSW5wdXRFbGVtZW50OjpoZWlnaHQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBkMjYzMjdmZjgxZGE2MzQ5NmYw
MzlkNzNkYzBhNzAxYTc2N2IyYmQ5Li5iODNhYWUwYmNkYjg5YWM3ZTU2MTQzZTJhNzFhYmZmOTA3
YzBiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMzQxLDcg
KzM0MSw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZW51bSBBdXRvQ29tcGxldGVTZXR0
aW5nIHsgVW5pbml0aWFsaXplZCwgT24sIE9mZiB9OwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgdm9pZCB3aWxsQ2hhbmdlRm9y
bSgpIGZpbmFsOwogICAgIHZvaWQgZGlkQ2hhbmdlRm9ybSgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggNDkwZWNlOTg0OTdiNDE0NTVjNzcyMjM1
NjhlZTkzZDRjOGQ3YTM5Mi4uOWQwYTkzN2NiMDZlNjI5ZGY3ZDE5YzBhYWMwYzMyMWYwYjFhZGMx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC02MzcsMzMg
KzYzNywzMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50KERv
Y3VtZW50JiBkb2N1bWVudCkKICAgICBtX21lZGlhU2Vzc2lvbi0+cmVnaXN0ZXJXaXRoRG9jdW1l
bnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQot
ICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAg
IGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICNpZiAhUExBVEZP
Uk0oSU9TKQotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhp
cyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRD
YWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxi
YWNrcygqdGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0
ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC5yZWdpc3Rl
ckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQu
cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAobV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZENhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC5yZWdpc3Rl
ckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlhQ29udHJv
bHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC5y
ZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAgIGRv
Y3VtZW50LnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWRDYWxs
YmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKQotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JBbGxvd3NNZWRp
YURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAotICAgIGRv
Y3VtZW50LmFkZEF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgZG9jdW1lbnQuYWRkQXVkaW9Qcm9k
dWNlcigqdGhpcyk7CiAgICAgYWRkRWxlbWVudFRvRG9jdW1lbnRNYXAoKnRoaXMsIGRvY3VtZW50
KTsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC02NzYsMzMgKzY3NiwzMyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50
KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgZG9j
dW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVu
dC5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCiAjaWYgIVBMQVRGT1JNKElP
UykKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhpcyk7
Ci0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxs
YmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC51bnJl
Z2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1
bWVudC51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKG1fcmVxdWlyZUNhcHRpb25QcmVm
ZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JD
YXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1f
bWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVudC51
bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAg
ICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
KnRoaXMpOwogICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1lbnQu
dW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRDYWxs
YmFja3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsK
KyAgICBkb2N1bWVudC5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKICAgICByZW1vdmVFbGVt
ZW50RnJvbURvY3VtZW50TWFwKCp0aGlzLCBkb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQpAQCAtMTI5MCw3ICsxMjkwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxl
Y3RNZWRpYVJlc291cmNlKCkKICAgICAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0
YXJ0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVkaWFD
YW5TdGFydCA9IHRydWU7Ci0gICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigq
dGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3MTcsNyArMzcxNyw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKFJlZjxUZXh0VHJhY2s+JiYgdHJhY2sp
CiAgICAgaWYgKCFtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKSB7
CiAgICAgICAgIG1fcmVxdWlyZUNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MgPSB0
cnVlOwogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwotICAg
ICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFj
a3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1l
bnQucGFnZSgpKQogICAgICAgICAgICAgbV9jYXB0aW9uRGlzcGxheU1vZGUgPSBwYWdlLT5ncm91
cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgIH0KQEAg
LTUxOTcsNyArNTE5Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXll
cihEZWxheWVkQWN0aW9uVHlwZSBmbGFncykKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCkgewogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCA9IGZh
bHNlOwotICAgICAgICBkb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlz
KTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMp
OwogICAgIH0KIAogICAgIGlmIChtX3BsYXllcikgewpAQCAtNTMyOCw3ICs1MzI4LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWUoKQogICAgIHNldFNob3VsZEJ1ZmZlckRhdGEodHJ1
ZSk7CiAKICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wYWdlQWxsb3dzUGxheWJhY2tBZnRlclJl
c3VtaW5nKCp0aGlzKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0
aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKIApAQCAt
NjgzNiw3ICs2ODM2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVySlNQ
cm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlMKICAgICBjb250cm9sbGVy
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoY29udHJvbGxlck9iamVjdCwgZXhlYywgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZSksIHByb3BlcnR5VmFsdWUs
IHByb3BlcnR5U2xvdCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFn
ZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgTE9HKE1l
ZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCglcCkiLCB0
aGlzKTsKIApAQCAtNjkzNSw5ICs2OTM1LDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRN
ZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBlbmRzT25QYWcKICAg
ICBtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA9IGRlcGVuZHNPblBhZ2VT
Y2FsZTsKIAogICAgIGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikK
LSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxs
YmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCku
dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAg
ICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFj
a3MoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJv
bHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAppbmRleCBhZjAyMDZlZjdlZjVhZGYzZDIwNTA5ZDY4ZTQyNzBkYzljNTI4MzE0
Li40NmU1ODJlNzUxN2ZhNmU3YWFlODBjMGZjOGZhMzAzZjdjNGY3YzMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtODA1LDcgKzgwNSw3IEBAIHByaXZhdGU6CiAg
ICAgU2xlZXBUeXBlIHNob3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKE1F
RElBX0NPTlRST0xTX1NDUklQVCkKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dChTaGFkb3dSb290Jikgb3ZlcnJpZGU7CiAgICAgRE9NV3JhcHBlcldvcmxkJiBlbnN1cmVJc29s
YXRlZFdvcmxkKCk7CiAgICAgYm9vbCBlbnN1cmVNZWRpYUNvbnRyb2xzSW5qZWN0ZWRTY3JpcHQo
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKaW5kZXgg
MDIzOWIzMzVjODFmZDlmODk1ZmMwNzhiZjAxOTEyMjFlNWExMzZlNC4uYTY3OGEyMDBhODUzMDgw
MmE1MTMyODVkNWU1N2M1ZTNhMWFhYzVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWV0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRl
ckVsZW1lbnQuY3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgUmVuZGVyTWV0ZXIqIEhUTUxNZXRlckVs
ZW1lbnQ6OnJlbmRlck1ldGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9p
ZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3Qq
IHJvb3QpCit2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBBU1NFUlQoIW1fdmFsdWUpOwogCkBAIC0yMzEsMTMg
KzIzMSwxMyBAQCB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCogcm9vdCkKIAogICAgIGF1dG8gc3R5bGUgPSBIVE1MU3R5bGVFbGVtZW50
OjpjcmVhdGUoSFRNTE5hbWVzOjpzdHlsZVRhZywgZG9jdW1lbnQoKSwgZmFsc2UpOwogICAgIHN0
eWxlLT5zZXRUZXh0Q29udGVudChzaGFkb3dTdHlsZSk7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQo
c3R5bGUpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogCiAgICAgLy8gUHNldWRvcyBh
cmUgc2V0IHRvIGFsbG93IGF1dGhvciBzdHlsaW5nLgogICAgIGF1dG8gaW5uZXIgPSBIVE1MRGl2
RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGlubmVyLT5zZXRJZEF0dHJpYnV0ZSgi
aW5uZXIiKTsKICAgICBpbm5lci0+c2V0UHNldWRvKCItd2Via2l0LW1ldGVyLWlubmVyLWVsZW1l
bnQiKTsKLSAgICByb290LT5hcHBlbmRDaGlsZChpbm5lcik7CisgICAgcm9vdC5hcHBlbmRDaGls
ZChpbm5lcik7CiAKICAgICBhdXRvIGJhciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSk7CiAgICAgYmFyLT5zZXRJZEF0dHJpYnV0ZSgiYmFyIik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGVyRWxlbWVudC5oCmluZGV4IDYwNGE2NWE5ZTNhYjJmYzM4M2Y0ZjYwYjFhMDNmMDE5
MmY4YzFiZTIuLjQ4NjVhNmRiN2Q4YWMyMDA4YThlZTY4YWE3YmYxN2MyOWU2ZDBkMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5oCkBAIC03NSw3ICs3NSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbWljU3RyaW5nJikgZmluYWw7CiAKICAgICB2b2lkIGRpZEVsZW1lbnRTdGF0ZUNoYW5nZSgp
OwotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7
CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsK
IAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV92YWx1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKaW5kZXggZDEwYzM3ZmIyMjg4MWMxM2MzMGYwN2M3
YjkzNGY5MzI3NTQ2ZjFlYS4uZTExOGJkZTFkZGMyMjNhOTNiNzE4NGJhNjA3Nzg5MWNjYWEyYjc2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcApAQCAtMjUs
NyArMjUsNiBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVk
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
RnJhbWVFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3Bw
CmluZGV4IGUyZTMxYTE1NTM2MTA5NmE1NmFmZDg0M2MzMDAyZjA4NWY0OWUxZGEuLjlkYzVmZjFh
YTkwZmMzYTZkNDI3NTQyMTJjNWZmYmQzZTJjNDk1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0yOTIsMTMgKzI5MiwxMyBAQCB2b2lkIEhUTUxQbHVn
SW5FbGVtZW50OjpzZXREaXNwbGF5U3RhdGUoRGlzcGxheVN0YXRlIHN0YXRlKQogICAgICAgICBt
X3N3YXBSZW5kZXJlclRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIEhUTUxQbHVn
SW5FbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2
b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QmIHJvb3QpCiB7CiAgICAgaWYgKCFtX3BsdWdpblJlcGxhY2VtZW50IHx8ICFkb2N1bWVudCgp
LnBhZ2UoKSB8fCBkaXNwbGF5U3RhdGUoKSAhPSBQcmVwYXJpbmdQbHVnaW5SZXBsYWNlbWVudCkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHJvb3QtPnNldFJlc2V0U3R5bGVJbmhlcml0YW5j
ZSh0cnVlKTsKLSAgICBpZiAobV9wbHVnaW5SZXBsYWNlbWVudC0+aW5zdGFsbFJlcGxhY2VtZW50
KCpyb290KSkgeworICAgIHJvb3Quc2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUpOworICAg
IGlmIChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVwbGFjZW1lbnQocm9vdCkpIHsKICAg
ICAgICAgc2V0RGlzcGxheVN0YXRlKERpc3BsYXlpbmdQbHVnaW5SZXBsYWNlbWVudCk7CiAgICAg
ICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKaW5kZXggNTJhMjkyYWJiMjk2YzQ5M2Ey
ZTZiODM4YWQzMGMwYjFiMGYzMDRkMi4uMTFmZTYwMmNlMWUxZDA3NWY1ZGNlMTViMWMzZDFiMDk4
OGM5MTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaApAQCAtOTgs
NyArOTgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdE9iamVjdChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CiAg
ICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
ZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290Jikgb3ZlcnJpZGU7CiAKICAgICAv
LyBTdWJjbGFzc2VzIHNob3VsZCB1c2UgZ3VhcmRlZERpc3BhdGNoQmVmb3JlTG9hZEV2ZW50IGlu
c3RlYWQgb2YgY2FsbGluZyBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudCBkaXJlY3RseS4KICAgICBi
b29sIGd1YXJkZWREaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApp
bmRleCA1ZDQxNWE2MmMxYTM0NzVjZDViMjhlMzc5YmJkYzljNzJmNmQ4Yjg3Li4wYzU1Yjk5YTkx
ZWZjMTFmZWJkNWIxZmNkNjNkZWRhNjljMjY1ZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmZpbmlzaENyZWF0aW5nKCkKIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQ6On5IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCkKIHsKICAgICBpZiAobV9uZWVkc0RvY3Vt
ZW50QWN0aXZhdGlvbkNhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiB2b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZShEaXNwbGF5U3RhdGUgc3Rh
dGUpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHkKICAgICAvLyBp
bmFjdGl2ZSBvciByZWFjdGl2YXRlcyBzbyBpdCBjYW4gY2xlYXIgdGhlIHJlbmRlcmVyIGJlZm9y
ZSBnb2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLgogICAgIGlmICghbV9uZWVkc0RvY3VtZW50QWN0
aXZhdGlvbkNhbGxiYWNrcykgewogICAgICAgICBtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2Fs
bGJhY2tzID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKGRpc3Bs
YXlTdGF0ZSgpID09IERpc3BsYXlpbmdTbmFwc2hvdCkgewpAQCAtMjg0LDggKzI4NCw4IEBAIHZv
aWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQm
IG9sZERvY3VtZW50LCBEb2N1bWVuCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oJmRvY3VtZW50KCkgPT0gJm5ld0RvY3VtZW50KTsKICAgICBpZiAobV9uZWVkc0RvY3Vt
ZW50QWN0aXZhdGlvbkNhbGxiYWNrcykgewotICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgICAgICBuZXdEb2N1bWVu
dC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAg
b2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhp
cyk7CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAobV9pbWFnZUxvYWRlcikKQEAgLTM0MSw3
ICszNDEsNyBAQCBzdGF0aWMgRE9NV3JhcHBlcldvcmxkJiBwbHVnSW5JbWFnZUVsZW1lbnRJc29s
YXRlZFdvcmxkKCkKICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZDsKIH0KIAotdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJv
b3QpCit2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChyb290KTsKICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPj0gUHJlcGFy
aW5nUGx1Z2luUmVwbGFjZW1lbnQpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3Qp
CiAgICAgLy8gUmVzZXQgYW55IGF1dGhvciBzdHlsZXMgdGhhdCBtYXkgYXBwbHkgYXMgd2Ugb25s
eSB3YW50IGV4cGxpY2l0CiAgICAgLy8gc3R5bGVzIGRlZmluZWQgaW4gdGhlIGluamVjdGVkIHVz
ZXIgYWdlbnRzIHN0eWxlc2hlZXRzIHRvIHNwZWNpZnkKICAgICAvLyB0aGUgbG9vay1hbmQtZmVl
bCBvZiB0aGUgc25hcHNob3R0ZWQgcGx1Zy1pbiBvdmVybGF5LiAKLSAgICByb290LT5zZXRSZXNl
dFN0eWxlSW5oZXJpdGFuY2UodHJ1ZSk7CisgICAgcm9vdC5zZXRSZXNldFN0eWxlSW5oZXJpdGFu
Y2UodHJ1ZSk7CiAgICAgCiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbG9hZGVkTWltZVR5cGUoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAppbmRleCBl
OTQxZjU3YWRmOGExOWE5ZWQxNGVkY2ViMDk3YmQzYWI0YTRmYTYyLi5lM2YwMzk2NGZhMTc0NDUx
ZThlMjY2YWUzMjczNmE5ZWM5YmY5ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIGFsbG93ZWRUb0xvYWRQbHVnaW5Db250ZW50KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKIAotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93
Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dS
b290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBj
cmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0
IE5vZGUmKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFByb2dyZXNzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCmluZGV4IDhiNDBlMWRjMjU4YTliYTRmYWZjZjA4M2IzNWY5M2JjYjJjNDVl
NGYuLjEyZDMxYzcyMjBkNmQ4MjI0MTBkOTk4ZjRkM2FlMWJiZmNiMmEyZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcApAQCAtMTM1LDEyICsxMzUsMTIg
QEAgdm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3RhdGVDaGFuZ2UoKQogICAg
IH0KIH0KIAotdm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dS
b290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBBU1NFUlQoIW1fdmFs
dWUpOwogCiAgICAgYXV0byBpbm5lciA9IFByb2dyZXNzSW5uZXJFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQoKSk7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoaW5uZXIpOworICAgIHJvb3QuYXBwZW5k
Q2hpbGQoaW5uZXIpOwogCiAgICAgYXV0byBiYXIgPSBQcm9ncmVzc0JhckVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKICAgICBhdXRvIHZhbHVlID0gUHJvZ3Jlc3NWYWx1ZUVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBy
b2dyZXNzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50
LmgKaW5kZXggYmQzM2FhMTIyZWRmMjE1NGE2NzlmZTE2ZDY2NDBjYjEyZmI3MGUzMC4uODI2NzM2
ZGFiMmJiNjU3YWIzZTVjN2FjM2JhNDk0ZDNhZDgwY2VlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRFbGVtZW50U3Rh
dGVDaGFuZ2UoKTsKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9v
dCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290
JikgZmluYWw7CiAgICAgYm9vbCBpc0RldGVybWluYXRlKCkgY29uc3Q7CiAKICAgICBib29sIGNh
bkNvbnRhaW5SYW5nZUVuZFBvaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKaW5kZXggYTQ5ZmYyMGMyYjM3
OGE1NjI0NDE1ZDU0OTMxZTM0NDNiMzhiOGFlYS4uOTlmM2M2ZjhjNGMwYWY0Zjg3YTQ2ZjNmNTE5
YmY5ZDAyNmM3ZTA0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5j
cHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxQaWN0dXJlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAppbmRleCA5OTEw
YmQxYjQyZmEyNTYyZjJhMzA2YWIyMTIwNmE4ODQ0ZjI1NDliLi5kYTc0OWNkOTQzZjM5MGRjYTEw
NTRhZTc1NWEyZjhhZDNhMDM2OTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFy
eUVsZW1lbnQuY3BwCkBAIC02NSwxMCArNjUsMTAgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+
IEhUTUxTdW1tYXJ5RWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYK
ICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PigqdGhpcywgV1RGTW92
ZShzdHlsZSkpOwogfQogCi12b2lkIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MU3VtbWFyeUVsZW1lbnQ6OmRp
ZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKLSAgICByb290LT5h
cHBlbmRDaGlsZChEZXRhaWxzTWFya2VyQ29udHJvbDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKLSAg
ICByb290LT5hcHBlbmRDaGlsZChIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1
bWVudCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChEZXRhaWxzTWFya2VyQ29udHJvbDo6Y3Jl
YXRlKGRvY3VtZW50KCkpKTsKKyAgICByb290LmFwcGVuZENoaWxkKEhUTUxTbG90RWxlbWVudDo6
Y3JlYXRlKHNsb3RUYWcsIGRvY3VtZW50KCkpKTsKIH0KIAogSFRNTERldGFpbHNFbGVtZW50KiBI
VE1MU3VtbWFyeUVsZW1lbnQ6OmRldGFpbHNFbGVtZW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oCmluZGV4IDEyN2E1NDZkMmEwZGM0MDI5ODQxMmFiYzVk
NjlhZjA3ODU2M2I1MjAuLjZiNzQ1MDU0NDYwZGEwMjYyYWZjYzk5YzQ3ZTllOWY2OGUyZTQ2NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuaApAQCAtMzksNyArMzks
NyBAQCBwcml2YXRlOgogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50
UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgZmluYWw7
CiAgICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JikgZmluYWw7CiAKLSAgICB2b2lk
IGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQg
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAgICBib29s
IGhhc0N1c3RvbUZvY3VzTG9naWMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCmluZGV4IDNhMjk3ZWQw
MGEyMmE0NmU3NjNjNTBjNzNjYWI2YzcyY2M1YWQ4MDkuLmYwM2MxMjZjMDcxOTYwMjExYmRiMDA0
MzAzMDNlODQyMDZjM2EwMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
bXBsYXRlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVF
bGVtZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkhUTUxUZW1wbGF0ZUVsZW1l
bnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCmluZGV4IDczMDY3NDljMzJlOGI0NDMyY2Y4MjljOGM0MDk5ZDEyNTM5MjM2MDQu
LjM4NTM3MTEwNDQ0ZWRjODkwMzAyMTg5ZWRkMjllOTQ4NjVhMmMyOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMTAwLDkgKzEwMCw5IEBAIFJl
ZjxIVE1MVGV4dEFyZWFFbGVtZW50PiBIVE1MVGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtCiAgICAgcmV0dXJuIHRleHRBcmVhOwogfQogCi12b2lkIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCog
cm9vdCkKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dChTaGFkb3dSb290JiByb290KQogewotICAgIHJvb3QtPmFwcGVuZENoaWxkKFRleHRDb250cm9s
SW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKKyAgICByb290LmFwcGVuZENo
aWxkKFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKICAg
ICB1cGRhdGVJbm5lclRleHRFbGVtZW50RWRpdGFiaWxpdHkoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAppbmRleCBiOWEzMjI0Yzc1MGU0ZDQwNmIyM2E2
ZTU0YjA0NzUyMjUyOTlmODUwLi5jYmQwNjNlMzI4MWJlY2FkNTY5YjJiY2QwMjcwNjBmZDdmYmFk
OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaApAQCAtNzEs
NyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgZW51bSBXcmFwTWV0aG9kIHsgTm9XcmFwLCBTb2Z0
V3JhcCwgSGFyZFdyYXAgfTsKIAotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIHZvaWQgbWF4TGVuZ3RoQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIG1pbkxlbmd0aEF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
UmFkaW9JbnB1dFR5cGUuY3BwCmluZGV4IGRlYzE5YjJjMGI5ZTIyMjBmNjdhYTVkZjQ4ZGNiMTNj
OTg0ZWE0MmIuLjBiY2ZlMTU4OTE0YzRmZDM1MGMxNmQzN2U0MWU0NGI5OGQwZWU0ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCkBAIC0xNzgsOSArMTc4LDkgQEAgYm9v
bCBSYWRpb0lucHV0VHlwZTo6aXNSYWRpb0J1dHRvbigpIGNvbnN0CiAKIGJvb2wgUmFkaW9JbnB1
dFR5cGU6Om1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MoKSBjb25zdAogewotICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7Ci0gICAgaWYg
KGNvbnN0IFJhZGlvQnV0dG9uR3JvdXBzKiByYWRpb0J1dHRvbkdyb3VwcyA9IGVsZW1lbnQucmFk
aW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgcmV0dXJuICFyYWRpb0J1dHRvbkdyb3Vwcy0+aGFz
Q2hlY2tlZEJ1dHRvbigmZWxlbWVudCk7CisgICAgYXV0byYgZWxlbWVudCA9IHRoaXMtPmVsZW1l
bnQoKTsKKyAgICBpZiAoYXV0byogcmFkaW9CdXR0b25Hcm91cHMgPSBlbGVtZW50LnJhZGlvQnV0
dG9uR3JvdXBzKCkpCisgICAgICAgIHJldHVybiAhcmFkaW9CdXR0b25Hcm91cHMtPmhhc0NoZWNr
ZWRCdXR0b24oZWxlbWVudCk7CiAgICAgcmV0dXJuICFlbGVtZW50LmNoZWNrZWQoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKaW5kZXggMDA1YmU0ZDJkMmUx
NzgwOGVmODJhM2I5M2QyOTNkODc4YTE5YTA5My4uNmZjNWMxNjE2YmVmMTk2MjEzY2FlYWNhNjFj
YzE0NWQ0YzUxM2IxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50
V3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3Bw
CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBEb2N1bWVudFdyaXRlcjo6YmVnaW4oY29uc3QgVVJM
JiB1cmxSZWZlcmVuY2UsIGJvb2wgZGlzcGF0Y2gsIERvY3VtZW50KiBvd24KIAogICAgIGJvb2wg
c2hvdWxkUmV1c2VEZWZhdWx0VmlldyA9IG1fZnJhbWUtPmxvYWRlcigpLnN0YXRlTWFjaGluZSgp
LmlzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+aXNTZWN1cmVUcmFuc2l0aW9uVG8odXJsKTsKICAgICBpZiAoc2hvdWxkUmV1c2VEZWZhdWx0
VmlldykKLSAgICAgICAgZG9jdW1lbnQtPnRha2VET01XaW5kb3dGcm9tKG1fZnJhbWUtPmRvY3Vt
ZW50KCkpOworICAgICAgICBkb2N1bWVudC0+dGFrZURPTVdpbmRvd0Zyb20oKm1fZnJhbWUtPmRv
Y3VtZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgZG9jdW1lbnQtPmNyZWF0ZURPTVdpbmRvdygp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggODE2ZWJiMjAwNWFmYzgz
NDQ3ZmVjMTEyNWM0Mzk3OThhYjY0ZTIyMC4uZDU2NDQ2MTI0YzI5YmEyNTM4ZjRmMDgyNjVlNzk5
YjhlNzZhMmMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzUxMyw3
ICszNTEzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRpZFN0YXJ0RHJhZygpCiAgICAgfQogCiAg
ICAgaWYgKGF1dG8gcmFuZ2UgPSBkcmFnU3RhdGUoKS5kcmFnZ2VkQ29udGVudFJhbmdlKSB7Ci0g
ICAgICAgIHJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250ZW50
TWFya2VyKHJhbmdlLmdldCgpKTsKKyAgICAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJr
ZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoKnJhbmdlKTsKICAgICAgICAgcmVwYWludENv
bnRlbnRzT2ZSYW5nZShyYW5nZSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRT
b3VyY2UuY3BwCmluZGV4IDNkNDczNWY2MjQ3YTBkODg1YmNiZjMyYWM0ZmYyNmFhZDRjNDE2Njku
LmM4YTkwMDdhM2VlZDBhMzJkYTcyYjQ3NDMxMmNhZGFiZTg1MDcwZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRTb3VyY2UuY3BwCkBAIC03Myw3ICs3Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxFdmVu
dFNvdXJjZT4+IEV2ZW50U291cmNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4CiAgICAgfQogCiAgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IEV2ZW50U291cmNl
KGNvbnRleHQsIGZ1bGxVUkwsIGV2ZW50U291cmNlSW5pdCkpOwotICAgIHNvdXJjZS0+c2V0UGVu
ZGluZ0FjdGl2aXR5KHNvdXJjZS5wdHIoKSk7CisgICAgc291cmNlLT5zZXRQZW5kaW5nQWN0aXZp
dHkoc291cmNlLmdldCgpKTsKICAgICBzb3VyY2UtPnNjaGVkdWxlSW5pdGlhbENvbm5lY3QoKTsK
ICAgICBzb3VyY2UtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBXVEZNb3ZlKHNvdXJj
ZSk7CkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6bmV0d29ya1JlcXVlc3RF
bmRlZCgpCiAgICAgaWYgKG1fc3RhdGUgIT0gQ0xPU0VEKQogICAgICAgICBzY2hlZHVsZVJlY29u
bmVjdCgpOwogICAgIGVsc2UKLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cisg
ICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBFdmVudFNvdXJj
ZTo6c2NoZWR1bGVJbml0aWFsQ29ubmVjdCgpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBFdmVu
dFNvdXJjZTo6Y2xvc2UoKQogICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfQogfQog
CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6YWJvcnRDb25uZWN0aW9uQXR0
ZW1wdCgpCiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKICAgICBlbHNlIHsKICAgICAgICAg
bV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Cisg
ICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiAKICAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBDTE9TRUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCA3Zjc0ZTMyNWNlNzg1
YmFkNTFiYjU3YTE1MmMxY2EyYTczMjk0NTZiLi40ODVmZDJlMzI1YzI4YTI1Zjc3MzM0YmM4OTc3
YTIzMTM5NmM3M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtNTYsNyArNTYsNiBAQAogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCA3YjVkYzZjZGU0NDBkODM1NzU4NjNhMTU1NDdmMDRmMDMwY2VlMTY2Li4wN2Jj
NjFlYmFlNmQ2YmUxYzMxNGE1NTIxMjcyNGUxMjAzNWExMmIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVt
ZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCmluZGV4IDRjZjVlMjlkMGI5Mzg2YWZmZTI3MjZjNzNhYWVlMjIzOTM1MTUzYzMuLmI0N2Y1
MmI0NWMwOWFlMjBhYjUyZmI0ZmIxYmMxY2IwZDI0YmI3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAg
dm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1
dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgIC8vIElmIHdlIGdldCBBbmltYXRpb25TdGF0ZUlu
cHV0OjpSZXN0YXJ0QW5pbWF0aW9uIHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdh
cmRsZXNzIG9mIHN0YXRlLgogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpN
YWtlTmV3KSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsK
ICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0
aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlv
blN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSBzdGQ6
Om51bGxvcHQ7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVT
dGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAg
ICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24pIHsK
ICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2Fp
dFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1h
dGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlz
KTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBB
bmltYXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0YXJ0VGltZSA9IHN0ZDo6bnVsbG9wdDsK
QEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGlu
ZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAKICAgICBpZiAoaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uKSB7CiAgICAgICAgIGlmICht
X2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJs
ZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAg
ICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21B
bmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5p
bWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpEb25lOwogICAgICAgICBlbmRBbmltYXRpb24oKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lk
IEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlu
cHV0LCBkb3VibGUgcGFyYW0pCiAKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikK
ICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvbi0+dHJpZ2dlcigpICYmIG1fYW5pbWF0aW9uLT50
cmlnZ2VyKCktPmlzU2Nyb2xsQW5pbWF0aW9uVHJpZ2dlcigpKQotICAgICAgICAgICAgICAgIG1f
Y29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25z
RGVwZW5kZW50T25TY3JvbGwodGhpcyk7CisgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmlt
YXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNj
cm9sbCgqdGhpcyk7CiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFu
aW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcjoKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEFu
aW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0
LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVk
LCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQg
d2l0aCBzdGFydCB0aW1lCiAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmlt
YXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0
aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKICAgICAgICAgICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlOwotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25D
b250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKIAogICAgICAgICAgICAgICAgIC8v
IFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KICAgICAgICAg
ICAgICAgICBpZiAobV9vYmplY3QgJiYgbV9vYmplY3QtPmVsZW1lbnQoKSkKQEAgLTI4MSw3ICsy
ODEsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lT2Zmc2V0ID0gLW1fYW5pbWF0aW9uLT5kZWxheSgpOwogICAgICAgICAgICAgICAgICAgICBi
b29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0KTsKIAotICAgICAgICAgICAg
ICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRv
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSh0aGlzLCBzdGFydGVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0
YXJ0ZWQpOwogICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MzcsNyArNDM3LDcg
QEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0Fj
Y2VsZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0
aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVfb3IoMCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
ZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UodGhpcywgc3RhcnRlZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgq
dGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQg
PSBzdGFydGVkOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250
cm9sbGVyLmNwcAppbmRleCBiMTFkYTVjMzBiNTEwMjk2N2U5MWQ5NjY5NjMxZDBmZmZmZmFlM2I2
Li5kZmU0YzAzMjQ4YWQ2YmRkNWUxYTRiMTdkZDRjYmVhNmZkYWY5YTJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVy
LmNwcApAQCAtNTAzLDE3ICs1MDMsMTUgQEAgdW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW0KICAgICBy
ZXR1cm4gY291bnQ7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFk
ZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCit2
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uKQogewotICAgIC8vIE1ha2Ugc3VyZSB0
aGlzIGFuaW1hdGlvbiBpcyBub3QgaW4gdGhlIHN0YXJ0IHRpbWUgd2FpdGVycwotICAgIG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoYW5pbWF0aW9uKTsKLQot
ICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5hZGQoYW5pbWF0aW9uKTsKKyAgICBtX2Fu
aW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3ZlKCZhbmltYXRpb24pOwor
ICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5hZGQoJmFuaW1hdGlvbik7CiB9CiAKLXZv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2Fp
dGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQordm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uVG9SZW1vdmUpCiB7Ci0gICAgbV9hbmltYXRp
b25zV2FpdGluZ0ZvclN0eWxlLnJlbW92ZShhbmltYXRpb25Ub1JlbW92ZSk7CisgICAgbV9hbmlt
YXRpb25zV2FpdGluZ0ZvclN0eWxlLnJlbW92ZSgmYW5pbWF0aW9uVG9SZW1vdmUpOwogfQogCiB2
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSgpCkBAIC01
MjUsNyArNTIzLDcgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVB
dmFpbGFibGUoKQogICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5jbGVhcigpOwogfQog
Ci12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uLCBib29sIHdp
bGxHZXRSZXNwb25zZSkKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRv
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiBhbmlt
YXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQogewogICAgIC8vIElmIHdpbGxHZXRSZXNwb25z
ZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3YWl0aW5nIGZv
ciBhIHJlc3BvbnNlCiAgICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNhbGwgdG8gbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KQEAgLTU0NCwxNyArNTQyLDE2IEBAIHZvaWQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRp
bWVSZXNwb25zZShBCiAgICAgLy8gVGhpcyB3aWxsIHN5bmNocm9uaXplIGFsbCBzb2Z0d2FyZSBh
bmQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBzdGFydGVkIGluIHRoZSBzYW1lIAogICAgIC8vIHVw
ZGF0ZVN0eWxlSWZOZWVkZWQgY3ljbGUuCiAgICAgLy8KLSAgICAKKwogICAgIGlmICh3aWxsR2V0
UmVzcG9uc2UpCiAgICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSB0
cnVlOwogCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmFkZChh
bmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5h
ZGQoJmFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlv
bkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5p
bWF0aW9uQmFzZSYgYW5pbWF0aW9uVG9SZW1vdmUpCiB7Ci0gICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZShhbmltYXRpb25Ub1JlbW92ZSk7Ci0gICAgCisg
ICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0
aW9uVG9SZW1vdmUpOwogICAgIGlmIChtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UuaXNFbXB0eSgpKQogICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0
aW9uID0gZmFsc2U7CiB9CkBAIC01NzAsOSArNTY3LDkgQEAgdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6c3RhcnRUaW1lUmVzcG9uc2UoZG91YmxlIHRpbWUpCiAgICAgbV93YWl0
aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogfQogCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJh
c2UqIGFuaW1hdGlvbikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1h
dGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uKQogewotICAgIExPRyhB
bmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgYW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZDogJXAiLCB0aGlzLCBhbmltYXRpb24pOworICAgIExPRyhBbmltYXRpb25zLCAi
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDog
JXAiLCB0aGlzLCAmYW5pbWF0aW9uKTsKIAogICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKGFuaW1hdGlvbik7CiAgICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UoYW5pbWF0aW9uKTsKQEAgLTU5MywxNCArNTkwLDE1IEBAIHZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5p
bWF0aW9uQmFzZSogYW5pbWF0CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxf
MikKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc0Rl
cGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKKwordm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwo
QW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uKQogewotICAgIG1fYW5pbWF0aW9uc0RlcGVuZGVudE9u
U2Nyb2xsLmFkZChhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xs
LmFkZCgmYW5pbWF0aW9uKTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKiBh
bmltYXRpb24pCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9t
QW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsK
LSAgICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5yZW1vdmUoYW5pbWF0aW9uKTsKKyAg
ICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5yZW1vdmUoJmFuaW1hdGlvbik7CiB9CiAK
IHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnNjcm9sbFdhc1VwZGF0ZWQoKQpA
QCAtNjE3LDYgKzYxNSw3IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnNj
cm9sbFdhc1VwZGF0ZWQoKQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDQxNzAKICAgICB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2VkKTsKIH0K
KwogI2VuZGlmCiAKIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIoRnJhbWUmIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKaW5kZXggMTVhNGY3MmMx
ZTZkNDc2NDE0YzQ4OTg0NDUyNzNhY2UzNTg5NjNmNC4uYzIzYmVhMmYzNjcxMjViMzBhYzNmOWNh
MzUwMWExMzJiNGU4MzdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCkBAIC05MywxMyAr
OTMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7CiAgICAgdm9p
ZCByZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSk7CiAgICAgCi0gICAgdm9pZCBhZGRU
b0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSopOwotICAgIHZvaWQgcmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSopOworICAgIHZv
aWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmKTsKKyAgICB2
b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmKTsK
IAotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFu
aW1hdGlvbkJhc2UqLCBib29sIHdpbGxHZXRSZXNwb25zZSk7Ci0gICAgdm9pZCByZW1vdmVGcm9t
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKik7Cisg
ICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0
aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsKKyAgICB2b2lkIHJlbW92ZUZyb21Bbmlt
YXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmKTsKIAotICAg
IHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlKik7CisgICAgdm9pZCBh
bmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UmKTsKIAogICAgIHZvaWQgdXBkYXRl
QW5pbWF0aW9uVGltZXJGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50Jik7CiAKQEAgLTExMCw4ICsx
MTAsOCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKICAg
ICBib29sIHdhbnRzU2Nyb2xsVXBkYXRlcygpIGNvbnN0IHsgcmV0dXJuICFtX2FuaW1hdGlvbnNE
ZXBlbmRlbnRPblNjcm9sbC5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc0Rl
cGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21Bbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQgYWRkVG9B
bmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYpOworICAgIHZvaWQgcmVt
b3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlJik7CiAKICAg
ICB2b2lkIHNjcm9sbFdhc1VwZGF0ZWQoKTsKICAgICBmbG9hdCBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCmluZGV4IGQ4ZTFiMmRiZGFk
MjcwOTRiYzM3ZTE1NTkyYzE2NmVhZWU2YTJhNDcuLjZjNThjZjNjOTA2ZTU0ZGMwZjY4OWVhNTI1
NWJkOGI0M2ViYmVjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNjQsMTQgKzY0LDE0IEBAIHZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgLy8gQ2xlYXIgdGhlIHJlbmRl
cmVycyBmcm9tIGFsbCBydW5uaW5nIGFuaW1hdGlvbnMsIGluIGNhc2Ugd2UgYXJlIGluIHRoZSBt
aWRkbGUgb2YKICAgICAgICAgLy8gYW4gYW5pbWF0aW9uIGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDUyKQogICAgICAgICBmb3IgKGF1dG8m
IHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0aW9uLmdldCgp
KTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1v
dmVkKCp0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAg
ICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7
Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChhbmltYXRpb24uZ2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFu
aW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7CiAgICAgICAgICAgICBhbmltYXRpb24t
PmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVy
LCBjb25zdCBSZW5kZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsQW5pbS0+Ymxl
bmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRTdHlsZS5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0aW9uICVwIGZvciBw
cm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92
ZWQoaW1wbEFuaW0pOworICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxl
cigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmltcGxBbmltKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3ApOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZXF1YWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTg3LDcgKzE4Nyw3
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyCiAgICAgVmVjdG9yPGludD4gdG9CZVJlbW92ZWQ7
CiAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewog
ICAgICAgICBpZiAoIXRyYW5zaXRpb24tPmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBhbmltYXRp
b25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0aW9uLmdldCgpKTsK
KyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KCp0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9u
LT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsKICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVt
b3ZpbmcgSW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSByZW5kZXJlciAlcCBmb3IgcHJvcGVydHkg
JXMiLCB0cmFuc2l0aW9uLmdldCgpLCByZW5kZXJlciwgZ2V0UHJvcGVydHlOYW1lKHRyYW5zaXRp
b24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpKTsKICAgICAgICAgfQpAQCAtMjc4LDcgKzI3OCw3IEBA
IHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGNvbnN0CiAgICAgLy8gTWFrZSBhIGxpc3Qgb2YgYW5pbWF0aW9u
cyB0byBiZSByZW1vdmVkLgogICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFu
aW1hdGlvbnMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKCFuZXdBbmltYXRpb25zLmNvbnRhaW5z
KGFuaW1hdGlvbi0+bmFtZSgpLmltcGwoKSkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW1hdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0
aW9uKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgICAgIExPRyhB
bmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSByZW5kZXJlciAl
cCIsIGFuaW1hdGlvbi5nZXQoKSwgcmVuZGVyZXIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCmluZGV4IGI2NjM4N2JkZmI4OTlhNmI3NTMzODI5MzUxNjIzYzAwMzJi
YTYwNWQuLjU5NDUyN2VhZDc0YTRkMTRkOWI5M2Y3OTU4YzMyYWJkY2JkOWI0MTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTgxLDE0ICs4MSwxNCBAQCB2b2lkIEZyYW1lOjppbml0V2l0aFNpbXBsZUhUTUxE
b2N1bWVudChjb25zdCBTdHJpbmcmIHN0eWxlLCBjb25zdCBVUkwmIHVybCkKIHsKICAgICBtX2xv
YWRlci0+aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQodXJsKTsKIAotICAgIFJlZlB0cjxIVE1M
RG9jdW1lbnQ+IGRvY3VtZW50ID0gSFRNTERvY3VtZW50OjpjcmVhdGVTeW50aGVzaXplZERvY3Vt
ZW50KHRoaXMsIHVybCk7CisgICAgYXV0byBkb2N1bWVudCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRl
U3ludGhlc2l6ZWREb2N1bWVudCgqdGhpcywgdXJsKTsKICAgICBkb2N1bWVudC0+c2V0Q29tcGF0
aWJpbGl0eU1vZGUoRG9jdW1lbnRDb21wYXRpYmlsaXR5TW9kZTo6TGltaXRlZFF1aXJrc01vZGUp
OwogICAgIGRvY3VtZW50LT5jcmVhdGVET01XaW5kb3coKTsKLSAgICBzZXREb2N1bWVudChkb2N1
bWVudCk7CisgICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQucHRyKCkpOwogCi0gICAgYXV0byByb290
RWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7CisgICAgYXV0byBy
b290RWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAotICAgIGF1
dG8gYm9keSA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7CisgICAgYXV0byBi
b2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIGlmICghc3R5bGUu
aXNFbXB0eSgpKQogICAgICAgICBib2R5LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0
dHIsIHN0eWxlKTsKIApAQCAtNzU0LDQgKzc1NCw1IEBAIHZvaWQgRnJhbWU6OnJlc2V0QWxsR2Vv
bG9jYXRpb25QZXJtaXNzaW9uKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5kZXggZTViZjA0ZGIyM2QyYWNiOTc5NWEzMmU5YTQ4ZTgz
YjJiMzg1MmY5My4uYTcwM2MwOTA1Mzc5ZGIzZDYxZTE2MTI1MGM1MGFjZDU0Nzk2ZTgwMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CkBAIC0xMDUsNyArMTA1LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHIKICAgICAgICAgLy8g
QWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQg
ZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lw
cyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4K
ICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAg
ICAgICBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShm
aWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgZWxlbWVudCk7CisgICAgICAgICAgICBkb2N1bWVu
dC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShmaWx0ZXJPcGVyYXRp
b24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA5ZDQ1
ZTE4NzZkNzkzODc0MmEyODVlOTAzMjc3YTU0MzgwODg5MGI3Li4yNzEwNzNiODBlODBlZGY1MzBh
MWE1ZDljYjcwZGNkNzc5ZGNkZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCkBAIC04OTUsNyArODk1LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG8K
ICAgICBpZiAoIXJlbmRlcmVyKCkudGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHJlbmRlcmVyKCkudGV4dE5vZGUoKSk7CisgICAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpyZW5kZXJlcigpLnRleHROb2RlKCkpOwogCiAg
ICAgLy8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0IHRvdWNoIHRoaXMgcnVuIGEgY2hh
bmNlIHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVuIGRyYXduLgogICAgIC8vIE5vdGUg
ZW5kKCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBvbmUgcGFzdCBpdCBsaWtlIGVuZE9m
ZnNldCBhbmQgcmFuZ2VzIGRvLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAKaW5kZXggMDI2MDY1YTQ2NmI5ODMxYjFkOTU4YzNiM2U0ZTVkY2RlZTMxMGM0Mi4u
ZDdiNTY3MzgzNzQ4ODk2YmZlNGIxOWFiOTljZTk2ODIxZTIyNjEzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVk
R3JhcGhpY3NDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KCksIGZhbHNlKTsKICAgICBpZiAoZWxl
bWVudCgpICYmIGVsZW1lbnQoKS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7CiAgICAg
ICAgIGF1dG8qIHBhcmVudENvbnRhaW5lciA9IGVsZW1lbnQoKS0+cGFyZW50T3JTaGFkb3dIb3N0
RWxlbWVudCgpOwotICAgICAgICBpZiAoZHJhZ2dlZENvbnRlbnRDb250YWluc1JlcGxhY2VkRWxl
bWVudChkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHBhcmVudENvbnRhaW5lciwgRG9j
dW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KSwgKmVsZW1lbnQoKSkpIHsKKyAgICAgICAgaWYg
KGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQoZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0ZvcigqcGFyZW50Q29udGFpbmVyLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENv
bnRlbnQpLCAqZWxlbWVudCgpKSkgewogICAgICAgICAgICAgc2F2ZWRHcmFwaGljc0NvbnRleHQu
c2F2ZSgpOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRBbHBoYSgwLjI1KTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDky
YWYwZDdjZmFiODM4YmNhMjg2YzY3YWYyMTJhZjA0ZWNiZWM5OTMuLjBiNjJkYzExMWQwMTI2MDE5
ZDExZTNkNTU0Njg3ZGM3ZDhkNzRkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKQEAgLTEwNzEsNyArMTA3MSw3IEBAIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPj4gUmVuZGVyVGV4dDo6ZHJhZ2dlZENvbnRlbnRSYW5nZXNCZXR3ZWVuT2ZmCiAg
ICAgaWYgKCF0ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBtYXJr
ZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcih0ZXh0Tm9kZSgpLCBEb2N1bWVu
dE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpOworICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50KCku
bWFya2VycygpLm1hcmtlcnNGb3IoKnRleHROb2RlKCksIERvY3VtZW50TWFya2VyOjpEcmFnZ2Vk
Q29udGVudCk7CiAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2UuY3BwCmluZGV4IGI2NTZmZDZkMDgzYTE2OGI4YTFmMzkzMTRjNzYxZGVmNmQ1OGQwZWUuLjQ3
NWUxNWYwZDM4NTAwMGYyY2IwNTY1ODcxZWRlZGJmNmE4NzQ5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCkBAIC0xNjUsOSAr
MTY1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUZyb21DYWNoZUFuZEludmFsaWRhdGVE
ZXBlbmRlbmNpZXMoUmVuZGVyRWxlbWVudCYgcmVuZGUKICAgICAgICAgICAgIGNsaXBwZXItPnJl
bW92ZUNsaWVudEZyb21DYWNoZShyZW5kZXJlcik7CiAgICAgfQogCi0gICAgaWYgKCFyZW5kZXJl
ci5lbGVtZW50KCkgfHwgIXJlbmRlcmVyLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpCisgICAg
aWYgKCFpczxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQogICAgICAgICByZXR1cm47
Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IHJlbmRlcmVyLmRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1Rhcmdl
dChkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKTsKKyAgICBhdXRvKiBk
ZXBlbmRlbmNpZXMgPSByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5z
ZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnJlbmRl
cmVyLmVsZW1lbnQoKSkpOwogICAgIGlmICghZGVwZW5kZW5jaWVzKQogICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggM2Q0NGM2YWFhMzcwNDllOTk0MzljMWQ4NDgx
ZTUwODY5NzFjMjAwMC4uNDM2ZGM1ODc5NDVlODA4NTRmNmUzMDBhNzYwMDMxOWNjYzYzMzUxNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE3MiwxOSArMTcyLDE5IEBAIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lzdGVyUmVzb3VyY2UoKQogewogICAgIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucyYgZXh0ZW5zaW9ucyA9IHN2Z0V4dGVuc2lvbnNGcm9tRWxlbWVudChlbGVt
ZW50KCkpOwogICAgIGlmICghZXh0ZW5zaW9ucy5pc0lkT2ZQZW5kaW5nUmVzb3VyY2UobV9pZCkp
IHsKLSAgICAgICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJjZShtX2lkLCB0aGlzKTsKKyAgICAgICAg
ZXh0ZW5zaW9ucy5hZGRSZXNvdXJjZShtX2lkLCAqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpQZW5kaW5n
RWxlbWVudHM+IGNsaWVudHMgPSBleHRlbnNpb25zLnJlbW92ZVBlbmRpbmdSZXNvdXJjZShtX2lk
KTsKIAogICAgIC8vIENhY2hlIHVzIHdpdGggdGhlIG5ldyBpZC4KLSAgICBleHRlbnNpb25zLmFk
ZFJlc291cmNlKG1faWQsIHRoaXMpOworICAgIGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwg
KnRoaXMpOwogCiAgICAgLy8gVXBkYXRlIGNhY2hlZCByZXNvdXJjZXMgb2YgcGVuZGluZyBjbGll
bnRzLgogICAgIGZvciAoYXV0byogY2xpZW50IDogKmNsaWVudHMpIHsKICAgICAgICAgQVNTRVJU
KGNsaWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKLSAgICAgICAgZXh0ZW5zaW9ucy5jbGVh
ckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKGNsaWVudCk7CisgICAgICAgIGV4dGVuc2lv
bnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgqY2xpZW50KTsKICAgICAgICAg
YXV0byogcmVuZGVyZXIgPSBjbGllbnQtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVy
ZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzLmNwcAppbmRleCBlYTliNDUyMTE1NzMzMTMyM2NhMmIyMGNmZjdiZjlk
MjlkMzkwZWZmLi40MTNiYmMyNmM5NjU4NjA1MDdlNGY0ZDc4ZDA4ZTkyYmRlZTY2MzNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCkBAIC0xNzUs
NyArMTc1LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcGFp
bnRpbmdSZXNvdXJjZUZyb21TVkdQYWludChEb2N1bWVudCYKIAogc3RhdGljIGlubGluZSB2b2lk
IHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKFNWR0RvY3VtZW50RXh0ZW5zaW9ucyYgZXh0ZW5zaW9u
cywgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBl
eHRlbnNpb25zLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgJmVsZW1lbnQpOworICAgIGV4dGVuc2lv
bnMuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCBlbGVtZW50KTsKIH0KIAogYm9vbCBTVkdSZXNvdXJj
ZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCmluZGV4IDgzZDkxMmVlYmU4ZmU0MjgzODY4ZDJk
MTNhZGM0MzkyOGRhMjU5NjcuLjY5NDMzYWEyN2IzMWZmZDNiNWI4ZThmMjYxNzc3YjQ3ZTFiNmRj
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
Q2FjaGUuY3BwCkBAIC0xNjksOCArMTY5LDggQEAgdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6cmVz
b3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImIHJlc291cmNlKQogCiAg
ICAgICAgIC8vIE1hcmsgdXNlcnMgb2YgZGVzdHJveWVkIHJlc291cmNlcyBhcyBwZW5kaW5nIHJl
c29sdXRpb24gYmFzZWQgb24gdGhlIGlkIG9mIHRoZSBvbGQgcmVzb3VyY2UuCiAgICAgICAgIEVs
ZW1lbnQmIHJlc291cmNlRWxlbWVudCA9IHJlc291cmNlLmVsZW1lbnQoKTsKLSAgICAgICAgRWxl
bWVudCogY2xpZW50RWxlbWVudCA9IGl0LmtleS0+ZWxlbWVudCgpOwotICAgICAgICBjbGllbnRF
bGVtZW50LT5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3Vy
Y2UocmVzb3VyY2VFbGVtZW50LmdldElkQXR0cmlidXRlKCksIGNsaWVudEVsZW1lbnQpOworICAg
ICAgICBFbGVtZW50JiBjbGllbnRFbGVtZW50ID0gKml0LmtleS0+ZWxlbWVudCgpOworICAgICAg
ICBjbGllbnRFbGVtZW50LmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRp
bmdSZXNvdXJjZShyZXNvdXJjZUVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKSwgY2xpZW50RWxlbWVu
dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNj
b3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCmluZGV4IDE3Njkw
Y2NkNjc3NzljMjNiOTM3NzYzMDg0NDU0NjJkN2FhOTIyZGQuLmU2ZjA3MTRhNDM3YTU0OGY1YTE0
MWQyNTc5NzhlNTdlOGRhNjQ1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCkBA
IC0zMDcsNyArMzA3LDcgQEAgdm9pZCBTY29wZTo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZl
Y3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCiAgICAgICAgICAgICBpZiAocGkuaXNY
U0woKSAmJiAhbV9kb2N1bWVudC50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgWFNMIHRyYW5zZm9ybXMgdW50aWwgbG9hZGluZyBpcyBm
aW5pc2hlZC4KICAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQucGFyc2luZygpKQotICAg
ICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNmb3JtKCZwaSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFuc2Zvcm0ocGkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAppbmRleCBlYjgxNTRjZjVjMmVlM2Y5MGVh
ZWI0MzkxMjMwZTljMDUzYjJhM2I3Li5jZTQyYzIxNzE0ZjYyZTQwYzIyMzdmMDYzNjk4MmVhZjFl
YzNhNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNw
cApAQCAtNTEsMjcgKzUxLDI1IEBAIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6flNWR0RvY3VtZW50
RXh0ZW5zaW9ucygpCiB7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRUaW1l
Q29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6YWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1f
dGltZUNvbnRhaW5lcnMuYWRkKGVsZW1lbnQpOworICAgIG1fdGltZUNvbnRhaW5lcnMuYWRkKCZl
bGVtZW50KTsKICAgICBpZiAobV9hcmVBbmltYXRpb25zUGF1c2VkKQotICAgICAgICBlbGVtZW50
LT5wYXVzZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgZWxlbWVudC5wYXVzZUFuaW1hdGlvbnMoKTsK
IH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVRpbWVDb250YWluZXIoU1ZH
U1ZHRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVU
aW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV90aW1lQ29udGFp
bmVycy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV90aW1lQ29udGFpbmVycy5yZW1vdmUoJmVsZW1l
bnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUmVzb3VyY2UoY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlKQor
dm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJiByZXNvdXJjZSkKIHsKLSAgICBBU1NF
UlQocmVzb3VyY2UpOwotCiAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gUmVwbGFjZXMgcmVzb3VyY2UgaWYgYWxyZWFkeSBwcmVzZW50LCB0byBoYW5kbGUg
cG90ZW50aWFsIGlkIGNoYW5nZXMKLSAgICBtX3Jlc291cmNlcy5zZXQoaWQsIHJlc291cmNlKTsK
KyAgICBtX3Jlc291cmNlcy5zZXQoaWQsICZyZXNvdXJjZSk7CiB9CiAKIHZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKQpAQCAt
OTcsNyArOTUsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c3RhcnRBbmltYXRpb25z
KCkKICAgICAvLyBGSVhNRTogV2UgaG9sZCBhIHJlZiBwb2ludGVycyB0byBwcmV2ZW50IGEgc2hh
ZG93IHRyZWUgZnJvbSBnZXR0aW5nIHJlbW92ZWQgb3V0IGZyb20gdW5kZXJuZWF0aCB1cy4KICAg
ICAvLyBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCByZWZhY3RvciB0aGUgdXNlLWVsZW1lbnQgdG8g
YXZvaWQgdGhpcy4gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzUzNzA0CiAgICAgVmVjdG9yPFJl
ZlB0cjxTVkdTVkdFbGVtZW50Pj4gdGltZUNvbnRhaW5lcnM7Ci0gICAgdGltZUNvbnRhaW5lcnMu
YXBwZW5kUmFuZ2UobV90aW1lQ29udGFpbmVycy5iZWdpbigpLCBtX3RpbWVDb250YWluZXJzLmVu
ZCgpKTsKKyAgICBjb3B5VG9WZWN0b3IobV90aW1lQ29udGFpbmVycywgdGltZUNvbnRhaW5lcnMp
OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRpbWVDb250YWluZXJzKQogICAgICAgICBlbGVt
ZW50LT50aW1lQ29udGFpbmVyKCkuYmVnaW4oKTsKIH0KQEAgLTE0NCwxOSArMTQyLDE3IEBAIHZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiAgICAgcmVwb3J0TWVzc2FnZShtX2RvY3VtZW50LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAi
RXJyb3I6ICIgKyBtZXNzYWdlKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFk
ZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50
KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBB
dG9taWNTdHJpbmcmIGlkLCBFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50
KTsKLQogICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8g
cmVzdWx0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgbnVsbHB0cik7CiAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjpt
YWtlX3VuaXF1ZTxQZW5kaW5nRWxlbWVudHM+KCk7Ci0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+YWRkKGVsZW1lbnQpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZCgmZWxlbWVu
dCk7CiAKLSAgICBlbGVtZW50LT5zZXRIYXNQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgZWxlbWVu
dC5zZXRIYXNQZW5kaW5nUmVzb3VyY2VzKCk7CiB9CiAKIGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjppc0lkT2ZQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QK
QEAgLTE2Nyw0OSArMTYzLDQzIEBAIGJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0lkT2ZQ
ZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKICAgICByZXR1cm4g
bV9wZW5kaW5nUmVzb3VyY2VzLmNvbnRhaW5zKGlkKTsKIH0KIAotYm9vbCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Citib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVtZW50V2l0aFBlbmRpbmdS
ZXNvdXJjZXMoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGFsZ29yaXRo
bSB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgcmVzb3Vy
Y2VzIGFuZCBuZWVkIG5vdC4KICAgICAvLyBJZiBwZXJmb3JtYW5jZSBiZWNvbWVzIGFuIGlzc3Vl
IHdlIGNhbiBrZWVwIGEgY291bnRlZCBzZXQgb2YgZWxlbWVudHMgYW5kIGFuc3dlciB0aGUgcXVl
c3Rpb24gZWZmaWNpZW50bHkuCi0gICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIGZvciAoYXV0byYg
ZWxlbWVudHMgOiBtX3BlbmRpbmdSZXNvdXJjZXMudmFsdWVzKCkpIHsKICAgICAgICAgQVNTRVJU
KGVsZW1lbnRzKTsKLQotICAgICAgICBpZiAoZWxlbWVudHMtPmNvbnRhaW5zKGVsZW1lbnQpKQor
ICAgICAgICBpZiAoZWxlbWVudHMtPmNvbnRhaW5zKCZlbGVtZW50KSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjppc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIGlkKSBjb25zdAorYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzUGVu
ZGluZ1Jlc291cmNlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgaWYgKCFpc0lkT2ZQZW5kaW5nUmVz
b3VyY2UoaWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9wZW5kaW5n
UmVzb3VyY2VzLmdldChpZCktPmNvbnRhaW5zKGVsZW1lbnQpOworICAgIHJldHVybiBtX3BlbmRp
bmdSZXNvdXJjZXMuZ2V0KGlkKS0+Y29udGFpbnMoJmVsZW1lbnQpOwogfQogCi12b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShFbGVt
ZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNsZWFySGFzUGVuZGlu
Z1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIWlzRWxl
bWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKGVsZW1lbnQpKQotICAgICAgICBlbGVtZW50LT5jbGVh
ckhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxlbWVudC5jbGVhckhhc1BlbmRpbmdS
ZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50JiBl
bGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIC8vIFJlbW92ZSB0aGUgZWxl
bWVudCBmcm9tIHBlbmRpbmcgcmVzb3VyY2VzLgotICAgIGlmICghbV9wZW5kaW5nUmVzb3VyY2Vz
LmlzRW1wdHkoKSAmJiBlbGVtZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKKyAgICBpZiAo
IW1fcGVuZGluZ1Jlc291cmNlcy5pc0VtcHR5KCkgJiYgZWxlbWVudC5oYXNQZW5kaW5nUmVzb3Vy
Y2VzKCkpIHsKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9CZVJlbW92ZWQ7CiAgICAg
ICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX3BlbmRpbmdSZXNvdXJjZXMpIHsKICAgICAgICAg
ICAgIFBlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSByZXNvdXJjZS52YWx1ZS5nZXQoKTsKICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRz
LT5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwor
ICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZSgmZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAo
ZWxlbWVudHMtPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQo
cmVzb3VyY2Uua2V5KTsKICAgICAgICAgfQpAQCAtMjI5LDcgKzIxOSw3IEBAIHZvaWQgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVu
dCogZWxlbWVudCkKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBB
U1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBlbGVtZW50cy0+cmVt
b3ZlKGVsZW1lbnQpOworICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZSgmZWxlbWVudCk7CiAg
ICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICB0b0Jl
UmVtb3ZlZC5hcHBlbmQocmVzb3VyY2Uua2V5KTsKICAgICAgICAgfQpAQCAtMjg0LDQwICsyNzQs
MjkgQEAgRWxlbWVudCogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBl
bmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsTWFwKGMKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAot
SGFzaFNldDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdAor
SGFzaFNldDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdAog
ewotICAgIEFTU0VSVChyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgY29uc3QgYXV0byBpdCA9IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBpZiAoaXQg
PT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gaXQtPnZhbHVlLmdldCgpOworICAgIHJldHVybiBtX2VsZW1lbnREZXBlbmRlbmNpZXMu
Z2V0KCZyZWZlcmVuY2VkRWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNpbmdFbGVt
ZW50LCBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNp
bmdFbGVtZW50LCBTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkKIHsKLSAgICBBU1NFUlQo
cmVmZXJlbmNpbmdFbGVtZW50KTsKLSAgICBBU1NFUlQocmVmZXJlbmNlZEVsZW1lbnQpOwotCi0g
ICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBlbGVtZW50cyA9IG1fZWxlbWVudERlcGVuZGVu
Y2llcy5nZXQocmVmZXJlbmNlZEVsZW1lbnQpKSB7Ci0gICAgICAgIGVsZW1lbnRzLT5hZGQocmVm
ZXJlbmNpbmdFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gZWxl
bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8U1ZHRWxlbWVudCo+PigpOwotICAgIGVs
ZW1lbnRzLT5hZGQocmVmZXJlbmNpbmdFbGVtZW50KTsKLSAgICBtX2VsZW1lbnREZXBlbmRlbmNp
ZXMuc2V0KHJlZmVyZW5jZWRFbGVtZW50LCBXVEZNb3ZlKGVsZW1lbnRzKSk7CisgICAgYXV0byBy
ZXN1bHQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5zdXJlKCZyZWZlcmVuY2VkRWxlbWVudCwg
WyZyZWZlcmVuY2luZ0VsZW1lbnRdIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
SGFzaFNldDxTVkdFbGVtZW50Kj4+KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxTVkdFbGVtZW50Kj4g
eyAmcmVmZXJlbmNpbmdFbGVtZW50IH0pOworICAgIH0pOworICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZCgmcmVmZXJlbmNpbmdF
bGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdl
dFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCkKK3Zv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxl
bWVudChTVkdFbGVtZW50JiByZWZlcmVuY2luZ0VsZW1lbnQpCiB7CiAgICAgVmVjdG9yPFNWR0Vs
ZW1lbnQqPiB0b0JlUmVtb3ZlZDsKIAogICAgIGZvciAoYXV0byYgZGVwZW5kZW5jeSA6IG1fZWxl
bWVudERlcGVuZGVuY2llcykgewotICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVu
dCA9IGRlcGVuZGVuY3kua2V5OwotICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiYgcmVmZXJl
bmNpbmdFbGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOwotICAgICAgICByZWZlcmVuY2luZ0Vs
ZW1lbnRzLnJlbW92ZShyZWZlcmVuY2luZ0VsZW1lbnQpOworICAgICAgICBhdXRvJiByZWZlcmVu
Y2luZ0VsZW1lbnRzID0gKmRlcGVuZGVuY3kudmFsdWU7CisgICAgICAgIHJlZmVyZW5jaW5nRWxl
bWVudHMucmVtb3ZlKCZyZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAgICBpZiAocmVmZXJlbmNp
bmdFbGVtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQocmVm
ZXJlbmNlZEVsZW1lbnQpOworICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGRlcGVuZGVu
Y3kua2V5KTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB0b0JlUmVtb3ZlZCkK
QEAgLTMzMywxMSArMzEyLDkgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlYnVpbGRF
bGVtZW50cygpCiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpjbGVhclRhcmdldERlcGVu
ZGVuY2llcyhTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkKIHsKLSAgICBhdXRvIGl0ID0g
bV9lbGVtZW50RGVwZW5kZW5jaWVzLmZpbmQoJnJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBpZiAo
aXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQorICAgIGF1dG8qIHJlZmVyZW5jaW5n
RWxlbWVudHMgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZ2V0KCZyZWZlcmVuY2VkRWxlbWVudCk7
CisgICAgaWYgKCFyZWZlcmVuY2luZ0VsZW1lbnRzKQogICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKGl0LT5rZXkgPT0gJnJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBIYXNoU2V0PFNWR0VsZW1l
bnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICBmb3IgKGF1
dG8qIGVsZW1lbnQgOiAqcmVmZXJlbmNpbmdFbGVtZW50cykgewogICAgICAgICBtX3JlYnVpbGRF
bGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIGVsZW1lbnQtPmNhbGxDbGVhclRhcmdl
dCgpOwpAQCAtMzYxLDIzICszMzgsMjUgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJl
YnVpbGRBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50JiByZWYKICAgICAg
ICAgZWxlbWVudC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChYTGlua05hbWVzOjpocmVmQXR0cik7CiB9
CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNl
c0ZvclRhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVt
ZW50JiByZWZlcmVuY2VkRWxlbWVudCkKIHsKLSAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMucmVt
b3ZlKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBtX3JlYnVpbGRFbGVtZW50cy5yZW1vdmVGaXJz
dChyZWZlcmVuY2VkRWxlbWVudCk7CisgICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJlbW92ZSgm
cmVmZXJlbmNlZEVsZW1lbnQpOworICAgIG1fcmVidWlsZEVsZW1lbnRzLnJlbW92ZUZpcnN0KCZy
ZWZlcmVuY2VkRWxlbWVudCk7CiB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotdm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNl
RWxlbWVudCogZWxlbWVudCkKKwordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlZ2lzdGVy
U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBt
X3N2Z0ZvbnRGYWNlRWxlbWVudHMuYWRkKGVsZW1lbnQpOworICAgIG1fc3ZnRm9udEZhY2VFbGVt
ZW50cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6dW5y
ZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6dW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChT
VkdGb250RmFjZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG1fc3ZnRm9udEZhY2VF
bGVtZW50cy5jb250YWlucyhlbGVtZW50KSk7Ci0gICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLnJl
bW92ZShlbGVtZW50KTsKKyAgICBBU1NFUlQobV9zdmdGb250RmFjZUVsZW1lbnRzLmNvbnRhaW5z
KCZlbGVtZW50KSk7CisgICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7
CiB9CisKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmgKaW5kZXggNmE1Mjc3MDQ5YzViMjU1MDI1Zjk5YTcyZTE5ZjJjZTA4MWJkMWRlYi4uNWMy
MWU1NTIwZmQ3NDMwNjgwZTg3YWM0ZTUwNjQ2YjZkYjRhNzZmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaApAQCAtNDMsMTAgKzQzLDEwIEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMoRG9jdW1lbnQmKTsKICAgICB+U1ZH
RG9jdW1lbnRFeHRlbnNpb25zKCk7CiAgICAgCi0gICAgdm9pZCBhZGRUaW1lQ29udGFpbmVyKFNW
R1NWR0VsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVu
dCopOworICAgIHZvaWQgYWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50Jik7CisgICAgdm9p
ZCByZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmKTsKIAotICAgIHZvaWQgYWRkUmVz
b3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIq
KTsKKyAgICB2b2lkIGFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyJik7CiAgICAgdm9pZCByZW1vdmVSZXNvdXJjZShjb25zdCBBdG9t
aWNTdHJpbmcmIGlkKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2VC
eUlkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwogCkBAIC02MSwxOSArNjEsMTkgQEAg
cHVibGljOgogCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGUmIHJlc291cmNlc0NhY2hlKCkgeyByZXR1
cm4gKm1fcmVzb3VyY2VzQ2FjaGU7IH0KIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBzZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQp
IGNvbnN0OwotICAgIHZvaWQgYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQq
IHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpOwotICAg
IHZvaWQgcmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCopOwor
ICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBzZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQo
U1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpIGNvbnN0OworICAgIHZvaWQgYWRkRWxlbWVu
dFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxl
bWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIHZvaWQgcmVtb3ZlQWxsVGFyZ2V0UmVmZXJl
bmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCYpOwogICAgIHZvaWQgcmVidWlsZEFsbEVsZW1lbnRS
ZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmKTsKLSAgICB2b2lkIHJlbW92ZUFsbEVsZW1l
bnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUFsbEVs
ZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmKTsKIAogICAgIHZvaWQgY2xlYXJU
YXJnZXREZXBlbmRlbmNpZXMoU1ZHRWxlbWVudCYpOwogICAgIHZvaWQgcmVidWlsZEVsZW1lbnRz
KCk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZh
Y2VFbGVtZW50Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3N2Z0Zv
bnRGYWNlRWxlbWVudHM7IH0KLSAgICB2b2lkIHJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNW
R0ZvbnRGYWNlRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVu
dChTVkdGb250RmFjZUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVt
ZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlclNWR0ZvbnRGYWNl
RWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtOTUs
MTEgKzk1LDExIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIEhhc2hNYXAgY29udGFpbnMgYSBsaXN0
IG9mIHBlbmRpbmcgcmVzb3VyY2VzLiBQZW5kaW5nIHJlc291cmNlcywgYXJlIHN1Y2gKICAgICAv
LyB3aGljaCBhcmUgcmVmZXJlbmNlZCBieSBhbnkgb2JqZWN0IGluIHRoZSBTVkcgZG9jdW1lbnQs
IGJ1dCBkbyBOT1QgZXhpc3QgeWV0LgogICAgIC8vIEZvciBpbnN0YW5jZSwgZHluYW1pY2FsbHkg
YnVpbGQgZ3JhZGllbnRzIC8gcGF0dGVybnMgLyBjbGlwcGVycy4uLgotICAgIHZvaWQgYWRkUGVu
ZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQqKTsKKyAgICB2b2lk
IGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Jik7CiAg
ICAgYm9vbCBpc0lkT2ZQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29u
c3Q7Ci0gICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50KiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3Np
YmxlKEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
cyhFbGVtZW50Kik7CisgICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50JiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckhhc1BlbmRpbmdSZXNvdXJj
ZXNJZlBvc3NpYmxlKEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGlu
Z1Jlc291cmNlcyhFbGVtZW50Jik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdFbGVtZW50
cz4gcmVtb3ZlUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpOwogCiAgICAg
Ly8gVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIGZvciBzY2hlZHVsaW5nIGEg
cGVuZGluZyByZXNvdXJjZSB0byBiZSByZW1vdmVkLgpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1Ymxp
YzoKICAgICBFbGVtZW50KiByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXNGb3JSZW1v
dmFsTWFwKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgaXNFbGVt
ZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaXNFbGVt
ZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxQZW5kaW5nRWxlbWVudHM+IHJlbW92ZVBlbmRpbmdSZXNvdXJjZUZvclJlbW92YWwoY29u
c3QgQXRvbWljU3RyaW5nJik7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXgg
NzAxODk4MWI5MmI5NmRmYmIwNWFiYTU1ZDExZTZiYzFlZjE3MThhOC4uZGUwMWEyMmRkOGE4ODIw
MDIxYjY5ZDBkZDdhZTBkYmU1OWQ5ZmZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApA
QCAtMjk0LDcgKzI5NCw3IEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50KCkKICAgICAgICAgbV9z
dmdSYXJlRGF0YSA9IG51bGxwdHI7CiAgICAgfQogICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlYnVpbGRBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7Ci0g
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsRWxlbWVudFJlZmVy
ZW5jZXNGb3JUYXJnZXQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwogfQogCiBpbnQg
U1ZHRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdApAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgU1ZH
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIAogICAgIGlm
ICh3YXNJbkRvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmNsZWFyVGFyZ2V0RGVwZW5kZW5jaWVzKCp0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFs
bEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0aGlzKTsKICAgICB9CiAgICAgaW52YWxpZGF0
ZUluc3RhbmNlcygpOwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBTVkdFbGVtZW50Ojpi
dWlsZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCgpCiAgICAgICAgIEFTU0VSVChjbGllbnRFbGVt
ZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICBpZiAoY2xpZW50RWxlbWVudC0+
aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CiAgICAgICAgICAgICBjbGllbnRFbGVtZW50LT5idWls
ZFBlbmRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAgZXh0ZW5zaW9ucy5jbGVhckhhc1BlbmRp
bmdSZXNvdXJjZXNJZlBvc3NpYmxlKGNsaWVudEVsZW1lbnQpOworICAgICAgICAgICAgZXh0ZW5z
aW9ucy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCpjbGllbnRFbGVtZW50KTsK
ICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCmluZGV4IDE5ZWY2M2IyOWE5NDI5NzllYjk4YWY2NzdhYTI2YTIzMWRhNWY3ZmQuLjZiOWRj
Yjc5YjcyNTFiN2NlNDg5ZWUyYjBiOGRiOWMwMzIzMDY5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIFNWR0ZFSW1hZ2VF
bGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiAgICAgICAgIG1fY2FjaGVkSW1hZ2Ug
PSBudWxscHRyOwogICAgIH0KIAotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVt
ZW50KCp0aGlzKTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6cmVxdWVzdEltYWdlUmVz
b3VyY2UoKQpAQCAtMTA3LDEzICsxMDcsMTMgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YnVp
bGRQZW5kaW5nUmVzb3VyY2UoKQogICAgICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRo
aXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVu
ZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jl
c291cmNlcygpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5pc1NWR0VsZW1l
bnQoKSkgeworICAgIH0gZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oKnRhcmdldCkpIHsKICAgICAg
ICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFw
LiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVs
YXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0Lgot
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJl
bmNpbmdUYXJnZXQodGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7CisgICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1Rh
cmdldCgqdGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnRhcmdldCkpOwogICAgIH0KIAogICAg
IGludmFsaWRhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAK
aW5kZXggYjhiYTliMDdmZTJhNjQwOTM2OWYxYWM4NDUyYjVhNWFlOGFjNjhlYy4uNDYzODgwNjE0
OWQ1ZjUzY2FiOGY4YzMzYjczM2ZkNjRmNDhhZWZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5jcHAKQEAgLTI3OCw3ICsyNzgsNyBAQCBOb2RlOjpJbnNlcnRpb25O
b3RpZmljYXRpb25SZXF1ZXN0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRh
aW5lck5vZAogICAgICAgICBBU1NFUlQoIW1fZm9udEVsZW1lbnQpOwogICAgICAgICByZXR1cm4g
SW5zZXJ0aW9uRG9uZTsKICAgICB9Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoKnRoaXMpOwogCiAg
ICAgcmVidWlsZEZvbnRGYWNlKCk7CiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CkBAIC0yOTAs
NyArMjkwLDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIHJvb3RQYXJlbnQpCiAKICAgICBpZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKSB7
CiAgICAgICAgIG1fZm9udEVsZW1lbnQgPSBudWxscHRyOwotICAgICAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS51bnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOwor
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51bnJlZ2lzdGVyU1ZHRm9u
dEZhY2VFbGVtZW50KCp0aGlzKTsKICAgICAgICAgbV9mb250RmFjZVJ1bGUtPm11dGFibGVQcm9w
ZXJ0aWVzKCkuY2xlYXIoKTsKIAogICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRD
aGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxl
bWVudC5jcHAKaW5kZXggZmY3ZDQ4NzJkNjk0NTY3ZTc1MmMzZmNmYTcwOTBmN2NmY2RhNDcxOC4u
ZGYyNTJiZjAyYjY4YjQ4ZDY2OTk5OThiZThkNWYwMmE1ZDI1MWQ1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKQEAgLTY1LDE3ICs2NSwxNyBAQCB2b2lkIFNWR01QYXRo
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgIEVsZW1lbnQqIHRhcmdldCA9IFNW
R1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVu
dCgpLCAmaWQpOwogICAgIGlmICghdGFyZ2V0KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3Rl
ciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAg
ICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291
cmNlKHRoaXMsIGlkKSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmlzUGVuZGluZ1Jlc291cmNlKCp0aGlzLCBpZCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2Uo
aWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwog
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAg
fSBlbHNlIGlmIChpczxTVkdFbGVtZW50PigqdGFyZ2V0KSkgewogICAgICAgICAvLyBSZWdpc3Rl
ciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAuIEFueSBjaGFuZ2Ug
b2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxheW91dC9yZXBhaW50
aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCi0gICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCh0
aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQpKTsKKyAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KCp0aGlzLCBk
b3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAgfQogCiAgICAgdGFyZ2V0UGF0aENo
YW5nZWQoKTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCkKIAogdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZl
cmVuY2VzKCkKIHsKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVB
bGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhp
cyk7CiB9CiAKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHTVBhdGhFbGVt
ZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IGUyMjMwZjQxMmRkODEzNWJmMjU3NjE1YmViOGVl
NDg0NzdmZGUwNGUuLmY3MTY0NzBjMmIzOTUwZGIyMjU4MTBiYzMwZWM0YTE4ODI3MGU3MzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtMjcyLDcgKzI3Miw3IEBAIHZv
aWQgU1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERlcGVuZGVuY2llcygpCiB7CiAgICAg
Ly8gPG1wYXRoPiBjYW4gb25seSByZWZlcmVuY2UgPHBhdGg+IGJ1dCB0aGlzIGRlcGVuZGVuY3kg
aXMgbm90IGhhbmRsZWQgaW4KICAgICAvLyBtYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJ
bnZhbGlkYXRpb24gc28gd2UgdXBkYXRlIGFueSBtcGF0aCBkZXBlbmRlbmNpZXMgbWFudWFsbHku
Ci0gICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSBkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQodGhp
cykpIHsKKyAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1Rhcmdl
dCgqdGhpcykpIHsKICAgICAgICAgZm9yIChhdXRvKiBlbGVtZW50IDogKmRlcGVuZGVuY2llcykg
ewogICAgICAgICAgICAgaWYgKGlzPFNWR01QYXRoRWxlbWVudD4oKmVsZW1lbnQpKQogICAgICAg
ICAgICAgICAgIGRvd25jYXN0PFNWR01QYXRoRWxlbWVudD4oKmVsZW1lbnQpLnRhcmdldFBhdGhD
aGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggYmZhOTE3MmU4
OTFjYzY0MzA4ZjM0NjI0ZTc0ZTVlZTliM2E3YTMyOC4uOTQwNTBkYjkzYWFlZmVmYzI5NGM0NzRi
NjFkZWI0ZDFmNmEzZWRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAt
NzksNyArNzksNyBAQCBpbmxpbmUgU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKTsKICAgICByZWdpc3RlckFuaW1hdGVkUHJvcGVydGll
c0ZvclNWR1NWR0VsZW1lbnQoKTsKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9CiAKIFJlZjxTVkdTVkdFbGVtZW50PiBTVkdT
VkdFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQm
IGRvY3VtZW50KQpAQCAtOTYsMTQgKzk2LDE0IEBAIFNWR1NWR0VsZW1lbnQ6On5TVkdTVkdFbGVt
ZW50KCkKIHsKICAgICBpZiAobV92aWV3U3BlYykKICAgICAgICAgbV92aWV3U3BlYy0+cmVzZXRD
b250ZXh0RWxlbWVudCgpOwotICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKHRoaXMpOworICAgIGRvY3VtZW50KCkudW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CisgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcigqdGhpcyk7CiB9CiAKIHZv
aWQgU1ZHU1ZHRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERvY3Vt
ZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCiB7Ci0gICAgb2xkRG9jdW1lbnQudW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVudCgpLnJl
Z2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgIG9sZERvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAg
IGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMp
OwogICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQob2xkRG9jdW1l
bnQsIG5ld0RvY3VtZW50KTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBAIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBTVkdTVkdFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiBzdHlsCiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NWR0VsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIGlmIChy
b290UGFyZW50LmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuYWRkVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkVGltZUNvbnRhaW5lcigqdGhpcyk7CiAgICAgICAgIGlm
ICghZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYXJlQW5pbWF0aW9uc1BhdXNlZCgp
KQogICAgICAgICAgICAgdW5wYXVzZUFuaW1hdGlvbnMoKTsKIApAQCAtNDg2LDcgKzQ4Niw3IEBA
IE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU1ZHRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiB7CiAgICAgaWYgKHJvb3RQYXJlbnQuaXNDb25u
ZWN0ZWQoKSkgewotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1v
dmVUaW1lQ29udGFpbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKCp0aGlzKTsKICAgICAgICAgcGF1c2VBbmltYXRp
b25zKCk7CiAgICAgfQogICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVtb3ZlZEZyb20ocm9vdFBh
cmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAppbmRleCBiMDgzNzM2MTUx
MzcwNjgzMDFhZTBmZGViN2U5YzlhOTkwOWYyYTQxLi42ZjlkNmUzZmMxZjEyM2ZkZmY3MWRlYTVk
ZjhiZWE0MmYxYWIxMmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKQEAg
LTE3Miw3ICsxNzIsNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50OjpkZXRhY2hUYXJnZXQoKQogICAg
IFN0cmluZyBpZDsKICAgICBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3Ry
aW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNl
KGlkLCB0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRk
UGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiB9CiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6YnVpbGRQ
ZW5kaW5nUmVzb3VyY2UoKQogICAgICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBl
bmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICBBU1NFUlQo
aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKaW5kZXggNzUxN2U4YjhhNjAxMGU2YWE2
ZDdlNDQzNzg5ZDg5ZmY4NDY4ZGI0MS4uODA2YWU4NzY1ODlmMzdmZDkzYzMxM2M5ZTI4YjBjNjY5
NzUyMzAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5oIgogI2luY2x1ZGUg
IlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVk
ZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTY2LDcgKzY3LDcgQEAgU1ZHVGV4dFBhdGhFbGVt
ZW50Ojp+U1ZHVGV4dFBhdGhFbGVtZW50KCkKIAogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmNs
ZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2Vz
Rm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIGJvb2wgU1ZHVGV4dFBhdGhFbGVtZW50Ojppc1N1cHBv
cnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE1OSwxNyAr
MTYwLDE3IEBAIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgp
CiAgICAgRWxlbWVudCogdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJv
bUlSSVN0cmluZyhocmVmKCksIGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsK
ICAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2UgYXJlIGFscmVhZHkg
cGVuZGluZyB0aGlzIHJlc291cmNlLgotICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UodGhpcywgaWQpKQorICAgICAgICBpZiAoZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UoKnRoaXMsIGlk
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jl
c291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJU
KGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHRhcmdl
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cGF0aFRhZykpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIg
dXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9m
IGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGlu
ZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhp
cywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7CisgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgZG93
bmNhc3Q8U1ZHUGF0aEVsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCAzM2MyOGYyNTYzODQxN2M1YWY4ZDM1MjE1YzJjMmM2
YTJiNjdiMmUyLi43OWMwMzUxMzAzNGRjZTU1ODAzOGNiNTg3ZTlmMjBiZWNhMjdmMmE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBT
VkdVc2VFbGVtZW50Ojp1cGRhdGVTaGFkb3dUcmVlKCkKICAgICBTdHJpbmcgdGFyZ2V0SUQ7CiAg
ICAgYXV0byogdGFyZ2V0ID0gZmluZFRhcmdldCgmdGFyZ2V0SUQpOwogICAgIGlmICghdGFyZ2V0
KSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZSh0YXJnZXRJRCwgdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJnZXRJRCwgKnRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuY3BwCmluZGV4IDg2MmQ2OGFiNGQ1MjcwMzhhNDdjMzUyMTc5NTNhODlhODUzYTc4
ZjQuLjZlODU4M2JiYTRjYmMzYjMwZmNjODYxM2RjZDIzNWQ3YjI1NTI2NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCkBAIC0xNTcsNyAr
MTU3LDcgQEAgU1ZHU01JTEVsZW1lbnQ6On5TVkdTTUlMRWxlbWVudCgpCiAKIHZvaWQgU1ZHU01J
TEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsKLSAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0
aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJn
ZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6
OmNsZWFyVGFyZ2V0KCkKQEAgLTE5MiwxNyArMTkyLDE3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKIAogICAgIGlmICghc3ZnVGFyZ2V0KSB7CiAgICAgICAg
IC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcg
dGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0aGlzLCBpZCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShp
ZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5k
aW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmVn
aXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hh
bmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVw
YWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJn
ZXQodGhpcywgc3ZnVGFyZ2V0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KCp0aGlzLCAqc3ZnVGFyZ2V0KTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBlZTJmOTFmMTRk
ZTYwM2JmODY5NTVkYzU5N2QwNWQ2MTRmNGMzOTg0Li4zZWI2N2M5MDg5MTliNmEyODM4MjllMmNh
OTYzODQ1ZmFlYTQ0MjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0x
Mzc0LDcgKzEzNzQsNyBAQCBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50ZXJuYWxzOjptYXJrZXJD
b3VudEZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgp
LT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7Ci0gICAgcmV0dXJuIG5v
ZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigmbm9kZSwgbWFya2VyVHlwZXMpLnNp
emUoKTsKKyAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5v
ZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBJbnRlcm5hbHM6Om1hcmtlckF0KE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYg
bWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgpCkBAIC0xMzg3LDcgKzEzODcsNyBAQCBFeGNlcHRp
b25PcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlJiBu
b2RlLCBjb25zdCBTdHJpbgogCiAgICAgbm9kZS5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigp
LnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKIAotICAgIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcigmbm9kZSwgbWFya2VyVHlwZXMpOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFy
a2VyKj4gbWFya2VycyA9IG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2Rl
LCBtYXJrZXJUeXBlcyk7CiAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpIDw9IGluZGV4KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbWFya2Vyc1tpbmRleF07CkBAIC0xNDQzLDcg
KzE0NDMsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6ZHVtcE1hcmtlclJlY3Rz
KGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZVN0cmluZykKIHZvaWQgSW50ZXJuYWxzOjphZGRUZXh0
TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGlzQWN0aXZlKQogewogICAgIHJh
bmdlLm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKLSAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZFRleHRNYXRjaE1hcmtl
cigmcmFuZ2UsIGlzQWN0aXZlKTsKKyAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2Vycygp
LmFkZFRleHRNYXRjaE1hcmtlcihyYW5nZSwgaXNBY3RpdmUpOwogfQogCiBFeGNlcHRpb25Pcjx2
b2lkPiBJbnRlcm5hbHM6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBm
bGFnKQpAQCAtMjYzNSw0MiArMjYzNSw2IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRUb3BDb250ZW50
SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQogICAgIGRvY3VtZW50LT5wYWdlKCktPnNldFRvcENv
bnRlbnRJbnNldChjb250ZW50SW5zZXQpOwogfQogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotCi12b2lkIEludGVybmFsczo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1l
bnQtPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQot
dm9pZCBJbnRlcm5hbHM6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndl
YmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi12b2lkIElu
dGVybmFsczo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwotICAg
IGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+d2Via2l0V2ls
bEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0KLXZvaWQgSW50ZXJuYWxz
Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndlYmtpdERpZEV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0KLSNlbmRpZgotCiB2b2lkIEludGVybmFs
czo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGVjMmYyMmI4Zjc2OWMxZjUzYjVmMTcyMGViNTBl
MWZjNTJiNjczNWIuLjNkYWI5MjdlM2YzYTVhNDlhMDFlNjU4NjZjYTU3NWU4MjdlMmIxYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMzU3LDEzICszNTcsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9hdCk7CiAKLSNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCi0gICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50Jik7Ci0gICAgdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQmKTsKLSAgICB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
RWxlbWVudCYpOwotICAgIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVs
ZW1lbnQmKTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQgdm9pZCBz
ZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nKTsKIAogICAg
IHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeShj
b25zdCBTdHJpbmcmIHNjaGVtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5k
ZXggODlkMTRkNzFjMzFiNDFjYTc1ODVhMDk0MDQ5MmY5M2M4NGQ2NTFlZi4uM2M5YzA5OGQ3MDY2
YWU2NGVlODg2MDM4MjhlZGI5ZWMwMDBjZGM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbApAQCAtMzMyLDExICszMzIsNiBAQCBlbnVtIEV2ZW50VGhyb3R0bGluZ0JlaGF2aW9y
IHsKIAogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KHVucmVzdHJpY3RlZCBmbG9hdCBjb250
ZW50SW5zZXQpOwogCi0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lkIHdlYmtp
dFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0Nv
bmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9B
UEldIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1l
bnQpOwotICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXREaWRFeGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLQogICAgIHZvaWQgc2V0QXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CiAKICAg
ICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
RE9NU3RyaW5nIHNjaGVtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKaW5kZXggZGMyMjgw
NGRkZTFlNzJkMDk1YmRmOTFhODFmN2UzMDg4YTE4NDhkMC4uYzk3YmM2YjQ2ZmJjNGVhNzkzY2E3
MDNmMTZiYTQxNjhlNDg1YTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcApAQCAtOTEs
NyArOTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8V29ya2VyPj4gV29ya2VyOjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSlNDOjpSdQogICAgIHdvcmtlci0+bV9zaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBzaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3k7CiAKICAgICAvLyBUaGUgd29ya2VyIGNvbnRleHQgZG9l
cyBub3QgZXhpc3Qgd2hpbGUgbG9hZGluZywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgd29y
a2VyIG9iamVjdCBpcyBub3QgY29sbGVjdGVkLCBub3IgYXJlIGl0cyBldmVudCBsaXN0ZW5lcnMu
Ci0gICAgd29ya2VyLT5zZXRQZW5kaW5nQWN0aXZpdHkod29ya2VyLnB0cigpKTsKKyAgICB3b3Jr
ZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIuZ2V0KCkpOwogCiAgICAgLy8gaHR0cHM6Ly9o
dG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd29ya2Vycy5odG1sI29mZmljaWFsLW1vbWVu
dC1vZi1jcmVhdGlvbgogICAgIHdvcmtlci0+bV93b3JrZXJDcmVhdGlvblRpbWUgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIFdvcmtlcjo6bm90aWZ5Rmlu
aXNoZWQoKQogICAgIH0KICAgICBtX3NjcmlwdExvYWRlciA9IG51bGxwdHI7CiAKLSAgICB1bnNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCmluZGV4IGQ5MzJkYzEyY2UxNDQ0YTIxNGY5MTNlZjY2MjJhZmJkMmE0ZGRlN2IuLjg0
ZDk3OGMxMjcwNzA5NWExM2U5YWM2NjlhYzI5NzJlMGQ3YjdjZjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTkwLDkgKzE5MCw5IEBAIEV4Y2VwdGlvbk9yPERvY3Vt
ZW50Kj4gWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKCkKICAgICAgICAgICAgIG1fcmVzcG9u
c2VEb2N1bWVudCA9IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
aXNIVE1MKQotICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IEhUTUxEb2N1bWVu
dDo6Y3JlYXRlKDAsIG1fdXJsKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQg
PSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZShudWxscHRyLCBtX3VybCk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gWE1MRG9jdW1lbnQ6OmNyZWF0
ZSgwLCBtX3VybCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gWE1MRG9j
dW1lbnQ6OmNyZWF0ZShudWxscHRyLCBtX3VybCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0
IExhc3QtTW9kaWZpZWQuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQtPnNldENvbnRl
bnQobV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCkpOwogICAgICAg
ICAgICAgbV9yZXNwb25zZURvY3VtZW50LT5zZXRDb250ZXh0RG9jdW1lbnQoZG93bmNhc3Q8RG9j
dW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKTsKQEAgLTQ4OSw3ICs0ODksNyBAQCBz
dGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbk9yPHZvaWQ+PiBYTUxIdHRwUmVxdWVzdDo6cHJlcGFyZVRv
U2VuZCgpCiAgICAgaWYgKCFjb250ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1
cml0eVBvbGljeSgpICYmICFjb250ZXh0LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0Nv
bm5lY3RUb1NvdXJjZShtX3VybCkpIHsKICAgICAgICAgaWYgKCFtX2FzeW5jKQogICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsgTmV0d29ya0Vycm9yIH0g
fTsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICBzZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5zdG9wKCk7CiAgICAgICAg
IG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAgICAgICAgIHJldHVybiBF
eGNlcHRpb25Pcjx2b2lkPiB7IH07CkBAIC03NTgsNyArNzU4LDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoKQogICAgICAgICAvLyBhIHJlcXVlc3Qg
aXMgaW4gcHJvZ3Jlc3MgYmVjYXVzZSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3RlbmVycyBhbGl2
ZSwKICAgICAgICAgLy8gYW5kIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIEphdmFTY3JpcHQg
d3JhcHBlci4KICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAg
ICB9IGVsc2UgewogICAgICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hlUGFydGl0aW9uKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dG9wT3JpZ2luKCkuZG9tYWluRm9yQ2FjaGVQYXJ0aXRp
b24oKSk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5j
aHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CkBAIC04OTAsNyArODkwLDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUKICAgICB2bS5oZWFwLmRlcHJlY2F0
ZWRSZXBvcnRFeHRyYU1lbW9yeShtX3Jlc3BvbnNlQnVpbGRlci5sZW5ndGgoKSAqIDIpOwogCi0g
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVN
aW1lVHlwZShjb25zdCBTdHJpbmcmIG92ZXJyaWRlKQpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAg
ICAvLyBJbiBjYXNlIGRpZEZhaWwgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgb24gYW4gYXN5bmNo
cm9ub3VzIFhIUiBjYWxsLCBsZXQncyBkaXNwYXRjaCBuZXR3b3JrIGVycm9yIGFzeW5jaHJvbm91
c2x5CiAgICAgaWYgKG1fYXN5bmMgJiYgbV9zZW5kRmxhZyAmJiAhbV9sb2FkZXIpIHsKICAgICAg
ICAgbV9zZW5kRmxhZyA9IGZhbHNlOwotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1fdGltZW91dFRp
bWVyLnN0b3AoKTsKICAgICAgICAgbV9uZXR3b3JrRXJyb3JUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRo
U3RlcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAppbmRleCA4YzkyN2Jm
ZjNlZWI2OTA4MWYwNDdiZjBmMjZlNmQ4ZWVlOTJjNWNkLi5mY2RjMDJjNTIxNGQzOTUwYmZiZDRj
Y2ZmNzNkMTg1YjI2NjU1NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhT
dGVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcApAQCAtMzAsNyAr
MzAsNiBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjAxLDcgKzIw
MCw3IEBAIGlubGluZSBib29sIG5vZGVNYXRjaGVzQmFzaWNUZXN0KE5vZGUmIG5vZGUsIFN0ZXA6
OkF4aXMgYXhpcywgY29uc3QgU3RlcDo6Tm9kZVRlCiAgICAgICAgICAgICBpZiAobmFtZSA9PSBz
dGFyQXRvbSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VVUkkuaXNFbXB0eSgp
IHx8IG5hbWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpOwogCi0gICAgICAgICAgICBp
ZiAoaXM8SFRNTERvY3VtZW50Pihub2RlLmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAo
bm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
aXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBhdGhzIHdp
dGhvdXQgbmFtZXNwYWNlcyBzaG91bGQgbWF0Y2ggSFRNTCBlbGVtZW50cyBpbiBIVE1MIGRvY3Vt
ZW50cyBkZXNwaXRlIHRob3NlIGhhdmluZyBhbiBYSFRNTCBuYW1lc3BhY2UuIE5hbWVzIGFyZSBj
b21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHkuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKS5sb2NhbE5h
bWUoKSwgbmFtZSkgJiYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBuYW1lc3BhY2VVUkkgPT0g
bm9kZS5uYW1lc3BhY2VVUkkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKaW5k
ZXggYTkwYjk2NTAwNGM0OGZiNDkwNGViN2ZjMmJlMWJjNjMzYTcyMDZhNS4uZWEwYWM0MDI1ODQ0
Y2IyMTRiNGVjZWQyMDllYWM5MzZiODI3MDAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yLmNwcApAQCAtMjEsMTEgKzIxLDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKIAogI2lmIEVOQUJMRShYU0xUKQogCi0jaW5jbHVk
ZSAiWFNMVFByb2Nlc3Nvci5oIgotCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0
eVBvbGljeS5oIgpAQCAtMzMsNyArMzIsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luUG9saWN5LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtODcsNyArODUsNyBAQCBS
ZWY8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZwogCiAgICAgICAgIGlmIChEb2N1bWVudCogb2xkRG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgewogICAgICAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2Zv
cm1Tb3VyY2VEb2N1bWVudChvbGREb2N1bWVudCk7Ci0gICAgICAgICAgICByZXN1bHQtPnRha2VE
T01XaW5kb3dGcm9tKG9sZERvY3VtZW50KTsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFrZURPTVdp
bmRvd0Zyb20oKm9sZERvY3VtZW50KTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U2VjdXJpdHlP
cmlnaW5Qb2xpY3kob2xkRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luUG9saWN5KCkpOwogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDb29raWVVUkwob2xkRG9jdW1lbnQtPmNvb2tpZVVSTCgpKTsKICAg
ICAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMob2xkRG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IDM2Njlj
MmRhOTg2MGIzYWVhNjAyYzhkYmY3ZDBmYmM5ODc3OThjZGMuLjVhYjI2MjBhNzgxMTE3NDc3MGQ3
MWI2MzU3ZDhkMmQ5MzkxYTllMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKQEAgLTEwOCw3
ICsxMDgsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpleGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCkKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFn
ZXI6OndpbGxFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAg
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxs
RW50ZXJGdWxsU2NyZWVuKCptX2VsZW1lbnQpOwogICAgIG1fcGFnZS0+aGlkZVBhZ2VCYW5uZXJz
KCk7CiAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwogICAgIG1fcGFn
ZS0+Zm9yY2VSZXBhaW50V2l0aG91dENhbGxiYWNrKCk7CkBAIC0xMTksMTQgKzExOSwxNCBAQCB2
b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRW50ZXJGdWxsU2NyZWVuKCkKIHZvaWQgV2Vi
RnVsbFNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1f
ZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViRnVsbFNjcmVlbk1h
bmFnZXI6OndpbGxFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAg
ICAgbV9maW5hbEZyYW1lID0gc2NyZWVuUmVjdE9mQ29udGVudHMobV9lbGVtZW50LmdldCgpKTsK
LSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRX
aWxsRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBtX3BhZ2UtPnNob3dQYWdlQmFubmVycygpOwogICAg
IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGdWxsU2NyZWVuQ2xpZW50KCkuYmVnYW5FeGl0RnVsbFNj
cmVlbihtX3BhZ2UuZ2V0KCksIG1fZmluYWxGcmFtZSwgbV9pbml0aWFsRnJhbWUpOwogfQpAQCAt
MTM0LDcgKzEzNCw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OndpbGxFeGl0RnVsbFNj
cmVlbigpCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbFNjcmVlbigpCiB7
CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtp
dERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogfQogCiB2b2lkIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyOjpzZXRBbmltYXRpbmdGdWxsU2NyZWVuKGJvb2wgYW5pbWF0aW5n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAppbmRl
eCBlOWZmMjRmODJkYzVkMTllNThjYTk2ZGMxNTQ2ZGRkYjM3YTQzZmEzLi45NDUwMTNkNjg4NzM5
N2UyZWJmNzFiMTk5YTk1ZDUyOWMzNTA1MTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6c3RhcnRVc2VyTWVkaWFSZXF1ZXN0KFVzZXJNZWRp
YVJlcXVlc3QmCiAKICAgICBhdXRvJiBwZW5kaW5nUmVxdWVzdHMgPSBtX2Jsb2NrZWRSZXF1ZXN0
cy5hZGQoZG9jdW1lbnQsIFZlY3RvcjxSZWZQdHI8VXNlck1lZGlhUmVxdWVzdD4+KCkpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICBpZiAocGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAg
ZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgcGVuZGluZ1JlcXVlc3Rz
LmFwcGVuZCgmcmVxdWVzdCk7CiB9CiAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6bWVkaWFDYW5TdGFydChEb2N1bWVudCYgZG9jdW1l
bnQpCiAgICAgd2hpbGUgKCFwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
ICghZG9jdW1lbnQucGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKICAgICAgICAgICAgIG1fYmxv
Y2tlZFJlcXVlc3RzLmFkZCgmZG9jdW1lbnQsIHBlbmRpbmdSZXF1ZXN0cyk7Ci0gICAgICAgICAg
ICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBk
b2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmVNZWRpYVJlcXVlc3RGcm9tTWFwcyhVc2VyTWVkaWFS
ZXF1CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAocGVuZGluZ1JlcXVlc3Rz
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlcXVlc3QuZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgcmVxdWVzdC5kb2N1bWVudCgpLT5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX2Jsb2NrZWRSZXF1ZXN0cy5hZGQocmVxdWVzdC5kb2N1bWVudCgpLCBwZW5kaW5nUmVx
dWVzdHMpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggZWVhMzhmMDk4MmM3ZWQ1MTEyNTgzMjc5YTI2ODkw
OTYwY2Q3ZTI3Yi4uOGNkZWMyMjE3ZmRhNThjYjZjMzg2NDVkZGRiZDVlYmQ3ZDhjZjI3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAg
LTMxNyw5ICszMTcsOSBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCiAgICAgQVNTRVJUKCFt
X2lzQmVpbmdEZXN0cm95ZWQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0
YXJ0KQotICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5T
dGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCku
cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAotICAgIG1fcGx1Z2luRWxlbWVu
dC0+ZG9jdW1lbnQoKS5yZW1vdmVBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIG1fcGx1Z2luRWxl
bWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIAogICAgIGRlc3Ry
b3lQbHVnaW5BbmRSZXNldCgpOwogCkBAIC01OTAsMTMgKzU5MCwxMyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmluaXRpYWxpemVQbHVnaW4oKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5h
ZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgbV9wbHVnaW5F
bGVtZW50LT5kb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLmFkZEF1ZGlvUHJvZHVjZXIodGhpcyk7Cisg
ICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwog
CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKICAgICBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50PigqbV9wbHVnaW5FbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0ZW5l
ci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktpdEZ1bGxT
Y3JlZW5MaXN0ZW5lci5tbQppbmRleCBhZjVhYzJmMjg5YmMxYjEyMDQ2NmM1OWMwMjc5MDZlYzE0
ODE2NWU3Li41MzdjYzY2ODA1ZDQ5YmUwZWQwZmI0MWY2MDkwNjM1ZTZiOTk1YWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2Ny
ZWVuTGlzdGVuZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tCkBAIC00NSwyNSArNDUsMjUgQEAgLSAoaWQp
aW5pdFdpdGhFbGVtZW50OihFbGVtZW50KillbGVtZW50CiAtICh2b2lkKXdlYmtpdFdpbGxFbnRl
ckZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1
bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgp
KTsKKyAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVl
bigqX2VsZW1lbnQpOwogfQogCiAtICh2b2lkKXdlYmtpdERpZEVudGVyRnVsbFNjcmVlbgogewog
ICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlk
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgICAgIF9lbGVt
ZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOwogfQogCiAtICh2b2lk
KXdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAg
X2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChf
ZWxlbWVudC5nZXQoKSk7CisgICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxF
eGl0RnVsbFNjcmVlbigpOwogfQogCiAtICh2b2lkKXdlYmtpdERpZEV4aXRGdWxsU2NyZWVuCiB7
CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICBfZWxl
bWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogfQogCiBAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5D
b250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5tbQppbmRleCBmZDhmYzU2OTk3YWZjYjZhZDdmOTBjNWZjOTk4NGJhMzE3
NjZlOTA3Li5jYzljYWM3Y2RjZTY5ZDgxZjMyMzNjZWJiMjgxNjk3ODcwZDM3OWI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIubW0KQEAgLTIzNiw3ICsyMzYsNyBAQCAtICh2b2lkKWVudGVyRnVsbFNjcmVl
bjooTlNTY3JlZW4gKilzY3JlZW4KIAogICAgIF9zYXZlZFNjYWxlID0gW193ZWJWaWV3IF92aWV3
U2NhbGVGYWN0b3JdOwogICAgIFtfd2ViVmlldyBfc2NhbGVXZWJWaWV3OjEgYXRPcmlnaW46TlNN
YWtlUG9pbnQoMCwgMCldOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRd
LT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKCpfZWxlbWVudCk7CiAgICAgW3NlbGYgX2RvY3Vt
ZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVlKTsKICAgICBbc2VsZiBfZG9jdW1lbnRd
LT51cGRhdGVMYXlvdXQoKTsKIApAQCAtMjU5LDcgKzI1OSw3IEBAIC0gKHZvaWQpZmluaXNoZWRF
bnRlckZ1bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCiAgICAgICAgIC8vIFNjcmVl
biB1cGRhdGVzIHRvIGJlIHJlLWVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGJsb2NrCiAgICAg
ICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKICAgICAgICAgW3NlbGYgX2RvY3VtZW50XS0+
c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgICAgIFtzZWxmIF9kb2N1bWVudF0t
PndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAg
ICAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKICAgICAg
ICAgCiAgICAgICAgIE5TUmVjdCB3aW5kb3dCb3VuZHMgPSBbW3NlbGYgd2luZG93XSBmcmFtZV07
CiAgICAgICAgIHdpbmRvd0JvdW5kcy5vcmlnaW4gPSBOU1plcm9Qb2ludDsKQEAgLTMwMyw3ICsz
MDMsNyBAQCAtICh2b2lkKWV4aXRGdWxsU2NyZWVuCiAKICAgICBfZmluYWxGcmFtZSA9IHNjcmVl
blJlY3RPZkNvbnRlbnRzKF9lbGVtZW50LmdldCgpKTsKIAotICAgIFtzZWxmIF9kb2N1bWVudF0t
PndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAg
IFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpOwogICAgIFtzZWxm
IF9kb2N1bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CiAKICAgICBpZiAoX2lz
RW50ZXJpbmdGdWxsU2NyZWVuKQpAQCAtMzQzLDcgKzM0Myw3IEBAIC0gKHZvaWQpZmluaXNoZWRF
eGl0RnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQKICAgICBOU0Rpc2FibGVTY3Jl
ZW5VcGRhdGVzKCk7CiAKICAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2Ny
ZWVuKGZhbHNlKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtp
dERpZEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgW193ZWJWaWV3IF9zY2FsZVdlYlZpZXc6X3NhdmVk
U2NhbGUgYXRPcmlnaW46TlNNYWtlUG9pbnQoMCwgMCldOwogCiAgICAgTlNSZXNwb25kZXIgKmZp
cnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319727</attachid>
            <date>2017-09-02 12:14:30 -0700</date>
            <delta_ts>2017-09-03 22:32:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170902121429.patch</filename>
            <type>text/plain</type>
            <size>261214</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZmOTQ0NzExNTZhMzY5
M2ZjYzJlM2M0YWQ5NGQ4NWE2MzM3NWIyZS4uNjdjMTBlZGY2YTI2YzM4NmY1OTA3MDdjNWI5MTk1
OTU1NTcyMzkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA4LTAxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMiAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S11bV2F5bGFuZF0gVXNlIGZhc3QgbWFsbG9jIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUgY2Fp
cm8gc3VyZmFjZXMgZGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3YWU5YTg5ZTU3OGM3NjkwMTVlYWFiYWRlNTdj
YjQ3ZjA1NTA5MTYyLi5iMmM4N2Y5ZDc2OTg1YWNmMDliMzJiMzViZjU2ZGM4NDE2OGJkMWJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBwb2ludGVy
cyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3JlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMiAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBzdHlsZSBpc3N1ZXMg
aW4gdGhlIFdlYiBQcm9jZXNzIHBhcnQgb2YgdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAzMzJkOTk5MjVhODdmOTcxZjg1MTk1MjE2ZWQx
ZTdlYTU5ZWQxNjI3Li5kYjc4ODMwODA3NjQ3ZWVkZDE5YWExNjdkNWIzMjY3NTY4NjE2NGU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMTctMDgtMDEg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSByZWZlcmVuY2Vz
IHJhdGhlciB0aGFuIHBvaW50ZXJzIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywg
YW5kIG1vcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTAyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDE3LTA5
LTAxICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ0ddIFVwc3Ry
ZWFtIENvcmVHcmFwaGljcy1yZWxhdGVkIFdlYktpdFN5c3RlbUludGVyZmFjZSBmdW5jdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNz
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9u
LmNwcAppbmRleCAzODVkOTRkOWI5MjQ5NzI4NTU1MmI5ZWU3ZTY2NGQ4MTY2MjFjZWI4Li43MjU3
MTNkNTQzZWJmNTNmYTAzN2VkZWYwNTgwZWQyYTllYzFkM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCkBAIC02OTksNyAr
Njk5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpiZWdpbigpCiAKICAg
ICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0K
QEAgLTgwNiw3ICs4MDYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNv
bXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRBdXRob3JpemF0aW9uUgogICAgIH0KIAogICAg
IG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgIHJldHVybiB7IH07
CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBib29sIEFwcGxlUGF5U2Vzc2lvbjo6aXNGaW5hbFN0
YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNzaW9uOjpkaWRSZWFjaEZpbmFsU3RhdGUoKQog
ewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCmluZGV4IDBmYjJk
ZjNjZjgxZWIzYmE4NTk5MDg2ZDg2YzFjNWZmYjBhN2FmNTQuLmIwYjlmNGM3MjFmMTZmNjM3ZDQw
MWY3Y2YwNGQ4YWMxMTdkYjQzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBGZXRjaEJvZHlP
d25lcjo6bG9hZEJsb2IoY29uc3QgQmxvYiYgYmxvYiwgRmV0Y2hCb2R5Q29uc3VtZXIqIGNvbnN1
bWVyKQogICAgICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmZpbmlzaEJsb2JMb2Fk
aW5nKCkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEZldGNoQm9keU93bmVyOjpmaW5pc2hCbG9i
TG9hZGluZygpCiAgICAgQVNTRVJUKG1fYmxvYkxvYWRlcik7CiAKICAgICBtX2Jsb2JMb2FkZXIg
PSBzdGQ6Om51bGxvcHQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5z
ZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEZldGNoQm9keU93bmVyOjpibG9i
TG9hZGluZ1N1Y2NlZWRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoQm9keVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0Zl
dGNoQm9keVNvdXJjZS5jcHAKaW5kZXggMmFhN2NiYTBlYzM4YmUyNTFhMmEwMmFkM2I3OTIwMGZh
MmNkM2IxNC4uZWZiNTBjMDMyNWYxMWVhN2VhZWQ0NjY1MWQ4YjZjZThlOTdkZTEwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5U291cmNlLmNwcApAQCAt
NDUsMTIgKzQ1LDEyIEBAIGJvb2wgRmV0Y2hCb2R5U291cmNlOjppc1JlYWRhYmxlU3RyZWFtTG9j
a2VkKCkgY29uc3QKIAogdm9pZCBGZXRjaEJvZHlTb3VyY2U6OnNldEFjdGl2ZSgpCiB7Ci0gICAg
bV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX2JvZHlPd25lcik7CisgICAgbV9ib2R5
T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93bmVyKTsKIH0KIAogdm9pZCBGZXRjaEJv
ZHlTb3VyY2U6OnNldEluYWN0aXZlKCkKIHsKLSAgICBtX2JvZHlPd25lci51bnNldFBlbmRpbmdB
Y3Rpdml0eSgmbV9ib2R5T3duZXIpOworICAgIG1fYm9keU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2
aXR5KG1fYm9keU93bmVyKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlTb3VyY2U6OmRvU3RhcnQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5jcHAKaW5kZXgg
Y2NlN2E4NzAxYzRmMTZjMDhjOTM1YWYzMDYzMDZiOTIwNDc5ZTFkYy4uYWRlZDZjODMyZDdhOWI4
ZTlkNGIzZDYyMzVmMmFjZGFiMzQxZDQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCkBAIC0xNzAsMTIgKzE3MCwxMiBAQCBGZXRjaFJlc3Bv
bnNlOjpCb2R5TG9hZGVyOjpCb2R5TG9hZGVyKEZldGNoUmVzcG9uc2UmIHJlc3BvbnNlLCBOb3Rp
ZmljYXRpb25DYWxsYgogICAgIDogbV9yZXNwb25zZShyZXNwb25zZSkKICAgICAsIG1fcmVzcG9u
c2VDYWxsYmFjayhXVEZNb3ZlKHJlc3BvbnNlQ2FsbGJhY2spKQogewotICAgIG1fcmVzcG9uc2Uu
c2V0UGVuZGluZ0FjdGl2aXR5KCZtX3Jlc3BvbnNlKTsKKyAgICBtX3Jlc3BvbnNlLnNldFBlbmRp
bmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogRmV0Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6
fkJvZHlMb2FkZXIoKQogewotICAgIG1fcmVzcG9uc2UudW5zZXRQZW5kaW5nQWN0aXZpdHkoJm1f
cmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2UudW5zZXRQZW5kaW5nQWN0aXZpdHkobV9yZXNwb25z
ZSk7CiB9CiAKIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291cmNlUmVzcG9uc2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCmluZGV4IGMy
Y2VmYzY5YjA4YWU4MGNhNGI1NzNjOWY5ZjNlMTVkZDI5NTEzMzYuLmIyZGZjZDg0NTUwNDdjYTdl
MjJhYmVlMzY2MjZkY2Y1MThlYTUzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCB2b2lk
IE1lZGlhU291cmNlOjpzZXRQcml2YXRlQW5kT3BlbihSZWY8TWVkaWFTb3VyY2VQcml2YXRlPiYm
IG1lZGlhU291cmNlUHJpdmF0ZQogCiB2b2lkIE1lZGlhU291cmNlOjphZGRlZFRvUmVnaXN0cnko
KQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogfQogCiB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkK
IHsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rp
dml0eSgqdGhpcyk7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVNvdXJjZTo6ZHVyYXRpb24oKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmNwcAppbmRleCA3NDNlY2RiNTk1MGU3MzlhMDc1ZGVhMjUzOGQ3MjU0MWZiMGUxMDhiLi5jODY0
YTA0NzFkMjY4YzZlZGUzZDc3ZjdkMmNlNWQ2NTM5MTU2NzdiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcApAQCAtMTIzLDcgKzEy
Myw3IEBAIE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0oKQogICAgICAgICB0cmFjay0+cmVtb3Zl
T2JzZXJ2ZXIoKnRoaXMpOwogICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1
bWVudCgpKSB7CiAgICAgICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKLSAg
ICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7Cisg
ICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsK
ICAgICB9CiB9CiAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIE1lZGlhU3RyZWFtOjpzdGFydFBy
b2R1Y2luZ0RhdGEoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIG1faXNXYWl0aW5n
VW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCmlu
ZGV4IDE2ODg0ZTM4MjY2ODRjZTc3ODdkNTg2YTg0Zjg4ZmRjNzkxYzI3ODkuLjhiMjQ1MjQ5Yjkz
NjZmMzg1YTM4NTk5ODA5MzFiMDcwMGUwMjYwNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcApAQCAtNjEsNyAr
NjEsNyBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIFJlZjxNZWRpYVN0cgogICAgIG1fcHJpdmF0ZS0+YWRkT2JzZXJ2
ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQot
ICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQtPmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogfQogCiBNZWRpYVN0cmVhbVRyYWNrOjp+TWVk
aWFTdHJlYW1UcmFjaygpCkBAIC02OSw3ICs2OSw3IEBAIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRp
YVN0cmVhbVRyYWNrKCkKICAgICBtX3ByaXZhdGUtPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIAog
ICAgIGlmIChhdXRvIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1l
bnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LT5yZW1vdmVB
dWRpb1Byb2R1Y2VyKCp0aGlzKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVN0cmVh
bVRyYWNrOjpraW5kKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5kZXggY2MwZTliNTRkMTA1MDg4YmZiNDYx
MzkyYjEwZjM5NjZkN2QzMjY5ZC4uNzQ5NTA5ZDJiMjIyYTAzMWNiYzY2YjE5MTIwYmRjZmRjZjMx
NmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENE
YXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgUmVmPFJUQ0RhdGFDaGFubmVsPiBS
VENEYXRhQ2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0
ZDoKICAgICBhdXRvIGNoYW5uZWwgPSBhZG9wdFJlZigqbmV3IFJUQ0RhdGFDaGFubmVsKGNvbnRl
eHQsIFdURk1vdmUoaGFuZGxlciksIFdURk1vdmUobGFiZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKSk7
CiAgICAgY2hhbm5lbC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgY2hhbm5lbC0+bV9oYW5kbGVy
LT5zZXRDbGllbnQoY2hhbm5lbC5nZXQoKSk7Ci0gICAgY2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2
aXR5KGNoYW5uZWwucHRyKCkpOworICAgIGNoYW5uZWwtPnNldFBlbmRpbmdBY3Rpdml0eShjaGFu
bmVsLmdldCgpKTsKICAgICByZXR1cm4gY2hhbm5lbDsKIH0KIApAQCAtMTU5LDcgKzE1OSw3IEBA
IHZvaWQgUlRDRGF0YUNoYW5uZWw6OmNsb3NlKCkKIAogICAgIG1faGFuZGxlci0+Y2xvc2UoKTsK
ICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMp
OworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBSVENEYXRhQ2hh
bm5lbDo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZShSVENEYXRhQ2hhbm5lbFN0YXRlIG5ld1N0YXRlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmNwcAppbmRleCA5MGIyMWVhNjIzYzE0N2U0NTkxMmI1OTgxNWJkY2ExZDdkZDcw
ZDg5Li42ZTJmYTg3MzYzNzZkNTgxYzQwOWYyODM5ZjYyODM4MTAyNDBjYTA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLmNwcApAQCAtNjIsMTIgKzYyLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBQZWVyQ29ubmVjdGlv
bjsKIAogUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgUmVmPFJUQ1BlZXJDb25uZWN0
aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29u
dGV4dCkpOworICAgIGF1dG8gcGVlckNvbm5lY3Rpb24gPSBhZG9wdFJlZigqbmV3IFJUQ1BlZXJD
b25uZWN0aW9uKGNvbnRleHQpKTsKICAgICBwZWVyQ29ubmVjdGlvbi0+c3VzcGVuZElmTmVlZGVk
KCk7CiAgICAgLy8gUlRDUGVlckNvbm5lY3Rpb24gbWF5IHNlbmQgZXZlbnRzIGF0IGFib3V0IGFu
eSB0aW1lIGR1cmluZyBpdHMgbGlmZXRpbWUuCiAgICAgLy8gTGV0J3MgbWFrZSBpdCB1bmNvbGxl
Y3RhYmxlIHVudGlsIHRoZSBwYyBpcyBjbG9zZWQgYnkgSlMgb3IgdGhlIHBhZ2Ugc3RvcHMgaXQu
CiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+aXNDbG9zZWQoKSkgewotICAgICAgICBwZWVyQ29u
bmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJDb25uZWN0aW9uLnB0cigpKTsKKyAgICAg
ICAgcGVlckNvbm5lY3Rpb24tPnNldFBlbmRpbmdBY3Rpdml0eShwZWVyQ29ubmVjdGlvbi5nZXQo
KSk7CiAKICAgICAgICAgLy8gSUNFIGNhbmRpZGF0ZSBmaWx0ZXJpbmcgY2FuIG9ubHkgYmUgZGlz
YWJsZWQgZm9yIGNvbm5lY3Rpb25zIGZyb20gZG9jdW1lbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBv
cmlnaW4gYXMgdGhlIHRvcCBkb2N1bWVudCwKICAgICAgICAgLy8gb3IgaWYgdGhlIHBhZ2Ugd2Fz
IHNldCB0byBkaXNhYmxlIGl0LgpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgUlRDUGVlckNvbm5l
Y3Rpb246OmRvU3RvcCgpCiAKICAgICBtX2JhY2tlbmQtPnN0b3AoKTsKIAotICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0K
IAogdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cmVnaXN0ZXJUb0NvbnRyb2xsZXIoUlRDQ29udHJv
bGxlciYgY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXggZjQzOTQzMThlYjFmZDdjZjA4N2Q5YjNj
YjA4YzcxYjlmOWJkNzkxMS4uNzJhZDNhYmNjMDY2NjU0MzI0NmNhODVhMzUzZTQwMjY1NjA1OTFm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlm
aWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05v
dGlmaWNhdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBOb3RpZmljYXRpb246OnNob3co
KQogICAgIH0KICAgICBpZiAoY2xpZW50LnNob3codGhpcykpIHsKICAgICAgICAgbV9zdGF0ZSA9
IFNob3dpbmc7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0
UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2
b2lkIE5vdGlmaWNhdGlvbjo6ZmluYWxpemUoKQogICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkK
ICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUgPSBDbG9zZWQ7Ci0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2
b2lkIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZlbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNw
cAppbmRleCAyN2U1NmM0YzZiOTQ3YWViODI0NTllZDEzZjMzYjU4MWEzZDNhMGE0Li4wNTViZmY1
ZjFlYmFhMWIyYmU1YTdjNDQwZWUwOWYzYjE3OGI5YzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNw
cApAQCAtOTksNyArOTksNyBAQCB2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQ
dWxsU3RhdHVzKCkKICAgICAgICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBp
cyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUsIGl0IHdpbGwgZ2V0IHB1bGxlZCBieSB0
aGUKICAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0aHVzIHJlbW92ZSBpdCBmcm9tIHRoZSBj
b250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KICAgICAgICAgaWYgKG1fbmVlZEF1dG9tYXRp
Y1B1bGwpIHsKLSAgICAgICAgICAgIGNvbnRleHQoKS5yZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0
aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5yZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhp
cyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQdWxsID0gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewpAQCAtMTA3LDExICsxMDcsMTEgQEAgdm9pZCBBdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCiAgICAgICAgIGlmIChudW1iZXJPZklucHV0Q29u
bmVjdGlvbnMgJiYgIW1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKICAgICAgICAgICAgIC8vIFdoZW4g
YW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgbm90IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0
cmVhbSBub2RlIHdoaWxlIHN0aWxsIGNvbm5lY3RlZCBmcm9tCiAgICAgICAgICAgICAvLyB1cHN0
cmVhbSBub2RlKHMpLCBhZGQgaXQgdG8gdGhlIGNvbnRleHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0
LgotICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOworICAg
ICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9tYXRpY1B1bGxOb2RlKCp0aGlzKTsKICAgICAgICAg
ICAgIG1fbmVlZEF1dG9tYXRpY1B1bGwgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKCFudW1i
ZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgbV9uZWVkQXV0b21hdGljUHVsbCkgewogICAgICAgICAg
ICAgLy8gVGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGNvbm5lY3RlZCB0byBub3RoaW5n
LCByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGF1dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAg
ICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAg
ICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoKnRoaXMpOwogICAgICAgICAg
ICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IGQ5
NTA0N2M5MDMwNTFjMGJjM2Q1ZTYzOGIyN2I0NTg1NDI0YjA1MzIuLjAxMmFlOGZmNjQ0MzhkYzYz
YzdiNGI3MzBkOWJhMjdjMjM0NjA5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEF1ZGlv
Q29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKIHsKICAgICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBB
dWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBwYWdlIG5hdmlnYXRlLgogICAgIC8vIExl
dHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1
bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAjaWYgVVNFKEdTVFJFQU1FUikKICAg
ICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPmluaXRp
YWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAgICAgIGRvY3Vt
ZW50KCktPnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJh
Y2tzKCp0aGlzKTsKIAogICAgICAgICAgICAgLy8gVGhpcyBzdGFydHMgdGhlIGF1ZGlvIHRocmVh
ZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRlSW5wdXQoKSBtZXRob2Qgd2lsbCBub3cg
YmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1ZGlvLgogICAgICAgICAgICAgLy8gRWFj
aCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwgYSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBz
dHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhpcyB0aW1lIHBlcmlvZCBhICJyZW5kZXIg
cXVhbnR1bSIuCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmNsZWFyKCkK
ICAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6ZSgpKTsKIAogICAgIC8vIEl0IHdhcyBz
ZXQgaW4gY29uc3RydWN0Q29tbW9uLgotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6
OnVuaW5pdGlhbGl6ZSgpCkBAIC0yNjMsOCArMjYzLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVu
aW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQgPSB0cnVlOwogCiAgICAg
aWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVk
aW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvclZpc2li
aWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnJl
bW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVy
Rm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAKICAgICAgICAgQVNT
RVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwogICAgICAgICAtLXNfaGFyZHdhcmVDb250ZXh0
Q291bnQ7CkBAIC04MjQsMTQgKzgyNCwxNCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGVm
ZXJyZWRGaW5pc2hEZXJlZnMoKQogICAgIG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIo
KTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqIG5v
ZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkK
IHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCiAgICAgaWYgKGlzQXVkaW9UaHJlYWRG
aW5pc2hlZCgpKQotICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKG5vZGUpOworICAgICAg
ICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsKICAgICBlbHNlCi0gICAgICAgIG1fbm9k
ZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXNNYXJrZWRG
b3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOwogCiAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB0aGUg
YmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5vZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBs
aXN0LAogICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0aW9ucyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0
aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpCkBAIC05Mjgs
MTkgKzkyOCwxOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRw
dXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCi12b2lkIEF1
ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBub2RlKQordm9pZCBB
dWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAg
ICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVz
LmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQo
Jm5vZGUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0
aW5nID0gdHJ1ZTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxO
b2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9Db250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQ
dWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsK
IAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUobm9kZSkpCisgICAgaWYgKG1f
YXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgmbm9kZSkpCiAgICAgICAgIG1fYXV0b21hdGljUHVs
bE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIApAQCAtOTk3LDcgKzk5Nyw3IEBAIGJvb2wg
QXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygpCiAgICAgaWYgKHBhZ2VDb25zZW50UmVx
dWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgewot
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwor
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZW1vdmVCZWhh
dmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9T
dGFydFJlc3RyaWN0aW9uKTsKQEAgLTEwMTcsNyArMTAxNyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0
Ojp3aWxsUGF1c2VQbGF5YmFjaygpCiAgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRp
b1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAg
ICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0
aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5o
CmluZGV4IDU3NzMxN2QyZTgyZGVkOWZhMDc4NTlkYjBlMDYwYTFhYTg5NWYzYWUuLjYzNDk3ZGFi
ZTExMzJiN2VjM2ZiMTIzYzFhNjMwNzQ3Y2FlN2M2MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApAQCAtMTUzLDEzICsxNTMsMTMgQEAgcHVi
bGljOgogICAgIHZvaWQgZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCk7CiAKICAgICAvLyBXZSBz
Y2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCBy
ZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05v
ZGUqKTsKKyAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUmKTsKICAgICB2b2lkIGRl
bGV0ZU1hcmtlZE5vZGVzKCk7CiAKICAgICAvLyBBdWRpb0NvbnRleHQgY2FuIHB1bGwgbm9kZShz
KSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gZXZlbiB3aGVuIHRoZXkgYXJlIG5v
dCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZXMuCiAgICAgLy8gVGhlc2UgdHdvIG1l
dGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hvIHdhbnQgdG8gYWRkL3JlbW92ZSB0aGVt
c2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1bGwgbGlzdHMuCi0gICAgdm9pZCBhZGRB
dXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKLSAgICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1
bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgYWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9O
b2RlJik7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKTsKIAog
ICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkgdG8gaGFu
ZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVkIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3Qg
Y29ubmVjdGVkIHRvIGFueXRoaW5nLgogICAgIHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2Rl
cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmNwcAppbmRleCBmMjAwYjA1MGU3MjYxMjdjYzFkNmY2YjVhNjM1ZjY3
YWYyYjRlNzc2Li4xYWM3N2FhMzdjMjY1MzdiM2UyZmYyMjM2MWFhNzI1MmQ1MDM1NWMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCkBAIC00Nzcs
NyArNDc3LDcgQEAgdm9pZCBBdWRpb05vZGU6OmZpbmlzaERlcmVmKFJlZlR5cGUgcmVmVHlwZSkK
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2ls
bCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KIAogICAgICAgICAgICAgICAgIC8v
IE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdoZW4g
Y29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAgICAgIGNvbnRleHQoKS5tYXJrRm9yRGVs
ZXRpb24odGhpcyk7CisgICAgICAgICAgICAgICAgY29udGV4dCgpLm1hcmtGb3JEZWxldGlvbigq
dGhpcyk7CiAgICAgICAgICAgICAgICAgbV9pc01hcmtlZEZvckRlbGV0aW9uID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZWZUeXBlID09IFJlZlR5cGVDb25uZWN0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cAppbmRleCA3MjNhMGI2YzhlMWU4ZmM4MmRkZGQ2MGRjNjgyYzA0ZDg0MWIwOWU5Li4zYjU3MGZk
MjlkNzYwZWUzOWU3ZjQ0NWFiODFiN2JkM2I0NmQwYTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMjgzLDggKzI4Myw4IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50Pihjb250ZXh0KTsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRv
Y3VtZW50LmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKS5t
aXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1cmVDb250ZW50KGRvY3VtZW50LnNlY3Vy
aXR5T3JpZ2luKCksIG1fdXJsKSkgewotICAgICAgICAgICAgLy8gQmFsYW5jZWQgYnkgdGhlIGNh
bGwgdG8gQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tl
dDo6c3RvcCgpLgotICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgICAgICAgICAvLyBCYWxhbmNlZCBieSB0aGUgY2FsbCB0byB1bnNldFBl
bmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3RvcCgpLgorICAgICAgICAgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgICAgICAgICAgLy8gV2UgbXVzdCBibG9jayB0aGlz
IGNvbm5lY3Rpb24uIEluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLCB3ZSBpbmRpY2F0
ZSB0aGlzCiAgICAgICAgICAgICAvLyB1c2luZyB0aGUgZXJyb3IgZXZlbnQuIEJ1dCBzaW5jZSB0
aGlzIGNvZGUgZXhlY3V0ZXMgYXMgcGFydCBvZiB0aGUgV2ViU29ja2V0J3MKQEAgLTMxNSw3ICsz
MTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcgogICAgICAgICBwcm90b2NvbFN0cmluZyA9
IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3VicHJvdG9jb2xTZXBhcmF0b3IoKSk7CiAKICAgICBt
X2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHByb3RvY29sU3RyaW5nKTsKLSAgICBBY3RpdmVET01P
YmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU0NCw3ICs1NDQsNyBAQCB2b2lkIFdl
YlNvY2tldDo6c3RvcCgpCiAgICAgbV9wZW5kaW5nRXZlbnRzLmNsZWFyKCk7CiAgICAgQWN0aXZl
RE9NT2JqZWN0OjpzdG9wKCk7CiAgICAgaWYgKHBlbmRpbmcpCi0gICAgICAgIEFjdGl2ZURPTU9i
amVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogY29uc3QgY2hhciogV2ViU29ja2V0OjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKQEAgLTYyOCw3ICs2MjgsNyBAQCB2b2lkIFdlYlNvY2tldDo6ZGlkQ2xv
c2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIENsb3NpbmdIYW5kc2hha2VDb21w
bAogICAgICAgICBtX2NoYW5uZWwgPSBudWxscHRyOwogICAgIH0KICAgICBpZiAoaGFzUGVuZGlu
Z0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9p
ZCBXZWJTb2NrZXQ6OmRpZFVwZ3JhZGVVUkwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYjRlOGQ5MmIyZDFhMTJjZDEyMDE2ZmJiMDIz
MmY4NGUxMDI0NTUxOS4uM2Y4MGFkNWI4M2E0MWM1ZWQ2NDdhMjYwNzVlYmJkZWE5ODZmYjI2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBA
IC0zNjYsNyArMzY2LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNl
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QKIHsKICAgICBKU0RPTVdp
bmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9i
YWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxl
TG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVs
ZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJu
IGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5yZXNvbHZlKGdsb2JhbE9iamVjdCwgZXhlYywgbW9k
dWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBpbXBvcnRlck1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7
CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAg
cmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNVbmRlZmluZWQoKSk7CiB9CkBAIC0zNzUs
NyArMzc1LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1
bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0KgogewogICAgIEpTRE9NV2luZG93QmFz
ZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIo
KS0+ZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgc2Ny
aXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCkuZmV0
Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0
Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpT
Qzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNVbmRlZmluZWQoKSk7CiB9CkBA
IC0zODQsNyArMzg0LDcgQEAgSlNDOjpKU1ZhbHVlIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9h
ZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKIHsKICAgICBKU0RPTVdp
bmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9i
YWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxl
TG9hZGVyKCktPmV2YWx1YXRlKGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1
bGVLZXksIG1vZHVsZVJlY29yZCwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+bW9kdWxlTG9hZGVyKCkuZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVM
b2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVyKTsKICAgICByZXR1
cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0zOTIsNyArMzkyLDcgQEAgSlNDOjpKU0lu
dGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUo
SlNDOjpKU0dsb2JhbE8KIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6
OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8
RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0g
ICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmltcG9ydE1vZHVsZShnbG9i
YWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwgc291cmNlT3JpZ2luKTsK
KyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5pbXBvcnRNb2R1bGUoZ2xv
YmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIHNvdXJjZU9yaWdpbik7
CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAg
cmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNVbmRlZmluZWQoKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggZTI3MDUzZmE1ZGZmYTJjZmM5ZjFkOTM0Y2Yz
Yzc1MjA2NWVkNTRiZS4uZjk1YTA2ZGJmZGU5M2IyOGUwYTU0ZDE1YjgyYzJjZTVjYWM2MzY2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaApAQCAtNzAsMTggKzcwLDE4IEBAIHB1
YmxpYzoKICAgICAvLyBJdCBjYW4sIGhvd2V2ZXIsIGhhdmUgYSBzaWRlIGVmZmVjdCBvZiBkZWxl
dGluZyBhbiBBY3RpdmVET01PYmplY3QuCiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAg
IHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgc2V0UGVuZGluZ0FjdGl2aXR5KFQqIHRoaXNPYmplY3Qp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhp
c09iamVjdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0ID09IHRoaXMpOwotICAg
ICAgICB0aGlzT2JqZWN0LT5yZWYoKTsKKyAgICAgICAgQVNTRVJUKCZ0aGlzT2JqZWN0ID09IHRo
aXMpOworICAgICAgICB0aGlzT2JqZWN0LnJlZigpOwogICAgICAgICArK21fcGVuZGluZ0FjdGl2
aXR5Q291bnQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCB1bnNldFBlbmRp
bmdBY3Rpdml0eShUKiB0aGlzT2JqZWN0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
dW5zZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVjdCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX3BlbmRpbmdBY3Rpdml0eUNvdW50ID4gMCk7CiAgICAgICAgIC0tbV9wZW5kaW5nQWN0aXZp
dHlDb3VudDsKLSAgICAgICAgdGhpc09iamVjdC0+ZGVyZWYoKTsKKyAgICAgICAgdGhpc09iamVj
dC5kZXJlZigpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggYWU1NmQ2OWQwZWQ0YzJlNjhiZTlkOTVmMDFiNGM3MDRj
NWYxNTFjMy4uMjI4OGUzMWJhZDkwZDJmMjRiY2MwMjFjZjk0ZmIxYjU0ZDYxZjA5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIENoYXJh
Y3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IGxlbmd0aCgpOwogCiAgICAgaWYgKG1fZGF0YSA9PSBub25OdWxsRGF0YSAmJiBjYW5V
c2VTZXREYXRhT3B0aW1pemF0aW9uKCp0aGlzKSkgewotICAgICAgICBkb2N1bWVudCgpLnRleHRS
ZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgICAgIGRvY3VtZW50KCkudGV4dFJlbW92
ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLmZyYW1lKCkp
CiAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnRleHRXYXNSZXBs
YWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgsIG9sZExlbmd0aCk7CiAgICAgICAgIHJldHVybjsKQEAg
LTYxLDcgKzYxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
ZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVyRGF0YT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKICAg
ICBzZXREYXRhQW5kVXBkYXRlKG5vbk51bGxEYXRhLCAwLCBvbGRMZW5ndGgsIG5vbk51bGxEYXRh
Lmxlbmd0aCgpKTsKLSAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0
aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgqdGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0K
IAogRXhjZXB0aW9uT3I8U3RyaW5nPiBDaGFyYWN0ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCkBAIC0xMjgsNyArMTI4LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0
IFN0cmluZyYgZGF0YSkKIAogICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLCBvZmZzZXQsIDAs
IGRhdGEubGVuZ3RoKCkpOwogCi0gICAgZG9jdW1lbnQoKS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zm
c2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCgqdGhpcywg
b2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNDUsNyAr
MTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdT
dHIsIG9mZnNldCwgY291bnQsIDApOwogCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlz
LCBvZmZzZXQsIGNvdW50KTsKKyAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKCp0aGlzLCBvZmZz
ZXQsIGNvdW50KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNjQsOCArMTY0LDggQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBjb3VudCwgY28KICAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0
LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9y
IHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNraW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0
UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRl
ZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOworICAgIGRvY3VtZW50KCkudGV4dFJlbW92
ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOworICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKCp0
aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCmluZGV4IDhlOTkzOTE4NGVlM2IwMjYyNjIwOGY3NGZkZDQ3NTBjNjNj
MDdjOTEuLjRhMTRjNWRmYTY4M2NmMDRhNWM4ZjQ1OTVmMmViZmZlNzQ2OTBjYjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcApAQCAtNjgxLDIyICs2ODEsMjAgQEAgRWxlbWVudCogRG9jdW1lbnQ6
OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSkKICAgICBpZiAoa2V5Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFtX2FjY2Vzc0tleU1h
cFZhbGlkKSB7Ci0gICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKHRoaXMpOworICAgICAgICBidWls
ZEFjY2Vzc0tleU1hcCgqdGhpcyk7CiAgICAgICAgIG1fYWNjZXNzS2V5TWFwVmFsaWQgPSB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gbV9lbGVtZW50c0J5QWNjZXNzS2V5LmdldChrZXkuaW1wbCgp
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlKiBzY29w
ZSkKK3ZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5TWFwKFRyZWVTY29wZSYgc2NvcGUpCiB7
Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50
c09mVHlwZTxFbGVtZW50PihzY29wZS0+cm9vdE5vZGUoKSkpIHsKLSAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oYWNjZXNza2V5QXR0cik7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFu
dHNPZlR5cGU8RWxlbWVudD4oc2NvcGUucm9vdE5vZGUoKSkpIHsKKyAgICAgICAgYXV0byYgYWNj
ZXNzS2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFjY2Vzc2tl
eUF0dHIpOwogICAgICAgICBpZiAoIWFjY2Vzc0tleS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBt
X2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vzc0tleS5pbXBsKCksICZlbGVtZW50KTsKLQot
ICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpKQotICAg
ICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAocm9vdCk7CisgICAgICAgIGlmIChhdXRvKiByb290
ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAgICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgq
cm9vdCk7CiAgICAgfQogfQogCkBAIC0xNTgxLDE0ICsxNTc5LDE0IEBAIHZvaWQgRG9jdW1lbnQ6
OnRpdGxlRWxlbWVudFRleHRDaGFuZ2VkKEVsZW1lbnQmIHRpdGxlRWxlbWVudCkKICAgICB1cGRh
dGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJG
b3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQq
IGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNp
YmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5
U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKCZjbGllbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1
bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hh
bmdlQ2xpZW50KiBjbGllbnQpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0
eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7
Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMucmVtb3ZlKGNsaWVudCk7Cisg
ICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMucmVtb3ZlKCZjbGllbnQpOwogfQog
CiB2b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkKQEAgLTM1OTUsMTUgKzM1
OTMsMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmlld3BvcnRVbml0c09uUmVzaXplKCkKICAg
ICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciog
YXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9k
dWNlciYgYXVkaW9Qcm9kdWNlcikKIHsKLSAgICBtX2F1ZGlvUHJvZHVjZXJzLmFkZChhdWRpb1By
b2R1Y2VyKTsKKyAgICBtX2F1ZGlvUHJvZHVjZXJzLmFkZCgmYXVkaW9Qcm9kdWNlcik7CiAgICAg
dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Q
cm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1Y2VyKQordm9pZCBEb2N1bWVudDo6cmVt
b3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBhdWRpb1Byb2R1Y2VyKQogewotICAgIG1f
YXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVjZXIpOworICAgIG1fYXVkaW9Qcm9kdWNl
cnMucmVtb3ZlKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwog
fQogCkBAIC0zNjk1LDI0ICszNjkzLDI0IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUZvY3VzZWRO
b2RlT2ZTdWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkpCiAgICAgfQog
fQogCi12b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBEb2N1bWVudDo6aG92ZXJlZEVsZW1lbnREaWREZXRhY2goRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBpZiAoIW1faG92ZXJlZEVsZW1lbnQgfHwgZWxlbWVudCAhPSBtX2hvdmVy
ZWRFbGVtZW50KQorICAgIGlmICghbV9ob3ZlcmVkRWxlbWVudCB8fCAmZWxlbWVudCAhPSBtX2hv
dmVyZWRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2hvdmVyZWRFbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIG1faG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50
LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobV9ob3ZlcmVkRWxlbWVudCAmJiAhbV9ob3Zl
cmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgbV9ob3ZlcmVkRWxlbWVudCA9IG1faG92
ZXJlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAoZnJhbWUoKSkKICAgICAgICAg
ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1bGVIb3ZlclN0YXRlVXBkYXRlKCk7CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKEVsZW1lbnQqIGVs
ZW1lbnQpCit2b2lkIERvY3VtZW50OjplbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9hY3RpdmVFbGVtZW50IHx8IGVsZW1lbnQgIT0g
bV9hY3RpdmVFbGVtZW50KQorICAgIGlmICghbV9hY3RpdmVFbGVtZW50IHx8ICZlbGVtZW50ICE9
IG1fYWN0aXZlRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hY3RpdmVFbGVtZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIG1fYWN0aXZlRWxlbWVudCA9IGVsZW1l
bnQucGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxlIChtX2FjdGl2ZUVsZW1lbnQgJiYgIW1fYWN0
aXZlRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgbV9hY3RpdmVFbGVtZW50ID0gbV9hY3Rp
dmVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiB9CkBAIC0zOTkwLDI2ICszOTg4LDI2IEBAIHZv
aWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25XaWxsQ2xlYXJJZE5hbWVNYXAoY29uc3QgSFRNTENvbGxl
Y3Rpb24mIGNvbGxlY3Rpb24pCiAgICAgbV9ub2RlTGlzdEFuZENvbGxlY3Rpb25Db3VudHNbSW52
YWxpZGF0ZU9uSWROYW1lQXR0ckNoYW5nZV0tLTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YXR0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2b2lkIERvY3VtZW50OjphdHRhY2hOb2Rl
SXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikKIHsKLSAgICBtX25vZGVJdGVyYXRvcnMu
YWRkKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMuYWRkKCZpdGVyYXRvcik7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5pKQordm9pZCBEb2N1
bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYgaXRlcmF0b3IpCiB7CiAgICAg
Ly8gVGhlIG5vZGUgaXRlcmF0b3IgY2FuIGJlIGRldGFjaGVkIHdpdGhvdXQgaGF2aW5nIGJlZW4g
YXR0YWNoZWQgaWYgaXRzIHJvb3Qgbm9kZSBkaWRuJ3QgaGF2ZSBhIGRvY3VtZW50CiAgICAgLy8g
d2hlbiB0aGUgaXRlcmF0b3Igd2FzIGNyZWF0ZWQsIGJ1dCBoYXMgaXQgbm93LgotICAgIG1fbm9k
ZUl0ZXJhdG9ycy5yZW1vdmUobmkpOworICAgIG1fbm9kZUl0ZXJhdG9ycy5yZW1vdmUoJml0ZXJh
dG9yKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50
KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsKICAgICBWZWN0b3I8Tm9kZUl0
ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKICAgICBjb3B5VG9WZWN0b3IobV9ub2RlSXRlcmF0b3Jz
LCBub2RlSXRlcmF0b3JzKTsKLSAgICBmb3IgKGF1dG8qIGl0IDogbm9kZUl0ZXJhdG9ycykgewot
ICAgICAgICBpZiAoJml0LT5yb290KCkgPT0gJm5vZGUpIHsKLSAgICAgICAgICAgIGRldGFjaE5v
ZGVJdGVyYXRvcihpdCk7Ci0gICAgICAgICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0
b3IoaXQpOworICAgIGZvciAoYXV0byogaXRlcmF0b3IgOiBub2RlSXRlcmF0b3JzKSB7CisgICAg
ICAgIGlmICgmaXRlcmF0b3ItPnJvb3QoKSA9PSAmbm9kZSkgeworICAgICAgICAgICAgZGV0YWNo
Tm9kZUl0ZXJhdG9yKCppdGVyYXRvcik7CisgICAgICAgICAgICBuZXdEb2N1bWVudC5hdHRhY2hO
b2RlSXRlcmF0b3IoKml0ZXJhdG9yKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQwNDksNyAr
NDA0Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFp
bmVyTm9kZSYgY29udGFpbmVyKQogCiAgICAgaWYgKG1fbWFya2Vycy0+aGFzTWFya2VycygpKSB7
CiAgICAgICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RD
aGlsZChjb250YWluZXIpOyB0ZXh0Tm9kZTsgdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKLSAgICAgICAgICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFy
a2Vycyh0ZXh0Tm9kZSk7CisgICAgICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMoKnRl
eHROb2RlKTsKICAgICB9CiB9CiAKQEAgLTQwNzcsNyArNDA3NSw3IEBAIHZvaWQgRG9jdW1lbnQ6
Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgaWYgKGlzPFRleHQ+
KG5vZGUpKQotICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMoJm5vZGUpOworICAgICAg
ICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMobm9kZSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBmYWxs
YmFja0ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZUFmdGVyUmVtb3ZhbChOb2RlJiBub2RlKQpA
QCAtNDA5Niw3ICs0MDk0LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlRm9jdXNOYXZpZ2F0aW9u
Tm9kZU9mU3VidHJlZShOb2RlJiBub2RlLCBib29sIGFtb25nQ2hpbGRyZW4KICAgICB9CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIW1fcmFuZ2Vz
LmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCkBAIC00
MTA3LDcgKzQxMDUsNyBAQCB2b2lkIERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1h
cmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0UmVt
b3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQg
RG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZv
ciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQxMTksMTAgKzQxMTcsMTAgQEAgdm9pZCBE
b2N1bWVudDo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0ICsgbGVu
Z3RoLCAwIC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRl
eHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHROb2Rlc01l
cmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgaWYgKCFtX3Jhbmdl
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZVdpdGhJbmRleCBvbGROb2RlV2l0aEluZGV4KG9s
ZE5vZGUpOworICAgICAgICBOb2RlV2l0aEluZGV4IG9sZE5vZGVXaXRoSW5kZXgoJm9sZE5vZGUp
OwogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCiAgICAgICAgICAgICByYW5n
ZS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRoSW5kZXgsIG9mZnNldCk7CiAgICAgfQpAQCAt
NDEzMCw3ICs0MTI4LDcgQEAgdm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRl
IG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nLgogfQogCi12b2lkIERv
Y3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpCit2b2lkIERvY3VtZW50Ojp0ZXh0
Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7CiAgICAgZm9yIChhdXRvKiByYW5nZSA6IG1fcmFu
Z2VzKQogICAgICAgICByYW5nZS0+dGV4dE5vZGVTcGxpdChvbGROb2RlKTsKQEAgLTQxNDksMTUg
KzQxNDcsMTUgQEAgdm9pZCBEb2N1bWVudDo6Y3JlYXRlRE9NV2luZG93KCkKICAgICBBU1NFUlQo
bV9kb21XaW5kb3ctPmZyYW1lKCkgPT0gbV9mcmFtZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRh
a2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnRha2VE
T01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7
CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0gICAgQVNTRVJUKGRvY3VtZW50LT5tX2RvbVdp
bmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1fZG9tV2luZG93KTsKICAgICAvLyBBIHZhbGlk
IERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVkRnJhbWUgZm9yIGl0cyBkb2N1bWVudHMuCiAg
ICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0gTm90SW5QYWdlQ2FjaGUpOwogCi0gICAgbV9k
b21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgbV9kb21XaW5k
b3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2luZG93KTsKICAgICBtX2RvbVdpbmRvdy0+ZGlk
U2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAogICAgIEFTU0VSVChtX2RvbVdpbmRvdy0+ZG9j
dW1lbnQoKSA9PSB0aGlzKTsKQEAgLTQ4MDcsMTQgKzQ4MDUsMTQgQEAgdm9pZCBEb2N1bWVudDo6
cmVzdW1lKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAg
bV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsK
LSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1f
ZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cy5hZGQoJmVsZW1lbnQpOwogfQogCi12
b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVs
ZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9kb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja0VsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKSAKQEAgLTQ4MjMsMTQgKzQ4MjEsMTQgQEAgdm9pZCBEb2N1bWVudDo6
bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgICAgICBlbGVtZW50LT5tZWRpYVZvbHVtZURpZENo
YW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJh
Y2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvck1lZGlhVm9sdW1lQ2Fs
bGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxl
bWVudHMuYWRkKGUpOworICAgIG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLmFkZCgmZWxl
bWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxi
YWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvck1lZGlhVm9sdW1l
Q2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNr
RWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fbWVkaWFWb2x1bWVDYWxsYmFja0VsZW1lbnRzLnJl
bW92ZSgmZWxlbWVudCk7CiB9CiAKIGJvb2wgRG9jdW1lbnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlKCkgY29uc3QKQEAgLTQ4NzIsMjkgKzQ4NzAsMjkgQEAgdm9pZCBEb2N1bWVu
dDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKQogICAgICAgICBlbGVtZW50LT5wcml2
YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3Rl
ckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9p
ZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZEVsZW1lbnRzLmFkZChlKTsKKyAgICBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1l
bnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQgRG9jdW1l
bnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1l
bnRzLnJlbW92ZShlKTsKKyAgICBtX3ByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRz
LnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKLXZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhF
bGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXND
aGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKHBhZ2UoKSkKICAg
ICAgICAgcGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLnNldEludGVyZXN0ZWRJ
bkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpOwogCi0gICAgbV9jYXB0aW9uUHJlZmVyZW5jZXND
aGFuZ2VkRWxlbWVudHMuYWRkKGUpOworICAgIG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVs
ZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JD
YXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3Vt
ZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRz
LnJlbW92ZShlKTsKKyAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5yZW1v
dmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkKCkKQEAgLTQ5MDcsMTQgKzQ5MDUsMTQgQEAgdm9pZCBEb2N1bWVudDo6Y2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZCgpCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogCi12
b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
SFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1lbnRzLmFkZChlbGVtZW50KTsKKyAg
ICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cy5hZGQoJmVsZW1lbnQpOwogfQogCi12
b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNr
cyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZv
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cy5yZW1vdmUoZWxlbWVu
dCk7CisgICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50
KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgp
CkBAIC01MDA5LDEwICs1MDA3LDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnBvcEN1cnJlbnRTY3JpcHQo
KQogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLXZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3Jt
KFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCit2b2lkIERvY3VtZW50OjphcHBseVhTTFRyYW5z
Zm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIGluc3RydWN0aW9uKQogewotICAgIFJlZlB0cjxY
U0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJvY2Vzc29yOjpjcmVhdGUoKTsKLSAgICBw
cm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoZG93bmNhc3Q8WFNMU3R5bGVTaGVldD4ocGktPnNo
ZWV0KCkpKTsKKyAgICBhdXRvIHByb2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOwor
ICAgIHByb2Nlc3Nvci0+c2V0WFNMU3R5bGVTaGVldChkb3duY2FzdDxYU0xTdHlsZVNoZWV0Pihp
bnN0cnVjdGlvbi5zaGVldCgpKSk7CiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0
cmluZyBuZXdTb3VyY2U7CiAgICAgU3RyaW5nIHJlc3VsdEVuY29kaW5nOwpAQCAtNTQ4NCwxNyAr
NTQ4MiwxNyBAQCB2b2lkIERvY3VtZW50OjpzdGF0ZVBvcHBlZChSZWY8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiYmIHN0YXRlT2JqZWN0KQogICAgICAgICBtX3BlbmRpbmdTdGF0ZU9iamVjdCA9IFdU
Rk1vdmUoc3RhdGVPYmplY3QpOwogfQogCi12b2lkIERvY3VtZW50OjphdHRhY2hSYW5nZShSYW5n
ZSogcmFuZ2UpCit2b2lkIERvY3VtZW50OjphdHRhY2hSYW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0g
ICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlucyhyYW5nZSkpOwotICAgIG1fcmFuZ2VzLmFkZChy
YW5nZSk7CisgICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlucygmcmFuZ2UpKTsKKyAgICBtX3Jh
bmdlcy5hZGQoJnJhbmdlKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2Uq
IHJhbmdlKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UmIHJhbmdlKQogewotICAg
IC8vIFdlIGRvbid0IEFTU0VSVCBtX3Jhbmdlcy5jb250YWlucyhyYW5nZSkgdG8gYWxsb3cgdXMg
dG8gY2FsbCB0aGlzCisgICAgLy8gV2UgZG9uJ3QgQVNTRVJUIG1fcmFuZ2VzLmNvbnRhaW5zKCZy
YW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCiAgICAgLy8gdW5jb25kaXRpb25hbGx5IHRv
IGZpeDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MDQ0Ci0gICAg
bV9yYW5nZXMucmVtb3ZlKHJhbmdlKTsKKyAgICBtX3Jhbmdlcy5yZW1vdmUoJnJhbmdlKTsKIH0K
IAogc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFz
Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQpAQCAtNTYzNCw3ICs1NjMyLDcgQEAgdm9pZCBEb2N1bWVudDo6c3VzcGVu
ZFNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbiByZWFz
b24KIAogICAgIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsK
ICAgICBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhyZWFzb24pOwotICAgIHNjcmlwdFJ1bm5lcigp
LT5zdXNwZW5kKCk7CisgICAgc2NyaXB0UnVubmVyKCkuc3VzcGVuZCgpOwogICAgIG1fcGVuZGlu
Z1Rhc2tzVGltZXIuc3RvcCgpOwogCiAgICAgLy8gRGVmZXJyaW5nIGxvYWRpbmcgYW5kIHN1c3Bl
bmRpbmcgcGFyc2VyIGlzIG5lY2Vzc2FyeSB3aGVuIHdlIG5lZWQgdG8gcHJldmVudCByZS1lbnRy
YW50IEphdmFTY3JpcHQgZXhlY3V0aW9uCkBAIC01NjU4LDcgKzU2NTYsNyBAQCB2b2lkIERvY3Vt
ZW50OjpyZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1c3Bl
bnNpb24gcmVhc29uKQogICAgICAgICBtX3BhcnNlci0+cmVzdW1lU2NoZWR1bGVkVGFza3MoKTsK
ICAgICBpZiAoIW1fcGVuZGluZ1Rhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgbV9wZW5kaW5nVGFz
a3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICBzY3JpcHRSdW5uZXIoKS0+cmVzdW1lKCk7
CisgICAgc2NyaXB0UnVubmVyKCkucmVzdW1lKCk7CiAgICAgcmVzdW1lQWN0aXZlRE9NT2JqZWN0
cyhyZWFzb24pOwogICAgIHJlc3VtZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNr
cygpOwogICAgIApAQCAtNTcxMSwxNiArNTcwOSwxNiBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRj
aFBvcHN0YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVj
dAogICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3RhdGVFdmVudDo6Y3JlYXRlKFdURk1vdmUo
c3RhdGVPYmplY3QpLCBtX2RvbVdpbmRvdyA/IG1fZG9tV2luZG93LT5oaXN0b3J5KCkgOiBudWxs
cHRyKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRp
YUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5T
dGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNT
RVJUKCFtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKTsKLSAgICBt
X21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKyAgICBBU1NFUlQoIW1fbWVk
aWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlzdGVuZXIpKTsKKyAgICBtX21lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcnMuYWRkKCZsaXN0ZW5lcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92
ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQor
dm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRM
aXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKG1fbWVkaWFDYW5TdGFydExpc3RlbmVy
cy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5yZW1v
dmUobGlzdGVuZXIpOworICAgIEFTU0VSVChtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29udGFp
bnMoJmxpc3RlbmVyKSk7CisgICAgbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLnJlbW92ZSgmbGlz
dGVuZXIpOwogfQogCiBNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIERvY3VtZW50Ojp0YWtlQW55TWVk
aWFDYW5TdGFydExpc3RlbmVyKCkKQEAgLTU3NDQsMTAgKzU3NDIsOSBAQCBEZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKSBj
b25zdAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogCi1ib29sIERvY3VtZW50OjpmdWxs
U2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBE
b2N1bWVudDo6ZnVsbFNjcmVlbklzQWxsb3dlZChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICByZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93bmVycyhh
bGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRhbGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVtZW50LT5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93
bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRhbGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVt
ZW50LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZXF1
ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNr
VHlwZSBjaGVja1R5cGUpCkBAIC01NzY2LDcgKzU3NjMsNyBAQCB2b2lkIERvY3VtZW50OjpyZXF1
ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNr
VHlwZQogCiAgICAgICAgIC8vIFRoZSBjb250ZXh0IG9iamVjdCdzIG5vZGUgZG9jdW1lbnQsIG9y
IGFuIGFuY2VzdG9yIGJyb3dzaW5nIGNvbnRleHQncyBkb2N1bWVudCBkb2VzIG5vdCBoYXZlCiAg
ICAgICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVuYWJsZWQgZmxhZyBzZXQuCi0gICAgICAgIGlmIChj
aGVja1R5cGUgPT0gRW5mb3JjZUlGcmFtZUFsbG93RnVsbFNjcmVlblJlcXVpcmVtZW50ICYmICFm
dWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgaWYgKGNoZWNr
VHlwZSA9PSBFbmZvcmNlSUZyYW1lQWxsb3dGdWxsU2NyZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxT
Y3JlZW5Jc0FsbG93ZWQoKmVsZW1lbnQpKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Ly8gVGhlIGNvbnRleHQgb2JqZWN0J3Mgbm9kZSBkb2N1bWVudCBmdWxsc2NyZWVuIGVsZW1lbnQg
c3RhY2sgaXMgbm90IGVtcHR5IGFuZCBpdHMgdG9wIGVsZW1lbnQKQEAgLTU4MzksOCArNTgzNiw4
IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBl
bGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAgICAgICAgICAgICAvLyBzdGFjaywgYW5kIHF1
ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBp
dHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgIC8vIHNldCB0byB0cnVlIG9uIHRoZSBk
b2N1bWVudC4KICAgICAgICAgICAgIGlmICghZm9sbG93aW5nRG9jKSB7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soZWxlbWVudCk7Ci0gICAg
ICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGN1cnJl
bnREb2MpOworICAgICAgICAgICAgICAgIGN1cnJlbnREb2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVu
dFN0YWNrKCplbGVtZW50KTsKKyAgICAgICAgICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVl
bkNoYW5nZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCkBAIC01ODUxLDggKzU4NDgsOCBAQCB2b2lkIERvY3VtZW50Ojpy
ZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNo
ZWNrVHlwZQogICAgICAgICAgICAgICAgIC8vIC4uLnB1c2ggZm9sbG93aW5nIGRvY3VtZW50J3Mg
YnJvd3NpbmcgY29udGV4dCBjb250YWluZXIgb24gZG9jdW1lbnQncyBmdWxsc2NyZWVuIGVsZW1l
bnQKICAgICAgICAgICAgICAgICAvLyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFu
IGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUK
ICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBvbiBkb2N1bWVudC4KLSAgICAgICAgICAg
ICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhmb2xsb3dpbmdEb2Mt
Pm93bmVyRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVl
bkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgICAgICAgICAgY3VycmVudERv
Yy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKmZvbGxvd2luZ0RvYy0+b3duZXJFbGVtZW50
KCkpOworICAgICAgICAgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRR
dWV1ZSgqY3VycmVudERvYyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKQEAgLTU5MTUsNyArNTkxMiw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxs
c2NyZWVuKCkKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNo
YW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50
LgogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkZXNjZW5kYW50cykgewogICAgICAgICBkb2N1
bWVudC0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7Ci0gICAgICAgIGFkZERvY3VtZW50
VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShkb2N1bWVudC5nZXQoKSk7CisgICAgICAgIGFk
ZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqZG9jdW1lbnQpOwogICAgIH0K
IAogICAgIC8vIDUuIFdoaWxlIGRvYyBpcyBub3QgbnVsbCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgpA
QCAtNTkzMiw3ICs1OTI5LDcgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4o
KQogCiAgICAgICAgIC8vIDIuIFF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1
bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUKICAg
ICAgICAgLy8gb24gZG9jLgotICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2
ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hh
bmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAKICAgICAgICAgLy8gMy4gSWYgZG9jJ3MgZnVs
bHNjcmVlbiBlbGVtZW50IHN0YWNrIGlzIGVtcHR5IGFuZCBkb2MncyBicm93c2luZyBjb250ZXh0
IGhhcyBhIGJyb3dzaW5nIGNvbnRleHQKICAgICAgICAgLy8gY29udGFpbmVyLCBzZXQgZG9jIHRv
IHRoYXQgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIncyBub2RlIGRvY3VtZW50LgpAQCAtNTk4
MiwxMyArNTk3OSwxMSBAQCBzdGF0aWMgdm9pZCB1bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIoUmVu
ZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVyLCBFbGVtZQogICAgICAgICBmdWxsU2Ny
ZWVuRWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNG
b3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxs
RW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFoYXNMaXZpbmdS
ZW5kZXJUcmVlKCkgfHwgcGFnZUNhY2hlU3RhdGUoKSAhPSBOb3RJblBhZ2VDYWNoZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgLy8gUHJvdGVjdCBhZ2Fp
bnN0IGJlaW5nIGNhbGxlZCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9t
IHRoZSBwYWdlLgogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CkBAIC01OTk3LDEz
ICs1OTkyLDEyIEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICB1bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIo
bV9mdWxsU2NyZWVuUmVuZGVyZXIsIG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOwogCi0gICAg
aWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPndpbGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVu
dCgpOworICAgIGVsZW1lbnQud2lsbEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCk7CiAgICAgCi0g
ICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVu
dCA9ICZlbGVtZW50OwogCiAjaWYgVVNFKE5BVElWRV9GVUxMU0NSRUVOX1ZJREVPKQotICAgIGlm
IChlbGVtZW50ICYmIGVsZW1lbnQtPmlzTWVkaWFFbGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQu
aXNNZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKQEAgLTYwMjYsNyAr
NjAyMCw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmVzb2x2ZVN0eWxlKFJlc29sdmVTdHlsZVR5cGU6
OlJlYnVpbGQpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KEVsZW1lbnQqKQordm9pZCBEb2N1bWVudDo6d2Via2l0RGlkRW50ZXJGdWxsU2Ny
ZWVuKCkKIHsKICAgICBpZiAoIW1fZnVsbFNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
QEAgLTYwMzksNyArNjAzMyw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCopCiAgICAgbV9mdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1l
ci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxF
eGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAg
ICByZXR1cm47CkBAIC02MDUwLDcgKzYwNDQsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxs
RXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQogICAgIG1fZnVsbFNjcmVlbkVsZW1l
bnQtPndpbGxTdG9wQmVpbmdGdWxsc2NyZWVuRWxlbWVudCgpOwogfQogCi12b2lkIERvY3VtZW50
Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCit2b2lkIERvY3Vt
ZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5F
bGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MTg4LDE5ICs2MTgyLDE4IEBAIHZvaWQgRG9j
dW1lbnQ6OnBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKQogICAgIG1fZnVsbFNjcmVlbkVsZW1l
bnRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVu
RWxlbWVudFN0YWNrKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjpwdXNoRnVsbHNj
cmVlbkVsZW1lbnRTdGFjayhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fZnVsbFNjcmVlbkVs
ZW1lbnRTdGFjay5hcHBlbmQoZWxlbWVudCk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNr
LmFwcGVuZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZERvY3VtZW50VG9GdWxs
U2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCogZG9jKQordm9pZCBEb2N1bWVudDo6YWRk
RG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZG9jKTsKLSAgICBOb2RlKiB0YXJnZXQgPSBkb2MtPndlYmtpdEZ1bGxz
Y3JlZW5FbGVtZW50KCk7CisgICAgTm9kZSogdGFyZ2V0ID0gZG9jdW1lbnQud2Via2l0RnVsbHNj
cmVlbkVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gZG9jLT53
ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsKKyAgICAgICAgdGFyZ2V0ID0gZG9jdW1l
bnQud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0g
ICAgICAgIHRhcmdldCA9IGRvYzsKKyAgICAgICAgdGFyZ2V0ID0gJmRvY3VtZW50OwogICAgIG1f
ZnVsbFNjcmVlbkNoYW5nZUV2ZW50VGFyZ2V0UXVldWUuYXBwZW5kKHRhcmdldCk7CiB9CiAKQEAg
LTY2NTgsNyArNjY1MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgIC8vIFdl
IGFyZSBjbGVhcmluZyB0aGUgOmFjdGl2ZSBjaGFpbiBiZWNhdXNlIHRoZSBtb3VzZSBoYXMgYmVl
biByZWxlYXNlZC4KICAgICAgICAgZm9yIChFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IG9sZEFj
dGl2ZUVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVt
ZW50LT5wYXJlbnRFbGVtZW50SW5Db21wb3NlZFRyZWUoKSkgewogICAgICAgICAgICAgY3VycmVu
dEVsZW1lbnQtPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVt
ZW50cy5zZXRJbkFjdGl2ZUNoYWluKGN1cnJlbnRFbGVtZW50LCBmYWxzZSk7CisgICAgICAgICAg
ICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2ZUNoYWluKCpjdXJyZW50RWxlbWVudCwg
ZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIG1fYWN0aXZlRWxlbWVudCA9IG51bGxwdHI7CiAg
ICAgfSBlbHNlIHsKQEAgLTY2NzAsNyArNjY2Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhv
dmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEVsZW1lbnQqIGlu
CiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGN1cnItPmVsZW1lbnQoKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgY3Vyci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbV91c2VyQWN0
aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbihlbGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2ZUNoYWluKCplbGVtZW50LCB0cnVl
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9hY3RpdmVFbGVtZW50ID0gbmV3QWN0
aXZlRWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNDM2NTdlMDcwYTIwY2IxMGM5MTVi
NjI5ZmNkM2ZmYTc3YWUzZDYxMy4uZGJhMzdmNThhMGQ2Y2NhMWMzMDgxOGQxYzY3NzBjZDhiYzY1
ZTVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcyNiw4ICs3MjYsOCBAQCBwdWJsaWM6CiAg
ICAgRWxlbWVudCogZm9jdXNOYXZpZ2F0aW9uU3RhcnRpbmdOb2RlKEZvY3VzRGlyZWN0aW9uKSBj
b25zdDsKIAogICAgIHZvaWQgcmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUoTm9kZSYsIGJvb2wg
YW1vbmdDaGlsZHJlbk9ubHkgPSBmYWxzZSk7Ci0gICAgdm9pZCBob3ZlcmVkRWxlbWVudERpZERl
dGFjaChFbGVtZW50Kik7Ci0gICAgdm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChF
bGVtZW50Kik7CisgICAgdm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Jik7Cisg
ICAgdm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Jik7CiAKICAgICB2
b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBFbGVtZW50
Kik7CiAKQEAgLTc1NCwxMiArNzU0LDEyIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgSW52YWxpZGF0aW9uRnVuY3Rpb24+CiAgICAgdm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RBbmRD
b2xsZWN0aW9uQ2FjaGVzKEludmFsaWRhdGlvbkZ1bmN0aW9uKTsKIAotICAgIHZvaWQgYXR0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOwotICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9y
KE5vZGVJdGVyYXRvciopOworICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRv
ciYpOworICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOwogICAgIHZv
aWQgbW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmLCBEb2N1bWVudCYpOwogCi0g
ICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSopOwotICAgIHZvaWQgZGV0YWNoUmFuZ2UoUmFuZ2Uq
KTsKKyAgICB2b2lkIGF0dGFjaFJhbmdlKFJhbmdlJik7CisgICAgdm9pZCBkZXRhY2hSYW5nZShS
YW5nZSYpOwogCiAgICAgdm9pZCB1cGRhdGVSYW5nZXNBZnRlckNoaWxkcmVuQ2hhbmdlZChDb250
YWluZXJOb2RlJik7CiAgICAgLy8gbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZCBpcyB1c2VkIHdo
ZW4gcmVtb3ZpbmcgYWxsIG5vZGUgY2hpbGRyZW4gYXQgb25jZS4KQEAgLTc3MCwxMyArNzcwLDEz
IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEFjY2VwdENoaWxkT3BlcmF0aW9uIHsgUmVwbGFj
ZSwgSW5zZXJ0T3JBZGQgfTsKICAgICBib29sIGNhbkFjY2VwdENoaWxkKGNvbnN0IE5vZGUmIG5l
d0NoaWxkLCBjb25zdCBOb2RlKiByZWZDaGlsZCwgQWNjZXB0Q2hpbGRPcGVyYXRpb24pIGNvbnN0
OwogCi0gICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHRSZW1vdmVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCB0ZXh0Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9k
ZSk7CisgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRSZW1vdmVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0Tm9kZXNNZXJnZWQoVGV4dCYgb2xkTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9k
ZSk7CiAKICAgICB2b2lkIGNyZWF0ZURPTVdpbmRvdygpOwotICAgIHZvaWQgdGFrZURPTVdpbmRv
d0Zyb20oRG9jdW1lbnQqKTsKKyAgICB2b2lkIHRha2VET01XaW5kb3dGcm9tKERvY3VtZW50Jik7
CiAKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZG9tV2luZG93
LmdldCgpOyB9CiAgICAgLy8gSW4gRE9NIExldmVsIDIsIHRoZSBEb2N1bWVudCdzIERPTVdpbmRv
dyBpcyBjYWxsZWQgdGhlIGRlZmF1bHRWaWV3LgpAQCAtODQ3LDcgKzg0Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHByb2Nlc3NSZWZlcnJlclBvbGljeShjb25zdCBTdHJpbmcmIHBvbGljeSk7CiAK
ICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVudCBpbiB0aGUgcGFyZW50IGRvY3VtZW50
LgotICAgIC8vIFJldHVybnMgMCBpZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisg
ICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRoaXMgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4K
ICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OwogCiAgICAg
Ly8gVXNlZCBieSBET00gYmluZGluZ3M7IG5vIGRpcmVjdGlvbiBrbm93bi4KQEAgLTk0MSwxNyAr
OTQxLDE3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCogcGFyZW50RG9jdW1lbnQoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudCYgdG9wRG9jdW1lbnQoKSBjb25zdDsKICAgICAK
LSAgICBTY3JpcHRSdW5uZXIqIHNjcmlwdFJ1bm5lcigpIHsgcmV0dXJuIG1fc2NyaXB0UnVubmVy
LmdldCgpOyB9Ci0gICAgU2NyaXB0TW9kdWxlTG9hZGVyKiBtb2R1bGVMb2FkZXIoKSB7IHJldHVy
biBtX21vZHVsZUxvYWRlci5nZXQoKTsgfQorICAgIFNjcmlwdFJ1bm5lciYgc2NyaXB0UnVubmVy
KCkgeyByZXR1cm4gKm1fc2NyaXB0UnVubmVyOyB9CisgICAgU2NyaXB0TW9kdWxlTG9hZGVyJiBt
b2R1bGVMb2FkZXIoKSB7IHJldHVybiAqbV9tb2R1bGVMb2FkZXI7IH0KIAogICAgIEhUTUxTY3Jp
cHRFbGVtZW50KiBjdXJyZW50U2NyaXB0KCkgY29uc3QgeyByZXR1cm4gIW1fY3VycmVudFNjcmlw
dFN0YWNrLmlzRW1wdHkoKSA/IG1fY3VycmVudFNjcmlwdFN0YWNrLmxhc3QoKS5nZXQoKSA6IG51
bGxwdHI7IH0KICAgICB2b2lkIHB1c2hDdXJyZW50U2NyaXB0KEhUTUxTY3JpcHRFbGVtZW50Kik7
CiAgICAgdm9pZCBwb3BDdXJyZW50U2NyaXB0KCk7CiAKICNpZiBFTkFCTEUoWFNMVCkKLSAgICB2
b2lkIGFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpOworICAgIHZv
aWQgYXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vzc2luZ0luc3RydWN0aW9uJik7CiAgICAgUmVmUHRy
PERvY3VtZW50PiB0cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpIHsgcmV0dXJuIG1fdHJhbnNmb3Jt
U291cmNlRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KERv
Y3VtZW50KiBkb2MpIHsgbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCA9IGRvYzsgfQorICAgIHZv
aWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KSB7IG1fdHJh
bnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2N1bWVudDsgfQogCiAgICAgdm9pZCBzZXRUcmFuc2Zv
cm1Tb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPFRyYW5zZm9ybVNvdXJjZT4pOwogICAgIFRyYW5zZm9y
bVNvdXJjZSogdHJhbnNmb3JtU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3Vy
Y2UuZ2V0KCk7IH0KQEAgLTk5MiwxNyArOTkyLDE1IEBAIHB1YmxpYzoKICAgICBQYWdlQ2FjaGVT
dGF0ZSBwYWdlQ2FjaGVTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUNhY2hlU3RhdGU7IH0K
ICAgICB2b2lkIHNldFBhZ2VDYWNoZVN0YXRlKFBhZ2VDYWNoZVN0YXRlKTsKIAotICAgIC8vIEVs
ZW1lbnRzIGNhbiByZWdpc3RlciB0aGVtc2VsdmVzIGZvciB0aGUgInN1c3BlbmQoKSIgYW5kCi0g
ICAgLy8gInJlc3VtZSgpIiBjYWxsYmFja3MKLSAgICB2b2lkIHJlZ2lzdGVyRm9yRG9jdW1lbnRT
dXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50Jik7CiAKICAgICB2b2lkIGRv
Y3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7CiAgICAgdm9pZCBzdXNwZW5kKEFjdGl2ZURPTU9i
amVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAgdm9pZCByZXN1bWUoQWN0aXZlRE9NT2Jq
ZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZv
bHVtZUNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1
bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNh
bGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxs
YmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKIAogICAg
IGJvb2wgYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSBjb25zdDsKQEAgLTEwMTIs
MjggKzEwMTAsMjggQEAgcHVibGljOgogICAgIE1lZGlhU2Vzc2lvbiYgZGVmYXVsdE1lZGlhU2Vz
c2lvbigpOwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3Rh
dGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVn
aXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOwor
ICAgIHZvaWQgdW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNr
cyhFbGVtZW50Jik7CiAgICAgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENoYW5nZSgpOwog
ICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKLSAgICB2b2lkIHJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvckNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5y
ZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYpOwog
ICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZvaWQgcmVnaXN0ZXJGb3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVn
aXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQq
KTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhI
VE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgdm9pZCBwYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgdm9pZCByZWdpc3RlckZvclVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENh
bGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgdm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uQ2hhbmdlZCgpOwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJp
bGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7Ci0gICAg
dm9pZCB1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmls
aXR5Q2hhbmdlQ2xpZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNo
YW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOworICAgIHZvaWQgdW5yZWdp
c3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNs
aWVudCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcmVnaXN0ZXJGb3JBbGxvd3NN
ZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1l
bnQmKTsKQEAgLTEwODQsOCArMTA4Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoUG9w
c3RhdGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0KTsK
ICAgICBEb2N1bWVudEV2ZW50UXVldWUmIGV2ZW50UXVldWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2V2ZW50UXVldWU7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVkaWFDYW5T
dGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciop
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYpOwogICAgIE1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lciogdGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpOwogCiAjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQpAQCAtMTEwMiwxNyArMTEwMCwxNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCosIEZ1bGxTY3JlZW5DaGVja1R5
cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOwog
ICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0RGlkRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50
Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVs
ZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVl
bigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogICAg
IAogICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRlcmVyKFJlbmRlckZ1bGxTY3JlZW4qKTsKICAg
ICBSZW5kZXJGdWxsU2NyZWVuKiBmdWxsU2NyZWVuUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X2Z1bGxTY3JlZW5SZW5kZXJlcjsgfQogICAgIHZvaWQgZnVsbFNjcmVlblJlbmRlcmVyRGVzdHJv
eWVkKCk7CiAgICAgCiAgICAgdm9pZCBmdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lckZpcmVkKCk7
Ci0gICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChFbGVtZW50KikgY29uc3Q7
CisgICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkKEVsZW1lbnQmKSBjb25zdDsKICAgICB2b2lk
IGZ1bGxTY3JlZW5FbGVtZW50UmVtb3ZlZCgpOwogICAgIHZvaWQgcmVtb3ZlRnVsbFNjcmVlbkVs
ZW1lbnRPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkgPSBmYWxzZSk7CiAg
ICAgYm9vbCBpc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKSBjb25zdDsKQEAgLTExMzksOCArMTEzNyw4
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikgJiYg
UExBVEZPUk0oSU9TKQotICAgIERldmljZU1vdGlvbkNvbnRyb2xsZXIqIGRldmljZU1vdGlvbkNv
bnRyb2xsZXIoKSBjb25zdDsKLSAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIGRldmlj
ZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0OworICAgIERldmljZU1vdGlvbkNvbnRyb2xs
ZXImIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKKyAgICBEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0OwogI2VuZGlm
CiAKICAgICBjb25zdCBEb2N1bWVudFRpbWluZyYgdGltaW5nKCkgY29uc3QgeyByZXR1cm4gbV9k
b2N1bWVudFRpbWluZzsgfQpAQCAtMTI3MSw4ICsxMjY5LDggQEAgcHVibGljOgogICAgIGJvb2wg
aGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU3R5bGVXaXRo
Vmlld3BvcnRVbml0czsgfQogICAgIHZvaWQgdXBkYXRlVmlld3BvcnRVbml0c09uUmVzaXplKCk7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNl
ciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVBy
b2R1Y2VyKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlh
UHJvZHVjZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIo
TWVkaWFQcm9kdWNlciYpOwogICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRp
YVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAgdm9pZCBub3RlVXNl
ckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwogICAgIGJvb2wgaXNDYXB0dXJpbmcoKSBj
b25zdCB7IHJldHVybiBNZWRpYVByb2R1Y2VyOjppc0NhcHR1cmluZyhtX21lZGlhU3RhdGUpOyB9
CkBAIC0xNDE3LDcgKzE0MTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVGl0bGUoY29u
c3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlQmFzZVVSTCgpOwogCi0g
ICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHJvb3QpOworICAgIHZvaWQgYnVp
bGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiByb290KTsKIAogICAgIHZvaWQgbG9hZEV2ZW50RGVs
YXlUaW1lckZpcmVkKCk7CiAKQEAgLTE0MzAsOCArMTQyOCw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+
PiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBib29sIHNob3VsZE5vdGlmeU1lZGlh
RWxlbWVudCk7CiAgICAgdm9pZCBjbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKICAgICB2
b2lkIHBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKLSAgICB2b2lkIHB1c2hGdWxsc2NyZWVu
RWxlbWVudFN0YWNrKEVsZW1lbnQqKTsKLSAgICB2b2lkIGFkZERvY3VtZW50VG9GdWxsU2NyZWVu
Q2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCopOworICAgIHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVt
ZW50U3RhY2soRWxlbWVudCYpOworICAgIHZvaWQgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFu
Z2VFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKaW5kZXggOTE0YzQ1YmU5MzQ3NTU1OWZlNmY3YzU5OTNlOGU3MGMxNWNm
MDhiOS4uOTk0YzNhZGQzMTNmYWVmMjUzYzk2MWFhYWY2ZTYwZTk0M2U2N2MwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTYyLDQ2
ICs2Miw0NiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZGV0YWNoKCkKICAgICBt
X3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsgfTsKIH0KIAotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCit2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKIHsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFy
a2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZy
YW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwotICAgICAg
ICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIo
dHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBk
ZXNjcmlwdGlvbikpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5l
cigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQ
aWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uKSk7CiAgICAgfQogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRN
YXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQogewot
ICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVu
ZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtl
ZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkp
IHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7
Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zm
c2V0KCkpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2Ut
PmVuZE9mZnNldCgpKSk7CiAgICAgfQogCiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9kZSwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUgdHlwZSkKIHsKICAgICBhZGRNYXJrZXIobm9kZSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgc3Rh
cnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwg
RG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1h
cmtlcjo6RGF0YSYmIGRhdGEpCiB7CiAgICAgYWRkTWFya2VyKG5vZGUsIERvY3VtZW50TWFya2Vy
KHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIGxlbmd0aCwgV1RGTW92ZShkYXRhKSkp
OwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2Vy
KGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmVNYXRjaCkKK3ZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29s
IGFjdGl2ZU1hdGNoKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2Up
OyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAo
VGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFy
a2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBt
YXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBp
ZWNlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGll
Y2UtPmVuZE9mZnNldCgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0
Y2gpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9j
dW1lbnRNYXJrZXIoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0Y2gpKTsKICAgICB9
CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBl
LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJw
cmV0YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkK
IHsKICAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQu
YXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0
ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXAKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlKiByYW5n
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucykKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2Vy
KFJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucykKIHsK
ICAgICBBU1NFUlQoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpOwogICAgIGlmIChpbnRlcnBy
ZXRhdGlvbnMuc2l6ZSgpIDw9IDEpCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIo
UmFuZ2UqIHIKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRE
aWN0YXRpb25SZXN1bHRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBt
ZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25SZXN1
bHRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsK
ICAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRF
bmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0
UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CkBAIC0xMzUsMjYgKzEzNSwyNiBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlKiBy
YW5nZSwgY29uc3QgUmV0YQogCiAjZW5kaWYKIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKFJlZlB0cjxSYW5nZT4gcmFuZ2UpCit2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmFuZ2UmIHJh
bmdlKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UuZ2V0KCkpOyAh
bWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewotICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKKyAgICBmb3IgKFRleHRJ
dGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRl
eHQuYWR2YW5jZSgpKSB7CisgICAgICAgIGF1dG8gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5n
ZSgpOwogICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhIGRyYWdnZWRD
b250ZW50RGF0YSB7IG1hcmtlZFRleHQubm9kZSgpIH07Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4
dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVu
dCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBXVEZN
b3ZlKGRyYWdnZWRDb250ZW50RGF0YSkgfSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Ut
PnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0
UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJh
Z2dlZENvbnRlbnREYXRhKSB9KTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlKiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcikKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtl
ZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtl
clR5cGVzKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKCFtX21hcmtlcnMu
aXNFbXB0eSgpKTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRl
eHQucmFuZ2UoKTsKKyAgICAgICAgYXV0byB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7
CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9mZnNldCgp
OwogICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldCgpOwot
ICAgICAgICByZW1vdmVNYXJrZXJzKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIHNob3VsZFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vycyh0ZXh0
UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9m
ZnNldCwgbWFya2VyVHlwZXMsIHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKICAgICB9CiB9CiAKQEAgLTMxOSwxMyArMzE5LDEzIEBAIHN0YXRpYyBib29sIHNob3VsZElu
c2VydEFzU2VwYXJhdGVNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikKIC8v
IE1hcmtlcnMgYXJlIHN0b3JlZCBpbiBvcmRlciBzb3J0ZWQgYnkgdGhlaXIgc3RhcnQgb2Zmc2V0
LgogLy8gTWFya2VycyBvZiB0aGUgc2FtZSB0eXBlIGRvIG5vdCBvdmVybGFwIGVhY2ggb3RoZXIu
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwg
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikgCit2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdN
YXJrZXIpCiB7CiAgICAgQVNTRVJUKG5ld01hcmtlci5lbmRPZmZzZXQoKSA+PSBuZXdNYXJrZXIu
c3RhcnRPZmZzZXQoKSk7CiAgICAgaWYgKG5ld01hcmtlci5lbmRPZmZzZXQoKSA9PSBuZXdNYXJr
ZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKSkgeworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG5vZGUu
cmVuZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogRmFjdG9yIHRoZSBtYXJrZXIgcGFpbnRp
bmcgY29kZSBvdXQgb2YgSW5saW5lVGV4dEJveCBhbmQgdGVhY2ggc2ltcGxlIGxpbmUgbGF5b3V0
IHRvIHVzZSBpdC4KICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikpCiAgICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLmVuc3VyZUxpbmVCb3hlcygp
OwpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRN
YXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAKICAgICBtX3Bv
c3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcyB8PSBuZXdNYXJrZXIudHlwZSgpOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBsaXN0ID0gbV9tYXJrZXJzLmFkZChub2RlLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBs
aXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgaWYgKCFsaXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtlckxp
c3Q+KCk7CkBAIC0zOTAsMTUgKzM5MCwxNSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAg
ICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcih0b0luc2VydCkpOwog
ICAgIH0KIAotICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBub2RlLT5yZW5kZXJl
cigpLT5yZXBhaW50KCk7CisgICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgbm9kZS5y
ZW5kZXJlcigpLT5yZXBhaW50KCk7CiAKLSAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5O
b2RlKCpub2RlKTsKKyAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwog
fQogCiAvLyBjb3BpZXMgbWFya2VycyBmcm9tIHNyY05vZGUgdG8gZHN0Tm9kZSwgYXBwbHlpbmcg
dGhlIHNwZWNpZmllZCBzaGlmdCBkZWx0YSB0byB0aGUgY29waWVzLiAgVGhlIHNoaWZ0IGlzCiAv
LyB1c2VmdWwgaWYsIGUuZy4sIHRoZSBjYWxsZXIgaGFzIGNyZWF0ZWQgdGhlIGRzdE5vZGUgZnJv
bSBhIG5vbi1wcmVmaXggc3Vic3RyaW5nIG9mIHRoZSBzcmNOb2RlLgotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2RlLCBpbnQgZGVsdGEpCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc3JjTm9kZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGludCBkZWx0YSkKIHsKICAg
ICBpZiAobGVuZ3RoIDw9IDApCiAgICAgICAgIHJldHVybjsKQEAgLTQwNyw3ICs0MDcsNyBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFy
a2Vycy5pc0VtcHR5KCkpOwogCi0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQo
c3JjTm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNyY05vZGUp
OwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MzMsMTEgKzQzMywxMSBA
QCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3JjTm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAgIGFkZE1hcmtlcihkc3ROb2RlLCBtYXJr
ZXIpOwogICAgIH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLT5yZW5kZXJlcigpKQot
ICAgICAgICBkc3ROb2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRvY0RpcnR5
ICYmIGRzdE5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgZHN0Tm9kZS5yZW5kZXJlcigpLT5yZXBh
aW50KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
KE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYg
bm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7
CiAgICAgaWYgKGxlbmd0aCA8PSAwKQogICAgICAgICByZXR1cm47CkBAIC00NDYsNyArNDQ2LDcg
QEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCgh
KG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtl
cnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2Rl
KTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDkzLDEzICs0OTMsMTMg
QEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICB9CiAKICAgICBpZiAobGlzdC0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fbWFya2Vycy5yZW1vdmUobm9kZSk7CisgICAgICAgIG1fbWFya2Vy
cy5yZW1vdmUoJm5vZGUpOwogICAgICAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzID0geyB9OwogICAgIH0KIAotICAg
IGlmIChkb2NEaXJ0eSAmJiBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBub2RlLT5yZW5kZXJl
cigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUucmVuZGVyZXIoKSkKKyAg
ICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9CiAKIERvY3VtZW50TWFya2VyKiBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCkBA
IC01MjMsMTMgKzUyMywxMyBAQCBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgTGF5b3V0UG9pbgogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6bWFya2Vyc0ZvcihOb2RlKiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSYgbm9kZSwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAg
ICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IHJlc3VsdDsKLSAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0KiBs
aXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogCkBAIC01NTMsNyArNTUzLDcgQEAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlJgog
CiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7CiAgICAgZm9y
IChOb2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBt
YXJrZXIgOiBtYXJrZXJzRm9yKG5vZGUpKSB7CisgICAgICAgIGZvciAoYXV0byogbWFya2VyIDog
bWFya2Vyc0Zvcigqbm9kZSkpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFp
bnMobWFya2VyLT50eXBlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0g
cmFuZ2Uuc3RhcnRPZmZzZXQoKSkKQEAgLTU2NiwxMyArNTY2LDEzIEBAIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5n
ZShSYW5nZSYKICAgICByZXR1cm4gZm91bmRNYXJrZXJzOwogfQogCi12b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFy
a2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vy
cy5pc0VtcHR5KCkpOwogICAgIAotICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBt
X21hcmtlcnMuZmluZChub2RlKTsKKyAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0g
bV9tYXJrZXJzLmZpbmQoJm5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5k
KCkpCiAgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMp
OwogfQpAQCAtNjYzLDEzICs2NjMsMTMgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnJlcGFpbnRNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHkKICAgICB9
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSog
bm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIGludCBkZWx0YSkKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6YWxsTWFya2VycygpKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJr
ZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChu
b2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAg
aWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCBpbgogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgaW50IHRhcmdldFN0
YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBkZWx0YTsKICAgICAgICAgaW50IHRh
cmdldEVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBpZiAo
dGFyZ2V0U3RhcnRPZmZzZXQgPj0gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0
RW5kT2Zmc2V0IDw9IDApIHsKKyAgICAgICAgaWYgKHRhcmdldFN0YXJ0T2Zmc2V0ID49IG5vZGUu
bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5kT2Zmc2V0IDw9IDApIHsKICAgICAgICAg
ICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBA
IC02OTksNyArNjk5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFy
a2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgICAg
ICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5v
ZGUtPm1heENoYXJhY3Rlck9mZnNldCgpID8gdGFyZ2V0RW5kT2Zmc2V0IDogbm9kZS0+bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkpOworICAgICAgICAgICAgbWFya2VyLnNldEVuZE9mZnNldCh0YXJnZXRF
bmRPZmZzZXQgPCBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpID8gdGFyZ2V0RW5kT2Zmc2V0IDog
bm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkaWRTaGlmdE1hcmtlciA9
IHRydWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNzA3LDM0ICs3MDcsMzQgQEAgdm9pZCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgaW4KICAgICB9CiAKICAgICBpZiAoZGlkU2hpZnRNYXJrZXIpIHsKLSAgICAg
ICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZSgqbm9kZSk7CisgICAgICAgIGludmFs
aWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7CiAKLSAgICAgICAgaWYgKG5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgICAgICBub2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAg
ICAgIGlmIChub2RlLnJlbmRlcmVyKCkpCisgICAgICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJl
cGFpbnQoKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXJzQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmUpCit2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYgcmFuZ2UsIGJvb2wgYWN0aXZl
KQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCkpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgp
KTsKIAotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7
Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOworICAgIE5v
ZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKKyAgICBOb2RlJiBl
bmRDb250YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKIAotICAgIE5vZGUqIHBhc3RMYXN0
Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSBy
YW5nZS5wYXN0TGFzdE5vZGUoKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJz
dE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KCpub2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0
Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwotICAgICAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyByYW5nZS0+ZW5kT2Zmc2V0KCkgOiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIHNldE1hcmtlcnNB
Y3RpdmUobm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlKTsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAgICAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3RhcnRPZmZzZXQoKSA6IDA7
CisgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lciA/IHJh
bmdlLmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwor
ICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKCpub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBh
Y3RpdmUpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1h
cmtlcnNBY3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCwgYm9vbCBhY3RpdmUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0
TWFya2Vyc0FjdGl2ZShOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCBib29sIGFjdGl2ZSkKIHsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJr
ZXJzLmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9k
ZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTc1Miw4ICs3NTIsOCBA
QCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBu
b2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldAogICAgICAgICBkaWRBY3RpdmF0ZU1hcmtlciA9IHRy
dWU7CiAgICAgfQogCi0gICAgaWYgKGRpZEFjdGl2YXRlTWFya2VyICYmIG5vZGUtPnJlbmRlcmVy
KCkpCi0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAoZGlkQWN0
aXZhdGVNYXJrZXIgJiYgbm9kZS5yZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCkt
PnJlcGFpbnQoKTsKIH0KIAogYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtl
cnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1h
cmtlclR5cGVzKQpAQCAtNzY3LDcgKzc2Nyw3IEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyCiAK
ICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5vZGUoKTsKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBmb3IgKGF1dG8qIG1h
cmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBt
YXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlu
cyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uuc3RhcnRPZmZzZXQoKSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKaW5kZXggOTAwN2ExODczYWQ1OWMx
ZGNjY2E1Mjc2ZTg5NDZlYjRlZTVhOTEwYS4uYWZlYTc2YTFhYWMwOTBkMTg2ZGY1OGU3NjdkNmY2
NmE5ODY2NDk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKQEAgLTQ4LDE5ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgfkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlcigpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKLSAgICB2b2lkIGFkZE1hcmtlcihSYW5n
ZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlcihSYW5n
ZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9u
KTsKLSAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIHZvaWQg
YWRkTWFya2VyVG9Ob2RlKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2Uq
LCBib29sIGFjdGl2ZU1hdGNoKTsKKyAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSYsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlKTsKKyAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSYsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKKyAgICB2b2lk
IGFkZE1hcmtlclRvTm9kZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRkTWFya2VyVG9O
b2RlKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmLCBib29sIGFjdGl2
ZU1hdGNoKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYg
bWV0YWRhdGEpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01h
cmtlcihSYW5nZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpOwotICAg
IHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlKiwgY29uc3QgUmV0YWluUHRyPGlk
PiYgbWV0YWRhdGEpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKKyAg
ICB2b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UmLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zKTsKKyAgICB2b2lkIGFkZERpY3Rh
dGlvblJlc3VsdE1hcmtlcihSYW5nZSYsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsK
ICNlbmRpZgotICAgIHZvaWQgYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmVmUHRyPFJhbmdlPik7
CisgICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihSYW5nZSYpOwogCi0gICAgdm9pZCBj
b3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0
aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsKKyAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUm
IHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlJiBkc3ROb2Rl
LCBpbnQgZGVsdGEpOwogICAgIGJvb2wgaGFzTWFya2VycygpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2Vy
VHlwZXMuY29udGFpbnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwpAQCAtNzIsMTcg
KzcyLDE3IEBAIHB1YmxpYzoKICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3Vt
ZW50IGlzIGZhbHNlLCB3ZSB3aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRo
YXQgaXQgcmV0YWlucwogICAgIC8vIHRoZSBwb3J0aW9uIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUg
cmFuZ2UuCiAgICAgZW51bSBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHsg
RG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciwgUmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIgfTsKLSAgICB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UqLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtl
cnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2Rl
KiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCAgUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhSYW5nZSYsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2Vy
cygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUm
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksICBSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMo
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjph
bGxNYXJrZXJzKCkpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlKiwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkp
OworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQg
cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERv
Y3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwotICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUq
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKLSAgICB2b2lkIHNldE1hcmtlcnNB
Y3RpdmUoUmFuZ2UqLCBib29sKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSosIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOworICAgIHZvaWQg
c2hpZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKKyAg
ICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2UmLCBib29sKTsKKyAgICB2b2lkIHNldE1hcmtl
cnNBY3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IGJvb2wpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBtYXJrZXJzRm9yKE5vZGUqLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUmLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtl
cnMoKSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
PiBtYXJrZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4pOwogICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jh
bmdlKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CiAKQEAg
LTk5LDcgKzk5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhZGRN
YXJrZXIoTm9kZSosIGNvbnN0IERvY3VtZW50TWFya2VyJik7CisgICAgdm9pZCBhZGRNYXJrZXIo
Tm9kZSYsIGNvbnN0IERvY3VtZW50TWFya2VyJik7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0Pj4gTWFya2VyTWFwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCmluZGV4IGY4YTFjMjZiYzAwNGJjYWNhNDgzYjlmMDMxMGIxZTNlZWRjNjg3
OWQuLjI1YmU0MjAxYTQwMGQyYTgzNTA2NDZjZjA3NDQ0ZTRkOTBlY2QxNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBFbGVtZW50Ojp+RWxlbWVudCgpCiAgICAg
ICAgIGRldGFjaEFsbEF0dHJOb2Rlc0Zyb21FbGVtZW50KCk7CiAKICAgICBpZiAoaGFzUGVuZGlu
Z1Jlc291cmNlcygpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3Vy
Y2VzKCp0aGlzKTsKICAgICAgICAgQVNTRVJUKCFoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAg
IH0KIH0KQEAgLTUzNywyNSArNTM3LDI1IEBAIGJvb2wgRWxlbWVudDo6aXNGb2N1c2FibGUoKSBj
b25zdAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25FbGVtZW50SW5BY3RpdmVDaGFpbigpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNJbkFjdGl2ZUNoYWluKHRoaXMpOworICAg
IHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzSW5BY3RpdmVDaGFpbigq
dGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxlbWVudEFjdGl2ZSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNBY3RpdmUodGhpcyk7CisgICAgcmV0dXJu
IGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNBY3RpdmUoKnRoaXMpOwogfQogCiBi
b29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRGb2N1c2VkKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2Vy
QWN0aW9uRWxlbWVudHMoKS5pc0ZvY3VzZWQodGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50KCku
dXNlckFjdGlvbkVsZW1lbnRzKCkuaXNGb2N1c2VkKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50
Ojppc1VzZXJBY3Rpb25FbGVtZW50SG92ZXJlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNl
ckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1l
bnRzKCkuaXNIb3ZlcmVkKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25F
bGVtZW50cygpLmlzSG92ZXJlZCgqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QWN0aXZl
KGJvb2wgZmxhZywgYm9vbCBwYXVzZSkKQEAgLTU2Myw3ICs1NjMsNyBAQCB2b2lkIEVsZW1lbnQ6
OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAgaWYgKGZsYWcgPT0gYWN0aXZl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRz
KCkuc2V0QWN0aXZlKHRoaXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1l
bnRzKCkuc2V0QWN0aXZlKCp0aGlzLCBmbGFnKTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBy
ZW5kZXJTdHlsZSA9IHRoaXMtPnJlbmRlclN0eWxlKCk7CiAgICAgYm9vbCByZWFjdHNUb1ByZXNz
ID0gKHJlbmRlclN0eWxlICYmIHJlbmRlclN0eWxlLT5hZmZlY3RlZEJ5QWN0aXZlKCkpIHx8IHN0
eWxlQWZmZWN0ZWRCeUFjdGl2ZSgpOwpAQCAtNjEyLDcgKzYxMiw3IEBAIHZvaWQgRWxlbWVudDo6
c2V0Rm9jdXMoYm9vbCBmbGFnKQogICAgIGlmIChmbGFnID09IGZvY3VzZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRGb2N1c2Vk
KHRoaXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9j
dXNlZCgqdGhpcywgZmxhZyk7CiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAg
ICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1l
bnQtPnBhcmVudEVsZW1lbnRJbkNvbXBvc2VkVHJlZSgpKQpAQCAtNjI0LDcgKzYyNCw3IEBAIHZv
aWQgRWxlbWVudDo6c2V0SG92ZXJlZChib29sIGZsYWcpCiAgICAgaWYgKGZsYWcgPT0gaG92ZXJl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50
cygpLnNldEhvdmVyZWQodGhpcywgZmxhZyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxl
bWVudHMoKS5zZXRIb3ZlcmVkKCp0aGlzLCBmbGFnKTsKIAogICAgIGlmICghcmVuZGVyZXIoKSkg
ewogICAgICAgICAvLyBXaGVuIHNldHRpbmcgaG92ZXIgdG8gZmFsc2UsIHRoZSBzdHlsZSBuZWVk
cyB0byBiZSByZWNhbGMnZCBldmVuIHdoZW4KQEAgLTE2MDksMTYgKzE2MDksMTYgQEAgYm9vbCBF
bGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKICAgICByZXR1cm4gZWxlbWVudERhdGEoKSAm
JiBlbGVtZW50RGF0YSgpLT5sZW5ndGgoKTsKIH0KIAotYm9vbCBFbGVtZW50OjpoYXNFcXVpdmFs
ZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBvdGhlcikgY29uc3QKK2Jvb2wgRWxlbWVudDo6
aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCYgb3RoZXIpIGNvbnN0CiB7CiAg
ICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgb3RoZXItPnN5bmNocm9uaXplQWxs
QXR0cmlidXRlcygpOwotICAgIGlmIChlbGVtZW50RGF0YSgpID09IG90aGVyLT5lbGVtZW50RGF0
YSgpKQorICAgIG90aGVyLnN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOworICAgIGlmIChlbGVt
ZW50RGF0YSgpID09IG90aGVyLmVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGlmIChlbGVtZW50RGF0YSgpKQotICAgICAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+aXNF
cXVpdmFsZW50KG90aGVyLT5lbGVtZW50RGF0YSgpKTsKLSAgICBpZiAob3RoZXItPmVsZW1lbnRE
YXRhKCkpCi0gICAgICAgIHJldHVybiBvdGhlci0+ZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50
KGVsZW1lbnREYXRhKCkpOworICAgICAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+aXNFcXVpdmFs
ZW50KG90aGVyLmVsZW1lbnREYXRhKCkpOworICAgIGlmIChvdGhlci5lbGVtZW50RGF0YSgpKQor
ICAgICAgICByZXR1cm4gb3RoZXIuZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KGVsZW1lbnRE
YXRhKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQogICAg
IENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKIAogICAgIGlmICho
YXNQZW5kaW5nUmVzb3VyY2VzKCkpCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzKCp0aGlzKTsKIAogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTgxNyw3ICsxODE3
LDcgQEAgdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxTaGFkb3dSb290PiYmIG5ld1No
YWRvd1Jvb3QpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9v
dCgqdGhpcywgc2hhZG93Um9vdCk7CiAKICAgICBpZiAoc2hhZG93Um9vdC5tb2RlKCkgPT0gU2hh
ZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dCgmc2hhZG93Um9vdCk7CisgICAgICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qoc2hhZG93
Um9vdCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCgpCkBAIC0zNTA5LDEw
ICszNTA5LDEwIEBAIHZvaWQgRWxlbWVudDo6Y2xlYXJIb3ZlckFuZEFjdGl2ZVN0YXR1c0JlZm9y
ZURldGFjaGluZ1JlbmRlcmVyKCkKICAgICBpZiAoIWlzVXNlckFjdGlvbkVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmIChob3ZlcmVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkuaG92
ZXJlZEVsZW1lbnREaWREZXRhY2godGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuaG92ZXJlZEVs
ZW1lbnREaWREZXRhY2goKnRoaXMpOwogICAgIGlmIChpbkFjdGl2ZUNoYWluKCkpCi0gICAgICAg
IGRvY3VtZW50KCkuZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2godGhpcyk7Ci0gICAgZG9j
dW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWREZXRhY2godGhpcyk7CisgICAgICAgIGRv
Y3VtZW50KCkuZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goKnRoaXMpOworICAgIGRvY3Vt
ZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuZGlkRGV0YWNoKCp0aGlzKTsKIH0KIAogdm9pZCBF
bGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmlu
ZGV4IGEyZmJkZjg2NjMzMTlkMTMyOTk3OTcwZGQ1YTNmOTE0ZTRhYWJlODEuLmU2MGUxMDhjZWIz
ODY4MWI3MjllMTI1NWU2M2Y0Y2NjNDE3ZmZiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjU5
LDcgKzI1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDbG9uZXMgYWxsIGF0dHJpYnV0ZS1kZXJpdmVk
IGRhdGEsIGluY2x1ZGluZyBzdWJjbGFzcyBzcGVjaWZpY3MgKHRocm91Z2ggY29weU5vbkF0dHJp
YnV0ZVByb3BlcnRpZXMuKQogICAgIHZvaWQgY2xvbmVEYXRhRnJvbUVsZW1lbnQoY29uc3QgRWxl
bWVudCYpOwogCi0gICAgYm9vbCBoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50
KiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBF
bGVtZW50JiBvdGhlcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0
ZVByb3BlcnRpZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JikgeyB9CiAKQEAgLTU5MywxNCAr
NTkzLDkgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVXNlckFjdGlvbkVsZW1lbnRGb2N1c2VkKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc1VzZXJBY3Rpb25FbGVtZW50SG92ZXJlZCgpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3Qm
KSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgYWx3YXlzQ3JlYXRlVXNlckFnZW50U2hhZG93Um9vdCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVk
IGZvciBBdHRyIHRvIGNhbGwgd2lsbE1vZGlmeUF0dHJpYnV0ZS9kaWRNb2RpZnlBdHRyaWJ1dGUu
Ci0gICAgZnJpZW5kIGNsYXNzIEF0dHI7Ci0KLSAgICBlbnVtIFN5bmNocm9uaXphdGlvbk9mTGF6
eUF0dHJpYnV0ZSB7IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlID0gMCwgSW5T
eW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgfTsKLQogICAgIHZvaWQgZGlkQWRkQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICB2b2lk
IHdpbGxNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwogICAgIHZvaWQg
ZGlkTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKQEAgLTYyOCw2ICs2
MjMsNyBAQCBwcml2YXRlOgogICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3QgZmluYWw7CiAg
ICAgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdCBmaW5hbDsKIAorICAgIGVu
dW0gU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIHsgTm90SW5TeW5jaHJvbml6YXRpb25P
ZkxhenlBdHRyaWJ1dGUsIEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIH07CiAgICAg
dm9pZCBzZXRBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25lZCBpbmRleCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0
dHJpYnV0ZSk7CiAgICAgdm9pZCBhZGRBdHRyaWJ1dGVJbnRlcm5hbChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0
cmlidXRlKTsKICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHVuc2lnbmVkIGluZGV4
LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmNwcAppbmRleCA1Yjc0YTJiMzU5ODg0ZDI1NjUyZmRlZTI4MGFmOGYyMjY3MGI1MmQwLi4x
N2JjZWU2ZWE3MzgyY2IwY2I1ODMzZjEyYWI1ZGM1NGI0N2Q2MGQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TmFtZWROb2RlTWFwLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIk5hbWVkTm9kZU1h
cC5oIgogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY1
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPEF0dHI+PiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRl
bShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiBWZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6
OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IG5h
bWVzID0gbV9lbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7Ci0gICAgaWYgKGlzPEhUTUxFbGVt
ZW50PihtX2VsZW1lbnQpICYmIGlzPEhUTUxEb2N1bWVudD4obV9lbGVtZW50LmRvY3VtZW50KCkp
KSB7CisgICAgaWYgKGlzPEhUTUxFbGVtZW50PihtX2VsZW1lbnQpICYmIG1fZWxlbWVudC5kb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgbmFtZXMucmVtb3ZlQWxsTWF0Y2hp
bmcoW10oU3RyaW5nJiBuYW1lKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDog
U3RyaW5nVmlldyB7IG5hbWUgfS5jb2RlVW5pdHMoKSkgewogICAgICAgICAgICAgICAgIGlmIChp
c0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1Yjk3YzY4ZTdiN2Rh
ODM2ZjNjNDg2MDEzNTgxOTAyNGIyZjA5YWEwLi5iNTIzZjkyNWZhYzQxMmE1OTIwNDE0Yzc3NjQ5
NWQyZDkzNWQyMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OTksNyArNTk5LDcgQEAgdm9pZCBO
b2RlOjpub3JtYWxpemUoKQogICAgICAgICB3aGlsZSAoTm9kZSogbmV4dFNpYmxpbmcgPSBub2Rl
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAobmV4dFNpYmxpbmctPm5vZGVUeXBl
KCkgIT0gVEVYVF9OT0RFKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgUmVm
UHRyPFRleHQ+IG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4obmV4dFNpYmxpbmcpOworICAgICAg
ICAgICAgUmVmPFRleHQ+IG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHRTaWJsaW5nKTsK
IAogICAgICAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IHRleHQgbm9kZXMuCiAgICAgICAgICAgICBp
ZiAoIW5leHRUZXh0LT5sZW5ndGgoKSkgewpAQCAtNjEwLDcgKzYxMCw3IEBAIHZvaWQgTm9kZTo6
bm9ybWFsaXplKCkKICAgICAgICAgICAgIC8vIEJvdGggbm9uLWVtcHR5IHRleHQgbm9kZXMuIE1l
cmdlIHRoZW0uCiAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB0ZXh0LT5sZW5ndGgoKTsK
ICAgICAgICAgICAgIHRleHQtPmFwcGVuZERhdGEobmV4dFRleHQtPmRhdGEoKSk7Ci0gICAgICAg
ICAgICBkb2N1bWVudCgpLnRleHROb2Rlc01lcmdlZChuZXh0VGV4dC5nZXQoKSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkudGV4dE5vZGVzTWVyZ2VkKG5leHRUZXh0LCBvZmZzZXQp
OwogICAgICAgICAgICAgbmV4dFRleHQtPnJlbW92ZSgpOwogICAgICAgICB9CiAKQEAgLTEzMjMs
NyArMTMyMyw3IEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5vZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAg
ICAgICAgIGF1dG8mIG90aGVyRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpvdGhlcik7CiAg
ICAgICAgIGlmICh0aGlzRWxlbWVudC50YWdRTmFtZSgpICE9IG90aGVyRWxlbWVudC50YWdRTmFt
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXRoaXNFbGVtZW50
Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKCZvdGhlckVsZW1lbnQpKQorICAgICAgICBpZiAoIXRo
aXNFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKG90aGVyRWxlbWVudCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlSXRlcmF0b3IuY3BwCmluZGV4IDQ1ZDg2MGJhODZmNDkwMzY2MTk4YmZlODQ2NGYxYzI2
NTEyZTliNzkuLmY2ZjEwMjA2OWI5ZWZjNDFhNDI1Y2Y2ZGEzYzI0NzdiZWVkYTEyZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCkBAIC03Myw3ICs3Myw3IEBAIGlubGluZSBOb2Rl
SXRlcmF0b3I6Ok5vZGVJdGVyYXRvcihOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hv
dywgUmVmUHRyPE5vCiAgICAgOiBOb2RlSXRlcmF0b3JCYXNlKHJvb3ROb2RlLCB3aGF0VG9TaG93
LCBXVEZNb3ZlKGZpbHRlcikpCiAgICAgLCBtX3JlZmVyZW5jZU5vZGUocm9vdE5vZGUsIHRydWUp
CiB7Ci0gICAgcm9vdCgpLmRvY3VtZW50KCkuYXR0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOworICAg
IHJvb3QoKS5kb2N1bWVudCgpLmF0dGFjaE5vZGVJdGVyYXRvcigqdGhpcyk7CiB9CiAKIFJlZjxO
b2RlSXRlcmF0b3I+IE5vZGVJdGVyYXRvcjo6Y3JlYXRlKE5vZGUmIHJvb3ROb2RlLCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBSZWZQdHI8Tm9kZUZpbHRlcj4mJiBmaWx0ZXIpCkBAIC04Myw3ICs4Myw3
IEBAIFJlZjxOb2RlSXRlcmF0b3I+IE5vZGVJdGVyYXRvcjo6Y3JlYXRlKE5vZGUmIHJvb3ROb2Rl
LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQCiAKIE5vZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRv
cigpCiB7Ci0gICAgcm9vdCgpLmRvY3VtZW50KCkuZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwor
ICAgIHJvb3QoKS5kb2N1bWVudCgpLmRldGFjaE5vZGVJdGVyYXRvcigqdGhpcyk7CiB9CiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAppbmRleCA0ZDMzNzI3OWMwZWNiYzk1MGRm
NDllZWIxZTU0Mjc0MjczMGQ1OTdkLi40NTgxYTk0YjEzZWZiNmUzOGMzNjdiYTcxODI2NGFjZTVl
NzNkNmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTMw
LDM1ICszMCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSYWRpb0J1dHRvbkdyb3Vw
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBSYWRpb0J1dHRv
bkdyb3VwKCk7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1iZXJzLmlz
RW1wdHkoKTsgfQogICAgIGJvb2wgaXNSZXF1aXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWly
ZWRDb3VudDsgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNoZWNrZWRCdXR0b24oKSBjb25zdCB7
IHJldHVybiBtX2NoZWNrZWRCdXR0b247IH0KLSAgICB2b2lkIGFkZChIVE1MSW5wdXRFbGVtZW50
Kik7Ci0gICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCopOwotICAg
IHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2
b2lkIHJlbW92ZShIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgYm9vbCBjb250YWlucyhIVE1MSW5w
dXRFbGVtZW50KikgY29uc3Q7CisgICAgdm9pZCBhZGQoSFRNTElucHV0RWxlbWVudCYpOworICAg
IHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHJl
cXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZW1v
dmUoSFRNTElucHV0RWxlbWVudCYpOworICAgIGJvb2wgY29udGFpbnMoSFRNTElucHV0RWxlbWVu
dCYpIGNvbnN0OwogICAgIFZlY3RvcjxIVE1MSW5wdXRFbGVtZW50Kj4gbWVtYmVycygpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMo
KTsKICAgICB2b2lkIHVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpOwogICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OwotICAgIHZvaWQgY2hhbmdlQ2hlY2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVt
ZW50Kik7CiAgICAgdm9pZCBzZXRDaGVja2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAog
ICAgIEhhc2hTZXQ8SFRNTElucHV0RWxlbWVudCo+IG1fbWVtYmVyczsKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBtX2NoZWNrZWRCdXR0b247Ci0gICAgc2l6ZV90IG1fcmVxdWlyZWRDb3VudDsKKyAg
ICBIVE1MSW5wdXRFbGVtZW50KiBtX2NoZWNrZWRCdXR0b24geyBudWxscHRyIH07CisgICAgc2l6
ZV90IG1fcmVxdWlyZWRDb3VudCB7IDAgfTsKIH07CiAKLVJhZGlvQnV0dG9uR3JvdXA6OlJhZGlv
QnV0dG9uR3JvdXAoKQotICAgIDogbV9jaGVja2VkQnV0dG9uKG51bGxwdHIpCi0gICAgLCBtX3Jl
cXVpcmVkQ291bnQoMCkKLXsKLX0KLQogaW5saW5lIGJvb2wgUmFkaW9CdXR0b25Hcm91cDo6aXNW
YWxpZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFpc1JlcXVpcmVkKCkgfHwgbV9jaGVja2VkQnV0
dG9uOwpAQCAtODgsMTYgKzgwLDE2IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6c2V0Q2hlY2tl
ZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgICAgIG9sZENoZWNrZWRCdXR0
b24tPnNldENoZWNrZWQoZmFsc2UpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChI
VE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1M
SW5wdXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRv
bigpKTsKLSAgICBpZiAoIW1fbWVtYmVycy5hZGQoYnV0dG9uKS5pc05ld0VudHJ5KQorICAgIEFT
U0VSVChidXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoIW1fbWVtYmVycy5hZGQoJmJ1
dHRvbikuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgZ3JvdXBXYXNWYWxp
ZCA9IGlzVmFsaWQoKTsKLSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1
dHRvbi5pc1JlcXVpcmVkKCkpCiAgICAgICAgICsrbV9yZXF1aXJlZENvdW50OwotICAgIGlmIChi
dXR0b24tPmNoZWNrZWQoKSkKLSAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbihidXR0b24pOworICAg
IGlmIChidXR0b24uY2hlY2tlZCgpKQorICAgICAgICBzZXRDaGVja2VkQnV0dG9uKCZidXR0b24p
OwogCiAgICAgYm9vbCBncm91cElzVmFsaWQgPSBpc1ZhbGlkKCk7CiAgICAgaWYgKGdyb3VwV2Fz
VmFsaWQgIT0gZ3JvdXBJc1ZhbGlkKQpAQCAtMTA1LDMxICs5NywzMSBAQCB2b2lkIFJhZGlvQnV0
dG9uR3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgZWxzZSBpZiAoIWdy
b3VwSXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlvIGJ1dHRvbiBub3QgaW4gYSBncm91cCBp
cyBhbHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBpdAogICAgICAgICAvLyBpbnZhbGlkIG9u
bHkgaWYgdGhlIGdyb3VwIGlzIGludmFsaWQuCi0gICAgICAgIGJ1dHRvbi0+dXBkYXRlVmFsaWRp
dHkoKTsKKyAgICAgICAgYnV0dG9uLnVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgfQogfQogCi12b2lk
IFJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50KiBi
dXR0b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5w
dXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigp
KTsKLSAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5zKGJ1dHRvbikpOworICAgIEFTU0VSVChi
dXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5zKCZi
dXR0b24pKTsKICAgICBib29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24t
PmNoZWNrZWQoKSkKLSAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbihidXR0b24pOworICAgIGlmIChi
dXR0b24uY2hlY2tlZCgpKQorICAgICAgICBzZXRDaGVja2VkQnV0dG9uKCZidXR0b24pOwogICAg
IGVsc2UgewotICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09IGJ1dHRvbikKKyAgICAgICAg
aWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSAmYnV0dG9uKQogICAgICAgICAgICAgc2V0Q2hlY2tlZEJ1
dHRvbihudWxscHRyKTsKICAgICB9CiAgICAgaWYgKHdhc1ZhbGlkICE9IGlzVmFsaWQoKSkKICAg
ICAgICAgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0
b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRv
bikKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJ
bnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9u
KCkpOwotICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMoYnV0dG9uKSk7CisgICAgQVNTRVJU
KGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMo
JmJ1dHRvbikpOwogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1ZhbGlkKCk7Ci0gICAgaWYgKGJ1dHRv
bi0+aXNSZXF1aXJlZCgpKQorICAgIGlmIChidXR0b24uaXNSZXF1aXJlZCgpKQogICAgICAgICAr
K21fcmVxdWlyZWRDb3VudDsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fcmVxdWlyZWRD
b3VudCk7CkBAIC0xMzksMjIgKzEzMSwyMiBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlcXVp
cmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgICAgIHVw
ZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6
OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6
OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+
aXNSYWRpb0J1dHRvbigpKTsKLSAgICBIYXNoU2V0PEhUTUxJbnB1dEVsZW1lbnQqPjo6aXRlcmF0
b3IgaXQgPSBtX21lbWJlcnMuZmluZChidXR0b24pOworICAgIEFTU0VSVChidXR0b24uaXNSYWRp
b0J1dHRvbigpKTsKKyAgICBhdXRvIGl0ID0gbV9tZW1iZXJzLmZpbmQoJmJ1dHRvbik7CiAgICAg
aWYgKGl0ID09IG1fbWVtYmVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB3
YXNWYWxpZCA9IGlzVmFsaWQoKTsKICAgICBtX21lbWJlcnMucmVtb3ZlKGl0KTsKLSAgICBpZiAo
YnV0dG9uLT5pc1JlcXVpcmVkKCkpIHsKKyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkgewog
ICAgICAgICBBU1NFUlQobV9yZXF1aXJlZENvdW50KTsKICAgICAgICAgLS1tX3JlcXVpcmVkQ291
bnQ7CiAgICAgfQogICAgIGlmIChtX2NoZWNrZWRCdXR0b24pIHsKLSAgICAgICAgYnV0dG9uLT5p
bnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24g
PT0gYnV0dG9uKSB7CisgICAgICAgIGJ1dHRvbi5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7
CisgICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0gJmJ1dHRvbikgewogICAgICAgICAgICAg
bV9jaGVja2VkQnV0dG9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGNGb3JBbGxCdXR0b25zKCk7CiAgICAgICAgIH0KQEAgLTE2OCw3ICsxNjAsNyBAQCB2b2lkIFJh
ZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgaWYg
KCF3YXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlvIGJ1dHRvbiBub3QgaW4gYSBncm91cCBp
cyBhbHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBpdAogICAgICAgICAvLyB2YWxpZCBvbmx5
IGlmIHRoZSBncm91cCB3YXMgaW52YWxpZC4KLSAgICAgICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0
eSgpOworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRpdHkoKTsKICAgICB9CiB9CiAKQEAgLTE4
OCw5ICsxODAsOSBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZVZhbGlkaXR5Rm9yQWxs
QnV0dG9ucygpCiAgICAgfQogfQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXA6OmNvbnRhaW5zKEhU
TUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikgY29uc3QKK2Jvb2wgUmFkaW9CdXR0b25Hcm91cDo6Y29u
dGFpbnMoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKSBjb25zdAogewotICAgIHJldHVybiBtX21l
bWJlcnMuY29udGFpbnMoYnV0dG9uKTsKKyAgICByZXR1cm4gbV9tZW1iZXJzLmNvbnRhaW5zKCZi
dXR0b24pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDYsMTYgKzE5OCwxNiBAQCBSYWRpb0J1dHRv
bkdyb3Vwczo6flJhZGlvQnV0dG9uR3JvdXBzKCkKIHsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdy
b3Vwczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0
dG9uR3JvdXBzOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBB
U1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgp
LmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlm
IChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
bV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91cE1hcCA9IHN0ZDo6bWFrZV91
bmlxdWU8TmFtZVRvR3JvdXBNYXA+KCk7CiAKLSAgICBhdXRvJiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CisgICAgYXV0byYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC5uYW1l
KCkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncm91cCkKICAg
ICAgICAgZ3JvdXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhZGlvQnV0dG9uR3JvdXA+KCk7CiAgICAg
Z3JvdXAtPmFkZChlbGVtZW50KTsKQEAgLTI0MCwzMCArMjMyLDI2IEBAIFZlY3RvcjxIVE1MSW5w
dXRFbGVtZW50Kj4gUmFkaW9CdXR0b25Hcm91cHM6Omdyb3VwTWVtYmVycyhjb25zdCBIVE1MSW5w
dXRFbGVtZW50CiAgICAgcmV0dXJuIGdyb3VwLT5tZW1iZXJzKCk7CiB9CiAKLXZvaWQgUmFkaW9C
dXR0b25Hcm91cHM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50
KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7
Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQu
aXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fbmFtZVRvR3JvdXBNYXApOwogICAgIGlmICghbV9u
YW1lVG9Hcm91cE1hcCkKICAgICAgICAgcmV0dXJuOwotICAgIFJhZGlvQnV0dG9uR3JvdXAqIGdy
b3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOwotICAg
IEFTU0VSVChncm91cCk7Ci0gICAgZ3JvdXAtPnVwZGF0ZUNoZWNrZWRTdGF0ZShlbGVtZW50KTsK
KyAgICBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC5uYW1lKCkuaW1wbCgpKS0+dXBkYXRl
Q2hlY2tlZFN0YXRlKGVsZW1lbnQpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZXF1
aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFk
aW9CdXR0b25Hcm91cHM6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50
JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAg
IGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFk
aW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVChtX25hbWVUb0dyb3VwTWFwKTsKICAgICBpZiAoIW1fbmFtZVRv
R3JvdXBNYXApCiAgICAgICAgIHJldHVybjsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9
IG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKLSAgICBBU1NF
UlQoZ3JvdXApOwotICAgIGdyb3VwLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoZWxlbWVudCk7
CisgICAgbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQubmFtZSgpLmltcGwoKSktPnJlcXVp
cmVkQXR0cmlidXRlQ2hhbmdlZChlbGVtZW50KTsKIH0KIAogSFRNTElucHV0RWxlbWVudCogUmFk
aW9CdXR0b25Hcm91cHM6OmNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIGNvbnN0CkBAIC0yNzUsMzggKzI2MywzNiBAQCBIVE1MSW5wdXRFbGVtZW50KiBSYWRp
b0J1dHRvbkdyb3Vwczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYg
bgogICAgIHJldHVybiBncm91cCA/IGdyb3VwLT5jaGVja2VkQnV0dG9uKCkgOiBudWxscHRyOwog
fQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXBzOjpoYXNDaGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFJhZGlvQnV0dG9uR3JvdXBzOjpoYXND
aGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lID0gZWxlbWVudC0+bmFtZSgpOworICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9C
dXR0b24oKSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZWxlbWVudC5uYW1lKCk7
CiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpIHx8ICFtX25hbWVUb0dyb3VwTWFwKQotICAgICAgICBy
ZXR1cm4gZWxlbWVudC0+Y2hlY2tlZCgpOwotCi0gICAgY29uc3QgUmFkaW9CdXR0b25Hcm91cCog
Z3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQobmFtZS5pbXBsKCkpOwotICAgIHJldHVybiBn
cm91cC0+Y2hlY2tlZEJ1dHRvbigpOworICAgICAgICByZXR1cm4gZWxlbWVudC5jaGVja2VkKCk7
CisgICAgcmV0dXJuIG1fbmFtZVRvR3JvdXBNYXAtPmdldChuYW1lLmltcGwoKSktPmNoZWNrZWRC
dXR0b24oKTsKIH0KIAotYm9vbCBSYWRpb0J1dHRvbkdyb3Vwczo6aXNJblJlcXVpcmVkR3JvdXAo
SFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgUmFkaW9CdXR0b25Hcm91cHM6
OmlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5h
bWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAg
ICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmFk
aW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC0+bmFt
ZSgpLmltcGwoKSk7CisgICAgYXV0byogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxl
bWVudC5uYW1lKCkuaW1wbCgpKTsKICAgICByZXR1cm4gZ3JvdXAgJiYgZ3JvdXAtPmlzUmVxdWly
ZWQoKSAmJiBncm91cC0+Y29udGFpbnMoZWxlbWVudCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25H
cm91cHM6OnJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQordm9pZCBSYWRp
b0J1dHRvbkdyb3Vwczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQt
Pm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsK
KyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm47CiAKICAgICBtX25hbWVUb0dy
b3VwTWFwLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgTmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKKyAg
ICBhdXRvIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50Lm5hbWUoKS5pbXBsKCkp
OwogICAgIGlmIChpdCA9PSBtX25hbWVUb0dyb3VwTWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9C
dXR0b25Hcm91cHMuaAppbmRleCAxZTVhNThkNTdkYTc2ODVlMWMwMThmZDk2YWZhZjIwN2VmMDEz
MzZhLi41MzMxMmRkZTk3MDZjZThkMjRhM2UyMTRhZWM0ZWNmNTNlYWVhODU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaApAQCAtMzQsMTMgKzM0LDEzIEBAIGNsYXNzIFJh
ZGlvQnV0dG9uR3JvdXBzIHsKIHB1YmxpYzoKICAgICBSYWRpb0J1dHRvbkdyb3VwcygpOwogICAg
IH5SYWRpb0J1dHRvbkdyb3VwcygpOwotICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1l
bnQqKTsKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Kik7Ci0g
ICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCopOwotICAg
IHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZEJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElu
cHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1
dEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Jik7CiAg
ICAgSFRNTElucHV0RWxlbWVudCogY2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0
cmluZyYgZ3JvdXBOYW1lKSBjb25zdDsKLSAgICBib29sIGhhc0NoZWNrZWRCdXR0b24oY29uc3Qg
SFRNTElucHV0RWxlbWVudCopIGNvbnN0OwotICAgIGJvb2wgaXNJblJlcXVpcmVkR3JvdXAoSFRN
TElucHV0RWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBI
VE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBpc0luUmVxdWlyZWRHcm91cChIVE1M
SW5wdXRFbGVtZW50JikgY29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBncm91
cE1lbWJlcnMoY29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKaW5kZXggNWRhZTA2MzZiYjE5NzNhMzU5NzM4Mzk3Y2I2MTMwMWY5MDJlMzBj
My4uMzYxOTkwNDdjMzRjYWI2ZjI4MTY1ZTBlZjgzNGMyMjlhODRkNzQzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1s
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzksNyArNzgsNyBAQCBpbmxp
bmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50KQogICAgIHJhbmdlQ291bnRl
ci5pbmNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5n
ZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAog
UmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50KQpAQCAtOTYs
NyArOTUsNyBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBO
b2RlKiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2ZmcwogICAgIHJhbmdlQ291bnRlci5pbmNy
ZW1lbnQoKTsKICNlbmRpZgogCi0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlz
KTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIAogICAgIC8vIFNp
bXBseSBzZXR0aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5v
dCBkbyBhbnkgb2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5k
IGRvLCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KQEAgLTEyNSw3ICsxMjQsNyBAQCBSZWY8
UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZQogCiBSYW5nZTo6flJhbmdlKCkKIHsKLSAgICBtX293bmVyRG9j
dW1lbnQtPmRldGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFu
Z2UoKnRoaXMpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHJhbmdlQ291bnRlci5kZWNyZW1lbnQo
KTsKQEAgLTEzNSwxMSArMTM0LDExIEBAIFJhbmdlOjp+UmFuZ2UoKQogdm9pZCBSYW5nZTo6c2V0
RG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChtX293bmVyRG9jdW1l
bnQucHRyKCkgIT0gJmRvY3VtZW50KTsKLSAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdl
KHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UoKnRoaXMpOwogICAgIG1f
b3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgIG1fc3RhcnQuc2V0VG9TdGFydE9mTm9kZShk
b2N1bWVudCk7CiAgICAgbV9lbmQuc2V0VG9TdGFydE9mTm9kZShkb2N1bWVudCk7Ci0gICAgbV9v
d25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0
dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAogTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKE5vZGUqIGNvbnRhaW5lckEsIE5vZGUqIGNvbnRhaW5lckIpCkBAIC05NzcsNyArOTc2LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICAgICAgZWxlbWVudCA9ICZkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKICAgICBlbHNlCiAgICAgICAgIGVsZW1lbnQgPSBub2RlLnBhcmVudEVs
ZW1lbnQoKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgKGlzPEhUTUxEb2N1bWVudD4oZWxlbWVudC0+
ZG9jdW1lbnQoKSkgJiYgaXM8SFRNTEh0bWxFbGVtZW50PigqZWxlbWVudCkpKQorICAgIGlmICgh
ZWxlbWVudCB8fCAoZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGlzPEhU
TUxIdG1sRWxlbWVudD4oKmVsZW1lbnQpKSkKICAgICAgICAgZWxlbWVudCA9IEhUTUxCb2R5RWxl
bWVudDo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSk7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudCgqZWxlbWVudCwgbWFya3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRl
bnRBbmREb05vdE1hcmtBbHJlYWR5U3RhcnRlZCk7CiB9CkBAIC0xNjY5LDkgKzE2NjgsOSBAQCB2
b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogICAgIGJvdW5kYXJ5Tm9k
ZVdpbGxCZVJlbW92ZWQobV9lbmQsIG5vZGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91
bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHZvaWQg
Ym91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYg
dGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5k
YXJ5LmNvbnRhaW5lcigpICE9IHRleHQpCisgICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9
ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlPZmZzZXQgPSBi
b3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zmc2V0KQpAQCAt
MTY3OSwxNyArMTY3OCwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0
ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dAogICAgIGJvdW5kYXJ5
LnNldE9mZnNldChib3VuZGFyeU9mZnNldCArIGxlbmd0aCk7CiB9CiAKLXZvaWQgUmFuZ2U6OnRl
eHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3ZvaWQgUmFuZ2U6OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKIHsKLSAgICBBU1NFUlQodGV4dCk7Ci0gICAgQVNTRVJUKCZ0ZXh0LT5k
b2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVu
dCgpID09ICZvd25lckRvY3VtZW50KCkpOwogICAgIGJvdW5kYXJ5VGV4dEluc2VydGVkKG1fc3Rh
cnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX2Vu
ZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRh
cnlUZXh0UmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3Vu
ZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5j
b250YWluZXIoKSAhPSB0ZXh0KQorICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4
dCkKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRh
cnkub2Zmc2V0KCk7CiAgICAgaWYgKG9mZnNldCA+PSBib3VuZGFyeU9mZnNldCkKQEAgLTE3MDAs
MTAgKzE2OTgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVtb3ZlZChSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LAogICAgICAgICBib3VuZGFyeS5z
ZXRPZmZzZXQoYm91bmRhcnlPZmZzZXQgLSBsZW5ndGgpOwogfQogCi12b2lkIFJhbmdlOjp0ZXh0
UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3Zv
aWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBBU1NFUlQoJnRleHQtPmRvY3Vt
ZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkg
PT0gJm93bmVyRG9jdW1lbnQoKSk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0
ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4
dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQpAQCAtMTcyOCwxNSArMTcyNSwxNSBAQCB2b2lkIFJhbmdl
Ojp0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0
KQogICAgIGJvdW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKG1fZW5kLCBvbGROb2RlLCBvZmZzZXQpOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5k
YXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbGROb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGJv
dW5kYXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCYg
b2xkTm9kZSkKIHsKLSAgICBhdXRvKiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7Ci0g
ICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUpIHsKLSAgICAgICAgdW5zaWdu
ZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLT5sZW5ndGgoKTsKKyAgICBhdXRvKiBwYXJlbnQgPSBv
bGROb2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJm9s
ZE5vZGUpIHsKKyAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLmxlbmd0aCgp
OwogICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwog
ICAgICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewogICAgICAgICAgICAg
aWYgKHBhcmVudCkKLSAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUtPm5leHRT
aWJsaW5nKCksIGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOworICAgICAgICAgICAg
ICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAt
IHNwbGl0T2Zmc2V0LCAwKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBib3Vu
ZGFyeS5zZXRPZmZzZXQoc3BsaXRPZmZzZXQpOwogICAgICAgICB9CkBAIC0xNzQ0LDIwICsxNzQx
LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91
bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sCiAgICAgfQogICAgIGlmICghcGFyZW50KQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAm
JiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG9sZE5vZGUpIHsKLSAgICAgICAgYXV0byogbmV3
Q2hpbGQgPSBvbGROb2RlLT5uZXh0U2libGluZygpOworICAgIGlmIChib3VuZGFyeS5jb250YWlu
ZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmb2xkTm9kZSkgewor
ICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4dFNpYmxpbmcoKTsKICAgICAgICAg
QVNTRVJUKG5ld0NoaWxkKTsKICAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlckNoaWxkKCpuZXdD
aGlsZCk7CiAgICAgfQogfQogCi12b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5v
ZGUpCit2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNT
RVJUKG9sZE5vZGUpOwotICAgIEFTU0VSVCgmb2xkTm9kZS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJE
b2N1bWVudCgpKTsKLSAgICBBU1NFUlQob2xkTm9kZS0+aXNUZXh0Tm9kZSgpKTsKLSAgICBBU1NF
UlQoIW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLT5uZXh0U2libGluZygpKTsKLSAg
ICBBU1NFUlQoIW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLT5uZXh0U2libGluZygp
LT5pc1RleHROb2RlKCkpOworICAgIEFTU0VSVCgmb2xkTm9kZS5kb2N1bWVudCgpID09ICZvd25l
ckRvY3VtZW50KCkpOworICAgIEFTU0VSVCghb2xkTm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9k
ZS5uZXh0U2libGluZygpKTsKKyAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9s
ZE5vZGUubmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBib3VuZGFyeVRleHROb2Rl
c1NwbGl0KG1fc3RhcnQsIG9sZE5vZGUpOwogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9l
bmQsIG9sZE5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCAzZjFjNTBjYjQ0YWFiYTE4NjU0MmU3
NzY5YjQzZDRmN2JkM2ZkOWM1Li5mMmZjNTQyOGRmYzJiOTNjY2UyNTdiNDBhNzg2OGViYTk5NTky
ZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMTMzLDEwICsxMzMsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJik7CiAgICAgdm9pZCBu
b2RlV2lsbEJlUmVtb3ZlZChOb2RlJik7CiAKLSAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgdGV4dFJlbW92ZWQo
Tm9kZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRJ
bnNlcnRlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZv
aWQgdGV4dFJlbW92ZWQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICB2b2lkIHRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25l
ZCBvZmZzZXQpOwotICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKTsKKyAgICB2
b2lkIHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICAvLyBFeHBhbmQgcmFuZ2Ug
dG8gYSB1bml0ICh3b3JkIG9yIHNlbnRlbmNlIG9yIGJsb2NrIG9yIGRvY3VtZW50KSBib3VuZGFy
eS4KICAgICAvLyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3NjMyIGNvbW1lbnQgIzUgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5j
cHAKaW5kZXggYTgzM2UyODIyNmRkZDFkY2QxNDJkNWNhMjJiMzU0NjJlMmI5YzBlZi4uNDNlYWYx
NGQ0Y2RjZjk0ZDAwY2JhNzkxMmZmMDRhOWY1OGIzMTY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFbGVtZW50LmNwcApAQCAtMjU2LDExICsyNTYsMTEgQEAgYm9vbCBTY3JpcHRFbGVtZW50Ojpw
cmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVn
YWMKICAgICB9IGVsc2UgaWYgKChpc0NsYXNzaWNFeHRlcm5hbFNjcmlwdCB8fCBzY3JpcHRUeXBl
ID09IFNjcmlwdFR5cGU6Ok1vZHVsZSkgJiYgIWhhc0FzeW5jQXR0cmlidXRlKCkgJiYgIW1fZm9y
Y2VBc3luYykgewogICAgICAgICBtX3dpbGxFeGVjdXRlSW5PcmRlciA9IHRydWU7CiAgICAgICAg
IEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVy
KCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2Ny
aXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOworICAgICAgICBkb2N1bWVudC5zY3JpcHRS
dW5uZXIoKS5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQs
IFNjcmlwdFJ1bm5lcjo6SU5fT1JERVJfRVhFQ1VUSU9OKTsKICAgICB9IGVsc2UgaWYgKGhhc1Nv
dXJjZUF0dHJpYnV0ZSgpIHx8IHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6TW9kdWxlKSB7CiAg
ICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKICAgICAgICAgQVNTRVJUKGhhc0FzeW5j
QXR0cmlidXRlKCkgfHwgbV9mb3JjZUFzeW5jKTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVu
bmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwg
U2NyaXB0UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOworICAgICAgICBkb2N1bWVudC5zY3JpcHRS
dW5uZXIoKS5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQs
IFNjcmlwdFJ1bm5lcjo6QVNZTkNfRVhFQ1VUSU9OKTsKICAgICB9IGVsc2UgaWYgKCFoYXNTb3Vy
Y2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlckluc2VydGVkICYmICFkb2N1bWVudC5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSkgewogICAgICAgICBBU1NFUlQoc2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBl
OjpDbGFzc2ljKTsKICAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VGV4dC5jcHAKaW5kZXggZmU4YzlkNDYwYjBmYzMxOTZjMjZhYjQyNDZlNmY4NWM3NTgyNDAwYi4u
ZjYzZjQ1ZWU4MThiMzFiZTg2ODA2NjI4NmVjZWU0ZDk4MDkzN2UyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNw
cApAQCAtNzIsNyArNzIsNyBAQCBFeGNlcHRpb25PcjxSZWY8VGV4dD4+IFRleHQ6OnNwbGl0VGV4
dCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0UmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLnRleHROb2RlU3BsaXQodGhp
cyk7CisgICAgZG9jdW1lbnQoKS50ZXh0Tm9kZVNwbGl0KCp0aGlzKTsKIAogICAgIGlmIChyZW5k
ZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhKCksIDAs
IG9sZERhdGEubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJB
Y3Rpb25FbGVtZW50U2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVu
dFNldC5jcHAKaW5kZXggYTdkYmU1MTQ2YTNjODhjNGVmZmNhN2ZiYjJmN2QyMTkzNzc0MjlkNy4u
NzNlM2E2MjFkNmY4ZjgxNmI1YmQ4ZWQxNjA3NWYyZGZlZmI3OWNhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwCkBAIC0zMiw5ICszMiw5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZGlkRGV0YWNo
KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpkaWREZXRhY2go
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxl
bWVudCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwogICAg
IGNsZWFyRmxhZ3MoZWxlbWVudCwgSXNBY3RpdmVGbGFnIHwgSW5BY3RpdmVDaGFpbkZsYWcgfCBJ
c0hvdmVyZWRGbGFnKTsKIH0KIApAQCAtNDMsMzEgKzQzLDI4IEBAIHZvaWQgVXNlckFjdGlvbkVs
ZW1lbnRTZXQ6OmRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpCiAgICAgbV9lbGVtZW50cy5jbGVh
cigpOwogfQogCi1ib29sIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpoYXNGbGFncyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykgY29uc3QKK2Jvb2wgVXNlckFjdGlvbkVsZW1l
bnRTZXQ6Omhhc0ZsYWdzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKSBj
b25zdAogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAg
IEVsZW1lbnRGbGFnTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fZWxlbWVudHMuZmluZChj
b25zdF9jYXN0PEVsZW1lbnQqPihlbGVtZW50KSk7Ci0gICAgaWYgKGZvdW5kID09IG1fZWxlbWVu
dHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZm91bmQtPnZhbHVl
ICYgZmxhZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKKyAg
ICByZXR1cm4gbV9lbGVtZW50cy5nZXQoY29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQpKSAm
IGZsYWdzOwogfQogCi12b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpjbGVhckZsYWdzKEVsZW1l
bnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQordm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6
Y2xlYXJGbGFncyhFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykKIHsKLSAgICBpZiAo
IWVsZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSkgewotICAgICAgICBBU1NFUlQobV9lbGVt
ZW50cy5lbmQoKSA9PSBtX2VsZW1lbnRzLmZpbmQoZWxlbWVudCkpOworICAgIGlmICghZWxlbWVu
dC5pc1VzZXJBY3Rpb25FbGVtZW50KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2VsZW1lbnRzLmNv
bnRhaW5zKCZlbGVtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbGVtZW50
RmxhZ01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VsZW1lbnRzLmZpbmQoZWxlbWVudCk7CisgICAg
YXV0byBmb3VuZCA9IG1fZWxlbWVudHMuZmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGZvdW5kID09
IG1fZWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1l
bnQoZmFsc2UpOworICAgICAgICBlbGVtZW50LnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHVwZGF0ZWQgPSBmb3VuZC0+
dmFsdWUgJiB+ZmxhZ3M7CiAgICAgaWYgKCF1cGRhdGVkKSB7Ci0gICAgICAgIGVsZW1lbnQtPnNl
dFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5zZXRVc2VyQWN0aW9u
RWxlbWVudChmYWxzZSk7CiAgICAgICAgIG1fZWxlbWVudHMucmVtb3ZlKGZvdW5kKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTc1LDE3ICs3MiwxNiBAQCB2b2lkIFVzZXJBY3Rpb25FbGVt
ZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQogICAg
IGZvdW5kLT52YWx1ZSA9IHVwZGF0ZWQ7CiB9CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6
OnNldEZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQordm9pZCBVc2VyQWN0
aW9uRWxlbWVudFNldDo6c2V0RmxhZ3MoRWxlbWVudCYgZWxlbWVudCwgdW5zaWduZWQgZmxhZ3Mp
CiB7Ci0gICAgRWxlbWVudEZsYWdNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fZWxlbWVudHMuZmlu
ZChlbGVtZW50KTsKLSAgICBpZiAocmVzdWx0ICE9IG1fZWxlbWVudHMuZW5kKCkpIHsKLSAgICAg
ICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIHJlc3Vs
dC0+dmFsdWUgfD0gZmxhZ3M7CisgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnRzLmFkZCgmZWxl
bWVudCwgZmxhZ3MpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgQVNT
RVJUKGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSB8PSBmbGFnczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVsZW1l
bnQtPnNldFVzZXJBY3Rpb25FbGVtZW50KHRydWUpOwotICAgIG1fZWxlbWVudHMuYWRkKGVsZW1l
bnQsIGZsYWdzKTsKKyAgICBlbGVtZW50LnNldFVzZXJBY3Rpb25FbGVtZW50KHRydWUpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5oCmluZGV4IGNlNzY0
YzNlYjgzNzE4NzdiZmU4YTFiODkxNThhNjhiNzI1ZjgzZWYuLmE0YzU5YjkyMGZkOWQxZmRhNDUx
MGYyMThkYzkzODM4ZDIxYmVlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2Vy
QWN0aW9uRWxlbWVudFNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxl
bWVudFNldC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTI3LDggKzI3LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDE2ICszNiwxNyBAQCBjbGFz
cyBFbGVtZW50OwogCiBjbGFzcyBVc2VyQWN0aW9uRWxlbWVudFNldCB7CiBwdWJsaWM6Ci0gICAg
Ym9vbCBpc0ZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3Mo
ZWxlbWVudCwgSXNGb2N1c2VkRmxhZyk7IH0KLSAgICBib29sIGlzQWN0aXZlKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzQWN0aXZlRmxhZyk7IH0K
LSAgICBib29sIGlzSW5BY3RpdmVDaGFpbihjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJldHVy
biBoYXNGbGFncyhlbGVtZW50LCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0KLSAgICBib29sIGlzSG92
ZXJlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJ
c0hvdmVyZWRGbGFnKTsgfQotICAgIHZvaWQgc2V0Rm9jdXNlZChFbGVtZW50KiBlbGVtZW50LCBi
b29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzRm9jdXNlZEZsYWcpOyB9
Ci0gICAgdm9pZCBzZXRBY3RpdmUoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0
RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0FjdGl2ZUZsYWcpOyB9Ci0gICAgdm9pZCBzZXRJbkFj
dGl2ZUNoYWluKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1l
bnQsIGVuYWJsZSwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9Ci0gICAgdm9pZCBzZXRIb3ZlcmVkKEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJsZSwg
SXNIb3ZlcmVkRmxhZyk7IH0KKyAgICBib29sIGlzRm9jdXNlZChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0ZvY3VzZWRGbGFnKTsgfQor
ICAgIGJvb2wgaXNBY3RpdmUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4g
aGFzRmxhZ3MoZWxlbWVudCwgSXNBY3RpdmVGbGFnKTsgfQorICAgIGJvb2wgaXNJbkFjdGl2ZUNo
YWluKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1l
bnQsIEluQWN0aXZlQ2hhaW5GbGFnKTsgfQorICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzSG92ZXJlZEZs
YWcpOyB9CiAKLSAgICB2b2lkIGRpZERldGFjaChFbGVtZW50Kik7CisgICAgdm9pZCBzZXRGb2N1
c2VkKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVu
YWJsZSwgSXNGb2N1c2VkRmxhZyk7IH0KKyAgICB2b2lkIHNldEFjdGl2ZShFbGVtZW50JiBlbGVt
ZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzQWN0aXZlRmxh
Zyk7IH0KKyAgICB2b2lkIHNldEluQWN0aXZlQ2hhaW4oRWxlbWVudCYgZWxlbWVudCwgYm9vbCBl
bmFibGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0K
KyAgICB2b2lkIHNldEhvdmVyZWQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0
RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0hvdmVyZWRGbGFnKTsgfQorCisgICAgdm9pZCBkaWRE
ZXRhY2goRWxlbWVudCYpOwogICAgIHZvaWQgZG9jdW1lbnREaWRSZW1vdmVMYXN0UmVmKCk7CiAK
IHByaXZhdGU6CkBAIC01NiwxMyArNTcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgSXNGb2N1c2Vk
RmxhZyAgICAgPSAxIDw8IDMKICAgICB9OwogCi0gICAgdm9pZCBzZXRGbGFncyhFbGVtZW50KiBl
bGVtZW50LCBib29sIGVuYWJsZSwgdW5zaWduZWQgZmxhZ3MpIHsgZW5hYmxlID8gc2V0RmxhZ3Mo
ZWxlbWVudCwgZmxhZ3MpIDogY2xlYXJGbGFncyhlbGVtZW50LCBmbGFncyk7IH0KLSAgICB2b2lk
IHNldEZsYWdzKEVsZW1lbnQqLCB1bnNpZ25lZCk7Ci0gICAgdm9pZCBjbGVhckZsYWdzKEVsZW1l
bnQqLCB1bnNpZ25lZCk7Ci0gICAgYm9vbCBoYXNGbGFncyhjb25zdCBFbGVtZW50KiwgdW5zaWdu
ZWQgZmxhZ3MpIGNvbnN0OworICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCYgZWxlbWVudCwgYm9v
bCBlbmFibGUsIHVuc2lnbmVkIGZsYWdzKSB7IGVuYWJsZSA/IHNldEZsYWdzKGVsZW1lbnQsIGZs
YWdzKSA6IGNsZWFyRmxhZ3MoZWxlbWVudCwgZmxhZ3MpOyB9CisgICAgdm9pZCBzZXRGbGFncyhF
bGVtZW50JiwgdW5zaWduZWQpOworICAgIHZvaWQgY2xlYXJGbGFncyhFbGVtZW50JiwgdW5zaWdu
ZWQpOworICAgIGJvb2wgaGFzRmxhZ3MoY29uc3QgRWxlbWVudCYsIHVuc2lnbmVkIGZsYWdzKSBj
b25zdDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIHVuc2lnbmVkPiBF
bGVtZW50RmxhZ01hcDsKLSAgICBFbGVtZW50RmxhZ01hcCBtX2VsZW1lbnRzOworICAgIC8vIEZJ
WE1FOiBVbmNsZWFyIHdoeSB0aGlzIG5lZWRzIHRvIGJlIGEgUmVmUHRyLiBTaG91bGQgY2hhbmdl
IHRvIGEgY29uc3QgRWxlbWVudCouCisgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIHVuc2ln
bmVkPiBtX2VsZW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5k
ZXggZDE0NzI0Mjc3MjM3NDY4ZDRmNjFmZmUzM2M3NWZlNDZhODE5MjNkYy4uM2I4ZjlkNzQzNjU4
ZGNhNWI5YTRmNjVlOGY5ZGNkNDgxOTQyZGUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yMDAsNyArMjAwLDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRv
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBw
b3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3Rh
cnRPZmZzZXRJblBhcmFncmFwaAogICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVy
IHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQog
ICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3Rh
cnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCi0gICAgUmVmUHRyPFJhbmdlPiBj
b3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1l
bnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigp
LCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwor
ICAgIGF1dG8gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6
OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5l
cigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0
UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3Np
dGlvbigpKTsKIAogICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0
aXZlID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwogICAgIGlmICghc3RhcnRQb3NpdGlvbk9mUmFu
Z2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQpAQCAtMjEwLDcgKzIxMCw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1Jhbmdl
KGNvbnN0IFJhbmdlJiByYW5nZSwKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGFrZSBub3Rl
IG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFy
a2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKKyAgICBpbnQgY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5wdHIoKSk7CiAKICAgICAvLyBD
bG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQg
dG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgogICAgIGF1dG8gcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUgPSByYW5nZS5jbG9uZVJhbmdlKCk7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29u
c3QgUmFuZ2UmIHJhbmdlLAogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9
IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7
CiAKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6IG1hcmtlclR5cGVzVG9BZGQpCi0gICAgICAg
IG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIG1h
cmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUs
IG1hcmtlclR5cGUpKTsKKyAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJlcGxhY2VtZW50UmFu
Z2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4
dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0
ZSgpCkBAIC0yNjYsMTIgKzI2NiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlUwogICAgIFJl
ZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwogICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0KCk7CiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9u
cygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9m
cmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7
Ci0gICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLmFkZE1h
cmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAg
ICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChj
b25zdCBTdHJpbmcmIHJlc3UKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKICAgICAgICAg
ICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJl
c3VsdCwgbV90eXBlLCBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwogICAgICAgICBl
bHNlIGlmICghbV9pc0Rpc21pc3NlZEJ5RWRpdGluZykKLSAgICAgICAgICAgIHJhbmdlV2l0aEFs
dGVybmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlv
biwgbV9vcmlnaW5hbFRleHQpOworICAgICAgICAgICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCpyYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9vcmlnaW5h
bFRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZl
cnNpb246CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoK
QEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbgogICAgICAgICByZXR1
cm47CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGZv
ciAoYXV0byogbWFya2VyIDogbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihu
b2RlKSkgeworICAgIGZvciAoYXV0byogbWFya2VyIDogbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJz
KCkubWFya2Vyc0Zvcigqbm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG1hcmtlcik7CiAgICAgICAg
IGlmIChyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCgqbWFya2VyLCBwb3NpdGlvbikpCiAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ0MSwxMiArNDQxLDEwIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0
aW9uCiB7CiAgICAgaWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJh
bWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21t
YW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAg
ICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIo
cmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAg
ICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5k
LT5zdGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9u
KCkuZW5kKCkpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCgpCkBAIC00NzQsOCAr
NDcyLDggQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG8KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUmFuZ2UmIGNoYW5nZWRSYW5nZSkKIHsKLSAgICBjaGFu
Z2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKCZjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAg
ICBjaGFuZ2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXIoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRp
b24pOworICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJl
Y3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGlu
Z01hcmtlcik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hl
Y2tpbmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtDb3JyZWN0aW9uKFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nKQpAQCAtNDgzLDkgKzQ4MSw5IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6bWFya0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluCiAgICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBl
IDogbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJU
eXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIo
JnJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgICAg
IG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3Ry
aW5nKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoJnJlcGxh
Y2VkUmFuZ2UsIG1hcmtlclR5cGUpOworICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVw
bGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CiAgICAgfQogfQogCkBAIC01MDUsNyArNTAzLDcgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25z
ZUZvck1vZGlmaWVkQ29ycmVjdGlvbigKICAgICAgICAgICAgIGNsaWVudC0+cmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpFZGl0ZWQsIGNvcnJlY3Rl
ZCwgY29ycmVjdGlvbik7CiAgICAgfQogCi0gICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKCZyYW5n
ZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1h
cmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRl
bGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBj
b25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQpAQCAtNTI0LDE1ICs1MjIsMTUgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0
ZWRBdXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hh
cmFjdGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCks
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5n
IHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAg
YXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9j
dW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAg
ICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLnB0cigp
KTsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRl
c3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFu
IGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCiAgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYg
dGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0
aW9uLCB3ZQogICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0IGl0IGFnYWluLgotICAgIG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0
cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIG1fZnJhbWUuZG9jdW1lbnQo
KS0+bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxl
dGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNr
aW5nUmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCkBAIC01NzMsMjEgKzU3MSwxOSBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERv
Y3VtZW50TWFya2VyJgogICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9m
V29yZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7
Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRv
Y3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zm
c2V0KCkpOwotICAgIGlmICghd29yZFJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
U3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgYXV0
byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1h
cmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UucHRyKCkpOwogICAgIGlmICghY3Vy
cmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX29yaWdpbmFs
VGV4dCA9IGN1cnJlbnRXb3JkOwogICAgIHN3aXRjaCAobWFya2VyLnR5cGUoKSkgewogICAgIGNh
c2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgotICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0
aXZlID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGTW92
ZSh3b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBlbXB0eVN0cmluZygpOwogICAgICAg
ICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5n
U3VnZ2VzdGlvbnMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudDoKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsK
KyAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURk1vdmUod29yZFJhbmdlKTsKICAg
ICAgICAgbV9kZXRhaWxzID0gbWFya2VyLmRlc2NyaXB0aW9uKCk7CiAgICAgICAgIHN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uKTsKICAgICAg
ICAgYnJlYWs7CkBAIC01OTcsNyArNTkzLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAg
ICAgICAgYXV0byYgbWFya2VyRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRp
b25EYXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1hcmtl
ckRhdGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBt
X3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFs
dGVybmF0aXZlID0gV1RGTW92ZSh3b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBtYXJr
ZXJEYXRhLmNvbnRleHQ7CiAgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRl
cm5hdGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGQ2ZmQ3M2My
M2FjYjMxNzM1ZDhjNmQzYWY1NmEzYWI3ZmI4MTkyNjguLjFlMjM1ZjZiNGRjNjNmZmZkMjVjYjM3
ZTZkYWNhNDY4M2Y1YWEzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCkBAIC03NjgsMTMgKzc2OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQmIG5vZGUs
IHVuc2lnbgogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9
IGRvY3VtZW50KCkubWFya2VycygpOwogICAgIGF1dG8gbWFya2VycyA9IGNvcHlNYXJrZXJzKG1h
cmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAm
bm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBEb2N1bWVudE1hcmtlcjo6YWxs
TWFya2VycygpKSk7CiAgICAgcmVwbGFjZVRleHRJbk5vZGUobm9kZSwgb2Zmc2V0LCBjb3VudCwg
cmVwbGFjZW1lbnRUZXh0KTsKLSAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1l
bnRUZXh0Lmxlbmd0aCgpKTsKKyAgICBhdXRvIG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxl
bmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCiAjaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZS5n
ZXQoKSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtlci5hbHRlcm5h
dGl2ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOworICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFk
ZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1h
cmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOwogI2Vsc2UKLSAgICAgICAg
bWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBlKCks
IG1hcmtlci5kZXNjcmlwdGlvbigpKTsKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAg
IG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLCBtYXJrZXIudHlwZSgpLCBtYXJr
ZXIuZGVzY3JpcHRpb24oKSk7CisjZW5kaWYKIH0KIAogUG9zaXRpb24gQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKaW5kZXggMjgyYmRj
OWUzMTViNzJjMjVhZDViZTgyYzZiZjA3MTRkNWMxN2FiOS4uNzkwNjY1ZmQ2NzJkZmI0ZDZlMjE2
ODExMmM1NzRlMWU0YTE3YzNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
aWN0YXRpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlv
bkNvbW1hbmQuY3BwCkBAIC02MSw5ICs2MSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGljdGF0aW9uTWFya2VyU3VwcGxpZXIoYWx0ZXJuYXRpdmVzKSk7CiAgICAg
fQogCi0gICAgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiB0ZXh0Tm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNlcnRlZCkgb3Zl
cnJpZGUKKyAgICB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRleHQmIHRleHROb2RlLCB1bnNp
Z25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0VG9CZUluc2VydGVkKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgYXV0byYgbWFya2VyQ29udHJvbGxlciA9IHRleHROb2Rl
LT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICAgICAgYXV0byYgbWFya2VyQ29udHJvbGxlciA9
IHRleHROb2RlLmRvY3VtZW50KCkubWFya2VycygpOwogICAgICAgICBmb3IgKGF1dG8mIGFsdGVy
bmF0aXZlIDogbV9hbHRlcm5hdGl2ZXMpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25EYXRhIGRhdGEgeyBhbHRlcm5hdGl2ZS5kaWN0YXRpb25Db250ZXh0LCB0ZXh0VG9C
ZUluc2VydGVkLnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5y
YW5nZUxlbmd0aCkgfTsKICAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyVG9O
b2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ICsgb2Zmc2V0T2ZJbnNlcnRpb24s
IGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVzLCBXVEZNb3ZlKGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4
IGU3OWI2NDZlMjI4OTcyMDA1ZTU4ZmU1MGZiYzI5NTMyMDNjYjdhZTMuLmEyZDg1MzgyZWE4OGYz
NTAxM2MxYzk2MzI0YjVkM2VlNjlhODdjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNw
cApAQCAtMTE2NSw3ICsxMTY1LDcgQEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBO
b2RlJiBmaXJzdCwgY29uc3QgTm9kZSYgc2Vjb25kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYXV0byYgZmlyc3RFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oZmlyc3QpOwogICAgIGF1
dG8mIHNlY29uZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzZWNvbmQpOwotICAgIHJldHVy
biBmaXJzdEVsZW1lbnQuaGFzVGFnTmFtZShzZWNvbmRFbGVtZW50LnRhZ1FOYW1lKCkpICYmIGZp
cnN0RWxlbWVudC5oYXNFcXVpdmFsZW50QXR0cmlidXRlcygmc2Vjb25kRWxlbWVudCk7CisgICAg
cmV0dXJuIGZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNlY29uZEVsZW1lbnQudGFnUU5hbWUoKSkg
JiYgZmlyc3RFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKHNlY29uZEVsZW1lbnQpOwog
fQogCiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKiBub2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDY0MjUxY2YxZGM3ZjY5ZjVjYWJhY2E3
MDlkZWM1YzdlODc2NTk1ZTAuLjhhYjBhMWUwY2VmZWJmNTNiMWQwMTU2YjRiMDY5YTliZTI1NWYx
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE5MTgsNyArMTkxOCw3IEBAIHZv
aWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgICAgIAogICAgIFJlZlB0cjxSYW5nZT4g
c2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
OworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxl
Y3RlZFRleHQoKTsKICAgICBBU1NFUlQodGV4dC5sZW5ndGgoKSk7CkBAIC0xOTM0LDcgKzE5MzQs
NyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAKICAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoc2VsZWN0ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
KyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0
ZWRUZXh0KCk7CiAgICAgQVNTRVJUKHRleHQubGVuZ3RoKCkpOwpAQCAtMjEwMCwxMiArMjEwMCwx
MiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiAgICAgICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uICE9IC0x
ICYmIGdyYW1tYXJEZXRhaWwubGVuZ3RoID4gMCk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhN
RSA0ODU5MTkwOiBUaGlzIGdldHMgY29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0
IHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGgKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFy
UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIGdyYW1t
YXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLmxl
bmd0aCk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oKmJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAg
ICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpncmFtbWFy
U2VhcmNoUmFuZ2UsIGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9u
LCBncmFtbWFyRGV0YWlsLmxlbmd0aCk7CisgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9B
RkZJTklUWSkpOwogICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigp
OwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKLSAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKICAgICB9IGVs
c2UKICNlbmRpZgogICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7CkBAIC0yMTE3
LDcgKzIxMTcsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFs
U2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlz
c3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICB9CiB9CiAKQEAg
LTIyNTAsMTMgKzIyNTAsMTAgQEAgYm9vbCBFZGl0b3I6OnNwZWxsaW5nUGFuZWxJc1Nob3dpbmco
KQogICAgIHJldHVybiBjbGllbnQoKS0+c3BlbGxpbmdVSUlzU2hvd2luZygpOwogfQogCi12b2lk
IEVkaXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKK3ZvaWQgRWRpdG9yOjpjbGVhck1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbW92aW5nU2VsZWN0aW9uKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1vdmluZ1NlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgIGRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFy
a2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7Ci0gICAg
fQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtb3ZpbmdTZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygq
c2VsZWN0ZWRSYW5nZSwgeyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyIH0pOwogfQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aW9uKQpAQCAtMjU3OCwx
NCArMjU3NSwxNCBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxD
aGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgYXV0byBt
aXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1
bHRMZW5ndGgpOwogICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFuZ2UpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5wdHIo
KSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CisgICAgICAgICAgICBt
aXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxh
Y2VtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHRU
eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBhcmFncmFwaC5jaGVja2luZ1Jhbmdl
Q292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpKSB7CiAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0c1tpXS5kZXRhaWxzKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGRldGFpbC5sZW5ndGggPiAwICYmIGRldGFpbC5sb2NhdGlvbiA+PSAwKTsKICAg
ICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9j
YXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5ndGgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwubGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpHcmFt
bWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgYmFkR3Jh
bW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwudXNlckRl
c2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzdWx0RW5kTG9jYXRpb24gPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiBy
ZXN1bHRFbmRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpCkBAIC0yNjk5LDcg
KzI2OTYsNyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdy
YXBoKCpzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0
cmluZywgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uSW5zZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRS
YW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBs
YWNlZFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UucHRyKCksIERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOworICAgIGNoYW5nZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKICAgICBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UpOwogI2Vsc2UKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI4MTQsNyArMjgxMSw3IEBAIHZvaWQgRWRpdG9y
Ojp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3Zl
SWZTZWxlY3Rpb25BCiAgICAgICAgIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLAogI2VuZGlmCiAg
ICAgfTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5w
dHIoKSwgbWFya2VyVHlwZXNUb1JlbW92ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UsIG1hcmtlclR5cGVzVG9SZW1vdmUsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIGRv
Y3VtZW50KCkubWFya2VycygpLmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdS
YW5nZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKQEAgLTMy
OTksNyArMzI5Niw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAKICAgICB1bnNpZ25lZCBt
YXRjaENvdW50ID0gMDsKICAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFu
Z2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyAmIH5CYWNrd2Fy
ZHMpKTsKKyAgICAgICAgYXV0byByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5n
ZSwgdGFyZ2V0LCBvcHRpb25zICYgfkJhY2t3YXJkcykpOwogICAgICAgICBpZiAocmVzdWx0UmFu
Z2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0z
MzExLDEwICszMzA4LDEwIEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChj
b25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAKICAgICAgICAgKytt
YXRjaENvdW50OwogICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICAgIG1hdGNoZXMtPmFw
cGVuZChyZXN1bHRSYW5nZSk7CisgICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQocmVzdWx0UmFu
Z2UucHRyKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKG1hcmtNYXRjaGVzKQotICAgICAgICAg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAKICAg
ICAgICAgLy8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxp
bWl0IG9mIDAgbWVhbnMgbm8gbGltaXQuCiAgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hD
b3VudCA+PSBsaW1pdCkKQEAgLTM0NjEsMTAgKzM0NTgsMTAgQEAgdm9pZCBFZGl0b3I6OnNjYW5S
YW5nZUZvclRlbGVwaG9uZU51bWJlcnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmdWaWV3JiBz
dHJpbmcKICAgICAgICAgdW5zaWduZWQgc3VicmFuZ2VPZmZzZXQgPSBzY2FubmVyUG9zaXRpb24g
KyByZWxhdGl2ZVN0YXJ0UG9zaXRpb247CiAgICAgICAgIHVuc2lnbmVkIHN1YnJhbmdlTGVuZ3Ro
ID0gcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiArIDE7CiAKLSAg
ICAgICAgUmVmUHRyPFJhbmdlPiBzdWJyYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFu
Z2UsIHN1YnJhbmdlT2Zmc2V0LCBzdWJyYW5nZUxlbmd0aCk7CisgICAgICAgIGF1dG8gc3VicmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHJhbmdlLCBzdWJyYW5nZU9mZnNldCwgc3VicmFu
Z2VMZW5ndGgpOwogCi0gICAgICAgIG1hcmtlZFJhbmdlcy5hcHBlbmQoc3VicmFuZ2UpOwotICAg
ICAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihzdWJyYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7CisgICAgICAgIG1hcmtlZFJh
bmdlcy5hcHBlbmQoc3VicmFuZ2UucHRyKCkpOworICAgICAgICByYW5nZS5vd25lckRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcihzdWJyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9u
ZU51bWJlcik7CiAKICAgICAgICAgc2Nhbm5lclBvc2l0aW9uICs9IHJlbGF0aXZlRW5kUG9zaXRp
b24gKyAxOwogICAgIH0KQEAgLTM1MjksMTEgKzM1MjYsMTEgQEAgdm9pZCBFZGl0b3I6OmVkaXRv
clVJVXBkYXRlVGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRl
eHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZykpIHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdv
cmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAg
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVj
a2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2lu
Z1R5cGVHcmFtbWFyKSkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VS
YW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAg
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6R3JhbW1hcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM1NzUsNyArMzU3Miw3IEBAIGJv
b2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSBtYXJrZXJUeXBlLCBpCiAKICAgICB1bnNpZ25lZCBpbnQgc3RhcnRPZmZzZXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20pOwogICAgIHVuc2lnbmVkIGludCBlbmRPZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20gKyBsZW5ndGgpOwotICAgIFZlY3Rv
cjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2Vycygp
Lm1hcmtlcnNGb3Iobm9kZSk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBt
YXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSk7CiAgICAgZm9y
IChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zm
c2V0KCkgPD0gc3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IG1hcmtlci0+ZW5kT2Zmc2V0KCkg
JiYgbWFya2VyLT50eXBlKCkgPT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzY5Myw3ICszNjkwLDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlk
YXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAogICAgIFJlZlB0cjxS
YW5nZT4gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJ
bkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0
ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3RoKCksIERpcmVjdGlvbkJhY2t3YXJkKTsKICAg
ICBpZiAoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSkKLSAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoaW5z
ZXJ0ZWRDYW5kaWRhdGVSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlk
YXRlLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CisgICAgICAgIGluc2VydGVkQ2Fu
ZGlkYXRlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKCppbnNlcnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5k
aWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKIAogICAgIG1faXNIYW5kbGlu
Z0FjY2VwdGVkQ2FuZGlkYXRlID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGVmZDg2NTA5YTE1ZTZjNThkYmM5YTcwZjE5OTBi
ZjZmNTkwMmZkYzIuLmZiY2QyZmZmYWVlZWQ0NTI2OTAxMzU3Y2E2MzU4YzIyYTFjYTQ0YTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0yMDYs
NyArMjA2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlu
c2VydFRleHRJbnRvTm9kZSgqdGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKICAgICAgICAgZW5k
UG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0
aCgpKTsKICAgICAgICAgaWYgKG1fbWFya2VyU3VwcGxpZXIpCi0gICAgICAgICAgICBtX21hcmtl
clN1cHBsaWVyLT5hZGRNYXJrZXJzVG9UZXh0Tm9kZSh0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0LCBt
X3RleHQpOworICAgICAgICAgICAgbV9tYXJrZXJTdXBwbGllci0+YWRkTWFya2Vyc1RvVGV4dE5v
ZGUoKnRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAKICAgICAgICAgaWYgKG1fcmViYWxhbmNl
VHlwZSA9PSBSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcykgewogICAgICAg
ICAgICAgLy8gVGhlIGluc2VydGlvbiBtYXkgcmVxdWlyZSBhZGp1c3RpbmcgYWRqYWNlbnQgd2hp
dGVzcGFjZSwgaWYgaXQgaXMgcHJlc2VudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
VGV4dENvbW1hbmQuaAppbmRleCA5YmM4YjM5OTU2N2VkNzUyYWFkMTk0YjQ2ZDg2MTMyMmQyNmQ3
NjEwLi4xMmVhOWQ0NDYwNjUxOTc2NmFmZGMwNTcyZmI1N2YzZGE1NjI0M2M4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCkBAIC0zNSw3ICszNSw3IEBAIGNs
YXNzIFRleHQ7CiBjbGFzcyBUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXI+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5UZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
YWRkTWFya2Vyc1RvVGV4dE5vZGUoVGV4dCosIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBj
b25zdCBTdHJpbmcmIHRleHRJbnNlcnRlZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJr
ZXJzVG9UZXh0Tm9kZShUZXh0JiwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0
cmluZyYgdGV4dEluc2VydGVkKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dEluc2VydGlvbk1h
cmtlclN1cHBsaWVyKCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCmluZGV4IGEyOTRiYjMwMzdhNDgxYjc0MDQyZmI3ZDUxYmQ2MjRmN2U5Zjk4YjIuLmFmYzk0
Yzk5ZmU2MjVlNjhlYWUyNTYyNjU2Y2UxZWFiYzdiNzUyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZGlkQ2hlY2tTdWNjZWVkKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdAogICAgICAgICBpZiAocmVxdWVzdERhdGEubWFzaygpICYgVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXIpCiAgICAgICAgICAgICBtYXJrZXJUeXBlcyB8PSBEb2N1bWVudE1hcmtlcjo6R3Jh
bW1hcjsKICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBt
X2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCZtX3Byb2Nlc3NpbmdS
ZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVz
dC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKHNl
cXVlbmNlLCByZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHAKaW5kZXggOWFkMDkwZjA4Zjc0NzA5Y2FkMTE3NThhNTc0NjRiOThh
ZTA0YTBhNS4uOWI3NzYxMDJmOWYxNWFjOTY2ODk5MzgwOTdjYjIyZWVhMmZkMGJiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTYy
LDcgKzYyLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBt
X3RleHQxID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUocHJlZml4VGV4dCkpOwog
ICAgIEFTU0VSVChtX3RleHQxKTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2Vy
cyhtX3RleHQyLnB0cigpLCAwLCBtX29mZnNldCwgbV90ZXh0MS5nZXQoKSwgMCk7CisgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0MiwgMCwgbV9vZmZzZXQsICptX3Rl
eHQxLCAwKTsKIAogICAgIGluc2VydFRleHQxQW5kVHJpbVRleHQyKCk7CiB9CkBAIC03OCw3ICs3
OCw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiAKICAgICBtX3Rl
eHQyLT5pbnNlcnREYXRhKDAsIHByZWZpeFRleHQpOwogCi0gICAgZG9jdW1lbnQoKS5tYXJrZXJz
KCkuY29weU1hcmtlcnMobV90ZXh0MS5nZXQoKSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90
ZXh0Mi5wdHIoKSwgMCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMoKm1f
dGV4dDEsIDAsIHByZWZpeFRleHQubGVuZ3RoKCksIG1fdGV4dDIsIDApOwogICAgIG1fdGV4dDEt
PnJlbW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5jcHAKaW5kZXggZjY1NDEwNjRiZmUzODk1YjkwMjIwZTRhNTMxYzllZmQxYjJmOTM2ZS4u
OGQ5NTgyNDAzNTZkYzc3MmM1YTU3MmFjZDAyNDAwYTM4ODg5Y2YxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjUyLDE3ICsyNTIsMTcg
QEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBm
aXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib28KIAogICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2Nh
dGlvbiA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9u
IDwgdGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoICYmIG1pc3Nw
ZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoKSB7CiAgICAg
ICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAotICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSht
X3JhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7CisgICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5n
TG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIAogICAgICAgICAgICAgLy8gUmVtZW1iZXIg
Zmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCiAgICAgICAgICAg
ICBpZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsKICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxs
aW5nT2Zmc2V0ID0gY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKICAg
ICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gdGV4dC5zdWJzdHJpbmcobWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgZmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAgICAgICAg
ICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlLnB0cigpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9yIG1pc3NwZWxsZWQg
d29yZC4KLSAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgICAgICAgICAvLyBCYWlsIG91
dCBpZiB3ZSdyZSBtYXJraW5nIG9ubHkgdGhlIGZpcnN0IG1pc3NwZWxsaW5nLCBhbmQgbm90IGFs
bCBpbnN0YW5jZXMuCiAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCkBAIC00MjYsOCArNDI2LDgg
QEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBW
ZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKG1hcmtBbGwpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFk
R3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLCBiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+
bGVuZ3RoKTsKLSAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOworICAgICAgICAg
ICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2Us
IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5sb2NhdGlv
biwgZGV0YWlsLT5sZW5ndGgpOworICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgZGV0YWlsIG9ubHkgaWYg
aXQncyBlYXJsaWVyIHRoYW4gb3VyIGN1cnJlbnQgY2FuZGlkYXRlICh0aGUgZGV0YWlscyBhcmVu
J3QgaW4gYSBndWFyYW50ZWVkIG9yZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCBjMTkzMmRlZTFkYTRhOGQyYWFiZTI2
NjIwMWZmMDA0MTE5NDYyNmU5Li5lZTkzOTlhNzZkMjU4NWY4NTcxZTkzMGJlYjFlZDNkMWYxYmQw
M2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21t
YW5kSU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21t
YW5kSU9TLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRv
QXBwbHkoKQogICAgICAgICBpbnB1dFRleHQoZmlyc3RJbnRlcnByZXRhdGlvbiwgdHJ1ZSk7CiAK
ICAgICAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXplKCkgPiAxKQotICAgICAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cihlbmRpbmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBpbnRlcnByZXRh
dGlvbnMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcigqZW5kaW5nU2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSwgaW50ZXJwcmV0YXRpb25zKTsKIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKTsKICAgICB9
CkBAIC03MSw3ICs3MSw4IEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAK
ICAgICBpZiAoc3RhcnRJbmRleCA+PSAwKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0
UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCksIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0cnVlKTsKLSAgICAg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3VsdFJh
bmdlLmdldCgpLCBtX21ldGFkYXRhKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdFJhbmdlKTsgLy8g
RklYTUU6IFdoYXQgZ3VhcmFudGVlcyB0aGlzPworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBtX21ldGFkYXRhKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCmluZGV4IDM0YmYyNzk3
ZDE0M2QxOTM1NzdjMmQ4ZTU5NmJjMjFjMmY2MmE2NWMuLjBlOGQ5NjI5OTQyZDU3OWUzNDY4YzBm
ODlhZjQ4NWJjMTY4ZDg0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcApA
QCAtMTMyLDcgKzEzMiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEZpbGVSZWFkZXI6OnJlYWRJbnRl
cm5hbChCbG9iJiBibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwCiAgICAgaWYgKG1fc3Rh
dGUgPT0gTE9BRElORykKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CiAKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIAogICAgIG1fYmxvYiA9ICZibG9iOwogICAgIG1fcmVhZFR5cGUgPSB0
eXBlOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6YWJvcnQoKQogICAgICAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCk7CiAKICAgICAgICAgLy8gQWxs
IHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRp
bmcgYWN0aXZpdHkuCi0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAg
ICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfSk7CiB9CiAKQEAgLTIwNCw3ICsy
MDQsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcoKQogICAgIGZpcmVFdmVu
dChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKICAgICAKICAgICAvLyBBbGwgcG9zc2libGUg
ZXZlbnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0
eS4KLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rp
dml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2Rl
KQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JD
b2RlKQogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKICAgICAKICAg
ICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1v
cmUgcGVuZGluZyBhY3Rpdml0eS4KLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAg
ICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6Zmly
ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAKaW5kZXggODVkYjQzODNlZmZhNjFkNDExMTk2OGQ3MDY1MjRiY2Yx
NzgyNmY4NC4uODE0ZTkxNmY5YmZmMTFkNGQ2ZjVjMjBkMzY4ODRlOTUxNDliZDE5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAK
ICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEZXRhaWxzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxl
bWVudC5jcHAKaW5kZXggYzNmNDk4NDUwZmZhN2Y4ZTE3MDZiZmMwODhlNTBiM2ZmOWU5ODZhNS4u
NDg0YmNiNzZjMWUwMDEyMDU1Yjc4NzQ4Y2MyOTVlNTY2NTkyNDc4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIFJlbmRl
clB0cjxSZW5kZXJFbGVtZW50PiBIVE1MRGV0YWlsc0VsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5k
ZXJlcihSZW5kZXJTdHlsZSYmCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2Nr
Rmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAotdm9pZCBIVE1MRGV0YWlsc0VsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRN
TERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJv
b3QpCiB7CiAgICAgYXV0byBzdW1tYXJ5U2xvdCA9IEhUTUxTbG90RWxlbWVudDo6Y3JlYXRlKHNs
b3RUYWcsIGRvY3VtZW50KCkpOwogICAgIHN1bW1hcnlTbG90LT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKG5hbWVBdHRyLCBzdW1tYXJ5U2xvdE5hbWUoKSk7CkBAIC0xMTUsNyAr
MTE1LDcgQEAgdm9pZCBIVE1MRGV0YWlsc0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCogcm9vdCkKICAgICBtX2RlZmF1bHRTdW1tYXJ5ID0gZGVmYXVsdFN1bW1h
cnkucHRyKCk7CiAKICAgICBzdW1tYXJ5U2xvdC0+YXBwZW5kQ2hpbGQoZGVmYXVsdFN1bW1hcnkp
OwotICAgIHJvb3QtPmFwcGVuZENoaWxkKHN1bW1hcnlTbG90KTsKKyAgICByb290LmFwcGVuZENo
aWxkKHN1bW1hcnlTbG90KTsKIAogICAgIG1fZGVmYXVsdFNsb3QgPSBIVE1MU2xvdEVsZW1lbnQ6
OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgpKTsKICAgICBBU1NFUlQoIW1faXNPcGVuKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oCmluZGV4IGYxYzQ2ZmYzNWQ3NjYy
NGFmZWUzZWNlYjY0MjA0MjM2MmYyZDNiZjAuLmU0ODM2NTcxNjAzODQ2ODAyZTg3YTJjMTc4ZTk3
N2IwMWQzYThkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuaApA
QCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBj
cmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikgZmluYWw7CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAgICAgYm9vbCBoYXNDdXN0b21Gb2N1c0xv
Z2ljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBtX2lzT3BlbiB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggY2JkZmRkM2Vm
Y2FhZGFmOGZiZjQwMGI2YzI1NDgwYTQzYWVkMzIwMy4uODFlZjE3ZWZiMTRjOWRmZmZiYjg4OWRh
NTllOTIzOTdlZTU4N2E0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAt
ODgsNiArODgsMTYgQEAgSFRNTERvY3VtZW50OjpIVE1MRG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBj
b25zdCBVUkwmIHVybCwgRG9jdW1lbnRDbGFzc0ZsYWdzIGRvY3UKICAgICBjbGVhclhNTFZlcnNp
b24oKTsKIH0KIAorUmVmPEhUTUxEb2N1bWVudD4gSFRNTERvY3VtZW50OjpjcmVhdGUoRnJhbWUq
IGZyYW1lLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1M
RG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3VtZW50Q2xhc3MpKTsKK30KKworUmVmPEhUTUxE
b2N1bWVudD4gSFRNTERvY3VtZW50OjpjcmVhdGVTeW50aGVzaXplZERvY3VtZW50KEZyYW1lJiBm
cmFtZSwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERv
Y3VtZW50KCZmcmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcywgU3ludGhlc2l6ZWQpKTsKK30K
KwogSFRNTERvY3VtZW50Ojp+SFRNTERvY3VtZW50KCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5oCmluZGV4IDIzZGU0ZGMxYzY4NWEyOGEyZjQwZThhY2Q1Y2YwYTZkOGZjMjdjNmYu
LjFjZDVjMTE1NGRhOGQ2NTZkYTgyNWQyNzEwMDBmMjdjZmJiODYwNjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuaApAQCAtMjgsMTYgKzI4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBIVE1MRG9jdW1lbnQgOiBwdWJsaWMgRG9jdW1lbnQgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8SFRNTERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVy
bCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudChmcmFt
ZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcykpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWY8SFRN
TERvY3VtZW50PiBjcmVhdGVTeW50aGVzaXplZERvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3Qg
VVJMJiB1cmwpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1l
bnQoZnJhbWUsIHVybCwgSFRNTERvY3VtZW50Q2xhc3MsIFN5bnRoZXNpemVkKSk7Ci0gICAgfQot
CisgICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSosIGNvbnN0IFVSTCYp
OworICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50PiBjcmVhdGVTeW50aGVzaXplZERvY3VtZW50
KEZyYW1lJiwgY29uc3QgVVJMJik7CiAgICAgdmlydHVhbCB+SFRNTERvY3VtZW50KCk7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBpbnQgd2lkdGgoKTsKQEAgLTY0LDcgKzU2LDcgQEAgcHJvdGVjdGVk
OgogICAgIEhUTUxEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIERvY3VtZW50Q2xhc3NGbGFn
cyA9IDAsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBpc0ZyYW1lU2V0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0ZyYW1lU2V0KCkg
Y29uc3QgZmluYWw7CiAgICAgUmVmPERvY3VtZW50UGFyc2VyPiBjcmVhdGVQYXJzZXIoKSBvdmVy
cmlkZTsKICAgICBSZWY8RG9jdW1lbnQ+IGNsb25lRG9jdW1lbnRXaXRob3V0Q2hpbGRyZW4oKSBj
b25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4
IGUzMjU2N2EyZWExNGE5NWY2ZTk2OGU4OWQxNGE4NDkyYjA1NGM1YmMuLmUxYWRkMjYwMjM0ZmEz
YjAzNDcyNDI5MjE0MjNmY2E5ODQxM2E4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgSFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1F
bGVtZW50KCkKIHsKICAgICBkb2N1bWVudCgpLmZvcm1Db250cm9sbGVyKCkud2lsbERlbGV0ZUZv
cm0odGhpcyk7CiAgICAgaWYgKCFzaG91bGRBdXRvY29tcGxldGUoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAg
ICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
KnRoaXMpOwogCiAgICAgbV9kZWZhdWx0QnV0dG9uID0gbnVsbHB0cjsKICAgICBmb3IgKGF1dG8m
IGFzc29jaWF0ZWRFbGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpCkBAIC00MzEsOSArNDMx
LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmkKICAgICAgICAgbV9hdHRyaWJ1dGVzLnNldEFj
Y2VwdENoYXJzZXQodmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gYXV0b2NvbXBsZXRlQXR0
cikgewogICAgICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKQotICAgICAgICAgICAgZG9j
dW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoKnRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICBkb2N1
bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwog
ICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFs
dWUpOwogfQpAQCAtODAyLDggKzgwMiw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXN1bWVG
cm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpkaWRNb3ZlVG9O
ZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkK
IHsKICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKSB7Ci0gICAgICAgIG9sZERvY3VtZW50
LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgICAg
IGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7
CisgICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja3MoKnRoaXMpOworICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogCiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1v
dmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCmluZGV4IGQzMDMyMmRjMGM0OGZiODIwNmVhYmI2
NmNhZWYyYjhmZTY5N2I2NGYuLjNiYjdlNGE3ZTdiMGQ1YzI5ZGRhZDYzM2ZlMzI1YzcwYzVmZGIw
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0yOCw3
ICsyOCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkRPTVRv
a2VuTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5j
bHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAppbmRleCBjMDhjZjMzNzBjMmEzMWFkMzAzM2I5ZjYxOGZhOTVkMDAy
MzA2Y2MxLi42OGIxYjRlZmZiMmEyNDdlZWM5MWFkYTY3YzQzZjBmYzA2MDE0ZDkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCBI
VE1MSW1hZ2VMb2FkZXImIEhUTUxJbnB1dEVsZW1lbnQ6OmVuc3VyZUltYWdlTG9hZGVyKCkKICAg
ICByZXR1cm4gKm1faW1hZ2VMb2FkZXI7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlk
QWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikKK3ZvaWQgSFRNTElucHV0RWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikKIHsKICAgICBtX2lucHV0
VHlwZS0+Y3JlYXRlU2hhZG93U3VidHJlZSgpOwogICAgIHVwZGF0ZUlubmVyVGV4dEVsZW1lbnRF
ZGl0YWJpbGl0eSgpOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikKIEhUTUxJbnB1dEVsZW1lbnQ6
On5IVE1MSW5wdXRFbGVtZW50KCkKIHsKICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2so
KSkKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogCiAgICAgLy8gTmVlZCB0byByZW1vdmUgZm9ybSBh
c3NvY2lhdGlvbiB3aGlsZSB0aGlzIGlzIHN0aWxsIGFuIEhUTUxJbnB1dEVsZW1lbnQKICAgICAv
LyBzbyB0aGF0IHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBjYWxsZWQgY29ycmVjdGx5LgpAQCAtMTU2
LDcgKzE1Niw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAv
LyBzZXRGb3JtKDApIG1heSByZWdpc3RlciB0aGlzIHRvIGEgZG9jdW1lbnQtbGV2ZWwgcmFkaW8g
YnV0dG9uIGdyb3VwLgogICAgIC8vIFdlIHNob3VsZCB1bnJlZ2lzdGVyIGl0IHRvIGF2b2lkIGFj
Y2Vzc2luZyBhIGRlbGV0ZWQgb2JqZWN0LgogICAgIGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAg
ICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJlbW92
ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5mb3JtQ29udHJvbGxlcigpLnJhZGlv
QnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKQogICAgICAgICBkb2N1bWVudCgp
LmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CkBAIC05MDYsNyArOTA2LDcgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxk
RXZlbnRCZWhhdmlvciBldmVudEIKICAgICBpbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAK
ICAgICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3Vwcygp
KQotICAgICAgICBidXR0b25zLT51cGRhdGVDaGVja2VkU3RhdGUodGhpcyk7CisgICAgICAgIGJ1
dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSgqdGhpcyk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgIHJlbmRlcmVyKCkt
PnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigpLCBDb250cm9sU3RhdGVzOjpDaGVja2Vk
U3RhdGUpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CkBAIC0xNDI1LDEzICsxNDI1LDEzIEBAIGJv
b2wgSFRNTElucHV0RWxlbWVudDo6bmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKQogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpyZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCkKIHsK
ICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKLSAgICAgICAgZG9jdW1lbnQoKS5y
ZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9
CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dW5yZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFj
a0lmTmVlZGVkKCkKIHsKICAgICBpZiAoIW5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAg
ICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1JlcXVpcmVk
Rm9ybUNvbnRyb2woKSBjb25zdApAQCAtMTUzMCwxMSArMTUzMCwxMSBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9j
dW1lbnQmIG5ldwogCiAgICAgLy8gQWx3YXlzIHVucmVnaXN0ZXIgZm9yIGNhY2hlIGNhbGxiYWNr
cyB3aGVuIGxlYXZpbmcgYSBkb2N1bWVudCwgZXZlbiBpZiB3ZSB3b3VsZCBvdGhlcndpc2UgbGlr
ZSB0byBiZSByZWdpc3RlcmVkCiAgICAgaWYgKG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpIHsK
LSAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcyh0aGlzKTsKLSAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3Bl
bnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgICAgICBuZXdEb2N1bWVudC5y
ZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogICAg
IGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIG9sZERvY3VtZW50LmZvcm1Db250cm9sbGVy
KCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgICAgIG9sZERv
Y3VtZW50LmZvcm1Db250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24o
KnRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKG1faGFzVG91Y2hFdmVu
dEhhbmRsZXIpIHsKICAgICAgICAgb2xkRG9jdW1lbnQuZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2Rl
KCp0aGlzKTsKQEAgLTE1NjEsNyArMTU2MSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVx
dWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBz
KiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9ucy0+cmVxdWly
ZWRBdHRyaWJ1dGVDaGFuZ2VkKHRoaXMpOworICAgICAgICBidXR0b25zLT5yZXF1aXJlZEF0dHJp
YnV0ZUNoYW5nZWQoKnRoaXMpOwogICAgIG1faW5wdXRUeXBlLT5yZXF1aXJlZEF0dHJpYnV0ZUNo
YW5nZWQoKTsKIH0KIApAQCAtMTgzOSw3ICsxODM5LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50
Ojppc0luUmVxdWlyZWRSYWRpb0J1dHRvbkdyb3VwKCkKIHsKICAgICBBU1NFUlQoaXNSYWRpb0J1
dHRvbigpKTsKICAgICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRv
bkdyb3VwcygpKQotICAgICAgICByZXR1cm4gYnV0dG9ucy0+aXNJblJlcXVpcmVkR3JvdXAodGhp
cyk7CisgICAgICAgIHJldHVybiBidXR0b25zLT5pc0luUmVxdWlyZWRHcm91cCgqdGhpcyk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODcxLDE0ICsxODcxLDE0IEBAIFJhZGlvQnV0dG9u
R3JvdXBzKiBIVE1MSW5wdXRFbGVtZW50OjpyYWRpb0J1dHRvbkdyb3VwcygpIGNvbnN0CiAKIGlu
bGluZSB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFkZFRvUmFkaW9CdXR0b25Hcm91cCgpCiB7Ci0g
ICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkK
LSAgICAgICAgYnV0dG9ucy0+YWRkQnV0dG9uKHRoaXMpOworICAgIGlmIChhdXRvKiBidXR0b25z
ID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgYnV0dG9ucy0+YWRkQnV0dG9uKCp0aGlz
KTsKIH0KIAogaW5saW5lIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVtb3ZlRnJvbVJhZGlvQnV0
dG9uR3JvdXAoKQogewotICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlv
QnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMtPnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAg
ICBpZiAoYXV0byogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCisgICAgICAgIGJ1dHRv
bnMtPnJlbW92ZUJ1dHRvbigqdGhpcyk7CiB9CiAKIHVuc2lnbmVkIEhUTUxJbnB1dEVsZW1lbnQ6
OmhlaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4
IGQyNjMyN2ZmODFkYTYzNDk2ZjAzOWQ3M2RjMGE3MDFhNzY3YjJiZDkuLmI4M2FhZTBiY2RiODlh
YzdlNTYxNDNlMmE3MWFiZmY5MDdjMGJkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCkBAIC0zNDEsNyArMzQxLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBl
bnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmluaXRpYWxpemVkLCBPbiwgT2ZmIH07CiAKLSAg
ICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAg
IHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAg
ICB2b2lkIHdpbGxDaGFuZ2VGb3JtKCkgZmluYWw7CiAgICAgdm9pZCBkaWRDaGFuZ2VGb3JtKCkg
ZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA4MWE5
MDhjODUyOWRkMzE5NzViYTBhZDZmMDU3Yzg1MTNhYzkwMGE1Li45NmQwYWIzOTBjNzlkMjU4M2Ux
OWVlNDNhMjU0YjE2YmViZTU2NTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKQEAgLTY2MywzMyArNjYzLDMzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIG1fbWVkaWFTZXNzaW9u
LT5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdV
bnRpbE1lZGlhQ2FuU3RhcnQpCi0gICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0
aGlzKTsKIAogI2lmICFQTEFURk9STShJT1MpCi0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRp
YVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvclByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3Rl
ckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZv
clByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAot
ICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0
aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxs
YmFja3MoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChtX3JlcXVp
cmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKQotICAgICAgICBkb2N1bWVudC5y
ZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAg
ICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNr
cygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAg
ICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBk
b2N1bWVudC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxi
YWNrcygqdGhpcyk7CiAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICAgICBkb2N1bWVudC5y
ZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRDYWxsYmFj
a3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQuYWRkQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICBk
b2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKICAgICBhZGRFbGVtZW50VG9Eb2N1bWVu
dE1hcCgqdGhpcywgZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTcw
MiwzMyArNzAyLDMzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhEb2N1
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJX
aXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNh
blN0YXJ0KQotICAgICAgICBkb2N1bWVudC5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhp
cyk7CisgICAgICAgIGRvY3VtZW50LnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7
CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JNZWRpYVZv
bHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yUHJpdmF0ZUJy
b3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0
ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcygqdGhpcyk7CisgICAgZG9jdW1lbnQudW5yZWdpc3Rl
ckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYK
IAotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJh
Y2tzKHRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAo
bV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcykKLSAgICAgICAgZG9j
dW1lbnQudW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3ModGhp
cyk7CisgICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xT
X1NDUklQVCkKICAgICBpZiAobV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3Ip
Ci0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2Fs
bGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogI2Vu
ZGlmCiAKICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yQWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAKLSAgICBkb2N1bWVudC5yZW1vdmVB
dWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIGRvY3VtZW50LnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRo
aXMpOwogICAgIHJlbW92ZUVsZW1lbnRGcm9tRG9jdW1lbnRNYXAoKnRoaXMsIGRvY3VtZW50KTsK
IAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0xMzE5LDcgKzEzMTksNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2UoKQogICAgICAgICBpZiAobV9pc1dh
aXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
aXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQoKS5h
ZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MzkwMyw3ICszOTAzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soUmVm
PFRleHRUcmFjaz4mJiB0cmFjaykKICAgICBpZiAoIW1fcmVxdWlyZUNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWRDYWxsYmFja3MpIHsKICAgICAgICAgbV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZENhbGxiYWNrcyA9IHRydWU7CiAgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHRo
aXMtPmRvY3VtZW50KCk7Ci0gICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICAgICAgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBtX2NhcHRpb25EaXNw
bGF5TW9kZSA9IHBhZ2UtPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuY2FwdGlvbkRpc3Bs
YXlNb2RlKCk7CiAgICAgfQpAQCAtNTM1NSw3ICs1MzU1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpjbGVhck1lZGlhUGxheWVyKERlbGF5ZWRBY3Rpb25UeXBlIGZsYWdzKQogCiAgICAgaWYg
KG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KSB7CiAgICAgICAgIG1faXNXYWl0aW5nVW50
aWxNZWRpYUNhblN0YXJ0ID0gZmFsc2U7Ci0gICAgICAgIGRvY3VtZW50KCkucmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKG1fcGxheWVyKSB7CkBAIC01
NDg5LDcgKzU0ODksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc3VtZSgpCiAgICAgc2V0
U2hvdWxkQnVmZmVyRGF0YSh0cnVlKTsKIAogICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VB
bGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoKnRoaXMpKQotICAgICAgICBkb2N1bWVudCgpLmFk
ZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRp
YUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIGVsc2UKICAgICAgICAgc2V0UGF1c2VkSW50
ZXJuYWwoZmFsc2UpOwogCkBAIC02OTk4LDcgKzY5OTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldENvbnRyb2xsZXJKU1Byb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgSlND
OjpKUwogICAgIGNvbnRyb2xsZXJPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChjb250cm9sbGVy
T2JqZWN0LCBleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgcHJvcGVydHlO
YW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlTbG90KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYg
cm9vdCkKIHsKICAgICBERUJVR19MT0coVEhJUyk7CiAKQEAgLTcwOTcsOSArNzA5Nyw5IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFj
dG9yKGJvb2wgZGVwZW5kc09uUGFnCiAgICAgbV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2Nh
bGVGYWN0b3IgPSBkZXBlbmRzT25QYWdlU2NhbGU7CiAKICAgICBpZiAobV9tZWRpYUNvbnRyb2xz
RGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgp
LnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAg
ZWxzZQotICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggMWIxMDEzMDIzYzM1NWNm
YTc4MTgyZjkxMjVhYzBiNjkzYWE0MzAyMC4uOWEzOWM4NDNjZmIwZjhhYzU5NGZkY2ZjNTFhZjc2
ZmJkNzgyYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTgz
MCw3ICs4MzAsNyBAQCBwcml2YXRlOgogICAgIFNsZWVwVHlwZSBzaG91bGREaXNhYmxlU2xlZXAo
KSBjb25zdDsKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0gICAgdm9pZCBk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92ZXJyaWRlOwogICAgIERP
TVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAgIGJvb2wgZW5zdXJlTWVk
aWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwCmluZGV4IDAyMzliMzM1YzgxZmQ5Zjg5NWZjMDc4YmYwMTkxMjIx
ZTVhMTM2ZTQuLmE2NzhhMjAwYTg1MzA4MDJhNTEzMjg1ZDVlNTdjNWUzYTFhYWM1ZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcApAQCAtMjIzLDcgKzIyMyw3IEBA
IFJlbmRlck1ldGVyKiBIVE1MTWV0ZXJFbGVtZW50OjpyZW5kZXJNZXRlcigpIGNvbnN0CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFn
ZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MTWV0ZXJFbGVtZW50Ojpk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgQVNTRVJU
KCFtX3ZhbHVlKTsKIApAQCAtMjMxLDEzICsyMzEsMTMgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50
OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCiAKICAgICBhdXRv
IHN0eWxlID0gSFRNTFN0eWxlRWxlbWVudDo6Y3JlYXRlKEhUTUxOYW1lczo6c3R5bGVUYWcsIGRv
Y3VtZW50KCksIGZhbHNlKTsKICAgICBzdHlsZS0+c2V0VGV4dENvbnRlbnQoc2hhZG93U3R5bGUp
OwotICAgIHJvb3QtPmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICByb290LmFwcGVuZENoaWxkKHN0
eWxlKTsKIAogICAgIC8vIFBzZXVkb3MgYXJlIHNldCB0byBhbGxvdyBhdXRob3Igc3R5bGluZy4K
ICAgICBhdXRvIGlubmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAg
ICBpbm5lci0+c2V0SWRBdHRyaWJ1dGUoImlubmVyIik7CiAgICAgaW5uZXItPnNldFBzZXVkbygi
LXdlYmtpdC1tZXRlci1pbm5lci1lbGVtZW50Iik7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoaW5u
ZXIpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoaW5uZXIpOwogCiAgICAgYXV0byBiYXIgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGJhci0+c2V0SWRBdHRyaWJ1dGUo
ImJhciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaAppbmRleCA2MDRhNjVh
OWUzYWIyZmMzODNmNGY2MGIxYTAzZjAxOTJmOGMxYmUyLi40ODY1YTZkYjdkOGFjMjAwOGE4ZWU2
OGFhN2JmMTdjMjllNmQwZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQu
aApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogCiAgICAgdm9p
ZCBkaWRFbGVtZW50U3RhdGVDaGFuZ2UoKTsKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93
Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fdmFs
dWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4
IGQxMGMzN2ZiMjI4ODFjMTNjMzBmMDdjN2I5MzRmOTMyNzU0NmYxZWEuLmUxMThiZGUxZGRjMjIz
YTkzYjcxODRiYTYwNzc4OTFjY2FhMmI3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxO
YW1lQ29sbGVjdGlvbi5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAppbmRleCBlMmUzMWExNTUzNjEwOTZhNTZhZmQ4NDNj
MzAwMmYwODVmNDllMWRhLi45ZGM1ZmYxYWE5MGZjM2E2ZDQyNzU0MjEyYzVmZmJkM2UyYzQ5NWVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcApAQCAtMjkyLDEz
ICsyOTIsMTMgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0RGlzcGxheVN0YXRlKERpc3Bs
YXlTdGF0ZSBzdGF0ZSkKICAgICAgICAgbV9zd2FwUmVuZGVyZXJUaW1lci5zdGFydE9uZVNob3Qo
MF9zKTsKIH0KIAotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93
Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIGlmICghbV9wbHVnaW5S
ZXBsYWNlbWVudCB8fCAhZG9jdW1lbnQoKS5wYWdlKCkgfHwgZGlzcGxheVN0YXRlKCkgIT0gUHJl
cGFyaW5nUGx1Z2luUmVwbGFjZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICByb290
LT5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1ZSk7Ci0gICAgaWYgKG1fcGx1Z2luUmVwbGFj
ZW1lbnQtPmluc3RhbGxSZXBsYWNlbWVudCgqcm9vdCkpIHsKKyAgICByb290LnNldFJlc2V0U3R5
bGVJbmhlcml0YW5jZSh0cnVlKTsKKyAgICBpZiAobV9wbHVnaW5SZXBsYWNlbWVudC0+aW5zdGFs
bFJlcGxhY2VtZW50KHJvb3QpKSB7CiAgICAgICAgIHNldERpc3BsYXlTdGF0ZShEaXNwbGF5aW5n
UGx1Z2luUmVwbGFjZW1lbnQpOwogICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNG
b3JTdWJ0cmVlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5o
CmluZGV4IDUyYTI5MmFiYjI5NmM0OTNhMmU2YjgzOGFkMzBjMGIxYjBmMzA0ZDIuLjExZmU2MDJj
ZTFlMWQwNzVmNWRjZTE1YjFjM2QxYjA5ODhjOTE2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmgKQEAgLTk4LDcgKzk4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmly
dHVhbCBib29sIHJlcXVlc3RPYmplY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVh
dGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9u
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgdXNlIGd1YXJkZWRE
aXNwYXRjaEJlZm9yZUxvYWRFdmVudCBpbnN0ZWFkIG9mIGNhbGxpbmcgZGlzcGF0Y2hCZWZvcmVM
b2FkRXZlbnQgZGlyZWN0bHkuCiAgICAgYm9vbCBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZl
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggNWQ0MTVhNjJjMWEzNDc1Y2Q1YjI4ZTM3OWJi
ZGM5YzcyZjZkOGI4Ny4uMGM1NWI5OWE5MWVmYzExZmViZDViMWZjZDYzZGVkYTY5YzI2NWYzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpmaW5pc2hDcmVh
dGluZygpCiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp+SFRNTFBsdWdJbkltYWdlRWxlbWVudCgp
CiB7CiAgICAgaWYgKG1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MpCi0gICAgICAg
IGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlz
KTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpzZXREaXNw
bGF5U3RhdGUoRGlzcGxheVN0YXRlIHN0YXRlKQpAQCAtMTc1LDcgKzE3NSw3IEBAIFJlbmRlclB0
cjxSZW5kZXJFbGVtZW50PiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVu
ZGVyZXIoUmVuZGVyU3R5CiAgICAgLy8gaW5hY3RpdmUgb3IgcmVhY3RpdmF0ZXMgc28gaXQgY2Fu
IGNsZWFyIHRoZSByZW5kZXJlciBiZWZvcmUgZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZS4KICAg
ICBpZiAoIW1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MpIHsKICAgICAgICAgbV9u
ZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyA9IHRydWU7Ci0gICAgICAgIGRvY3VtZW50
KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAg
IGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMp
OwogICAgIH0KIAogICAgIGlmIChkaXNwbGF5U3RhdGUoKSA9PSBEaXNwbGF5aW5nU25hcHNob3Qp
IHsKQEAgLTI4NCw4ICsyODQsOCBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZE1v
dmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbgogewogICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZkb2N1bWVudCgpID09ICZuZXdEb2N1bWVu
dCk7CiAgICAgaWYgKG1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MpIHsKLSAgICAg
ICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0
aGlzKTsKLSAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3ModGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogCiAgICAgaWYg
KG1faW1hZ2VMb2FkZXIpCkBAIC0zNDEsNyArMzQxLDcgQEAgc3RhdGljIERPTVdyYXBwZXJXb3Js
ZCYgcGx1Z0luSW1hZ2VFbGVtZW50SXNvbGF0ZWRXb3JsZCgpCiAgICAgcmV0dXJuIGlzb2xhdGVk
V29ybGQ7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgSFRN
TFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qocm9vdCk7CiAgICAgaWYg
KGRpc3BsYXlTdGF0ZSgpID49IFByZXBhcmluZ1BsdWdpblJlcGxhY2VtZW50KQpAQCAtMzU0LDcg
KzM1NCw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290KiByb290KQogICAgIC8vIFJlc2V0IGFueSBhdXRob3Igc3R5bGVz
IHRoYXQgbWF5IGFwcGx5IGFzIHdlIG9ubHkgd2FudCBleHBsaWNpdAogICAgIC8vIHN0eWxlcyBk
ZWZpbmVkIGluIHRoZSBpbmplY3RlZCB1c2VyIGFnZW50cyBzdHlsZXNoZWV0cyB0byBzcGVjaWZ5
CiAgICAgLy8gdGhlIGxvb2stYW5kLWZlZWwgb2YgdGhlIHNuYXBzaG90dGVkIHBsdWctaW4gb3Zl
cmxheS4gCi0gICAgcm9vdC0+c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUpOworICAgIHJv
b3Quc2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUpOwogICAgIAogICAgIFN0cmluZyBtaW1l
VHlwZSA9IGxvYWRlZE1pbWVUeXBlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmgKaW5kZXggZTk0MWY1N2FkZjhhMTlhOWVkMTRlZGNlYjA5N2JkM2Fi
NGE0ZmE2Mi4uZTNmMDM5NjRmYTE3NDQ1MWU4ZTI2NmFlMzI3MzZhOWVjOWJmOTg1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKQEAgLTEwNiw3ICsx
MDYsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBhbGxvd2VkVG9Mb2FkUGx1Z2luQ29udGVudChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CiAKLSAgICB2
b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZv
aWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAgICBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxl
JiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwogICAgIGJvb2wgY2hpbGRT
aG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAppbmRleCA4YjQwZTFkYzI1OGE5
YmE0ZmFmY2YwODNiMzVmOTNiY2IyYzQ1ZTRmLi4xMmQzMWM3MjIwZDZkODIyNDEwZDk5OGY0ZDNh
ZTFiYmZjYjJhMmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVu
dC5jcHAKQEAgLTEzNSwxMiArMTM1LDEyIEBAIHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlk
RWxlbWVudFN0YXRlQ2hhbmdlKCkKICAgICB9CiB9CiAKLXZvaWQgSFRNTFByb2dyZXNzRWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1M
UHJvZ3Jlc3NFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJv
b3QpCiB7CiAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKIAogICAgIGF1dG8gaW5uZXIgPSBQcm9ncmVz
c0lubmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxk
KGlubmVyKTsKKyAgICByb290LmFwcGVuZENoaWxkKGlubmVyKTsKIAogICAgIGF1dG8gYmFyID0g
UHJvZ3Jlc3NCYXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgYXV0byB2YWx1ZSA9
IFByb2dyZXNzVmFsdWVFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oCmluZGV4IGJkMzNhYTEyMmVkZjIxNTRhNjc5ZmUx
NmQ2NjQwY2IxMmZiNzBlMzAuLjgyNjczNmRhYjJiYjY1N2FiM2U1YzdhYzNiYTQ5NGQzYWQ4MGNl
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oCkBAIC01OCw3
ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRBdHRhY2hSZW5kZXJlcnMoKSBmaW5hbDsK
IAogICAgIHZvaWQgZGlkRWxlbWVudFN0YXRlQ2hhbmdlKCk7Ci0gICAgdm9pZCBkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogICAgIGJvb2wgaXNEZXRlcm1pbmF0
ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1l
bnQuY3BwCmluZGV4IGE0OWZmMjBjMmIzNzhhNTYyNDQxNWQ1NDkzMWUzNDQzYjM4YjhhZWEuLjk5
ZjNjNmY4YzRjMGFmNGY4N2E0NmYzZjUxOWJmOWQwMjZjN2UwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGljdHVyZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1t
YXJ5RWxlbWVudC5jcHAKaW5kZXggOTkxMGJkMWI0MmZhMjU2MmYyYTMwNmFiMjEyMDZhODg0NGYy
NTQ5Yi4uZGE3NDljZDk0M2YzOTBkY2ExMDU0YWU3NTVhMmY4YWQzYTAzNjkxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcApAQCAtNjUsMTAgKzY1LDEwIEBA
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MU3VtbWFyeUVsZW1lbnQ6OmNyZWF0ZUVsZW1l
bnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRl
ckJsb2NrRmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAotdm9pZCBIVE1MU3VtbWFy
eUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3Zv
aWQgSFRNTFN1bW1hcnlFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QmIHJvb3QpCiB7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoRGV0YWlsc01hcmtlckNvbnRyb2w6
OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoSFRNTFNsb3RFbGVt
ZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1lbnQoKSkpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQo
RGV0YWlsc01hcmtlckNvbnRyb2w6OmNyZWF0ZShkb2N1bWVudCgpKSk7CisgICAgcm9vdC5hcHBl
bmRDaGlsZChIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgpKSk7CiB9
CiAKIEhUTUxEZXRhaWxzRWxlbWVudCogSFRNTFN1bW1hcnlFbGVtZW50OjpkZXRhaWxzRWxlbWVu
dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuaAppbmRleCAx
MjdhNTQ2ZDJhMGRjNDAyOTg0MTJhYmM1ZDY5YWYwNzg1NjNiNTIwLi42Yjc0NTA1NDQ2MGRhMDI2
MmFmY2M5OWM0N2U5ZTlmNjhlMmU0NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTdW1tYXJ5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1h
cnlFbGVtZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJQdHI8UmVu
ZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJl
bmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNDdXN0b21Gb2N1c0xvZ2ljKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVF
bGVtZW50LmNwcAppbmRleCAyNDJmYzFhNTg1ZmYzZGI5YjI0ZjFmMjAyN2ExZTE3Y2NhOTAyYjU4
Li42OTZhNjNmNDAzY2UxNTkxMjUwZmQxNGIwMGVmMjBhNmQ5OWJiMWVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVDb250
ZW50RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBlM2EwMjE5MGVkYTIwMjZi
YWYyMjJjZDIxY2Y2OGI0MjhjNGI3NmRmLi42ODhlM2NjMDc0NmM2NjE4MGNiYjU4OTcxNjdiZGQy
MzY2NWEyNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAKQEAgLTEwMCw5ICsxMDAsOSBAQCBSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4gSFRNTFRleHRB
cmVhRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbQogICAgIHJldHVy
biB0ZXh0QXJlYTsKIH0KIAotdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKLSAgICByb290
LT5hcHBlbmRDaGlsZChUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgdXBkYXRlSW5uZXJUZXh0RWxlbWVudEVkaXRhYmls
aXR5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKaW5k
ZXggYjlhMzIyNGM3NTBlNGQ0MDZiMjNhNmU1NGIwNDc1MjI1Mjk5Zjg1MC4uY2JkMDYzZTMyODFi
ZWNhZDU2OWIyYmNkMDI3MDYwZmQ3ZmJhZDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIGVudW0g
V3JhcE1ldGhvZCB7IE5vV3JhcCwgU29mdFdyYXAsIEhhcmRXcmFwIH07CiAKLSAgICB2b2lkIGRp
ZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlk
QWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAgICB2b2lkIG1h
eExlbmd0aEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CiAg
ICAgdm9pZCBtaW5MZW5ndGhBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3
VmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAppbmRleCBkZWMxOWIy
YzBiOWUyMjIwZjY3YWE1ZGY0OGRjYjEzYzk4NGVhNDJiLi4wYmNmZTE1ODkxNGM0ZmQzNTBjMTZk
MzdlNDFlNDRiOThkMGVlNGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlv
SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNw
cApAQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgUmFkaW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24o
KSBjb25zdAogCiBib29sIFJhZGlvSW5wdXRUeXBlOjptYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVk
b0NsYXNzKCkgY29uc3QKIHsKLSAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0g
dGhpcy0+ZWxlbWVudCgpOwotICAgIGlmIChjb25zdCBSYWRpb0J1dHRvbkdyb3VwcyogcmFkaW9C
dXR0b25Hcm91cHMgPSBlbGVtZW50LnJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIHJldHVy
biAhcmFkaW9CdXR0b25Hcm91cHMtPmhhc0NoZWNrZWRCdXR0b24oJmVsZW1lbnQpOworICAgIGF1
dG8mIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CisgICAgaWYgKGF1dG8qIHJhZGlvQnV0dG9u
R3JvdXBzID0gZWxlbWVudC5yYWRpb0J1dHRvbkdyb3VwcygpKQorICAgICAgICByZXR1cm4gIXJh
ZGlvQnV0dG9uR3JvdXBzLT5oYXNDaGVja2VkQnV0dG9uKGVsZW1lbnQpOwogICAgIHJldHVybiAh
ZWxlbWVudC5jaGVja2VkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFdyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0
ZXIuY3BwCmluZGV4IDAwNWJlNGQyZDJlMTc4MDhlZjgyYTNiOTNkMjkzZDg3OGExOWEwOTMuLjZm
YzVjMTYxNmJlZjE5NjIxM2NhZWFjYTYxY2MxNDVkNGM1MTNiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgRG9jdW1l
bnRXcml0ZXI6OmJlZ2luKGNvbnN0IFVSTCYgdXJsUmVmZXJlbmNlLCBib29sIGRpc3BhdGNoLCBE
b2N1bWVudCogb3duCiAKICAgICBib29sIHNob3VsZFJldXNlRGVmYXVsdFZpZXcgPSBtX2ZyYW1l
LT5sb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS5pc0Rpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVu
dCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmlzU2VjdXJlVHJhbnNpdGlvblRvKHVybCk7CiAg
ICAgaWYgKHNob3VsZFJldXNlRGVmYXVsdFZpZXcpCi0gICAgICAgIGRvY3VtZW50LT50YWtlRE9N
V2luZG93RnJvbShtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgZG9jdW1lbnQtPnRha2VE
T01XaW5kb3dGcm9tKCptX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBlbHNlCiAgICAgICAgIGRv
Y3VtZW50LT5jcmVhdGVET01XaW5kb3coKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCmluZGV4IGU1MzhiYTZjNTMxMmQ5YzgxOWViNWE3NTY2NDBhYzVhYmE4Y2QzYWIuLjZmOTA3
MjQxOTQ0Yjc3ZTViMTQ0NTMzMWUwZWU1NzVlMzI2NmJhNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTM1MTMsNyArMzUxMyw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpk
aWRTdGFydERyYWcoKQogICAgIH0KIAogICAgIGlmIChhdXRvIHJhbmdlID0gZHJhZ1N0YXRlKCku
ZHJhZ2dlZENvbnRlbnRSYW5nZSkgewotICAgICAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcihyYW5nZS5nZXQoKSk7CisgICAgICAgIHJh
bmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250ZW50TWFya2VyKCpy
YW5nZSk7CiAgICAgICAgIHJlcGFpbnRDb250ZW50c09mUmFuZ2UocmFuZ2UpOwogICAgIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAppbmRleCAwODAxNzI5NjliZTRjYmRh
Yjk3OTIzMzU1YTE2Mzc5ZTQ5YmIzNDY0Li5lNDZmZjlkOWZhZjcyYzI0MjFiMTUyZmQwZmE1NTM5
YzlkYWEyNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtNzMsNyArNzMs
NyBAQCBFeGNlcHRpb25PcjxSZWY8RXZlbnRTb3VyY2U+PiBFdmVudFNvdXJjZTo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleAogICAgIH0KIAogICAgIGF1dG8gc291cmNlID0g
YWRvcHRSZWYoKm5ldyBFdmVudFNvdXJjZShjb250ZXh0LCBmdWxsVVJMLCBldmVudFNvdXJjZUlu
aXQpKTsKLSAgICBzb3VyY2UtPnNldFBlbmRpbmdBY3Rpdml0eShzb3VyY2UucHRyKCkpOworICAg
IHNvdXJjZS0+c2V0UGVuZGluZ0FjdGl2aXR5KHNvdXJjZS5nZXQoKSk7CiAgICAgc291cmNlLT5z
Y2hlZHVsZUluaXRpYWxDb25uZWN0KCk7CiAgICAgc291cmNlLT5zdXNwZW5kSWZOZWVkZWQoKTsK
ICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgRXZl
bnRTb3VyY2U6Om5ldHdvcmtSZXF1ZXN0RW5kZWQoKQogICAgIGlmIChtX3N0YXRlICE9IENMT1NF
RCkKICAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTsKICAgICBlbHNlCi0gICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiB9CiAKIHZvaWQgRXZlbnRTb3VyY2U6OnNjaGVkdWxlSW5pdGlhbENvbm5lY3QoKQpAQCAt
MTU2LDcgKzE1Niw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmNsb3NlKCkKICAgICAgICAgbV9sb2Fk
ZXItPmNhbmNlbCgpOwogICAgIGVsc2UgewogICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAg
ICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgRXZlbnRT
b3VyY2U6OmFib3J0Q29ubmVjdGlvbkF0dGVtcHQoKQogICAgICAgICBtX2xvYWRlci0+Y2FuY2Vs
KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gQ0xPU0VEKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKaW5kZXggN2Y3NGUzMjVjZTc4NWJhZDUxYmI1N2ExNTJjMWNhMmE3MzI5NDU2Yi4uNDg1
ZmQyZTMyNWMyOGEyNWY3NzMzNGJjODk3N2EyMzEzOTZjNzNjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNl
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZDhlNzY1Zjk0ZTExMWZkNWI3Zjk2
MzhiZmQ1ODY0ZTJhN2U1NjBhZS4uMDA0M2NlNWZlOTFmOTQ3ODYyYWM2ODZlNjJmNmJhYmJiZjA4
N2RiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDcsNyArNDcsNiBAQAogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkhUTUxFbWJlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAppbmRleCA0Y2Y1ZTI5ZDBiOTM4NmFmZmUyNzI2
YzczYWFlZTIyMzkzNTE1M2MzLi5iNDdmNTJiNDVjMDlhZTIwYWI1MmZiNGZiMWJjMWNiMGQyNGJi
NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAvLyBJ
ZiB3ZSBnZXQgQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1hdGlvbiB0aGVuIHdlIGZv
cmNlIGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBvZiBzdGF0ZS4KICAgICBpZiAoaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TWFrZU5ldykgewogICAgICAgICBpZiAobV9hbmltYXRp
b25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAg
ICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21w
b3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3Rh
dGUpKTsKICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7CiAg
ICAgICAgIG1fc3RhcnRUaW1lID0gc3RkOjpudWxsb3B0OwpAQCAtMTczLDcgKzE3Myw3IEBAIHZv
aWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQg
aW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpSZXN0YXJ0QW5pbWF0aW9uKSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09
IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1f
Y29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1h
dGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1h
dGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlKCp0aGlzKTsKICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKICAgICAgICAgbV9z
dGFydFRpbWUgPSBzdGQ6Om51bGxvcHQ7CkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBBbmltYXRp
b25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91
YmxlIHBhcmFtKQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFu
aW1hdGlvbikgewogICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0
ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1h
dGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7
CiAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRG9uZSIs
IHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0
aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKICAgICAgICAgZW5kQW5pbWF0aW9uKCk7
CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAjaWYgRU5BQkxF
KENTU19BTklNQVRJT05TX0xFVkVMXzIpCiAgICAgICAgICAgICBpZiAobV9hbmltYXRpb24tPnRy
aWdnZXIoKSAmJiBtX2FuaW1hdGlvbi0+dHJpZ2dlcigpLT5pc1Njcm9sbEFuaW1hdGlvblRyaWdn
ZXIoKSkKLSAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRk
VG9BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoKnRoaXMpOwogI2VuZGlmCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXI6CkBA
IC0yNDMsNyArMjQzLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUo
QW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAgICAgICAgICAg
IC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFu
ZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQgdGltZQogICAgICAgICAgICAgICAg
IExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0U3R5bGVB
dmFpbGFibGUgKHRpbWUgaXMgJWYpIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3Rh
dGUpLCBwYXJhbSk7CiAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdHlsZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhp
cyk7CiAKICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFy
dCB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0
LT5lbGVtZW50KCkpCkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQog
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1tX2FuaW1hdGlvbi0+ZGVsYXko
KTsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24odGlt
ZU9mZnNldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UodGhpcywgc3RhcnRlZCk7CisgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFydGVkKTsKICAgICAgICAgICAgICAgICAgICAgbV9p
c0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
IGVsc2UgewpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0YXJ0ZWQgPSBz
dGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZh
bHVlX29yKDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21w
b3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYjExZGE1YzMwYjUxMDI5
NjdlOTFkOTY2OTYzMWQwZmZmZmZhZTNiNi4uZGZlNGMwMzI0OGFkNmJkZDVlMWE0YjE3ZGQ0Y2Jl
YTZmZGFmOWEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTUwMywxNyArNTAzLDE1IEBAIHVuc2ln
bmVkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoRG9jdW1lbnQqIGRvY3VtCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5p
bWF0aW9uQmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlv
bikKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhpcyBhbmltYXRpb24gaXMgbm90IGluIHRoZSBzdGFy
dCB0aW1lIHdhaXRlcnMKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UucmVtb3ZlKGFuaW1hdGlvbik7Ci0KLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUu
YWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3Bv
bnNlLnJlbW92ZSgmYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUu
YWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKiBhbmlt
YXRpb25Ub1JlbW92ZSkKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRv
UmVtb3ZlKQogewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoYW5pbWF0
aW9uVG9SZW1vdmUpOworICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFu
aW1hdGlvblRvUmVtb3ZlKTsKIH0KIAogdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6c3R5bGVBdmFpbGFibGUoKQpAQCAtNTI1LDcgKzUyMyw3IEBAIHZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxlKCkKICAgICBtX2FuaW1hdGlvbnNXYWl0
aW5nRm9yU3R5bGUuY2xlYXIoKTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlv
bkJhc2UqIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCit2b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uLCBib29sIHdpbGxHZXRSZXNwb25zZSkKIHsK
ICAgICAvLyBJZiB3aWxsR2V0UmVzcG9uc2UgaXMgdHJ1ZSwgaXQgbWVhbnMgdGhpcyBhbmltYXRp
b24gaXMgYWN0dWFsbHkgd2FpdGluZyBmb3IgYSByZXNwb25zZQogICAgIC8vICh3aGljaCB3aWxs
IGNvbWUgaW4gYXMgYSBjYWxsIHRvIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkuCkBAIC01NDQs
MTcgKzU0MiwxNiBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0Fu
aW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQQogICAgIC8vIFRoaXMgd2lsbCBz
eW5jaHJvbml6ZSBhbGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRl
ZCBpbiB0aGUgc2FtZSAKICAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgogICAgIC8v
Ci0gICAgCisKICAgICBpZiAod2lsbEdldFJlc3BvbnNlKQogICAgICAgICBtX3dhaXRpbmdGb3JB
c3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gdHJ1ZTsKIAotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZS5hZGQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuYWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3ZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQog
ewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoYW5p
bWF0aW9uVG9SZW1vdmUpOwotICAgIAorICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRp
bWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKICAgICBpZiAobV9hbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKICAgICAgICAgbV93YWl0
aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogfQpAQCAtNTcwLDkgKzU2Nyw5
IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNl
KGRvdWJsZSB0aW1lKQogICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBm
YWxzZTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9u
V2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCit2b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2Um
IGFuaW1hdGlvbikKIHsKLSAgICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlICVwIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQ6ICVwIiwgdGhpcywgYW5pbWF0aW9u
KTsKKyAgICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVw
IGFuaW1hdGlvbldpbGxCZVJlbW92ZWQ6ICVwIiwgdGhpcywgJmFuaW1hdGlvbik7CiAKICAgICBy
ZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShhbmltYXRpb24pOwogICAgIHJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKGFuaW1hdGlvbik7CkBA
IC01OTMsMTQgKzU5MCwxNSBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjph
bmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqIGFuaW1hdAogfQogCiAjaWYgRU5B
QkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjphZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKiBh
bmltYXRpb24pCisKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5p
bWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAg
ICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5hZGQoYW5pbWF0aW9uKTsKKyAgICBtX2Fu
aW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5hZGQoJmFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50
T25TY3JvbGwoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmlt
YXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3Jv
bGwucmVtb3ZlKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwu
cmVtb3ZlKCZhbmltYXRpb24pOwogfQogCiB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzY3JvbGxXYXNVcGRhdGVkKCkKQEAgLTYxNyw2ICs2MTUsNyBAQCB2b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzY3JvbGxXYXNVcGRhdGVkKCkKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MTcwCiAgICAgdXBkYXRlQW5pbWF0
aW9ucyhDYWxsU2V0Q2hhbmdlZCk7CiB9CisKICNlbmRpZgogCiBDU1NBbmltYXRpb25Db250cm9s
bGVyOjpDU1NBbmltYXRpb25Db250cm9sbGVyKEZyYW1lJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oCmluZGV4IDE1YTRmNzJjMWU2ZDQ3NjQxNGM0ODk4NDQ1MjczYWNlMzU4OTYzZjQu
LmMyM2JlYTJmMzY3MTI1YjMwYWMzZjljYTM1MDFhMTMyYjRlODM3ZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUuaApAQCAtOTMsMTMgKzkzLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGVuZEFu
aW1hdGlvblVwZGF0ZSgpOwogICAgIHZvaWQgcmVjZWl2ZWRTdGFydFRpbWVSZXNwb25zZShkb3Vi
bGUpOwogICAgIAotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1h
dGlvbkJhc2UqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZShBbmltYXRpb25CYXNlJik7CisgICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdG
b3JTdHlsZShBbmltYXRpb25CYXNlJik7CiAKLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9u
c2UpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UoQW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmLCBib29sIHdpbGxHZXRSZXNwb25zZSk7
CisgICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZShBbmltYXRpb25CYXNlJik7CiAKLSAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5p
bWF0aW9uQmFzZSopOworICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25C
YXNlJik7CiAKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yUmVuZGVyZXIoUmVuZGVy
RWxlbWVudCYpOwogCkBAIC0xMTAsOCArMTEwLDggQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKENT
U19BTklNQVRJT05TX0xFVkVMXzIpCiAgICAgYm9vbCB3YW50c1Njcm9sbFVwZGF0ZXMoKSBjb25z
dCB7IHJldHVybiAhbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwuaXNFbXB0eSgpOyB9Ci0g
ICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKik7
Ci0gICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlv
bkJhc2UqKTsKKyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1h
dGlvbkJhc2UmKTsKKyAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3Jv
bGwoQW5pbWF0aW9uQmFzZSYpOwogCiAgICAgdm9pZCBzY3JvbGxXYXNVcGRhdGVkKCk7CiAgICAg
ZmxvYXQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmNwcAppbmRleCBkOGUxYjJkYmRhZDI3MDk0YmMzN2UxNTU5MmMxNjZlYWVlNmEyYTQ3Li42
YzU4Y2YzYzkwNmU1NGRjMGY2ODllYTUyNTViZDhiNDNlYmJlY2M4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTY0
LDE0ICs2NCwxNCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAg
ICAgICAgIC8vIENsZWFyIHRoZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25z
LCBpbiBjYXNlIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCiAgICAgICAgIC8vIGFuIGFuaW1hdGlv
biBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjA1MikKICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQodHJhbnNpdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9s
bGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0
cmFuc2l0aW9uLT5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZy
YW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxl
cigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdldCgpKTsKKyAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24p
OwogICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTUzLDcgKzE1Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9u
cyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW1wbEFuaW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9k
aWZpZWRDdXJyZW50U3R5bGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBleGlzdGluZyBJ
bXBsaWNpdEFuaW1hdGlvbiAlcCBmb3IgcHJvcGVydHkgJXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVy
dHlOYW1lKHByb3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGltcGxBbmltKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCppbXBs
QW5pbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9w
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlcgogICAg
IFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwogICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1f
dHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKCF0cmFuc2l0aW9uLT5hY3RpdmUo
KSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJl
bW92ZWQodHJhbnNpdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVy
KCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0b0Jl
UmVtb3ZlZC5hcHBlbmQodHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CiAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxpY2l0QW5pbWF0aW9uICVwIGZyb20g
cmVuZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgcmVuZGVyZXIs
IGdldFByb3BlcnR5TmFtZSh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAg
ICAgIH0KQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
S2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdAogICAgIC8v
IE1ha2UgYSBsaXN0IG9mIGFuaW1hdGlvbnMgdG8gYmUgcmVtb3ZlZC4KICAgICBmb3IgKGF1dG8m
IGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
ICghbmV3QW5pbWF0aW9ucy5jb250YWlucyhhbmltYXRpb24tPm5hbWUoKS5pbXBsKCkpKSB7Ci0g
ICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChh
bmltYXRpb24uZ2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1h
dGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7CiAgICAgICAgICAgICBhbmltYXRpb24tPmNs
ZWFyKCk7CiAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEtleWZyYW1lQW5p
bWF0aW9uICVwIGZyb20gcmVuZGVyZXIgJXAiLCBhbmltYXRpb24uZ2V0KCksIHJlbmRlcmVyKTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA0MmM4YjMxZWY2
YmZmYTY4Mjg1NzU4NDRkODkxMDQ0ZmM2OTllOGIzLi4xZjc0YzkwNGQzNWZlNTg2ZTBlYzE3OWVl
NWYzMjBiMjY2M2Y5NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwxNCArODEsMTQgQEAgdm9pZCBG
cmFtZTo6aW5pdFdpdGhTaW1wbGVIVE1MRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBzdHlsZSwgY29u
c3QgVVJMJiB1cmwpCiB7CiAgICAgbV9sb2FkZXItPmluaXRGb3JTeW50aGVzaXplZERvY3VtZW50
KHVybCk7CiAKLSAgICBSZWZQdHI8SFRNTERvY3VtZW50PiBkb2N1bWVudCA9IEhUTUxEb2N1bWVu
dDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudCh0aGlzLCB1cmwpOworICAgIGF1dG8gZG9jdW1l
bnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoKnRoaXMsIHVybCk7
CiAgICAgZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50Q29tcGF0aWJpbGl0
eU1vZGU6OkxpbWl0ZWRRdWlya3NNb2RlKTsKICAgICBkb2N1bWVudC0+Y3JlYXRlRE9NV2luZG93
KCk7Ci0gICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQpOworICAgIHNldERvY3VtZW50KGRvY3VtZW50
LnB0cigpKTsKIAotICAgIGF1dG8gcm9vdEVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0
ZSgqZG9jdW1lbnQpOworICAgIGF1dG8gcm9vdEVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCk7CiAKLSAgICBhdXRvIGJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0
ZSgqZG9jdW1lbnQpOworICAgIGF1dG8gYm9keSA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKICAgICBpZiAoIXN0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgYm9keS0+c2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBzdHlsZSk7CiAKQEAgLTc1NCw0ICs3NTQsNSBA
QCB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4IGU1YmYw
NGRiMjNkMmFjYjk3OTVhMzJlOWE0OGU4M2IyYjM4NTJmOTMuLmE3MDNjMDkwNTM3OWRiM2Q2MWUx
NjEyNTBjNTBhY2Q1NDc5NmU4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5k
ZXJFbGVtZW50JiByCiAgICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVm
ZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRw
czovL3dlYmtpdC5vcmcvYi8xMzEwODU+CiAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVu
ZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksIGVsZW1l
bnQpOworICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5k
aW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksICplbGVtZW50KTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKaW5kZXggNTc1ZmEwNmFkZTYwYzUwMTNhZWU0NTFiN2U0M2E5MWQzMGYy
ZmQ1Yi4uNGUxZTIwMjk3NmJhMTlmMTFmMGZkN2U5ZGRiYTY5MGU2NTA5YjMxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtODk1LDcgKzg5NSw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAgaWYgKCFyZW5kZXJlcigpLnRleHROb2RlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4g
bWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5k
ZXJlcigpLnRleHROb2RlKCkpOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4g
bWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcigqcmVu
ZGVyZXIoKS50ZXh0Tm9kZSgpKTsKIAogICAgIC8vIEdpdmUgYW55IGRvY3VtZW50IG1hcmtlcnMg
dGhhdCB0b3VjaCB0aGlzIHJ1biBhIGNoYW5jZSB0byBkcmF3IGJlZm9yZSB0aGUgdGV4dCBoYXMg
YmVlbiBkcmF3bi4KICAgICAvLyBOb3RlIGVuZCgpIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBu
b3Qgb25lIHBhc3QgaXQgbGlrZSBlbmRPZmZzZXQgYW5kIHJhbmdlcyBkby4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IDAyNjA2NWE0NjZiOTgzMWIx
ZDk1OGMzYjNlNGU1ZGNkZWUzMTBjNDIuLmQ3YjU2NzM4Mzc0ODg5NmJmZTRiMTlhYjk5Y2U5Njgy
MWUyMjYxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cApAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzYXZlZEdyYXBoaWNzQ29udGV4dChwYWludEluZm8uY29udGV4
dCgpLCBmYWxzZSk7CiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnBhcmVudE9yU2hh
ZG93SG9zdEVsZW1lbnQoKSkgewogICAgICAgICBhdXRvKiBwYXJlbnRDb250YWluZXIgPSBlbGVt
ZW50KCktPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGRyYWdnZWRD
b250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQoZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0ZvcihwYXJlbnRDb250YWluZXIsIERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCksICpl
bGVtZW50KCkpKSB7CisgICAgICAgIGlmIChkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRF
bGVtZW50KGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKnBhcmVudENvbnRhaW5lciwg
RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KSwgKmVsZW1lbnQoKSkpIHsKICAgICAgICAg
ICAgIHNhdmVkR3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKICAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuc2V0QWxwaGEoMC4yNSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAppbmRleCA5MmFmMGQ3Y2ZhYjgzOGJjYTI4NmM2N2FmMjEyYWYwNGVj
YmVjOTkzLi4wYjYyZGMxMTFkMDEyNjAxOWQxMWUzZDU1NDY4N2RjN2Q4ZDc0ZDRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBW
ZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRD
b250ZW50UmFuZ2VzQmV0d2Vlbk9mZgogICAgIGlmICghdGV4dE5vZGUoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtl
cnNGb3IodGV4dE5vZGUoKSwgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KTsKKyAgICBh
dXRvIG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCp0ZXh0Tm9kZSgp
LCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpOwogICAgIGlmIChtYXJrZXJzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAppbmRleCBiNjU2ZmQ2ZDA4M2ExNjhiOGEx
ZjM5MzE0Yzc2MWRlZjZkNThkMGVlLi40NzVlMTVmMGQzODUwMDBmMmNiMDU2NTg3MWVkZWRiZjZh
ODc0OTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmNwcApAQCAtMTY1LDkgKzE2NSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1v
dmVGcm9tQ2FjaGVBbmRJbnZhbGlkYXRlRGVwZW5kZW5jaWVzKFJlbmRlckVsZW1lbnQmIHJlbmRl
CiAgICAgICAgICAgICBjbGlwcGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUocmVuZGVyZXIpOwog
ICAgIH0KIAotICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFyZW5kZXJlci5lbGVtZW50
KCktPmlzU1ZHRWxlbWVudCgpKQorICAgIGlmICghaXM8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxl
bWVudCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBl
bmRlbmNpZXMgPSByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXIu
ZWxlbWVudCgpKSk7CisgICAgYXV0byogZGVwZW5kZW5jaWVzID0gcmVuZGVyZXIuZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KGRv
d25jYXN0PFNWR0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVtZW50KCkpKTsKICAgICBpZiAoIWRlcGVu
ZGVuY2llcykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCmluZGV4IDE4
MTg2MDM4NTA4YzgzMDI4ODc5M2VjOGE2ZTMxMDY5YzhlNzJjMzMuLjJkYmVhZjA2ZmM1MDdiYjAw
NmRkYTBhMjQwMTZmOWY2OTMwY2Y0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xNzAs
MTkgKzE3MCwxOSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJl
c291cmNlKCkKIHsKICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBzdmdF
eHRlbnNpb25zRnJvbUVsZW1lbnQoZWxlbWVudCgpKTsKICAgICBpZiAoIWV4dGVuc2lvbnMuaXNJ
ZE9mUGVuZGluZ1Jlc291cmNlKG1faWQpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnMuYWRkUmVzb3Vy
Y2UobV9pZCwgdGhpcyk7CisgICAgICAgIGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgKnRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6UGVuZGluZ0VsZW1lbnRzPiBjbGllbnRzID0gZXh0ZW5zaW9ucy5y
ZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9pZCk7CiAKICAgICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBu
ZXcgaWQuCi0gICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJjZShtX2lkLCB0aGlzKTsKKyAgICBleHRl
bnNpb25zLmFkZFJlc291cmNlKG1faWQsICp0aGlzKTsKIAogICAgIC8vIFVwZGF0ZSBjYWNoZWQg
cmVzb3VyY2VzIG9mIHBlbmRpbmcgY2xpZW50cy4KICAgICBmb3IgKGF1dG8qIGNsaWVudCA6ICpj
bGllbnRzKSB7CiAgICAgICAgIEFTU0VSVChjbGllbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7
Ci0gICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShj
bGllbnQpOworICAgICAgICBleHRlbnNpb25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9z
c2libGUoKmNsaWVudCk7CiAgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gY2xpZW50LT5yZW5kZXJl
cigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKaW5kZXggZWE5YjQ1
MjExNTczMzEzMjNjYTJiMjBjZmY3YmY5ZDI5ZDM5MGVmZi4uNDEzYmJjMjZjOTY1ODYwNTA3ZTRm
NGQ3OGQwOGU5MmJkZWU2NjMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVzb3VyY2VzLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVy
U1ZHUmVzb3VyY2VDb250YWluZXIqIHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFpbnQoRG9jdW1l
bnQmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShTVkdEb2N1
bWVudEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR0Vs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZXh0ZW5zaW9ucy5hZGRQZW5kaW5nUmVzb3VyY2UoaWQs
ICZlbGVtZW50KTsKKyAgICBleHRlbnNpb25zLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgZWxlbWVu
dCk7CiB9CiAKIGJvb2wgU1ZHUmVzb3VyY2VzOjpidWlsZENhY2hlZFJlc291cmNlcyhjb25zdCBS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAppbmRl
eCA4M2Q5MTJlZWJlOGZlNDI4Mzg2OGQyZDEzYWRjNDM5MjhkYTI1OTY3Li42OTQzM2FhMjdiMzFm
ZmQzYjViOGU4ZjI2MTc3N2I0N2UxYjZkYzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcApAQCAtMTY5LDggKzE2OSw4IEBAIHZv
aWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyJiByZXNvdXJjZSkKIAogICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3ll
ZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUg
b2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50JiByZXNvdXJjZUVsZW1lbnQgPSByZXNvdXJj
ZS5lbGVtZW50KCk7Ci0gICAgICAgIEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSBpdC5rZXktPmVs
ZW1lbnQoKTsKLSAgICAgICAgY2xpZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0
ZSgpLCBjbGllbnRFbGVtZW50KTsKKyAgICAgICAgRWxlbWVudCYgY2xpZW50RWxlbWVudCA9ICpp
dC5rZXktPmVsZW1lbnQoKTsKKyAgICAgICAgY2xpZW50RWxlbWVudC5kb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LmdldElk
QXR0cmlidXRlKCksIGNsaWVudEVsZW1lbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVNjb3BlLmNwcAppbmRleCAxNzY5MGNjZDY3Nzc5YzIzYjkzNzc2MzA4NDQ1NDYyZDdhYTky
MmRkLi5lNmYwNzE0YTQzN2E1NDhmNWExNDFkMjU3OTc4ZTU3ZThkYTY0NTYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlLmNwcApAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgU2NvcGU6OmNv
bGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRz
KQogICAgICAgICAgICAgaWYgKHBpLmlzWFNMKCkgJiYgIW1fZG9jdW1lbnQudHJhbnNmb3JtU291
cmNlRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFu
c2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNoZWQuCiAgICAgICAgICAgICAgICAgaWYgKCFt
X2RvY3VtZW50LnBhcnNpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBs
eVhTTFRyYW5zZm9ybSgmcGkpOworICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5
WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAK
aW5kZXggZWI4MTU0Y2Y1YzJlZTNmOTBlYWViNDM5MTIzMGU5YzA1M2IyYTNiNy4uY2U0MmMyMTcx
NGY2MmU0MGMyMjM3ZjA2MzY5ODJlYWYxZWMzYTQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTUxLDI3ICs1MSwyNSBAQCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6On5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKQogewogfQogCi12b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6YWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50KiBlbGVtZW50
KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3RpbWVDb250YWluZXJzLmFkZChlbGVtZW50KTsKKyAg
ICBtX3RpbWVDb250YWluZXJzLmFkZCgmZWxlbWVudCk7CiAgICAgaWYgKG1fYXJlQW5pbWF0aW9u
c1BhdXNlZCkKLSAgICAgICAgZWxlbWVudC0+cGF1c2VBbmltYXRpb25zKCk7CisgICAgICAgIGVs
ZW1lbnQucGF1c2VBbmltYXRpb25zKCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpyZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIG1fdGltZUNvbnRhaW5lcnMucmVtb3ZlKGVsZW1lbnQpOworICAgIG1fdGlt
ZUNvbnRhaW5lcnMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRS
ZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ciYgcmVzb3VyY2UpCiB7Ci0gICAgQVNTRVJUKHJlc291cmNlKTsKLQogICAgIGlmIChpZC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJlcGxhY2VzIHJlc291cmNlIGlmIGFs
cmVhZHkgcHJlc2VudCwgdG8gaGFuZGxlIHBvdGVudGlhbCBpZCBjaGFuZ2VzCi0gICAgbV9yZXNv
dXJjZXMuc2V0KGlkLCByZXNvdXJjZSk7CisgICAgbV9yZXNvdXJjZXMuc2V0KGlkLCAmcmVzb3Vy
Y2UpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlUmVzb3VyY2UoY29u
c3QgQXRvbWljU3RyaW5nJiBpZCkKQEAgLTk3LDcgKzk1LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OnN0YXJ0QW5pbWF0aW9ucygpCiAgICAgLy8gRklYTUU6IFdlIGhvbGQgYSByZWYg
cG9pbnRlcnMgdG8gcHJldmVudCBhIHNoYWRvdyB0cmVlIGZyb20gZ2V0dGluZyByZW1vdmVkIG91
dCBmcm9tIHVuZGVybmVhdGggdXMuCiAgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgcmVm
YWN0b3IgdGhlIHVzZS1lbGVtZW50IHRvIGF2b2lkIHRoaXMuIFNlZSBodHRwczovL3dlYmtpdC5v
cmcvYi81MzcwNAogICAgIFZlY3RvcjxSZWZQdHI8U1ZHU1ZHRWxlbWVudD4+IHRpbWVDb250YWlu
ZXJzOwotICAgIHRpbWVDb250YWluZXJzLmFwcGVuZFJhbmdlKG1fdGltZUNvbnRhaW5lcnMuYmVn
aW4oKSwgbV90aW1lQ29udGFpbmVycy5lbmQoKSk7CisgICAgY29weVRvVmVjdG9yKG1fdGltZUNv
bnRhaW5lcnMsIHRpbWVDb250YWluZXJzKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB0aW1l
Q29udGFpbmVycykKICAgICAgICAgZWxlbWVudC0+dGltZUNvbnRhaW5lcigpLmJlZ2luKCk7CiB9
CkBAIC0xNDQsMTkgKzE0MiwxNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0
RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHJlcG9ydE1lc3NhZ2UobV9kb2N1bWVu
dCwgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9yOiAiICsgbWVzc2FnZSk7CiB9CiAKLXZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjph
ZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQo
aWQsIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0VsZW1lbnRzPigpOwot
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZChlbGVtZW50KTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5hZGQoJmVsZW1lbnQpOwogCi0gICAgZWxlbWVudC0+c2V0SGFzUGVuZGlu
Z1Jlc291cmNlcygpOworICAgIGVsZW1lbnQuc2V0SGFzUGVuZGluZ1Jlc291cmNlcygpOwogfQog
CiBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0
IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CkBAIC0xNjcsNDkgKzE2Myw0MyBAQCBib29sIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6aXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291cmNlcy5jb250YWlucyhpZCk7
CiB9CiAKLWJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRoUGVuZGluZ1Jl
c291cmNlcyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0
CiB7CiAgICAgLy8gVGhpcyBhbGdvcml0aG0gdGFrZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhl
IG51bWJlciBvZiBwZW5kaW5nIHJlc291cmNlcyBhbmQgbmVlZCBub3QuCiAgICAgLy8gSWYgcGVy
Zm9ybWFuY2UgYmVjb21lcyBhbiBpc3N1ZSB3ZSBjYW4ga2VlcCBhIGNvdW50ZWQgc2V0IG9mIGVs
ZW1lbnRzIGFuZCBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGVmZmljaWVudGx5LgotICAgIEFTU0VSVChl
bGVtZW50KTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnRzIDogbV9wZW5kaW5nUmVzb3VyY2VzLnZh
bHVlcygpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7Ci0KLSAgICAgICAgaWYgKGVsZW1l
bnRzLT5jb250YWlucyhlbGVtZW50KSkKKyAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucygm
ZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVzb3VyY2Uo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKK2Jvb2wgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjppc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KTsKLQog
ICAgIGlmICghaXNJZE9mUGVuZGluZ1Jlc291cmNlKGlkKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291cmNlcy5nZXQoaWQpLT5jb250YWlucyhlbGVt
ZW50KTsKKyAgICByZXR1cm4gbV9wZW5kaW5nUmVzb3VyY2VzLmdldChpZCktPmNvbnRhaW5zKCZl
bGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNsZWFySGFzUGVuZGlu
Z1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7CiAgICAgaWYgKCFpc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhlbGVtZW50
KSkKLSAgICAgICAgZWxlbWVudC0+Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgICAg
IGVsZW1lbnQuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBl
bmRpbmdSZXNvdXJjZXMoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7
Ci0KICAgICAvLyBSZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSBwZW5kaW5nIHJlc291cmNlcy4KLSAg
ICBpZiAoIW1fcGVuZGluZ1Jlc291cmNlcy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzUGVuZGlu
Z1Jlc291cmNlcygpKSB7CisgICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMuaXNFbXB0eSgpICYm
IGVsZW1lbnQuaGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CiAgICAgICAgIFZlY3RvcjxBdG9taWNT
dHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9wZW5k
aW5nUmVzb3VyY2VzKSB7CiAgICAgICAgICAgICBQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0g
cmVzb3VyY2UudmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAg
ICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgZWxl
bWVudHMtPnJlbW92ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVs
ZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlc291cmNlLmtleSk7CiAgICAgICAgIH0KQEAgLTIy
OSw3ICsyMTksNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZy
b21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAot
ICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1l
bnRzLT5yZW1vdmUoJmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlc291cmNlLmtleSk7CiAg
ICAgICAgIH0KQEAgLTI4NCw0MCArMjc0LDI5IEBAIEVsZW1lbnQqIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbE1hcChjCiAg
ICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKLUhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiBy
ZWZlcmVuY2VkRWxlbWVudCkgY29uc3QKK0hhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiBy
ZWZlcmVuY2VkRWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQocmVmZXJlbmNlZEVsZW1lbnQp
OwotICAgIGNvbnN0IGF1dG8gaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVu
Y2VkRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKKyAgICByZXR1
cm4gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdldCgmcmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCi12
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNW
R0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1l
bnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFy
Z2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCYgcmVmZXJlbmNl
ZEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgQVNTRVJU
KHJlZmVyZW5jZWRFbGVtZW50KTsKLQotICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZWxl
bWVudHMgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZ2V0KHJlZmVyZW5jZWRFbGVtZW50KSkgewot
ICAgICAgICBlbGVtZW50cy0+YWRkKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvIGVsZW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0
PFNWR0VsZW1lbnQqPj4oKTsKLSAgICBlbGVtZW50cy0+YWRkKHJlZmVyZW5jaW5nRWxlbWVudCk7
Ci0gICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnNldChyZWZlcmVuY2VkRWxlbWVudCwgV1RGTW92
ZShlbGVtZW50cykpOworICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVu
c3VyZSgmcmVmZXJlbmNlZEVsZW1lbnQsIFsmcmVmZXJlbmNpbmdFbGVtZW50XSB7CisgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8U1ZHRWxlbWVudCo+PihzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8U1ZHRWxlbWVudCo+IHsgJnJlZmVyZW5jaW5nRWxlbWVudCB9KTsKKyAgICB9
KTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5hZGQoJnJlZmVyZW5jaW5nRWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50
KiByZWZlcmVuY2luZ0VsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCYgcmVmZXJlbmNpbmdFbGVt
ZW50KQogewogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4gdG9CZVJlbW92ZWQ7CiAKICAgICBmb3Ig
KGF1dG8mIGRlcGVuZGVuY3kgOiBtX2VsZW1lbnREZXBlbmRlbmNpZXMpIHsKLSAgICAgICAgU1ZH
RWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBkZXBlbmRlbmN5LmtleTsKLSAgICAgICAgSGFz
aFNldDxTVkdFbGVtZW50Kj4mIHJlZmVyZW5jaW5nRWxlbWVudHMgPSAqZGVwZW5kZW5jeS52YWx1
ZTsKLSAgICAgICAgcmVmZXJlbmNpbmdFbGVtZW50cy5yZW1vdmUocmVmZXJlbmNpbmdFbGVtZW50
KTsKKyAgICAgICAgYXV0byYgcmVmZXJlbmNpbmdFbGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVl
OworICAgICAgICByZWZlcmVuY2luZ0VsZW1lbnRzLnJlbW92ZSgmcmVmZXJlbmNpbmdFbGVtZW50
KTsKICAgICAgICAgaWYgKHJlZmVyZW5jaW5nRWxlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICAgICAgICAgIHRv
QmVSZW1vdmVkLmFwcGVuZChkZXBlbmRlbmN5LmtleSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdG9CZVJlbW92ZWQpCkBAIC0zMzMsMTEgKzMxMiw5IEBAIHZvaWQgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkRWxlbWVudHMoKQogCiB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6Y2xlYXJUYXJnZXREZXBlbmRlbmNpZXMoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVs
ZW1lbnQpCiB7Ci0gICAgYXV0byBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKCZyZWZl
cmVuY2VkRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQo
KSkKKyAgICBhdXRvKiByZWZlcmVuY2luZ0VsZW1lbnRzID0gbV9lbGVtZW50RGVwZW5kZW5jaWVz
LmdldCgmcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIGlmICghcmVmZXJlbmNpbmdFbGVtZW50cykK
ICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChpdC0+a2V5ID09ICZyZWZlcmVuY2VkRWxlbWVu
dCk7Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+
dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChhdXRvKiBlbGVtZW50IDogKnJlZmVyZW5jaW5nRWxlbWVu
dHMpIHsKICAgICAgICAgbV9yZWJ1aWxkRWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOwogICAgICAg
ICBlbGVtZW50LT5jYWxsQ2xlYXJUYXJnZXQoKTsKQEAgLTM2MSwyMyArMzM4LDI1IEBAIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJn
ZXQoU1ZHRWxlbWVudCYgcmVmCiAgICAgICAgIGVsZW1lbnQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
WExpbmtOYW1lczo6aHJlZkF0dHIpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNl
ZEVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJl
ZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAg
bV9lbGVtZW50RGVwZW5kZW5jaWVzLnJlbW92ZShyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgbV9y
ZWJ1aWxkRWxlbWVudHMucmVtb3ZlRmlyc3QocmVmZXJlbmNlZEVsZW1lbnQpOworICAgIG1fZWxl
bWVudERlcGVuZGVuY2llcy5yZW1vdmUoJnJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICBtX3JlYnVp
bGRFbGVtZW50cy5yZW1vdmVGaXJzdCgmcmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCiAjaWYgRU5B
QkxFKFNWR19GT05UUykKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWdpc3RlclNWR0Zv
bnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpCisKK3ZvaWQgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjpyZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLmFkZChlbGVtZW50
KTsKKyAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9u
dEZhY2VFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucmVn
aXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIEFTU0VSVChtX3N2Z0ZvbnRGYWNlRWxlbWVudHMuY29udGFpbnMoZWxlbWVudCkpOwotICAg
IG1fc3ZnRm9udEZhY2VFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3Zn
Rm9udEZhY2VFbGVtZW50cy5jb250YWlucygmZWxlbWVudCkpOworICAgIG1fc3ZnRm9udEZhY2VF
bGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQorCiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCmluZGV4IDZhNTI3NzA0OWM1YjI1NTAyNWY5
OWE3MmUxOWYyY2UwODFiZDFkZWIuLjVjMjFlNTUyMGZkNzQzMDY4MGU4N2FjNGU1MDY0NmI2ZGI0
YTc2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKQEAg
LTQzLDEwICs0MywxMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zKERvY3VtZW50Jik7CiAgICAgflNWR0RvY3VtZW50RXh0ZW5zaW9ucygpOwogICAgIAotICAg
IHZvaWQgYWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVU
aW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqKTsKKyAgICB2b2lkIGFkZFRpbWVDb250YWluZXIo
U1ZHU1ZHRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlVGltZUNvbnRhaW5lcihTVkdTVkdFbGVt
ZW50Jik7CiAKLSAgICB2b2lkIGFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7CisgICAgdm9pZCBhZGRSZXNvdXJjZShjb25zdCBB
dG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYpOwogICAgIHZvaWQg
cmVtb3ZlUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7CiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqIHJlc291cmNlQnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25z
dDsKIApAQCAtNjEsMTkgKzYxLDE5IEBAIHB1YmxpYzoKIAogICAgIFNWR1Jlc291cmNlc0NhY2hl
JiByZXNvdXJjZXNDYWNoZSgpIHsgcmV0dXJuICptX3Jlc291cmNlc0NhY2hlOyB9CiAKLSAgICBI
YXNoU2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0Vs
ZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdDsKLSAgICB2b2lkIGFkZEVsZW1lbnRSZWZl
cmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQq
IHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICB2b2lkIHJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNG
b3JFbGVtZW50KFNWR0VsZW1lbnQqKTsKKyAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZF
bGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KSBj
b25zdDsKKyAgICB2b2lkIGFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiBy
ZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICB2
b2lkIHJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQmKTsKICAg
ICB2b2lkIHJlYnVpbGRBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Jik7
Ci0gICAgdm9pZCByZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50
Kik7CisgICAgdm9pZCByZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVt
ZW50Jik7CiAKICAgICB2b2lkIGNsZWFyVGFyZ2V0RGVwZW5kZW5jaWVzKFNWR0VsZW1lbnQmKTsK
ICAgICB2b2lkIHJlYnVpbGRFbGVtZW50cygpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAg
ICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnRzOyB9Ci0gICAgdm9pZCByZWdp
c3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqKTsKLSAgICB2b2lkIHVu
cmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Kik7CisgICAgdm9p
ZCByZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Jik7CiAj
ZW5kaWYKIAogcHJpdmF0ZToKQEAgLTk1LDExICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGhp
cyBIYXNoTWFwIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW5kaW5nIHJlc291cmNlcy4gUGVuZGluZyBy
ZXNvdXJjZXMsIGFyZSBzdWNoCiAgICAgLy8gd2hpY2ggYXJlIHJlZmVyZW5jZWQgYnkgYW55IG9i
amVjdCBpbiB0aGUgU1ZHIGRvY3VtZW50LCBidXQgZG8gTk9UIGV4aXN0IHlldC4KICAgICAvLyBG
b3IgaW5zdGFuY2UsIGR5bmFtaWNhbGx5IGJ1aWxkIGdyYWRpZW50cyAvIHBhdHRlcm5zIC8gY2xp
cHBlcnMuLi4KLSAgICB2b2lkIGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcm
IGlkLCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCwgRWxlbWVudCYpOwogICAgIGJvb2wgaXNJZE9mUGVuZGluZ1Jlc291cmNlKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwotICAgIGJvb2wgaXNQZW5kaW5nUmVzb3VyY2Uo
RWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJI
YXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVF
bGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCopOworICAgIGJvb2wgaXNQZW5kaW5n
UmVzb3VyY2UoRWxlbWVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OworICAgIHZv
aWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShFbGVtZW50Jik7CisgICAgdm9p
ZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYpOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxQZW5kaW5nRWxlbWVudHM+IHJlbW92ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBB
dG9taWNTdHJpbmcmIGlkKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBh
cmUgdXNlZCBmb3Igc2NoZWR1bGluZyBhIHBlbmRpbmcgcmVzb3VyY2UgdG8gYmUgcmVtb3ZlZC4K
QEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogcmVtb3ZlRWxlbWVudEZy
b21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbE1hcChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAog
cHJpdmF0ZToKLSAgICBib29sIGlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQq
KSBjb25zdDsKKyAgICBib29sIGlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQm
KSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5k
aW5nUmVzb3VyY2VGb3JSZW1vdmFsKGNvbnN0IEF0b21pY1N0cmluZyYpOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDcwMTg5ODFiOTJiOTZkZmJiMDVhYmE1NWQxMWU2YmMx
ZWYxNzE4YTguLmRlMDFhMjJkZDhhODgyMDAyMWI2OWQwZGQ3YWUwZGJlNTlkOWZmZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTI5NCw3ICsyOTQsNyBAQCBTVkdFbGVtZW50Ojp+
U1ZHRWxlbWVudCgpCiAgICAgICAgIG1fc3ZnUmFyZURhdGEgPSBudWxscHRyOwogICAgIH0KICAg
ICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZWJ1aWxkQWxsRWxlbWVudFJlZmVy
ZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOworICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9y
VGFyZ2V0KCp0aGlzKTsKIH0KIAogaW50IFNWR0VsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKQEAg
LTM3NSw3ICszNzUsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmIHJvb3RQYXJlbnQpCiAKICAgICBpZiAod2FzSW5Eb2N1bWVudCkgewogICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5jbGVhclRhcmdldERlcGVuZGVuY2llcygqdGhp
cyk7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVs
ZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhp
cyk7CiAgICAgfQogICAgIGludmFsaWRhdGVJbnN0YW5jZXMoKTsKIH0KQEAgLTEwMTYsNyArMTAx
Niw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKQog
ICAgICAgICBBU1NFUlQoY2xpZW50RWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAg
ICAgICAgaWYgKGNsaWVudEVsZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgewogICAgICAg
ICAgICAgY2xpZW50RWxlbWVudC0+YnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAg
IGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShjbGllbnRFbGVt
ZW50KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQ
b3NzaWJsZSgqY2xpZW50RWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlYzc0YThkMGU1YWI2YjVhZDk4YTg4
ZTc4ZTEyYzRiYTYyNWQ2YWU3Li5iMmMzMjM3Y2E5ZjNkNmQ0YTM2NWViY2Q5MGRjODlhMGQ3Mzg4
OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTc5LDcg
Kzc5LDcgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMo
KQogICAgICAgICBtX2NhY2hlZEltYWdlID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxl
bWVudCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVB
bGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIHZvaWQgU1ZHRkVJbWFn
ZUVsZW1lbnQ6OnJlcXVlc3RJbWFnZVJlc291cmNlKCkKQEAgLTEwNywxMyArMTA3LDEzIEBAIHZv
aWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICAgICAgaWYg
KGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3RJbWFnZVJlc291cmNlKCk7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAg
ICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKHRhcmdldC0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFNWR0Vs
ZW1lbnQ+KCp0YXJnZXQpKSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdl
dCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAg
ICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMs
IHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0Vs
ZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+
KCp0YXJnZXQpKTsKICAgICB9CiAKICAgICBpbnZhbGlkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4IGI4YmE5YjA3ZmUyYTY0MDkzNjlmMWFjODQ1
MmI1YTVhZThhYzY4ZWMuLjQ2Mzg4MDYxNDlkNWY1M2NhYjhmOGMzM2I3MzNmZDY0ZjQ4YWVmYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCkBAIC0yNzgsNyAr
Mjc4LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdGb250RmFjZUVs
ZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2QKICAgICAgICAgQVNTRVJUKCFtX2ZvbnRF
bGVtZW50KTsKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAgICAgfQotICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KHRo
aXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlZ2lzdGVyU1ZHRm9u
dEZhY2VFbGVtZW50KCp0aGlzKTsKIAogICAgIHJlYnVpbGRGb250RmFjZSgpOwogICAgIHJldHVy
biBJbnNlcnRpb25Eb25lOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVt
ZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQogCiAgICAgaWYgKHJv
b3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgewogICAgICAgICBtX2ZvbnRFbGVtZW50ID0gbnVsbHB0
cjsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkudW5yZWdpc3RlclNW
R0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkudW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCgqdGhpcyk7CiAgICAgICAgIG1f
Zm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpLmNsZWFyKCk7CiAKICAgICAgICAgZG9j
dW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlU3R5bGVTaGVldEVudmlyb25tZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCmluZGV4IGZmN2Q0ODcyZDY5NDU2N2U3
NTJjM2ZjZmE3MDkwZjdjZmNkYTQ3MTguLmRmMjUyYmYwMmI2OGI0OGQ2Njk5OTk4YmU4ZDVmMDJh
NWQyNTFkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCkBAIC02NSwx
NyArNjUsMTcgQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkK
ICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9t
SVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIXRhcmdldCkgewog
ICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBw
ZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAgIGlmIChkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgqdGhpcywgaWQp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVz
b3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQo
aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGFyZ2V0
LT5pc1NWR0VsZW1lbnQoKSkgeworICAgIH0gZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oKnRhcmdl
dCkpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBl
bmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQg
bGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJl
YWN0IHRvIGl0LgotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRF
bGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0
KSk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRS
ZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnRhcmdldCkpOwog
ICAgIH0KIAogICAgIHRhcmdldFBhdGhDaGFuZ2VkKCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQg
U1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAKIHZvaWQgU1ZHTVBhdGhF
bGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhp
cyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0
UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiBOb2RlOjpJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IFNWR01QYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUm
IHJvb3RQYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBlMjIz
MGY0MTJkZDgxMzViZjI1NzYxNWJlYjhlZTQ4NDc3ZmRlMDRlLi5mNzE2NDcwYzJiMzk1MGRiMjI1
ODEwYmMzMGVjNGExODgyNzBlNzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5j
cHAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBh
dGhEZXBlbmRlbmNpZXMoKQogewogICAgIC8vIDxtcGF0aD4gY2FuIG9ubHkgcmVmZXJlbmNlIDxw
YXRoPiBidXQgdGhpcyBkZXBlbmRlbmN5IGlzIG5vdCBoYW5kbGVkIGluCiAgICAgLy8gbWFya0Zv
ckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBh
dGggZGVwZW5kZW5jaWVzIG1hbnVhbGx5LgotICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiog
ZGVwZW5kZW5jaWVzID0gZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVt
ZW50c1JlZmVyZW5jaW5nVGFyZ2V0KHRoaXMpKSB7CisgICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVu
dCo+KiBkZXBlbmRlbmNpZXMgPSBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMpKSB7CiAgICAgICAgIGZvciAoYXV0byog
ZWxlbWVudCA6ICpkZXBlbmRlbmNpZXMpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdNUGF0aEVs
ZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxTVkdNUGF0aEVsZW1l
bnQ+KCplbGVtZW50KS50YXJnZXRQYXRoQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwCmluZGV4IGJmYTkxNzJlODkxY2M2NDMwOGYzNDYyNGU3NGU1ZWU5YjNhN2EzMjgu
Ljk0MDUwZGI5M2FhZWZlZmMyOTRjNDc0YjYxZGViNGQxZjZhM2VkZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgaW5saW5lIFNWR1NWR0VsZW1l
bnQ6OlNWR1NWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQm
IGRvY3UKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSk7CiAgICAg
cmVnaXN0ZXJBbmltYXRlZFByb3BlcnRpZXNGb3JTVkdTVkdFbGVtZW50KCk7Ci0gICAgZG9jdW1l
bnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9j
dW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQog
CiBSZWY8U1ZHU1ZHRWxlbWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTk2LDE0ICs5NiwxNCBAQCBT
VkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCgpCiB7CiAgICAgaWYgKG1fdmlld1NwZWMpCiAg
ICAgICAgIG1fdmlld1NwZWMtPnJlc2V0Q29udGV4dEVsZW1lbnQoKTsKLSAgICBkb2N1bWVudCgp
LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsK
KyAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
KnRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVD
b250YWluZXIoKnRoaXMpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmRpZE1vdmVUb05ld0Rv
Y3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewot
ICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
dGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcyh0aGlzKTsKKyAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRT
dXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OmRpZE1v
dmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiB9CiAKQEAgLTQ3MCw3
ICs0NzAsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bAogTm9kZTo6SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYg
cm9vdFBhcmVudCkKIHsKICAgICBpZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAg
ICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFRpbWVDb250YWluZXIodGhp
cyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFRpbWVDb250
YWluZXIoKnRoaXMpOwogICAgICAgICBpZiAoIWRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmFyZUFuaW1hdGlvbnNQYXVzZWQoKSkKICAgICAgICAgICAgIHVucGF1c2VBbmltYXRpb25z
KCk7CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IFNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBybwogdm9pZCBT
VkdTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQogewog
ICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcigqdGhp
cyk7CiAgICAgICAgIHBhdXNlQW5pbWF0aW9ucygpOwogICAgIH0KICAgICBTVkdHcmFwaGljc0Vs
ZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxl
bWVudC5jcHAKaW5kZXggYjA4MzczNjE1MTM3MDY4MzAxYWUwZmRlYjdlOWM5YTk5MDlmMmE0MS4u
NmY5ZDZlM2ZjMWYxMjNmZGZmNzFkZWE1ZGY4YmVhNDJmMWFiMTJkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVFJlZkVsZW1lbnQuY3BwCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBTVkdUUmVmRWxl
bWVudDo6ZGV0YWNoVGFyZ2V0KCkKICAgICBTdHJpbmcgaWQ7CiAgICAgU1ZHVVJJUmVmZXJlbmNl
Ojp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRvY3VtZW50KCksICZpZCk7CiAg
ICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogfQog
CiB2b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZv
aWQgU1ZHVFJlZkVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICAgICAgaWYgKGlk
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQs
ICp0aGlzKTsKICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBh
dGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3Bw
CmluZGV4IDc1MTdlOGI4YTYwMTBlNmFhNmQ3ZTQ0Mzc4OWQ4OWZmODQ2OGRiNDEuLjgwNmFlODc2
NTg5ZjM3ZmQ5M2MzMTNjOWUyOGIwYzY2OTc1MjMwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0UGF0aEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
U1ZHVGV4dFBhdGguaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAi
WExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC02Niw3
ICs2Nyw3IEBAIFNWR1RleHRQYXRoRWxlbWVudDo6flNWR1RleHRQYXRoRWxlbWVudCgpCiAKIHZv
aWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNl
c0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiBib29sIFNW
R1RleHRQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCkBAIC0xNTksMTcgKzE2MCwxNyBAQCB2b2lkIFNWR1RleHRQYXRoRWxlbWVu
dDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgIEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJl
ZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAm
aWQpOwogICAgIGlmICghdGFyZ2V0KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBw
ZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAgICAgICAg
aWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKHRo
aXMsIGlkKSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlz
UGVuZGluZ1Jlc291cmNlKCp0aGlzLCBpZCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgICAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0
aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmICh0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcp
KSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5k
ZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxl
YWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFj
dCB0byBpdC4KLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxl
bWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkp
OworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVm
ZXJlbmNpbmdUYXJnZXQoKnRoaXMsIGRvd25jYXN0PFNWR1BhdGhFbGVtZW50PigqdGFyZ2V0KSk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggNWU3MzIz
ODBjNWQ4MDgzODhmMzhiYThjMzAxYTJlZTljZTk5ODMzYS4uZGRmNjU2YzI1MWU4ZTNkMjBiZmQ0
OTVjNGJjM2YxMTA5MDcwYWE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApA
QCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6dXBkYXRlU2hhZG93VHJlZSgp
CiAgICAgU3RyaW5nIHRhcmdldElEOwogICAgIGF1dG8qIHRhcmdldCA9IGZpbmRUYXJnZXQoJnRh
cmdldElEKTsKICAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UodGFyZ2V0SUQsIHRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UodGFy
Z2V0SUQsICp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCA4NjJkNjhhYjRkNTI3
MDM4YTQ3YzM1MjE3OTUzYTg5YTg1M2E3OGY0Li42ZTg1ODNiYmE0Y2JjM2IzMGZjYzg2MTNkY2Qy
MzVkN2IyNTUyNjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBAIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01J
TEVsZW1lbnQoKQogCiB2b2lkIFNWR1NNSUxFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNl
cygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFy
Z2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwog
fQogCiB2b2lkIFNWR1NNSUxFbGVtZW50OjpjbGVhclRhcmdldCgpCkBAIC0xOTIsMTcgKzE5Miwx
NyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAKICAgICBp
ZiAoIXN2Z1RhcmdldCkgewogICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBp
ZiB3ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGlmIChkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkp
CisgICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdS
ZXNvdXJjZSgqdGhpcywgaWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICgh
aWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAg
ICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUg
ZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0
aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNh
biByZWFjdCB0byBpdC4KLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIHN2Z1RhcmdldCk7CisgICAgICAgIGRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1Rhcmdl
dCgqdGhpcywgKnN2Z1RhcmdldCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggOWY4YzI0YTIyOTI5ZTFjYzkxYWQzZmIzYThlNjI4ZWQzMTgzNmJmZS4u
YzUwMTM0NjFkNGIxMzIwMTg0ODJlZDc1YzRiYzkxOWFmYjA0MDQyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTM3MCw3ICsxMzcwLDcgQEAgRXhjZXB0aW9uT3I8dW5z
aWduZWQ+IEludGVybmFsczo6bWFya2VyQ291bnRGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0
cmluZyYgbWEKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAg
ICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNj
aGVkdWxlZCgpOwotICAgIHJldHVybiBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNG
b3IoJm5vZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7CisgICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQo
KS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCiBF
eGNlcHRpb25PcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gSW50ZXJuYWxzOjptYXJrZXJBdChO
b2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KQpAQCAt
MTM4Myw3ICsxMzgzLDcgQEAgRXhjZXB0aW9uT3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IElu
dGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW4KIAogICAgIG5vZGUuZG9j
dW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7
CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBW
ZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCku
bWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSwgbWFya2VyVHlwZXMpOwogICAgIGlmIChtYXJrZXJz
LnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1h
cmtlcnNbaW5kZXhdOwpAQCAtMTQzOSw3ICsxNDM5LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJ
bnRlcm5hbHM6OmR1bXBNYXJrZXJSZWN0cyhjb25zdCBTdHJpbmcmIG1hcmtlclR5cGVTdHJpbmcp
CiB2b2lkIEludGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwg
Ym9vbCBpc0FjdGl2ZSkKIHsKICAgICByYW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIoJnJhbmdlLCBpc0FjdGl2ZSk7CisgICAgcmFuZ2Uu
b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIocmFuZ2UsIGlzQWN0
aXZlKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRNYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKQEAgLTI2MTUsNDIgKzI2MTUsNiBAQCB2b2lk
IEludGVybmFsczo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKICAgICBk
b2N1bWVudC0+cGFnZSgpLT5zZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KTsKIH0KIAot
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLQotdm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxF
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudCgmZWxlbWVudCk7Ci19Ci0KLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50
KCZlbGVtZW50KTsKLX0KLQotdm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47
Ci0gICAgZG9jdW1lbnQtPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1l
bnQpOwotfQotCi12b2lkIEludGVybmFsczo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4
dERvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRv
Y3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQot
Ci0jZW5kaWYKLQogdm9pZCBJbnRlcm5hbHM6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90
YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
Y29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCAyYjgx
NDYwNGRjNWVlYzdiMzhlNzk0NjMzMDAzMjg3NWJkYWVkZjAyLi5kYTI3NzRlMGRlNjczM2I2ZjAx
ZjhiNGRhMmExYjZkMGQ0NzFkOGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAg
LTM1NiwxMyArMzU2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQo
ZmxvYXQpOwogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZvaWQgd2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYpOwotICAgIHZvaWQgd2Via2l0RGlk
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Jik7Ci0gICAgdm9pZCB3ZWJraXRXaWxs
RXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIHdlYmtpdERpZEV4
aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Jik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVf
VEVTVFNVUFBPUlRfRVhQT1JUIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVu
c2lnbmVkIGxvbmcgbG9uZyk7CiAKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3RyaW5nJiBzY2hlbWUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGU4N2E3NGM1OGFjNWMyYzZmMWY5OGIxZWM4YmVm
YWU0MTExOTEyMWQuLmM4MzAwOTAyM2NhY2FhNTE5YTFmNDAxMWI4OTA5OTJhNmZhMmI3MDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTMzMCwxMSArMzMwLDYgQEAgZW51
bSBFdmVudFRocm90dGxpbmdCZWhhdmlvciB7CiAKICAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNl
dCh1bnJlc3RyaWN0ZWQgZmxvYXQgY29udGVudEluc2V0KTsKIAotICAgIFtDb25kaXRpb25hbD1G
VUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChF
bGVtZW50IGVsZW1lbnQpOwotICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0gICAg
W0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVF
Tl9BUEldIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxl
bWVudCk7Ci0KICAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25l
ZCBsb25nIGxvbmcgcXVvdGEpOwogCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNz
aW5nQ29udGVudFNlY3VyaXR5UG9saWN5KERPTVN0cmluZyBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuY3BwCmluZGV4IDgyOTAzMTQwNWRiYjdmN2ViNDEzOWE0N2YyMDViZTZkNjdjNGRh
MGEuLmJiNGExODVmZDMwNzQzMDE0YzVjODk5NDhkYjNlMDRjNDY0YjRhZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlci5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFdvcmtl
cj4+IFdvcmtlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEpTQzo6
UnUKICAgICB3b3JrZXItPm1fc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9s
aWN5ID0gc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5OwogCiAgICAg
Ly8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdl
IG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBvYmplY3QgaXMgbm90IGNvbGxlY3RlZCwgbm9y
IGFyZSBpdHMgZXZlbnQgbGlzdGVuZXJzLgotICAgIHdvcmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5
KHdvcmtlci5wdHIoKSk7CisgICAgd29ya2VyLT5zZXRQZW5kaW5nQWN0aXZpdHkod29ya2VyLmdl
dCgpKTsKIAogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dv
cmtlcnMuaHRtbCNvZmZpY2lhbC1tb21lbnQtb2YtY3JlYXRpb24KICAgICB3b3JrZXItPm1fd29y
a2VyQ3JlYXRpb25UaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC0xNzgsNyArMTc4LDcg
QEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkKICAgICB9CiAgICAgbV9zY3JpcHRMb2Fk
ZXIgPSBudWxscHRyOwogCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5z
ZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA5YTRmZGI3ZDMxMzRmMGFhMTcy
ZGE1MDYwZjU5ZmVmZDQ0OGJmMzU0Li5hZDI3NWI2OGE1NDUyZWJkMDA4MzcxMzg0ZmE5Yzk0ZjJk
YTE0YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTE5MCw5ICsx
OTAsOSBAQCBFeGNlcHRpb25PcjxEb2N1bWVudCo+IFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhN
TCgpCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBudWxscHRyOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSFRNTCkKLSAgICAgICAgICAgICAgICBtX3Jlc3Bv
bnNlRG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7CisgICAgICAgICAg
ICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gSFRNTERvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwg
bV91cmwpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1
bWVudCA9IFhNTERvY3VtZW50OjpjcmVhdGUoMCwgbV91cmwpOworICAgICAgICAgICAgICAgIG1f
cmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgbV91cmwpOwog
ICAgICAgICAgICAgLy8gRklYTUU6IFNldCBMYXN0LU1vZGlmaWVkLgogICAgICAgICAgICAgbV9y
ZXNwb25zZURvY3VtZW50LT5zZXRDb250ZW50KG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJl
c2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudC0+c2V0Q29u
dGV4dERvY3VtZW50KGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KSk7CkBAIC00OTAsNyArNDkwLDcgQEAgc3RkOjpvcHRpb25hbDxFeGNlcHRpb25Pcjx2b2lkPj4g
WE1MSHR0cFJlcXVlc3Q6OnByZXBhcmVUb1NlbmQoKQogICAgIGlmICghY29udGV4dC5zaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhY29udGV4dC5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UobV91cmwpKSB7CiAgICAgICAg
IGlmICghbV9hc3luYykKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25Pcjx2b2lkPiB7IEV4
Y2VwdGlvbiB7IE5ldHdvcmtFcnJvciB9IH07Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgbV90aW1l
b3V0VGltZXIuc3RvcCgpOwogICAgICAgICBtX25ldHdvcmtFcnJvclRpbWVyLnN0YXJ0T25lU2hv
dCgwX3MpOwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uT3I8dm9pZD4geyB9OwpAQCAtNzU5LDcg
Kzc1OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0
KCkKICAgICAgICAgLy8gYSByZXF1ZXN0IGlzIGluIHByb2dyZXNzIGJlY2F1c2Ugd2UgbmVlZCB0
byBrZWVwIHRoZSBsaXN0ZW5lcnMgYWxpdmUsCiAgICAgICAgIC8vIGFuZCB0aGV5IGFyZSByZWZl
cmVuY2VkIGJ5IHRoZSBKYXZhU2NyaXB0IHdyYXBwZXIuCiAgICAgICAgIGlmIChtX2xvYWRlcikK
LSAgICAgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgICAgIHNldFBl
bmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVxdWVzdC5zZXRE
b21haW5Gb3JDYWNoZVBhcnRpdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnRvcE9yaWdp
bigpLmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxMb2FkWEhSU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwpAQCAtODkzLDcgKzg5Myw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0
aW9uKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQy
NTk1CiAgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkobV9yZXNwb25zZUJ1
aWxkZXIubGVuZ3RoKCkgKiAyKTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4g
WE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBvdmVycmlkZSkK
QEAgLTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgLy8gSW4gY2FzZSBkaWRGYWlsIGlzIGNhbGxlZCBz
eW5jaHJvbm91c2x5IG9uIGFuIGFzeW5jaHJvbm91cyBYSFIgY2FsbCwgbGV0J3MgZGlzcGF0Y2gg
bmV0d29yayBlcnJvciBhc3luY2hyb25vdXNseQogICAgIGlmIChtX2FzeW5jICYmIG1fc2VuZEZs
YWcgJiYgIW1fbG9hZGVyKSB7CiAgICAgICAgIG1fc2VuZEZsYWcgPSBmYWxzZTsKLSAgICAgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5zdG9wKCk7CiAgICAgICAgIG1fbmV0d29ya0Vy
cm9yVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoU3RlcC5jcHAKaW5kZXggOGM5MjdiZmYzZWViNjkwODFmMDQ3YmYwZjI2ZTZkOGVlZTkyYzVj
ZC4uZmNkYzAyYzUyMTRkMzk1MGJmYmQ0Y2NmZjczZDE4NWIyNjY1NTUwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoU3RlcC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlhN
TE5TTmFtZXMuaCIKQEAgLTIwMSw3ICsyMDAsNyBAQCBpbmxpbmUgYm9vbCBub2RlTWF0Y2hlc0Jh
c2ljVGVzdChOb2RlJiBub2RlLCBTdGVwOjpBeGlzIGF4aXMsIGNvbnN0IFN0ZXA6Ok5vZGVUZQog
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3RhckF0b20oKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSB8fCBuYW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1lc3Bh
Y2VVUkkoKTsKIAotICAgICAgICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4obm9kZS5kb2N1bWVu
dCgpKSkgeworICAgICAgICAgICAgaWYgKG5vZGUuZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBQYXRocyB3aXRob3V0IG5hbWVzcGFjZXMgc2hvdWxkIG1hdGNoIEhU
TUwgZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMgZGVzcGl0ZSB0aG9zZSBoYXZpbmcgYW4gWEhU
TUwgbmFtZXNwYWNlLiBOYW1lcyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxI
VE1MRWxlbWVudD4obm9kZSkubG9jYWxOYW1lKCksIG5hbWUpICYmIChuYW1lc3BhY2VVUkkuaXNO
dWxsKCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwCmluZGV4IGE5MGI5NjUwMDRjNDhmYjQ5MDRlYjdmYzJiZTFi
YzYzM2E3MjA2YTUuLmVhMGFjNDAyNTg0NGNiMjE0YjRlY2VkMjA5ZWFjOTM2YjgyNzAwM2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKQEAgLTIxLDExICsyMSwxMCBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCiAKICNp
ZiBFTkFCTEUoWFNMVCkKIAotI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKLQogI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKQEAgLTMzLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpblBvbGljeS5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKQEAgLTg3LDcgKzg1LDcgQEAgUmVmPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVh
dGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcKIAogICAgICAg
ICBpZiAoRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKICAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQob2xkRG9jdW1lbnQpOwot
ICAgICAgICAgICAgcmVzdWx0LT50YWtlRE9NV2luZG93RnJvbShvbGREb2N1bWVudCk7CisgICAg
ICAgICAgICByZXN1bHQtPnRha2VET01XaW5kb3dGcm9tKCpvbGREb2N1bWVudCk7CiAgICAgICAg
ICAgICByZXN1bHQtPnNldFNlY3VyaXR5T3JpZ2luUG9saWN5KG9sZERvY3VtZW50LT5zZWN1cml0
eU9yaWdpblBvbGljeSgpKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0Q29va2llVVJMKG9sZERv
Y3VtZW50LT5jb29raWVVUkwoKSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldEZpcnN0UGFydHlG
b3JDb29raWVzKG9sZERvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyLmNwcAppbmRleCAzNjY5YzJkYTk4NjBiM2FlYTYwMmM4ZGJmN2QwZmJjOTg3Nzk4
Y2RjLi41YWIyNjIwYTc4MTExNzQ3NzBkNzFiNjM1N2Q4ZDJkOTM5MWE5ZTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNj
cmVlbk1hbmFnZXIuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFu
YWdlcjo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQp
CiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAg
ICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbigqbV9lbGVtZW50KTsKICAg
ICBtX3BhZ2UtPmhpZGVQYWdlQmFubmVycygpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS51
cGRhdGVMYXlvdXQoKTsKICAgICBtX3BhZ2UtPmZvcmNlUmVwYWludFdpdGhvdXRDYWxsYmFjaygp
OwpAQCAtMTE5LDE0ICsxMTksMTQgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6d2lsbEVu
dGVyRnVsbFNjcmVlbigpCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxT
Y3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7
CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOwog
fQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRXhpdEZ1bGxTY3JlZW4oKQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIG1fZmluYWxGcmFtZSA9IHNjcmVlblJlY3RPZkNv
bnRlbnRzKG1fZWxlbWVudC5nZXQoKSk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtp
dFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgbV9wYWdl
LT5zaG93UGFnZUJhbm5lcnMoKTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRnVsbFNjcmVl
bkNsaWVudCgpLmJlZ2FuRXhpdEZ1bGxTY3JlZW4obV9wYWdlLmdldCgpLCBtX2ZpbmFsRnJhbWUs
IG1faW5pdGlhbEZyYW1lKTsKIH0KQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyOjp3aWxsRXhpdEZ1bGxTY3JlZW4oKQogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdl
cjo6ZGlkRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9l
bGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1
bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6c2V0QW5pbWF0aW5n
RnVsbFNjcmVlbihib29sIGFuaW1hdGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZTlmZjI0ZjgyZGM1ZDE5ZTU4Y2E5NmRjMTU0NmRk
ZGIzN2E0M2ZhMy4uOTQ1MDEzZDY4ODczOTdlMmViZjcxYjE5OWE5NWQ1MjljMzUwNTE1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0
LDcgKzc0LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnN0YXJ0
VXNlck1lZGlhUmVxdWVzdChVc2VyTWVkaWFSZXF1ZXN0JgogCiAgICAgYXV0byYgcGVuZGluZ1Jl
cXVlc3RzID0gbV9ibG9ja2VkUmVxdWVzdHMuYWRkKGRvY3VtZW50LCBWZWN0b3I8UmVmUHRyPFVz
ZXJNZWRpYVJlcXVlc3Q+PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKHBlbmRpbmdSZXF1
ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRo
aXMpOwogICAgIHBlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoJnJlcXVlc3QpOwogfQogCkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6Om1lZGlh
Q2FuU3RhcnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIHdoaWxlICghcGVuZGluZ1JlcXVlc3Rz
LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIWRvY3VtZW50LnBhZ2UoKS0+Y2FuU3RhcnRNZWRp
YSgpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrZWRSZXF1ZXN0cy5hZGQoJmRvY3VtZW50LCBwZW5k
aW5nUmVxdWVzdHMpOwotICAgICAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEzNyw3ICsxMzcs
NyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlTWVkaWFS
ZXF1ZXN0RnJvbU1hcHMoVXNlck1lZGlhUmVxdQogICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXF1ZXN0
LmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAg
ICAgIHJlcXVlc3QuZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlz
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9ibG9ja2VkUmVxdWVzdHMuYWRkKHJlcXVl
c3QuZG9jdW1lbnQoKSwgcGVuZGluZ1JlcXVlc3RzKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGVlYTM4
ZjA5ODJjN2VkNTExMjU4MzI3OWEyNjg5MDk2MGNkN2UyN2IuLjhjZGVjMjIxN2ZkYTU4Y2I2YzM4
NjQ1ZGRkYmQ1ZWJkN2Q4Y2YyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0zMTcsOSArMzE3LDkgQEAgUGx1Z2luVmlldzo6flBs
dWdpblZpZXcoKQogICAgIEFTU0VSVCghbV9pc0JlaW5nRGVzdHJveWVkKTsKIAogICAgIGlmICht
X2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5k
b2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgbV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhp
cyk7CiAKLSAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNl
cih0aGlzKTsKKyAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9k
dWNlcigqdGhpcyk7CiAKICAgICBkZXN0cm95UGx1Z2luQW5kUmVzZXQoKTsKIApAQCAtNTkwLDEz
ICs1OTAsMTMgQEAgdm9pZCBQbHVnaW5WaWV3Ojppbml0aWFsaXplUGx1Z2luKCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1f
aXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtX3Bs
dWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwor
ICAgICAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0
YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5h
ZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5h
ZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVE
X1BMVUdJTl9IRVVSSVNUSUMpCiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1h
Z2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oKm1fcGx1Z2luRWxl
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0KaW5kZXggYWY1YWMyZjI4
OWJjMWIxMjA0NjZjNTljMDI3OTA2ZWMxNDgxNjVlNy4uNTM3Y2M2NjgwNWQ0OWJlMGVkMGZiNDFm
NjA5MDYzNWU2Yjk5NWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQpA
QCAtNDUsMjUgKzQ1LDI1IEBAIC0gKGlkKWluaXRXaXRoRWxlbWVudDooRWxlbWVudCopZWxlbWVu
dAogLSAodm9pZCl3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50
KQotICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKl9lbGVtZW50KTsKIH0KIAogLSAodm9pZCl3ZWJr
aXREaWRFbnRlckZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVt
ZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1l
bnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1
bGxTY3JlZW4oKTsKIH0KIAogLSAodm9pZCl3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4KIHsKICAg
ICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxF
eGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVu
dC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAogLSAodm9pZCl3
ZWJraXREaWRFeGl0RnVsbFNjcmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2Vs
ZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVt
ZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1
bGxTY3JlZW4oKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KaW5kZXggM2YxMDk5NmZj
MjZmODY3NjFkODc5MmMwMGE3ZmJmMTJmOGU4ZDdhOC4uYTIxNmIwYThjZmVhYWYzNTI3ODYzZGM3
YmJlODNkZWVhOTFlMWNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCkBAIC0yMzYsNyArMjM2LDcg
QEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCiAKICAgICBfc2F2
ZWRTY2FsZSA9IFtfd2ViVmlldyBfdmlld1NjYWxlRmFjdG9yXTsKICAgICBbX3dlYlZpZXcgX3Nj
YWxlV2ViVmlldzoxIGF0T3JpZ2luOk5TTWFrZVBvaW50KDAsIDApXTsKLSAgICBbc2VsZiBfZG9j
dW1lbnRdLT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQo
KSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbigqX2Vs
ZW1lbnQpOwogICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1
ZSk7CiAgICAgW3NlbGYgX2RvY3VtZW50XS0+dXBkYXRlTGF5b3V0KCk7CiAKQEAgLTI2OSw3ICsy
NjksNyBAQCAtICh2b2lkKWZpbmlzaGVkRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNv
bXBsZXRlZAogICAgICAgICAvLyBTY3JlZW4gdXBkYXRlcyB0byBiZSByZS1lbmFibGVkIGF0IHRo
ZSBlbmQgb2YgdGhpcyBibG9jawogICAgICAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAg
ICAgICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwot
ICAgICAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlk
RW50ZXJGdWxsU2NyZWVuKCk7CiAgICAgICAgIAogICAgICAgICBOU1JlY3Qgd2luZG93Qm91bmRz
ID0gW1tzZWxmIHdpbmRvd10gZnJhbWVdOwogICAgICAgICB3aW5kb3dCb3VuZHMub3JpZ2luID0g
TlNaZXJvUG9pbnQ7CkBAIC0zMTMsNyArMzEzLDcgQEAgLSAodm9pZClleGl0RnVsbFNjcmVlbgog
CiAgICAgX2ZpbmFsRnJhbWUgPSBzY3JlZW5SZWN0T2ZDb250ZW50cyhfZWxlbWVudC5nZXQoKSk7
CiAKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhp
dEZ1bGxTY3JlZW4oKTsKICAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2Ny
ZWVuKHRydWUpOwogCiAgICAgaWYgKF9pc0VudGVyaW5nRnVsbFNjcmVlbikKQEAgLTM1Myw3ICsz
NTMsNyBAQCAtICh2b2lkKWZpbmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29t
cGxldGVkCiAgICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRlcygpOwogCiAgICAgW3NlbGYgX2RvY3Vt
ZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgW3NlbGYgX2RvY3VtZW50
XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAg
ICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogICAgIFtfd2Vi
VmlldyBfc2NhbGVXZWJWaWV3Ol9zYXZlZFNjYWxlIGF0T3JpZ2luOk5TTWFrZVBvaW50KDAsIDAp
XTsKIAogICAgIE5TUmVzcG9uZGVyICpmaXJzdFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIGZp
cnN0UmVzcG9uZGVyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCmluZGV4IDQ2MGU3OGU2ZTFmNzg0ODYwZmE3ZGVlNDVmYzEyMDU1ZmE2YTFhOTEu
Ljg1ZjcyMDEzZWRkNzg0MzFkMWQxNTg1MWMwMDZkOTFhNWRjYTFjMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMjE1LDcgKzIxNSw3
IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpCiAgICAgLy8g
b3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRh
IGJlZm9yZSB3ZSd2ZQogICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCiAgICAgaWYgKCFtX2xv
YWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsK
LSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNh
blN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVl
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yOTEsNyArMjkxLDcgQEAgUGx1Z2lu
Vmlldzo6flBsdWdpblZpZXcoKQogICAgICAgICBpbnN0YW5jZU1hcCgpLnJlbW92ZShtX2luc3Rh
bmNlKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1RvU3RhcnQpCi0gICAgICAgIG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAg
ICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKIAogICAgIHN0b3AoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApp
bmRleCA0YWFhMDkyOGM4MmIyNTlmNDEzNWM5MmZlMWY3MTBmOTVjMTJiOWMyLi5kNWZjYWFmN2Zk
ZjFhMWZkODRhMTViZjVmZDYyM2U3YzExYmQ4NjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJW
aWV3LmNwcApAQCAtNzUwNiwxMyArNzUwNiwxMyBAQCB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5D
bGllbnRTZXRQYXJlbnRXaW5kb3coSFdORCBob3N0V2luZG93KQogdm9pZCBXZWJWaWV3OjpmdWxs
U2NyZWVuQ2xpZW50V2lsbEVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNj
cmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7
CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudCgqbV9mdWxsU2NyZWVuRWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViVmll
dzo6ZnVsbFNjcmVlbkNsaWVudERpZEVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1f
ZnVsbFNjcmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCku
d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50Lmdl
dCgpKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVy
RnVsbFNjcmVlbkZvckVsZW1lbnQoKm1fZnVsbFNjcmVlbkVsZW1lbnQpOwogfQogCiB2b2lkIFdl
YlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3JlZW4oKQpAQCAtNzUyNCw3ICs3
NTI0LDcgQEAgdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEV4aXRGdWxsU2NyZWVu
KCkKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudERpZEV4aXRGdWxsU2NyZWVuKCkKIHsK
ICAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVu
dC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2Ny
ZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53
ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoKm1fZnVsbFNjcmVlbkVsZW1lbnQpOwog
ICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBudWxscHRyOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319838</attachid>
            <date>2017-09-03 22:32:38 -0700</date>
            <delta_ts>2017-09-03 22:55:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170903223237.patch</filename>
            <type>text/plain</type>
            <size>267907</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM3N2FlNzhmMzgzOWY2
MTY0NWI1MDA4ZGY2YjdiYjdjMGI4ZWYyMi4uODUyOWEwYzI5ZDFiNmIwNjJlNDNlYmI5M2FhYjkx
M2RjOWYzMzVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcj
dXRmOCgpIGFsbG9jYXRlcyBuZXcgQ1N0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhMTRmMTQyZGZiNTJhNmU3
NDAxYzEyNjk0NzdmNDBlNzk4YTNmMzE4Li4yYjYwMjc0NmJkMWViNmExYjM1ZDAyMTBlOWIwY2Y4
ODZlODRmMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIg
dGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBz
dHlsZSBpc3N1ZXMgaW4gdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCBhYzI2YThlNmZhYTgwZjUyYzE1MjEwMjY5N2FiMjQyYzNkNmRlYWIy
Li43MmI1ODUwYjIwNTM2YTg3NzQ1MDdjMDViZTg0NTgwYTVjNDk5MTU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTIgQEAKIDIwMTctMDktMDMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFu
IHBvaW50ZXJzIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwogICAgICAgICBbQ29jb2FdIFRpZHkgYSBmZXcgdGhp
bmdzIGluIGxlZ2FjeSBXZWJIVE1MVmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjgwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCAzODVkOTRkOWI5MjQ5NzI4NTU1
MmI5ZWU3ZTY2NGQ4MTY2MjFjZWI4Li43MjU3MTNkNTQzZWJmNTNmYTAzN2VkZWYwNTgwZWQyYTll
YzFkM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxl
UGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBs
ZVBheVNlc3Npb24uY3BwCkBAIC02OTksNyArNjk5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBw
bGVQYXlTZXNzaW9uOjpiZWdpbigpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAot
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRB
dXRob3JpemF0aW9uUgogICAgIH0KIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBib29s
IEFwcGxlUGF5U2Vzc2lvbjo6aXNGaW5hbFN0YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNz
aW9uOjpkaWRSZWFjaEZpbmFsU3RhdGUoKQogewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7
Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hl
U3RvcmFnZS5jcHAKaW5kZXggNDE1MzUxOGM3MmU4YTQ2ZmQ4MjY3MWY4MTJlOWU3Y2E4MDU2MjEx
YS4uZTNkYWRkMTBkMTExMTY3YzE1NTNkNWI4YWY2NmU4NWIyNGI5NGU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTAxLDcgKzEwMSw3
IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZv
LCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRp
bmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHN0YXJ0U2VxdWVudGlhbE1hdGNoKGNvcHlDYWNo
ZXMobV9jYWNoZXMpLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgcHJv
bWlzZSA9IFdURk1vdmUocHJvbWlzZSldKEV4Y2VwdGlvbk9yPEZldGNoUmVzcG9uc2UqPiYmIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTEzLDcgKzExMyw3IEBA
IHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZvLCBD
YWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxGZXRjaFJlc3BvbnNlPj4o
KnJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lk
IENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0
aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgIGlmIChvcmlnaW4uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+cmV0cmlldmVDYWNoZXMob3JpZ2luLCBt
X3VwZGF0ZUNvdW50ZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShDYWNo
ZUluZm9zT3JFcnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9pc1N0b3Bw
ZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2
b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgIH0pOwogfQogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUMK
ICAgICAgICAgU3RyaW5nIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOwogICAgICAgICBBU1NFUlQo
IW9yaWdpbi5pc051bGwoKSk7CiAKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX2Nvbm5lY3Rpb24t
Pm9wZW4ob3JpZ2luLCBuYW1lLCBbdGhpcywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlz
ZSldKGNvbnN0IENhY2hlSWRlbnRpZmllck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzVmFsdWUoKSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8RE9NQwog
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy5hcHBlbmQoV1RGTW92ZShjYWNoZSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIENhY2hlU3Rv
cmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURlZmVycmVkPElETEJv
b2xlYW4+JiYgcAogICAgICAgICBTdHJpbmcgb3JpZ2luID0gdGhpcy0+b3JpZ2luKCk7CiAgICAg
ICAgIEFTU0VSVCghb3JpZ2luLmlzTnVsbCgpKTsKIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1f
Y29ubmVjdGlvbi0+cmVtb3ZlKG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRlbnRpZmllcigpLCBbdGhp
cywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGNvbnN0IENhY2hlSWRlbnRpZmll
ck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVk
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTIzOCw3ICsy
MzgsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9N
UHJvbWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcAogICAgICAgICAgICAgICAgICAgICBwcm9t
aXNlLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICBtX2NhY2hlcy5yZW1v
dmUocG9zaXRpb24pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9ET01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlLmNwcAppbmRleCA0YmQ3YzUxMDdkMjBjYzdiZWIzNDE3ODFlOTU0ZjI4N2VjMzIzMjdlLi5i
YmE0ZTc2MWVlNjRkNTI5NmNkYzNiZWM0ZDM0NGE0ZTNmOTZiZjU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgRE9N
Q2FjaGU6OnB1dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjxGZXRjaFJlc3BvbnNlPiYmIHJlc3Bv
bnNlLCBET01Qcm9taXNlCiAgICAgfQogCiAgICAgaWYgKHJlc3BvbnNlLT5pc0xvYWRpbmcoKSkg
ewotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHJlc3BvbnNlLT5jb25zdW1lQm9keVdoZW5Mb2FkZWQo
W3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KSwg
cmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKSwgdGhpc10oRXhjZXB0aW9uT3I8UmVmUHRyPFNo
YXJlZEJ1ZmZlcj4+JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QocmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBET01DYWNoZTo6cHV0
KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVBy
b21pc2UKICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwOSw3ICs0
MDksNyBAQCB2b2lkIERPTUNhY2hlOjprZXlzKHN0ZDo6b3B0aW9uYWw8UmVxdWVzdEluZm8+JiYg
aW5mbywgQ2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpbwogCiB2b2lkIERPTUNhY2hlOjpyZXRyaWV2
ZVJlY29yZHMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKT4m
JiBjYWxsYmFjaykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPnJldHJpZXZlUmVjb3Jkcyht
X2lkZW50aWZpZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRz
T3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBE
T01DYWNoZTo6cmV0cmlldmVSZWNvcmRzKFdURjo6RnVuY3Rpb248dm9pZChzdGQ6Om9wdGlvbmFs
PEV4Y2VwdGlvbj4mJik+JiYKICAgICAgICAgICAgICAgICB1cGRhdGVSZWNvcmRzKFdURk1vdmUo
cmVzdWx0LnZhbHVlKCkpKTsKICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtNDU3LDcgKzQ1Nyw3
IEBAIFZlY3RvcjxDYWNoZVN0b3JhZ2VSZWNvcmQ+IERPTUNhY2hlOjpxdWVyeUNhY2hlV2l0aFRh
cmdldFN0b3JhZ2UoY29uc3QgRmV0Y2hSZXF1CiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoRGVsZXRl
T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVRdWVyeU9wdGlvbnMm
JiBvcHRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uT3I8Ym9vbD4mJik+JiYgY2Fs
bGJhY2spCiB7Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uLT5iYXRjaERlbGV0ZU9wZXJhdGlvbiht
X2lkZW50aWZpZXIsIHJlcXVlc3QuaW50ZXJuYWxSZXF1ZXN0KCksIFdURk1vdmUob3B0aW9ucyks
IFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRJZGVudGlmaWVyc09y
RXJyb3ImJiByZXN1bHQpIHsKICAgICAgICAgaWYgKCFtX2lzU3RvcHBlZCkgewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIERPTUNh
Y2hlOjpiYXRjaERlbGV0ZU9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIENh
Y2hlUXVlcnlPcHRpbwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxiYWNr
KCFyZXN1bHQudmFsdWUoKS5pc0VtcHR5KCkpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiAgICAgfSk7CiB9CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIERPTUNhY2hlOjpiYXRjaFB1
dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2UmIHJl
cwogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJl
Y29yZHMsIFdURjo6RnVuY3Rpb248dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFj
aykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPmJhdGNoUHV0T3BlcmF0aW9uKG1faWRlbnRp
ZmllciwgV1RGTW92ZShyZWNvcmRzKSwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKFJlY29yZElkZW50aWZpZXJzT3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1f
aXNTdG9wcGVkKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQpAQCAtNTA2
LDcgKzUwNiw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keU93bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5T3duZXIuY3BwCmluZGV4IDBmYjJkZjNjZjgxZWIzYmE4NTk5MDg2ZDg2YzFjNWZmYjBhN2Fm
NTQuLmIwYjlmNGM3MjFmMTZmNjM3ZDQwMWY3Y2YwNGQ4YWMxMTdkYjQzMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBGZXRjaEJvZHlPd25lcjo6bG9hZEJsb2IoY29uc3QgQmxvYiYgYmxvYiwg
RmV0Y2hCb2R5Q29uc3VtZXIqIGNvbnN1bWVyKQogICAgICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hC
b2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEZl
dGNoQm9keU93bmVyOjpmaW5pc2hCbG9iTG9hZGluZygpCiAgICAgQVNTRVJUKG1fYmxvYkxvYWRl
cik7CiAKICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2
b2lkIEZldGNoQm9keU93bmVyOjpibG9iTG9hZGluZ1N1Y2NlZWRlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKaW5kZXggMmFhN2NiYTBl
YzM4YmUyNTFhMmEwMmFkM2I3OTIwMGZhMmNkM2IxNC4uZWZiNTBjMDMyNWYxMWVhN2VhZWQ0NjY1
MWQ4YjZjZThlOTdkZTEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHlTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5U291cmNlLmNwcApAQCAtNDUsMTIgKzQ1LDEyIEBAIGJvb2wgRmV0Y2hCb2R5U291
cmNlOjppc1JlYWRhYmxlU3RyZWFtTG9ja2VkKCkgY29uc3QKIAogdm9pZCBGZXRjaEJvZHlTb3Vy
Y2U6OnNldEFjdGl2ZSgpCiB7Ci0gICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KCZt
X2JvZHlPd25lcik7CisgICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93
bmVyKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlTb3VyY2U6OnNldEluYWN0aXZlKCkKIHsKLSAgICBt
X2JvZHlPd25lci51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9ib2R5T3duZXIpOworICAgIG1fYm9k
eU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93bmVyKTsKIH0KIAogdm9pZCBGZXRj
aEJvZHlTb3VyY2U6OmRvU3RhcnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKaW5kZXggY2NlN2E4NzAxYzRmMTZjMDhjOTM1YWYzMDYzMDZiOTIw
NDc5ZTFkYy4uYWRlZDZjODMyZDdhOWI4ZTlkNGIzZDYyMzVmMmFjZGFiMzQxZDQwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCkBAIC0xNzAs
MTIgKzE3MCwxMiBAQCBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjpCb2R5TG9hZGVyKEZldGNo
UmVzcG9uc2UmIHJlc3BvbnNlLCBOb3RpZmljYXRpb25DYWxsYgogICAgIDogbV9yZXNwb25zZShy
ZXNwb25zZSkKICAgICAsIG1fcmVzcG9uc2VDYWxsYmFjayhXVEZNb3ZlKHJlc3BvbnNlQ2FsbGJh
Y2spKQogewotICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX3Jlc3BvbnNlKTsK
KyAgICBtX3Jlc3BvbnNlLnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogRmV0
Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6fkJvZHlMb2FkZXIoKQogewotICAgIG1fcmVzcG9uc2Uu
dW5zZXRQZW5kaW5nQWN0aXZpdHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2UudW5zZXRQ
ZW5kaW5nQWN0aXZpdHkobV9yZXNwb25zZSk7CiB9CiAKIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9k
eUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291
cmNlUmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2UuY3BwCmluZGV4IGMyY2VmYzY5YjA4YWU4MGNhNGI1NzNjOWY5ZjNlMTVkZDI5
NTEzMzYuLmIyZGZjZDg0NTUwNDdjYTdlMjJhYmVlMzY2MjZkY2Y1MThlYTUzZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBA
IC0xMzEsMTIgKzEzMSwxMiBAQCB2b2lkIE1lZGlhU291cmNlOjpzZXRQcml2YXRlQW5kT3BlbihS
ZWY8TWVkaWFTb3VyY2VQcml2YXRlPiYmIG1lZGlhU291cmNlUHJpdmF0ZQogCiB2b2lkIE1lZGlh
U291cmNlOjphZGRlZFRvUmVnaXN0cnkoKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE1lZGlhU291cmNl
OjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkKIHsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIE1lZGlhVGltZSBNZWRp
YVNvdXJjZTo6ZHVyYXRpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA3NDNlY2RiNTk1MGU3MzlhMDc1ZGVh
MjUzOGQ3MjU0MWZiMGUxMDhiLi5jODY0YTA0NzFkMjY4YzZlZGUzZDc3ZjdkMmNlNWQ2NTM5MTU2
NzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0o
KQogICAgICAgICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChtX2lzV2FpdGlu
Z1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4Niw3ICsyODYsNyBAQCB2
b2lkIE1lZGlhU3RyZWFtOjpzdGFydFByb2R1Y2luZ0RhdGEoKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAg
ICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IDE2ODg0ZTM4MjY2ODRjZTc3ODdkNTg2YTg0Zjg4
ZmRjNzkxYzI3ODkuLjhiMjQ1MjQ5YjkzNjZmMzg1YTM4NTk5ODA5MzFiMDcwMGUwMjYwNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLmNwcApAQCAtNjEsNyArNjEsNyBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0
cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxNZWRpYVN0cgog
ICAgIG1fcHJpdmF0ZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNl
cih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogfQog
CiBNZWRpYVN0cmVhbVRyYWNrOjp+TWVkaWFTdHJlYW1UcmFjaygpCkBAIC02OSw3ICs2OSw3IEBA
IE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKICAgICBtX3ByaXZhdGUtPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKIAogICAgIGlmIChhdXRvIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50LT5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5k
ZXggY2MwZTliNTRkMTA1MDg4YmZiNDYxMzkyYjEwZjM5NjZkN2QzMjY5ZC4uNzQ5NTA5ZDJiMjIy
YTAzMWNiYzY2YjE5MTIwYmRjZmRjZjMxNmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTU4LDcgKzU4LDcg
QEAgUmVmPFJUQ0RhdGFDaGFubmVsPiBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0ZDoKICAgICBhdXRvIGNoYW5uZWwgPSBhZG9wdFJlZigq
bmV3IFJUQ0RhdGFDaGFubmVsKGNvbnRleHQsIFdURk1vdmUoaGFuZGxlciksIFdURk1vdmUobGFi
ZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKSk7CiAgICAgY2hhbm5lbC0+c3VzcGVuZElmTmVlZGVkKCk7
CiAgICAgY2hhbm5lbC0+bV9oYW5kbGVyLT5zZXRDbGllbnQoY2hhbm5lbC5nZXQoKSk7Ci0gICAg
Y2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwucHRyKCkpOworICAgIGNoYW5uZWwt
PnNldFBlbmRpbmdBY3Rpdml0eShjaGFubmVsLmdldCgpKTsKICAgICByZXR1cm4gY2hhbm5lbDsK
IH0KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmNsb3NlKCkKIAog
ICAgIG1faGFuZGxlci0+Y2xvc2UoKTsKICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKIH0KIAogdm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZShSVENEYXRh
Q2hhbm5lbFN0YXRlIG5ld1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCA5MGIyMWVhNjIzYzE0
N2U0NTkxMmI1OTgxNWJkY2ExZDdkZDcwZDg5Li42ZTJmYTg3MzYzNzZkNTgxYzQwOWYyODM5ZjYy
ODM4MTAyNDBjYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNjIsMTIgKzYyLDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBQZWVyQ29ubmVjdGlvbjsKIAogUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBSVENQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7
Ci0gICAgUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpu
ZXcgUlRDUGVlckNvbm5lY3Rpb24oY29udGV4dCkpOworICAgIGF1dG8gcGVlckNvbm5lY3Rpb24g
PSBhZG9wdFJlZigqbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbnRleHQpKTsKICAgICBwZWVyQ29u
bmVjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgLy8gUlRDUGVlckNvbm5lY3Rpb24gbWF5
IHNlbmQgZXZlbnRzIGF0IGFib3V0IGFueSB0aW1lIGR1cmluZyBpdHMgbGlmZXRpbWUuCiAgICAg
Ly8gTGV0J3MgbWFrZSBpdCB1bmNvbGxlY3RhYmxlIHVudGlsIHRoZSBwYyBpcyBjbG9zZWQgYnkg
SlMgb3IgdGhlIHBhZ2Ugc3RvcHMgaXQuCiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+aXNDbG9z
ZWQoKSkgewotICAgICAgICBwZWVyQ29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJD
b25uZWN0aW9uLnB0cigpKTsKKyAgICAgICAgcGVlckNvbm5lY3Rpb24tPnNldFBlbmRpbmdBY3Rp
dml0eShwZWVyQ29ubmVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgLy8gSUNFIGNhbmRpZGF0ZSBm
aWx0ZXJpbmcgY2FuIG9ubHkgYmUgZGlzYWJsZWQgZm9yIGNvbm5lY3Rpb25zIGZyb20gZG9jdW1l
bnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIHRvcCBkb2N1bWVudCwKICAgICAg
ICAgLy8gb3IgaWYgdGhlIHBhZ2Ugd2FzIHNldCB0byBkaXNhYmxlIGl0LgpAQCAtNDMzLDcgKzQz
Myw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmRvU3RvcCgpCiAKICAgICBtX2JhY2tlbmQt
PnN0b3AoKTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cmVnaXN0
ZXJUb0NvbnRyb2xsZXIoUlRDQ29udHJvbGxlciYgY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXgg
ZjQzOTQzMThlYjFmZDdjZjA4N2Q5YjNjYjA4YzcxYjlmOWJkNzkxMS4uNzJhZDNhYmNjMDY2NjU0
MzI0NmNhODVhMzUzZTQwMjY1NjA1OTFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAg
dm9pZCBOb3RpZmljYXRpb246OnNob3coKQogICAgIH0KICAgICBpZiAoY2xpZW50LnNob3codGhp
cykpIHsKICAgICAgICAgbV9zdGF0ZSA9IFNob3dpbmc7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiB9
CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6ZmluYWxpemUoKQogICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUgPSBD
bG9zZWQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZl
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jh
c2ljSW5zcGVjdG9yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcAppbmRleCAyN2U1NmM0YzZiOTQ3YWViODI0NTllZDEz
ZjMzYjU4MWEzZDNhMGE0Li4wNTViZmY1ZjFlYmFhMWIyYmU1YTdjNDQwZWUwOWYzYjE3OGI5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtOTksNyArOTksNyBAQCB2b2lkIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKICAgICAgICAgLy8gV2hlbiBhbiBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUs
IGl0IHdpbGwgZ2V0IHB1bGxlZCBieSB0aGUKICAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0
aHVzIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KICAg
ICAgICAgaWYgKG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKLSAgICAgICAgICAgIGNvbnRleHQoKS5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5yZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQ
dWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA3LDExICsxMDcsMTEg
QEAgdm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCiAgICAg
ICAgIGlmIChudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgIW1fbmVlZEF1dG9tYXRpY1B1bGwp
IHsKICAgICAgICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgbm90
IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0cmVhbSBub2RlIHdoaWxlIHN0aWxsIGNvbm5lY3RlZCBm
cm9tCiAgICAgICAgICAgICAvLyB1cHN0cmVhbSBub2RlKHMpLCBhZGQgaXQgdG8gdGhlIGNvbnRl
eHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgotICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9t
YXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9tYXRpY1B1
bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAgIG1fbmVlZEF1dG9tYXRpY1B1bGwgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKCFudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgbV9uZWVkQXV0
b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gVGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
IGlzIGNvbm5lY3RlZCB0byBub3RoaW5nLCByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGF1
dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGlj
UHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVs
bE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCmluZGV4IGQ5NTA0N2M5MDMwNTFjMGJjM2Q1ZTYzOGIyN2I0NTg1NDI0
YjA1MzIuLjAxMmFlOGZmNjQ0MzhkYzYzYzdiNGI3MzBkOWJhMjdjMjM0NjA5YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKIHsKICAg
ICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBw
YWdlIG5hdmlnYXRlLgogICAgIC8vIExldHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0
aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgotICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CkBAIC0yMTgs
OCArMjE4LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGlu
ZUNvbnRleHQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcih0
aGlzKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZEF1ZGlv
UHJvZHVjZXIoKnRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICAgICAgLy8gVGhp
cyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRl
SW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1
ZGlvLgogICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwg
YSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhp
cyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9p
ZCBBdWRpb0NvbnRleHQ6OmNsZWFyKCkKICAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6
ZSgpKTsKIAogICAgIC8vIEl0IHdhcyBzZXQgaW4gY29uc3RydWN0Q29tbW9uLgotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCkBAIC0yNjMsOCArMjYzLDgg
QEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNr
cygqdGhpcyk7CiAKICAgICAgICAgQVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwogICAg
ICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CkBAIC04MjQsMTQgKzgyNCwxNCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6aGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogICAgIG1fZGVmZXJy
ZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtG
b3JEZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRl
bGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwog
CiAgICAgaWYgKGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKQotICAgICAgICBtX25vZGVzVG9EZWxl
dGUuYXBwZW5kKG5vZGUpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQobm9kZSk7
CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOwogCiAgICAg
Ly8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5v
ZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAogICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0aW9u
cyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRsZVBv
c3RSZW5kZXJUYXNrcygpCkBAIC05MjgsMTkgKzkyOCwxOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6
aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0
cy5jbGVhcigpOwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUo
QXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgIGlmICht
X2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fYXV0
b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIAotdm9pZCBBdWRpb0NvbnRl
eHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9D
b250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAg
QVNTRVJUKGlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5y
ZW1vdmUobm9kZSkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgmbm9kZSkp
CiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIApA
QCAtOTk3LDcgKzk5Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygp
CiAgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAg
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBh
Z2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVx
dWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKQEAgLTEwMTcsNyArMTAx
Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygpCiAgICAgaWYgKHBh
Z2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0
TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25z
ZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDU3NzMxN2QyZTgyZGVkOWZhMDc4NTlkYjBl
MDYwYTFhYTg5NWYzYWUuLjYzNDk3ZGFiZTExMzJiN2VjM2ZiMTIzYzFhNjMwNzQ3Y2FlN2M2MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApA
QCAtMTUzLDEzICsxNTMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWZGaW5pc2hlZFNvdXJj
ZU5vZGVzKCk7CiAKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2VkIG5v
ZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lk
IG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKKyAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihB
dWRpb05vZGUmKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7CiAKICAgICAvLyBBdWRp
b0NvbnRleHQgY2FuIHB1bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50
dW0gZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9k
ZXMuCiAgICAgLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hv
IHdhbnQgdG8gYWRkL3JlbW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1
bGwgbGlzdHMuCi0gICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKLSAg
ICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgYWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJik7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQ
dWxsTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxl
UG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVk
IGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgogICAgIHZvaWQg
cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAppbmRleCBmMjAwYjA1
MGU3MjYxMjdjYzFkNmY2YjVhNjM1ZjY3YWYyYjRlNzc2Li4xYWM3N2FhMzdjMjY1MzdiM2UyZmYy
MjM2MWFhNzI1MmQ1MDM1NWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGUuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBBdWRpb05vZGU6OmZpbmlz
aERlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNj
b25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0
by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNo
IHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAg
ICAgIGNvbnRleHQoKS5tYXJrRm9yRGVsZXRpb24odGhpcyk7CisgICAgICAgICAgICAgICAgY29u
dGV4dCgpLm1hcmtGb3JEZWxldGlvbigqdGhpcyk7CiAgICAgICAgICAgICAgICAgbV9pc01hcmtl
ZEZvckRlbGV0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChy
ZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA3MjNhMGI2YzhlMWU4ZmM4MmRkZGQ2MGRj
NjgyYzA0ZDg0MWIwOWU5Li4zYjU3MGZkMjlkNzYwZWUzOWU3ZjQ0NWFiODFiN2JkM2I0NmQwYTQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cApAQCAtMjgzLDggKzI4Myw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVj
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKICAgICAgICAg
UmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1
cmVDb250ZW50KGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsKSkgewotICAgICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRp
bmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3RvcCgpLgotICAgICAgICAgICAgQWN0aXZlRE9N
T2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICAvLyBCYWxhbmNl
ZCBieSB0aGUgY2FsbCB0byB1bnNldFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3Rv
cCgpLgorICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgICAgICAg
ICAgLy8gV2UgbXVzdCBibG9jayB0aGlzIGNvbm5lY3Rpb24uIEluc3RlYWQgb2YgdGhyb3dpbmcg
YW4gZXhjZXB0aW9uLCB3ZSBpbmRpY2F0ZSB0aGlzCiAgICAgICAgICAgICAvLyB1c2luZyB0aGUg
ZXJyb3IgZXZlbnQuIEJ1dCBzaW5jZSB0aGlzIGNvZGUgZXhlY3V0ZXMgYXMgcGFydCBvZiB0aGUg
V2ViU29ja2V0J3MKQEAgLTMxNSw3ICszMTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2Nr
ZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcgog
ICAgICAgICBwcm90b2NvbFN0cmluZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3VicHJvdG9j
b2xTZXBhcmF0b3IoKSk7CiAKICAgICBtX2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHByb3RvY29s
U3RyaW5nKTsKLSAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAg
LTU0NCw3ICs1NDQsNyBAQCB2b2lkIFdlYlNvY2tldDo6c3RvcCgpCiAgICAgbV9wZW5kaW5nRXZl
bnRzLmNsZWFyKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiAgICAgaWYgKHBlbmRp
bmcpCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogY29uc3QgY2hhciog
V2ViU29ja2V0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTYyOCw3ICs2MjgsNyBA
QCB2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVyZWRBbW91
bnQsIENsb3NpbmdIYW5kc2hha2VDb21wbAogICAgICAgICBtX2NoYW5uZWwgPSBudWxscHRyOwog
ICAgIH0KICAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2ZURPTU9i
amVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJTb2NrZXQ6OmRpZFVwZ3JhZGVVUkwoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYjRl
OGQ5MmIyZDFhMTJjZDEyMDE2ZmJiMDIzMmY4NGUxMDI0NTUxOS4uM2Y4MGFkNWI4M2E0MWM1ZWQ2
NDdhMjYwNzVlYmJkZWE5ODZmYjI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC0zNjYsNyArMzY2LDcgQEAgSlNDOjpKU0ludGVybmFs
UHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9i
YWxPYmplY3QKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBl
eGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRG
ZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5yZXNvbHZl
KGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBpbXBvcnRlck1v
ZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CkBAIC0zNzUsNyArMzc1LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0
KgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9N
V2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9j
dW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1
bGVMb2FkZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+bW9kdWxlTG9hZGVyKCkuZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2Fk
ZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhl
YywganNVbmRlZmluZWQoKSk7CiB9CkBAIC0zODQsNyArMzg0LDcgQEAgSlNDOjpKU1ZhbHVlIEpT
RE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmV2YWx1YXRlKGdsb2JhbE9iamVjdCwg
ZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIG1vZHVsZVJlY29yZCwgc2NyaXB0RmV0Y2hl
cik7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCkuZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBz
Y3JpcHRGZXRjaGVyKTsKICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0z
OTIsNyArMzkyLDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjpt
b2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE8KIHsKICAgICBKU0RPTVdpbmRv
d0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxP
YmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9h
ZGVyKCktPmltcG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9k
dWxlTmFtZSwgc291cmNlT3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVM
b2FkZXIoKS5pbXBvcnRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1v
ZHVsZU5hbWUsIHNvdXJjZU9yaWdpbik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggZTI3
MDUzZmE1ZGZmYTJjZmM5ZjFkOTM0Y2YzYzc1MjA2NWVkNTRiZS4uZjk1YTA2ZGJmZGU5M2IyOGUw
YTU0ZDE1YjgyYzJjZTVjYWM2MzY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
aApAQCAtNzAsMTggKzcwLDE4IEBAIHB1YmxpYzoKICAgICAvLyBJdCBjYW4sIGhvd2V2ZXIsIGhh
dmUgYSBzaWRlIGVmZmVjdCBvZiBkZWxldGluZyBhbiBBY3RpdmVET01PYmplY3QuCiAgICAgdmly
dHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgc2V0UGVuZGlu
Z0FjdGl2aXR5KFQqIHRoaXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVjdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0
aGlzT2JqZWN0ID09IHRoaXMpOwotICAgICAgICB0aGlzT2JqZWN0LT5yZWYoKTsKKyAgICAgICAg
QVNTRVJUKCZ0aGlzT2JqZWN0ID09IHRoaXMpOworICAgICAgICB0aGlzT2JqZWN0LnJlZigpOwog
ICAgICAgICArK21fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0eShUKiB0aGlzT2JqZWN0KQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdW5zZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVj
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdBY3Rpdml0eUNvdW50ID4gMCk7CiAg
ICAgICAgIC0tbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKLSAgICAgICAgdGhpc09iamVjdC0+ZGVy
ZWYoKTsKKyAgICAgICAgdGhpc09iamVjdC5kZXJlZigpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggYWU1NmQ2OWQw
ZWQ0YzJlNjhiZTlkOTVmMDFiNGM3MDRjNWYxNTFjMy4uMjI4OGUzMWJhZDkwZDJmMjRiY2MwMjFj
Zjk0ZmIxYjU0ZDYxZjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCiAgICAgaWYgKG1fZGF0
YSA9PSBub25OdWxsRGF0YSAmJiBjYW5Vc2VTZXREYXRhT3B0aW1pemF0aW9uKCp0aGlzKSkgewot
ICAgICAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAg
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiAgICAgICAg
IGlmIChkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgsIG9sZExlbmd0
aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVyRGF0YT4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5vbk51bGxEYXRhLCAw
LCBvbGRMZW5ndGgsIG5vbk51bGxEYXRhLmxlbmd0aCgpKTsKLSAgICBkb2N1bWVudCgpLnRleHRS
ZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgq
dGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBDaGFyYWN0ZXJE
YXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCkBAIC0x
MjgsNyArMTI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0
YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIAogICAgIHNldERhdGFBbmRV
cGRhdGUobmV3U3RyLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCi0gICAgZG9jdW1lbnQo
KS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBkb2N1bWVu
dCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFj
dGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAg
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCi0gICAgZG9j
dW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKKyAgICBkb2N1bWVudCgp
LnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKIAogICAgIHJldHVybiB7IH07CiB9
CkBAIC0xNjQsOCArMTY0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVw
bGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KICAgICBzZXREYXRh
QW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAv
LyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNr
aW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAg
ICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwor
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOworICAgIGRv
Y3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRhZDVhNjkyYWY0
MjZhYjVlNjU0MzE4MzQ1NDg2M2EyMWQwMjU5NTcuLjAwMmM2MzgzYTA5MWI2NDg3ODQ5MTdkNTgz
ZWNiNGU1YTcwOGE5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjgxLDIyICs2ODEs
MjAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJp
bmcmIGtleSkKICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIGJ1aWxkQWNjZXNzS2V5
TWFwKHRoaXMpOworICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgqdGhpcyk7CiAgICAgICAgIG1f
YWNjZXNzS2V5TWFwVmFsaWQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9lbGVtZW50c0J5
QWNjZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nl
c3NLZXlNYXAoVHJlZVNjb3BlKiBzY29wZSkKK3ZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5
TWFwKFRyZWVTY29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS0+cm9vdE5vZGUo
KSkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CisgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oc2NvcGUucm9vdE5vZGUo
KSkpIHsKKyAgICAgICAgYXV0byYgYWNjZXNzS2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGFjY2Vzc2tleUF0dHIpOwogICAgICAgICBpZiAoIWFjY2Vzc0tleS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vzc0tl
eS5pbXBsKCksICZlbGVtZW50KTsKLQotICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVs
ZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAocm9vdCk7
CisgICAgICAgIGlmIChhdXRvKiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAgICAg
ICAgICBidWlsZEFjY2Vzc0tleU1hcCgqcm9vdCk7CiAgICAgfQogfQogCkBAIC0xNTgxLDE0ICsx
NTc5LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OnRpdGxlRWxlbWVudFRleHRDaGFuZ2VkKEVsZW1lbnQm
IHRpdGxlRWxlbWVudCkKICAgICB1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tz
KFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVy
Rm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50
JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKGNs
aWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKCZjbGllbnQp
OwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50KiBjbGllbnQpCit2b2lkIERvY3VtZW50
Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5
Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0Ns
aWVudHMucmVtb3ZlKGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVu
dHMucmVtb3ZlKCZjbGllbnQpOwogfQogCiB2b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCkKQEAgLTM2MDEsMTUgKzM1OTksMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmll
d3BvcnRVbml0c09uUmVzaXplKCkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlv
UHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6OmFk
ZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYgYXVkaW9Qcm9kdWNlcikKIHsKLSAgICBtX2F1
ZGlvUHJvZHVjZXJzLmFkZChhdWRpb1Byb2R1Y2VyKTsKKyAgICBtX2F1ZGlvUHJvZHVjZXJzLmFk
ZCgmYXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1
Y2VyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBh
dWRpb1Byb2R1Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVj
ZXIpOworICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1
cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQogCkBAIC0zNzAxLDI0ICszNjk5LDI0IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wgYW1v
bmdDaGlsZHJlbk9ubHkpCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6aG92ZXJlZEVsZW1l
bnREaWREZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIW1faG92ZXJlZEVsZW1l
bnQgfHwgZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQorICAgIGlmICghbV9ob3ZlcmVkRWxl
bWVudCB8fCAmZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2hvdmVyZWRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIG1f
aG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobV9o
b3ZlcmVkRWxlbWVudCAmJiAhbV9ob3ZlcmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9ob3ZlcmVkRWxlbWVudCA9IG1faG92ZXJlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAg
ICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1bGVI
b3ZlclN0YXRlVXBkYXRlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNo
YWluRGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjplbGVtZW50SW5B
Y3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8IGVsZW1lbnQgIT0gbV9hY3RpdmVFbGVtZW50KQorICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1fYWN0aXZlRWxlbWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAg
IG1fYWN0aXZlRWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxlICht
X2FjdGl2ZUVsZW1lbnQgJiYgIW1fYWN0aXZlRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbV9hY3RpdmVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiB9CkBA
IC0zOTk2LDI2ICszOTk0LDI2IEBAIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25XaWxsQ2xlYXJJ
ZE5hbWVNYXAoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCiAgICAgbV9ub2RlTGlz
dEFuZENvbGxlY3Rpb25Db3VudHNbSW52YWxpZGF0ZU9uSWROYW1lQXR0ckNoYW5nZV0tLTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2
b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikK
IHsKLSAgICBtX25vZGVJdGVyYXRvcnMuYWRkKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMuYWRk
KCZpdGVyYXRvcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2Rl
SXRlcmF0b3IqIG5pKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciYgaXRlcmF0b3IpCiB7CiAgICAgLy8gVGhlIG5vZGUgaXRlcmF0b3IgY2FuIGJlIGRldGFj
aGVkIHdpdGhvdXQgaGF2aW5nIGJlZW4gYXR0YWNoZWQgaWYgaXRzIHJvb3Qgbm9kZSBkaWRuJ3Qg
aGF2ZSBhIGRvY3VtZW50CiAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3Igd2FzIGNyZWF0ZWQsIGJ1
dCBoYXMgaXQgbm93LgotICAgIG1fbm9kZUl0ZXJhdG9ycy5yZW1vdmUobmkpOworICAgIG1fbm9k
ZUl0ZXJhdG9ycy5yZW1vdmUoJml0ZXJhdG9yKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bW92ZU5v
ZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKIHsKICAgICBWZWN0b3I8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKICAgICBjb3B5
VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzLCBub2RlSXRlcmF0b3JzKTsKLSAgICBmb3IgKGF1dG8q
IGl0IDogbm9kZUl0ZXJhdG9ycykgewotICAgICAgICBpZiAoJml0LT5yb290KCkgPT0gJm5vZGUp
IHsKLSAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcihpdCk7Ci0gICAgICAgICAgICBuZXdE
b2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgIGZvciAoYXV0byogaXRlcmF0b3Ig
OiBub2RlSXRlcmF0b3JzKSB7CisgICAgICAgIGlmICgmaXRlcmF0b3ItPnJvb3QoKSA9PSAmbm9k
ZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdGVyYXRvcik7CisgICAgICAg
ICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoKml0ZXJhdG9yKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTQwNTUsNyArNDA1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGls
ZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogCiAgICAgaWYgKG1f
bWFya2Vycy0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBU
ZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZChjb250YWluZXIpOyB0ZXh0Tm9kZTsgdGV4dE5v
ZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKLSAgICAgICAg
ICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0Tm9kZSk7CisgICAgICAgICAgICBtX21h
cmtlcnMtPnJlbW92ZU1hcmtlcnMoKnRleHROb2RlKTsKICAgICB9CiB9CiAKQEAgLTQwODMsNyAr
NDA4MSw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKQotICAgICAgICBtX21hcmtlcnMtPnJlbW92
ZU1hcmtlcnMoJm5vZGUpOworICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMobm9kZSk7
CiB9CiAKIHN0YXRpYyBOb2RlKiBmYWxsYmFja0ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZUFm
dGVyUmVtb3ZhbChOb2RlJiBub2RlKQpAQCAtNDEwMiw3ICs0MTAwLDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVtb3ZlRm9jdXNOYXZpZ2F0aW9uTm9kZU9mU3VidHJlZShOb2RlJiBub2RlLCBib29sIGFt
b25nQ2hpbGRyZW4KICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2Rl
KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6
OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGF1dG8q
IHJhbmdlIDogbV9yYW5nZXMpCkBAIC00MTEzLDcgKzQxMTEsNyBAQCB2b2lkIERvY3VtZW50Ojp0
ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQog
Ci12b2lkIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQx
MjUsMTAgKzQxMjMsMTAgQEAgdm9pZCBEb2N1bWVudDo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1h
cmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3Zv
aWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZVdpdGhJ
bmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOworICAgICAgICBOb2RlV2l0aEluZGV4IG9s
ZE5vZGVXaXRoSW5kZXgoJm9sZE5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9y
YW5nZXMpCiAgICAgICAgICAgICByYW5nZS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRoSW5k
ZXgsIG9mZnNldCk7CiAgICAgfQpAQCAtNDEzNiw3ICs0MTM0LDcgQEAgdm9pZCBEb2N1bWVudDo6
dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFy
IGNoZWNraW5nLgogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5v
ZGUpCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7CiAgICAg
Zm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQogICAgICAgICByYW5nZS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKQEAgLTQxNTUsMTUgKzQxNTMsMTUgQEAgdm9pZCBEb2N1bWVudDo6Y3JlYXRl
RE9NV2luZG93KCkKICAgICBBU1NFUlQobV9kb21XaW5kb3ctPmZyYW1lKCkgPT0gbV9mcmFtZSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1bWVu
dCkKK3ZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0gICAg
QVNTRVJUKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1fZG9t
V2luZG93KTsKICAgICAvLyBBIHZhbGlkIERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVkRnJh
bWUgZm9yIGl0cyBkb2N1bWVudHMuCiAgICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0gTm90
SW5QYWdlQ2FjaGUpOwogCi0gICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5tX2Rv
bVdpbmRvdyk7CisgICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2luZG93
KTsKICAgICBtX2RvbVdpbmRvdy0+ZGlkU2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAogICAg
IEFTU0VSVChtX2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKQEAgLTQ4MTMsMTQgKzQ4
MTEsMTQgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9y
U3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi12b2lk
IERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50
KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
RWxlbWVudHMuYWRkKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBt
X2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKQEAgLTQ4MjksMTQgKzQ4
MjcsMTQgQEAgdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgICAgICBl
bGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdp
c3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
bV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1fbWVkaWFWb2x1bWVD
YWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVn
aXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6
dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fbWVkaWFW
b2x1bWVDYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKIGJvb2wgRG9jdW1l
bnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3QKQEAgLTQ4NzgsMjkg
KzQ4NzYsMjkgQEAgdm9pZCBEb2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2Uo
KQogICAgICAgICBlbGVtZW50LT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJv
d3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3By
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZChlKTsKKyAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX3ByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpLnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpOwogCi0g
ICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKGUpOworICAgIG1fY2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fY2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX2NhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50
OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKQEAgLTQ5MTMsMTQgKzQ5MTEsMTQgQEAgdm9p
ZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiAKICNpZiBFTkFCTEUoTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1M
TWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVs
ZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQordm9p
ZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
SFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5n
ZWRFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
RWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpCkBAIC01MDE1LDEwICs1MDEzLDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OnBvcEN1cnJlbnRTY3JpcHQoKQogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLXZvaWQgRG9j
dW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCit2b2lk
IERvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIGluc3Ry
dWN0aW9uKQogewotICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJv
Y2Vzc29yOjpjcmVhdGUoKTsKLSAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoZG93bmNh
c3Q8WFNMU3R5bGVTaGVldD4ocGktPnNoZWV0KCkpKTsKKyAgICBhdXRvIHByb2Nlc3NvciA9IFhT
TFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIHByb2Nlc3Nvci0+c2V0WFNMU3R5bGVTaGVldChk
b3duY2FzdDxYU0xTdHlsZVNoZWV0PihpbnN0cnVjdGlvbi5zaGVldCgpKSk7CiAgICAgU3RyaW5n
IHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CiAgICAgU3RyaW5nIHJlc3Vs
dEVuY29kaW5nOwpAQCAtNTQ5MCwxNyArNTQ4OCwxNyBAQCB2b2lkIERvY3VtZW50OjpzdGF0ZVBv
cHBlZChSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0KQogICAgICAgICBt
X3BlbmRpbmdTdGF0ZU9iamVjdCA9IFdURk1vdmUoc3RhdGVPYmplY3QpOwogfQogCi12b2lkIERv
Y3VtZW50OjphdHRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit2b2lkIERvY3VtZW50OjphdHRhY2hS
YW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlucyhyYW5n
ZSkpOwotICAgIG1fcmFuZ2VzLmFkZChyYW5nZSk7CisgICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250
YWlucygmcmFuZ2UpKTsKKyAgICBtX3Jhbmdlcy5hZGQoJnJhbmdlKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFu
Z2UoUmFuZ2UmIHJhbmdlKQogewotICAgIC8vIFdlIGRvbid0IEFTU0VSVCBtX3Jhbmdlcy5jb250
YWlucyhyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCisgICAgLy8gV2UgZG9uJ3QgQVNT
RVJUIG1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCiAg
ICAgLy8gdW5jb25kaXRpb25hbGx5IHRvIGZpeDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2MDQ0Ci0gICAgbV9yYW5nZXMucmVtb3ZlKHJhbmdlKTsKKyAgICBtX3Jh
bmdlcy5yZW1vdmUoJnJhbmdlKTsKIH0KIAogc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtNTY0MCw3ICs1NjM4LDcg
QEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6
UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24KIAogICAgIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhyZWFz
b24pOwotICAgIHNjcmlwdFJ1bm5lcigpLT5zdXNwZW5kKCk7CisgICAgc2NyaXB0UnVubmVyKCku
c3VzcGVuZCgpOwogICAgIG1fcGVuZGluZ1Rhc2tzVGltZXIuc3RvcCgpOwogCiAgICAgLy8gRGVm
ZXJyaW5nIGxvYWRpbmcgYW5kIHN1c3BlbmRpbmcgcGFyc2VyIGlzIG5lY2Vzc2FyeSB3aGVuIHdl
IG5lZWQgdG8gcHJldmVudCByZS1lbnRyYW50IEphdmFTY3JpcHQgZXhlY3V0aW9uCkBAIC01NjY0
LDcgKzU2NjIsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVE
T01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogICAgICAgICBtX3BhcnNlci0+
cmVzdW1lU2NoZWR1bGVkVGFza3MoKTsKICAgICBpZiAoIW1fcGVuZGluZ1Rhc2tzLmlzRW1wdHko
KSkKICAgICAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICBz
Y3JpcHRSdW5uZXIoKS0+cmVzdW1lKCk7CisgICAgc2NyaXB0UnVubmVyKCkucmVzdW1lKCk7CiAg
ICAgcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhyZWFzb24pOwogICAgIHJlc3VtZVNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIApAQCAtNTcxNywxNiArNTcxNSwxNiBA
QCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFBvcHN0YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVjdAogICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3Rh
dGVFdmVudDo6Y3JlYXRlKFdURk1vdmUoc3RhdGVPYmplY3QpLCBtX2RvbVdpbmRvdyA/IG1fZG9t
V2luZG93LT5oaXN0b3J5KCkgOiBudWxscHRyKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9p
ZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKCFtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29u
dGFpbnMobGlzdGVuZXIpKTsKLSAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKGxpc3Rl
bmVyKTsKKyAgICBBU1NFUlQoIW1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlz
dGVuZXIpKTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKCZsaXN0ZW5lcik7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0
YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFy
dExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJU
KG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVk
aWFDYW5TdGFydExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgIEFTU0VSVChtX21lZGlh
Q2FuU3RhcnRMaXN0ZW5lcnMuY29udGFpbnMoJmxpc3RlbmVyKSk7CisgICAgbV9tZWRpYUNhblN0
YXJ0TGlzdGVuZXJzLnJlbW92ZSgmbGlzdGVuZXIpOwogfQogCiBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIqIERvY3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKQEAgLTU3NTAsMTAg
KzU3NDgsOSBAQCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQogCi1ib29sIERvY3VtZW50OjpmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAorYm9vbCBEb2N1bWVudDo6ZnVsbFNjcmVlbklzQWxsb3dlZChFbGVt
ZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICByZXR1cm4g
aXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRhbGxvd2Z1
bGxzY3JlZW5BdHRyLCBlbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKTsKKyAgICBy
ZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRh
bGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVtZW50LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpOwog
fQogCiB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZSBjaGVja1R5cGUpCkBAIC01NzcyLDcgKzU3Njks
NyBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogCiAgICAgICAgIC8vIFRoZSBjb250ZXh0IG9i
amVjdCdzIG5vZGUgZG9jdW1lbnQsIG9yIGFuIGFuY2VzdG9yIGJyb3dzaW5nIGNvbnRleHQncyBk
b2N1bWVudCBkb2VzIG5vdCBoYXZlCiAgICAgICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVuYWJsZWQg
ZmxhZyBzZXQuCi0gICAgICAgIGlmIChjaGVja1R5cGUgPT0gRW5mb3JjZUlGcmFtZUFsbG93RnVs
bFNjcmVlblJlcXVpcmVtZW50ICYmICFmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChlbGVt
ZW50KSkKKyAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBFbmZvcmNlSUZyYW1lQWxsb3dGdWxsU2Ny
ZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxTY3JlZW5Jc0FsbG93ZWQoKmVsZW1lbnQpKQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVGhlIGNvbnRleHQgb2JqZWN0J3Mgbm9kZSBkb2N1
bWVudCBmdWxsc2NyZWVuIGVsZW1lbnQgc3RhY2sgaXMgbm90IGVtcHR5IGFuZCBpdHMgdG9wIGVs
ZW1lbnQKQEAgLTU4NDUsOCArNTg0Miw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAgICAg
ICAgICAgICAvLyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVk
IGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAg
IC8vIHNldCB0byB0cnVlIG9uIHRoZSBkb2N1bWVudC4KICAgICAgICAgICAgIGlmICghZm9sbG93
aW5nRG9jKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVt
ZW50U3RhY2soZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3Jl
ZW5DaGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAgICAgIGN1cnJlbnRE
b2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCplbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC01ODU3LDggKzU4
NTQsOCBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAgICAgIC8vIC4uLnB1
c2ggZm9sbG93aW5nIGRvY3VtZW50J3MgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIgb24gZG9j
dW1lbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQKICAgICAgICAgICAgICAgICAvLyBzdGFjaywgYW5k
IHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0
aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBv
biBkb2N1bWVudC4KLSAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjayhmb2xsb3dpbmdEb2MtPm93bmVyRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAg
ICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7Cisg
ICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKmZv
bGxvd2luZ0RvYy0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIGFkZERvY3VtZW50
VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTU5MjEsNyArNTkxOCw3IEBAIHZvaWQg
RG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4g
ZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBz
ZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkZXNj
ZW5kYW50cykgewogICAgICAgICBkb2N1bWVudC0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNr
KCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShkb2N1
bWVudC5nZXQoKSk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRR
dWV1ZSgqZG9jdW1lbnQpOwogICAgIH0KIAogICAgIC8vIDUuIFdoaWxlIGRvYyBpcyBub3QgbnVs
bCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgpAQCAtNTkzOCw3ICs1OTM1LDcgQEAgdm9pZCBEb2N1bWVu
dDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogCiAgICAgICAgIC8vIDIuIFF1ZXVlIGEgdGFzayB0
byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBh
dHRyaWJ1dGUgc2V0IHRvIHRydWUKICAgICAgICAgLy8gb24gZG9jLgotICAgICAgICBhZGREb2N1
bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgIGFk
ZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAKICAg
ICAgICAgLy8gMy4gSWYgZG9jJ3MgZnVsbHNjcmVlbiBlbGVtZW50IHN0YWNrIGlzIGVtcHR5IGFu
ZCBkb2MncyBicm93c2luZyBjb250ZXh0IGhhcyBhIGJyb3dzaW5nIGNvbnRleHQKICAgICAgICAg
Ly8gY29udGFpbmVyLCBzZXQgZG9jIHRvIHRoYXQgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIn
cyBub2RlIGRvY3VtZW50LgpAQCAtNTk4OCwxMyArNTk4NSwxMSBAQCBzdGF0aWMgdm9pZCB1bndy
YXBGdWxsU2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVy
LCBFbGVtZQogICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pbnZh
bGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFoYXNMaXZpbmdSZW5kZXJUcmVlKCkgfHwgcGFnZUNhY2hlU3RhdGUoKSAh
PSBOb3RJblBhZ2VDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQp
OwotCiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBhZnRlciB0aGUgZG9jdW1l
bnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYWdlLgogICAgIGlmICghcGFnZSgpKQogICAg
ICAgICByZXR1cm47CkBAIC02MDAzLDEzICs1OTk4LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtp
dFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICB1
bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIobV9mdWxsU2NyZWVuUmVuZGVyZXIsIG1fZnVsbFNjcmVl
bkVsZW1lbnQuZ2V0KCkpOwogCi0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPndp
bGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOworICAgIGVsZW1lbnQud2lsbEJlY29tZUZ1bGxz
Y3JlZW5FbGVtZW50KCk7CiAgICAgCi0gICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7
CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9ICZlbGVtZW50OwogCiAjaWYgVVNFKE5BVElWRV9G
VUxMU0NSRUVOX1ZJREVPKQotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzTWVkaWFFbGVt
ZW50KCkpCisgICAgaWYgKGVsZW1lbnQuaXNNZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKQEAgLTYwMzIsNyArNjAyNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmVzb2x2
ZVN0eWxlKFJlc29sdmVTdHlsZVR5cGU6OlJlYnVpbGQpOwogfQogCi12b2lkIERvY3VtZW50Ojp3
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQordm9pZCBEb2N1bWVu
dDo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fZnVsbFNjcmVlbkVs
ZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTYwNDUsNyArNjAzOSw3IEBAIHZvaWQgRG9jdW1l
bnQ6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCiAgICAgbV9m
dWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKK3Zv
aWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1
bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MDU2LDcgKzYwNTAsNyBAQCB2
b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQq
KQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPndpbGxTdG9wQmVpbmdGdWxsc2NyZWVuRWxlbWVu
dCgpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpCiB7
CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MTk0
LDE5ICs2MTg4LDE4IEBAIHZvaWQgRG9jdW1lbnQ6OnBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2so
KQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50OjpwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50JiBlbGVtZW50
KQogewotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5hcHBlbmQoZWxlbWVudCk7CisgICAg
bV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OmFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCog
ZG9jKQordm9pZCBEb2N1bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1
ZXVlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jKTsKLSAgICBOb2RlKiB0
YXJnZXQgPSBkb2MtPndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KCk7CisgICAgTm9kZSogdGFyZ2V0
ID0gZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkK
LSAgICAgICAgdGFyZ2V0ID0gZG9jLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsK
KyAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IGRvYzsKKyAgICAgICAgdGFy
Z2V0ID0gJmRvY3VtZW50OwogICAgIG1fZnVsbFNjcmVlbkNoYW5nZUV2ZW50VGFyZ2V0UXVldWUu
YXBwZW5kKHRhcmdldCk7CiB9CiAKQEAgLTY2NjQsNyArNjY1Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6
OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEVs
ZW1lbnQqIGluCiAgICAgICAgIC8vIFdlIGFyZSBjbGVhcmluZyB0aGUgOmFjdGl2ZSBjaGFpbiBi
ZWNhdXNlIHRoZSBtb3VzZSBoYXMgYmVlbiByZWxlYXNlZC4KICAgICAgICAgZm9yIChFbGVtZW50
KiBjdXJyZW50RWxlbWVudCA9IG9sZEFjdGl2ZUVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50OyBjdXJy
ZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50SW5Db21wb3NlZFRyZWUo
KSkgewogICAgICAgICAgICAgY3VycmVudEVsZW1lbnQtPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAg
ICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2ZUNoYWluKGN1cnJlbnRFbGVt
ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2
ZUNoYWluKCpjdXJyZW50RWxlbWVudCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIG1fYWN0
aXZlRWxlbWVudCA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKQEAgLTY2NzYsNyArNjY2OSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGN1cnItPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgY3Vy
ci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbihlbGVt
ZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFj
dGl2ZUNoYWluKCplbGVtZW50LCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbmV3QWN0aXZlRWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggNzc0MTJhNGM5NWNkNTcxMWMyMDVmZWI4ZTgyMjczNWRmNmIzZjJiOC4uN2Q5M2U4ZmQzNmRm
ODJjNTE5ZDhhNDRkOTZkZmY1ZDg2MmI4YTNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcy
Niw4ICs3MjYsOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZm9jdXNOYXZpZ2F0aW9uU3RhcnRp
bmdOb2RlKEZvY3VzRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3ZlRm9jdXNlZE5v
ZGVPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkgPSBmYWxzZSk7Ci0gICAg
dm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Kik7Ci0gICAgdm9pZCBlbGVtZW50
SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Kik7CisgICAgdm9pZCBob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50Jik7CisgICAgdm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERl
dGFjaChFbGVtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBFbGVtZW50Kik7CiAKQEAgLTc1NCwxMiArNzU0LDEyIEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW52YWxpZGF0aW9uRnVuY3Rpb24+CiAgICAgdm9p
ZCBpbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKEludmFsaWRhdGlvbkZ1bmN0
aW9uKTsKIAotICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOwotICAg
IHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOworICAgIHZvaWQgYXR0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOworICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9y
KE5vZGVJdGVyYXRvciYpOwogICAgIHZvaWQgbW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50
KE5vZGUmLCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSopOwotICAg
IHZvaWQgZGV0YWNoUmFuZ2UoUmFuZ2UqKTsKKyAgICB2b2lkIGF0dGFjaFJhbmdlKFJhbmdlJik7
CisgICAgdm9pZCBkZXRhY2hSYW5nZShSYW5nZSYpOwogCiAgICAgdm9pZCB1cGRhdGVSYW5nZXNB
ZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJik7CiAgICAgLy8gbm9kZUNoaWxkcmVu
V2lsbEJlUmVtb3ZlZCBpcyB1c2VkIHdoZW4gcmVtb3ZpbmcgYWxsIG5vZGUgY2hpbGRyZW4gYXQg
b25jZS4KQEAgLTc3MCwxMyArNzcwLDEzIEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEFjY2Vw
dENoaWxkT3BlcmF0aW9uIHsgUmVwbGFjZSwgSW5zZXJ0T3JBZGQgfTsKICAgICBib29sIGNhbkFj
Y2VwdENoaWxkKGNvbnN0IE5vZGUmIG5ld0NoaWxkLCBjb25zdCBOb2RlKiByZWZDaGlsZCwgQWNj
ZXB0Q2hpbGRPcGVyYXRpb24pIGNvbnN0OwogCi0gICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHRSZW1vdmVk
KE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHRl
eHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSk7CisgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSYs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRSZW1vdmVk
KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoVGV4dCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHRl
eHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICB2b2lkIGNyZWF0ZURPTVdpbmRvdygp
OwotICAgIHZvaWQgdGFrZURPTVdpbmRvd0Zyb20oRG9jdW1lbnQqKTsKKyAgICB2b2lkIHRha2VE
T01XaW5kb3dGcm9tKERvY3VtZW50Jik7CiAKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fZG9tV2luZG93LmdldCgpOyB9CiAgICAgLy8gSW4gRE9NIExldmVsIDIs
IHRoZSBEb2N1bWVudCdzIERPTVdpbmRvdyBpcyBjYWxsZWQgdGhlIGRlZmF1bHRWaWV3LgpAQCAt
ODQ3LDcgKzg0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3NSZWZlcnJlclBvbGljeShj
b25zdCBTdHJpbmcmIHBvbGljeSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVu
dCBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgIC8vIFJldHVybnMgMCBpZiB0aGlzIGlzIHRo
ZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRoaXMgaXMg
dGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
RWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7IG5vIGRpcmVj
dGlvbiBrbm93bi4KQEAgLTk0MSwxNyArOTQxLDE3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCog
cGFyZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudCYgdG9w
RG9jdW1lbnQoKSBjb25zdDsKICAgICAKLSAgICBTY3JpcHRSdW5uZXIqIHNjcmlwdFJ1bm5lcigp
IHsgcmV0dXJuIG1fc2NyaXB0UnVubmVyLmdldCgpOyB9Ci0gICAgU2NyaXB0TW9kdWxlTG9hZGVy
KiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiBtX21vZHVsZUxvYWRlci5nZXQoKTsgfQorICAgIFNj
cmlwdFJ1bm5lciYgc2NyaXB0UnVubmVyKCkgeyByZXR1cm4gKm1fc2NyaXB0UnVubmVyOyB9Cisg
ICAgU2NyaXB0TW9kdWxlTG9hZGVyJiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiAqbV9tb2R1bGVM
b2FkZXI7IH0KIAogICAgIEhUTUxTY3JpcHRFbGVtZW50KiBjdXJyZW50U2NyaXB0KCkgY29uc3Qg
eyByZXR1cm4gIW1fY3VycmVudFNjcmlwdFN0YWNrLmlzRW1wdHkoKSA/IG1fY3VycmVudFNjcmlw
dFN0YWNrLmxhc3QoKS5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHB1c2hDdXJyZW50U2Ny
aXB0KEhUTUxTY3JpcHRFbGVtZW50Kik7CiAgICAgdm9pZCBwb3BDdXJyZW50U2NyaXB0KCk7CiAK
ICNpZiBFTkFCTEUoWFNMVCkKLSAgICB2b2lkIGFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiogcGkpOworICAgIHZvaWQgYXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vzc2luZ0lu
c3RydWN0aW9uJik7CiAgICAgUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpIHsgcmV0dXJuIG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFRy
YW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50KiBkb2MpIHsgbV90cmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudCA9IGRvYzsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2N1bWVudDsg
fQogCiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPFRyYW5zZm9y
bVNvdXJjZT4pOwogICAgIFRyYW5zZm9ybVNvdXJjZSogdHJhbnNmb3JtU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2UuZ2V0KCk7IH0KQEAgLTk5MiwxNyArOTkyLDE1IEBA
IHB1YmxpYzoKICAgICBQYWdlQ2FjaGVTdGF0ZSBwYWdlQ2FjaGVTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZUNhY2hlU3RhdGU7IH0KICAgICB2b2lkIHNldFBhZ2VDYWNoZVN0YXRlKFBhZ2VD
YWNoZVN0YXRlKTsKIAotICAgIC8vIEVsZW1lbnRzIGNhbiByZWdpc3RlciB0aGVtc2VsdmVzIGZv
ciB0aGUgInN1c3BlbmQoKSIgYW5kCi0gICAgLy8gInJlc3VtZSgpIiBjYWxsYmFja3MKLSAgICB2
b2lkIHJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCop
OworICAgIHZvaWQgcmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVu
dCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhF
bGVtZW50Jik7CiAKICAgICB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7CiAgICAg
dm9pZCBzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAg
dm9pZCByZXN1bWUoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQg
cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgbWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKTsKIAogICAgIGJvb2wgYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmUoKSBjb25zdDsKQEAgLTEwMTIsMjggKzEwMTAsMjggQEAgcHVibGljOgogICAgIE1lZGlh
U2Vzc2lvbiYgZGVmYXVsdE1lZGlhU2Vzc2lvbigpOwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lz
dGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CiAgICAgdm9pZCBzdG9yYWdlQmxv
Y2tpbmdTdGF0ZURpZENoYW5nZSgpOwogICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRD
aGFuZ2UoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIHJlZ2lzdGVyRm9y
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7
CisgICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZv
aWQgcmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2Fs
bGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50
Jik7CiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgdm9p
ZCByZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tz
KEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAg
dm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmls
aXR5Q2hhbmdlQ2xpZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7CisgICAgdm9pZCByZWdp
c3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNs
aWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxs
YmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IHZvaWQgcmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2Vk
Q2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKQEAgLTEwODQsOCArMTA4Miw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpc3BhdGNoUG9wc3RhdGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiYmIHN0YXRlT2JqZWN0KTsKICAgICBEb2N1bWVudEV2ZW50UXVldWUmIGV2ZW50UXVl
dWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V2ZW50UXVldWU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVy
KE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lciYpOwogICAgIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogdGFrZUFueU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcigpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTEwMiwxNyArMTEw
MCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCosIEZ1bGxTY3JlZW5DaGVja1R5cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0Q2FuY2VsRnVsbFNjcmVlbigpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJr
aXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbigpOwogICAgIAogICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRlcmVy
KFJlbmRlckZ1bGxTY3JlZW4qKTsKICAgICBSZW5kZXJGdWxsU2NyZWVuKiBmdWxsU2NyZWVuUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW5SZW5kZXJlcjsgfQogICAgIHZvaWQg
ZnVsbFNjcmVlblJlbmRlcmVyRGVzdHJveWVkKCk7CiAgICAgCiAgICAgdm9pZCBmdWxsU2NyZWVu
Q2hhbmdlRGVsYXlUaW1lckZpcmVkKCk7Ci0gICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkRm9y
RWxlbWVudChFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkKEVs
ZW1lbnQmKSBjb25zdDsKICAgICB2b2lkIGZ1bGxTY3JlZW5FbGVtZW50UmVtb3ZlZCgpOwogICAg
IHZvaWQgcmVtb3ZlRnVsbFNjcmVlbkVsZW1lbnRPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdD
aGlsZHJlbk9ubHkgPSBmYWxzZSk7CiAgICAgYm9vbCBpc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKSBj
b25zdDsKQEAgLTExMzksOCArMTEzNyw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TKQotICAgIERldmljZU1vdGlvbkNv
bnRyb2xsZXIqIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKLSAgICBEZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIqIGRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0Owor
ICAgIERldmljZU1vdGlvbkNvbnRyb2xsZXImIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25z
dDsKKyAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBjb25zdCBEb2N1bWVudFRpbWluZyYgdGlt
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFRpbWluZzsgfQpAQCAtMTI3MSw4ICsxMjY5
LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzU3R5bGVXaXRoVmlld3BvcnRVbml0czsgfQogICAgIHZvaWQgdXBkYXRl
Vmlld3BvcnRVbml0c09uUmVzaXplKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1
ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYpOwogICAgIE1lZGlhUHJvZHVj
ZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0
YXRlOyB9CiAgICAgdm9pZCBub3RlVXNlckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwog
ICAgIGJvb2wgaXNDYXB0dXJpbmcoKSBjb25zdCB7IHJldHVybiBNZWRpYVByb2R1Y2VyOjppc0Nh
cHR1cmluZyhtX21lZGlhU3RhdGUpOyB9CkBAIC0xNDE3LDcgKzE0MTUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZv
aWQgdXBkYXRlQmFzZVVSTCgpOwogCi0gICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2Nv
cGUqIHJvb3QpOworICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiByb290KTsK
IAogICAgIHZvaWQgbG9hZEV2ZW50RGVsYXlUaW1lckZpcmVkKCk7CiAKQEAgLTE0MzAsOCArMTQy
OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9y
RXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1l
LCBib29sIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCk7CiAgICAgdm9pZCBjbGVhckZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soKTsKICAgICB2b2lkIHBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsK
LSAgICB2b2lkIHB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqKTsKLSAgICB2b2lk
IGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCopOworICAg
IHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCYpOworICAgIHZvaWQgYWRk
RG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggOTE0YzQ1YmU5MzQ3
NTU1OWZlNmY3YzU5OTNlOGU3MGMxNWNmMDhiOS4uOTk0YzNhZGQzMTNmYWVmMjUzYzk2MWFhYWY2
ZTYwZTk0M2U2N2MwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKQEAgLTYyLDQ2ICs2Miw0NiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6ZGV0YWNoKCkKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsg
fTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSog
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24pCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdl
JiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBk
ZXNjcmlwdGlvbikKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtl
ZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFy
a2VkVGV4dC5yYW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0
ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbikpOworICAgICAgICBhZGRNYXJrZXIo
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGll
Y2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uKSk7
CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJh
bmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSB0eXBlKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQo
cmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAg
IGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5z
dGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zm
c2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQ
aWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5z
dGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpKSk7CiAgICAgfQogCiB9CiAKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJU
b05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKIHsKICAgICBhZGRNYXJrZXIobm9kZSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoKSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9k
ZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCiB7CiAgICAgYWRkTWFy
a2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IGxlbmd0aCwgV1RGTW92ZShkYXRhKSkpOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmVN
YXRjaCkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNoKQogewotICAgIGZvciAoVGV4dEl0
ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0
LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldCgpOwotICAgICAgICBhZGRNYXJr
ZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0Y2gpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVj
ZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCwgYWN0aXZlTWF0Y2gpKTsKICAgICB9CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiAKLXZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBt
ZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2Um
IHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBS
ZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsKICAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRU
ZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsK
ICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtl
cihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXAKICAgICB9CiB9CiAKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTWFya2VyKFJhbmdlKiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJl
dGF0aW9ucykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGludGVycHJldGF0aW9ucykKIHsKICAgICBBU1NFUlQoaW50ZXJwcmV0YXRpb25zLnNpemUo
KSA+IDEpOwogICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpIDw9IDEpCkBAIC0xMjUsNyAr
MTI1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UqIHIKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoUmFuZ2UqIHJhbmdl
LCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjphZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBjb25zdCBSZXRh
aW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsKICAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0
KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAg
ICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CkBAIC0x
MzUsMjYgKzEzNSwyNiBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0
aW9uUmVzdWx0TWFya2VyKFJhbmdlKiByYW5nZSwgY29uc3QgUmV0YQogCiAjZW5kaWYKIAotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKFJlZlB0
cjxSYW5nZT4gcmFuZ2UpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dl
ZENvbnRlbnRNYXJrZXIoUmFuZ2UmIHJhbmdlKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1h
cmtlZFRleHQocmFuZ2UuZ2V0KCkpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFk
dmFuY2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQu
cmFuZ2UoKTsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJr
ZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgICAgIGF1dG8gdGV4
dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJh
Z2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250ZW50RGF0YSB7IG1hcmtlZFRleHQubm9kZSgpIH07
Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3Vt
ZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0
UGllY2UtPmVuZE9mZnNldCgpLCBXVEZNb3ZlKGRyYWdnZWRDb250ZW50RGF0YSkgfSk7CisgICAg
ICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1lbnRNYXJr
ZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+
ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRhKSB9KTsKICAgICB9CiB9CiAK
LXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlKiByYW5n
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91
bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKIHsKLSAgICBmb3IgKFRleHRJdGVy
YXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5h
ZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFt
YXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKKyAgICAgICAgYXV0byB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0g
dGV4dFBpZWNlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0
ZXh0UGllY2UtPmVuZE9mZnNldCgpOwotICAgICAgICByZW1vdmVNYXJrZXJzKCZ0ZXh0UGllY2Ut
PnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwg
bWFya2VyVHlwZXMsIHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAg
ICAgICAgcmVtb3ZlTWFya2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIHNob3VsZFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICB9CiB9CiAKQEAgLTMxOSwxMyArMzE5LDEz
IEBAIHN0YXRpYyBib29sIHNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIoY29uc3QgRG9jdW1l
bnRNYXJrZXImIG5ld01hcmtlcikKIC8vIE1hcmtlcnMgYXJlIHN0b3JlZCBpbiBvcmRlciBzb3J0
ZWQgYnkgdGhlaXIgc3RhcnQgb2Zmc2V0LgogLy8gTWFya2VycyBvZiB0aGUgc2FtZSB0eXBlIGRv
IG5vdCBvdmVybGFwIGVhY2ggb3RoZXIuCiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikg
Cit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNv
bnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiB7CiAgICAgQVNTRVJUKG5ld01hcmtlci5l
bmRPZmZzZXQoKSA+PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSk7CiAgICAgaWYgKG5ld01hcmtl
ci5lbmRPZmZzZXQoKSA9PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkgeworICAgIGlm
IChhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTog
RmFjdG9yIHRoZSBtYXJrZXIgcGFpbnRpbmcgY29kZSBvdXQgb2YgSW5saW5lVGV4dEJveCBhbmQg
dGVhY2ggc2ltcGxlIGxpbmUgbGF5b3V0IHRvIHVzZSBpdC4KICAgICAgICAgaWYgKGlzPFJlbmRl
clRleHQ+KCpyZW5kZXJlcikpCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVu
ZGVyZXIpLmVuc3VyZUxpbmVCb3hlcygpOwpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRN
YXJrZXImIG5ld01hCiAKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcyB8PSBuZXdN
YXJrZXIudHlwZSgpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBsaXN0ID0g
bV9tYXJrZXJzLmFkZChub2RlLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBsaXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKCFsaXN0KSB7CiAgICAgICAgIGxpc3QgPSBz
dGQ6Om1ha2VfdW5pcXVlPE1hcmtlckxpc3Q+KCk7CkBAIC0zOTAsMTUgKzM5MCwxNSBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERv
Y3VtZW50TWFya2VyJiBuZXdNYQogICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1
bWVudE1hcmtlcih0b0luc2VydCkpOwogICAgIH0KIAotICAgIGlmIChub2RlLT5yZW5kZXJlcigp
KQotICAgICAgICBub2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKG5vZGUucmVu
ZGVyZXIoKSkKKyAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiAKLSAgICBpbnZh
bGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2RlKCpub2RlKTsKKyAgICBpbnZhbGlkYXRlUmVjdHNG
b3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwogfQogCiAvLyBjb3BpZXMgbWFya2VycyBmcm9tIHNyY05v
ZGUgdG8gZHN0Tm9kZSwgYXBwbHlpbmcgdGhlIHNwZWNpZmllZCBzaGlmdCBkZWx0YSB0byB0aGUg
Y29waWVzLiAgVGhlIHNoaWZ0IGlzCiAvLyB1c2VmdWwgaWYsIGUuZy4sIHRoZSBjYWxsZXIgaGFz
IGNyZWF0ZWQgdGhlIGRzdE5vZGUgZnJvbSBhIG5vbi1wcmVmaXggc3Vic3RyaW5nIG9mIHRoZSBz
cmNOb2RlLgotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUq
IHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2Rl
LCBpbnQgZGVsdGEpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMo
Tm9kZSYgc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUmIGRz
dE5vZGUsIGludCBkZWx0YSkKIHsKICAgICBpZiAobGVuZ3RoIDw9IDApCiAgICAgICAgIHJldHVy
bjsKQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29w
eU1hcmtlcnMoTm9kZSogc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAgIHJl
dHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgTWFya2VyTGlz
dCogbGlzdCA9IG1fbWFya2Vycy5nZXQoc3JjTm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQoJnNyY05vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC00MzMsMTEgKzQzMywxMSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
Y29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAg
IGFkZE1hcmtlcihkc3ROb2RlLCBtYXJrZXIpOwogICAgIH0KIAotICAgIGlmIChkb2NEaXJ0eSAm
JiBkc3ROb2RlLT5yZW5kZXJlcigpKQotICAgICAgICBkc3ROb2RlLT5yZW5kZXJlcigpLT5yZXBh
aW50KCk7CisgICAgaWYgKGRvY0RpcnR5ICYmIGRzdE5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAg
ZHN0Tm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtl
clR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBs
ZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMs
IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7CiAgICAgaWYgKGxlbmd0aCA8PSAwKQogICAgICAgICBy
ZXR1cm47CkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKIAotICAgIE1h
cmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNDkzLDEzICs0OTMsMTMgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICB9
CiAKICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbWFya2Vycy5yZW1vdmUo
bm9kZSk7CisgICAgICAgIG1fbWFya2Vycy5yZW1vdmUoJm5vZGUpOwogICAgICAgICBpZiAobV9t
YXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5
cGVzID0geyB9OwogICAgIH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBub2RlLT5yZW5kZXJlcigp
KQotICAgICAgICBub2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRvY0RpcnR5
ICYmIG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7
CiB9CiAKIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNv
bnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIG1hcmtlclR5cGUpCkBAIC01MjMsMTMgKzUyMywxMyBAQCBEb2N1bWVudE1hcmtl
ciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0ZvcihOb2RlKiBu
b2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQor
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
Om1hcmtlcnNGb3IoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJU
eXBlcykpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IHJlc3VsdDsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChu
b2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAg
aWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC01NTMsNyArNTUzLDcgQEAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
Om1hcmtlcnNJblJhbmdlKFJhbmdlJgogCiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2Uu
cGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7
IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkp
IHsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKG5vZGUpKSB7CisgICAg
ICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcigqbm9kZSkpIHsKICAgICAgICAgICAg
IGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYm
IG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFuZ2Uuc3RhcnRPZmZzZXQoKSkKQEAgLTU2NiwxMyAr
NTY2LDEzIEBAIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSYKICAgICByZXR1cm4gZm91bmRNYXJrZXJz
OwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2Rl
KiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVz
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9k
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsK
ICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVy
bjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogICAgIAotICAgIE1hcmtlck1h
cDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX21hcmtlcnMuZmluZChub2RlKTsKKyAgICBNYXJrZXJN
YXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQoJm5vZGUpOwogICAgIGlmIChp
dGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkpCiAgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlz
dChpdGVyYXRvciwgbWFya2VyVHlwZXMpOwogfQpAQCAtNjYzLDEzICs2NjMsMTMgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBk
ZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYg
bm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSkKIHsKICAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0
KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9t
YXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKQEAg
LTY4MCw3ICs2ODAsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJr
ZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogI2lmIFBMQVRGT1JNKElP
UykKICAgICAgICAgaW50IHRhcmdldFN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkg
KyBkZWx0YTsKICAgICAgICAgaW50IHRhcmdldEVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQo
KSArIGRlbHRhOwotICAgICAgICBpZiAodGFyZ2V0U3RhcnRPZmZzZXQgPj0gbm9kZS0+bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5kT2Zmc2V0IDw9IDApIHsKKyAgICAgICAgaWYgKHRh
cmdldFN0YXJ0T2Zmc2V0ID49IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5k
T2Zmc2V0IDw9IDApIHsKICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CkBAIC02OTksNyArNjk5LDcgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgaW4KICAgICAgICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zm
c2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpID8gdGFyZ2V0
RW5kT2Zmc2V0IDogbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpOworICAgICAgICAgICAgbWFy
a2VyLnNldEVuZE9mZnNldCh0YXJnZXRFbmRPZmZzZXQgPCBub2RlLm1heENoYXJhY3Rlck9mZnNl
dCgpID8gdGFyZ2V0RW5kT2Zmc2V0IDogbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CiAgICAg
ICAgICAgICBkaWRTaGlmdE1hcmtlciA9IHRydWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNzA3
LDM0ICs3MDcsMzQgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2Vy
cyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICB9CiAKICAgICBpZiAo
ZGlkU2hpZnRNYXJrZXIpIHsKLSAgICAgICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9k
ZSgqbm9kZSk7CisgICAgICAgIGludmFsaWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7
CiAKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBub2RlLT5yZW5k
ZXJlcigpLT5yZXBhaW50KCk7CisgICAgICAgIGlmIChub2RlLnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBh
Y3RpdmUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShS
YW5nZSYgcmFuZ2UsIGJvb2wgYWN0aXZlKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJz
KERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1cm47CiAgICAgQVNT
RVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2Ut
PmVuZENvbnRhaW5lcigpOworICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRD
b250YWluZXIoKTsKKyAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIo
KTsKIAotICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKKyAg
ICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5vZGUoKTsKIAotICAgIGZvciAo
Tm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkg
OiAwOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIg
PyByYW5nZS0+ZW5kT2Zmc2V0KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7Ci0gICAgICAgIHNldE1hcmtlcnNBY3RpdmUobm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCwgYWN0aXZlKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9k
ZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewor
ICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8g
cmFuZ2Uuc3RhcnRPZmZzZXQoKSA6IDA7CisgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5v
ZGUgPT0gJmVuZENvbnRhaW5lciA/IHJhbmdlLmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKCpub2RlLCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmUpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBhY3RpdmUpCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlJiBub2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZSkKIHsKLSAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0KiBs
aXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1
cm47CiAKQEAgLTc1Miw4ICs3NTIsOCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldAogICAgICAg
ICBkaWRBY3RpdmF0ZU1hcmtlciA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRpZEFjdGl2YXRl
TWFya2VyICYmIG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJl
cGFpbnQoKTsKKyAgICBpZiAoZGlkQWN0aXZhdGVNYXJrZXIgJiYgbm9kZS5yZW5kZXJlcigpKQor
ICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAogYm9vbCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQpAQCAtNzY3LDcgKzc2Nyw3IEBAIGJv
b2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyCiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5w
YXN0TGFzdE5vZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsg
bm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkg
ewotICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICAg
ICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICAgICAg
aWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYg
bWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uuc3RhcnRP
ZmZzZXQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmgKaW5kZXggOTAwN2ExODczYWQ1OWMxZGNjY2E1Mjc2ZTg5NDZlYjRlZTVhOTEwYS4uYWZlYTc2
YTFhYWMwOTBkMTg2ZGY1OGU3NjdkNmY2NmE5ODY2NDk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaApAQCAtMyw3ICszLDcgQEAKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTQ4LDE5ICs0OCwxOSBAQCBwdWJsaWM6
CiAgICAgfkRvY3VtZW50TWFya2VyQ29udHJvbGxlcigpOwogCiAgICAgdm9pZCBkZXRhY2goKTsK
LSAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsK
LSAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBj
b25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKLSAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShOb2Rl
KiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUpOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUqLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwg
RG9jdW1lbnRNYXJrZXI6OkRhdGEmJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRUZXh0
TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UqLCBib29sIGFjdGl2ZU1hdGNoKTsKKyAgICB2b2lkIGFk
ZE1hcmtlcihSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKKyAgICB2b2lkIGFk
ZE1hcmtlcihSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcm
IGRlc2NyaXB0aW9uKTsKKyAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShOb2RlJiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUp
OworICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJr
ZXI6OkRhdGEmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UmLCBib29sIGFjdGl2ZU1hdGNoKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAg
dm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9u
cywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOwotICAgIHZvaWQgYWRkRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbnRlcnByZXRhdGlvbnMpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJh
bmdlKiwgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOworICAgIHZvaWQgYWRkTWFya2Vy
KFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFp
blB0cjxpZD4mIG1ldGFkYXRhKTsKKyAgICB2b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXNNYXJrZXIoUmFuZ2UmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRp
b25zKTsKKyAgICB2b2lkIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSYsIGNvbnN0IFJl
dGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKICNlbmRpZgotICAgIHZvaWQgYWRkRHJhZ2dlZENvbnRl
bnRNYXJrZXIoUmVmUHRyPFJhbmdlPik7CisgICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtl
cihSYW5nZSYpOwogCi0gICAgdm9pZCBjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsKKyAg
ICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBp
bnQgbGVuZ3RoLCBOb2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpOwogICAgIGJvb2wgaGFzTWFya2Vy
cygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAh
bV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnMoRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSkpOwpAQCAtNzIsMTcgKzcyLDE3IEBAIHB1YmxpYzoKICAgICAvLyByZW1vdmUg
dGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3aWxsIGFkanVzdCB0aGUg
c3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwogICAgIC8vIHRoZSBwb3J0aW9u
IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuCiAgICAgZW51bSBSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlck9yTm90IHsgRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgfTsKLSAgICB2b2lkIHJlbW92
ZU1hcmtlcnMoUmFuZ2UqLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0g
RG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAg
IHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5n
dGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtl
cjo6YWxsTWFya2VycygpLCAgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9
IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3Zl
TWFya2VycyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAg
dm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0
aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2Vy
OjphbGxNYXJrZXJzKCksICBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0g
RG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwotICAgIHZvaWQgcmVtb3ZlTWFy
a2VycyhOb2RlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjph
bGxNYXJrZXJzKCkpOwogICAgIHZvaWQgcmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwotICAg
IHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRh
KTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2UqLCBib29sKTsKLSAgICB2b2lkIHNl
dE1hcmtlcnNBY3RpdmUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIGJvb2wpOworICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgaW50IGRlbHRhKTsKKyAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2UmLCBi
b29sKTsKKyAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUqLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBt
YXJrZXJzRm9yKE5vZGUmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0g
RG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlv
bk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPik7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogI2VuZGlmCiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBhZGRNYXJrZXIoTm9kZSosIGNvbnN0IERvY3VtZW50TWFya2Vy
Jik7CisgICAgdm9pZCBhZGRNYXJrZXIoTm9kZSYsIGNvbnN0IERvY3VtZW50TWFya2VyJik7CiAK
ICAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJM
aXN0Pj4gTWFya2VyTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDY4OTU0ZjUyZWMzZmRm
NTI3NzI5MDgyZThiMjExNDQ4YjUyNmMxMmEuLmExZWQ2N2FiZDU0YTcwZWFlNTllMjA3ZTk3OTUz
ZDgzMTk3NmZhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBF
bGVtZW50Ojp+RWxlbWVudCgpCiAgICAgICAgIGRldGFjaEFsbEF0dHJOb2Rlc0Zyb21FbGVtZW50
KCk7CiAKICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNlcygpKSB7Ci0gICAgICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
cyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3Zl
RWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKCp0aGlzKTsKICAgICAgICAgQVNTRVJUKCFoYXNQ
ZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgIH0KIH0KQEAgLTUzNywyNSArNTM3LDI1IEBAIGJvb2wg
RWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25F
bGVtZW50SW5BY3RpdmVDaGFpbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVs
ZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNJ
bkFjdGl2ZUNoYWluKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVt
ZW50cygpLmlzSW5BY3RpdmVDaGFpbigqdGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2Vy
QWN0aW9uRWxlbWVudEFjdGl2ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVs
ZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNB
Y3RpdmUodGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCku
aXNBY3RpdmUoKnRoaXMpOwogfQogCiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRG
b2N1c2VkKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAg
ICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0ZvY3VzZWQodGhpcyk7
CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNGb2N1c2VkKCp0
aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25FbGVtZW50SG92ZXJlZCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNIb3ZlcmVkKHRoaXMpOworICAgIHJldHVy
biBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzSG92ZXJlZCgqdGhpcyk7CiB9CiAK
IHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZmxhZywgYm9vbCBwYXVzZSkKQEAgLTU2Myw3
ICs1NjMsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2Up
CiAgICAgaWYgKGZsYWcgPT0gYWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3Vt
ZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0QWN0aXZlKHRoaXMsIGZsYWcpOworICAgIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0QWN0aXZlKCp0aGlzLCBmbGFnKTsKIAog
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IHRoaXMtPnJlbmRlclN0eWxlKCk7
CiAgICAgYm9vbCByZWFjdHNUb1ByZXNzID0gKHJlbmRlclN0eWxlICYmIHJlbmRlclN0eWxlLT5h
ZmZlY3RlZEJ5QWN0aXZlKCkpIHx8IHN0eWxlQWZmZWN0ZWRCeUFjdGl2ZSgpOwpAQCAtNjEyLDcg
KzYxMiw3IEBAIHZvaWQgRWxlbWVudDo6c2V0Rm9jdXMoYm9vbCBmbGFnKQogICAgIGlmIChmbGFn
ID09IGZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQoKS51c2VyQWN0
aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKHRoaXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNl
ckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9jdXNlZCgqdGhpcywgZmxhZyk7CiAgICAgaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdGhpczsg
ZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnRJbkNvbXBvc2VkVHJlZSgp
KQpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgRWxlbWVudDo6c2V0SG92ZXJlZChib29sIGZsYWcp
CiAgICAgaWYgKGZsYWcgPT0gaG92ZXJlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1
bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEhvdmVyZWQodGhpcywgZmxhZyk7CisgICAg
ZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRIb3ZlcmVkKCp0aGlzLCBmbGFnKTsK
IAogICAgIGlmICghcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBXaGVuIHNldHRpbmcgaG92ZXIg
dG8gZmFsc2UsIHRoZSBzdHlsZSBuZWVkcyB0byBiZSByZWNhbGMnZCBldmVuIHdoZW4KQEAgLTE2
MDksMTYgKzE2MDksMTYgQEAgYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKICAg
ICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBlbGVtZW50RGF0YSgpLT5sZW5ndGgoKTsKIH0KIAot
Ym9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBvdGhl
cikgY29uc3QKK2Jvb2wgRWxlbWVudDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxl
bWVudCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0g
ICAgb3RoZXItPnN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOwotICAgIGlmIChlbGVtZW50RGF0
YSgpID09IG90aGVyLT5lbGVtZW50RGF0YSgpKQorICAgIG90aGVyLnN5bmNocm9uaXplQWxsQXR0
cmlidXRlcygpOworICAgIGlmIChlbGVtZW50RGF0YSgpID09IG90aGVyLmVsZW1lbnREYXRhKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50RGF0YSgpKQotICAgICAgICBy
ZXR1cm4gZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KG90aGVyLT5lbGVtZW50RGF0YSgpKTsK
LSAgICBpZiAob3RoZXItPmVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVybiBvdGhlci0+ZWxl
bWVudERhdGEoKS0+aXNFcXVpdmFsZW50KGVsZW1lbnREYXRhKCkpOworICAgICAgICByZXR1cm4g
ZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KG90aGVyLmVsZW1lbnREYXRhKCkpOworICAgIGlm
IChvdGhlci5lbGVtZW50RGF0YSgpKQorICAgICAgICByZXR1cm4gb3RoZXIuZWxlbWVudERhdGEo
KS0+aXNFcXVpdmFsZW50KGVsZW1lbnREYXRhKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xNzc0LDcgKzE3NzQsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmIGluc2VydGlvblBvaW50KQogICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tKGluc2Vy
dGlvblBvaW50KTsKIAogICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpCi0gICAgICAgIGRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jl
c291cmNlcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKCp0aGlzKTsKIAogCiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtMTgxNyw3ICsxODE3LDcgQEAgdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290
KFJlZjxTaGFkb3dSb290PiYmIG5ld1NoYWRvd1Jvb3QpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdCgqdGhpcywgc2hhZG93Um9vdCk7CiAKICAgICBpZiAo
c2hhZG93Um9vdC5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAg
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCgmc2hhZG93Um9vdCk7CisgICAgICAgIGRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6cmVtb3Zl
U2hhZG93Um9vdCgpCkBAIC0zNTMwLDEwICszNTMwLDEwIEBAIHZvaWQgRWxlbWVudDo6Y2xlYXJI
b3ZlckFuZEFjdGl2ZVN0YXR1c0JlZm9yZURldGFjaGluZ1JlbmRlcmVyKCkKICAgICBpZiAoIWlz
VXNlckFjdGlvbkVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChob3ZlcmVkKCkp
Ci0gICAgICAgIGRvY3VtZW50KCkuaG92ZXJlZEVsZW1lbnREaWREZXRhY2godGhpcyk7CisgICAg
ICAgIGRvY3VtZW50KCkuaG92ZXJlZEVsZW1lbnREaWREZXRhY2goKnRoaXMpOwogICAgIGlmIChp
bkFjdGl2ZUNoYWluKCkpCi0gICAgICAgIGRvY3VtZW50KCkuZWxlbWVudEluQWN0aXZlQ2hhaW5E
aWREZXRhY2godGhpcyk7Ci0gICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWRE
ZXRhY2godGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuZWxlbWVudEluQWN0aXZlQ2hhaW5EaWRE
ZXRhY2goKnRoaXMpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuZGlkRGV0
YWNoKCp0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNo
YW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGY2ZGJlYWMzNGE1ZjM2ZWE4ZTEzMDhiNmIwZmFj
MTYyMmJkNzc0MzMuLjY5ZjA3YzA4ZDQ4MzJmMWYxMDgyMWE5MThkMzU4YTZjNDI0ZDRmZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaApAQCAtMjU5LDcgKzI1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDbG9u
ZXMgYWxsIGF0dHJpYnV0ZS1kZXJpdmVkIGRhdGEsIGluY2x1ZGluZyBzdWJjbGFzcyBzcGVjaWZp
Y3MgKHRocm91Z2ggY29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMuKQogICAgIHZvaWQgY2xvbmVE
YXRhRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYpOwogCi0gICAgYm9vbCBoYXNFcXVpdmFsZW50
QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBoYXNFcXVp
dmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50JiBvdGhlcikgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXNGcm9tRWxlbWVudChjb25zdCBFbGVt
ZW50JikgeyB9CiAKQEAgLTU5MywxNCArNTkzLDkgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVXNl
ckFjdGlvbkVsZW1lbnRGb2N1c2VkKCkgY29uc3Q7CiAgICAgYm9vbCBpc1VzZXJBY3Rpb25FbGVt
ZW50SG92ZXJlZCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2VudFNo
YWRvd1Jvb3QoU2hhZG93Um9vdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgYWx3YXlzQ3Jl
YXRlVXNlckFnZW50U2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBdHRyIHRvIGNhbGwgd2lsbE1vZGlmeUF0dHJp
YnV0ZS9kaWRNb2RpZnlBdHRyaWJ1dGUuCi0gICAgZnJpZW5kIGNsYXNzIEF0dHI7Ci0KLSAgICBl
bnVtIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB7IE5vdEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlID0gMCwgSW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgfTsK
LQogICAgIHZvaWQgZGlkQWRkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9taWNTdHJpbmcmKTsKICAgICB2b2lkIHdpbGxNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3VmFsdWUpOwogICAgIHZvaWQgZGlkTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld1ZhbHVlKTsKQEAgLTYyOCw2ICs2MjMsNyBAQCBwcml2YXRlOgogICAgIE5vZGVUeXBlIG5v
ZGVUeXBlKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBl
KSBjb25zdCBmaW5hbDsKIAorICAgIGVudW0gU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRl
IHsgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUsIEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlIH07CiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25l
ZCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUs
IFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgdm9pZCBhZGRBdHRyaWJ1dGVJ
bnRlcm5hbChjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
U3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0
ZUludGVybmFsKHVuc2lnbmVkIGluZGV4LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCA1Yjc0YTJiMzU5ODg0ZDI1NjUy
ZmRlZTI4MGFmOGYyMjY3MGI1MmQwLi4xN2JjZWU2ZWE3MzgyY2IwY2I1ODMzZjEyYWI1ZGM1NGI0
N2Q2MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApAQCAtMjYsNyArMjYsNiBA
QAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPEF0dHI+PiBOYW1l
ZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiBWZWN0
b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdAog
ewogICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gbV9lbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVz
KCk7Ci0gICAgaWYgKGlzPEhUTUxFbGVtZW50PihtX2VsZW1lbnQpICYmIGlzPEhUTUxEb2N1bWVu
dD4obV9lbGVtZW50LmRvY3VtZW50KCkpKSB7CisgICAgaWYgKGlzPEhUTUxFbGVtZW50PihtX2Vs
ZW1lbnQpICYmIG1fZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgbmFtZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oU3RyaW5nJiBuYW1lKSB7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogU3RyaW5nVmlldyB7IG5hbWUgfS5jb2RlVW5pdHMoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAppbmRleCA1Yjk3YzY4ZTdiN2RhODM2ZjNjNDg2MDEzNTgxOTAyNGIyZjA5YWEwLi5iNTIz
ZjkyNWZhYzQxMmE1OTIwNDE0Yzc3NjQ5NWQyZDkzNWQyMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBA
IC01OTksNyArNTk5LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICB3aGlsZSAo
Tm9kZSogbmV4dFNpYmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBp
ZiAobmV4dFNpYmxpbmctPm5vZGVUeXBlKCkgIT0gVEVYVF9OT0RFKQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgUmVmUHRyPFRleHQ+IG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4
dD4obmV4dFNpYmxpbmcpOworICAgICAgICAgICAgUmVmPFRleHQ+IG5leHRUZXh0ID0gZG93bmNh
c3Q8VGV4dD4oKm5leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IHRl
eHQgbm9kZXMuCiAgICAgICAgICAgICBpZiAoIW5leHRUZXh0LT5sZW5ndGgoKSkgewpAQCAtNjEw
LDcgKzYxMCw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkKICAgICAgICAgICAgIC8vIEJvdGgg
bm9uLWVtcHR5IHRleHQgbm9kZXMuIE1lcmdlIHRoZW0uCiAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSB0ZXh0LT5sZW5ndGgoKTsKICAgICAgICAgICAgIHRleHQtPmFwcGVuZERhdGEobmV4
dFRleHQtPmRhdGEoKSk7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLnRleHROb2Rlc01lcmdlZChu
ZXh0VGV4dC5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkudGV4dE5vZGVz
TWVyZ2VkKG5leHRUZXh0LCBvZmZzZXQpOwogICAgICAgICAgICAgbmV4dFRleHQtPnJlbW92ZSgp
OwogICAgICAgICB9CiAKQEAgLTEzMjMsNyArMTMyMyw3IEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5v
ZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAgICAgICAgIGF1dG8mIG90aGVyRWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpvdGhlcik7CiAgICAgICAgIGlmICh0aGlzRWxlbWVudC50YWdRTmFtZSgp
ICE9IG90aGVyRWxlbWVudC50YWdRTmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIXRoaXNFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKCZvdGhlckVs
ZW1lbnQpKQorICAgICAgICBpZiAoIXRoaXNFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVz
KG90aGVyRWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCmluZGV4IDQ1ZDg2MGJh
ODZmNDkwMzY2MTk4YmZlODQ2NGYxYzI2NTEyZTliNzkuLmY2ZjEwMjA2OWI5ZWZjNDFhNDI1Y2Y2
ZGEzYzI0NzdiZWVkYTEyZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRl
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCkBAIC03
Myw3ICs3Myw3IEBAIGlubGluZSBOb2RlSXRlcmF0b3I6Ok5vZGVJdGVyYXRvcihOb2RlJiByb290
Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUmVmUHRyPE5vCiAgICAgOiBOb2RlSXRlcmF0b3JC
YXNlKHJvb3ROb2RlLCB3aGF0VG9TaG93LCBXVEZNb3ZlKGZpbHRlcikpCiAgICAgLCBtX3JlZmVy
ZW5jZU5vZGUocm9vdE5vZGUsIHRydWUpCiB7Ci0gICAgcm9vdCgpLmRvY3VtZW50KCkuYXR0YWNo
Tm9kZUl0ZXJhdG9yKHRoaXMpOworICAgIHJvb3QoKS5kb2N1bWVudCgpLmF0dGFjaE5vZGVJdGVy
YXRvcigqdGhpcyk7CiB9CiAKIFJlZjxOb2RlSXRlcmF0b3I+IE5vZGVJdGVyYXRvcjo6Y3JlYXRl
KE5vZGUmIHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQdHI8Tm9kZUZpbHRlcj4m
JiBmaWx0ZXIpCkBAIC04Myw3ICs4Myw3IEBAIFJlZjxOb2RlSXRlcmF0b3I+IE5vZGVJdGVyYXRv
cjo6Y3JlYXRlKE5vZGUmIHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQCiAKIE5v
ZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRvcigpCiB7Ci0gICAgcm9vdCgpLmRvY3VtZW50KCkuZGV0
YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOworICAgIHJvb3QoKS5kb2N1bWVudCgpLmRldGFjaE5vZGVJ
dGVyYXRvcigqdGhpcyk7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxOb2RlPj4gTm9kZUl0ZXJh
dG9yOjpuZXh0Tm9kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0
b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcApp
bmRleCA0ZDMzNzI3OWMwZWNiYzk1MGRmNDllZWIxZTU0Mjc0MjczMGQ1OTdkLi40NTgxYTk0YjEz
ZWZiNmUzOGMzNjdiYTcxODI2NGFjZTVlNzNkNmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRp
b0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTMwLDM1ICszMCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBSYWRpb0J1dHRvbkdyb3VwIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBSYWRpb0J1dHRvbkdyb3VwKCk7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9tZW1iZXJzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaXNSZXF1aXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZWRDb3VudDsgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGNoZWNrZWRCdXR0b24oKSBjb25zdCB7IHJldHVybiBtX2NoZWNrZWRCdXR0b247IH0KLSAgICB2
b2lkIGFkZChIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUo
SFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhU
TUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZShIVE1MSW5wdXRFbGVtZW50Kik7Ci0g
ICAgYm9vbCBjb250YWlucyhIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CisgICAgdm9pZCBhZGQo
SFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1
dEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRF
bGVtZW50Jik7CisgICAgdm9pZCByZW1vdmUoSFRNTElucHV0RWxlbWVudCYpOworICAgIGJvb2wg
Y29udGFpbnMoSFRNTElucHV0RWxlbWVudCYpIGNvbnN0OwogICAgIFZlY3RvcjxIVE1MSW5wdXRF
bGVtZW50Kj4gbWVtYmVycygpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZHNT
dHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMoKTsKICAgICB2b2lkIHVwZGF0ZVZhbGlkaXR5Rm9yQWxs
QnV0dG9ucygpOwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotICAgIHZvaWQgY2hhbmdlQ2hl
Y2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7CiAgICAgdm9pZCBzZXRDaGVja2VkQnV0dG9u
KEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogICAgIEhhc2hTZXQ8SFRNTElucHV0RWxlbWVudCo+IG1f
bWVtYmVyczsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBtX2NoZWNrZWRCdXR0b247Ci0gICAgc2l6
ZV90IG1fcmVxdWlyZWRDb3VudDsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBtX2NoZWNrZWRCdXR0
b24geyBudWxscHRyIH07CisgICAgc2l6ZV90IG1fcmVxdWlyZWRDb3VudCB7IDAgfTsKIH07CiAK
LVJhZGlvQnV0dG9uR3JvdXA6OlJhZGlvQnV0dG9uR3JvdXAoKQotICAgIDogbV9jaGVja2VkQnV0
dG9uKG51bGxwdHIpCi0gICAgLCBtX3JlcXVpcmVkQ291bnQoMCkKLXsKLX0KLQogaW5saW5lIGJv
b2wgUmFkaW9CdXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFpc1Jl
cXVpcmVkKCkgfHwgbV9jaGVja2VkQnV0dG9uOwpAQCAtODgsMTYgKzgwLDE2IEBAIHZvaWQgUmFk
aW9CdXR0b25Hcm91cDo6c2V0Q2hlY2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBidXR0b24p
CiAgICAgICAgIG9sZENoZWNrZWRCdXR0b24tPnNldENoZWNrZWQoZmFsc2UpOwogfQogCi12b2lk
IFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJh
ZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNT
RVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoIW1fbWVtYmVycy5hZGQoYnV0
dG9uKS5pc05ld0VudHJ5KQorICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAg
ICBpZiAoIW1fbWVtYmVycy5hZGQoJmJ1dHRvbikuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJu
OwogICAgIGJvb2wgZ3JvdXBXYXNWYWxpZCA9IGlzVmFsaWQoKTsKLSAgICBpZiAoYnV0dG9uLT5p
c1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1dHRvbi5pc1JlcXVpcmVkKCkpCiAgICAgICAgICsrbV9y
ZXF1aXJlZENvdW50OwotICAgIGlmIChidXR0b24tPmNoZWNrZWQoKSkKLSAgICAgICAgc2V0Q2hl
Y2tlZEJ1dHRvbihidXR0b24pOworICAgIGlmIChidXR0b24uY2hlY2tlZCgpKQorICAgICAgICBz
ZXRDaGVja2VkQnV0dG9uKCZidXR0b24pOwogCiAgICAgYm9vbCBncm91cElzVmFsaWQgPSBpc1Zh
bGlkKCk7CiAgICAgaWYgKGdyb3VwV2FzVmFsaWQgIT0gZ3JvdXBJc1ZhbGlkKQpAQCAtMTA1LDMx
ICs5NywzMSBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50KiBi
dXR0b24pCiAgICAgZWxzZSBpZiAoIWdyb3VwSXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlv
IGJ1dHRvbiBub3QgaW4gYSBncm91cCBpcyBhbHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBp
dAogICAgICAgICAvLyBpbnZhbGlkIG9ubHkgaWYgdGhlIGdyb3VwIGlzIGludmFsaWQuCi0gICAg
ICAgIGJ1dHRvbi0+dXBkYXRlVmFsaWRpdHkoKTsKKyAgICAgICAgYnV0dG9uLnVwZGF0ZVZhbGlk
aXR5KCk7CiAgICAgfQogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZUNoZWNrZWRT
dGF0ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVw
ZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJU
KGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5z
KGJ1dHRvbikpOworICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBBU1NF
UlQobV9tZW1iZXJzLmNvbnRhaW5zKCZidXR0b24pKTsKICAgICBib29sIHdhc1ZhbGlkID0gaXNW
YWxpZCgpOwotICAgIGlmIChidXR0b24tPmNoZWNrZWQoKSkKLSAgICAgICAgc2V0Q2hlY2tlZEJ1
dHRvbihidXR0b24pOworICAgIGlmIChidXR0b24uY2hlY2tlZCgpKQorICAgICAgICBzZXRDaGVj
a2VkQnV0dG9uKCZidXR0b24pOwogICAgIGVsc2UgewotICAgICAgICBpZiAobV9jaGVja2VkQnV0
dG9uID09IGJ1dHRvbikKKyAgICAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSAmYnV0dG9uKQog
ICAgICAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbihudWxscHRyKTsKICAgICB9CiAgICAgaWYgKHdh
c1ZhbGlkICE9IGlzVmFsaWQoKSkKICAgICAgICAgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25z
KCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2Vk
KEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVxdWly
ZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NF
UlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFp
bnMoYnV0dG9uKSk7CisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFT
U0VSVChtX21lbWJlcnMuY29udGFpbnMoJmJ1dHRvbikpOwogICAgIGJvb2wgd2FzVmFsaWQgPSBp
c1ZhbGlkKCk7Ci0gICAgaWYgKGJ1dHRvbi0+aXNSZXF1aXJlZCgpKQorICAgIGlmIChidXR0b24u
aXNSZXF1aXJlZCgpKQogICAgICAgICArK21fcmVxdWlyZWRDb3VudDsKICAgICBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKG1fcmVxdWlyZWRDb3VudCk7CkBAIC0xMzksMjIgKzEzMSwyMiBAQCB2b2lk
IFJhZGlvQnV0dG9uR3JvdXA6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVt
ZW50KiBidXR0b24pCiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpOwogfQog
Ci12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24p
Cit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50JiBidXR0b24p
CiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBIYXNoU2V0PEhU
TUxJbnB1dEVsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX21lbWJlcnMuZmluZChidXR0b24pOwor
ICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBhdXRvIGl0ID0gbV9tZW1i
ZXJzLmZpbmQoJmJ1dHRvbik7CiAgICAgaWYgKGl0ID09IG1fbWVtYmVycy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYm9vbCB3YXNWYWxpZCA9IGlzVmFsaWQoKTsKICAgICBtX21lbWJl
cnMucmVtb3ZlKGl0KTsKLSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpIHsKKyAgICBpZiAo
YnV0dG9uLmlzUmVxdWlyZWQoKSkgewogICAgICAgICBBU1NFUlQobV9yZXF1aXJlZENvdW50KTsK
ICAgICAgICAgLS1tX3JlcXVpcmVkQ291bnQ7CiAgICAgfQogICAgIGlmIChtX2NoZWNrZWRCdXR0
b24pIHsKLSAgICAgICAgYnV0dG9uLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAg
ICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0gYnV0dG9uKSB7CisgICAgICAgIGJ1dHRvbi5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0g
JmJ1dHRvbikgewogICAgICAgICAgICAgbV9jaGVja2VkQnV0dG9uID0gbnVsbHB0cjsKICAgICAg
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0b25zKCk7CiAgICAgICAgIH0KQEAg
LTE2OCw3ICsxNjAsNyBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRF
bGVtZW50KiBidXR0b24pCiAgICAgaWYgKCF3YXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlv
IGJ1dHRvbiBub3QgaW4gYSBncm91cCBpcyBhbHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBp
dAogICAgICAgICAvLyB2YWxpZCBvbmx5IGlmIHRoZSBncm91cCB3YXMgaW52YWxpZC4KLSAgICAg
ICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRp
dHkoKTsKICAgICB9CiB9CiAKQEAgLTE4OCw5ICsxODAsOSBAQCB2b2lkIFJhZGlvQnV0dG9uR3Jv
dXA6OnVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpCiAgICAgfQogfQogCi1ib29sIFJhZGlv
QnV0dG9uR3JvdXA6OmNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikgY29uc3QKK2Jv
b2wgUmFkaW9CdXR0b25Hcm91cDo6Y29udGFpbnMoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKSBj
b25zdAogewotICAgIHJldHVybiBtX21lbWJlcnMuY29udGFpbnMoYnV0dG9uKTsKKyAgICByZXR1
cm4gbV9tZW1iZXJzLmNvbnRhaW5zKCZidXR0b24pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDYs
MTYgKzE5OCwxNiBAQCBSYWRpb0J1dHRvbkdyb3Vwczo6flJhZGlvQnV0dG9uR3JvdXBzKCkKIHsK
IH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjphZGRCdXR0b24oSFRNTElucHV0RWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsK
LSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5p
c1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1l
VG9Hcm91cE1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8TmFtZVRvR3JvdXBNYXA+KCk7CiAKLSAgICBh
dXRvJiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgp
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgZ3JvdXAgPSBtX25hbWVUb0dy
b3VwTWFwLT5hZGQoZWxlbWVudC5uYW1lKCkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKCFncm91cCkKICAgICAgICAgZ3JvdXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJh
ZGlvQnV0dG9uR3JvdXA+KCk7CiAgICAgZ3JvdXAtPmFkZChlbGVtZW50KTsKQEAgLTI0MCwzMCAr
MjMyLDI2IEBAIFZlY3RvcjxIVE1MSW5wdXRFbGVtZW50Kj4gUmFkaW9CdXR0b25Hcm91cHM6Omdy
b3VwTWVtYmVycyhjb25zdCBIVE1MSW5wdXRFbGVtZW50CiAgICAgcmV0dXJuIGdyb3VwLT5tZW1i
ZXJzKCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6dXBkYXRl
Q2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVs
ZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5
KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVu
dC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fbmFtZVRv
R3JvdXBNYXApOwogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgcmV0dXJuOwot
ICAgIFJhZGlvQnV0dG9uR3JvdXAqIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1l
bnQtPm5hbWUoKS5pbXBsKCkpOwotICAgIEFTU0VSVChncm91cCk7Ci0gICAgZ3JvdXAtPnVwZGF0
ZUNoZWNrZWRTdGF0ZShlbGVtZW50KTsKKyAgICBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVu
dC5uYW1lKCkuaW1wbCgpKS0+dXBkYXRlQ2hlY2tlZFN0YXRlKGVsZW1lbnQpOwogfQogCi12b2lk
IFJhZGlvQnV0dG9uR3JvdXBzOjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxl
bWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OnJlcXVpcmVkQXR0cmlidXRl
Q2hhbmdlZChIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQor
ICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFt
ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX25hbWVUb0dyb3Vw
TWFwKTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVybjsKLSAgICBS
YWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50LT5u
YW1lKCkuaW1wbCgpKTsKLSAgICBBU1NFUlQoZ3JvdXApOwotICAgIGdyb3VwLT5yZXF1aXJlZEF0
dHJpYnV0ZUNoYW5nZWQoZWxlbWVudCk7CisgICAgbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1l
bnQubmFtZSgpLmltcGwoKSktPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChlbGVtZW50KTsKIH0K
IAogSFRNTElucHV0RWxlbWVudCogUmFkaW9CdXR0b25Hcm91cHM6OmNoZWNrZWRCdXR0b25Gb3JH
cm91cChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC0yNzUsMzggKzI2MywzNiBA
QCBIVE1MSW5wdXRFbGVtZW50KiBSYWRpb0J1dHRvbkdyb3Vwczo6Y2hlY2tlZEJ1dHRvbkZvckdy
b3VwKGNvbnN0IEF0b21pY1N0cmluZyYgbgogICAgIHJldHVybiBncm91cCA/IGdyb3VwLT5jaGVj
a2VkQnV0dG9uKCkgOiBudWxscHRyOwogfQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXBzOjpoYXND
aGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29s
IFJhZGlvQnV0dG9uR3JvdXBzOjpoYXNDaGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24o
KSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZWxlbWVudC0+bmFtZSgpOworICAg
IEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lID0gZWxlbWVudC5uYW1lKCk7CiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpIHx8ICFtX25h
bWVUb0dyb3VwTWFwKQotICAgICAgICByZXR1cm4gZWxlbWVudC0+Y2hlY2tlZCgpOwotCi0gICAg
Y29uc3QgUmFkaW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQobmFt
ZS5pbXBsKCkpOwotICAgIHJldHVybiBncm91cC0+Y2hlY2tlZEJ1dHRvbigpOworICAgICAgICBy
ZXR1cm4gZWxlbWVudC5jaGVja2VkKCk7CisgICAgcmV0dXJuIG1fbmFtZVRvR3JvdXBNYXAtPmdl
dChuYW1lLmltcGwoKSktPmNoZWNrZWRCdXR0b24oKTsKIH0KIAotYm9vbCBSYWRpb0J1dHRvbkdy
b3Vwczo6aXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgY29uc3QK
K2Jvb2wgUmFkaW9CdXR0b25Hcm91cHM6OmlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24o
KSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1l
bnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgUmFkaW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dy
b3VwTWFwLT5nZXQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CisgICAgYXV0byogZ3JvdXAgPSBt
X25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC5uYW1lKCkuaW1wbCgpKTsKICAgICByZXR1cm4g
Z3JvdXAgJiYgZ3JvdXAtPmlzUmVxdWlyZWQoKSAmJiBncm91cC0+Y29udGFpbnMoZWxlbWVudCk7
CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OnJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVtb3ZlQnV0dG9uKEhUTUxJ
bnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0
b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVs
ZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX25hbWVUb0dyb3VwTWFwLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAg
TmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9yIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVt
ZW50LT5uYW1lKCkuaW1wbCgpKTsKKyAgICBhdXRvIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+Zmlu
ZChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpOwogICAgIGlmIChpdCA9PSBtX25hbWVUb0dyb3VwTWFw
LT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaAppbmRleCAxZTVhNThkNTdkYTc2
ODVlMWMwMThmZDk2YWZhZjIwN2VmMDEzMzZhLi41MzMxMmRkZTk3MDZjZThkMjRhM2UyMTRhZWM0
ZWNmNTNlYWVhODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25H
cm91cHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaApAQCAt
MzQsMTMgKzM0LDEzIEBAIGNsYXNzIFJhZGlvQnV0dG9uR3JvdXBzIHsKIHB1YmxpYzoKICAgICBS
YWRpb0J1dHRvbkdyb3VwcygpOwogICAgIH5SYWRpb0J1dHRvbkdyb3VwcygpOwotICAgIHZvaWQg
YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0
ZShIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQo
SFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1l
bnQqKTsKKyAgICB2b2lkIGFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1
cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVxdWlyZWRB
dHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50Jik7CiAgICAgSFRNTElucHV0RWxlbWVudCogY2hlY2tlZEJ1dHRv
bkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYgZ3JvdXBOYW1lKSBjb25zdDsKLSAgICBib29s
IGhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCopIGNvbnN0OwotICAgIGJv
b2wgaXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCopIGNvbnN0OworICAgIGJvb2wg
aGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CisgICAgYm9v
bCBpc0luUmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CiAgICAgVmVjdG9y
PEhUTUxJbnB1dEVsZW1lbnQqPiBncm91cE1lbWJlcnMoY29uc3QgSFRNTElucHV0RWxlbWVudCYp
IGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNWRhZTA2MzZiYjE5NzNh
MzU5NzM4Mzk3Y2I2MTMwMWY5MDJlMzBjMy4uMzYxOTkwNDdjMzRjYWI2ZjI4MTY1ZTBlZjgzNGMy
MjlhODRkNzQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQm9keUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgpAQCAtNzksNyArNzgsNyBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRv
Y3VtZW50KQogICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgbV9v
d25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0
dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAogUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50
JiBvd25lckRvY3VtZW50KQpAQCAtOTYsNyArOTUsNyBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERv
Y3VtZW50JiBvd25lckRvY3VtZW50LCBOb2RlKiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zm
cwogICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgbV9vd25lckRv
Y3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJh
bmdlKCp0aGlzKTsKIAogICAgIC8vIFNpbXBseSBzZXR0aW5nIHRoZSBjb250YWluZXJzIGFuZCBv
ZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkgb2YgdGhlIGNoZWNraW5nCiAgICAgLy8g
dGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4K
QEAgLTEyNSw3ICsxMjQsNyBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93
bmVyRG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZQogCiBSYW5nZTo6flJh
bmdlKCkKIHsKLSAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKHRoaXMpOworICAgIG1f
b3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UoKnRoaXMpOwogCiAjaWZuZGVmIE5ERUJVRwogICAg
IHJhbmdlQ291bnRlci5kZWNyZW1lbnQoKTsKQEAgLTEzNSwxMSArMTM0LDExIEBAIFJhbmdlOjp+
UmFuZ2UoKQogdm9pZCBSYW5nZTo6c2V0RG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewog
ICAgIEFTU0VSVChtX293bmVyRG9jdW1lbnQucHRyKCkgIT0gJmRvY3VtZW50KTsKLSAgICBtX293
bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0
YWNoUmFuZ2UoKnRoaXMpOwogICAgIG1fb3duZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgIG1f
c3RhcnQuc2V0VG9TdGFydE9mTm9kZShkb2N1bWVudCk7CiAgICAgbV9lbmQuc2V0VG9TdGFydE9m
Tm9kZShkb2N1bWVudCk7Ci0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsK
KyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAogTm9kZSogUmFu
Z2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lckEsIE5vZGUqIGNvbnRh
aW5lckIpCkBAIC05NzcsNyArOTc2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21l
bnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICAg
ICAgZWxlbWVudCA9ICZkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICBlbHNlCiAgICAgICAg
IGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQoKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgKGlz
PEhUTUxEb2N1bWVudD4oZWxlbWVudC0+ZG9jdW1lbnQoKSkgJiYgaXM8SFRNTEh0bWxFbGVtZW50
PigqZWxlbWVudCkpKQorICAgIGlmICghZWxlbWVudCB8fCAoZWxlbWVudC0+ZG9jdW1lbnQoKS5p
c0hUTUxEb2N1bWVudCgpICYmIGlzPEhUTUxIdG1sRWxlbWVudD4oKmVsZW1lbnQpKSkKICAgICAg
ICAgZWxlbWVudCA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSk7CiAg
ICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCgqZWxlbWVudCwgbWFy
a3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnRBbmREb05vdE1hcmtBbHJlYWR5U3RhcnRlZCk7CiB9
CkBAIC0xNjY5LDkgKzE2NjgsOSBAQCB2b2lkIFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2Rl
JiBub2RlKQogICAgIGJvdW5kYXJ5Tm9kZVdpbGxCZVJlbW92ZWQobV9lbmQsIG5vZGUpOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBv
aW50JiBib3VuZGFyeSwgTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFy
eVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9IHRleHQpCisgICAgaWYg
KGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5z
aWduZWQgYm91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0
ID49IGJvdW5kYXJ5T2Zmc2V0KQpAQCAtMTY3OSwxNyArMTY3OCwxNiBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwg
Tm9kZSogdGV4dAogICAgIGJvdW5kYXJ5LnNldE9mZnNldChib3VuZGFyeU9mZnNldCArIGxlbmd0
aCk7CiB9CiAKLXZvaWQgUmFuZ2U6OnRleHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgUmFuZ2U6OnRleHRJbnNlcnRlZChOb2RlJiB0
ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBBU1NFUlQodGV4
dCk7Ci0gICAgQVNTRVJUKCZ0ZXh0LT5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwor
ICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwogICAgIGJv
dW5kYXJ5VGV4dEluc2VydGVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBi
b3VuZGFyeVRleHRJbnNlcnRlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi1z
dGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2lu
dCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSB0ZXh0KQorICAgIGlmIChib3Vu
ZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVk
IGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgaWYgKG9mZnNldCA+PSBi
b3VuZGFyeU9mZnNldCkKQEAgLTE3MDAsMTAgKzE2OTgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Ym91bmRhcnlUZXh0UmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0
ZXh0LAogICAgICAgICBib3VuZGFyeS5zZXRPZmZzZXQoYm91bmRhcnlPZmZzZXQgLSBsZW5ndGgp
OwogfQogCi12b2lkIFJhbmdlOjp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCh0ZXh0KTsK
LSAgICBBU1NFUlQoJnRleHQtPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAg
QVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CiAgICAgYm91bmRh
cnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRh
cnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQpAQCAtMTcyOCwx
NSArMTcyNSwxNSBAQCB2b2lkIFJhbmdlOjp0ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYg
b2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogICAgIGJvdW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKG1f
ZW5kLCBvbGROb2RlLCBvZmZzZXQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbGROb2Rl
KQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFy
eVBvaW50JiBib3VuZGFyeSwgVGV4dCYgb2xkTm9kZSkKIHsKLSAgICBhdXRvKiBwYXJlbnQgPSBv
bGROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9s
ZE5vZGUpIHsKLSAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLT5sZW5ndGgo
KTsKKyAgICBhdXRvKiBwYXJlbnQgPSBvbGROb2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoYm91
bmRhcnkuY29udGFpbmVyKCkgPT0gJm9sZE5vZGUpIHsKKyAgICAgICAgdW5zaWduZWQgc3BsaXRP
ZmZzZXQgPSBvbGROb2RlLmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNl
dCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxp
dE9mZnNldCkgewogICAgICAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgICAgICBib3Vu
ZGFyeS5zZXQoKm9sZE5vZGUtPm5leHRTaWJsaW5nKCksIGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRP
ZmZzZXQsIDApOworICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldCgqb2xkTm9kZS5uZXh0U2li
bGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXRPZmZzZXQoc3BsaXRPZmZzZXQpOwogICAg
ICAgICB9CkBAIC0xNzQ0LDIwICsxNzQxLDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFy
eVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sCiAg
ICAgfQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5
LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG9sZE5v
ZGUpIHsKLSAgICAgICAgYXV0byogbmV3Q2hpbGQgPSBvbGROb2RlLT5uZXh0U2libGluZygpOwor
ICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRC
ZWZvcmUoKSA9PSAmb2xkTm9kZSkgeworICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUu
bmV4dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJUKG5ld0NoaWxkKTsKICAgICAgICAgYm91bmRh
cnkuc2V0VG9BZnRlckNoaWxkKCpuZXdDaGlsZCk7CiAgICAgfQogfQogCi12b2lkIFJhbmdlOjp0
ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpCit2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRl
eHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNTRVJUKG9sZE5vZGUpOwotICAgIEFTU0VSVCgmb2xkTm9k
ZS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKLSAgICBBU1NFUlQob2xkTm9kZS0+
aXNUZXh0Tm9kZSgpKTsKLSAgICBBU1NFUlQoIW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8fCBvbGRO
b2RlLT5uZXh0U2libGluZygpKTsKLSAgICBBU1NFUlQoIW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8
fCBvbGROb2RlLT5uZXh0U2libGluZygpLT5pc1RleHROb2RlKCkpOworICAgIEFTU0VSVCgmb2xk
Tm9kZS5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCghb2xkTm9k
ZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2libGluZygpKTsKKyAgICBBU1NFUlQoIW9s
ZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgp
KTsKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1fc3RhcnQsIG9sZE5vZGUpOwogICAgIGJv
dW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQsIG9sZE5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRl
eCAzZjFjNTBjYjQ0YWFiYTE4NjU0MmU3NzY5YjQzZDRmN2JkM2ZkOWM1Li5mMmZjNTQyOGRmYzJi
OTNjY2UyNTdiNDBhNzg2OGViYTk5NTkyZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMTMzLDEwICsx
MzMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250
YWluZXJOb2RlJik7CiAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlJik7CiAKLSAgICB2
b2lkIHRleHRJbnNlcnRlZChOb2RlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9kZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9kZSYsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICB2b2lkIHRleHROb2Rlc01lcmdlZChOb2RlV2l0
aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIHZvaWQgdGV4dE5vZGVTcGxp
dChUZXh0KiBvbGROb2RlKTsKKyAgICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7
CiAKICAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gYSB1bml0ICh3b3JkIG9yIHNlbnRlbmNlIG9yIGJs
b2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4KICAgICAvLyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjMyIGNvbW1lbnQgIzUgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggYTgzM2UyODIyNmRkZDFkY2QxNDJkNWNh
MjJiMzU0NjJlMmI5YzBlZi4uNDNlYWYxNGQ0Y2RjZjk0ZDAwY2JhNzkxMmZmMDRhOWY1OGIzMTY1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcApAQCAtMjU2LDExICsyNTYsMTEg
QEAgYm9vbCBTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYg
c2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVnYWMKICAgICB9IGVsc2UgaWYgKChpc0NsYXNzaWNFeHRl
cm5hbFNjcmlwdCB8fCBzY3JpcHRUeXBlID09IFNjcmlwdFR5cGU6Ok1vZHVsZSkgJiYgIWhhc0Fz
eW5jQXR0cmlidXRlKCkgJiYgIW1fZm9yY2VBc3luYykgewogICAgICAgICBtX3dpbGxFeGVjdXRl
SW5PcmRlciA9IHRydWU7CiAgICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKLSAgICAg
ICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlz
LCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOwor
ICAgICAgICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigq
dGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1bm5lcjo6SU5fT1JERVJfRVhFQ1VUSU9O
KTsKICAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJpYnV0ZSgpIHx8IHNjcmlwdFR5cGUgPT0g
U2NyaXB0VHlwZTo6TW9kdWxlKSB7CiAgICAgICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsK
ICAgICAgICAgQVNTRVJUKGhhc0FzeW5jQXR0cmlidXRlKCkgfHwgbV9mb3JjZUFzeW5jKTsKLSAg
ICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0
aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOwor
ICAgICAgICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigq
dGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1bm5lcjo6QVNZTkNfRVhFQ1VUSU9OKTsK
ICAgICB9IGVsc2UgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1dGUoKSAmJiBtX3BhcnNlckluc2VydGVk
ICYmICFkb2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSkgewogICAgICAgICBBU1NFUlQo
c2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBlOjpDbGFzc2ljKTsKICAgICAgICAgbV93aWxsQmVQYXJz
ZXJFeGVjdXRlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKaW5kZXggZmU4YzlkNDYwYjBmYzMxOTZj
MjZhYjQyNDZlNmY4NWM3NTgyNDAwYi4uZjYzZjQ1ZWU4MThiMzFiZTg2ODA2NjI4NmVjZWU0ZDk4
MDkzN2UyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtNzIsNyArNzIsNyBAQCBFeGNlcHRpb25PcjxS
ZWY8VGV4dD4+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gaW5zZXJ0UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBkb2N1
bWVudCgpLnRleHROb2RlU3BsaXQodGhpcyk7CisgICAgZG9jdW1lbnQoKS50ZXh0Tm9kZVNwbGl0
KCp0aGlzKTsKIAogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT5zZXRU
ZXh0V2l0aE9mZnNldChkYXRhKCksIDAsIG9sZERhdGEubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5jcHAKaW5kZXggYTdkYmU1MTQ2YTNjODhjNGVm
ZmNhN2ZiYjJmN2QyMTkzNzc0MjlkNy4uNzNlM2E2MjFkNmY4ZjgxNmI1YmQ4ZWQxNjA3NWYyZGZl
ZmI3OWNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50
U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3Bw
CkBAIC0zMiw5ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBVc2VyQWN0
aW9uRWxlbWVudFNldDo6ZGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFVzZXJBY3Rp
b25FbGVtZW50U2V0OjpkaWREZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1Vz
ZXJBY3Rpb25FbGVtZW50KCkpOwogICAgIGNsZWFyRmxhZ3MoZWxlbWVudCwgSXNBY3RpdmVGbGFn
IHwgSW5BY3RpdmVDaGFpbkZsYWcgfCBJc0hvdmVyZWRGbGFnKTsKIH0KIApAQCAtNDMsMzEgKzQz
LDI4IEBAIHZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmRvY3VtZW50RGlkUmVtb3ZlTGFzdFJl
ZigpCiAgICAgbV9lbGVtZW50cy5jbGVhcigpOwogfQogCi1ib29sIFVzZXJBY3Rpb25FbGVtZW50
U2V0OjpoYXNGbGFncyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykgY29u
c3QKK2Jvb2wgVXNlckFjdGlvbkVsZW1lbnRTZXQ6Omhhc0ZsYWdzKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQsIHVuc2lnbmVkIGZsYWdzKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1Vz
ZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIEVsZW1lbnRGbGFnTWFwOjpjb25zdF9pdGVyYXRvciBm
b3VuZCA9IG1fZWxlbWVudHMuZmluZChjb25zdF9jYXN0PEVsZW1lbnQqPihlbGVtZW50KSk7Ci0g
ICAgaWYgKGZvdW5kID09IG1fZWxlbWVudHMuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gZm91bmQtPnZhbHVlICYgZmxhZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQuaXNV
c2VyQWN0aW9uRWxlbWVudCgpKTsKKyAgICByZXR1cm4gbV9lbGVtZW50cy5nZXQoY29uc3RfY2Fz
dDxFbGVtZW50Kj4oJmVsZW1lbnQpKSAmIGZsYWdzOwogfQogCi12b2lkIFVzZXJBY3Rpb25FbGVt
ZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQordm9p
ZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6Y2xlYXJGbGFncyhFbGVtZW50JiBlbGVtZW50LCB1bnNp
Z25lZCBmbGFncykKIHsKLSAgICBpZiAoIWVsZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSkg
ewotICAgICAgICBBU1NFUlQobV9lbGVtZW50cy5lbmQoKSA9PSBtX2VsZW1lbnRzLmZpbmQoZWxl
bWVudCkpOworICAgIGlmICghZWxlbWVudC5pc1VzZXJBY3Rpb25FbGVtZW50KCkpIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2VsZW1lbnRzLmNvbnRhaW5zKCZlbGVtZW50KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBFbGVtZW50RmxhZ01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VsZW1l
bnRzLmZpbmQoZWxlbWVudCk7CisgICAgYXV0byBmb3VuZCA9IG1fZWxlbWVudHMuZmluZCgmZWxl
bWVudCk7CiAgICAgaWYgKGZvdW5kID09IG1fZWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAgZWxl
bWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQoZmFsc2UpOworICAgICAgICBlbGVtZW50LnNldFVz
ZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHVu
c2lnbmVkIHVwZGF0ZWQgPSBmb3VuZC0+dmFsdWUgJiB+ZmxhZ3M7CiAgICAgaWYgKCF1cGRhdGVk
KSB7Ci0gICAgICAgIGVsZW1lbnQtPnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKKyAgICAg
ICAgZWxlbWVudC5zZXRVc2VyQWN0aW9uRWxlbWVudChmYWxzZSk7CiAgICAgICAgIG1fZWxlbWVu
dHMucmVtb3ZlKGZvdW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc1LDE3ICs3Miwx
NiBAQCB2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQqIGVsZW1l
bnQsIHVuc2lnbmVkIGZsYWdzKQogICAgIGZvdW5kLT52YWx1ZSA9IHVwZGF0ZWQ7CiB9CiAKLXZv
aWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OnNldEZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2ln
bmVkIGZsYWdzKQordm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6c2V0RmxhZ3MoRWxlbWVudCYg
ZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCiB7Ci0gICAgRWxlbWVudEZsYWdNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IG1fZWxlbWVudHMuZmluZChlbGVtZW50KTsKLSAgICBpZiAocmVzdWx0ICE9IG1f
ZWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNlckFjdGlvbkVs
ZW1lbnQoKSk7Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUgfD0gZmxhZ3M7CisgICAgYXV0byByZXN1
bHQgPSBtX2VsZW1lbnRzLmFkZCgmZWxlbWVudCwgZmxhZ3MpOworICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgp
KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSB8PSBmbGFnczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGVsZW1lbnQtPnNldFVzZXJBY3Rpb25FbGVtZW50KHRydWUpOwot
ICAgIG1fZWxlbWVudHMuYWRkKGVsZW1lbnQsIGZsYWdzKTsKKyAgICBlbGVtZW50LnNldFVzZXJB
Y3Rpb25FbGVtZW50KHRydWUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9u
RWxlbWVudFNldC5oCmluZGV4IGNlNzY0YzNlYjgzNzE4NzdiZmU4YTFiODkxNThhNjhiNzI1Zjgz
ZWYuLmE0YzU5YjkyMGZkOWQxZmRhNDUxMGYyMThkYzkzODM4ZDIxYmVlMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTI3LDggKzI3LDggQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTM2LDE2ICszNiwxNyBAQCBjbGFzcyBFbGVtZW50OwogCiBjbGFzcyBVc2VyQWN0aW9uRWxl
bWVudFNldCB7CiBwdWJsaWM6Ci0gICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxl
bWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNGb2N1c2VkRmxhZyk7IH0KLSAgICBi
b29sIGlzQWN0aXZlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVs
ZW1lbnQsIElzQWN0aXZlRmxhZyk7IH0KLSAgICBib29sIGlzSW5BY3RpdmVDaGFpbihjb25zdCBF
bGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJbkFjdGl2ZUNoYWlu
RmxhZyk7IH0KLSAgICBib29sIGlzSG92ZXJlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJl
dHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0hvdmVyZWRGbGFnKTsgfQotICAgIHZvaWQgc2V0Rm9j
dXNlZChFbGVtZW50KiBlbGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBl
bmFibGUsIElzRm9jdXNlZEZsYWcpOyB9Ci0gICAgdm9pZCBzZXRBY3RpdmUoRWxlbWVudCogZWxl
bWVudCwgYm9vbCBlbmFibGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0FjdGl2ZUZs
YWcpOyB9Ci0gICAgdm9pZCBzZXRJbkFjdGl2ZUNoYWluKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wg
ZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJsZSwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9
Ci0gICAgdm9pZCBzZXRIb3ZlcmVkKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNl
dEZsYWdzKGVsZW1lbnQsIGVuYWJsZSwgSXNIb3ZlcmVkRmxhZyk7IH0KKyAgICBib29sIGlzRm9j
dXNlZChjb25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVt
ZW50LCBJc0ZvY3VzZWRGbGFnKTsgfQorICAgIGJvb2wgaXNBY3RpdmUoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCkgY29uc3QgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNBY3RpdmVGbGFnKTsg
fQorICAgIGJvb2wgaXNJbkFjdGl2ZUNoYWluKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0
IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIEluQWN0aXZlQ2hhaW5GbGFnKTsgfQorICAgIGJv
b2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0Zs
YWdzKGVsZW1lbnQsIElzSG92ZXJlZEZsYWcpOyB9CiAKLSAgICB2b2lkIGRpZERldGFjaChFbGVt
ZW50Kik7CisgICAgdm9pZCBzZXRGb2N1c2VkKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxl
KSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJsZSwgSXNGb2N1c2VkRmxhZyk7IH0KKyAgICB2b2lk
IHNldEFjdGl2ZShFbGVtZW50JiBlbGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVt
ZW50LCBlbmFibGUsIElzQWN0aXZlRmxhZyk7IH0KKyAgICB2b2lkIHNldEluQWN0aXZlQ2hhaW4o
RWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxl
LCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0KKyAgICB2b2lkIHNldEhvdmVyZWQoRWxlbWVudCYgZWxl
bWVudCwgYm9vbCBlbmFibGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0hvdmVyZWRG
bGFnKTsgfQorCisgICAgdm9pZCBkaWREZXRhY2goRWxlbWVudCYpOwogICAgIHZvaWQgZG9jdW1l
bnREaWRSZW1vdmVMYXN0UmVmKCk7CiAKIHByaXZhdGU6CkBAIC01NiwxMyArNTcsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgSXNGb2N1c2VkRmxhZyAgICAgPSAxIDw8IDMKICAgICB9OwogCi0gICAg
dm9pZCBzZXRGbGFncyhFbGVtZW50KiBlbGVtZW50LCBib29sIGVuYWJsZSwgdW5zaWduZWQgZmxh
Z3MpIHsgZW5hYmxlID8gc2V0RmxhZ3MoZWxlbWVudCwgZmxhZ3MpIDogY2xlYXJGbGFncyhlbGVt
ZW50LCBmbGFncyk7IH0KLSAgICB2b2lkIHNldEZsYWdzKEVsZW1lbnQqLCB1bnNpZ25lZCk7Ci0g
ICAgdm9pZCBjbGVhckZsYWdzKEVsZW1lbnQqLCB1bnNpZ25lZCk7Ci0gICAgYm9vbCBoYXNGbGFn
cyhjb25zdCBFbGVtZW50KiwgdW5zaWduZWQgZmxhZ3MpIGNvbnN0OworICAgIHZvaWQgc2V0Rmxh
Z3MoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUsIHVuc2lnbmVkIGZsYWdzKSB7IGVuYWJs
ZSA/IHNldEZsYWdzKGVsZW1lbnQsIGZsYWdzKSA6IGNsZWFyRmxhZ3MoZWxlbWVudCwgZmxhZ3Mp
OyB9CisgICAgdm9pZCBzZXRGbGFncyhFbGVtZW50JiwgdW5zaWduZWQpOworICAgIHZvaWQgY2xl
YXJGbGFncyhFbGVtZW50JiwgdW5zaWduZWQpOworICAgIGJvb2wgaGFzRmxhZ3MoY29uc3QgRWxl
bWVudCYsIHVuc2lnbmVkIGZsYWdzKSBjb25zdDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8RWxlbWVudD4sIHVuc2lnbmVkPiBFbGVtZW50RmxhZ01hcDsKLSAgICBFbGVtZW50RmxhZ01h
cCBtX2VsZW1lbnRzOworICAgIC8vIEZJWE1FOiBVbmNsZWFyIHdoeSB0aGlzIG5lZWRzIHRvIGJl
IGEgUmVmUHRyLiBTaG91bGQgY2hhbmdlIHRvIGEgY29uc3QgRWxlbWVudCouCisgICAgSGFzaE1h
cDxSZWZQdHI8RWxlbWVudD4sIHVuc2lnbmVkPiBtX2VsZW1lbnRzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZDE0NzI0Mjc3MjM3NDY4ZDRmNjFmZmUzM2M3NWZl
NDZhODE5MjNkYy4uM2I4ZjlkNzQzNjU4ZGNhNWI5YTRmNjVlOGY5ZGNkNDgxOTQyZGUyNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgIC8v
IHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3Jh
cGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAogICAgIC8vIHRvIHN0
b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0
byBmaXJzdCBjcmVhdGUgYSByYW5nZQogICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0
IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRp
dmUuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFz
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24t
PnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29u
dGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKIAogICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwogICAg
IGlmICghc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgp
KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlv
biBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBs
YWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LmdldCgpKTsKKyAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNS
YW5nZS5wdHIoKSk7CiAKICAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIg
b2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5k
LgogICAgIGF1dG8gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS5jbG9uZVJhbmdlKCk7CkBA
IC0yMzQsNyArMjM0LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFs
dGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6IG1h
cmtlclR5cGVzVG9BZGQpCi0gICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCksIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0
aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKKyAgICAgICAgbWFya2Vycy5h
ZGRNYXJrZXIoKnJlcGxhY2VtZW50UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9u
Rm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsK
IH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9u
QmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgpCkBAIC0yNjYsMTIgKzI2NiwxMiBAQCB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlv
bihjb25zdCBWaXNpYmxlUwogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwogICAg
IG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpk
ZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVj
dGlvblRyaWdnZXJlZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFy
dCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBhdXRvIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCkpOwogCi0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdl
LmdldCgpLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAg
ICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKLSAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRv
Y3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMu
YWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCkBA
IC0zNTksNyArMzU5LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3UKICAgICAgICAgaWYgKHJl
c3VsdC5sZW5ndGgoKSkKICAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgq
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3VsdCwgbV90eXBlLCBtYXJrZXJUeXBlc0ZvckF1dG9j
b3JyZWN0aW9uKCkpOwogICAgICAgICBlbHNlIGlmICghbV9pc0Rpc21pc3NlZEJ5RWRpdGluZykK
LSAgICAgICAgICAgIHJhbmdlV2l0aEFsdGVybmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRN
YXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9vcmlnaW5hbFRleHQpOworICAgICAgICAgICAg
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVj
dGVkQ29ycmVjdGlvbiwgbV9vcmlnaW5hbFRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRU
eXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKQEAgLTQxOSw3ICs0MTksNyBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbgogICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpOwotICAgIGZvciAoYXV0byogbWFya2VyIDogbm9kZS0+ZG9jdW1lbnQo
KS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKSkgeworICAgIGZvciAoYXV0byogbWFya2VyIDog
bm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSkpIHsKICAgICAgICAg
QVNTRVJUKG1hcmtlcik7CiAgICAgICAgIGlmIChyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCgq
bWFya2VyLCBwb3NpdGlvbikpCiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MSwxMiArNDQxLDEw
IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRp
dGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uCiB7CiAgICAgaWYgKCFjb21tYW5kLT53YXNDcmVh
dGVMaW5rQ29tbWFuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsK
LSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFy
a2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7
Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9m
cmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNv
bW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOworICAgIGF1dG8mIG1hcmtlcnMgPSBt
X2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiBBbHRl
cm5hdGl2ZVRleHRDbGllbnQqIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZl
VGV4dENsaWVudCgpCkBAIC00NzQsOCArNDcyLDggQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG8K
IAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUmFuZ2UmIGNo
YW5nZWRSYW5nZSkKIHsKLSAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCZjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxs
eU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5k
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9uKFJhbmdlJiByZXBsYWNlZFJhbmdl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQpAQCAtNDgzLDkgKzQ4MSw5IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2Vk
UmFuZ2UsIGNvbnN0IFN0cmluCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJz
ID0gcmVwbGFjZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwog
ICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigp
KSB7CiAgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVu
dCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkKQotICAgICAg
ICAgICAgbWFya2Vycy5hZGRNYXJrZXIoJnJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxh
Y2VkU3RyaW5nKTsKKyAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VkUmFuZ2Us
IG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWFya2Vycy5hZGRNYXJrZXIoJnJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUpOworICAgICAgICAg
ICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CiAgICAgfQog
fQogCkBAIC01MDUsNyArNTAzLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpy
ZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbigKICAgICAgICAg
ICAgIGNsaWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJl
c3BvbnNlOjpFZGl0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7CiAgICAgfQogCi0gICAgbWFy
a2Vycy5yZW1vdmVNYXJrZXJzKCZyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1
dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVj
dGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogfQogCiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQpAQCAt
NTI0LDE1ICs1MjIsMTUgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJl
Y2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5kT2ZT
ZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRP
ZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFy
YWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRp
b24sIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlLnB0cigpKTsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAh
ZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFd
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5k
aWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCiAg
ICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhlIHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwg
d29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9uLCB3ZQogICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0
IGl0IGFnYWluLgotICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmFkZE1hcmtlcihw
cmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRv
Y29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24p
OworICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9v
cmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2Vk
QnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdp
dGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCkBAIC01NzMs
MjEgKzU3MSwxOSBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01h
cmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgIGlmICghc2hvdWxkU3Rh
cnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29yZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQ
b3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNl
dCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwotICAgIGlmICghd29yZFJhbmdlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdv
cmRSYW5nZS5nZXQoKSk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2Zy
YW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIu
ZW5kT2Zmc2V0KCkpOworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFu
Z2UucHRyKCkpOwogICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBtX29yaWdpbmFsVGV4dCA9IGN1cnJlbnRXb3JkOwogICAgIHN3aXRjaCAo
bWFya2VyLnR5cGUoKSkgewogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgotICAg
ICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOworICAgICAgICBtX3Jhbmdl
V2l0aEFsdGVybmF0aXZlID0gV1RGTW92ZSh3b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMg
PSBlbXB0eVN0cmluZygpOwogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0
ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnMpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudDoKLSAgICAgICAgbV9yYW5nZVdpdGhB
bHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsKKyAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9
IFdURk1vdmUod29yZFJhbmdlKTsKICAgICAgICAgbV9kZXRhaWxzID0gbWFya2VyLmRlc2NyaXB0
aW9uKCk7CiAgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRl
eHRUeXBlUmV2ZXJzaW9uKTsKICAgICAgICAgYnJlYWs7CkBAIC01OTcsNyArNTkzLDcgQEAgYm9v
bCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChj
b25zdCBEb2N1bWVudE1hcmtlciYKICAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9IFdURjo6Z2V0
PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAg
aWYgKGN1cnJlbnRXb3JkICE9IG1hcmtlckRhdGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdl
OworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGTW92ZSh3b3JkUmFuZ2UpOwog
ICAgICAgICBtX2RldGFpbHMgPSBtYXJrZXJEYXRhLmNvbnRleHQ7CiAgICAgICAgIHN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCmluZGV4IGQ2ZmQ3M2MyM2FjYjMxNzM1ZDhjNmQzYWY1NmEzYWI3ZmI4MTkyNjgu
LjFlMjM1ZjZiNGRjNjNmZmZkMjVjYjM3ZTZkYWNhNDY4M2Y1YWEzYmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC03NjgsMTMgKzc2
OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNl
cnZpbmdNYXJrZXJzKFRleHQmIG5vZGUsIHVuc2lnbgogICAgIERvY3VtZW50TWFya2VyQ29udHJv
bGxlciYgbWFya2VyQ29udHJvbGxlciA9IGRvY3VtZW50KCkubWFya2VycygpOwogICAgIGF1dG8g
bWFya2VycyA9IGNvcHlNYXJrZXJzKG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgY291
bnQpLCBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSk7CiAgICAgcmVwbGFjZVRleHRJbk5v
ZGUobm9kZSwgb2Zmc2V0LCBjb3VudCwgcmVwbGFjZW1lbnRUZXh0KTsKLSAgICBSZWZQdHI8UmFu
Z2U+IG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAm
bm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKKyAgICBhdXRvIG5ld1Jh
bmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zm
c2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1h
cmtlciA6IG1hcmtlcnMpCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBtYXJrZXJDb250cm9s
bGVyLmFkZE1hcmtlcihuZXdSYW5nZS5nZXQoKSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2Ny
aXB0aW9uKCksIG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOworICAg
ICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwg
bWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1ldGFk
YXRhKCkpOwogI2Vsc2UKLSAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFu
Z2UuZ2V0KCksIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKLSNlbmRpZiAv
LyBQTEFURk9STShJT1MpCisgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1Jh
bmdlLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRpb24oKSk7CisjZW5kaWYKIH0KIAog
UG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0YXRpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9u
Q29tbWFuZC5jcHAKaW5kZXggMjgyYmRjOWUzMTViNzJjMjVhZDViZTgyYzZiZjA3MTRkNWMxN2Fi
OS4uNzkwNjY1ZmQ2NzJkZmI0ZDZlMjE2ODExMmM1NzRlMWU0YTE3YzNmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCkBAIC02MSw5ICs2MSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGljdGF0aW9uTWFya2VyU3VwcGxp
ZXIoYWx0ZXJuYXRpdmVzKSk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9k
ZShUZXh0KiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmlu
ZyYgdGV4dFRvQmVJbnNlcnRlZCkgb3ZlcnJpZGUKKyAgICB2b2lkIGFkZE1hcmtlcnNUb1RleHRO
b2RlKFRleHQmIHRleHROb2RlLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3Ry
aW5nJiB0ZXh0VG9CZUluc2VydGVkKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgYXV0byYgbWFy
a2VyQ29udHJvbGxlciA9IHRleHROb2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICAgICAg
YXV0byYgbWFya2VyQ29udHJvbGxlciA9IHRleHROb2RlLmRvY3VtZW50KCkubWFya2VycygpOwog
ICAgICAgICBmb3IgKGF1dG8mIGFsdGVybmF0aXZlIDogbV9hbHRlcm5hdGl2ZXMpIHsKICAgICAg
ICAgICAgIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhIGRhdGEgeyBhbHRlcm5hdGl2ZS5k
aWN0YXRpb25Db250ZXh0LCB0ZXh0VG9CZUluc2VydGVkLnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5y
YW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCkgfTsKICAgICAgICAgICAgIG1hcmtl
ckNvbnRyb2xsZXIuYWRkTWFya2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0
YXJ0ICsgb2Zmc2V0T2ZJbnNlcnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBXVEZNb3ZlKGRhdGEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGU3OWI2NDZlMjI4OTcyMDA1ZTU4ZmU1MGZiYzI5NTMy
MDNjYjdhZTMuLmEyZDg1MzgyZWE4OGYzNTAxM2MxYzk2MzI0YjVkM2VlNjlhODdjYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTE2NSw3ICsxMTY1LDcgQEAgYm9vbCBhcmVJ
ZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlJiBmaXJzdCwgY29uc3QgTm9kZSYgc2Vjb25kKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgZmlyc3RFbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oZmlyc3QpOwogICAgIGF1dG8mIHNlY29uZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50PihzZWNvbmQpOwotICAgIHJldHVybiBmaXJzdEVsZW1lbnQuaGFzVGFnTmFtZShzZWNvbmRF
bGVtZW50LnRhZ1FOYW1lKCkpICYmIGZpcnN0RWxlbWVudC5oYXNFcXVpdmFsZW50QXR0cmlidXRl
cygmc2Vjb25kRWxlbWVudCk7CisgICAgcmV0dXJuIGZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNl
Y29uZEVsZW1lbnQudGFnUU5hbWUoKSkgJiYgZmlyc3RFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRy
aWJ1dGVzKHNlY29uZEVsZW1lbnQpOwogfQogCiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2Nr
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IDY0MjUxY2YxZGM3ZjY5ZjVjYWJhY2E3MDlkZWM1YzdlODc2NTk1ZTAuLjhhYjBhMWUwY2VmZWJm
NTNiMWQwMTU2YjRiMDY5YTliZTI1NWYxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTE5MTgsNyArMTkxOCw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAg
ICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwog
CiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NFUlQodGV4dC5sZW5n
dGgoKSk7CkBAIC0xOTM0LDcgKzE5MzQsNyBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygp
CiAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAog
ICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAgQVNTRVJUKHRleHQubGVuZ3Ro
KCkpOwpAQCAtMjEwMCwxMiArMjEwMCwxMiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIEFTU0VSVChncmFt
bWFyRGV0YWlsLmxvY2F0aW9uICE9IC0xICYmIGdyYW1tYXJEZXRhaWwubGVuZ3RoID4gMCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBGSVhNRSA0ODU5MTkwOiBUaGlzIGdldHMgY29uZnVzZWQgd2l0
aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0IHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGgKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpn
cmFtbWFyU2VhcmNoUmFuZ2UsIGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxv
Y2F0aW9uLCBncmFtbWFyRGV0YWlsLmxlbmd0aCk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKmJhZEdyYW1tYXJSYW5nZSwgU0VMX0RF
RkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIGdyYW1tYXJQaHJhc2VPZmZzZXQg
KyBncmFtbWFyRGV0YWlsLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLmxlbmd0aCk7CisgICAgICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3Jh
bW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFy
RGV0YWlsKTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1t
YXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNl
ckRlc2NyaXB0aW9uKTsKKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJh
ZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNl
ckRlc2NyaXB0aW9uKTsKICAgICB9IGVsc2UKICNlbmRpZgogICAgIGlmICghbWlzc3BlbGxlZFdv
cmQuaXNFbXB0eSgpKSB7CkBAIC0yMTE3LDcgKzIxMTcsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5j
ZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBj
bGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29y
ZCk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jh
bmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKICAgICB9CiB9CiAKQEAgLTIyNTAsMTMgKzIyNTAsMTAgQEAgYm9vbCBFZGl0b3I6
OnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKQogICAgIHJldHVybiBjbGllbnQoKS0+c3BlbGxpbmdV
SUlzU2hvd2luZygpOwogfQogCi12b2lkIEVkaXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKK3ZvaWQgRWRp
dG9yOjpjbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgbW92aW5nU2VsZWN0aW9uKQogewotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IG1vdmluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJh
bmdlKSB7Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6R3JhbW1hcik7Ci0gICAgfQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBt
b3ZpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgeyBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyIH0pOwogfQogCiB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92
aW5nU2VsZWN0aW9uKQpAQCAtMjU3OCwxNCArMjU3NSwxNCBAQCB2b2lkIEVkaXRvcjo6bWFya0Fu
ZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3Rv
cjxUZQogICAgICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJh
bmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwogICAgICAgICAgICAgaWYgKCFtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxs
aW5nUmFuZ2UpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWlzc3Bl
bGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIobWlzc3BlbGxpbmdSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBs
YWNlbWVudCk7CisgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91
bGRNYXJrR3JhbW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYm
IHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5n
dGgpKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2Nh
dGlvbiA+PSAwKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0c1tpXS5k
ZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC5sZW5ndGggPiAwICYmIGRl
dGFpbC5sb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNr
aW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5s
ZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcGFy
YWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwu
bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UucHRy
KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpHcmFtbWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0RW5kTG9jYXRpb24gPD0gc3Bl
bGxpbmdSYW5nZUVuZE9mZnNldCAmJiByZXN1bHRFbmRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hl
Y2tpbmdTdGFydCgpCkBAIC0yNjk5LDcgKzI2OTYsNyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uSW5z
ZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3Jh
cGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgY2hhbmdl
ZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihj
aGFuZ2VkUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkp
OworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0
cmluZygpKTsKICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPm1hcmtSZXZlcnNlZChj
aGFuZ2VkUmFuZ2UpOwogI2Vsc2UKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI4MTQs
NyArMjgxMSw3IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5
RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgICAgIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyLAogI2VuZGlmCiAgICAgfTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5wdHIoKSwgbWFya2VyVHlwZXNUb1JlbW92ZSwgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Cisg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UsIG1hcmtlclR5
cGVzVG9SZW1vdmUsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwogICAgIGRvY3VtZW50KCkubWFya2VycygpLmNsZWFyRGVzY3JpcHRp
b25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCk7CiB9CiAKQEAgLTMyOTksNyArMzI5Niw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6
Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBG
aW5kT3B0CiAKICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKICAgICBkbyB7Ci0gICAgICAg
IFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRh
cmdldCwgb3B0aW9ucyAmIH5CYWNrd2FyZHMpKTsKKyAgICAgICAgYXV0byByZXN1bHRSYW5nZShm
aW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zICYgfkJhY2t3YXJkcykp
OwogICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzSW5TaGFkb3dUcmVlKCkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzExLDEwICszMzA4LDEwIEBAIHVuc2lnbmVkIEVkaXRv
cjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdl
LCBGaW5kT3B0CiAKICAgICAgICAgKyttYXRjaENvdW50OwogICAgICAgICBpZiAobWF0Y2hlcykK
LSAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVuZChyZXN1bHRSYW5nZSk7CisgICAgICAgICAgICBt
YXRjaGVzLT5hcHBlbmQocmVzdWx0UmFuZ2UucHRyKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KG1hcmtNYXRjaGVzKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KHJlc3VsdFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlRleHRNYXRjaCk7CiAKICAgICAgICAgLy8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0
aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQuCiAgICAgICAg
IGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKQEAgLTM0NjEsMTAgKzM0NTgs
MTAgQEAgdm9pZCBFZGl0b3I6OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoUmFuZ2UmIHJh
bmdlLCBjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcKICAgICAgICAgdW5zaWduZWQgc3VicmFuZ2VP
ZmZzZXQgPSBzY2FubmVyUG9zaXRpb24gKyByZWxhdGl2ZVN0YXJ0UG9zaXRpb247CiAgICAgICAg
IHVuc2lnbmVkIHN1YnJhbmdlTGVuZ3RoID0gcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZl
U3RhcnRQb3NpdGlvbiArIDE7CiAKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzdWJyYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2UsIHN1YnJhbmdlT2Zmc2V0LCBzdWJyYW5nZUxlbmd0
aCk7CisgICAgICAgIGF1dG8gc3VicmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHJhbmdl
LCBzdWJyYW5nZU9mZnNldCwgc3VicmFuZ2VMZW5ndGgpOwogCi0gICAgICAgIG1hcmtlZFJhbmdl
cy5hcHBlbmQoc3VicmFuZ2UpOwotICAgICAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihzdWJyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51
bWJlcik7CisgICAgICAgIG1hcmtlZFJhbmdlcy5hcHBlbmQoc3VicmFuZ2UucHRyKCkpOworICAg
ICAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihzdWJyYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7CiAKICAgICAgICAgc2Nhbm5lclBvc2l0
aW9uICs9IHJlbGF0aXZlRW5kUG9zaXRpb24gKyAxOwogICAgIH0KQEAgLTM1MjksMTEgKzM1MjYs
MTEgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAKICAgICAgICAg
aWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0Fm
dGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykpIHsKICAgICAgICAg
ICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0
ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hh
bmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSkgewogICAgICAgICAgICAgaWYg
KFJlZlB0cjxSYW5nZT4gc2VudGVuY2VSYW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsK
KyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZW50
ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTM1NzUsNyArMzU3Miw3IEBAIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtl
ckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlLCBpCiAKICAgICB1bnNp
Z25lZCBpbnQgc3RhcnRPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20pOwog
ICAgIHVuc2lnbmVkIGludCBlbmRPZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZy
b20gKyBsZW5ndGgpOwotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vy
cyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSk7CisgICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFy
a2Vyc0Zvcigqbm9kZSk7CiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAgICAg
ICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0
IDw9IG1hcmtlci0+ZW5kT2Zmc2V0KCkgJiYgbWFya2VyLT50eXBlKCkgPT0gbWFya2VyVHlwZSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzY5Myw3ICszNjkwLDcgQEAgdm9pZCBFZGl0
b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENh
bmRpZGF0ZSkKIAogICAgIFJlZlB0cjxSYW5nZT4gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJh
bmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3RoKCks
IERpcmVjdGlvbkJhY2t3YXJkKTsKICAgICBpZiAoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSkKLSAg
ICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVu
dCk7CisgICAgICAgIGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCppbnNlcnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2Vt
ZW50KTsKIAogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0gZmFsc2U7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGVmZDg2
NTA5YTE1ZTZjNThkYmM5YTcwZjE5OTBiZjZmNTkwMmZkYzIuLmZiY2QyZmZmYWVlZWQ0NTI2OTAx
MzU3Y2E2MzU4YzIyYTFjYTQ0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
VGV4dENvbW1hbmQuY3BwCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSgqdGV4dE5vZGUsIG9mZnNl
dCwgbV90ZXh0KTsKICAgICAgICAgZW5kUG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQo
KSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0aCgpKTsKICAgICAgICAgaWYgKG1fbWFya2VyU3VwcGxp
ZXIpCi0gICAgICAgICAgICBtX21hcmtlclN1cHBsaWVyLT5hZGRNYXJrZXJzVG9UZXh0Tm9kZSh0
ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0LCBtX3RleHQpOworICAgICAgICAgICAgbV9tYXJrZXJTdXBw
bGllci0+YWRkTWFya2Vyc1RvVGV4dE5vZGUoKnRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAK
ICAgICAgICAgaWYgKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxp
bmdXaGl0ZXNwYWNlcykgewogICAgICAgICAgICAgLy8gVGhlIGluc2VydGlvbiBtYXkgcmVxdWly
ZSBhZGp1c3RpbmcgYWRqYWNlbnQgd2hpdGVzcGFjZSwgaWYgaXQgaXMgcHJlc2VudC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuaAppbmRleCA5YmM4YjM5OTU2N2Vk
NzUyYWFkMTk0YjQ2ZDg2MTMyMmQyNmQ3NjEwLi4xMmVhOWQ0NDYwNjUxOTc2NmFmZGMwNTcyZmI1
N2YzZGE1NjI0M2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRl
eHRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIFRleHQ7CiBjbGFzcyBUZXh0SW5zZXJ0aW9uTWFy
a2VyU3VwcGxpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxp
ZXI+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkTWFya2Vyc1RvVGV4dE5vZGUoVGV4dCosIHVuc2ln
bmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJpbmcmIHRleHRJbnNlcnRlZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0JiwgdW5zaWduZWQgb2Zm
c2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dEluc2VydGVkKSA9IDA7CiBwcm90ZWN0
ZWQ6CiAgICAgVGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVyKCkgeyB9CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCmluZGV4IGEyOTRiYjMwMzdhNDgxYjc0MDQyZmI3
ZDUxYmQ2MjRmN2U5Zjk4YjIuLmFmYzk0Yzk5ZmU2MjVlNjhlYWUyNTYyNjU2Y2UxZWFiYzdiNzUy
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKQEAgLTIyMyw3ICsy
MjMsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2tTdWNjZWVkKGludCBzZXF1ZW5jZSwg
Y29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdAogICAgICAgICBpZiAocmVxdWVzdERhdGEu
bWFzaygpICYgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpCiAgICAgICAgICAgICBtYXJrZXJUeXBl
cyB8PSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjsKICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKCZtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5
cGVzKTsKKyAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1h
cmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7
CiAgICAgfQogICAgIGRpZENoZWNrKHNlcXVlbmNlLCByZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggOWFkMDkwZjA4
Zjc0NzA5Y2FkMTE3NThhNTc0NjRiOThhZTA0YTBhNS4uOWI3NzYxMDJmOWYxNWFjOTY2ODk5Mzgw
OTdjYjIyZWVhMmZkMGJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxp
dFRleHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29t
bWFuZDo6ZG9BcHBseSgpCiAKICAgICBtX3RleHQxID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCks
IFdURk1vdmUocHJlZml4VGV4dCkpOwogICAgIEFTU0VSVChtX3RleHQxKTsKLSAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQyLnB0cigpLCAwLCBtX29mZnNldCwgbV90
ZXh0MS5nZXQoKSwgMCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90
ZXh0MiwgMCwgbV9vZmZzZXQsICptX3RleHQxLCAwKTsKIAogICAgIGluc2VydFRleHQxQW5kVHJp
bVRleHQyKCk7CiB9CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6
OmRvVW5hcHBseSgpCiAKICAgICBtX3RleHQyLT5pbnNlcnREYXRhKDAsIHByZWZpeFRleHQpOwog
Ci0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0MS5nZXQoKSwgMCwg
cHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0Mi5wdHIoKSwgMCk7CisgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuY29weU1hcmtlcnMoKm1fdGV4dDEsIDAsIHByZWZpeFRleHQubGVuZ3RoKCksIG1f
dGV4dDIsIDApOwogICAgIG1fdGV4dDEtPnJlbW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggZjY1NDEwNjRiZmUzODk1Yjkw
MjIwZTRhNTMxYzllZmQxYjJmOTM2ZS4uOGQ5NTgyNDAzNTZkYzc3MmM1YTU3MmFjZDAyNDAwYTM4
ODg5Y2YxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcApAQCAtMjUyLDE3ICsyNTIsMTcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6Zmlu
ZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib28KIAogICAg
ICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4g
MCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDwgdGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xlbmd0
aCA8PSB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0
aCA8PSB0ZXh0TGVuZ3RoKSB7CiAgICAgICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3Nw
ZWxsZWQgd29yZAotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0g
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICBhdXRvIG1p
c3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRD
aHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIAog
ICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5k
IGl0cyBvZmZzZXQuCiAgICAgICAgICAgICBpZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsKICAgICAg
ICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3VycmVudENodW5rT2Zmc2V0ICsg
bWlzc3BlbGxpbmdMb2NhdGlvbjsKICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0g
dGV4dC5zdWJzdHJpbmcobWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpLnRv
U3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlzc3Bl
bGxpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNz
cGVsbGluZ1JhbmdlLnB0cigpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBTdG9y
ZSBtYXJrZXIgZm9yIG1pc3NwZWxsZWQgd29yZC4KLSAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3Nw
ZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgICAg
ICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwog
CiAgICAgICAgICAgICAvLyBCYWlsIG91dCBpZiB3ZSdyZSBtYXJraW5nIG9ubHkgdGhlIGZpcnN0
IG1pc3NwZWxsaW5nLCBhbmQgbm90IGFsbCBpbnN0YW5jZXMuCiAgICAgICAgICAgICBpZiAoIW1h
cmtBbGwpCkBAIC00MjYsOCArNDI2LDggQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZp
cnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKG1hcmtBbGwpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJy
YW5nZShtX3JhbmdlLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRl
dGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3RoKTsKLSAgICAgICAgICAgIGJhZEdyYW1tYXJS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFk
R3JhbW1hclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2Vy
RGVzY3JpcHRpb24pOworICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0
T2Zmc2V0ICsgZGV0YWlsLT5sb2NhdGlvbiwgZGV0YWlsLT5sZW5ndGgpOworICAgICAgICAgICAg
YmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwt
PnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFJlbWVt
YmVyIHRoaXMgZGV0YWlsIG9ubHkgaWYgaXQncyBlYXJsaWVyIHRoYW4gb3VyIGN1cnJlbnQgY2Fu
ZGlkYXRlICh0aGUgZGV0YWlscyBhcmVuJ3QgaW4gYSBndWFyYW50ZWVkIG9yZGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRl
eCBjMTkzMmRlZTFkYTRhOGQyYWFiZTI2NjIwMWZmMDA0MTE5NDYyNmU5Li5lZTkzOTlhNzZkMjU4
NWY4NTcxZTkzMGJlYjFlZDNkMWYxYmQwM2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lk
IERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICBpbnB1dFRleHQoZmlyc3RJ
bnRlcnByZXRhdGlvbiwgdHJ1ZSk7CiAKICAgICAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXpl
KCkgPiAxKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihlbmRpbmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBpbnRlcnByZXRhdGlvbnMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcigqZW5kaW5n
U2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgaW50ZXJwcmV0YXRpb25zKTsKIAogICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24o
KS52aXNpYmxlRW5kKCkpKTsKICAgICB9CkBAIC03MSw3ICs3MSw4IEBAIHZvaWQgRGljdGF0aW9u
Q29tbWFuZElPUzo6ZG9BcHBseSgpCiAKICAgICBpZiAoc3RhcnRJbmRleCA+PSAwKSB7CiAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCksIHN0YXJ0SW5kZXgs
IGVuZEluZGV4LCB0cnVlKTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0
aW9uUmVzdWx0TWFya2VyKHJlc3VsdFJhbmdlLmdldCgpLCBtX21ldGFkYXRhKTsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdFJhbmdlKTsgLy8gRklYTUU6IFdoYXQgZ3VhcmFudGVlcyB0aGlzPworICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3Vs
dFJhbmdlLCBtX21ldGFkYXRhKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCmluZGV4IDM0YmYyNzk3ZDE0M2QxOTM1NzdjMmQ4ZTU5NmJjMjFjMmY2MmE2NWMu
LjBlOGQ5NjI5OTQyZDU3OWUzNDY4YzBmODlhZjQ4NWJjMTY4ZDg0ZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IEZpbGVSZWFkZXI6OnJlYWRJbnRlcm5hbChCbG9iJiBibG9iLCBGaWxlUmVhZGVyTG9hZGVy
OjpSZWFkVHlwCiAgICAgaWYgKG1fc3RhdGUgPT0gTE9BRElORykKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgIG1fYmxvYiA9ICZi
bG9iOwogICAgIG1fcmVhZFR5cGUgPSB0eXBlOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgRmls
ZVJlYWRlcjo6YWJvcnQoKQogICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlbmRF
dmVudCk7CiAKICAgICAgICAgLy8gQWxsIHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3
ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAg
ICAgfSk7CiB9CiAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZpbmlz
aExvYWRpbmcoKQogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKICAg
ICAKICAgICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUs
IG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4KLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmlsZVJlYWRl
cjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgRmlsZVJl
YWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCku
bG9hZGVuZEV2ZW50KTsKICAgICAKICAgICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUgZmly
ZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4KLSAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9
CiAKIHZvaWQgRmlsZVJlYWRlcjo6ZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKaW5kZXggODVkYjQzODNl
ZmZhNjFkNDExMTk2OGQ3MDY1MjRiY2YxNzgyNmY4NC4uODE0ZTkxNmY5YmZmMTFkNGQ2ZjVjMjBk
MzY4ODRlOTUxNDliZDE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBw
bGV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcmFt
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAKaW5kZXggYzNmNDk4NDUwZmZhN2Y4ZTE3
MDZiZmMwODhlNTBiM2ZmOWU5ODZhNS4uNDg0YmNiNzZjMWUwMDEyMDU1Yjc4NzQ4Y2MyOTVlNTY2
NTkyNDc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcApA
QCAtMTA0LDcgKzEwNCw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MRGV0YWlsc0Vs
ZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmCiAgICAgcmV0dXJuIGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0K
IAotdm9pZCBIVE1MRGV0YWlsc0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hh
ZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgYXV0byBzdW1tYXJ5U2xvdCA9IEhU
TUxTbG90RWxlbWVudDo6Y3JlYXRlKHNsb3RUYWcsIGRvY3VtZW50KCkpOwogICAgIHN1bW1hcnlT
bG90LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG5hbWVBdHRyLCBzdW1tYXJ5
U2xvdE5hbWUoKSk7CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBIVE1MRGV0YWlsc0VsZW1lbnQ6
OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKICAgICBtX2RlZmF1
bHRTdW1tYXJ5ID0gZGVmYXVsdFN1bW1hcnkucHRyKCk7CiAKICAgICBzdW1tYXJ5U2xvdC0+YXBw
ZW5kQ2hpbGQoZGVmYXVsdFN1bW1hcnkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKHN1bW1hcnlT
bG90KTsKKyAgICByb290LmFwcGVuZENoaWxkKHN1bW1hcnlTbG90KTsKIAogICAgIG1fZGVmYXVs
dFNsb3QgPSBIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgpKTsKICAg
ICBBU1NFUlQoIW1faXNPcGVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERldGFpbHNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVu
dC5oCmluZGV4IGYxYzQ2ZmYzNWQ3NjYyNGFmZWUzZWNlYjY0MjA0MjM2MmYyZDNiZjAuLmU0ODM2
NTcxNjAzODQ2ODAyZTg3YTJjMTc4ZTk3N2IwMWQzYThkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRGV0YWlsc0VsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgZmluYWw7CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAK
LSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOwor
ICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAg
ICAgYm9vbCBoYXNDdXN0b21Gb2N1c0xvZ2ljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgYm9vbCBtX2lzT3BlbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5jcHAKaW5kZXggY2JkZmRkM2VmY2FhZGFmOGZiZjQwMGI2YzI1NDgwYTQzYWVkMzIwMy4u
ODFlZjE3ZWZiMTRjOWRmZmZiYjg4OWRhNTllOTIzOTdlZTU4N2E0NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERvY3VtZW50LmNwcApAQCAtODgsNiArODgsMTYgQEAgSFRNTERvY3VtZW50OjpIVE1M
RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgRG9jdW1lbnRDbGFzc0ZsYWdz
IGRvY3UKICAgICBjbGVhclhNTFZlcnNpb24oKTsKIH0KIAorUmVmPEhUTUxEb2N1bWVudD4gSFRN
TERvY3VtZW50OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3VtZW50
Q2xhc3MpKTsKK30KKworUmVmPEhUTUxEb2N1bWVudD4gSFRNTERvY3VtZW50OjpjcmVhdGVTeW50
aGVzaXplZERvY3VtZW50KEZyYW1lJiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KCZmcmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRD
bGFzcywgU3ludGhlc2l6ZWQpKTsKK30KKwogSFRNTERvY3VtZW50Ojp+SFRNTERvY3VtZW50KCkK
IHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCmluZGV4IDIzZGU0ZGMxYzY4NWEyOGEy
ZjQwZThhY2Q1Y2YwYTZkOGZjMjdjNmYuLjFjZDVjMTE1NGRhOGQ2NTZkYTgyNWQyNzEwMDBmMjdj
ZmJiODYwNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaApAQCAtMjgsMTYgKzI4LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRG9jdW1lbnQgOiBwdWJsaWMgRG9j
dW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50PiBjcmVhdGUoRnJh
bWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEhUTUxEb2N1bWVudChmcmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcykpOwotICAg
IH0KLQotICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50PiBjcmVhdGVTeW50aGVzaXplZERvY3Vt
ZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3VtZW50Q2xhc3Ms
IFN5bnRoZXNpemVkKSk7Ci0gICAgfQotCisgICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNy
ZWF0ZShGcmFtZSosIGNvbnN0IFVSTCYpOworICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50PiBj
cmVhdGVTeW50aGVzaXplZERvY3VtZW50KEZyYW1lJiwgY29uc3QgVVJMJik7CiAgICAgdmlydHVh
bCB+SFRNTERvY3VtZW50KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgd2lkdGgoKTsKQEAg
LTY0LDcgKzU2LDcgQEAgcHJvdGVjdGVkOgogICAgIEhUTUxEb2N1bWVudChGcmFtZSosIGNvbnN0
IFVSTCYsIERvY3VtZW50Q2xhc3NGbGFncyA9IDAsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdz
ID0gMCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgZmluYWw7CiAgICAgUmVmPERvY3VtZW50UGFy
c2VyPiBjcmVhdGVQYXJzZXIoKSBvdmVycmlkZTsKICAgICBSZWY8RG9jdW1lbnQ+IGNsb25lRG9j
dW1lbnRXaXRob3V0Q2hpbGRyZW4oKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGUzMjU2N2EyZWExNGE5NWY2ZTk2OGU4OWQxNGE4NDky
YjA1NGM1YmMuLmUxYWRkMjYwMjM0ZmEzYjAzNDcyNDI5MjE0MjNmY2E5ODQxM2E4OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgSFRN
TEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KCkKIHsKICAgICBkb2N1bWVudCgpLmZvcm1D
b250cm9sbGVyKCkud2lsbERlbGV0ZUZvcm0odGhpcyk7CiAgICAgaWYgKCFzaG91bGRBdXRvY29t
cGxldGUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogCiAgICAgbV9kZWZhdWx0QnV0dG9uID0g
bnVsbHB0cjsKICAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZWRFbGVtZW50IDogbV9hc3NvY2lhdGVk
RWxlbWVudHMpCkBAIC00MzEsOSArNDMxLDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmkKICAg
ICAgICAgbV9hdHRyaWJ1dGVzLnNldEFjY2VwdENoYXJzZXQodmFsdWUpOwogICAgIGVsc2UgaWYg
KG5hbWUgPT0gYXV0b2NvbXBsZXRlQXR0cikgewogICAgICAgICBpZiAoIXNob3VsZEF1dG9jb21w
bGV0ZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
dGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3Bl
bnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQpAQCAtODAyLDggKzgwMiw4IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHZvaWQgSFRN
TEZvcm1FbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQs
IERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsKICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgp
KSB7Ci0gICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3ModGhpcyk7Ci0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgICAgICBuZXdEb2N1bWVu
dC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQog
CiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdE
b2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCmluZGV4
IGQzMDMyMmRjMGM0OGZiODIwNmVhYmI2NmNhZWYyYjhmZTY5N2I2NGYuLjNiYjdlNGE3ZTdiMGQ1
YzI5ZGRhZDYzM2ZlMzI1YzcwYzVmZGIwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElG
cmFtZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlO
YW1lcy5oIgogI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBjMDhjZjMzNzBj
MmEzMWFkMzAzM2I5ZjYxOGZhOTVkMDAyMzA2Y2MxLi42OGIxYjRlZmZiMmEyNDdlZWM5MWFkYTY3
YzQzZjBmYzA2MDE0ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKQEAgLTEzOSw3ICsxMzksNyBAQCBIVE1MSW1hZ2VMb2FkZXImIEhUTUxJbnB1dEVsZW1lbnQ6
OmVuc3VyZUltYWdlTG9hZGVyKCkKICAgICByZXR1cm4gKm1faW1hZ2VMb2FkZXI7CiB9CiAKLXZv
aWQgSFRNTElucHV0RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290
KikKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290JikKIHsKICAgICBtX2lucHV0VHlwZS0+Y3JlYXRlU2hhZG93U3VidHJlZSgpOwogICAg
IHVwZGF0ZUlubmVyVGV4dEVsZW1lbnRFZGl0YWJpbGl0eSgpOwpAQCAtMTQ4LDcgKzE0OCw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dS
b290KikKIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKIHsKICAgICBpZiAo
bmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgp
LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogCiAgICAg
Ly8gTmVlZCB0byByZW1vdmUgZm9ybSBhc3NvY2lhdGlvbiB3aGlsZSB0aGlzIGlzIHN0aWxsIGFu
IEhUTUxJbnB1dEVsZW1lbnQKICAgICAvLyBzbyB0aGF0IHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBj
YWxsZWQgY29ycmVjdGx5LgpAQCAtMTU2LDcgKzE1Niw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5I
VE1MSW5wdXRFbGVtZW50KCkKICAgICAvLyBzZXRGb3JtKDApIG1heSByZWdpc3RlciB0aGlzIHRv
IGEgZG9jdW1lbnQtbGV2ZWwgcmFkaW8gYnV0dG9uIGdyb3VwLgogICAgIC8vIFdlIHNob3VsZCB1
bnJlZ2lzdGVyIGl0IHRvIGF2b2lkIGFjY2Vzc2luZyBhIGRlbGV0ZWQgb2JqZWN0LgogICAgIGlm
IChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS5y
YWRpb0J1dHRvbkdyb3VwcygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQo
KS5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0aGlz
KTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5k
bGVyKQogICAgICAgICBkb2N1bWVudCgpLmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7
CkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKGJv
b2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEIKICAgICBpbnZhbGlk
YXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRv
bnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICBidXR0b25zLT51cGRhdGVDaGVja2Vk
U3RhdGUodGhpcyk7CisgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSgqdGhpcyk7
CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJlcigp
LCBDb250cm9sU3RhdGVzOjpDaGVja2VkU3RhdGUpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7CkBA
IC0xNDI1LDEzICsxNDI1LDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bmVlZHNTdXNwZW5z
aW9uQ2FsbGJhY2soKQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZWdpc3RlckZvclN1c3BlbnNp
b25DYWxsYmFja0lmTmVlZGVkKCkKIHsKICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2so
KSkKLSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dW5yZWdp
c3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCkKIHsKICAgICBpZiAoIW5lZWRzU3Vz
cGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogYm9vbCBIVE1M
SW5wdXRFbGVtZW50Ojppc1JlcXVpcmVkRm9ybUNvbnRyb2woKSBjb25zdApAQCAtMTUzMCwxMSAr
MTUzMCwxMSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERv
Y3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ldwogCiAgICAgLy8gQWx3YXlzIHVucmVn
aXN0ZXIgZm9yIGNhY2hlIGNhbGxiYWNrcyB3aGVuIGxlYXZpbmcgYSBkb2N1bWVudCwgZXZlbiBp
ZiB3ZSB3b3VsZCBvdGhlcndpc2UgbGlrZSB0byBiZSByZWdpc3RlcmVkCiAgICAgaWYgKG5lZWRz
U3VzcGVuc2lvbkNhbGxiYWNrKCkpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgbmV3RG9jdW1lbnQu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIG9s
ZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMp
OworICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcygqdGhpcyk7CiAgICAgfQogICAgIGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIG9s
ZERvY3VtZW50LmZvcm1Db250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0
b24odGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LmZvcm1Db250cm9sbGVyKCkucmFkaW9CdXR0
b25Hcm91cHMoKS5yZW1vdmVCdXR0b24oKnRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAgICAgaWYgKG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAgICAgICAgb2xkRG9jdW1lbnQu
ZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKCp0aGlzKTsKQEAgLTE1NjEsNyArMTU2MSw3IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKICAgICBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAg
ICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkK
LSAgICAgICAgYnV0dG9ucy0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKHRoaXMpOworICAgICAg
ICBidXR0b25zLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKnRoaXMpOwogICAgIG1faW5wdXRU
eXBlLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKIH0KIApAQCAtMTgzOSw3ICsxODM5LDcg
QEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0luUmVxdWlyZWRSYWRpb0J1dHRvbkdyb3VwKCkK
IHsKICAgICBBU1NFUlQoaXNSYWRpb0J1dHRvbigpKTsKICAgICBpZiAoUmFkaW9CdXR0b25Hcm91
cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICByZXR1cm4gYnV0dG9u
cy0+aXNJblJlcXVpcmVkR3JvdXAodGhpcyk7CisgICAgICAgIHJldHVybiBidXR0b25zLT5pc0lu
UmVxdWlyZWRHcm91cCgqdGhpcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODcxLDE0
ICsxODcxLDE0IEBAIFJhZGlvQnV0dG9uR3JvdXBzKiBIVE1MSW5wdXRFbGVtZW50OjpyYWRpb0J1
dHRvbkdyb3VwcygpIGNvbnN0CiAKIGlubGluZSB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFkZFRv
UmFkaW9CdXR0b25Hcm91cCgpCiB7Ci0gICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25z
ID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9ucy0+YWRkQnV0dG9uKHRoaXMp
OworICAgIGlmIChhdXRvKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAg
YnV0dG9ucy0+YWRkQnV0dG9uKCp0aGlzKTsKIH0KIAogaW5saW5lIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6cmVtb3ZlRnJvbVJhZGlvQnV0dG9uR3JvdXAoKQogewotICAgIGlmIChSYWRpb0J1dHRv
bkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMt
PnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICBpZiAoYXV0byogYnV0dG9ucyA9IHJhZGlvQnV0dG9u
R3JvdXBzKCkpCisgICAgICAgIGJ1dHRvbnMtPnJlbW92ZUJ1dHRvbigqdGhpcyk7CiB9CiAKIHVu
c2lnbmVkIEhUTUxJbnB1dEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5oCmluZGV4IGQyNjMyN2ZmODFkYTYzNDk2ZjAzOWQ3M2RjMGE3MDFh
NzY3YjJiZDkuLmI4M2FhZTBiY2RiODlhYzdlNTYxNDNlMmE3MWFiZmY5MDdjMGJkYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0zNDEsNyArMzQxLDcgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICBlbnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmluaXRp
YWxpemVkLCBPbiwgT2ZmIH07CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290JikgZmluYWw7CiAKICAgICB2b2lkIHdpbGxDaGFuZ2VGb3JtKCkgZmluYWw7CiAg
ICAgdm9pZCBkaWRDaGFuZ2VGb3JtKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAppbmRleCA4MWE5MDhjODUyOWRkMzE5NzViYTBhZDZmMDU3Yzg1MTNhYzkw
MGE1Li45NmQwYWIzOTBjNzlkMjU4M2UxOWVlNDNhMjU0YjE2YmViZTU2NTE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTY2MywzMyArNjYzLDMzIEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQogICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7
CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCi0gICAgICAgIGRvY3Vt
ZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQuYWRk
TWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAogI2lmICFQTEFURk9STShJT1MpCi0gICAg
ZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1
bWVudC5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlz
KTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCp0aGlzKTsK
KyAgICBkb2N1bWVudC5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxi
YWNrcygqdGhpcyk7CiAjZW5kaWYKIAotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0
eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvclZp
c2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQogICAgIGlmIChtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzKQotICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFn
ZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgZG9jdW1lbnQucmVnaXN0
ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgZG9j
dW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAg
ZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwog
I2VuZGlmCiAKICAgICBkb2N1bWVudC5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxp
bmVQbGF5YmFja0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQuYWRkQXVk
aW9Qcm9kdWNlcih0aGlzKTsKKyAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsK
ICAgICBhZGRFbGVtZW50VG9Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKQEAgLTcwMiwzMyArNzAyLDMzIEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dW5yZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9t
ZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYg
KG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICBkb2N1bWVudC5yZW1vdmVN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlbW92ZU1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGRvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMp
OworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcygqdGhpcyk7
CisgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0
ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKICAgICBpZiAobV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZENhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9tZWRpYUNvbnRyb2xz
RGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC51
bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAg
ZG9jdW1lbnQudW5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2Vk
Q2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9y
QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
CiAKLSAgICBkb2N1bWVudC5yZW1vdmVBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIGRvY3VtZW50
LnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogICAgIHJlbW92ZUVsZW1lbnRGcm9tRG9jdW1l
bnRNYXAoKnRoaXMsIGRvY3VtZW50KTsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0x
MzE5LDcgKzEzMTksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3Vy
Y2UoKQogICAgICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1
ZTsKLSAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzkwMyw3ICszOTAzLDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjphZGRUZXh0VHJhY2soUmVmPFRleHRUcmFjaz4mJiB0cmFjaykKICAgICBpZiAoIW1f
cmVxdWlyZUNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpIHsKICAgICAgICAgbV9y
ZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyA9IHRydWU7CiAgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAgICAgIGRvY3VtZW50
LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzKCp0aGlzKTsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpCiAg
ICAgICAgICAgICBtX2NhcHRpb25EaXNwbGF5TW9kZSA9IHBhZ2UtPmdyb3VwKCkuY2FwdGlvblBy
ZWZlcmVuY2VzKCkuY2FwdGlvbkRpc3BsYXlNb2RlKCk7CiAgICAgfQpAQCAtNTM1NSw3ICs1MzU1
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVyKERlbGF5ZWRBY3Rp
b25UeXBlIGZsYWdzKQogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KSB7
CiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gZmFsc2U7Ci0gICAgICAg
IGRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBk
b2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgfQogCiAg
ICAgaWYgKG1fcGxheWVyKSB7CkBAIC01NDg5LDcgKzU0ODksNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnJlc3VtZSgpCiAgICAgc2V0U2hvdWxkQnVmZmVyRGF0YSh0cnVlKTsKIAogICAgIGlm
ICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoKnRoaXMp
KQotICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIGVs
c2UKICAgICAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOwogCkBAIC02OTk4LDcgKzY5OTgs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXJKU1Byb3BlcnR5KGNvbnN0
IGNoYXIqIHByb3BlcnR5TmFtZSwgSlNDOjpKUwogICAgIGNvbnRyb2xsZXJPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dChjb250cm9sbGVyT2JqZWN0LCBleGVjLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlTbG90
KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290
KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBERUJVR19MT0coVEhJUyk7CiAK
QEAgLTcwOTcsOSArNzA5Nyw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFDb250
cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJvb2wgZGVwZW5kc09uUGFnCiAgICAgbV9tZWRp
YUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IgPSBkZXBlbmRzT25QYWdlU2NhbGU7CiAK
ICAgICBpZiAobV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAg
IGRvY3VtZW50KCkucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRo
aXMpOworICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZENhbGxiYWNrcygqdGhpcyk7CiAgICAgZWxzZQotICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0
ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1
bWVudCgpLnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlz
KTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0ZXJQ
cmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKaW5kZXggMWIxMDEzMDIzYzM1NWNmYTc4MTgyZjkxMjVhYzBiNjkzYWE0MzAyMC4uOWEzOWM4
NDNjZmIwZjhhYzU5NGZkY2ZjNTFhZjc2ZmJkNzgyYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgKQEAgLTgzMCw3ICs4MzAsNyBAQCBwcml2YXRlOgogICAgIFNsZWVw
VHlwZSBzaG91bGREaXNhYmxlU2xlZXAoKSBjb25zdDsKIAogI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpIG92ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRXb3Js
ZCgpOwogICAgIGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCmluZGV4IDAyMzliMzM1
YzgxZmQ5Zjg5NWZjMDc4YmYwMTkxMjIxZTVhMTM2ZTQuLmE2NzhhMjAwYTg1MzA4MDJhNTEzMjg1
ZDVlNTdjNWUzYTFhYWM1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50
LmNwcApAQCAtMjIzLDcgKzIyMyw3IEBAIFJlbmRlck1ldGVyKiBIVE1MTWV0ZXJFbGVtZW50Ojpy
ZW5kZXJNZXRlcigpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSFRNTE1l
dGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQor
dm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QmIHJvb3QpCiB7CiAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKIApAQCAtMjMxLDEzICsyMzEsMTMg
QEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QqIHJvb3QpCiAKICAgICBhdXRvIHN0eWxlID0gSFRNTFN0eWxlRWxlbWVudDo6Y3JlYXRl
KEhUTUxOYW1lczo6c3R5bGVUYWcsIGRvY3VtZW50KCksIGZhbHNlKTsKICAgICBzdHlsZS0+c2V0
VGV4dENvbnRlbnQoc2hhZG93U3R5bGUpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKHN0eWxlKTsK
KyAgICByb290LmFwcGVuZENoaWxkKHN0eWxlKTsKIAogICAgIC8vIFBzZXVkb3MgYXJlIHNldCB0
byBhbGxvdyBhdXRob3Igc3R5bGluZy4KICAgICBhdXRvIGlubmVyID0gSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICBpbm5lci0+c2V0SWRBdHRyaWJ1dGUoImlubmVyIik7
CiAgICAgaW5uZXItPnNldFBzZXVkbygiLXdlYmtpdC1tZXRlci1pbm5lci1lbGVtZW50Iik7Ci0g
ICAgcm9vdC0+YXBwZW5kQ2hpbGQoaW5uZXIpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoaW5uZXIp
OwogCiAgICAgYXV0byBiYXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwog
ICAgIGJhci0+c2V0SWRBdHRyaWJ1dGUoImJhciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRl
ckVsZW1lbnQuaAppbmRleCA2MDRhNjVhOWUzYWIyZmMzODNmNGY2MGIxYTAzZjAxOTJmOGMxYmUy
Li40ODY1YTZkYjdkOGFjMjAwOGE4ZWU2OGFhN2JmMTdjMjllNmQwZDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRFbGVtZW50U3RhdGVDaGFuZ2UoKTsKLSAgICB2
b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZv
aWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAgICBS
ZWZQdHI8SFRNTEVsZW1lbnQ+IG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4IGQxMGMzN2ZiMjI4ODFjMTNjMzBmMDdjN2I5MzRmOTMy
NzU0NmYxZWEuLmUxMThiZGUxZGRjMjIzYTkzYjcxODRiYTYwNzc4OTFjY2FhMmI3NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKQEAgLTI1LDcgKzI1LDYg
QEAKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxl
bWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAppbmRleCBl
MmUzMWExNTUzNjEwOTZhNTZhZmQ4NDNjMzAwMmYwODVmNDllMWRhLi45ZGM1ZmYxYWE5MGZjM2E2
ZDQyNzU0MjEyYzVmZmJkM2UyYzQ5NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmNwcApAQCAtMjkyLDEzICsyOTIsMTMgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVu
dDo6c2V0RGlzcGxheVN0YXRlKERpc3BsYXlTdGF0ZSBzdGF0ZSkKICAgICAgICAgbV9zd2FwUmVu
ZGVyZXJUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBIVE1MUGx1Z0luRWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1M
UGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290
KQogewogICAgIGlmICghbV9wbHVnaW5SZXBsYWNlbWVudCB8fCAhZG9jdW1lbnQoKS5wYWdlKCkg
fHwgZGlzcGxheVN0YXRlKCkgIT0gUHJlcGFyaW5nUGx1Z2luUmVwbGFjZW1lbnQpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICByb290LT5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1ZSk7
Ci0gICAgaWYgKG1fcGx1Z2luUmVwbGFjZW1lbnQtPmluc3RhbGxSZXBsYWNlbWVudCgqcm9vdCkp
IHsKKyAgICByb290LnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsKKyAgICBpZiAobV9w
bHVnaW5SZXBsYWNlbWVudC0+aW5zdGFsbFJlcGxhY2VtZW50KHJvb3QpKSB7CiAgICAgICAgIHNl
dERpc3BsYXlTdGF0ZShEaXNwbGF5aW5nUGx1Z2luUmVwbGFjZW1lbnQpOwogICAgICAgICBpbnZh
bGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCmluZGV4IDUyYTI5MmFiYjI5NmM0OTNhMmU2YjgzOGFk
MzBjMGIxYjBmMzA0ZDIuLjExZmU2MDJjZTFlMWQwNzVmNWRjZTE1YjFjM2QxYjA5ODhjOTE2YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKQEAgLTk4LDcgKzk4LDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBib29sIHJlcXVlc3RPYmplY3QoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIFJlbmRl
clB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwg
Y29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gU3ViY2xh
c3NlcyBzaG91bGQgdXNlIGd1YXJkZWREaXNwYXRjaEJlZm9yZUxvYWRFdmVudCBpbnN0ZWFkIG9m
IGNhbGxpbmcgZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQgZGlyZWN0bHkuCiAgICAgYm9vbCBndWFy
ZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggNWQ0
MTVhNjJjMWEzNDc1Y2Q1YjI4ZTM3OWJiZGM5YzcyZjZkOGI4Ny4uMGM1NWI5OWE5MWVmYzExZmVi
ZDViMWZjZDYzZGVkYTY5YzI2NWYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpmaW5pc2hDcmVhdGluZygpCiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp+
SFRNTFBsdWdJbkltYWdlRWxlbWVudCgpCiB7CiAgICAgaWYgKG1fbmVlZHNEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpzZXREaXNwbGF5U3RhdGUoRGlzcGxheVN0YXRlIHN0YXRlKQpAQCAt
MTc1LDcgKzE3NSw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5CiAgICAgLy8gaW5hY3RpdmUg
b3IgcmVhY3RpdmF0ZXMgc28gaXQgY2FuIGNsZWFyIHRoZSByZW5kZXJlciBiZWZvcmUgZ29pbmcg
aW50byB0aGUgcGFnZSBjYWNoZS4KICAgICBpZiAoIW1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25D
YWxsYmFja3MpIHsKICAgICAgICAgbV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyA9
IHRydWU7Ci0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KIAogICAgIGlmIChkaXNwbGF5U3RhdGUo
KSA9PSBEaXNwbGF5aW5nU25hcHNob3QpIHsKQEAgLTI4NCw4ICsyODQsOCBAQCB2b2lkIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1
bWVudCwgRG9jdW1lbgogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCZk
b2N1bWVudCgpID09ICZuZXdEb2N1bWVudCk7CiAgICAgaWYgKG1fbmVlZHNEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3MpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIG9sZERvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAg
ICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygq
dGhpcyk7CiAgICAgfQogCiAgICAgaWYgKG1faW1hZ2VMb2FkZXIpCkBAIC0zNDEsNyArMzQxLDcg
QEAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgcGx1Z0luSW1hZ2VFbGVtZW50SXNvbGF0ZWRXb3Js
ZCgpCiAgICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9p
ZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QmIHJvb3QpCiB7CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNo
YWRvd1Jvb3Qocm9vdCk7CiAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID49IFByZXBhcmluZ1BsdWdp
blJlcGxhY2VtZW50KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQogICAgIC8v
IFJlc2V0IGFueSBhdXRob3Igc3R5bGVzIHRoYXQgbWF5IGFwcGx5IGFzIHdlIG9ubHkgd2FudCBl
eHBsaWNpdAogICAgIC8vIHN0eWxlcyBkZWZpbmVkIGluIHRoZSBpbmplY3RlZCB1c2VyIGFnZW50
cyBzdHlsZXNoZWV0cyB0byBzcGVjaWZ5CiAgICAgLy8gdGhlIGxvb2stYW5kLWZlZWwgb2YgdGhl
IHNuYXBzaG90dGVkIHBsdWctaW4gb3ZlcmxheS4gCi0gICAgcm9vdC0+c2V0UmVzZXRTdHlsZUlu
aGVyaXRhbmNlKHRydWUpOworICAgIHJvb3Quc2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUp
OwogICAgIAogICAgIFN0cmluZyBtaW1lVHlwZSA9IGxvYWRlZE1pbWVUeXBlKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKaW5kZXggZTk0MWY1N2Fk
ZjhhMTlhOWVkMTRlZGNlYjA5N2JkM2FiNGE0ZmE2Mi4uZTNmMDM5NjRmYTE3NDQ1MWU4ZTI2NmFl
MzI3MzZhOWVjOWJmOTg1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBhbGxv
d2VkVG9Mb2FkUGx1Z2luQ29udGVudChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkgY29uc3Q7CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hh
ZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290JikgZmluYWw7CiAKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxl
bWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92
ZXJyaWRlOwogICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlJikg
Y29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9n
cmVzc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50
LmNwcAppbmRleCA4YjQwZTFkYzI1OGE5YmE0ZmFmY2YwODNiMzVmOTNiY2IyYzQ1ZTRmLi4xMmQz
MWM3MjIwZDZkODIyNDEwZDk5OGY0ZDNhZTFiYmZjYjJhMmZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTEzNSwxMiArMTM1LDEyIEBAIHZvaWQg
SFRNTFByb2dyZXNzRWxlbWVudDo6ZGlkRWxlbWVudFN0YXRlQ2hhbmdlKCkKICAgICB9CiB9CiAK
LXZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290KiByb290KQordm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKIAog
ICAgIGF1dG8gaW5uZXIgPSBQcm9ncmVzc0lubmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkp
OwotICAgIHJvb3QtPmFwcGVuZENoaWxkKGlubmVyKTsKKyAgICByb290LmFwcGVuZENoaWxkKGlu
bmVyKTsKIAogICAgIGF1dG8gYmFyID0gUHJvZ3Jlc3NCYXJFbGVtZW50OjpjcmVhdGUoZG9jdW1l
bnQoKSk7CiAgICAgYXV0byB2YWx1ZSA9IFByb2dyZXNzVmFsdWVFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oCmluZGV4
IGJkMzNhYTEyMmVkZjIxNTRhNjc5ZmUxNmQ2NjQwY2IxMmZiNzBlMzAuLjgyNjczNmRhYjJiYjY1
N2FiM2U1YzdhYzNiYTQ5NGQzYWQ4MGNlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBy
b2dyZXNzRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRB
dHRhY2hSZW5kZXJlcnMoKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkRWxlbWVudFN0YXRlQ2hhbmdl
KCk7Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5h
bDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFs
OwogICAgIGJvb2wgaXNEZXRlcm1pbmF0ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBjYW5Db250YWlu
UmFuZ2VFbmRQb2ludCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCmluZGV4IGE0OWZmMjBjMmIzNzhhNTYyNDQx
NWQ1NDkzMWUzNDQzYjM4YjhhZWEuLjk5ZjNjNmY4YzRjMGFmNGY4N2E0NmYzZjUxOWJmOWQwMjZj
N2UwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJIVE1MUGljdHVyZUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggOTkxMGJkMWI0MmZh
MjU2MmYyYTMwNmFiMjEyMDZhODg0NGYyNTQ5Yi4uZGE3NDljZDk0M2YzOTBkY2ExMDU0YWU3NTVh
MmY4YWQzYTAzNjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFy
eUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50
LmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MU3Vt
bWFyeUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmCiAgICAgcmV0
dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5bGUp
KTsKIH0KIAotdm9pZCBIVE1MU3VtbWFyeUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFN1bW1hcnlFbGVtZW50OjpkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgcm9vdC0+YXBwZW5kQ2hp
bGQoRGV0YWlsc01hcmtlckNvbnRyb2w6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0gICAgcm9vdC0+
YXBwZW5kQ2hpbGQoSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1lbnQoKSkp
OworICAgIHJvb3QuYXBwZW5kQ2hpbGQoRGV0YWlsc01hcmtlckNvbnRyb2w6OmNyZWF0ZShkb2N1
bWVudCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShz
bG90VGFnLCBkb2N1bWVudCgpKSk7CiB9CiAKIEhUTUxEZXRhaWxzRWxlbWVudCogSFRNTFN1bW1h
cnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U3VtbWFyeUVsZW1lbnQuaAppbmRleCAxMjdhNTQ2ZDJhMGRjNDAyOTg0MTJhYmM1ZDY5YWYwNzg1
NjNiNTIwLi42Yjc0NTA1NDQ2MGRhMDI2MmFmY2M5OWM0N2U5ZTlmNjhlMmU0NjQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHJp
dmF0ZToKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogICAgIHZv
aWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNDdXN0
b21Gb2N1c0xvZ2ljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAppbmRleCAyNDJmYzFhNTg1ZmYzZGI5
YjI0ZjFmMjAyN2ExZTE3Y2NhOTAyYjU4Li42OTZhNjNmNDAzY2UxNTkxMjUwZmQxNGIwMGVmMjBh
NmQ5OWJiMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5j
cHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50LmgiCiAK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiVGVtcGxhdGVDb250ZW50RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUg
Im1hcmt1cC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJl
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cAppbmRleCBlM2EwMjE5MGVkYTIwMjZiYWYyMjJjZDIxY2Y2OGI0MjhjNGI3NmRmLi42ODhlM2Nj
MDc0NmM2NjE4MGNiYjU4OTcxNjdiZGQyMzY2NWEyNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCBSZWY8SFRNTFRl
eHRBcmVhRWxlbWVudD4gSFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbQogICAgIHJldHVybiB0ZXh0QXJlYTsKIH0KIAotdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2
b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYgcm9vdCkKIHsKLSAgICByb290LT5hcHBlbmRDaGlsZChUZXh0Q29udHJvbElubmVyVGV4
dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgdXBkYXRl
SW5uZXJUZXh0RWxlbWVudEVkaXRhYmlsaXR5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmgKaW5kZXggYjlhMzIyNGM3NTBlNGQ0MDZiMjNhNmU1NGIwNDc1
MjI1Mjk5Zjg1MC4uY2JkMDYzZTMyODFiZWNhZDU2OWIyYmNkMDI3MDYwZmQ3ZmJhZDliNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKQEAgLTcxLDcgKzcxLDcg
QEAgcHJpdmF0ZToKIAogICAgIGVudW0gV3JhcE1ldGhvZCB7IE5vV3JhcCwgU29mdFdyYXAsIEhh
cmRXcmFwIH07CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9v
dCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290
JikgZmluYWw7CiAKICAgICB2b2lkIG1heExlbmd0aEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRv
bWljU3RyaW5nJiBuZXdWYWx1ZSk7CiAgICAgdm9pZCBtaW5MZW5ndGhBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5w
dXRUeXBlLmNwcAppbmRleCBkZWMxOWIyYzBiOWUyMjIwZjY3YWE1ZGY0OGRjYjEzYzk4NGVhNDJi
Li4wYmNmZTE1ODkxNGM0ZmQzNTBjMTZkMzdlNDFlNDRiOThkMGVlNGZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcApAQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgUmFkaW9J
bnB1dFR5cGU6OmlzUmFkaW9CdXR0b24oKSBjb25zdAogCiBib29sIFJhZGlvSW5wdXRUeXBlOjpt
YXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3QKIHsKLSAgICBjb25zdCBIVE1M
SW5wdXRFbGVtZW50JiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOwotICAgIGlmIChjb25zdCBS
YWRpb0J1dHRvbkdyb3VwcyogcmFkaW9CdXR0b25Hcm91cHMgPSBlbGVtZW50LnJhZGlvQnV0dG9u
R3JvdXBzKCkpCi0gICAgICAgIHJldHVybiAhcmFkaW9CdXR0b25Hcm91cHMtPmhhc0NoZWNrZWRC
dXR0b24oJmVsZW1lbnQpOworICAgIGF1dG8mIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7Cisg
ICAgaWYgKGF1dG8qIHJhZGlvQnV0dG9uR3JvdXBzID0gZWxlbWVudC5yYWRpb0J1dHRvbkdyb3Vw
cygpKQorICAgICAgICByZXR1cm4gIXJhZGlvQnV0dG9uR3JvdXBzLT5oYXNDaGVja2VkQnV0dG9u
KGVsZW1lbnQpOwogICAgIHJldHVybiAhZWxlbWVudC5jaGVja2VkKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCmluZGV4IDAwNWJlNGQyZDJlMTc4MDhlZjgy
YTNiOTNkMjkzZDg3OGExOWEwOTMuLjZmYzVjMTYxNmJlZjE5NjIxM2NhZWFjYTYxY2MxNDVkNGM1
MTNiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcApAQCAtMTQ3
LDcgKzE0Nyw3IEBAIHZvaWQgRG9jdW1lbnRXcml0ZXI6OmJlZ2luKGNvbnN0IFVSTCYgdXJsUmVm
ZXJlbmNlLCBib29sIGRpc3BhdGNoLCBEb2N1bWVudCogb3duCiAKICAgICBib29sIHNob3VsZFJl
dXNlRGVmYXVsdFZpZXcgPSBtX2ZyYW1lLT5sb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS5pc0Rpc3Bs
YXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmlzU2Vj
dXJlVHJhbnNpdGlvblRvKHVybCk7CiAgICAgaWYgKHNob3VsZFJldXNlRGVmYXVsdFZpZXcpCi0g
ICAgICAgIGRvY3VtZW50LT50YWtlRE9NV2luZG93RnJvbShtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
KyAgICAgICAgZG9jdW1lbnQtPnRha2VET01XaW5kb3dGcm9tKCptX2ZyYW1lLT5kb2N1bWVudCgp
KTsKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50LT5jcmVhdGVET01XaW5kb3coKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGU1MzhiYTZjNTMxMmQ5YzgxOWViNWE3
NTY2NDBhYzVhYmE4Y2QzYWIuLjZmOTA3MjQxOTQ0Yjc3ZTViMTQ0NTMzMWUwZWU1NzVlMzI2NmJh
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTM1MTMsNyArMzUxMyw3
IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkaWRTdGFydERyYWcoKQogICAgIH0KIAogICAgIGlmIChh
dXRvIHJhbmdlID0gZHJhZ1N0YXRlKCkuZHJhZ2dlZENvbnRlbnRSYW5nZSkgewotICAgICAgICBy
YW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcihy
YW5nZS5nZXQoKSk7CisgICAgICAgIHJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFk
ZERyYWdnZWRDb250ZW50TWFya2VyKCpyYW5nZSk7CiAgICAgICAgIHJlcGFpbnRDb250ZW50c09m
UmFuZ2UocmFuZ2UpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNw
cAppbmRleCAwODAxNzI5NjliZTRjYmRhYjk3OTIzMzU1YTE2Mzc5ZTQ5YmIzNDY0Li5lNDZmZjlk
OWZhZjcyYzI0MjFiMTUyZmQwZmE1NTM5YzlkYWEyNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
U291cmNlLmNwcApAQCAtNzMsNyArNzMsNyBAQCBFeGNlcHRpb25PcjxSZWY8RXZlbnRTb3VyY2U+
PiBFdmVudFNvdXJjZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleAogICAg
IH0KIAogICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBFdmVudFNvdXJjZShjb250ZXh0
LCBmdWxsVVJMLCBldmVudFNvdXJjZUluaXQpKTsKLSAgICBzb3VyY2UtPnNldFBlbmRpbmdBY3Rp
dml0eShzb3VyY2UucHRyKCkpOworICAgIHNvdXJjZS0+c2V0UGVuZGluZ0FjdGl2aXR5KHNvdXJj
ZS5nZXQoKSk7CiAgICAgc291cmNlLT5zY2hlZHVsZUluaXRpYWxDb25uZWN0KCk7CiAgICAgc291
cmNlLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwpAQCAt
MTIzLDcgKzEyMyw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6Om5ldHdvcmtSZXF1ZXN0RW5kZWQoKQog
ICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKICAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTsK
ICAgICBlbHNlCi0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRXZlbnRTb3VyY2U6OnNjaGVk
dWxlSW5pdGlhbENvbm5lY3QoKQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6
OmNsb3NlKCkKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAgIGVsc2UgewogICAgICAg
ICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMjYx
LDcgKzI2MSw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmFib3J0Q29ubmVjdGlvbkF0dGVtcHQoKQog
ICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3RhdGUg
PSBDTE9TRUQ7Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fc3RhdGUg
PT0gQ0xPU0VEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggN2Y3NGUzMjVjZTc4NWJhZDUxYmI1
N2ExNTJjMWNhMmE3MzI5NDU2Yi4uNDg1ZmQyZTMyNWMyOGEyNWY3NzMzNGJjODk3N2EyMzEzOTZj
NzNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZv
cm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggZDhlNzY1Zjk0ZTExMWZkNWI3Zjk2MzhiZmQ1ODY0ZTJhN2U1NjBhZS4uMDA0M2NlNWZlOTFm
OTQ3ODYyYWM2ODZlNjJmNmJhYmJiZjA4N2RiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVudC5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAppbmRl
eCA0Y2Y1ZTI5ZDBiOTM4NmFmZmUyNzI2YzczYWFlZTIyMzkzNTE1M2MzLi5iNDdmNTJiNDVjMDlh
ZTIwYWI1MmZiNGZiMWJjMWNiMGQyNGJiNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQW5p
bWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQs
IGRvdWJsZSBwYXJhbSkKICAgICAvLyBJZiB3ZSBnZXQgQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVz
dGFydEFuaW1hdGlvbiB0aGVuIHdlIGZvcmNlIGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBv
ZiBzdGF0ZS4KICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TWFrZU5ldykg
ewogICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRo
aXMpOworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAgICAgICAg
IExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhpcywgbmFt
ZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9
IEFuaW1hdGlvblN0YXRlOjpOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1lID0gc3RkOjpudWxsb3B0
OwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAgIGlmIChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uKSB7CiAgICAgICAg
IGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250
cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAg
ICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUo
bV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9u
U3RhdGU6Ok5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSBzdGQ6Om51bGxvcHQ7CkBAIC0xODks
NyArMTg5LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0
aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAgaWYgKGlucHV0ID09IEFu
aW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbikgewogICAgICAgICBpZiAobV9hbmltYXRp
b25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAg
ICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21w
b3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gRG9uZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0
YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsK
ICAgICAgICAgZW5kQW5pbWF0aW9uKCk7CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBBbmltYXRp
b25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91
YmxlIHBhcmFtKQogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCiAgICAgICAg
ICAgICBpZiAobV9hbmltYXRpb24tPnRyaWdnZXIoKSAmJiBtX2FuaW1hdGlvbi0+dHJpZ2dlcigp
LT5pc1Njcm9sbEFuaW1hdGlvblRyaWdnZXIoKSkKLSAgICAgICAgICAgICAgICBtX2NvbXBvc2l0
ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc0RlcGVuZGVu
dE9uU2Nyb2xsKHRoaXMpOworICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoKnRo
aXMpOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBbmltYXRpb25T
dGF0ZTo6U3RhcnRXYWl0VGltZXI6CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBBbmltYXRpb25C
YXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91Ymxl
IHBhcmFtKQogICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0
aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3Rh
cnQgdGltZQogICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3Rh
dGUgJXMgLT4gU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUgKHRpbWUgaXMgJWYpIiwgdGhpcywgbmFt
ZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7CiAgICAgICAgICAgICAgICAgbV9h
bmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZTsK
LSAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAKICAgICAgICAgICAgICAgICAvLyBUcmlnZ2Vy
IGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCiAgICAgICAgICAgICAgICAg
aWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT5lbGVtZW50KCkpCkBAIC0yODEsNyArMjgxLDcgQEAg
dm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1
dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNl
dCA9IC1tX2FuaW1hdGlvbi0+ZGVsYXkoKTsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFy
dGVkID0gc3RhcnRBbmltYXRpb24odGltZU9mZnNldCk7CiAKLSAgICAgICAgICAgICAgICAgICAg
bV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UodGhpcywgc3RhcnRlZCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFydGVkKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQg
QW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5w
dXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0
ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZhbHVlX29yKDApKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9Bbmlt
YXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0
YXJ0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRl
ZDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAKaW5kZXggYjExZGE1YzMwYjUxMDI5NjdlOTFkOTY2OTYzMWQwZmZmZmZhZTNiNi4uZGZlNGMw
MzI0OGFkNmJkZDVlMWE0YjE3ZGQ0Y2JlYTZmZGFmOWEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTUwMywxNyArNTAzLDE1IEBAIHVuc2lnbmVkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtCiAgICAgcmV0dXJuIGNv
dW50OwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1h
dGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhpcyBhbmlt
YXRpb24gaXMgbm90IGluIHRoZSBzdGFydCB0aW1lIHdhaXRlcnMKLSAgICBtX2FuaW1hdGlvbnNX
YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3ZlKGFuaW1hdGlvbik7Ci0KLSAgICBtX2Fu
aW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25z
V2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0aW9uKTsKKyAgICBtX2Fu
aW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JT
dHlsZShBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3ZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFu
aW1hdGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQogewotICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdHlsZS5yZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUpOworICAgIG1fYW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKIH0KIAogdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQpAQCAtNTI1LDcgKzUy
Myw3IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxl
KCkKICAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuY2xlYXIoKTsKIH0KIAotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVz
cG9uc2UpCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uLCBi
b29sIHdpbGxHZXRSZXNwb25zZSkKIHsKICAgICAvLyBJZiB3aWxsR2V0UmVzcG9uc2UgaXMgdHJ1
ZSwgaXQgbWVhbnMgdGhpcyBhbmltYXRpb24gaXMgYWN0dWFsbHkgd2FpdGluZyBmb3IgYSByZXNw
b25zZQogICAgIC8vICh3aGljaCB3aWxsIGNvbWUgaW4gYXMgYSBjYWxsIHRvIG5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQoKSkuCkBAIC01NDQsMTcgKzU0MiwxNiBAQCB2b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UoQQogICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwgc29mdHdhcmUgYW5kIGFjY2Vs
ZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAKICAgICAvLyB1cGRhdGVTdHls
ZUlmTmVlZGVkIGN5Y2xlLgogICAgIC8vCi0gICAgCisKICAgICBpZiAod2lsbEdldFJlc3BvbnNl
KQogICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gdHJ1ZTsKIAot
ICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5hZGQoYW5pbWF0aW9u
KTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuYWRkKCZhbmlt
YXRpb24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVG
cm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBh
bmltYXRpb25Ub1JlbW92ZSkKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJh
c2UmIGFuaW1hdGlvblRvUmVtb3ZlKQogewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWVSZXNwb25zZS5yZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUpOwotICAgIAorICAgIG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVt
b3ZlKTsKICAgICBpZiAobV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlz
RW1wdHkoKSkKICAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZh
bHNlOwogfQpAQCAtNTcwLDkgKzU2Nyw5IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSB0aW1lKQogICAgIG1fd2FpdGluZ0ZvckFz
eW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlKiBhbmlt
YXRpb24pCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxs
QmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAgICBMT0coQW5pbWF0aW9u
cywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIGFuaW1hdGlvbldpbGxCZVJlbW92
ZWQ6ICVwIiwgdGhpcywgYW5pbWF0aW9uKTsKKyAgICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQ6ICVwIiwgdGhp
cywgJmFuaW1hdGlvbik7CiAKICAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZShhbmltYXRpb24pOwogICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlKGFuaW1hdGlvbik7CkBAIC01OTMsMTQgKzU5MCwxNSBAQCB2b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJh
c2UqIGFuaW1hdAogfQogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRP
blNjcm9sbChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCisKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlv
bkJhc2UmIGFuaW1hdGlvbikKIHsKLSAgICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5h
ZGQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5hZGQoJmFu
aW1hdGlvbik7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92
ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9u
KQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlv
bnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgbV9h
bmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwucmVtb3ZlKGFuaW1hdGlvbik7CisgICAgbV9hbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwucmVtb3ZlKCZhbmltYXRpb24pOwogfQogCiB2b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzY3JvbGxXYXNVcGRhdGVkKCkKQEAgLTYxNyw2
ICs2MTUsNyBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzY3JvbGxXYXNV
cGRhdGVkKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0MTcwCiAgICAgdXBkYXRlQW5pbWF0aW9ucyhDYWxsU2V0Q2hhbmdlZCk7CiB9CisKICNlbmRp
ZgogCiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9sbGVyKEZyYW1l
JiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCmluZGV4IDE1YTRmNzJjMWU2ZDQ3NjQx
NGM0ODk4NDQ1MjczYWNlMzU4OTYzZjQuLmMyM2JlYTJmMzY3MTI1YjMwYWMzZjljYTM1MDFhMTMy
YjRlODM3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaApAQCAtOTMsMTMgKzkzLDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIGVuZEFuaW1hdGlvblVwZGF0ZSgpOwogICAgIHZvaWQgcmVjZWl2
ZWRTdGFydFRpbWVSZXNwb25zZShkb3VibGUpOwogICAgIAotICAgIHZvaWQgYWRkVG9BbmltYXRp
b25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21B
bmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIGFkZFRv
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJik7CisgICAgdm9pZCByZW1v
dmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJik7CiAKLSAgICB2
b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25C
YXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQg
YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2Um
LCBib29sIHdpbGxHZXRSZXNwb25zZSk7CisgICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJik7CiAKLSAgICB2b2lkIGFu
aW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQgYW5pbWF0aW9u
V2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlJik7CiAKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlv
blRpbWVyRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwogCkBAIC0xMTAsOCArMTEwLDggQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCiAgICAgYm9vbCB3
YW50c1Njcm9sbFVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiAhbV9hbmltYXRpb25zRGVwZW5kZW50
T25TY3JvbGwuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRP
blNjcm9sbChBbmltYXRpb25CYXNlKik7Ci0gICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc0Rl
cGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIGFkZFRvQW5pbWF0aW9u
c0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UmKTsKKyAgICB2b2lkIHJlbW92ZUZyb21B
bmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYpOwogCiAgICAgdm9pZCBz
Y3JvbGxXYXNVcGRhdGVkKCk7CiAgICAgZmxvYXQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBkOGUxYjJkYmRhZDI3MDk0YmMz
N2UxNTU5MmMxNjZlYWVlNmEyYTQ3Li42YzU4Y2YzYzkwNmU1NGRjMGY2ODllYTUyNTViZDhiNDNl
YmJlY2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTY0LDE0ICs2NCwxNCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIC8vIENsZWFyIHRoZSByZW5kZXJlcnMgZnJv
bSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9m
CiAgICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKICAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29u
dHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbi5nZXQoKSk7CisgICAg
ICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJh
bnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKICAgICAgICAgZm9yIChh
dXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAg
ICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0
aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25X
aWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwogICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbEFuaW0tPmJsZW5kUHJvcGVy
dHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50U3R5bGUuZ2V0KCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBleGlzdGluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmb3IgcHJvcGVydHkg
JXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVydHlOYW1lKHByb3ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGltcGxB
bmltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmlt
YXRpb25XaWxsQmVSZW1vdmVkKCppbXBsQW5pbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
X3RyYW5zaXRpb25zLnJlbW92ZShwcm9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFs
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlcgogICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwogICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKICAgICAgICAg
aWYgKCF0cmFuc2l0aW9uLT5hY3RpdmUoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJv
bGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJhbnNp
dGlvbik7CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQodHJhbnNpdGlvbi0+YW5pbWF0
aW5nUHJvcGVydHkoKSk7CiAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIElt
cGxpY2l0QW5pbWF0aW9uICVwIGZyb20gcmVuZGVyZXIgJXAgZm9yIHByb3BlcnR5ICVzIiwgdHJh
bnNpdGlvbi5nZXQoKSwgcmVuZGVyZXIsIGdldFByb3BlcnR5TmFtZSh0cmFuc2l0aW9uLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyLCBjb25zdAogICAgIC8vIE1ha2UgYSBsaXN0IG9mIGFuaW1hdGlvbnMgdG8gYmUg
cmVtb3ZlZC4KICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25z
LnZhbHVlcygpKSB7CiAgICAgICAgIGlmICghbmV3QW5pbWF0aW9ucy5jb250YWlucyhhbmltYXRp
b24tPm5hbWUoKS5pbXBsKCkpKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCku
YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltYXRpb24uZ2V0KCkpOworICAgICAgICAgICAgYW5p
bWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7CiAg
ICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7CiAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gcmVuZGVyZXIgJXAiLCBhbmlt
YXRpb24uZ2V0KCksIHJlbmRlcmVyKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQppbmRleCA0MmM4YjMxZWY2YmZmYTY4Mjg1NzU4NDRkODkxMDQ0ZmM2OTllOGIzLi4x
Zjc0YzkwNGQzNWZlNTg2ZTBlYzE3OWVlNWYzMjBiMjY2M2Y5NjZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2lvcy9GcmFtZUlPUy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC04MSwxNCArODEsMTQgQEAgdm9pZCBGcmFtZTo6aW5pdFdpdGhTaW1wbGVIVE1MRG9jdW1lbnQo
Y29uc3QgU3RyaW5nJiBzdHlsZSwgY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgbV9sb2FkZXItPmlu
aXRGb3JTeW50aGVzaXplZERvY3VtZW50KHVybCk7CiAKLSAgICBSZWZQdHI8SFRNTERvY3VtZW50
PiBkb2N1bWVudCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudCh0aGlz
LCB1cmwpOworICAgIGF1dG8gZG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNp
emVkRG9jdW1lbnQoKnRoaXMsIHVybCk7CiAgICAgZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlN
b2RlKERvY3VtZW50Q29tcGF0aWJpbGl0eU1vZGU6OkxpbWl0ZWRRdWlya3NNb2RlKTsKICAgICBk
b2N1bWVudC0+Y3JlYXRlRE9NV2luZG93KCk7Ci0gICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwor
ICAgIHNldERvY3VtZW50KGRvY3VtZW50LnB0cigpKTsKIAotICAgIGF1dG8gcm9vdEVsZW1lbnQg
PSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOworICAgIGF1dG8gcm9vdEVsZW1l
bnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAKLSAgICBhdXRvIGJvZHkg
PSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOworICAgIGF1dG8gYm9keSA9IEhU
TUxCb2R5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBpZiAoIXN0eWxlLmlzRW1wdHko
KSkKICAgICAgICAgYm9keS0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBzdHls
ZSk7CiAKQEAgLTc1NCw0ICs3NTQsNSBAQCB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9u
UGVybWlzc2lvbigpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwCmluZGV4IGU1YmYwNGRiMjNkMmFjYjk3OTVhMzJlOWE0OGU4M2IyYjM4NTJm
OTMuLmE3MDNjMDkwNTM3OWRiM2Q2MWUxNjEyNTBjNTBhY2Q1NDc5NmU4MDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApAQCAtMTA1
LDcgKzEwNSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpi
dWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByCiAgICAgICAgIC8vIEFsdGhvdWdo
IHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxh
dGVyIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnlt
b3VzIFJlbmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+CiAgICAgICAg
IGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgZG9j
dW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3Bl
cmF0aW9uLmZyYWdtZW50KCksIGVsZW1lbnQpOworICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdt
ZW50KCksICplbGVtZW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggNTc1ZmEwNmFkZTYw
YzUwMTNhZWU0NTFiN2U0M2E5MWQzMGYyZmQ1Yi4uNGUxZTIwMjk3NmJhMTlmMTFmMGZkN2U5ZGRi
YTY5MGU2NTA5YjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcApAQCAtODk1LDcgKzg5NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVu
dE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAgaWYg
KCFyZW5kZXJlcigpLnRleHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJlcigpLnRleHROb2RlKCkpOworICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0ZvcigqcmVuZGVyZXIoKS50ZXh0Tm9kZSgpKTsKIAogICAgIC8vIEdp
dmUgYW55IGRvY3VtZW50IG1hcmtlcnMgdGhhdCB0b3VjaCB0aGlzIHJ1biBhIGNoYW5jZSB0byBk
cmF3IGJlZm9yZSB0aGUgdGV4dCBoYXMgYmVlbiBkcmF3bi4KICAgICAvLyBOb3RlIGVuZCgpIHBv
aW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3Qgb25lIHBhc3QgaXQgbGlrZSBlbmRPZmZzZXQgYW5k
IHJhbmdlcyBkby4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CmluZGV4IDAyNjA2NWE0NjZiOTgzMWIxZDk1OGMzYjNlNGU1ZGNkZWUzMTBjNDIuLmQ3YjU2NzM4
Mzc0ODg5NmJmZTRiMTlhYjk5Y2U5NjgyMWUyMjYxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgUmVuZGVy
UmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlZEdyYXBoaWNz
Q29udGV4dChwYWludEluZm8uY29udGV4dCgpLCBmYWxzZSk7CiAgICAgaWYgKGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewogICAgICAgICBhdXRv
KiBwYXJlbnRDb250YWluZXIgPSBlbGVtZW50KCktPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQo
KTsKLSAgICAgICAgaWYgKGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQoZG9j
dW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihwYXJlbnRDb250YWluZXIsIERvY3VtZW50TWFy
a2VyOjpEcmFnZ2VkQ29udGVudCksICplbGVtZW50KCkpKSB7CisgICAgICAgIGlmIChkcmFnZ2Vk
Q29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVtZW50KGRvY3VtZW50KCkubWFya2VycygpLm1hcmtl
cnNGb3IoKnBhcmVudENvbnRhaW5lciwgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KSwg
KmVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIHNhdmVkR3JhcGhpY3NDb250ZXh0LnNhdmUoKTsK
ICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0QWxwaGEoMC4yNSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA5MmFmMGQ3Y2Zh
YjgzOGJjYTI4NmM2N2FmMjEyYWYwNGVjYmVjOTkzLi4wYjYyZGMxMTFkMDEyNjAxOWQxMWUzZDU1
NDY4N2RjN2Q4ZDc0ZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25l
ZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRDb250ZW50UmFuZ2VzQmV0d2Vlbk9mZgogICAgIGlmICgh
dGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gbWFya2VycyA9IGRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IodGV4dE5vZGUoKSwgRG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50KTsKKyAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzRm9yKCp0ZXh0Tm9kZSgpLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQp
OwogICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApp
bmRleCBiNjU2ZmQ2ZDA4M2ExNjhiOGExZjM5MzE0Yzc2MWRlZjZkNThkMGVlLi40NzVlMTVmMGQz
ODUwMDBmMmNiMDU2NTg3MWVkZWRiZjZhODc0OTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAtMTY1LDkgKzE2NSw5IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVGcm9tQ2FjaGVBbmRJbnZhbGlkYXRlRGVwZW5kZW5j
aWVzKFJlbmRlckVsZW1lbnQmIHJlbmRlCiAgICAgICAgICAgICBjbGlwcGVyLT5yZW1vdmVDbGll
bnRGcm9tQ2FjaGUocmVuZGVyZXIpOwogICAgIH0KIAotICAgIGlmICghcmVuZGVyZXIuZWxlbWVu
dCgpIHx8ICFyZW5kZXJlci5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgIGlmICghaXM8
U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIEhh
c2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSByZW5kZXJlci5kb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoZG93bmNh
c3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSk7CisgICAgYXV0byogZGVwZW5kZW5j
aWVzID0gcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVt
ZW50c1JlZmVyZW5jaW5nVGFyZ2V0KGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVt
ZW50KCkpKTsKICAgICBpZiAoIWRlcGVuZGVuY2llcykKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwCmluZGV4IDE4MTg2MDM4NTA4YzgzMDI4ODc5M2VjOGE2ZTMxMDY5Yzhl
NzJjMzMuLjJkYmVhZjA2ZmM1MDdiYjAwNmRkYTBhMjQwMTZmOWY2OTMwY2Y0MmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuY3BwCkBAIC0xNzAsMTkgKzE3MCwxOSBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIHsKICAgICBTVkdEb2N1bWVudEV4dGVu
c2lvbnMmIGV4dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJvbUVsZW1lbnQoZWxlbWVudCgpKTsK
ICAgICBpZiAoIWV4dGVuc2lvbnMuaXNJZE9mUGVuZGluZ1Jlc291cmNlKG1faWQpKSB7Ci0gICAg
ICAgIGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7CisgICAgICAgIGV4dGVuc2lv
bnMuYWRkUmVzb3VyY2UobV9pZCwgKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6UGVuZGluZ0VsZW1lbnRz
PiBjbGllbnRzID0gZXh0ZW5zaW9ucy5yZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9pZCk7CiAKICAg
ICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBuZXcgaWQuCi0gICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJj
ZShtX2lkLCB0aGlzKTsKKyAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsICp0aGlzKTsK
IAogICAgIC8vIFVwZGF0ZSBjYWNoZWQgcmVzb3VyY2VzIG9mIHBlbmRpbmcgY2xpZW50cy4KICAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6ICpjbGllbnRzKSB7CiAgICAgICAgIEFTU0VSVChjbGllbnQt
Pmhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7Ci0gICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5k
aW5nUmVzb3VyY2VzSWZQb3NzaWJsZShjbGllbnQpOworICAgICAgICBleHRlbnNpb25zLmNsZWFy
SGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKmNsaWVudCk7CiAgICAgICAgIGF1dG8qIHJl
bmRlcmVyID0gY2xpZW50LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlcy5jcHAKaW5kZXggZWE5YjQ1MjExNTczMzEzMjNjYTJiMjBjZmY3YmY5ZDI5ZDM5MGVm
Zi4uNDEzYmJjMjZjOTY1ODYwNTA3ZTRmNGQ3OGQwOGU5MmJkZWU2NjMzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMTc1LDcgKzE3NSw3
IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHBhaW50aW5nUmVz
b3VyY2VGcm9tU1ZHUGFpbnQoRG9jdW1lbnQmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rl
clBlbmRpbmdSZXNvdXJjZShTVkdEb2N1bWVudEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMsIGNvbnN0
IEF0b21pY1N0cmluZyYgaWQsIFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZXh0ZW5zaW9u
cy5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICZlbGVtZW50KTsKKyAgICBleHRlbnNpb25zLmFkZFBl
bmRpbmdSZXNvdXJjZShpZCwgZWxlbWVudCk7CiB9CiAKIGJvb2wgU1ZHUmVzb3VyY2VzOjpidWls
ZENhY2hlZFJlc291cmNlcyhjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jlc291cmNlc0NhY2hlLmNwcAppbmRleCA4M2Q5MTJlZWJlOGZlNDI4Mzg2OGQyZDEzYWRjNDM5
MjhkYTI1OTY3Li42OTQzM2FhMjdiMzFmZmQzYjViOGU4ZjI2MTc3N2I0N2UxYjZkYzFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNw
cApAQCAtMTY5LDggKzE2OSw4IEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNlRGVz
dHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJiByZXNvdXJjZSkKIAogICAgICAgICAv
LyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0aW9u
IGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50JiBy
ZXNvdXJjZUVsZW1lbnQgPSByZXNvdXJjZS5lbGVtZW50KCk7Ci0gICAgICAgIEVsZW1lbnQqIGNs
aWVudEVsZW1lbnQgPSBpdC5rZXktPmVsZW1lbnQoKTsKLSAgICAgICAgY2xpZW50RWxlbWVudC0+
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHJlc291
cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLCBjbGllbnRFbGVtZW50KTsKKyAgICAgICAgRWxl
bWVudCYgY2xpZW50RWxlbWVudCA9ICppdC5rZXktPmVsZW1lbnQoKTsKKyAgICAgICAgY2xpZW50
RWxlbWVudC5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3Vy
Y2UocmVzb3VyY2VFbGVtZW50LmdldElkQXR0cmlidXRlKCksIGNsaWVudEVsZW1lbnQpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAppbmRleCAxNzY5MGNjZDY3Nzc5
YzIzYjkzNzc2MzA4NDQ1NDYyZDdhYTkyMmRkLi5lNmYwNzE0YTQzN2E1NDhmNWExNDFkMjU3OTc4
ZTU3ZThkYTY0NTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcApAQCAtMzA3LDcg
KzMwNyw3IEBAIHZvaWQgU2NvcGU6OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVm
UHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQogICAgICAgICAgICAgaWYgKHBpLmlzWFNMKCkgJiYg
IW1fZG9jdW1lbnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAg
IC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNoZWQu
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnBhcnNpbmcoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybSgmcGkpOworICAgICAgICAgICAg
ICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggZWI4MTU0Y2Y1YzJlZTNmOTBlYWViNDM5MTIz
MGU5YzA1M2IyYTNiNy4uY2U0MmMyMTcxNGY2MmU0MGMyMjM3ZjA2MzY5ODJlYWYxZWMzYTQ1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTUx
LDI3ICs1MSwyNSBAQCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6On5TVkdEb2N1bWVudEV4dGVuc2lv
bnMoKQogewogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkVGltZUNvbnRhaW5l
cihTVkdTVkdFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFk
ZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3RpbWVDb250
YWluZXJzLmFkZChlbGVtZW50KTsKKyAgICBtX3RpbWVDb250YWluZXJzLmFkZCgmZWxlbWVudCk7
CiAgICAgaWYgKG1fYXJlQW5pbWF0aW9uc1BhdXNlZCkKLSAgICAgICAgZWxlbWVudC0+cGF1c2VB
bmltYXRpb25zKCk7CisgICAgICAgIGVsZW1lbnQucGF1c2VBbmltYXRpb25zKCk7CiB9CiAKLXZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1l
bnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlVGltZUNvbnRh
aW5lcihTVkdTVkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fdGltZUNvbnRhaW5lcnMucmVt
b3ZlKGVsZW1lbnQpOworICAgIG1fdGltZUNvbnRhaW5lcnMucmVtb3ZlKCZlbGVtZW50KTsKIH0K
IAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKK3ZvaWQgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjphZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYgcmVzb3VyY2UpCiB7Ci0gICAgQVNTRVJUKHJlc291
cmNlKTsKLQogICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFJlcGxhY2VzIHJlc291cmNlIGlmIGFscmVhZHkgcHJlc2VudCwgdG8gaGFuZGxlIHBvdGVudGlh
bCBpZCBjaGFuZ2VzCi0gICAgbV9yZXNvdXJjZXMuc2V0KGlkLCByZXNvdXJjZSk7CisgICAgbV9y
ZXNvdXJjZXMuc2V0KGlkLCAmcmVzb3VyY2UpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKQEAgLTk3LDcgKzk1
LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnN0YXJ0QW5pbWF0aW9ucygpCiAgICAg
Ly8gRklYTUU6IFdlIGhvbGQgYSByZWYgcG9pbnRlcnMgdG8gcHJldmVudCBhIHNoYWRvdyB0cmVl
IGZyb20gZ2V0dGluZyByZW1vdmVkIG91dCBmcm9tIHVuZGVybmVhdGggdXMuCiAgICAgLy8gSW4g
dGhlIGZ1dHVyZSB3ZSBzaG91bGQgcmVmYWN0b3IgdGhlIHVzZS1lbGVtZW50IHRvIGF2b2lkIHRo
aXMuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi81MzcwNAogICAgIFZlY3RvcjxSZWZQdHI8U1ZH
U1ZHRWxlbWVudD4+IHRpbWVDb250YWluZXJzOwotICAgIHRpbWVDb250YWluZXJzLmFwcGVuZFJh
bmdlKG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKSwgbV90aW1lQ29udGFpbmVycy5lbmQoKSk7Cisg
ICAgY29weVRvVmVjdG9yKG1fdGltZUNvbnRhaW5lcnMsIHRpbWVDb250YWluZXJzKTsKICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiB0aW1lQ29udGFpbmVycykKICAgICAgICAgZWxlbWVudC0+dGlt
ZUNvbnRhaW5lcigpLmJlZ2luKCk7CiB9CkBAIC0xNDQsMTkgKzE0MiwxNyBAQCB2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAg
IHJlcG9ydE1lc3NhZ2UobV9kb2N1bWVudCwgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9yOiAi
ICsgbWVzc2FnZSk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5n
UmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCwgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAg
ICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJlc3VsdCA9
IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQsIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlx
dWU8UGVuZGluZ0VsZW1lbnRzPigpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFkZChl
bGVtZW50KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQoJmVsZW1lbnQpOwogCi0g
ICAgZWxlbWVudC0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcygpOworICAgIGVsZW1lbnQuc2V0SGFz
UGVuZGluZ1Jlc291cmNlcygpOwogfQogCiBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNJ
ZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CkBAIC0xNjcs
NDkgKzE2Myw0MyBAQCBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNJZE9mUGVuZGluZ1Jl
c291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGVuZGlu
Z1Jlc291cmNlcy5jb250YWlucyhpZCk7CiB9CiAKLWJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
Ojppc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
Ym9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2Vz
KEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBhbGdvcml0aG0gdGFrZXMg
dGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlc291cmNlcyBhbmQg
bmVlZCBub3QuCiAgICAgLy8gSWYgcGVyZm9ybWFuY2UgYmVjb21lcyBhbiBpc3N1ZSB3ZSBjYW4g
a2VlcCBhIGNvdW50ZWQgc2V0IG9mIGVsZW1lbnRzIGFuZCBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGVm
ZmljaWVudGx5LgotICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnRz
IDogbV9wZW5kaW5nUmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50
cyk7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKKyAgICAgICAg
aWYgKGVsZW1lbnRzLT5jb250YWlucygmZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6aXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc1BlbmRpbmdSZXNv
dXJjZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogewot
ICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIGlmICghaXNJZE9mUGVuZGluZ1Jlc291cmNlKGlk
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291cmNl
cy5nZXQoaWQpLT5jb250YWlucyhlbGVtZW50KTsKKyAgICByZXR1cm4gbV9wZW5kaW5nUmVzb3Vy
Y2VzLmdldChpZCktPmNvbnRhaW5zKCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpjbGVhckhhc1BlbmRpbmdSZXNvdXJj
ZXNJZlBvc3NpYmxlKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFpc0VsZW1lbnRXaXRo
UGVuZGluZ1Jlc291cmNlcyhlbGVtZW50KSkKLSAgICAgICAgZWxlbWVudC0+Y2xlYXJIYXNQZW5k
aW5nUmVzb3VyY2VzKCk7CisgICAgICAgIGVsZW1lbnQuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2Vz
KCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBl
bmRpbmdSZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYgZWxlbWVudCkK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICAvLyBSZW1vdmUgdGhlIGVsZW1lbnQgZnJv
bSBwZW5kaW5nIHJlc291cmNlcy4KLSAgICBpZiAoIW1fcGVuZGluZ1Jlc291cmNlcy5pc0VtcHR5
KCkgJiYgZWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CisgICAgaWYgKCFtX3BlbmRp
bmdSZXNvdXJjZXMuaXNFbXB0eSgpICYmIGVsZW1lbnQuaGFzUGVuZGluZ1Jlc291cmNlcygpKSB7
CiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBmb3Ig
KGF1dG8mIHJlc291cmNlIDogbV9wZW5kaW5nUmVzb3VyY2VzKSB7CiAgICAgICAgICAgICBQZW5k
aW5nRWxlbWVudHMqIGVsZW1lbnRzID0gcmVzb3VyY2UudmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0
eSgpKTsKIAotICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKKyAgICAgICAg
ICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRz
LT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlc291cmNl
LmtleSk7CiAgICAgICAgIH0KQEAgLTIyOSw3ICsyMTksNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFl
bGVtZW50cy0+aXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVt
ZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVsZW1lbnQpOwogICAgICAgICAg
ICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQu
YXBwZW5kKHJlc291cmNlLmtleSk7CiAgICAgICAgIH0KQEAgLTI4NCw0MCArMjc0LDI5IEBAIEVs
ZW1lbnQqIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzRm9yUmVtb3ZhbE1hcChjCiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKLUhhc2hTZXQ8
U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZlcmVu
Y2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkgY29uc3QKK0hhc2hTZXQ8
U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZlcmVu
Y2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkgY29uc3QKIHsKLSAgICBB
U1NFUlQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGNvbnN0IGF1dG8gaXQgPSBtX2VsZW1lbnRE
ZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fZWxl
bWVudERlcGVuZGVuY2llcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0
LT52YWx1ZS5nZXQoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdldCgmcmVm
ZXJlbmNlZEVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkRWxl
bWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZH
RWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVu
dCwgU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKHJlZmVyZW5j
aW5nRWxlbWVudCk7Ci0gICAgQVNTRVJUKHJlZmVyZW5jZWRFbGVtZW50KTsKLQotICAgIGlmIChI
YXNoU2V0PFNWR0VsZW1lbnQqPiogZWxlbWVudHMgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZ2V0
KHJlZmVyZW5jZWRFbGVtZW50KSkgewotICAgICAgICBlbGVtZW50cy0+YWRkKHJlZmVyZW5jaW5n
RWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGVsZW1lbnRzID0g
c3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0PFNWR0VsZW1lbnQqPj4oKTsKLSAgICBlbGVtZW50cy0+
YWRkKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnNldChy
ZWZlcmVuY2VkRWxlbWVudCwgV1RGTW92ZShlbGVtZW50cykpOworICAgIGF1dG8gcmVzdWx0ID0g
bV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuc3VyZSgmcmVmZXJlbmNlZEVsZW1lbnQsIFsmcmVmZXJl
bmNpbmdFbGVtZW50XSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8
U1ZHRWxlbWVudCo+PihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U1ZHRWxlbWVudCo+IHsgJnJlZmVy
ZW5jaW5nRWxlbWVudCB9KTsKKyAgICB9KTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQoJnJlZmVyZW5jaW5nRWxlbWVudCk7
CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZlcmVu
Y2VzRm9yRWxlbWVudChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQpCit2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZH
RWxlbWVudCYgcmVmZXJlbmNpbmdFbGVtZW50KQogewogICAgIFZlY3RvcjxTVkdFbGVtZW50Kj4g
dG9CZVJlbW92ZWQ7CiAKICAgICBmb3IgKGF1dG8mIGRlcGVuZGVuY3kgOiBtX2VsZW1lbnREZXBl
bmRlbmNpZXMpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBkZXBl
bmRlbmN5LmtleTsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4mIHJlZmVyZW5jaW5nRWxl
bWVudHMgPSAqZGVwZW5kZW5jeS52YWx1ZTsKLSAgICAgICAgcmVmZXJlbmNpbmdFbGVtZW50cy5y
ZW1vdmUocmVmZXJlbmNpbmdFbGVtZW50KTsKKyAgICAgICAgYXV0byYgcmVmZXJlbmNpbmdFbGVt
ZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOworICAgICAgICByZWZlcmVuY2luZ0VsZW1lbnRzLnJl
bW92ZSgmcmVmZXJlbmNpbmdFbGVtZW50KTsKICAgICAgICAgaWYgKHJlZmVyZW5jaW5nRWxlbWVu
dHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlZmVyZW5jZWRF
bGVtZW50KTsKKyAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChkZXBlbmRlbmN5LmtleSk7
CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9CZVJlbW92ZWQpCkBAIC0zMzMs
MTEgKzMxMiw5IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkRWxlbWVudHMo
KQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJUYXJnZXREZXBlbmRlbmNpZXMo
U1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgYXV0byBpdCA9IG1fZWxlbWVu
dERlcGVuZGVuY2llcy5maW5kKCZyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKKyAgICBhdXRvKiByZWZlcmVuY2luZ0VsZW1lbnRz
ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdldCgmcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIGlm
ICghcmVmZXJlbmNpbmdFbGVtZW50cykKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChpdC0+
a2V5ID09ICZyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHJl
ZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChhdXRvKiBlbGVt
ZW50IDogKnJlZmVyZW5jaW5nRWxlbWVudHMpIHsKICAgICAgICAgbV9yZWJ1aWxkRWxlbWVudHMu
YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICBlbGVtZW50LT5jYWxsQ2xlYXJUYXJnZXQoKTsKQEAg
LTM2MSwyMyArMzM4LDI1IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkQWxs
RWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVmCiAgICAgICAgIGVsZW1l
bnQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogfQogCi12b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJn
ZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVm
ZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJlbW92ZShyZWZl
cmVuY2VkRWxlbWVudCk7Ci0gICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3ZlRmlyc3QocmVmZXJl
bmNlZEVsZW1lbnQpOworICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5yZW1vdmUoJnJlZmVyZW5j
ZWRFbGVtZW50KTsKKyAgICBtX3JlYnVpbGRFbGVtZW50cy5yZW1vdmVGaXJzdCgmcmVmZXJlbmNl
ZEVsZW1lbnQpOwogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLXZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpyZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQq
IGVsZW1lbnQpCisKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWdpc3RlclNWR0ZvbnRG
YWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9zdmdGb250
RmFjZUVsZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudHMuYWRk
KCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucmVnaXN0ZXJT
VkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZh
Y2VFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChtX3N2Z0ZvbnRGYWNlRWxlbWVudHMu
Y29udGFpbnMoZWxlbWVudCkpOwotICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5yZW1vdmUoZWxl
bWVudCk7CisgICAgQVNTRVJUKG1fc3ZnRm9udEZhY2VFbGVtZW50cy5jb250YWlucygmZWxlbWVu
dCkpOworICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQorCiAj
ZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0
ZW5zaW9ucy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCmlu
ZGV4IDZhNTI3NzA0OWM1YjI1NTAyNWY5OWE3MmUxOWYyY2UwODFiZDFkZWIuLjVjMjFlNTUyMGZk
NzQzMDY4MGU4N2FjNGU1MDY0NmI2ZGI0YTc2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgKQEAgLTQzLDEwICs0MywxMCBAQCBwdWJsaWM6CiAgICAgZXhw
bGljaXQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKERvY3VtZW50Jik7CiAgICAgflNWR0RvY3VtZW50
RXh0ZW5zaW9ucygpOwogICAgIAotICAgIHZvaWQgYWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVt
ZW50Kik7Ci0gICAgdm9pZCByZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqKTsKKyAg
ICB2b2lkIGFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3Zl
VGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50Jik7CiAKLSAgICB2b2lkIGFkZFJlc291cmNlKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7CisgICAg
dm9pZCBhZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lciYpOwogICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBpZCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlQnlJZChjb25z
dCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKIApAQCAtNjEsMTkgKzYxLDE5IEBAIHB1YmxpYzoK
IAogICAgIFNWR1Jlc291cmNlc0NhY2hlJiByZXNvdXJjZXNDYWNoZSgpIHsgcmV0dXJuICptX3Jl
c291cmNlc0NhY2hlOyB9CiAKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZFbGVtZW50
c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdDsK
LSAgICB2b2lkIGFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVu
Y2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICB2b2lkIHJl
bW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqKTsKKyAgICBIYXNo
U2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1l
bnQmIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdDsKKyAgICB2b2lkIGFkZEVsZW1lbnRSZWZlcmVu
Y2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQmIHJl
ZmVyZW5jZWRFbGVtZW50KTsKKyAgICB2b2lkIHJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JF
bGVtZW50KFNWR0VsZW1lbnQmKTsKICAgICB2b2lkIHJlYnVpbGRBbGxFbGVtZW50UmVmZXJlbmNl
c0ZvclRhcmdldChTVkdFbGVtZW50Jik7Ci0gICAgdm9pZCByZW1vdmVBbGxFbGVtZW50UmVmZXJl
bmNlc0ZvclRhcmdldChTVkdFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVBbGxFbGVtZW50UmVm
ZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Jik7CiAKICAgICB2b2lkIGNsZWFyVGFyZ2V0RGVw
ZW5kZW5jaWVzKFNWR0VsZW1lbnQmKTsKICAgICB2b2lkIHJlYnVpbGRFbGVtZW50cygpOwogCiAj
aWYgRU5BQkxFKFNWR19GT05UUykKICAgICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVu
dCo+JiBzdmdGb250RmFjZUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFjZUVs
ZW1lbnRzOyB9Ci0gICAgdm9pZCByZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFj
ZUVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9u
dEZhY2VFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdG
b250RmFjZUVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQo
U1ZHRm9udEZhY2VFbGVtZW50Jik7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTk1LDExICs5NSwx
MSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBIYXNoTWFwIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW5k
aW5nIHJlc291cmNlcy4gUGVuZGluZyByZXNvdXJjZXMsIGFyZSBzdWNoCiAgICAgLy8gd2hpY2gg
YXJlIHJlZmVyZW5jZWQgYnkgYW55IG9iamVjdCBpbiB0aGUgU1ZHIGRvY3VtZW50LCBidXQgZG8g
Tk9UIGV4aXN0IHlldC4KICAgICAvLyBGb3IgaW5zdGFuY2UsIGR5bmFtaWNhbGx5IGJ1aWxkIGdy
YWRpZW50cyAvIHBhdHRlcm5zIC8gY2xpcHBlcnMuLi4KLSAgICB2b2lkIGFkZFBlbmRpbmdSZXNv
dXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGRQZW5k
aW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCYpOwogICAgIGJvb2wg
aXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwotICAg
IGJvb2wgaXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgaWQp
IGNvbnN0OwotICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShFbGVt
ZW50Kik7Ci0gICAgdm9pZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVu
dCopOworICAgIGJvb2wgaXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCYsIGNvbnN0IEF0b21pY1N0
cmluZyYgaWQpIGNvbnN0OworICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3Nz
aWJsZShFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJj
ZXMoRWxlbWVudCYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRWxlbWVudHM+IHJlbW92
ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKTsKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3Igc2NoZWR1bGluZyBhIHBlbmRpbmcg
cmVzb3VyY2UgdG8gYmUgcmVtb3ZlZC4KQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAg
RWxlbWVudCogcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbE1hcChj
b25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGlzRWxlbWVudFdpdGhQ
ZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGlzRWxlbWVudFdpdGhQ
ZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVu
ZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFsKGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDcwMTg5ODFi
OTJiOTZkZmJiMDVhYmE1NWQxMWU2YmMxZWYxNzE4YTguLmRlMDFhMjJkZDhhODgyMDAyMWI2OWQw
ZGQ3YWUwZGJlNTlkOWZmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTI5NCw3
ICsyOTQsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIG1fc3ZnUmFyZURh
dGEgPSBudWxscHRyOwogICAgIH0KICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5yZWJ1aWxkQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwotICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9y
VGFyZ2V0KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92
ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0aGlzKTsKIH0KIAogaW50IFNWR0VsZW1l
bnQ6OnRhYkluZGV4KCkgY29uc3QKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiAKICAgICBpZiAod2FzSW5E
b2N1bWVudCkgewogICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5jbGVh
clRhcmdldERlcGVuZGVuY2llcygqdGhpcyk7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOwor
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50
UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7CiAgICAgfQogICAgIGludmFsaWRhdGVJbnN0YW5j
ZXMoKTsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6YnVpbGRQZW5k
aW5nUmVzb3VyY2VzSWZOZWVkZWQoKQogICAgICAgICBBU1NFUlQoY2xpZW50RWxlbWVudC0+aGFz
UGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgaWYgKGNsaWVudEVsZW1lbnQtPmhhc1BlbmRp
bmdSZXNvdXJjZXMoKSkgewogICAgICAgICAgICAgY2xpZW50RWxlbWVudC0+YnVpbGRQZW5kaW5n
UmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3Vy
Y2VzSWZQb3NzaWJsZShjbGllbnRFbGVtZW50KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuY2xl
YXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgqY2xpZW50RWxlbWVudCk7CiAgICAgICAg
IH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRl
eCBlYzc0YThkMGU1YWI2YjVhZDk4YTg4ZTc4ZTEyYzRiYTYyNWQ2YWU3Li5iMmMzMjM3Y2E5ZjNk
NmQ0YTM2NWViY2Q5MGRjODlhMGQ3Mzg4OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6
Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogICAgICAgICBtX2NhY2hlZEltYWdlID0gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVB
bGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhp
cyk7CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnJlcXVlc3RJbWFnZVJlc291cmNlKCkK
QEAgLTEwNywxMyArMTA3LDEzIEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkUGVuZGlu
Z1Jlc291cmNlKCkKICAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVl
c3RJbWFnZVJlc291cmNlKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNv
dXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMo
KSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhcmdldC0+aXNTVkdFbGVtZW50KCkpIHsK
KyAgICB9IGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCp0YXJnZXQpKSB7CiAgICAgICAgIC8vIFJl
Z2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNo
YW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3Jl
cGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFy
Z2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRo
aXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9CiAKICAgICBpbnZhbGlk
YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4IGI4
YmE5YjA3ZmUyYTY0MDkzNjlmMWFjODQ1MmI1YTVhZThhYzY4ZWMuLjQ2Mzg4MDYxNDlkNWY1M2Nh
YjhmOGMzM2I3MzNmZDY0ZjQ4YWVmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGb250RmFjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCkBAIC0yNzgsNyArMjc4LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2QK
ICAgICAgICAgQVNTRVJUKCFtX2ZvbnRFbGVtZW50KTsKICAgICAgICAgcmV0dXJuIEluc2VydGlv
bkRvbmU7CiAgICAgfQotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlZ2lz
dGVyU1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KCp0aGlzKTsKIAogICAgIHJlYnVp
bGRGb250RmFjZSgpOwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwpAQCAtMjkwLDcgKzI5MCw3
IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBy
b290UGFyZW50KQogCiAgICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgewogICAgICAg
ICBtX2ZvbnRFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkudW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkudW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxl
bWVudCgqdGhpcyk7CiAgICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygp
LmNsZWFyKCk7CiAKICAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlU3R5
bGVTaGVldEVudmlyb25tZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3Bw
CmluZGV4IGZmN2Q0ODcyZDY5NDU2N2U3NTJjM2ZjZmE3MDkwZjdjZmNkYTQ3MTguLmRmMjUyYmYw
MmI2OGI0OGQ2Njk5OTk4YmU4ZDVmMDJhNWQyNTFkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
UGF0aEVsZW1lbnQuY3BwCkBAIC02NSwxNyArNjUsMTcgQEAgdm9pZCBTVkdNUGF0aEVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZl
cmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlk
KTsKICAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVu
ZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGlm
IChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0aGlz
LCBpZCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1Bl
bmRpbmdSZXNvdXJjZSgqdGhpcywgaWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IGlmICghaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhp
cyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkgeworICAgIH0gZWxzZSBp
ZiAoaXM8U1ZHRWxlbWVudD4oKnRhcmdldCkpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0
aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZF
bGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cg
aW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgZG93
bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgZG93bmNhc3Q8
U1ZHRWxlbWVudD4oKnRhcmdldCkpOwogICAgIH0KIAogICAgIHRhcmdldFBhdGhDaGFuZ2VkKCk7
CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNv
dXJjZSgpCiAKIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygp
CiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0
UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQog
CiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR01QYXRoRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhFbGVtZW50LmNwcAppbmRleCBlMjIzMGY0MTJkZDgxMzViZjI1NzYxNWJlYjhlZTQ4NDc3ZmRl
MDRlLi5mNzE2NDcwYzJiMzk1MGRiMjI1ODEwYmMzMGVjNGExODgyNzBlNzMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFNWR1Bh
dGhFbGVtZW50OjppbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKQogewogICAgIC8vIDxtcGF0
aD4gY2FuIG9ubHkgcmVmZXJlbmNlIDxwYXRoPiBidXQgdGhpcyBkZXBlbmRlbmN5IGlzIG5vdCBo
YW5kbGVkIGluCiAgICAgLy8gbWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0
aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBhdGggZGVwZW5kZW5jaWVzIG1hbnVhbGx5LgotICAgIGlm
IChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVzID0gZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KHRoaXMpKSB7Cisg
ICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMp
KSB7CiAgICAgICAgIGZvciAoYXV0byogZWxlbWVudCA6ICpkZXBlbmRlbmNpZXMpIHsKICAgICAg
ICAgICAgIGlmIChpczxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAgICAg
ICBkb3duY2FzdDxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KS50YXJnZXRQYXRoQ2hhbmdlZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IGJmYTkxNzJlODkxY2M2NDMw
OGYzNDYyNGU3NGU1ZWU5YjNhN2EzMjguLjk0MDUwZGI5M2FhZWZlZmMyOTRjNDc0YjYxZGViNGQx
ZjZhM2VkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5
LDcgQEAgaW5saW5lIFNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3UKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShT
VkdOYW1lczo6c3ZnVGFnKSk7CiAgICAgcmVnaXN0ZXJBbmltYXRlZFByb3BlcnRpZXNGb3JTVkdT
VkdFbGVtZW50KCk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja3MoKnRoaXMpOwogfQogCiBSZWY8U1ZHU1ZHRWxlbWVudD4gU1ZHU1ZHRWxlbWVu
dDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVu
dCkKQEAgLTk2LDE0ICs5NiwxNCBAQCBTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCgpCiB7
CiAgICAgaWYgKG1fdmlld1NwZWMpCiAgICAgICAgIG1fdmlld1NwZWMtPnJlc2V0Q29udGV4dEVs
ZW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVt
b3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIoKnRoaXMpOwogfQogCiB2b2lkIFNWR1NW
R0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9j
dW1lbnQmIG5ld0RvY3VtZW50KQogewotICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBvbGREb2N1bWVudC51bnJl
Z2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVu
dCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICBT
VkdHcmFwaGljc0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdE
b2N1bWVudCk7CiB9CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVu
dD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5
bAogTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50OjppbnNl
cnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIHsKICAgICBpZiAocm9vdFBhcmVu
dC5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmFkZFRpbWVDb250YWluZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLmFkZFRpbWVDb250YWluZXIoKnRoaXMpOwogICAgICAgICBpZiAoIWRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFyZUFuaW1hdGlvbnNQYXVzZWQoKSkKICAgICAg
ICAgICAgIHVucGF1c2VBbmltYXRpb25zKCk7CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBOb2RlOjpJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50byhD
b250YWluZXJOb2RlJiBybwogdm9pZCBTVkdTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWlu
ZXJOb2RlJiByb290UGFyZW50KQogewogICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkp
IHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNv
bnRhaW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlVGltZUNvbnRhaW5lcigqdGhpcyk7CiAgICAgICAgIHBhdXNlQW5pbWF0aW9ucygpOwog
ICAgIH0KICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKaW5kZXggYjA4MzczNjE1MTM3MDY4MzAx
YWUwZmRlYjdlOWM5YTk5MDlmMmE0MS4uNmY5ZDZlM2ZjMWYxMjNmZGZmNzFkZWE1ZGY4YmVhNDJm
MWFiMTJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCkBAIC0xNzIsNyAr
MTcyLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6ZGV0YWNoVGFyZ2V0KCkKICAgICBTdHJpbmcg
aWQ7CiAgICAgU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVm
KCksIGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAgICAgIGRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhp
cyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShpZCwgKnRoaXMpOwogfQogCiB2b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlKCkKICAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVz
b3VyY2UoaWQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgQVNTRVJUKGhhc1BlbmRp
bmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCmluZGV4IDc1MTdlOGI4YTYwMTBlNmFhNmQ3ZTQ0Mzc4
OWQ4OWZmODQ2OGRiNDEuLjgwNmFlODc2NTg5ZjM3ZmQ5M2MzMTNjOWUyOGIwYzY2OTc1MjMwMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKICNpbmNsdWRlICJTVkdEb2N1
bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1Bh
dGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIFNWR1RleHRQYXRoRWxlbWVudDo6flNW
R1RleHRQYXRoRWxlbWVudCgpCiAKIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpjbGVhclJlc291
cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1l
bnQoKnRoaXMpOwogfQogCiBib29sIFNWR1RleHRQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xNTksMTcgKzE2MCwxNyBA
QCB2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgIEVs
ZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJp
bmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIGlmICghdGFyZ2V0KSB7CiAgICAgICAg
IC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcg
dGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0aGlzLCBpZCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShp
ZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5k
aW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0YXJnZXQtPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcpKSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGgg
dGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxl
bWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGlu
Zm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIGRvd25j
YXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMsIGRvd25jYXN0PFNW
R1BhdGhFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAKaW5kZXggNWU3MzIzODBjNWQ4MDgzODhmMzhiYThjMzAxYTJlZTljZTk5ODMz
YS4uZGRmNjU2YzI1MWU4ZTNkMjBiZmQ0OTVjNGJjM2YxMTA5MDcwYWE2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgU1ZHVXNlRWxl
bWVudDo6dXBkYXRlU2hhZG93VHJlZSgpCiAgICAgU3RyaW5nIHRhcmdldElEOwogICAgIGF1dG8q
IHRhcmdldCA9IGZpbmRUYXJnZXQoJnRhcmdldElEKTsKICAgICBpZiAoIXRhcmdldCkgewotICAg
ICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2Uo
dGFyZ2V0SUQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRQZW5kaW5nUmVzb3VyY2UodGFyZ2V0SUQsICp0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmNwcAppbmRleCA4NjJkNjhhYjRkNTI3MDM4YTQ3YzM1MjE3OTUzYTg5YTg1M2E3OGY0Li42ZTg1
ODNiYmE0Y2JjM2IzMGZjYzg2MTNkY2QyMzVkN2IyNTUyNjRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMTU3LDcgKzE1Nyw3IEBA
IFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogCiB2b2lkIFNWR1NNSUxFbGVtZW50
OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7Cisg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJl
bmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiB2b2lkIFNWR1NNSUxFbGVtZW50OjpjbGVhclRh
cmdldCgpCkBAIC0xOTIsMTcgKzE5MiwxNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpidWlsZFBl
bmRpbmdSZXNvdXJjZSgpCiAKICAgICBpZiAoIXN2Z1RhcmdldCkgewogICAgICAgICAvLyBEbyBu
b3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVz
b3VyY2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1Bl
bmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgqdGhpcywgaWQpKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMp
OworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGlu
Z1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291
cmNlcygpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVz
IHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBo
cmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcg
bm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMs
IHN2Z1RhcmdldCk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFk
ZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgKnN2Z1RhcmdldCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOWY4YzI0YTIyOTI5ZTFjYzkx
YWQzZmIzYThlNjI4ZWQzMTgzNmJmZS4uYzUwMTM0NjFkNGIxMzIwMTg0ODJlZDc1YzRiYzkxOWFm
YjA0MDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTM3MCw3ICsx
MzcwLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6bWFya2VyQ291bnRGb3JO
b2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWEKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IFN5bnRheEVycm9yIH07CiAKICAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9y
KCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwotICAgIHJldHVybiBub2RlLmRvY3Vt
ZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7Cisg
ICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBtYXJr
ZXJUeXBlcykuc2l6ZSgpOwogfQogCiBFeGNlcHRpb25PcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
Kj4gSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5
cGUsIHVuc2lnbmVkIGluZGV4KQpAQCAtMTM4Myw3ICsxMzgzLDcgQEAgRXhjZXB0aW9uT3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+IEludGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwgY29u
c3QgU3RyaW4KIAogICAgIG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVF
ZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5v
ZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1h
cmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSwgbWFya2Vy
VHlwZXMpOwogICAgIGlmIChtYXJrZXJzLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIG1hcmtlcnNbaW5kZXhdOwpAQCAtMTQzOSw3ICsxNDM5LDcg
QEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmR1bXBNYXJrZXJSZWN0cyhjb25zdCBT
dHJpbmcmIG1hcmtlclR5cGVTdHJpbmcpCiB2b2lkIEludGVybmFsczo6YWRkVGV4dE1hdGNoTWFy
a2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKIHsKICAgICByYW5nZS5vd25l
ckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAg
cmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIoJnJhbmdl
LCBpc0FjdGl2ZSk7CisgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0
TWF0Y2hNYXJrZXIocmFuZ2UsIGlzQWN0aXZlKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxzOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKQEAg
LTI2MTUsNDIgKzI2MTUsNiBAQCB2b2lkIEludGVybmFsczo6c2V0VG9wQ29udGVudEluc2V0KGZs
b2F0IGNvbnRlbnRJbnNldCkKICAgICBkb2N1bWVudC0+cGFnZSgpLT5zZXRUb3BDb250ZW50SW5z
ZXQoY29udGVudEluc2V0KTsKIH0KIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLQotdm9p
ZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJr
aXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0KLXZvaWQgSW50
ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXREaWRF
bnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQotdm9pZCBJbnRlcm5hbHM6
OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndlYmtpdFdpbGxFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi12b2lkIEludGVybmFsczo6d2Via2l0
RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi0jZW5kaWYKLQogdm9pZCBJbnRlcm5hbHM6OnNldEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAppbmRleCAyYjgxNDYwNGRjNWVlYzdiMzhlNzk0NjMzMDAzMjg3NWJkYWVk
ZjAyLi5kYTI3NzRlMGRlNjczM2I2ZjAxZjhiNGRhMmExYjZkMGQ0NzFkOGQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTM1NiwxMyArMzU2LDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOwogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQotICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCYpOwotICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50
Jik7Ci0gICAgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQm
KTsKLSAgICB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Jik7
Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JUIHZvaWQgc2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAKICAgICB2b2lkIHJl
Z2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgU3Ry
aW5nJiBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGU4N2E3
NGM1OGFjNWMyYzZmMWY5OGIxZWM4YmVmYWU0MTExOTEyMWQuLmM4MzAwOTAyM2NhY2FhNTE5YTFm
NDAxMWI4OTA5OTJhNmZhMmI3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
QEAgLTMzMCwxMSArMzMwLDYgQEAgZW51bSBFdmVudFRocm90dGxpbmdCZWhhdmlvciB7CiAKICAg
ICB2b2lkIHNldFRvcENvbnRlbnRJbnNldCh1bnJlc3RyaWN0ZWQgZmxvYXQgY29udGVudEluc2V0
KTsKIAotICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXRXaWxsRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwotICAgIFtDb25kaXRpb25h
bD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lk
IHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLSAg
ICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0KICAgICB2b2lkIHNldEFwcGxpY2F0aW9u
Q2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwogCiAgICAgdm9pZCBy
ZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KERPTVN0cmlu
ZyBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDgyOTAzMTQwNWRiYjdm
N2ViNDEzOWE0N2YyMDViZTZkNjdjNGRhMGEuLmJiNGExODVmZDMwNzQzMDE0YzVjODk5NDhkYjNl
MDRjNDY0YjRhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTkxLDcgKzkxLDcg
QEAgRXhjZXB0aW9uT3I8UmVmPFdvcmtlcj4+IFdvcmtlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIEpTQzo6UnUKICAgICB3b3JrZXItPm1fc2hvdWxkQnlwYXNzTWFp
bldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID0gc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVu
dFNlY3VyaXR5UG9saWN5OwogCiAgICAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90IGV4
aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBvYmpl
Y3QgaXMgbm90IGNvbGxlY3RlZCwgbm9yIGFyZSBpdHMgZXZlbnQgbGlzdGVuZXJzLgotICAgIHdv
cmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5wdHIoKSk7CisgICAgd29ya2VyLT5zZXRQ
ZW5kaW5nQWN0aXZpdHkod29ya2VyLmdldCgpKTsKIAogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dvcmtlcnMuaHRtbCNvZmZpY2lhbC1tb21lbnQtb2YtY3Jl
YXRpb24KICAgICB3b3JrZXItPm1fd29ya2VyQ3JlYXRpb25UaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkK
ICAgICB9CiAgICAgbV9zY3JpcHRMb2FkZXIgPSBudWxscHRyOwogCi0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApp
bmRleCA5YTRmZGI3ZDMxMzRmMGFhMTcyZGE1MDYwZjU5ZmVmZDQ0OGJmMzU0Li5hZDI3NWI2OGE1
NDUyZWJkMDA4MzcxMzg0ZmE5Yzk0ZjJkYTE0YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKQEAgLTE5MCw5ICsxOTAsOSBAQCBFeGNlcHRpb25PcjxEb2N1bWVudCo+IFhN
TEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCgpCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1l
bnQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSFRNTCkK
LSAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0
ZSgwLCBtX3VybCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gSFRNTERv
Y3VtZW50OjpjcmVhdGUobnVsbHB0ciwgbV91cmwpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50OjpjcmVhdGUoMCwgbV91
cmwpOworICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50Ojpj
cmVhdGUobnVsbHB0ciwgbV91cmwpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNldCBMYXN0LU1v
ZGlmaWVkLgogICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50LT5zZXRDb250ZW50KG1fcmVz
cG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgIG1f
cmVzcG9uc2VEb2N1bWVudC0+c2V0Q29udGV4dERvY3VtZW50KGRvd25jYXN0PERvY3VtZW50Pigq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSk7CkBAIC00OTAsNyArNDkwLDcgQEAgc3RkOjpvcHRp
b25hbDxFeGNlcHRpb25Pcjx2b2lkPj4gWE1MSHR0cFJlcXVlc3Q6OnByZXBhcmVUb1NlbmQoKQog
ICAgIGlmICghY29udGV4dC5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xp
Y3koKSAmJiAhY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9T
b3VyY2UobV91cmwpKSB7CiAgICAgICAgIGlmICghbV9hc3luYykKICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb25Pcjx2b2lkPiB7IEV4Y2VwdGlvbiB7IE5ldHdvcmtFcnJvciB9IH07Ci0gICAg
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKICAgICAgICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOwogICAgICAgICBtX25ldHdv
cmtFcnJvclRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
T3I8dm9pZD4geyB9OwpAQCAtNzU5LDcgKzc1OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0
dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KCkKICAgICAgICAgLy8gYSByZXF1ZXN0IGlzIGluIHBy
b2dyZXNzIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0ZW5lcnMgYWxpdmUsCiAgICAg
ICAgIC8vIGFuZCB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBKYXZhU2NyaXB0IHdyYXBwZXIu
CiAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnRvcE9yaWdpbigpLmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkpOwog
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSU3luY2hyb25vdXNs
eShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwpAQCAtODkzLDcgKzg5Myw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CiAgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVwb3J0
RXh0cmFNZW1vcnkobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKIAotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5cGUo
Y29uc3QgU3RyaW5nJiBvdmVycmlkZSkKQEAgLTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgLy8gSW4g
Y2FzZSBkaWRGYWlsIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IG9uIGFuIGFzeW5jaHJvbm91cyBY
SFIgY2FsbCwgbGV0J3MgZGlzcGF0Y2ggbmV0d29yayBlcnJvciBhc3luY2hyb25vdXNseQogICAg
IGlmIChtX2FzeW5jICYmIG1fc2VuZEZsYWcgJiYgIW1fbG9hZGVyKSB7CiAgICAgICAgIG1fc2Vu
ZEZsYWcgPSBmYWxzZTsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5zdG9w
KCk7CiAgICAgICAgIG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKaW5kZXggOGM5MjdiZmYzZWViNjkw
ODFmMDQ3YmYwZjI2ZTZkOGVlZTkyYzVjZC4uZmNkYzAyYzUyMTRkMzk1MGJmYmQ0Y2NmZjczZDE4
NWIyNjY1NTUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAK
IAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhU
TUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlhNTE5TTmFtZXMuaCIKQEAgLTIwMSw3ICsyMDAsNyBAQCBp
bmxpbmUgYm9vbCBub2RlTWF0Y2hlc0Jhc2ljVGVzdChOb2RlJiBub2RlLCBTdGVwOjpBeGlzIGF4
aXMsIGNvbnN0IFN0ZXA6Ok5vZGVUZQogICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3RhckF0b20o
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSB8fCBuYW1l
c3BhY2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKTsKIAotICAgICAgICAgICAgaWYgKGlzPEhU
TUxEb2N1bWVudD4obm9kZS5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYgKG5vZGUuZG9j
dW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxF
bGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBQYXRocyB3aXRob3V0IG5h
bWVzcGFjZXMgc2hvdWxkIG1hdGNoIEhUTUwgZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMgZGVz
cGl0ZSB0aG9zZSBoYXZpbmcgYW4gWEhUTUwgbmFtZXNwYWNlLiBOYW1lcyBhcmUgY29tcGFyZWQg
Y2FzZS1pbnNlbnNpdGl2ZWx5LgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSkubG9jYWxOYW1lKCksIG5h
bWUpICYmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUubmFt
ZXNwYWNlVVJJKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCmluZGV4IGE5MGI5
NjUwMDRjNDhmYjQ5MDRlYjdmYzJiZTFiYzYzM2E3MjA2YTUuLmVhMGFjNDAyNTg0NGNiMjE0YjRl
Y2VkMjA5ZWFjOTM2YjgyNzAwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xU
UHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAK
QEAgLTIxLDExICsyMSwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJYU0xUUHJvY2Vzc29yLmgiCiAKICNpZiBFTkFCTEUoWFNMVCkKIAotI2luY2x1ZGUgIlhTTFRQ
cm9jZXNzb3IuaCIKLQogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3ku
aCIKQEAgLTMzLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
blBvbGljeS5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTg3LDcgKzg1LDcgQEAgUmVmPERvY3Vt
ZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5n
JiBzb3VyY2VTdHJpbmcKIAogICAgICAgICBpZiAoRG9jdW1lbnQqIG9sZERvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0VHJhbnNmb3JtU291cmNl
RG9jdW1lbnQob2xkRG9jdW1lbnQpOwotICAgICAgICAgICAgcmVzdWx0LT50YWtlRE9NV2luZG93
RnJvbShvbGREb2N1bWVudCk7CisgICAgICAgICAgICByZXN1bHQtPnRha2VET01XaW5kb3dGcm9t
KCpvbGREb2N1bWVudCk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFNlY3VyaXR5T3JpZ2luUG9s
aWN5KG9sZERvY3VtZW50LT5zZWN1cml0eU9yaWdpblBvbGljeSgpKTsKICAgICAgICAgICAgIHJl
c3VsdC0+c2V0Q29va2llVVJMKG9sZERvY3VtZW50LT5jb29raWVVUkwoKSk7CiAgICAgICAgICAg
ICByZXN1bHQtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKG9sZERvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxs
U2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcAppbmRleCAzNjY5YzJkYTk4NjBi
M2FlYTYwMmM4ZGJmN2QwZmJjOTg3Nzk4Y2RjLi41YWIyNjIwYTc4MTExNzQ3NzBkNzFiNjM1N2Q4
ZDJkOTM5MWE5ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNj
cmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCkBAIC0xMDgsNyArMTA4LDcg
QEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdl
YkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQpCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxs
RW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVt
ZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVs
bFNjcmVlbigqbV9lbGVtZW50KTsKICAgICBtX3BhZ2UtPmhpZGVQYWdlQmFubmVycygpOwogICAg
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKICAgICBtX3BhZ2UtPmZvcmNl
UmVwYWludFdpdGhvdXRDYWxsYmFjaygpOwpAQCAtMTE5LDE0ICsxMTksMTQgQEAgdm9pZCBXZWJG
dWxsU2NyZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbFNjcmVlbigpCiB2b2lkIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQp
OwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtp
dERpZEVudGVyRnVsbFNjcmVlbigpOwogfQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3
aWxsRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIG1fZmlu
YWxGcmFtZSA9IHNjcmVlblJlY3RPZkNvbnRlbnRzKG1fZWxlbWVudC5nZXQoKSk7Ci0gICAgbV9l
bGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9l
bGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4aXRG
dWxsU2NyZWVuKCk7CiAgICAgbV9wYWdlLT5zaG93UGFnZUJhbm5lcnMoKTsKICAgICBtX3BhZ2Ut
PmluamVjdGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudCgpLmJlZ2FuRXhpdEZ1bGxTY3JlZW4obV9w
YWdlLmdldCgpLCBtX2ZpbmFsRnJhbWUsIG1faW5pdGlhbEZyYW1lKTsKIH0KQEAgLTEzNCw3ICsx
MzQsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRXhpdEZ1bGxTY3JlZW4oKQog
dm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIEFT
U0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRv
Y3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJGdWxsU2Ny
ZWVuTWFuYWdlcjo6c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihib29sIGFuaW1hdGluZykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlh
U3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZTlmZjI0
ZjgyZGM1ZDE5ZTU4Y2E5NmRjMTU0NmRkZGIzN2E0M2ZhMy4uOTQ1MDEzZDY4ODczOTdlMmViZjcx
YjE5OWE5NWQ1MjljMzUwNTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXI6OnN0YXJ0VXNlck1lZGlhUmVxdWVzdChVc2VyTWVkaWFSZXF1ZXN0
JgogCiAgICAgYXV0byYgcGVuZGluZ1JlcXVlc3RzID0gbV9ibG9ja2VkUmVxdWVzdHMuYWRkKGRv
Y3VtZW50LCBWZWN0b3I8UmVmUHRyPFVzZXJNZWRpYVJlcXVlc3Q+PigpKS5pdGVyYXRvci0+dmFs
dWU7CiAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50
LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LT5hZGRN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIHBlbmRpbmdSZXF1ZXN0cy5hcHBlbmQo
JnJlcXVlc3QpOwogfQogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXI6Om1lZGlhQ2FuU3RhcnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAg
IHdoaWxlICghcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIWRvY3Vt
ZW50LnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrZWRSZXF1
ZXN0cy5hZGQoJmRvY3VtZW50LCBwZW5kaW5nUmVxdWVzdHMpOwotICAgICAgICAgICAgZG9jdW1l
bnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQu
YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlcjo6cmVtb3ZlTWVkaWFSZXF1ZXN0RnJvbU1hcHMoVXNlck1lZGlhUmVxdQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXF1ZXN0LmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIHJlcXVlc3QuZG9jdW1lbnQoKS0+cmVtb3ZlTWVk
aWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9i
bG9ja2VkUmVxdWVzdHMuYWRkKHJlcXVlc3QuZG9jdW1lbnQoKSwgcGVuZGluZ1JlcXVlc3RzKTsK
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCmluZGV4IGVlYTM4ZjA5ODJjN2VkNTExMjU4MzI3OWEyNjg5MDk2MGNkN2Uy
N2IuLjhjZGVjMjIxN2ZkYTU4Y2I2YzM4NjQ1ZGRkYmQ1ZWJkN2Q4Y2YyN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0zMTcsOSAr
MzE3LDkgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogICAgIEFTU0VSVCghbV9pc0JlaW5n
RGVzdHJveWVkKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKLSAg
ICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0
ZW5lcih0aGlzKTsKKyAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKLSAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3Vt
ZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICBtX3BsdWdpbkVsZW1lbnQtPmRv
Y3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNlcigqdGhpcyk7CiAKICAgICBkZXN0cm95UGx1Z2lu
QW5kUmVzZXQoKTsKIApAQCAtNTkwLDEzICs1OTAsMTMgQEAgdm9pZCBQbHVnaW5WaWV3Ojppbml0
aWFsaXplUGx1Z2luKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+
ZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcGx1
Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIG1fcGx1
Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIAogI2lmIEVO
QUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCiAgICAgSFRNTFBsdWdJ
bkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbklt
YWdlRWxlbWVudD4oKm1fcGx1Z2luRWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlz
dGVuZXIubW0KaW5kZXggYWY1YWMyZjI4OWJjMWIxMjA0NjZjNTljMDI3OTA2ZWMxNDgxNjVlNy4u
NTM3Y2M2NjgwNWQ0OWJlMGVkMGZiNDFmNjA5MDYzNWU2Yjk5NWFmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVlbkxpc3Rl
bmVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktp
dEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQpAQCAtNDUsMjUgKzQ1LDI1IEBAIC0gKGlkKWluaXRXaXRo
RWxlbWVudDooRWxlbWVudCopZWxlbWVudAogLSAodm9pZCl3ZWJraXRXaWxsRW50ZXJGdWxsU2Ny
ZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53
ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAg
ICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKl9lbGVt
ZW50KTsKIH0KIAogLSAodm9pZCl3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4KIHsKICAgICBpZiAo
X2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVs
bFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9j
dW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogLSAodm9pZCl3ZWJraXRX
aWxsRXhpdEZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50
LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQu
Z2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxT
Y3JlZW4oKTsKIH0KIAogLSAodm9pZCl3ZWJraXREaWRFeGl0RnVsbFNjcmVlbgogewogICAgIGlm
IChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1
bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQtPmRv
Y3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxl
ci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIubW0KaW5kZXggM2YxMDk5NmZjMjZmODY3NjFkODc5MmMwMGE3ZmJmMTJmOGU4ZDdhOC4u
YTIxNmIwYThjZmVhYWYzNTI3ODYzZGM3YmJlODNkZWVhOTFlMWNmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLm1tCkBAIC0yMzYsNyArMjM2LDcgQEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW46KE5TU2Ny
ZWVuICopc2NyZWVuCiAKICAgICBfc2F2ZWRTY2FsZSA9IFtfd2ViVmlldyBfdmlld1NjYWxlRmFj
dG9yXTsKICAgICBbX3dlYlZpZXcgX3NjYWxlV2ViVmlldzoxIGF0T3JpZ2luOk5TTWFrZVBvaW50
KDAsIDApXTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbigqX2VsZW1lbnQpOwogICAgIFtzZWxmIF9kb2N1bWVudF0tPnNl
dEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CiAgICAgW3NlbGYgX2RvY3VtZW50XS0+dXBkYXRl
TGF5b3V0KCk7CiAKQEAgLTI2OSw3ICsyNjksNyBAQCAtICh2b2lkKWZpbmlzaGVkRW50ZXJGdWxs
U2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogICAgICAgICAvLyBTY3JlZW4gdXBkYXRl
cyB0byBiZSByZS1lbmFibGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jawogICAgICAgICBOU0Rp
c2FibGVTY3JlZW5VcGRhdGVzKCk7CiAgICAgICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1h
dGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgICAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRE
aWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgW3Nl
bGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiAgICAgICAgIAogICAg
ICAgICBOU1JlY3Qgd2luZG93Qm91bmRzID0gW1tzZWxmIHdpbmRvd10gZnJhbWVdOwogICAgICAg
ICB3aW5kb3dCb3VuZHMub3JpZ2luID0gTlNaZXJvUG9pbnQ7CkBAIC0zMTMsNyArMzEzLDcgQEAg
LSAodm9pZClleGl0RnVsbFNjcmVlbgogCiAgICAgX2ZpbmFsRnJhbWUgPSBzY3JlZW5SZWN0T2ZD
b250ZW50cyhfZWxlbWVudC5nZXQoKSk7CiAKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRX
aWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBf
ZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBbc2VsZiBfZG9jdW1l
bnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogCiAgICAgaWYgKF9pc0VudGVyaW5n
RnVsbFNjcmVlbikKQEAgLTM1Myw3ICszNTMsNyBAQCAtICh2b2lkKWZpbmlzaGVkRXhpdEZ1bGxT
Y3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCiAgICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRl
cygpOwogCiAgICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxz
ZSk7Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0
RnVsbFNjcmVlbigpOwogICAgIFtfd2ViVmlldyBfc2NhbGVXZWJWaWV3Ol9zYXZlZFNjYWxlIGF0
T3JpZ2luOk5TTWFrZVBvaW50KDAsIDApXTsKIAogICAgIE5TUmVzcG9uZGVyICpmaXJzdFJlc3Bv
bmRlciA9IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDQ2MGU3OGU2ZTFmNzg0ODYw
ZmE3ZGVlNDVmYzEyMDU1ZmE2YTFhOTEuLjg1ZjcyMDEzZWRkNzg0MzFkMWQxNTg1MWMwMDZkOTFh
NWRjYTFjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnRPckFkZFRv
VW5zdGFydGVkTGlzdCgpCiAgICAgLy8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIg
d2lsbCB0cnkgdG8gZGVsaXZlciBkYXRhIGJlZm9yZSB3ZSd2ZQogICAgIC8vIHN0YXJ0ZWQgdGhl
IHBsdWctaW4uCiAgICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFn
ZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBtX3BhcmVudEZyYW1l
LT5kb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICBt
X2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC0yOTEsNyArMjkxLDcgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogICAgICAgICBpbnN0
YW5jZU1hcCgpLnJlbW92ZShtX2luc3RhbmNlKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1RvU3Rh
cnQpCi0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+cmVt
b3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAogICAgIHN0b3AoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0YWFhMDkyOGM4MmIyNTlmNDEzNWM5MmZlMWY3
MTBmOTVjMTJiOWMyLi5kNWZjYWFmN2ZkZjFhMWZkODRhMTViZjVmZDYyM2U3YzExYmQ4NjVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNzUwNiwxMyArNzUwNiwxMyBAQCB2
b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRTZXRQYXJlbnRXaW5kb3coSFdORCBob3N0V2lu
ZG93KQogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEVudGVyRnVsbFNjcmVlbigp
CiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNjcmVlbkVs
ZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9m
dWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1l
bnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgqbV9mdWxsU2NyZWVuRWxl
bWVudCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudERpZEVudGVyRnVsbFNj
cmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNj
cmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5k
b2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoKm1fZnVsbFNjcmVl
bkVsZW1lbnQpOwogfQogCiB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1
bGxTY3JlZW4oKQpAQCAtNzUyNCw3ICs3NTI0LDcgQEAgdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVu
Q2xpZW50V2lsbEV4aXRGdWxsU2NyZWVuKCkKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVu
dERpZEV4aXRGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7
Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNj
cmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2Ny
ZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
Km1fZnVsbFNjcmVlbkVsZW1lbnQpOwogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBudWxscHRy
OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319840</attachid>
            <date>2017-09-03 22:55:24 -0700</date>
            <delta_ts>2017-09-03 22:58:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170903225523.patch</filename>
            <type>text/plain</type>
            <size>269234</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM3N2FlNzhmMzgzOWY2
MTY0NWI1MDA4ZGY2YjdiYjdjMGI4ZWYyMi4uODUyOWEwYzI5ZDFiNmIwNjJlNDNlYmI5M2FhYjkx
M2RjOWYzMzVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcj
dXRmOCgpIGFsbG9jYXRlcyBuZXcgQ1N0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhMTRmMTQyZGZiNTJhNmU3
NDAxYzEyNjk0NzdmNDBlNzk4YTNmMzE4Li4yYjYwMjc0NmJkMWViNmExYjM1ZDAyMTBlOWIwY2Y4
ODZlODRmMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIg
dGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBz
dHlsZSBpc3N1ZXMgaW4gdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCBhYzI2YThlNmZhYTgwZjUyYzE1MjEwMjY5N2FiMjQyYzNkNmRlYWIy
Li43MmI1ODUwYjIwNTM2YTg3NzQ1MDdjMDViZTg0NTgwYTVjNDk5MTU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTIgQEAKIDIwMTctMDktMDMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFu
IHBvaW50ZXJzIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwogICAgICAgICBbQ29jb2FdIFRpZHkgYSBmZXcgdGhp
bmdzIGluIGxlZ2FjeSBXZWJIVE1MVmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjgwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCAzODVkOTRkOWI5MjQ5NzI4NTU1
MmI5ZWU3ZTY2NGQ4MTY2MjFjZWI4Li43MjU3MTNkNTQzZWJmNTNmYTAzN2VkZWYwNTgwZWQyYTll
YzFkM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxl
UGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBs
ZVBheVNlc3Npb24uY3BwCkBAIC02OTksNyArNjk5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBw
bGVQYXlTZXNzaW9uOjpiZWdpbigpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAot
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRB
dXRob3JpemF0aW9uUgogICAgIH0KIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBib29s
IEFwcGxlUGF5U2Vzc2lvbjo6aXNGaW5hbFN0YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNz
aW9uOjpkaWRSZWFjaEZpbmFsU3RhdGUoKQogewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7
Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hl
U3RvcmFnZS5jcHAKaW5kZXggNDE1MzUxOGM3MmU4YTQ2ZmQ4MjY3MWY4MTJlOWU3Y2E4MDU2MjEx
YS4uZTNkYWRkMTBkMTExMTY3YzE1NTNkNWI4YWY2NmU4NWIyNGI5NGU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTAxLDcgKzEwMSw3
IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZv
LCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRp
bmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHN0YXJ0U2VxdWVudGlhbE1hdGNoKGNvcHlDYWNo
ZXMobV9jYWNoZXMpLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgcHJv
bWlzZSA9IFdURk1vdmUocHJvbWlzZSldKEV4Y2VwdGlvbk9yPEZldGNoUmVzcG9uc2UqPiYmIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTEzLDcgKzExMyw3IEBA
IHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZvLCBD
YWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxGZXRjaFJlc3BvbnNlPj4o
KnJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lk
IENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0
aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgIGlmIChvcmlnaW4uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+cmV0cmlldmVDYWNoZXMob3JpZ2luLCBt
X3VwZGF0ZUNvdW50ZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShDYWNo
ZUluZm9zT3JFcnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9pc1N0b3Bw
ZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2
b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgIH0pOwogfQogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUMK
ICAgICAgICAgU3RyaW5nIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOwogICAgICAgICBBU1NFUlQo
IW9yaWdpbi5pc051bGwoKSk7CiAKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX2Nvbm5lY3Rpb24t
Pm9wZW4ob3JpZ2luLCBuYW1lLCBbdGhpcywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlz
ZSldKGNvbnN0IENhY2hlSWRlbnRpZmllck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzVmFsdWUoKSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8RE9NQwog
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy5hcHBlbmQoV1RGTW92ZShjYWNoZSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIENhY2hlU3Rv
cmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURlZmVycmVkPElETEJv
b2xlYW4+JiYgcAogICAgICAgICBTdHJpbmcgb3JpZ2luID0gdGhpcy0+b3JpZ2luKCk7CiAgICAg
ICAgIEFTU0VSVCghb3JpZ2luLmlzTnVsbCgpKTsKIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1f
Y29ubmVjdGlvbi0+cmVtb3ZlKG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRlbnRpZmllcigpLCBbdGhp
cywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGNvbnN0IENhY2hlSWRlbnRpZmll
ck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVk
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTIzOCw3ICsy
MzgsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9N
UHJvbWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcAogICAgICAgICAgICAgICAgICAgICBwcm9t
aXNlLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICBtX2NhY2hlcy5yZW1v
dmUocG9zaXRpb24pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9ET01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlLmNwcAppbmRleCA0YmQ3YzUxMDdkMjBjYzdiZWIzNDE3ODFlOTU0ZjI4N2VjMzIzMjdlLi5i
YmE0ZTc2MWVlNjRkNTI5NmNkYzNiZWM0ZDM0NGE0ZTNmOTZiZjU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgRE9N
Q2FjaGU6OnB1dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjxGZXRjaFJlc3BvbnNlPiYmIHJlc3Bv
bnNlLCBET01Qcm9taXNlCiAgICAgfQogCiAgICAgaWYgKHJlc3BvbnNlLT5pc0xvYWRpbmcoKSkg
ewotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHJlc3BvbnNlLT5jb25zdW1lQm9keVdoZW5Mb2FkZWQo
W3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KSwg
cmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKSwgdGhpc10oRXhjZXB0aW9uT3I8UmVmUHRyPFNo
YXJlZEJ1ZmZlcj4+JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QocmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBET01DYWNoZTo6cHV0
KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVBy
b21pc2UKICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwOSw3ICs0
MDksNyBAQCB2b2lkIERPTUNhY2hlOjprZXlzKHN0ZDo6b3B0aW9uYWw8UmVxdWVzdEluZm8+JiYg
aW5mbywgQ2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpbwogCiB2b2lkIERPTUNhY2hlOjpyZXRyaWV2
ZVJlY29yZHMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKT4m
JiBjYWxsYmFjaykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPnJldHJpZXZlUmVjb3Jkcyht
X2lkZW50aWZpZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRz
T3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBE
T01DYWNoZTo6cmV0cmlldmVSZWNvcmRzKFdURjo6RnVuY3Rpb248dm9pZChzdGQ6Om9wdGlvbmFs
PEV4Y2VwdGlvbj4mJik+JiYKICAgICAgICAgICAgICAgICB1cGRhdGVSZWNvcmRzKFdURk1vdmUo
cmVzdWx0LnZhbHVlKCkpKTsKICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtNDU3LDcgKzQ1Nyw3
IEBAIFZlY3RvcjxDYWNoZVN0b3JhZ2VSZWNvcmQ+IERPTUNhY2hlOjpxdWVyeUNhY2hlV2l0aFRh
cmdldFN0b3JhZ2UoY29uc3QgRmV0Y2hSZXF1CiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoRGVsZXRl
T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVRdWVyeU9wdGlvbnMm
JiBvcHRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uT3I8Ym9vbD4mJik+JiYgY2Fs
bGJhY2spCiB7Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uLT5iYXRjaERlbGV0ZU9wZXJhdGlvbiht
X2lkZW50aWZpZXIsIHJlcXVlc3QuaW50ZXJuYWxSZXF1ZXN0KCksIFdURk1vdmUob3B0aW9ucyks
IFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRJZGVudGlmaWVyc09y
RXJyb3ImJiByZXN1bHQpIHsKICAgICAgICAgaWYgKCFtX2lzU3RvcHBlZCkgewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIERPTUNh
Y2hlOjpiYXRjaERlbGV0ZU9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIENh
Y2hlUXVlcnlPcHRpbwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxiYWNr
KCFyZXN1bHQudmFsdWUoKS5pc0VtcHR5KCkpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiAgICAgfSk7CiB9CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIERPTUNhY2hlOjpiYXRjaFB1
dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2UmIHJl
cwogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJl
Y29yZHMsIFdURjo6RnVuY3Rpb248dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFj
aykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPmJhdGNoUHV0T3BlcmF0aW9uKG1faWRlbnRp
ZmllciwgV1RGTW92ZShyZWNvcmRzKSwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKFJlY29yZElkZW50aWZpZXJzT3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1f
aXNTdG9wcGVkKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQpAQCAtNTA2
LDcgKzUwNiw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keU93bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5T3duZXIuY3BwCmluZGV4IDBmYjJkZjNjZjgxZWIzYmE4NTk5MDg2ZDg2YzFjNWZmYjBhN2Fm
NTQuLmIwYjlmNGM3MjFmMTZmNjM3ZDQwMWY3Y2YwNGQ4YWMxMTdkYjQzMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBGZXRjaEJvZHlPd25lcjo6bG9hZEJsb2IoY29uc3QgQmxvYiYgYmxvYiwg
RmV0Y2hCb2R5Q29uc3VtZXIqIGNvbnN1bWVyKQogICAgICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hC
b2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEZl
dGNoQm9keU93bmVyOjpmaW5pc2hCbG9iTG9hZGluZygpCiAgICAgQVNTRVJUKG1fYmxvYkxvYWRl
cik7CiAKICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2
b2lkIEZldGNoQm9keU93bmVyOjpibG9iTG9hZGluZ1N1Y2NlZWRlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKaW5kZXggMmFhN2NiYTBl
YzM4YmUyNTFhMmEwMmFkM2I3OTIwMGZhMmNkM2IxNC4uZWZiNTBjMDMyNWYxMWVhN2VhZWQ0NjY1
MWQ4YjZjZThlOTdkZTEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHlTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5U291cmNlLmNwcApAQCAtNDUsMTIgKzQ1LDEyIEBAIGJvb2wgRmV0Y2hCb2R5U291
cmNlOjppc1JlYWRhYmxlU3RyZWFtTG9ja2VkKCkgY29uc3QKIAogdm9pZCBGZXRjaEJvZHlTb3Vy
Y2U6OnNldEFjdGl2ZSgpCiB7Ci0gICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KCZt
X2JvZHlPd25lcik7CisgICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93
bmVyKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlTb3VyY2U6OnNldEluYWN0aXZlKCkKIHsKLSAgICBt
X2JvZHlPd25lci51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9ib2R5T3duZXIpOworICAgIG1fYm9k
eU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93bmVyKTsKIH0KIAogdm9pZCBGZXRj
aEJvZHlTb3VyY2U6OmRvU3RhcnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKaW5kZXggY2NlN2E4NzAxYzRmMTZjMDhjOTM1YWYzMDYzMDZiOTIw
NDc5ZTFkYy4uYWRlZDZjODMyZDdhOWI4ZTlkNGIzZDYyMzVmMmFjZGFiMzQxZDQwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCkBAIC0xNzAs
MTIgKzE3MCwxMiBAQCBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjpCb2R5TG9hZGVyKEZldGNo
UmVzcG9uc2UmIHJlc3BvbnNlLCBOb3RpZmljYXRpb25DYWxsYgogICAgIDogbV9yZXNwb25zZShy
ZXNwb25zZSkKICAgICAsIG1fcmVzcG9uc2VDYWxsYmFjayhXVEZNb3ZlKHJlc3BvbnNlQ2FsbGJh
Y2spKQogewotICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX3Jlc3BvbnNlKTsK
KyAgICBtX3Jlc3BvbnNlLnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogRmV0
Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6fkJvZHlMb2FkZXIoKQogewotICAgIG1fcmVzcG9uc2Uu
dW5zZXRQZW5kaW5nQWN0aXZpdHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2UudW5zZXRQ
ZW5kaW5nQWN0aXZpdHkobV9yZXNwb25zZSk7CiB9CiAKIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9k
eUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291
cmNlUmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2UuY3BwCmluZGV4IGMyY2VmYzY5YjA4YWU4MGNhNGI1NzNjOWY5ZjNlMTVkZDI5
NTEzMzYuLmIyZGZjZDg0NTUwNDdjYTdlMjJhYmVlMzY2MjZkY2Y1MThlYTUzZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBA
IC0xMzEsMTIgKzEzMSwxMiBAQCB2b2lkIE1lZGlhU291cmNlOjpzZXRQcml2YXRlQW5kT3BlbihS
ZWY8TWVkaWFTb3VyY2VQcml2YXRlPiYmIG1lZGlhU291cmNlUHJpdmF0ZQogCiB2b2lkIE1lZGlh
U291cmNlOjphZGRlZFRvUmVnaXN0cnkoKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE1lZGlhU291cmNl
OjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkKIHsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIE1lZGlhVGltZSBNZWRp
YVNvdXJjZTo6ZHVyYXRpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA3NDNlY2RiNTk1MGU3MzlhMDc1ZGVh
MjUzOGQ3MjU0MWZiMGUxMDhiLi5jODY0YTA0NzFkMjY4YzZlZGUzZDc3ZjdkMmNlNWQ2NTM5MTU2
NzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0o
KQogICAgICAgICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChtX2lzV2FpdGlu
Z1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4Niw3ICsyODYsNyBAQCB2
b2lkIE1lZGlhU3RyZWFtOjpzdGFydFByb2R1Y2luZ0RhdGEoKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAg
ICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IDE2ODg0ZTM4MjY2ODRjZTc3ODdkNTg2YTg0Zjg4
ZmRjNzkxYzI3ODkuLjhiMjQ1MjQ5YjkzNjZmMzg1YTM4NTk5ODA5MzFiMDcwMGUwMjYwNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLmNwcApAQCAtNjEsNyArNjEsNyBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0
cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxNZWRpYVN0cgog
ICAgIG1fcHJpdmF0ZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNl
cih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogfQog
CiBNZWRpYVN0cmVhbVRyYWNrOjp+TWVkaWFTdHJlYW1UcmFjaygpCkBAIC02OSw3ICs2OSw3IEBA
IE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKICAgICBtX3ByaXZhdGUtPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKIAogICAgIGlmIChhdXRvIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50LT5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5k
ZXggY2MwZTliNTRkMTA1MDg4YmZiNDYxMzkyYjEwZjM5NjZkN2QzMjY5ZC4uNzQ5NTA5ZDJiMjIy
YTAzMWNiYzY2YjE5MTIwYmRjZmRjZjMxNmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTU4LDcgKzU4LDcg
QEAgUmVmPFJUQ0RhdGFDaGFubmVsPiBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0ZDoKICAgICBhdXRvIGNoYW5uZWwgPSBhZG9wdFJlZigq
bmV3IFJUQ0RhdGFDaGFubmVsKGNvbnRleHQsIFdURk1vdmUoaGFuZGxlciksIFdURk1vdmUobGFi
ZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKSk7CiAgICAgY2hhbm5lbC0+c3VzcGVuZElmTmVlZGVkKCk7
CiAgICAgY2hhbm5lbC0+bV9oYW5kbGVyLT5zZXRDbGllbnQoY2hhbm5lbC5nZXQoKSk7Ci0gICAg
Y2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwucHRyKCkpOworICAgIGNoYW5uZWwt
PnNldFBlbmRpbmdBY3Rpdml0eShjaGFubmVsLmdldCgpKTsKICAgICByZXR1cm4gY2hhbm5lbDsK
IH0KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmNsb3NlKCkKIAog
ICAgIG1faGFuZGxlci0+Y2xvc2UoKTsKICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKIH0KIAogdm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZShSVENEYXRh
Q2hhbm5lbFN0YXRlIG5ld1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCA5MGIyMWVhNjIzYzE0
N2U0NTkxMmI1OTgxNWJkY2ExZDdkZDcwZDg5Li42ZTJmYTg3MzYzNzZkNTgxYzQwOWYyODM5ZjYy
ODM4MTAyNDBjYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNjIsMTIgKzYyLDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBQZWVyQ29ubmVjdGlvbjsKIAogUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBSVENQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7
Ci0gICAgUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpu
ZXcgUlRDUGVlckNvbm5lY3Rpb24oY29udGV4dCkpOworICAgIGF1dG8gcGVlckNvbm5lY3Rpb24g
PSBhZG9wdFJlZigqbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbnRleHQpKTsKICAgICBwZWVyQ29u
bmVjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgLy8gUlRDUGVlckNvbm5lY3Rpb24gbWF5
IHNlbmQgZXZlbnRzIGF0IGFib3V0IGFueSB0aW1lIGR1cmluZyBpdHMgbGlmZXRpbWUuCiAgICAg
Ly8gTGV0J3MgbWFrZSBpdCB1bmNvbGxlY3RhYmxlIHVudGlsIHRoZSBwYyBpcyBjbG9zZWQgYnkg
SlMgb3IgdGhlIHBhZ2Ugc3RvcHMgaXQuCiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+aXNDbG9z
ZWQoKSkgewotICAgICAgICBwZWVyQ29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJD
b25uZWN0aW9uLnB0cigpKTsKKyAgICAgICAgcGVlckNvbm5lY3Rpb24tPnNldFBlbmRpbmdBY3Rp
dml0eShwZWVyQ29ubmVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgLy8gSUNFIGNhbmRpZGF0ZSBm
aWx0ZXJpbmcgY2FuIG9ubHkgYmUgZGlzYWJsZWQgZm9yIGNvbm5lY3Rpb25zIGZyb20gZG9jdW1l
bnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIHRvcCBkb2N1bWVudCwKICAgICAg
ICAgLy8gb3IgaWYgdGhlIHBhZ2Ugd2FzIHNldCB0byBkaXNhYmxlIGl0LgpAQCAtNDMzLDcgKzQz
Myw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmRvU3RvcCgpCiAKICAgICBtX2JhY2tlbmQt
PnN0b3AoKTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cmVnaXN0
ZXJUb0NvbnRyb2xsZXIoUlRDQ29udHJvbGxlciYgY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXgg
ZjQzOTQzMThlYjFmZDdjZjA4N2Q5YjNjYjA4YzcxYjlmOWJkNzkxMS4uNzJhZDNhYmNjMDY2NjU0
MzI0NmNhODVhMzUzZTQwMjY1NjA1OTFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAg
dm9pZCBOb3RpZmljYXRpb246OnNob3coKQogICAgIH0KICAgICBpZiAoY2xpZW50LnNob3codGhp
cykpIHsKICAgICAgICAgbV9zdGF0ZSA9IFNob3dpbmc7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiB9
CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6ZmluYWxpemUoKQogICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUgPSBD
bG9zZWQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZl
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jh
c2ljSW5zcGVjdG9yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcAppbmRleCAyN2U1NmM0YzZiOTQ3YWViODI0NTllZDEz
ZjMzYjU4MWEzZDNhMGE0Li4wNTViZmY1ZjFlYmFhMWIyYmU1YTdjNDQwZWUwOWYzYjE3OGI5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtOTksNyArOTksNyBAQCB2b2lkIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKICAgICAgICAgLy8gV2hlbiBhbiBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUs
IGl0IHdpbGwgZ2V0IHB1bGxlZCBieSB0aGUKICAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0
aHVzIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KICAg
ICAgICAgaWYgKG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKLSAgICAgICAgICAgIGNvbnRleHQoKS5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5yZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQ
dWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA3LDExICsxMDcsMTEg
QEAgdm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCiAgICAg
ICAgIGlmIChudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgIW1fbmVlZEF1dG9tYXRpY1B1bGwp
IHsKICAgICAgICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgbm90
IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0cmVhbSBub2RlIHdoaWxlIHN0aWxsIGNvbm5lY3RlZCBm
cm9tCiAgICAgICAgICAgICAvLyB1cHN0cmVhbSBub2RlKHMpLCBhZGQgaXQgdG8gdGhlIGNvbnRl
eHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgotICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9t
YXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9tYXRpY1B1
bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAgIG1fbmVlZEF1dG9tYXRpY1B1bGwgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKCFudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgbV9uZWVkQXV0
b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gVGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
IGlzIGNvbm5lY3RlZCB0byBub3RoaW5nLCByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGF1
dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGlj
UHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVs
bE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCmluZGV4IGQ5NTA0N2M5MDMwNTFjMGJjM2Q1ZTYzOGIyN2I0NTg1NDI0
YjA1MzIuLjAxMmFlOGZmNjQ0MzhkYzYzYzdiNGI3MzBkOWJhMjdjMjM0NjA5YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKIHsKICAg
ICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBw
YWdlIG5hdmlnYXRlLgogICAgIC8vIExldHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0
aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgotICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CkBAIC0yMTgs
OCArMjE4LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGlu
ZUNvbnRleHQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcih0
aGlzKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZEF1ZGlv
UHJvZHVjZXIoKnRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICAgICAgLy8gVGhp
cyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRl
SW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1
ZGlvLgogICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwg
YSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhp
cyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9p
ZCBBdWRpb0NvbnRleHQ6OmNsZWFyKCkKICAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6
ZSgpKTsKIAogICAgIC8vIEl0IHdhcyBzZXQgaW4gY29uc3RydWN0Q29tbW9uLgotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCkBAIC0yNjMsOCArMjYzLDgg
QEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNr
cygqdGhpcyk7CiAKICAgICAgICAgQVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwogICAg
ICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CkBAIC04MjQsMTQgKzgyNCwxNCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6aGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogICAgIG1fZGVmZXJy
ZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtG
b3JEZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRl
bGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwog
CiAgICAgaWYgKGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKQotICAgICAgICBtX25vZGVzVG9EZWxl
dGUuYXBwZW5kKG5vZGUpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQobm9kZSk7
CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOwogCiAgICAg
Ly8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5v
ZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAogICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0aW9u
cyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRsZVBv
c3RSZW5kZXJUYXNrcygpCkBAIC05MjgsMTkgKzkyOCwxOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6
aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0
cy5jbGVhcigpOwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUo
QXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgIGlmICht
X2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fYXV0
b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIAotdm9pZCBBdWRpb0NvbnRl
eHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9D
b250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAg
QVNTRVJUKGlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5y
ZW1vdmUobm9kZSkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgmbm9kZSkp
CiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIApA
QCAtOTk3LDcgKzk5Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygp
CiAgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAg
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBh
Z2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVx
dWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKQEAgLTEwMTcsNyArMTAx
Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygpCiAgICAgaWYgKHBh
Z2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0
TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25z
ZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDU3NzMxN2QyZTgyZGVkOWZhMDc4NTlkYjBl
MDYwYTFhYTg5NWYzYWUuLjYzNDk3ZGFiZTExMzJiN2VjM2ZiMTIzYzFhNjMwNzQ3Y2FlN2M2MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApA
QCAtMTUzLDEzICsxNTMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWZGaW5pc2hlZFNvdXJj
ZU5vZGVzKCk7CiAKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2VkIG5v
ZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lk
IG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKKyAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihB
dWRpb05vZGUmKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7CiAKICAgICAvLyBBdWRp
b0NvbnRleHQgY2FuIHB1bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50
dW0gZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9k
ZXMuCiAgICAgLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hv
IHdhbnQgdG8gYWRkL3JlbW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1
bGwgbGlzdHMuCi0gICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKLSAg
ICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgYWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJik7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQ
dWxsTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxl
UG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVk
IGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgogICAgIHZvaWQg
cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAppbmRleCBmMjAwYjA1
MGU3MjYxMjdjYzFkNmY2YjVhNjM1ZjY3YWYyYjRlNzc2Li4xYWM3N2FhMzdjMjY1MzdiM2UyZmYy
MjM2MWFhNzI1MmQ1MDM1NWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGUuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBBdWRpb05vZGU6OmZpbmlz
aERlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNj
b25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0
by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNo
IHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAg
ICAgIGNvbnRleHQoKS5tYXJrRm9yRGVsZXRpb24odGhpcyk7CisgICAgICAgICAgICAgICAgY29u
dGV4dCgpLm1hcmtGb3JEZWxldGlvbigqdGhpcyk7CiAgICAgICAgICAgICAgICAgbV9pc01hcmtl
ZEZvckRlbGV0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChy
ZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA3MjNhMGI2YzhlMWU4ZmM4MmRkZGQ2MGRj
NjgyYzA0ZDg0MWIwOWU5Li4zYjU3MGZkMjlkNzYwZWUzOWU3ZjQ0NWFiODFiN2JkM2I0NmQwYTQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cApAQCAtMjgzLDggKzI4Myw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVj
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKICAgICAgICAg
UmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1
cmVDb250ZW50KGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsKSkgewotICAgICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRp
bmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3RvcCgpLgotICAgICAgICAgICAgQWN0aXZlRE9N
T2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICAvLyBCYWxhbmNl
ZCBieSB0aGUgY2FsbCB0byB1bnNldFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3Rv
cCgpLgorICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgICAgICAg
ICAgLy8gV2UgbXVzdCBibG9jayB0aGlzIGNvbm5lY3Rpb24uIEluc3RlYWQgb2YgdGhyb3dpbmcg
YW4gZXhjZXB0aW9uLCB3ZSBpbmRpY2F0ZSB0aGlzCiAgICAgICAgICAgICAvLyB1c2luZyB0aGUg
ZXJyb3IgZXZlbnQuIEJ1dCBzaW5jZSB0aGlzIGNvZGUgZXhlY3V0ZXMgYXMgcGFydCBvZiB0aGUg
V2ViU29ja2V0J3MKQEAgLTMxNSw3ICszMTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2Nr
ZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcgog
ICAgICAgICBwcm90b2NvbFN0cmluZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3VicHJvdG9j
b2xTZXBhcmF0b3IoKSk7CiAKICAgICBtX2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHByb3RvY29s
U3RyaW5nKTsKLSAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAg
LTU0NCw3ICs1NDQsNyBAQCB2b2lkIFdlYlNvY2tldDo6c3RvcCgpCiAgICAgbV9wZW5kaW5nRXZl
bnRzLmNsZWFyKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiAgICAgaWYgKHBlbmRp
bmcpCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogY29uc3QgY2hhciog
V2ViU29ja2V0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTYyOCw3ICs2MjgsNyBA
QCB2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVyZWRBbW91
bnQsIENsb3NpbmdIYW5kc2hha2VDb21wbAogICAgICAgICBtX2NoYW5uZWwgPSBudWxscHRyOwog
ICAgIH0KICAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2ZURPTU9i
amVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJTb2NrZXQ6OmRpZFVwZ3JhZGVVUkwoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYjRl
OGQ5MmIyZDFhMTJjZDEyMDE2ZmJiMDIzMmY4NGUxMDI0NTUxOS4uM2Y4MGFkNWI4M2E0MWM1ZWQ2
NDdhMjYwNzVlYmJkZWE5ODZmYjI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC0zNjYsNyArMzY2LDcgQEAgSlNDOjpKU0ludGVybmFs
UHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9i
YWxPYmplY3QKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBl
eGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRG
ZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5yZXNvbHZl
KGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBpbXBvcnRlck1v
ZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CkBAIC0zNzUsNyArMzc1LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0
KgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9N
V2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9j
dW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1
bGVMb2FkZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+bW9kdWxlTG9hZGVyKCkuZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2Fk
ZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhl
YywganNVbmRlZmluZWQoKSk7CiB9CkBAIC0zODQsNyArMzg0LDcgQEAgSlNDOjpKU1ZhbHVlIEpT
RE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmV2YWx1YXRlKGdsb2JhbE9iamVjdCwg
ZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIG1vZHVsZVJlY29yZCwgc2NyaXB0RmV0Y2hl
cik7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCkuZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBz
Y3JpcHRGZXRjaGVyKTsKICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0z
OTIsNyArMzkyLDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjpt
b2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE8KIHsKICAgICBKU0RPTVdpbmRv
d0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxP
YmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9h
ZGVyKCktPmltcG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9k
dWxlTmFtZSwgc291cmNlT3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVM
b2FkZXIoKS5pbXBvcnRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1v
ZHVsZU5hbWUsIHNvdXJjZU9yaWdpbik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggZTI3
MDUzZmE1ZGZmYTJjZmM5ZjFkOTM0Y2YzYzc1MjA2NWVkNTRiZS4uZjk1YTA2ZGJmZGU5M2IyOGUw
YTU0ZDE1YjgyYzJjZTVjYWM2MzY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
aApAQCAtNzAsMTggKzcwLDE4IEBAIHB1YmxpYzoKICAgICAvLyBJdCBjYW4sIGhvd2V2ZXIsIGhh
dmUgYSBzaWRlIGVmZmVjdCBvZiBkZWxldGluZyBhbiBBY3RpdmVET01PYmplY3QuCiAgICAgdmly
dHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgc2V0UGVuZGlu
Z0FjdGl2aXR5KFQqIHRoaXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVjdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0
aGlzT2JqZWN0ID09IHRoaXMpOwotICAgICAgICB0aGlzT2JqZWN0LT5yZWYoKTsKKyAgICAgICAg
QVNTRVJUKCZ0aGlzT2JqZWN0ID09IHRoaXMpOworICAgICAgICB0aGlzT2JqZWN0LnJlZigpOwog
ICAgICAgICArK21fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0eShUKiB0aGlzT2JqZWN0KQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdW5zZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVj
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdBY3Rpdml0eUNvdW50ID4gMCk7CiAg
ICAgICAgIC0tbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKLSAgICAgICAgdGhpc09iamVjdC0+ZGVy
ZWYoKTsKKyAgICAgICAgdGhpc09iamVjdC5kZXJlZigpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggYWU1NmQ2OWQw
ZWQ0YzJlNjhiZTlkOTVmMDFiNGM3MDRjNWYxNTFjMy4uMjI4OGUzMWJhZDkwZDJmMjRiY2MwMjFj
Zjk0ZmIxYjU0ZDYxZjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCiAgICAgaWYgKG1fZGF0
YSA9PSBub25OdWxsRGF0YSAmJiBjYW5Vc2VTZXREYXRhT3B0aW1pemF0aW9uKCp0aGlzKSkgewot
ICAgICAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAg
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiAgICAgICAg
IGlmIChkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgsIG9sZExlbmd0
aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVyRGF0YT4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5vbk51bGxEYXRhLCAw
LCBvbGRMZW5ndGgsIG5vbk51bGxEYXRhLmxlbmd0aCgpKTsKLSAgICBkb2N1bWVudCgpLnRleHRS
ZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgq
dGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBDaGFyYWN0ZXJE
YXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCkBAIC0x
MjgsNyArMTI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0
YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIAogICAgIHNldERhdGFBbmRV
cGRhdGUobmV3U3RyLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCi0gICAgZG9jdW1lbnQo
KS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBkb2N1bWVu
dCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFj
dGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAg
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCi0gICAgZG9j
dW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKKyAgICBkb2N1bWVudCgp
LnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKIAogICAgIHJldHVybiB7IH07CiB9
CkBAIC0xNjQsOCArMTY0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVw
bGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KICAgICBzZXREYXRh
QW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAv
LyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNr
aW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAg
ICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwor
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOworICAgIGRv
Y3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRhZDVhNjkyYWY0
MjZhYjVlNjU0MzE4MzQ1NDg2M2EyMWQwMjU5NTcuLjAwMmM2MzgzYTA5MWI2NDg3ODQ5MTdkNTgz
ZWNiNGU1YTcwOGE5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjgxLDIyICs2ODEs
MjAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJp
bmcmIGtleSkKICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIGJ1aWxkQWNjZXNzS2V5
TWFwKHRoaXMpOworICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgqdGhpcyk7CiAgICAgICAgIG1f
YWNjZXNzS2V5TWFwVmFsaWQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9lbGVtZW50c0J5
QWNjZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nl
c3NLZXlNYXAoVHJlZVNjb3BlKiBzY29wZSkKK3ZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5
TWFwKFRyZWVTY29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS0+cm9vdE5vZGUo
KSkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CisgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oc2NvcGUucm9vdE5vZGUo
KSkpIHsKKyAgICAgICAgYXV0byYgYWNjZXNzS2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGFjY2Vzc2tleUF0dHIpOwogICAgICAgICBpZiAoIWFjY2Vzc0tleS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vzc0tl
eS5pbXBsKCksICZlbGVtZW50KTsKLQotICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVs
ZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAocm9vdCk7
CisgICAgICAgIGlmIChhdXRvKiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAgICAg
ICAgICBidWlsZEFjY2Vzc0tleU1hcCgqcm9vdCk7CiAgICAgfQogfQogCkBAIC0xNTgxLDE0ICsx
NTc5LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OnRpdGxlRWxlbWVudFRleHRDaGFuZ2VkKEVsZW1lbnQm
IHRpdGxlRWxlbWVudCkKICAgICB1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tz
KFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVy
Rm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50
JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKGNs
aWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKCZjbGllbnQp
OwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50KiBjbGllbnQpCit2b2lkIERvY3VtZW50
Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5
Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0Ns
aWVudHMucmVtb3ZlKGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVu
dHMucmVtb3ZlKCZjbGllbnQpOwogfQogCiB2b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCkKQEAgLTM2MDEsMTUgKzM1OTksMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmll
d3BvcnRVbml0c09uUmVzaXplKCkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlv
UHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6OmFk
ZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYgYXVkaW9Qcm9kdWNlcikKIHsKLSAgICBtX2F1
ZGlvUHJvZHVjZXJzLmFkZChhdWRpb1Byb2R1Y2VyKTsKKyAgICBtX2F1ZGlvUHJvZHVjZXJzLmFk
ZCgmYXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1
Y2VyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBh
dWRpb1Byb2R1Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVj
ZXIpOworICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1
cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQogCkBAIC0zNzAxLDI0ICszNjk5LDI0IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wgYW1v
bmdDaGlsZHJlbk9ubHkpCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6aG92ZXJlZEVsZW1l
bnREaWREZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIW1faG92ZXJlZEVsZW1l
bnQgfHwgZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQorICAgIGlmICghbV9ob3ZlcmVkRWxl
bWVudCB8fCAmZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2hvdmVyZWRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIG1f
aG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobV9o
b3ZlcmVkRWxlbWVudCAmJiAhbV9ob3ZlcmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9ob3ZlcmVkRWxlbWVudCA9IG1faG92ZXJlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAg
ICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1bGVI
b3ZlclN0YXRlVXBkYXRlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNo
YWluRGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjplbGVtZW50SW5B
Y3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8IGVsZW1lbnQgIT0gbV9hY3RpdmVFbGVtZW50KQorICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1fYWN0aXZlRWxlbWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAg
IG1fYWN0aXZlRWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxlICht
X2FjdGl2ZUVsZW1lbnQgJiYgIW1fYWN0aXZlRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbV9hY3RpdmVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiB9CkBA
IC0zOTk2LDI2ICszOTk0LDI2IEBAIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25XaWxsQ2xlYXJJ
ZE5hbWVNYXAoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCiAgICAgbV9ub2RlTGlz
dEFuZENvbGxlY3Rpb25Db3VudHNbSW52YWxpZGF0ZU9uSWROYW1lQXR0ckNoYW5nZV0tLTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2
b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikK
IHsKLSAgICBtX25vZGVJdGVyYXRvcnMuYWRkKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMuYWRk
KCZpdGVyYXRvcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2Rl
SXRlcmF0b3IqIG5pKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciYgaXRlcmF0b3IpCiB7CiAgICAgLy8gVGhlIG5vZGUgaXRlcmF0b3IgY2FuIGJlIGRldGFj
aGVkIHdpdGhvdXQgaGF2aW5nIGJlZW4gYXR0YWNoZWQgaWYgaXRzIHJvb3Qgbm9kZSBkaWRuJ3Qg
aGF2ZSBhIGRvY3VtZW50CiAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3Igd2FzIGNyZWF0ZWQsIGJ1
dCBoYXMgaXQgbm93LgotICAgIG1fbm9kZUl0ZXJhdG9ycy5yZW1vdmUobmkpOworICAgIG1fbm9k
ZUl0ZXJhdG9ycy5yZW1vdmUoJml0ZXJhdG9yKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bW92ZU5v
ZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKIHsKICAgICBWZWN0b3I8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKICAgICBjb3B5
VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzLCBub2RlSXRlcmF0b3JzKTsKLSAgICBmb3IgKGF1dG8q
IGl0IDogbm9kZUl0ZXJhdG9ycykgewotICAgICAgICBpZiAoJml0LT5yb290KCkgPT0gJm5vZGUp
IHsKLSAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcihpdCk7Ci0gICAgICAgICAgICBuZXdE
b2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgIGZvciAoYXV0byogaXRlcmF0b3Ig
OiBub2RlSXRlcmF0b3JzKSB7CisgICAgICAgIGlmICgmaXRlcmF0b3ItPnJvb3QoKSA9PSAmbm9k
ZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdGVyYXRvcik7CisgICAgICAg
ICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoKml0ZXJhdG9yKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTQwNTUsNyArNDA1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGls
ZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogCiAgICAgaWYgKG1f
bWFya2Vycy0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBU
ZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZChjb250YWluZXIpOyB0ZXh0Tm9kZTsgdGV4dE5v
ZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKLSAgICAgICAg
ICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0Tm9kZSk7CisgICAgICAgICAgICBtX21h
cmtlcnMtPnJlbW92ZU1hcmtlcnMoKnRleHROb2RlKTsKICAgICB9CiB9CiAKQEAgLTQwODMsNyAr
NDA4MSw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKQotICAgICAgICBtX21hcmtlcnMtPnJlbW92
ZU1hcmtlcnMoJm5vZGUpOworICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMobm9kZSk7
CiB9CiAKIHN0YXRpYyBOb2RlKiBmYWxsYmFja0ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZUFm
dGVyUmVtb3ZhbChOb2RlJiBub2RlKQpAQCAtNDEwMiw3ICs0MTAwLDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVtb3ZlRm9jdXNOYXZpZ2F0aW9uTm9kZU9mU3VidHJlZShOb2RlJiBub2RlLCBib29sIGFt
b25nQ2hpbGRyZW4KICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2Rl
KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6
OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGF1dG8q
IHJhbmdlIDogbV9yYW5nZXMpCkBAIC00MTEzLDcgKzQxMTEsNyBAQCB2b2lkIERvY3VtZW50Ojp0
ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQog
Ci12b2lkIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQx
MjUsMTAgKzQxMjMsMTAgQEAgdm9pZCBEb2N1bWVudDo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1h
cmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3Zv
aWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZVdpdGhJ
bmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOworICAgICAgICBOb2RlV2l0aEluZGV4IG9s
ZE5vZGVXaXRoSW5kZXgoJm9sZE5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9y
YW5nZXMpCiAgICAgICAgICAgICByYW5nZS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRoSW5k
ZXgsIG9mZnNldCk7CiAgICAgfQpAQCAtNDEzNiw3ICs0MTM0LDcgQEAgdm9pZCBEb2N1bWVudDo6
dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFy
IGNoZWNraW5nLgogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5v
ZGUpCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7CiAgICAg
Zm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQogICAgICAgICByYW5nZS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKQEAgLTQxNTUsMTUgKzQxNTMsMTUgQEAgdm9pZCBEb2N1bWVudDo6Y3JlYXRl
RE9NV2luZG93KCkKICAgICBBU1NFUlQobV9kb21XaW5kb3ctPmZyYW1lKCkgPT0gbV9mcmFtZSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1bWVu
dCkKK3ZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0gICAg
QVNTRVJUKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1fZG9t
V2luZG93KTsKICAgICAvLyBBIHZhbGlkIERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVkRnJh
bWUgZm9yIGl0cyBkb2N1bWVudHMuCiAgICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0gTm90
SW5QYWdlQ2FjaGUpOwogCi0gICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5tX2Rv
bVdpbmRvdyk7CisgICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2luZG93
KTsKICAgICBtX2RvbVdpbmRvdy0+ZGlkU2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAogICAg
IEFTU0VSVChtX2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKQEAgLTQ4MTMsMTQgKzQ4
MTEsMTQgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9y
U3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi12b2lk
IERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50
KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
RWxlbWVudHMuYWRkKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBt
X2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKQEAgLTQ4MjksMTQgKzQ4
MjcsMTQgQEAgdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgICAgICBl
bGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdp
c3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
bV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1fbWVkaWFWb2x1bWVD
YWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVn
aXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6
dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fbWVkaWFW
b2x1bWVDYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKIGJvb2wgRG9jdW1l
bnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3QKQEAgLTQ4NzgsMjkg
KzQ4NzYsMjkgQEAgdm9pZCBEb2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2Uo
KQogICAgICAgICBlbGVtZW50LT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJv
d3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3By
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZChlKTsKKyAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX3ByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpLnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpOwogCi0g
ICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKGUpOworICAgIG1fY2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fY2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX2NhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50
OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKQEAgLTQ5MTMsMTQgKzQ5MTEsMTQgQEAgdm9p
ZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiAKICNpZiBFTkFCTEUoTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1M
TWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVs
ZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQordm9p
ZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
SFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5n
ZWRFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
RWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpCkBAIC01MDE1LDEwICs1MDEzLDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OnBvcEN1cnJlbnRTY3JpcHQoKQogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLXZvaWQgRG9j
dW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCit2b2lk
IERvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIGluc3Ry
dWN0aW9uKQogewotICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJv
Y2Vzc29yOjpjcmVhdGUoKTsKLSAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoZG93bmNh
c3Q8WFNMU3R5bGVTaGVldD4ocGktPnNoZWV0KCkpKTsKKyAgICBhdXRvIHByb2Nlc3NvciA9IFhT
TFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIHByb2Nlc3Nvci0+c2V0WFNMU3R5bGVTaGVldChk
b3duY2FzdDxYU0xTdHlsZVNoZWV0PihpbnN0cnVjdGlvbi5zaGVldCgpKSk7CiAgICAgU3RyaW5n
IHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CiAgICAgU3RyaW5nIHJlc3Vs
dEVuY29kaW5nOwpAQCAtNTQ5MCwxNyArNTQ4OCwxNyBAQCB2b2lkIERvY3VtZW50OjpzdGF0ZVBv
cHBlZChSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0KQogICAgICAgICBt
X3BlbmRpbmdTdGF0ZU9iamVjdCA9IFdURk1vdmUoc3RhdGVPYmplY3QpOwogfQogCi12b2lkIERv
Y3VtZW50OjphdHRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit2b2lkIERvY3VtZW50OjphdHRhY2hS
YW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlucyhyYW5n
ZSkpOwotICAgIG1fcmFuZ2VzLmFkZChyYW5nZSk7CisgICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250
YWlucygmcmFuZ2UpKTsKKyAgICBtX3Jhbmdlcy5hZGQoJnJhbmdlKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFu
Z2UoUmFuZ2UmIHJhbmdlKQogewotICAgIC8vIFdlIGRvbid0IEFTU0VSVCBtX3Jhbmdlcy5jb250
YWlucyhyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCisgICAgLy8gV2UgZG9uJ3QgQVNT
RVJUIG1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCiAg
ICAgLy8gdW5jb25kaXRpb25hbGx5IHRvIGZpeDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2MDQ0Ci0gICAgbV9yYW5nZXMucmVtb3ZlKHJhbmdlKTsKKyAgICBtX3Jh
bmdlcy5yZW1vdmUoJnJhbmdlKTsKIH0KIAogc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtNTY0MCw3ICs1NjM4LDcg
QEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6
UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24KIAogICAgIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhyZWFz
b24pOwotICAgIHNjcmlwdFJ1bm5lcigpLT5zdXNwZW5kKCk7CisgICAgc2NyaXB0UnVubmVyKCku
c3VzcGVuZCgpOwogICAgIG1fcGVuZGluZ1Rhc2tzVGltZXIuc3RvcCgpOwogCiAgICAgLy8gRGVm
ZXJyaW5nIGxvYWRpbmcgYW5kIHN1c3BlbmRpbmcgcGFyc2VyIGlzIG5lY2Vzc2FyeSB3aGVuIHdl
IG5lZWQgdG8gcHJldmVudCByZS1lbnRyYW50IEphdmFTY3JpcHQgZXhlY3V0aW9uCkBAIC01NjY0
LDcgKzU2NjIsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVE
T01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogICAgICAgICBtX3BhcnNlci0+
cmVzdW1lU2NoZWR1bGVkVGFza3MoKTsKICAgICBpZiAoIW1fcGVuZGluZ1Rhc2tzLmlzRW1wdHko
KSkKICAgICAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICBz
Y3JpcHRSdW5uZXIoKS0+cmVzdW1lKCk7CisgICAgc2NyaXB0UnVubmVyKCkucmVzdW1lKCk7CiAg
ICAgcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhyZWFzb24pOwogICAgIHJlc3VtZVNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIApAQCAtNTcxNywxNiArNTcxNSwxNiBA
QCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFBvcHN0YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVjdAogICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3Rh
dGVFdmVudDo6Y3JlYXRlKFdURk1vdmUoc3RhdGVPYmplY3QpLCBtX2RvbVdpbmRvdyA/IG1fZG9t
V2luZG93LT5oaXN0b3J5KCkgOiBudWxscHRyKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9p
ZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKCFtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29u
dGFpbnMobGlzdGVuZXIpKTsKLSAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKGxpc3Rl
bmVyKTsKKyAgICBBU1NFUlQoIW1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlz
dGVuZXIpKTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKCZsaXN0ZW5lcik7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0
YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFy
dExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJU
KG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVk
aWFDYW5TdGFydExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgIEFTU0VSVChtX21lZGlh
Q2FuU3RhcnRMaXN0ZW5lcnMuY29udGFpbnMoJmxpc3RlbmVyKSk7CisgICAgbV9tZWRpYUNhblN0
YXJ0TGlzdGVuZXJzLnJlbW92ZSgmbGlzdGVuZXIpOwogfQogCiBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIqIERvY3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKQEAgLTU3NTAsMTAg
KzU3NDgsOSBAQCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQogCi1ib29sIERvY3VtZW50OjpmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAorYm9vbCBEb2N1bWVudDo6ZnVsbFNjcmVlbklzQWxsb3dlZChFbGVt
ZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICByZXR1cm4g
aXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRhbGxvd2Z1
bGxzY3JlZW5BdHRyLCBlbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKTsKKyAgICBy
ZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRh
bGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVtZW50LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpOwog
fQogCiB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZSBjaGVja1R5cGUpCkBAIC01NzcyLDcgKzU3Njks
NyBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogCiAgICAgICAgIC8vIFRoZSBjb250ZXh0IG9i
amVjdCdzIG5vZGUgZG9jdW1lbnQsIG9yIGFuIGFuY2VzdG9yIGJyb3dzaW5nIGNvbnRleHQncyBk
b2N1bWVudCBkb2VzIG5vdCBoYXZlCiAgICAgICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVuYWJsZWQg
ZmxhZyBzZXQuCi0gICAgICAgIGlmIChjaGVja1R5cGUgPT0gRW5mb3JjZUlGcmFtZUFsbG93RnVs
bFNjcmVlblJlcXVpcmVtZW50ICYmICFmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChlbGVt
ZW50KSkKKyAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBFbmZvcmNlSUZyYW1lQWxsb3dGdWxsU2Ny
ZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxTY3JlZW5Jc0FsbG93ZWQoKmVsZW1lbnQpKQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVGhlIGNvbnRleHQgb2JqZWN0J3Mgbm9kZSBkb2N1
bWVudCBmdWxsc2NyZWVuIGVsZW1lbnQgc3RhY2sgaXMgbm90IGVtcHR5IGFuZCBpdHMgdG9wIGVs
ZW1lbnQKQEAgLTU4NDUsOCArNTg0Miw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAgICAg
ICAgICAgICAvLyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVk
IGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAg
IC8vIHNldCB0byB0cnVlIG9uIHRoZSBkb2N1bWVudC4KICAgICAgICAgICAgIGlmICghZm9sbG93
aW5nRG9jKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVt
ZW50U3RhY2soZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3Jl
ZW5DaGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAgICAgIGN1cnJlbnRE
b2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCplbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC01ODU3LDggKzU4
NTQsOCBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAgICAgIC8vIC4uLnB1
c2ggZm9sbG93aW5nIGRvY3VtZW50J3MgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIgb24gZG9j
dW1lbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQKICAgICAgICAgICAgICAgICAvLyBzdGFjaywgYW5k
IHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0
aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBv
biBkb2N1bWVudC4KLSAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjayhmb2xsb3dpbmdEb2MtPm93bmVyRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAg
ICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7Cisg
ICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKmZv
bGxvd2luZ0RvYy0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIGFkZERvY3VtZW50
VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTU5MjEsNyArNTkxOCw3IEBAIHZvaWQg
RG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4g
ZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBz
ZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkZXNj
ZW5kYW50cykgewogICAgICAgICBkb2N1bWVudC0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNr
KCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShkb2N1
bWVudC5nZXQoKSk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRR
dWV1ZSgqZG9jdW1lbnQpOwogICAgIH0KIAogICAgIC8vIDUuIFdoaWxlIGRvYyBpcyBub3QgbnVs
bCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgpAQCAtNTkzOCw3ICs1OTM1LDcgQEAgdm9pZCBEb2N1bWVu
dDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogCiAgICAgICAgIC8vIDIuIFF1ZXVlIGEgdGFzayB0
byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBh
dHRyaWJ1dGUgc2V0IHRvIHRydWUKICAgICAgICAgLy8gb24gZG9jLgotICAgICAgICBhZGREb2N1
bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgIGFk
ZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAKICAg
ICAgICAgLy8gMy4gSWYgZG9jJ3MgZnVsbHNjcmVlbiBlbGVtZW50IHN0YWNrIGlzIGVtcHR5IGFu
ZCBkb2MncyBicm93c2luZyBjb250ZXh0IGhhcyBhIGJyb3dzaW5nIGNvbnRleHQKICAgICAgICAg
Ly8gY29udGFpbmVyLCBzZXQgZG9jIHRvIHRoYXQgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIn
cyBub2RlIGRvY3VtZW50LgpAQCAtNTk4OCwxMyArNTk4NSwxMSBAQCBzdGF0aWMgdm9pZCB1bndy
YXBGdWxsU2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVy
LCBFbGVtZQogICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pbnZh
bGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFoYXNMaXZpbmdSZW5kZXJUcmVlKCkgfHwgcGFnZUNhY2hlU3RhdGUoKSAh
PSBOb3RJblBhZ2VDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQp
OwotCiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBhZnRlciB0aGUgZG9jdW1l
bnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYWdlLgogICAgIGlmICghcGFnZSgpKQogICAg
ICAgICByZXR1cm47CkBAIC02MDAzLDEzICs1OTk4LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtp
dFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICB1
bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIobV9mdWxsU2NyZWVuUmVuZGVyZXIsIG1fZnVsbFNjcmVl
bkVsZW1lbnQuZ2V0KCkpOwogCi0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPndp
bGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOworICAgIGVsZW1lbnQud2lsbEJlY29tZUZ1bGxz
Y3JlZW5FbGVtZW50KCk7CiAgICAgCi0gICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7
CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9ICZlbGVtZW50OwogCiAjaWYgVVNFKE5BVElWRV9G
VUxMU0NSRUVOX1ZJREVPKQotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzTWVkaWFFbGVt
ZW50KCkpCisgICAgaWYgKGVsZW1lbnQuaXNNZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKQEAgLTYwMzIsNyArNjAyNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmVzb2x2
ZVN0eWxlKFJlc29sdmVTdHlsZVR5cGU6OlJlYnVpbGQpOwogfQogCi12b2lkIERvY3VtZW50Ojp3
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQordm9pZCBEb2N1bWVu
dDo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fZnVsbFNjcmVlbkVs
ZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTYwNDUsNyArNjAzOSw3IEBAIHZvaWQgRG9jdW1l
bnQ6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCiAgICAgbV9m
dWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKK3Zv
aWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1
bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MDU2LDcgKzYwNTAsNyBAQCB2
b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQq
KQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPndpbGxTdG9wQmVpbmdGdWxsc2NyZWVuRWxlbWVu
dCgpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpCiB7
CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MTk0
LDE5ICs2MTg4LDE4IEBAIHZvaWQgRG9jdW1lbnQ6OnBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2so
KQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50OjpwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50JiBlbGVtZW50
KQogewotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5hcHBlbmQoZWxlbWVudCk7CisgICAg
bV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OmFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCog
ZG9jKQordm9pZCBEb2N1bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1
ZXVlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jKTsKLSAgICBOb2RlKiB0
YXJnZXQgPSBkb2MtPndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KCk7CisgICAgTm9kZSogdGFyZ2V0
ID0gZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkK
LSAgICAgICAgdGFyZ2V0ID0gZG9jLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsK
KyAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IGRvYzsKKyAgICAgICAgdGFy
Z2V0ID0gJmRvY3VtZW50OwogICAgIG1fZnVsbFNjcmVlbkNoYW5nZUV2ZW50VGFyZ2V0UXVldWUu
YXBwZW5kKHRhcmdldCk7CiB9CiAKQEAgLTY2NjQsNyArNjY1Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6
OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEVs
ZW1lbnQqIGluCiAgICAgICAgIC8vIFdlIGFyZSBjbGVhcmluZyB0aGUgOmFjdGl2ZSBjaGFpbiBi
ZWNhdXNlIHRoZSBtb3VzZSBoYXMgYmVlbiByZWxlYXNlZC4KICAgICAgICAgZm9yIChFbGVtZW50
KiBjdXJyZW50RWxlbWVudCA9IG9sZEFjdGl2ZUVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50OyBjdXJy
ZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50SW5Db21wb3NlZFRyZWUo
KSkgewogICAgICAgICAgICAgY3VycmVudEVsZW1lbnQtPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAg
ICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2ZUNoYWluKGN1cnJlbnRFbGVt
ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2
ZUNoYWluKCpjdXJyZW50RWxlbWVudCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIG1fYWN0
aXZlRWxlbWVudCA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKQEAgLTY2NzYsNyArNjY2OSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGN1cnItPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgY3Vy
ci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbihlbGVt
ZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFj
dGl2ZUNoYWluKCplbGVtZW50LCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbmV3QWN0aXZlRWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggNzc0MTJhNGM5NWNkNTcxMWMyMDVmZWI4ZTgyMjczNWRmNmIzZjJiOC4uN2Q5M2U4ZmQzNmRm
ODJjNTE5ZDhhNDRkOTZkZmY1ZDg2MmI4YTNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcy
Niw4ICs3MjYsOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZm9jdXNOYXZpZ2F0aW9uU3RhcnRp
bmdOb2RlKEZvY3VzRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3ZlRm9jdXNlZE5v
ZGVPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkgPSBmYWxzZSk7Ci0gICAg
dm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Kik7Ci0gICAgdm9pZCBlbGVtZW50
SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Kik7CisgICAgdm9pZCBob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50Jik7CisgICAgdm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERl
dGFjaChFbGVtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBFbGVtZW50Kik7CiAKQEAgLTc1NCwxMiArNzU0LDEyIEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW52YWxpZGF0aW9uRnVuY3Rpb24+CiAgICAgdm9p
ZCBpbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKEludmFsaWRhdGlvbkZ1bmN0
aW9uKTsKIAotICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOwotICAg
IHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOworICAgIHZvaWQgYXR0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOworICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9y
KE5vZGVJdGVyYXRvciYpOwogICAgIHZvaWQgbW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50
KE5vZGUmLCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSopOwotICAg
IHZvaWQgZGV0YWNoUmFuZ2UoUmFuZ2UqKTsKKyAgICB2b2lkIGF0dGFjaFJhbmdlKFJhbmdlJik7
CisgICAgdm9pZCBkZXRhY2hSYW5nZShSYW5nZSYpOwogCiAgICAgdm9pZCB1cGRhdGVSYW5nZXNB
ZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJik7CiAgICAgLy8gbm9kZUNoaWxkcmVu
V2lsbEJlUmVtb3ZlZCBpcyB1c2VkIHdoZW4gcmVtb3ZpbmcgYWxsIG5vZGUgY2hpbGRyZW4gYXQg
b25jZS4KQEAgLTc3MCwxMyArNzcwLDEzIEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEFjY2Vw
dENoaWxkT3BlcmF0aW9uIHsgUmVwbGFjZSwgSW5zZXJ0T3JBZGQgfTsKICAgICBib29sIGNhbkFj
Y2VwdENoaWxkKGNvbnN0IE5vZGUmIG5ld0NoaWxkLCBjb25zdCBOb2RlKiByZWZDaGlsZCwgQWNj
ZXB0Q2hpbGRPcGVyYXRpb24pIGNvbnN0OwogCi0gICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHRSZW1vdmVk
KE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHRl
eHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSk7CisgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSYs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRSZW1vdmVk
KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoVGV4dCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHRl
eHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICB2b2lkIGNyZWF0ZURPTVdpbmRvdygp
OwotICAgIHZvaWQgdGFrZURPTVdpbmRvd0Zyb20oRG9jdW1lbnQqKTsKKyAgICB2b2lkIHRha2VE
T01XaW5kb3dGcm9tKERvY3VtZW50Jik7CiAKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fZG9tV2luZG93LmdldCgpOyB9CiAgICAgLy8gSW4gRE9NIExldmVsIDIs
IHRoZSBEb2N1bWVudCdzIERPTVdpbmRvdyBpcyBjYWxsZWQgdGhlIGRlZmF1bHRWaWV3LgpAQCAt
ODQ3LDcgKzg0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3NSZWZlcnJlclBvbGljeShj
b25zdCBTdHJpbmcmIHBvbGljeSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVu
dCBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgIC8vIFJldHVybnMgMCBpZiB0aGlzIGlzIHRo
ZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRoaXMgaXMg
dGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
RWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7IG5vIGRpcmVj
dGlvbiBrbm93bi4KQEAgLTk0MSwxNyArOTQxLDE3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCog
cGFyZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudCYgdG9w
RG9jdW1lbnQoKSBjb25zdDsKICAgICAKLSAgICBTY3JpcHRSdW5uZXIqIHNjcmlwdFJ1bm5lcigp
IHsgcmV0dXJuIG1fc2NyaXB0UnVubmVyLmdldCgpOyB9Ci0gICAgU2NyaXB0TW9kdWxlTG9hZGVy
KiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiBtX21vZHVsZUxvYWRlci5nZXQoKTsgfQorICAgIFNj
cmlwdFJ1bm5lciYgc2NyaXB0UnVubmVyKCkgeyByZXR1cm4gKm1fc2NyaXB0UnVubmVyOyB9Cisg
ICAgU2NyaXB0TW9kdWxlTG9hZGVyJiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiAqbV9tb2R1bGVM
b2FkZXI7IH0KIAogICAgIEhUTUxTY3JpcHRFbGVtZW50KiBjdXJyZW50U2NyaXB0KCkgY29uc3Qg
eyByZXR1cm4gIW1fY3VycmVudFNjcmlwdFN0YWNrLmlzRW1wdHkoKSA/IG1fY3VycmVudFNjcmlw
dFN0YWNrLmxhc3QoKS5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHB1c2hDdXJyZW50U2Ny
aXB0KEhUTUxTY3JpcHRFbGVtZW50Kik7CiAgICAgdm9pZCBwb3BDdXJyZW50U2NyaXB0KCk7CiAK
ICNpZiBFTkFCTEUoWFNMVCkKLSAgICB2b2lkIGFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiogcGkpOworICAgIHZvaWQgYXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vzc2luZ0lu
c3RydWN0aW9uJik7CiAgICAgUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpIHsgcmV0dXJuIG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFRy
YW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50KiBkb2MpIHsgbV90cmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudCA9IGRvYzsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2N1bWVudDsg
fQogCiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPFRyYW5zZm9y
bVNvdXJjZT4pOwogICAgIFRyYW5zZm9ybVNvdXJjZSogdHJhbnNmb3JtU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2UuZ2V0KCk7IH0KQEAgLTk5MiwxNyArOTkyLDE1IEBA
IHB1YmxpYzoKICAgICBQYWdlQ2FjaGVTdGF0ZSBwYWdlQ2FjaGVTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZUNhY2hlU3RhdGU7IH0KICAgICB2b2lkIHNldFBhZ2VDYWNoZVN0YXRlKFBhZ2VD
YWNoZVN0YXRlKTsKIAotICAgIC8vIEVsZW1lbnRzIGNhbiByZWdpc3RlciB0aGVtc2VsdmVzIGZv
ciB0aGUgInN1c3BlbmQoKSIgYW5kCi0gICAgLy8gInJlc3VtZSgpIiBjYWxsYmFja3MKLSAgICB2
b2lkIHJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCop
OworICAgIHZvaWQgcmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVu
dCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhF
bGVtZW50Jik7CiAKICAgICB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7CiAgICAg
dm9pZCBzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAg
dm9pZCByZXN1bWUoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQg
cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgbWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKTsKIAogICAgIGJvb2wgYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmUoKSBjb25zdDsKQEAgLTEwMTIsMjggKzEwMTAsMjggQEAgcHVibGljOgogICAgIE1lZGlh
U2Vzc2lvbiYgZGVmYXVsdE1lZGlhU2Vzc2lvbigpOwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lz
dGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CiAgICAgdm9pZCBzdG9yYWdlQmxv
Y2tpbmdTdGF0ZURpZENoYW5nZSgpOwogICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRD
aGFuZ2UoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIHJlZ2lzdGVyRm9y
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7
CisgICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZv
aWQgcmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2Fs
bGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50
Jik7CiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgdm9p
ZCByZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tz
KEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAg
dm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmls
aXR5Q2hhbmdlQ2xpZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7CisgICAgdm9pZCByZWdp
c3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNs
aWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxs
YmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IHZvaWQgcmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2Vk
Q2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKQEAgLTEwODQsOCArMTA4Miw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpc3BhdGNoUG9wc3RhdGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiYmIHN0YXRlT2JqZWN0KTsKICAgICBEb2N1bWVudEV2ZW50UXVldWUmIGV2ZW50UXVl
dWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V2ZW50UXVldWU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVy
KE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lciYpOwogICAgIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogdGFrZUFueU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcigpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTEwMiwxNyArMTEw
MCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCosIEZ1bGxTY3JlZW5DaGVja1R5cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0Q2FuY2VsRnVsbFNjcmVlbigpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJr
aXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbigpOwogICAgIAogICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRlcmVy
KFJlbmRlckZ1bGxTY3JlZW4qKTsKICAgICBSZW5kZXJGdWxsU2NyZWVuKiBmdWxsU2NyZWVuUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW5SZW5kZXJlcjsgfQogICAgIHZvaWQg
ZnVsbFNjcmVlblJlbmRlcmVyRGVzdHJveWVkKCk7CiAgICAgCiAgICAgdm9pZCBmdWxsU2NyZWVu
Q2hhbmdlRGVsYXlUaW1lckZpcmVkKCk7Ci0gICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkRm9y
RWxlbWVudChFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkKEVs
ZW1lbnQmKSBjb25zdDsKICAgICB2b2lkIGZ1bGxTY3JlZW5FbGVtZW50UmVtb3ZlZCgpOwogICAg
IHZvaWQgcmVtb3ZlRnVsbFNjcmVlbkVsZW1lbnRPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdD
aGlsZHJlbk9ubHkgPSBmYWxzZSk7CiAgICAgYm9vbCBpc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKSBj
b25zdDsKQEAgLTExMzksOCArMTEzNyw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TKQotICAgIERldmljZU1vdGlvbkNv
bnRyb2xsZXIqIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKLSAgICBEZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIqIGRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0Owor
ICAgIERldmljZU1vdGlvbkNvbnRyb2xsZXImIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25z
dDsKKyAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBjb25zdCBEb2N1bWVudFRpbWluZyYgdGlt
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFRpbWluZzsgfQpAQCAtMTI3MSw4ICsxMjY5
LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzU3R5bGVXaXRoVmlld3BvcnRVbml0czsgfQogICAgIHZvaWQgdXBkYXRl
Vmlld3BvcnRVbml0c09uUmVzaXplKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1
ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYpOwogICAgIE1lZGlhUHJvZHVj
ZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0
YXRlOyB9CiAgICAgdm9pZCBub3RlVXNlckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwog
ICAgIGJvb2wgaXNDYXB0dXJpbmcoKSBjb25zdCB7IHJldHVybiBNZWRpYVByb2R1Y2VyOjppc0Nh
cHR1cmluZyhtX21lZGlhU3RhdGUpOyB9CkBAIC0xNDE3LDcgKzE0MTUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZv
aWQgdXBkYXRlQmFzZVVSTCgpOwogCi0gICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2Nv
cGUqIHJvb3QpOworICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiByb290KTsK
IAogICAgIHZvaWQgbG9hZEV2ZW50RGVsYXlUaW1lckZpcmVkKCk7CiAKQEAgLTE0MzAsOCArMTQy
OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9y
RXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1l
LCBib29sIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCk7CiAgICAgdm9pZCBjbGVhckZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soKTsKICAgICB2b2lkIHBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsK
LSAgICB2b2lkIHB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqKTsKLSAgICB2b2lk
IGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCopOworICAg
IHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCYpOworICAgIHZvaWQgYWRk
RG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggOTE0YzQ1YmU5MzQ3
NTU1OWZlNmY3YzU5OTNlOGU3MGMxNWNmMDhiOS4uZDRkNmQ0Mzk1ODk1NjJlNzdkMWE4NGQ5YWZi
MTMwMGUzNGUwOTBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKQEAgLTYyLDk5ICs2Miw5OSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6ZGV0YWNoKCkKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsg
fTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSog
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24pCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdl
JiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBk
ZXNjcmlwdGlvbikKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtl
ZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFy
a2VkVGV4dC5yYW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0
ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbikpOworICAgICAgICBhZGRNYXJrZXIo
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGll
Y2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uKSk7
CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJh
bmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSB0eXBlKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQo
cmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAg
IGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5z
dGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zm
c2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQ
aWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5z
dGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpKSk7CiAgICAgfQogCiB9CiAKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJU
b05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKIHsKICAgICBhZGRNYXJrZXIobm9kZSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoKSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9k
ZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCiB7CiAgICAgYWRkTWFy
a2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IGxlbmd0aCwgV1RGTW92ZShkYXRhKSkpOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmVN
YXRjaCkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNoKQogewotICAgIGZvciAoVGV4dEl0
ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0
LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldCgpOwotICAgICAgICBhZGRNYXJr
ZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0Y2gpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVj
ZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCwgYWN0aXZlTWF0Y2gpKTsKICAgICB9CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiAKLXZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBt
ZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2Um
IHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBS
ZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRU
ZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsK
KyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0
RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4
dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVj
ZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFy
dE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbiwgaW50ZXJwcmV0
YXRpb25zLCBtZXRhZGF0YSkpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENv
bnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCks
IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uLCBpbnRlcnByZXRhdGlvbnMsIG1l
dGFkYXRhKSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSogcmFuZ2UsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpCit2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSYg
cmFuZ2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpCiB7CiAgICAgQVNT
RVJUKGludGVycHJldGF0aW9ucy5zaXplKCkgPiAxKTsKICAgICBpZiAoaW50ZXJwcmV0YXRpb25z
LnNpemUoKSA8PSAxKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBbHRl
cm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnMuc2l6ZSgpIC0gMTsKLSAgICBmb3IgKFRleHRJdGVy
YXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5h
ZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFt
YXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICBEb2N1bWVu
dE1hcmtlciBtYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5h
dGl2ZXMsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwg
ZW1wdHlTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4obnVtYmVyT2ZBbHRlcm5hdGl2ZXMpLCBSZXRh
aW5QdHI8aWQ+KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQWx0
ZXJuYXRpdmVzOyArK2kpCiAgICAgICAgICAgICBtYXJrZXIuc2V0QWx0ZXJuYXRpdmUoaW50ZXJw
cmV0YXRpb25zW2kgKyAxXSwgaSk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFy
dENvbnRhaW5lcigpLCBtYXJrZXIpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFy
dENvbnRhaW5lcigpLCBtYXJrZXIpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSogcmFuZ2UsIGNvbnN0IFJl
dGFpblB0cjxpZD4mIG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFk
ZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSYgcmFuZ2UsIGNvbnN0IFJldGFpblB0cjxpZD4m
IG1ldGFkYXRhKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAh
bWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4
dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2Vk
VGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJr
ZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRh
aW5lcigpLCBEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0LCB0
ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIFN0cmluZygp
LCBWZWN0b3I8U3RyaW5nPigpLCBtZXRhZGF0YSkpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBp
ZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUmVzdWx0LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zm
c2V0KCksIFN0cmluZygpLCBWZWN0b3I8U3RyaW5nPigpLCBtZXRhZGF0YSkpOwogICAgIH0KIH0K
IAogI2VuZGlmCiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29u
dGVudE1hcmtlcihSZWZQdHI8UmFuZ2U+IHJhbmdlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKFJhbmdlJiByYW5nZSkKIHsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlLmdldCgpKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4
dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewor
ICAgICAgICBhdXRvIHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgRG9j
dW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YSBkcmFnZ2VkQ29udGVudERhdGEgeyBtYXJr
ZWRUZXh0Lm5vZGUoKSB9OwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3Rh
cnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVu
dERhdGEpIH0pOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigp
LCB7IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCwgdGV4dFBpZWNlLT5zdGFydE9mZnNl
dCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBXVEZNb3ZlKGRyYWdnZWRDb250ZW50RGF0YSkg
fSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhSYW5nZSogcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
bWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxk
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cmVtb3ZlTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7Ci0g
ICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
ewogICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CisgICAg
ICAgIGF1dG8gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFy
a2VycygmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
IC0gc3RhcnRPZmZzZXQsIG1hcmtlclR5cGVzLCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7CisgICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBpZWNlLT5zdGFydENvbnRh
aW5lcigpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIG1hcmtlclR5cGVz
LCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgfQogfQogCkBA
IC0zMTksMTMgKzMxOSwxMyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiAvLyBNYXJrZXJzIGFyZSBzdG9y
ZWQgaW4gb3JkZXIgc29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9mZnNldC4KIC8vIE1hcmtlcnMgb2Yg
dGhlIHNhbWUgdHlwZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90aGVyLgogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFy
a2VyJiBuZXdNYXJrZXIpIAordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtl
cihOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKQogewogICAgIEFT
U0VSVChuZXdNYXJrZXIuZW5kT2Zmc2V0KCkgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwog
ICAgIGlmIChuZXdNYXJrZXIuZW5kT2Zmc2V0KCkgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCkpIHsKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IEZhY3RvciB0aGUgbWFya2VyIHBhaW50aW5nIGNvZGUgb3V0IG9mIElu
bGluZVRleHRCb3ggYW5kIHRlYWNoIHNpbXBsZSBsaW5lIGxheW91dCB0byB1c2UgaXQuCiAgICAg
ICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKQogICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5lbnN1cmVMaW5lQm94ZXMoKTsKQEAgLTMzNSw3ICszMzUs
NyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUs
IGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFy
a2VyVHlwZXMgfD0gbmV3TWFya2VyLnR5cGUoKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJr
ZXJMaXN0PiYgbGlzdCA9IG1fbWFya2Vycy5hZGQobm9kZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0PiYgbGlzdCA9IG1fbWFya2Vycy5h
ZGQoJm5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGlmICghbGlzdCkgewog
ICAgICAgICBsaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJrZXJMaXN0PigpOwpAQCAtMzkwLDE1
ICszOTAsMTUgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2Rl
KiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWEKICAgICAgICAgbGlzdC0+aW5zZXJ0
KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIodG9JbnNlcnQpKTsKICAgICB9CiAKLSAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwor
ICAgIGlmIChub2RlLnJlbmRlcmVyKCkpCisgICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWlu
dCgpOwogCi0gICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZSgqbm9kZSk7CisgICAg
aW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShub2RlKTsKIH0KIAogLy8gY29waWVzIG1h
cmtlcnMgZnJvbSBzcmNOb2RlIHRvIGRzdE5vZGUsIGFwcGx5aW5nIHRoZSBzcGVjaWZpZWQgc2hp
ZnQgZGVsdGEgdG8gdGhlIGNvcGllcy4gIFRoZSBzaGlmdCBpcwogLy8gdXNlZnVsIGlmLCBlLmcu
LCB0aGUgY2FsbGVyIGhhcyBjcmVhdGVkIHRoZSBkc3ROb2RlIGZyb20gYSBub24tcHJlZml4IHN1
YnN0cmluZyBvZiB0aGUgc3JjTm9kZS4KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpj
b3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0
aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNvcHlNYXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQg
bGVuZ3RoLCBOb2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpCiB7CiAgICAgaWYgKGxlbmd0aCA8PSAw
KQogICAgICAgICByZXR1cm47CkBAIC00MDcsNyArNDA3LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LAogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsK
IAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KHNyY05vZGUpOworICAgIE1h
cmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZzcmNOb2RlKTsKICAgICBpZiAoIWxpc3Qp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNDMzLDExICs0MzMsMTEgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LAogICAgICAgICBhZGRNYXJrZXIoZHN0Tm9kZSwgbWFya2VyKTsKICAgICB9CiAKLSAg
ICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgZHN0Tm9kZS0+
cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLnJlbmRl
cmVyKCkpCisgICAgICAgIGRzdE5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJP
ck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNo
b3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQogewogICAgIGlmIChsZW5ndGgg
PD0gMCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0
eSgpKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0
KQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5MywxMyArNDkzLDEzIEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpCiAgICAgfQogCiAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgewotICAgICAgICBt
X21hcmtlcnMucmVtb3ZlKG5vZGUpOworICAgICAgICBtX21hcmtlcnMucmVtb3ZlKCZub2RlKTsK
ICAgICAgICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3Bvc3NpYmx5
RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsgfTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGlydHkgJiYg
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwor
ICAgIGlmIChkb2NEaXJ0eSAmJiBub2RlLnJlbmRlcmVyKCkpCisgICAgICAgIG5vZGUucmVuZGVy
ZXIoKS0+cmVwYWludCgpOwogfQogCiBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTIzLDEzICs1MjMsMTMg
QEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFp
bmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVj
dG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1h
cmtlcnNGb3IoTm9kZSogbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhh
c01hcmtlcnMobWFya2VyVHlwZXMpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiByZXN1bHQ7Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5n
ZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAt
NTUzLDcgKzU1Myw3IEBAIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSYKIAogICAgIE5vZGUqIHBhc3RM
YXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJh
bmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zv
cihub2RlKSkgeworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUp
KSB7CiAgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgp
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChub2RlID09ICZz
dGFydENvbnRhaW5lciAmJiBtYXJrZXItPmVuZE9mZnNldCgpIDw9IHJhbmdlLnN0YXJ0T2Zmc2V0
KCkpCkBAIC01NjYsMTMgKzU2NiwxMyBAQCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmCiAgICAgcmV0
dXJuIGZvdW5kTWFya2VyczsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXJrZXJzKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
bWFya2VyVHlwZXMpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMp
KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKICAg
ICAKLSAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9k
ZSk7CisgICAgTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKCZu
b2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQogICAgICAgICByZW1v
dmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKIH0KQEAgLTY2MywxMyAr
NjYzLDEzIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2VycyhP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5CiAgICAgfQogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hp
ZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpCiB7
CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwog
Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2Vy
TGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02ODAsNyArNjgwLDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4K
ICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIGludCB0YXJnZXRTdGFydE9mZnNldCA9IG1hcmtl
ci5zdGFydE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIGludCB0YXJnZXRFbmRPZmZzZXQgPSBt
YXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAgICAgaWYgKHRhcmdldFN0YXJ0T2Zmc2V0
ID49IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7
CisgICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJhY3Rlck9mZnNl
dCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7CiAgICAgICAgICAgICBsaXN0LT5yZW1vdmUo
aSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNjk5LDcgKzY5OSw3IEBA
IHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAgICAgICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bWFya2VyLnNldEVuZE9mZnNldCh0YXJnZXRFbmRPZmZzZXQgPCBub2RlLT5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKTsK
KyAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQodGFyZ2V0RW5kT2Zmc2V0IDwgbm9kZS5t
YXhDaGFyYWN0ZXJPZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5vZGUubWF4Q2hhcmFjdGVy
T2Zmc2V0KCkpOwogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAgICB9
CiAjZW5kaWYKQEAgLTcwNywzNCArNzA3LDM0IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAg
ICAgfQogCiAgICAgaWYgKGRpZFNoaWZ0TWFya2VyKSB7Ci0gICAgICAgIGludmFsaWRhdGVSZWN0
c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJr
ZXJzSW5Ob2RlKG5vZGUpOwogCi0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQotICAgICAg
ICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgICAgICBpZiAobm9kZS5yZW5k
ZXJlcigpKQorICAgICAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiAgICAgfQog
fQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShSYW5n
ZSogcmFuZ2UsIGJvb2wgYWN0aXZlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNl
dE1hcmtlcnNBY3RpdmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKICAgICBpZiAoIXBv
c3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBOb2RlJiBz
dGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVuZENv
bnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKKyAgICBOb2RlJiBzdGFydENvbnRhaW5l
ciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7CisgICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFu
Z2UuZW5kQ29udGFpbmVyKCk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFz
dExhc3ROb2RlKCk7CisgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2Rl
KCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0g
cGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAg
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lciA/IHJhbmdl
LT5zdGFydE9mZnNldCgpIDogMDsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9kZSA9
PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKG5vZGUsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2Uu
Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZz
dGFydENvbnRhaW5lciA/IHJhbmdlLnN0YXJ0T2Zmc2V0KCkgOiAwOworICAgICAgICB1bnNpZ25l
ZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyByYW5nZS5lbmRPZmZzZXQoKSA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAgICAgc2V0TWFya2Vy
c0FjdGl2ZSgqbm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlKTsKICAgICB9CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0
aXZlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9k
ZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBh
Y3RpdmUpCiB7Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7Cisg
ICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlz
dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NTIsOCArNzUyLDggQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQKICAgICAgICAgZGlkQWN0aXZhdGVNYXJrZXIgPSB0cnVlOwogICAgIH0KIAotICAg
IGlmIChkaWRBY3RpdmF0ZU1hcmtlciAmJiBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBub2Rl
LT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRpZEFjdGl2YXRlTWFya2VyICYmIG5v
ZGUucmVuZGVyZXIoKSkKKyAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9CiAK
IGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKQEAgLTc2
Nyw3ICs3NjcsNyBAQCBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhS
YW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcgogCiAgICAgTm9kZSogcGFzdExh
c3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFu
Z2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9y
KG5vZGUpKSB7CisgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcigqbm9kZSkp
IHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0
YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJhbmdlLnN0YXJ0T2Zmc2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCmluZGV4IDkwMDdhMTg3M2FkNTljMWRjY2NhNTI3NmU4OTQ2ZWI0
ZWU1YTkxMGEuLmFmZWE3NmExYWFjMDkwZDE4NmRmNThlNzY3ZDZmNjZhOTg2NjQ5OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTMsNyAr
Myw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC00OCwxOSAr
NDgsMTkgQEAgcHVibGljOgogICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIoKTsKIAogICAg
IHZvaWQgZGV0YWNoKCk7Ci0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Ci0gICAgdm9pZCBhZGRN
YXJrZXJUb05vZGUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShO
b2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlKiwgYm9vbCBhY3RpdmVNYXRj
aCk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7CisgICAgdm9pZCBhZGRNYXJrZXJUb05vZGUo
Tm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlKTsKKyAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShOb2RlJiwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
VGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBhY3RpdmVNYXRjaCk7CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKLSAgICB2
b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UqLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zKTsKLSAgICB2b2lkIGFkZERpY3RhdGlv
blJlc3VsdE1hcmtlcihSYW5nZSosIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKKyAg
ICB2b2lkIGFkZE1hcmtlcihSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25z
dCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRp
b25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CisgICAgdm9pZCBhZGREaWN0YXRp
b25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGludGVycHJldGF0aW9ucyk7CisgICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIo
UmFuZ2UmLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CiAjZW5kaWYKLSAgICB2b2lk
IGFkZERyYWdnZWRDb250ZW50TWFya2VyKFJlZlB0cjxSYW5nZT4pOworICAgIHZvaWQgYWRkRHJh
Z2dlZENvbnRlbnRNYXJrZXIoUmFuZ2UmKTsKIAotICAgIHZvaWQgY29weU1hcmtlcnMoTm9kZSog
c3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUs
IGludCBkZWx0YSk7CisgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzcmNOb2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9kZSwgaW50IGRlbHRhKTsKICAg
ICBib29sIGhhc01hcmtlcnMoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWFya2Vy
cy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmNvbnRhaW5zKERv
Y3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKQEAgLTcyLDE3ICs3MiwxNyBAQCBwdWJsaWM6
CiAgICAgLy8gcmVtb3ZlIHRoZSBtYXJrZXIuIElmIHRoZSBhcmd1bWVudCBpcyBmYWxzZSwgd2Ug
d2lsbCBhZGp1c3QgdGhlIHNwYW4gb2YgdGhlIG1hcmtlciBzbyB0aGF0IGl0IHJldGFpbnMKICAg
ICAvLyB0aGUgcG9ydGlvbiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLgogICAgIGVudW0g
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCB7IERvTm90UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyIH07
Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJzKFJhbmdlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKLSAgICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSosIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
KyAgICB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
PSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCAgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKLSAg
ICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSosIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIHJlbW92
ZU1hcmtlcnMoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKICAgICB2b2lkIHJlcGFpbnRNYXJrZXJzKE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxs
TWFya2VycygpKTsKLSAgICB2b2lkIHNoaWZ0TWFya2VycyhOb2RlKiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGludCBkZWx0YSk7Ci0gICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKFJhbmdlKiwgYm9v
bCk7Ci0gICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKKyAgICB2b2lkIHNoaWZ0TWFya2VycyhOb2Rl
JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSk7CisgICAgdm9pZCBzZXRNYXJrZXJz
QWN0aXZlKFJhbmdlJiwgYm9vbCk7CisgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5vZGUmLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihO
b2RlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFy
a2VyOjphbGxNYXJrZXJzKCkpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2Uo
UmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKICAgICB2b2lk
IGNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogCkBAIC05OSw3ICs5OSw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgYWRkTWFya2VyKE5vZGUqLCBjb25z
dCBEb2N1bWVudE1hcmtlciYpOworICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBjb25zdCBEb2N1
bWVudE1hcmtlciYpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cj4gTWFya2VyTGlzdDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVu
aXF1ZV9wdHI8TWFya2VyTGlzdD4+IE1hcmtlck1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCA2ODk1NGY1MmVjM2ZkZjUyNzcyOTA4MmU4YjIxMTQ0OGI1MjZjMTJhLi5hMWVkNjdhYmQ1NGE3
MGVhZTU5ZTIwN2U5Nzk1M2Q4MzE5NzZmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0y
MDAsNyArMjAwLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQogICAgICAgICBkZXRhY2hBbGxBdHRy
Tm9kZXNGcm9tRWxlbWVudCgpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgewot
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVtZW50RnJv
bVBlbmRpbmdSZXNvdXJjZXModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcygqdGhpcyk7CiAgICAg
ICAgIEFTU0VSVCghaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICB9CiB9CkBAIC01MzcsMjUg
KzUzNywyNSBAQCBib29sIEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIGJvb2wgRWxlbWVu
dDo6aXNVc2VyQWN0aW9uRWxlbWVudEluQWN0aXZlQ2hhaW4oKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rp
b25FbGVtZW50cygpLmlzSW5BY3RpdmVDaGFpbih0aGlzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQo
KS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0luQWN0aXZlQ2hhaW4oKnRoaXMpOwogfQogCiBib29s
IEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRBY3RpdmUoKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rp
b25FbGVtZW50cygpLmlzQWN0aXZlKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJB
Y3Rpb25FbGVtZW50cygpLmlzQWN0aXZlKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1Vz
ZXJBY3Rpb25FbGVtZW50Rm9jdXNlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlv
bkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCku
aXNGb2N1c2VkKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50
cygpLmlzRm9jdXNlZCgqdGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxl
bWVudEhvdmVyZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VzZXJBY3Rpb25FbGVtZW50KCkp
OwotICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzSG92ZXJlZCh0
aGlzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0hvdmVy
ZWQoKnRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wg
cGF1c2UpCkBAIC01NjMsNyArNTYzLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRBY3RpdmUoYm9vbCBm
bGFnLCBib29sIHBhdXNlKQogICAgIGlmIChmbGFnID09IGFjdGl2ZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEFjdGl2ZSh0aGlz
LCBmbGFnKTsKKyAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEFjdGl2ZSgq
dGhpcywgZmxhZyk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSB0aGlz
LT5yZW5kZXJTdHlsZSgpOwogICAgIGJvb2wgcmVhY3RzVG9QcmVzcyA9IChyZW5kZXJTdHlsZSAm
JiByZW5kZXJTdHlsZS0+YWZmZWN0ZWRCeUFjdGl2ZSgpKSB8fCBzdHlsZUFmZmVjdGVkQnlBY3Rp
dmUoKTsKQEAgLTYxMiw3ICs2MTIsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEZvY3VzKGJvb2wgZmxh
ZykKICAgICBpZiAoZmxhZyA9PSBmb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9jdXNlZCh0aGlzLCBmbGFnKTsKKyAg
ICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEZvY3VzZWQoKnRoaXMsIGZsYWcp
OwogICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGZvciAoRWxlbWVudCog
ZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
SW5Db21wb3NlZFRyZWUoKSkKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhv
dmVyZWQoYm9vbCBmbGFnKQogICAgIGlmIChmbGFnID09IGhvdmVyZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRIb3ZlcmVkKHRo
aXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0SG92ZXJl
ZCgqdGhpcywgZmxhZyk7CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gV2hl
biBzZXR0aW5nIGhvdmVyIHRvIGZhbHNlLCB0aGUgc3R5bGUgbmVlZHMgdG8gYmUgcmVjYWxjJ2Qg
ZXZlbiB3aGVuCkBAIC0xNjA5LDE2ICsxNjA5LDE2IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmli
dXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+
bGVuZ3RoKCk7CiB9CiAKLWJvb2wgRWxlbWVudDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29u
c3QgRWxlbWVudCogb3RoZXIpIGNvbnN0Citib29sIEVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRy
aWJ1dGVzKGNvbnN0IEVsZW1lbnQmIG90aGVyKSBjb25zdAogewogICAgIHN5bmNocm9uaXplQWxs
QXR0cmlidXRlcygpOwotICAgIG90aGVyLT5zeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAg
ICBpZiAoZWxlbWVudERhdGEoKSA9PSBvdGhlci0+ZWxlbWVudERhdGEoKSkKKyAgICBvdGhlci5z
eW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoZWxlbWVudERhdGEoKSA9PSBvdGhl
ci5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoZWxlbWVudERh
dGEoKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChvdGhlci0+
ZWxlbWVudERhdGEoKSk7Ci0gICAgaWYgKG90aGVyLT5lbGVtZW50RGF0YSgpKQotICAgICAgICBy
ZXR1cm4gb3RoZXItPmVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChlbGVtZW50RGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChvdGhlci5lbGVtZW50
RGF0YSgpKTsKKyAgICBpZiAob3RoZXIuZWxlbWVudERhdGEoKSkKKyAgICAgICAgcmV0dXJuIG90
aGVyLmVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChlbGVtZW50RGF0YSgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVk
RnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKICAgICBDb250YWluZXJOb2RlOjpy
ZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiAKICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNl
cygpKQotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVt
ZW50RnJvbVBlbmRpbmdSZXNvdXJjZXModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcygqdGhpcyk7
CiAKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTE4MTcsNyArMTgxNyw3IEBAIHZvaWQgRWxlbWVu
dDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um9vdD4mJiBuZXdTaGFkb3dSb290KQogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3QoKnRoaXMsIHNoYWRvd1Jv
b3QpOwogCiAgICAgaWYgKHNoYWRvd1Jvb3QubW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2Vy
QWdlbnQpCi0gICAgICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoJnNoYWRvd1Jvb3QpOwor
ICAgICAgICBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KHNoYWRvd1Jvb3QpOwogfQogCiB2b2lk
IEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQpAQCAtMzUzMCwxMCArMzUzMCwxMCBAQCB2b2lk
IEVsZW1lbnQ6OmNsZWFySG92ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5kZXJl
cigpCiAgICAgaWYgKCFpc1VzZXJBY3Rpb25FbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoaG92ZXJlZCgpKQotICAgICAgICBkb2N1bWVudCgpLmhvdmVyZWRFbGVtZW50RGlkRGV0
YWNoKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKCp0
aGlzKTsKICAgICBpZiAoaW5BY3RpdmVDaGFpbigpKQotICAgICAgICBkb2N1bWVudCgpLmVsZW1l
bnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKHRoaXMpOwotICAgIGRvY3VtZW50KCkudXNlckFjdGlv
bkVsZW1lbnRzKCkuZGlkRGV0YWNoKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmVsZW1lbnRJ
bkFjdGl2ZUNoYWluRGlkRGV0YWNoKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25F
bGVtZW50cygpLmRpZERldGFjaCgqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6d2lsbFJlY2Fs
Y1N0eWxlKFN0eWxlOjpDaGFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBmNmRiZWFjMzRhNWYz
NmVhOGUxMzA4YjZiMGZhYzE2MjJiZDc3NDMzLi42OWYwN2MwOGQ0ODMyZjFmMTA4MjFhOTE4ZDM1
OGE2YzQyNGQ0ZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTI1OSw3ICsyNTksNyBAQCBwdWJs
aWM6CiAgICAgLy8gQ2xvbmVzIGFsbCBhdHRyaWJ1dGUtZGVyaXZlZCBkYXRhLCBpbmNsdWRpbmcg
c3ViY2xhc3Mgc3BlY2lmaWNzICh0aHJvdWdoIGNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzLikK
ICAgICB2b2lkIGNsb25lRGF0YUZyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmKTsKIAotICAgIGJv
b2wgaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCogb3RoZXIpIGNvbnN0Owor
ICAgIGJvb2wgaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCYgb3RoZXIpIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzRnJvbUVs
ZW1lbnQoY29uc3QgRWxlbWVudCYpIHsgfQogCkBAIC01OTMsMTQgKzU5Myw5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpc1VzZXJBY3Rpb25FbGVtZW50Rm9jdXNlZCgpIGNvbnN0OwogICAgIGJvb2wg
aXNVc2VyQWN0aW9uRWxlbWVudEhvdmVyZWQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgeyB9CiAgICAgdmlydHVh
bCBib29sIGFsd2F5c0NyZWF0ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgQXR0ciB0byBjYWxs
IHdpbGxNb2RpZnlBdHRyaWJ1dGUvZGlkTW9kaWZ5QXR0cmlidXRlLgotICAgIGZyaWVuZCBjbGFz
cyBBdHRyOwotCi0gICAgZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgeyBOb3RJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA9IDAsIEluU3luY2hyb25pemF0aW9uT2ZM
YXp5QXR0cmlidXRlIH07Ci0KICAgICB2b2lkIGRpZEFkZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgdm9pZCB3aWxsTW9kaWZ5QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIGRpZE1vZGlmeUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CkBAIC02MjgsNiArNjIzLDcgQEAgcHJpdmF0ZToK
ICAgICBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgY2hpbGRUeXBl
QWxsb3dlZChOb2RlVHlwZSkgY29uc3QgZmluYWw7CiAKKyAgICBlbnVtIFN5bmNocm9uaXphdGlv
bk9mTGF6eUF0dHJpYnV0ZSB7IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlLCBJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB9OwogICAgIHZvaWQgc2V0QXR0cmlidXRl
SW50ZXJuYWwodW5zaWduZWQgaW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlLCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAgIHZv
aWQgYWRkQXR0cmlidXRlSW50ZXJuYWwoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgdm9p
ZCByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25lZCBpbmRleCwgU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5v
ZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggNWI3
NGEyYjM1OTg4NGQyNTY1MmZkZWUyODBhZjhmMjI2NzBiNTJkMC4uMTdiY2VlNmVhNzM4MmNiMGNi
NTgzM2YxMmFiNWRjNTRiNDdkNjBkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05h
bWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAK
QEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKIAogI2luY2x1ZGUg
IkF0dHIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Niw3ICs2NSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogVmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVudC5n
ZXRBdHRyaWJ1dGVOYW1lcygpOwotICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAm
JiBpczxIVE1MRG9jdW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgeworICAgIGlmIChpczxI
VE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBtX2VsZW1lbnQuZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpKSB7CiAgICAgICAgIG5hbWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdKFN0cmluZyYgbmFt
ZSkgewogICAgICAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IFN0cmluZ1ZpZXcgeyBuYW1l
IH0uY29kZVVuaXRzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVyKGNoYXJh
Y3RlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNWI5N2M2OGU3YjdkYTgzNmYzYzQ4NjAxMzU4MTkw
MjRiMmYwOWFhMC4uYjUyM2Y5MjVmYWM0MTJhNTkyMDQxNGM3NzY0OTVkMmQ5MzVkMjFkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcApAQCAtNTk5LDcgKzU5OSw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkK
ICAgICAgICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkg
ewogICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nLT5ub2RlVHlwZSgpICE9IFRFWFRfTk9ERSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBuZXh0VGV4
dCA9IGRvd25jYXN0PFRleHQ+KG5leHRTaWJsaW5nKTsKKyAgICAgICAgICAgIFJlZjxUZXh0PiBu
ZXh0VGV4dCA9IGRvd25jYXN0PFRleHQ+KCpuZXh0U2libGluZyk7CiAKICAgICAgICAgICAgIC8v
IFJlbW92ZSBlbXB0eSB0ZXh0IG5vZGVzLgogICAgICAgICAgICAgaWYgKCFuZXh0VGV4dC0+bGVu
Z3RoKCkpIHsKQEAgLTYxMCw3ICs2MTAsNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAg
ICAgICAgICAvLyBCb3RoIG5vbi1lbXB0eSB0ZXh0IG5vZGVzLiBNZXJnZSB0aGVtLgogICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgICAgICAgICB0ZXh0
LT5hcHBlbmREYXRhKG5leHRUZXh0LT5kYXRhKCkpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS50
ZXh0Tm9kZXNNZXJnZWQobmV4dFRleHQuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICBkb2N1
bWVudCgpLnRleHROb2Rlc01lcmdlZChuZXh0VGV4dCwgb2Zmc2V0KTsKICAgICAgICAgICAgIG5l
eHRUZXh0LT5yZW1vdmUoKTsKICAgICAgICAgfQogCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCBib29s
IE5vZGU6OmlzRXF1YWxOb2RlKE5vZGUqIG90aGVyKSBjb25zdAogICAgICAgICBhdXRvJiBvdGhl
ckVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqb3RoZXIpOwogICAgICAgICBpZiAodGhpc0Vs
ZW1lbnQudGFnUU5hbWUoKSAhPSBvdGhlckVsZW1lbnQudGFnUU5hbWUoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF0aGlzRWxlbWVudC5oYXNFcXVpdmFsZW50QXR0
cmlidXRlcygmb3RoZXJFbGVtZW50KSkKKyAgICAgICAgaWYgKCF0aGlzRWxlbWVudC5oYXNFcXVp
dmFsZW50QXR0cmlidXRlcyhvdGhlckVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNw
cAppbmRleCA0NWQ4NjBiYTg2ZjQ5MDM2NjE5OGJmZTg0NjRmMWMyNjUxMmU5Yjc5Li5mNmYxMDIw
NjliOWVmYzQxYTQyNWNmNmRhM2MyNDc3YmVlZGExMmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0
ZXJhdG9yLmNwcApAQCAtNzMsNyArNzMsNyBAQCBpbmxpbmUgTm9kZUl0ZXJhdG9yOjpOb2RlSXRl
cmF0b3IoTm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlB0cjxObwogICAg
IDogTm9kZUl0ZXJhdG9yQmFzZShyb290Tm9kZSwgd2hhdFRvU2hvdywgV1RGTW92ZShmaWx0ZXIp
KQogICAgICwgbV9yZWZlcmVuY2VOb2RlKHJvb3ROb2RlLCB0cnVlKQogewotICAgIHJvb3QoKS5k
b2N1bWVudCgpLmF0dGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKKyAgICByb290KCkuZG9jdW1lbnQo
KS5hdHRhY2hOb2RlSXRlcmF0b3IoKnRoaXMpOwogfQogCiBSZWY8Tm9kZUl0ZXJhdG9yPiBOb2Rl
SXRlcmF0b3I6OmNyZWF0ZShOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUmVm
UHRyPE5vZGVGaWx0ZXI+JiYgZmlsdGVyKQpAQCAtODMsNyArODMsNyBAQCBSZWY8Tm9kZUl0ZXJh
dG9yPiBOb2RlSXRlcmF0b3I6OmNyZWF0ZShOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRv
U2hvdywgUmVmUAogCiBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogewotICAgIHJvb3Qo
KS5kb2N1bWVudCgpLmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKKyAgICByb290KCkuZG9jdW1l
bnQoKS5kZXRhY2hOb2RlSXRlcmF0b3IoKnRoaXMpOwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8
Tm9kZT4+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5jcHAKaW5kZXggNGQzMzcyNzljMGVjYmM5NTBkZjQ5ZWViMWU1NDI3NDI3MzBk
NTk3ZC4uNDU4MWE5NGIxM2VmYjZlMzhjMzY3YmE3MTgyNjRhY2U1ZTczZDZkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0zMCwzNSArMzAsMjcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmFkaW9CdXR0b25Hcm91cCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUmFkaW9CdXR0b25Hcm91cCgpOwogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtYmVycy5pc0VtcHR5KCk7IH0KICAgICBi
b29sIGlzUmVxdWlyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVkQ291bnQ7IH0KICAgICBI
VE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2Vk
QnV0dG9uOyB9Ci0gICAgdm9pZCBhZGQoSFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgdXBk
YXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlcXVpcmVkQXR0
cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmUoSFRNTElu
cHV0RWxlbWVudCopOwotICAgIGJvb2wgY29udGFpbnMoSFRNTElucHV0RWxlbWVudCopIGNvbnN0
OworICAgIHZvaWQgYWRkKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNr
ZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNo
YW5nZWQoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlKEhUTUxJbnB1dEVsZW1l
bnQmKTsKKyAgICBib29sIGNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKICAgICBW
ZWN0b3I8SFRNTElucHV0RWxlbWVudCo+IG1lbWJlcnMoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0b25zKCk7CiAgICAgdm9pZCB1cGRh
dGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMoKTsKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAg
ICB2b2lkIGNoYW5nZUNoZWNrZWRCdXR0b24oSFRNTElucHV0RWxlbWVudCopOwogICAgIHZvaWQg
c2V0Q2hlY2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7CiAKICAgICBIYXNoU2V0PEhUTUxJ
bnB1dEVsZW1lbnQqPiBtX21lbWJlcnM7Ci0gICAgSFRNTElucHV0RWxlbWVudCogbV9jaGVja2Vk
QnV0dG9uOwotICAgIHNpemVfdCBtX3JlcXVpcmVkQ291bnQ7CisgICAgSFRNTElucHV0RWxlbWVu
dCogbV9jaGVja2VkQnV0dG9uIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX3JlcXVpcmVkQ291
bnQgeyAwIH07CiB9OwogCi1SYWRpb0J1dHRvbkdyb3VwOjpSYWRpb0J1dHRvbkdyb3VwKCkKLSAg
ICA6IG1fY2hlY2tlZEJ1dHRvbihudWxscHRyKQotICAgICwgbV9yZXF1aXJlZENvdW50KDApCi17
Ci19Ci0KIGlubGluZSBib29sIFJhZGlvQnV0dG9uR3JvdXA6OmlzVmFsaWQoKSBjb25zdAogewog
ICAgIHJldHVybiAhaXNSZXF1aXJlZCgpIHx8IG1fY2hlY2tlZEJ1dHRvbjsKQEAgLTg4LDE2ICs4
MCwxNiBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnNldENoZWNrZWRCdXR0b24oSFRNTElucHV0
RWxlbWVudCogYnV0dG9uKQogICAgICAgICBvbGRDaGVja2VkQnV0dG9uLT5zZXRDaGVja2VkKGZh
bHNlKTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjphZGQoSFRNTElucHV0RWxlbWVudCog
YnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjphZGQoSFRNTElucHV0RWxlbWVudCYgYnV0
dG9uKQogewotICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKCFt
X21lbWJlcnMuYWRkKGJ1dHRvbikuaXNOZXdFbnRyeSkKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFk
aW9CdXR0b24oKSk7CisgICAgaWYgKCFtX21lbWJlcnMuYWRkKCZidXR0b24pLmlzTmV3RW50cnkp
CiAgICAgICAgIHJldHVybjsKICAgICBib29sIGdyb3VwV2FzVmFsaWQgPSBpc1ZhbGlkKCk7Ci0g
ICAgaWYgKGJ1dHRvbi0+aXNSZXF1aXJlZCgpKQorICAgIGlmIChidXR0b24uaXNSZXF1aXJlZCgp
KQogICAgICAgICArK21fcmVxdWlyZWRDb3VudDsKLSAgICBpZiAoYnV0dG9uLT5jaGVja2VkKCkp
Ci0gICAgICAgIHNldENoZWNrZWRCdXR0b24oYnV0dG9uKTsKKyAgICBpZiAoYnV0dG9uLmNoZWNr
ZWQoKSkKKyAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbigmYnV0dG9uKTsKIAogICAgIGJvb2wgZ3Jv
dXBJc1ZhbGlkID0gaXNWYWxpZCgpOwogICAgIGlmIChncm91cFdhc1ZhbGlkICE9IGdyb3VwSXNW
YWxpZCkKQEAgLTEwNSwzMSArOTcsMzEgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjphZGQoSFRN
TElucHV0RWxlbWVudCogYnV0dG9uKQogICAgIGVsc2UgaWYgKCFncm91cElzVmFsaWQpIHsKICAg
ICAgICAgLy8gQSByYWRpbyBidXR0b24gbm90IGluIGEgZ3JvdXAgaXMgYWx3YXlzIHZhbGlkLiBX
ZSBuZWVkIHRvIG1ha2UgaXQKICAgICAgICAgLy8gaW52YWxpZCBvbmx5IGlmIHRoZSBncm91cCBp
cyBpbnZhbGlkLgotICAgICAgICBidXR0b24tPnVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAgIGJ1
dHRvbi51cGRhdGVWYWxpZGl0eSgpOwogICAgIH0KIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vw
Ojp1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRp
b0J1dHRvbkdyb3VwOjp1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCYgYnV0dG9u
KQogewotICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgQVNTRVJUKG1f
bWVtYmVycy5jb250YWlucyhidXR0b24pKTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0
b24oKSk7CisgICAgQVNTRVJUKG1fbWVtYmVycy5jb250YWlucygmYnV0dG9uKSk7CiAgICAgYm9v
bCB3YXNWYWxpZCA9IGlzVmFsaWQoKTsKLSAgICBpZiAoYnV0dG9uLT5jaGVja2VkKCkpCi0gICAg
ICAgIHNldENoZWNrZWRCdXR0b24oYnV0dG9uKTsKKyAgICBpZiAoYnV0dG9uLmNoZWNrZWQoKSkK
KyAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbigmYnV0dG9uKTsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIGlmIChtX2NoZWNrZWRCdXR0
b24gPT0gJmJ1dHRvbikKICAgICAgICAgICAgIHNldENoZWNrZWRCdXR0b24obnVsbHB0cik7CiAg
ICAgfQogICAgIGlmICh3YXNWYWxpZCAhPSBpc1ZhbGlkKCkpCiAgICAgICAgIHVwZGF0ZVZhbGlk
aXR5Rm9yQWxsQnV0dG9ucygpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlcXVpcmVk
QXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0
dG9uR3JvdXA6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50JiBidXR0
b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBBU1NFUlQo
bV9tZW1iZXJzLmNvbnRhaW5zKGJ1dHRvbikpOworICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1
dHRvbigpKTsKKyAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5zKCZidXR0b24pKTsKICAgICBi
b29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24tPmlzUmVxdWlyZWQoKSkK
KyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkKICAgICAgICAgKyttX3JlcXVpcmVkQ291bnQ7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX3JlcXVpcmVkQ291bnQpOwpAQCAtMTM5LDIy
ICsxMzEsMjIgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5n
ZWQoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKQogICAgICAgICB1cGRhdGVWYWxpZGl0eUZvckFs
bEJ1dHRvbnMoKTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUoSFRNTElucHV0
RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUoSFRNTElucHV0
RWxlbWVudCYgYnV0dG9uKQogewotICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7
Ci0gICAgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9tZW1iZXJz
LmZpbmQoYnV0dG9uKTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0b24oKSk7CisgICAg
YXV0byBpdCA9IG1fbWVtYmVycy5maW5kKCZidXR0b24pOwogICAgIGlmIChpdCA9PSBtX21lbWJl
cnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1ZhbGlk
KCk7CiAgICAgbV9tZW1iZXJzLnJlbW92ZShpdCk7Ci0gICAgaWYgKGJ1dHRvbi0+aXNSZXF1aXJl
ZCgpKSB7CisgICAgaWYgKGJ1dHRvbi5pc1JlcXVpcmVkKCkpIHsKICAgICAgICAgQVNTRVJUKG1f
cmVxdWlyZWRDb3VudCk7CiAgICAgICAgIC0tbV9yZXF1aXJlZENvdW50OwogICAgIH0KICAgICBp
ZiAobV9jaGVja2VkQnV0dG9uKSB7Ci0gICAgICAgIGJ1dHRvbi0+aW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwotICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09IGJ1dHRvbikgeworICAg
ICAgICBidXR0b24uaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworICAgICAgICBpZiAobV9j
aGVja2VkQnV0dG9uID09ICZidXR0b24pIHsKICAgICAgICAgICAgIG1fY2hlY2tlZEJ1dHRvbiA9
IG51bGxwdHI7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjRm9yQWxsQnV0dG9ucygp
OwogICAgICAgICB9CkBAIC0xNjgsNyArMTYwLDcgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpy
ZW1vdmUoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKQogICAgIGlmICghd2FzVmFsaWQpIHsKICAg
ICAgICAgLy8gQSByYWRpbyBidXR0b24gbm90IGluIGEgZ3JvdXAgaXMgYWx3YXlzIHZhbGlkLiBX
ZSBuZWVkIHRvIG1ha2UgaXQKICAgICAgICAgLy8gdmFsaWQgb25seSBpZiB0aGUgZ3JvdXAgd2Fz
IGludmFsaWQuCi0gICAgICAgIGJ1dHRvbi0+dXBkYXRlVmFsaWRpdHkoKTsKKyAgICAgICAgYnV0
dG9uLnVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgfQogfQogCkBAIC0xODgsOSArMTgwLDkgQEAgdm9p
ZCBSYWRpb0J1dHRvbkdyb3VwOjp1cGRhdGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMoKQogICAgIH0K
IH0KIAotYm9vbCBSYWRpb0J1dHRvbkdyb3VwOjpjb250YWlucyhIVE1MSW5wdXRFbGVtZW50KiBi
dXR0b24pIGNvbnN0Citib29sIFJhZGlvQnV0dG9uR3JvdXA6OmNvbnRhaW5zKEhUTUxJbnB1dEVs
ZW1lbnQmIGJ1dHRvbikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZW1iZXJzLmNvbnRhaW5zKGJ1
dHRvbik7CisgICAgcmV0dXJuIG1fbWVtYmVycy5jb250YWlucygmYnV0dG9uKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMjA2LDE2ICsxOTgsMTYgQEAgUmFkaW9CdXR0b25Hcm91cHM6On5SYWRpb0J1
dHRvbkdyb3VwcygpCiB7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbihI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6YWRkQnV0
dG9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlz
UmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAg
QVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXAp
CiAgICAgICAgIG1fbmFtZVRvR3JvdXBNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPE5hbWVUb0dyb3Vw
TWFwPigpOwogCi0gICAgYXV0byYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVu
dC0+bmFtZSgpLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGF1dG8mIGdy
b3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQubmFtZSgpLmltcGwoKSwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0gc3Rk
OjptYWtlX3VuaXF1ZTxSYWRpb0J1dHRvbkdyb3VwPigpOwogICAgIGdyb3VwLT5hZGQoZWxlbWVu
dCk7CkBAIC0yNDAsMzAgKzIzMiwyNiBAQCBWZWN0b3I8SFRNTElucHV0RWxlbWVudCo+IFJhZGlv
QnV0dG9uR3JvdXBzOjpncm91cE1lbWJlcnMoY29uc3QgSFRNTElucHV0RWxlbWVudAogICAgIHJl
dHVybiBncm91cC0+bWVtYmVycygpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjp1cGRh
dGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0
b25Hcm91cHM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50
LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7
CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IEFTU0VSVChtX25hbWVUb0dyb3VwTWFwKTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAg
ICAgICAgIHJldHVybjsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKLSAgICBBU1NFUlQoZ3JvdXApOwot
ICAgIGdyb3VwLT51cGRhdGVDaGVja2VkU3RhdGUoZWxlbWVudCk7CisgICAgbV9uYW1lVG9Hcm91
cE1hcC0+Z2V0KGVsZW1lbnQubmFtZSgpLmltcGwoKSktPnVwZGF0ZUNoZWNrZWRTdGF0ZShlbGVt
ZW50KTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFu
Z2VkKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpy
ZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAg
ICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFt
ZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAg
IGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQobV9uYW1lVG9Hcm91cE1hcCk7CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAg
ICByZXR1cm47Ci0gICAgUmFkaW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFw
LT5nZXQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKLSAgICBn
cm91cC0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKGVsZW1lbnQpOworICAgIG1fbmFtZVRvR3Jv
dXBNYXAtPmdldChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5n
ZWQoZWxlbWVudCk7CiB9CiAKIEhUTUxJbnB1dEVsZW1lbnQqIFJhZGlvQnV0dG9uR3JvdXBzOjpj
aGVja2VkQnV0dG9uRm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAt
Mjc1LDM4ICsyNjMsMzYgQEAgSFRNTElucHV0RWxlbWVudCogUmFkaW9CdXR0b25Hcm91cHM6OmNo
ZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIG4KICAgICByZXR1cm4gZ3Jv
dXAgPyBncm91cC0+Y2hlY2tlZEJ1dHRvbigpIDogbnVsbHB0cjsKIH0KIAotYm9vbCBSYWRpb0J1
dHRvbkdyb3Vwczo6aGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAorYm9vbCBSYWRpb0J1dHRvbkdyb3Vwczo6aGFzQ2hlY2tlZEJ1dHRvbihjb25z
dCBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGVsZW1l
bnQtPm5hbWUoKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGVsZW1lbnQubmFtZSgpOwogICAgIGlmIChuYW1lLmlz
RW1wdHkoKSB8fCAhbV9uYW1lVG9Hcm91cE1hcCkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmNo
ZWNrZWQoKTsKLQotICAgIGNvbnN0IFJhZGlvQnV0dG9uR3JvdXAqIGdyb3VwID0gbV9uYW1lVG9H
cm91cE1hcC0+Z2V0KG5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gZ3JvdXAtPmNoZWNrZWRCdXR0
b24oKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZCgpOworICAgIHJldHVybiBtX25h
bWVUb0dyb3VwTWFwLT5nZXQobmFtZS5pbXBsKCkpLT5jaGVja2VkQnV0dG9uKCk7CiB9CiAKLWJv
b2wgUmFkaW9CdXR0b25Hcm91cHM6OmlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Citib29sIFJhZGlvQnV0dG9uR3JvdXBzOjppc0luUmVxdWlyZWRHcm91
cChIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQor
ICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFt
ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9uYW1lVG9H
cm91cE1hcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJhZGlvQnV0dG9uR3JvdXAqIGdy
b3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOworICAg
IGF1dG8qIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQubmFtZSgpLmltcGwo
KSk7CiAgICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwLT5pc1JlcXVpcmVkKCkgJiYgZ3JvdXAtPmNv
bnRhaW5zKGVsZW1lbnQpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZW1vdmVCdXR0
b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OnJl
bW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgp
KQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQu
bmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9uYW1lVG9Hcm91
cE1hcCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9uYW1lVG9Hcm91cE1hcC0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBpdCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CisgICAgYXV0byBpdCA9IG1fbmFt
ZVRvR3JvdXBNYXAtPmZpbmQoZWxlbWVudC5uYW1lKCkuaW1wbCgpKTsKICAgICBpZiAoaXQgPT0g
bV9uYW1lVG9Hcm91cE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpdC0+dmFsdWUt
PnJlbW92ZShlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmgKaW5k
ZXggMWU1YTU4ZDU3ZGE3Njg1ZTFjMDE4ZmQ5NmFmYWYyMDdlZjAxMzM2YS4uNTMzMTJkZGU5NzA2
Y2U4ZDI0YTNlMjE0YWVjNGVjZjUzZWFlYTg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0
dG9uR3JvdXBzLmgKQEAgLTM0LDEzICszNCwxMyBAQCBjbGFzcyBSYWRpb0J1dHRvbkdyb3VwcyB7
CiBwdWJsaWM6CiAgICAgUmFkaW9CdXR0b25Hcm91cHMoKTsKICAgICB+UmFkaW9CdXR0b25Hcm91
cHMoKTsKLSAgICB2b2lkIGFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCB1
cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgcmVxdWlyZWRB
dHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgdm9pZCBhZGRCdXR0b24oSFRNTElucHV0RWxlbWVu
dCYpOworICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAg
ICB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Jik7CisgICAg
dm9pZCByZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCYpOwogICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIGdyb3VwTmFtZSkg
Y29uc3Q7Ci0gICAgYm9vbCBoYXNDaGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
KSBjb25zdDsKLSAgICBib29sIGlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQqKSBj
b25zdDsKKyAgICBib29sIGhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCYp
IGNvbnN0OworICAgIGJvb2wgaXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCYpIGNv
bnN0OwogICAgIFZlY3RvcjxIVE1MSW5wdXRFbGVtZW50Kj4gZ3JvdXBNZW1iZXJzKGNvbnN0IEhU
TUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4
IDVkYWUwNjM2YmIxOTczYTM1OTczODM5N2NiNjEzMDFmOTAyZTMwYzMuLjM2MTk5MDQ3YzM0Y2Fi
NmYyODE2NWUwZWY4MzRjMjI5YTg0ZDc0MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMzQsNyAr
MzQsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKQEAgLTc5LDcgKzc4LDcgQEAgaW5saW5lIFJhbmdlOjpSYW5nZShE
b2N1bWVudCYgb3duZXJEb2N1bWVudCkKICAgICByYW5nZUNvdW50ZXIuaW5jcmVtZW50KCk7CiAj
ZW5kaWYKIAotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9v
d25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CiB9CiAKIFJlZjxSYW5nZT4gUmFuZ2U6
OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCkKQEAgLTk2LDcgKzk1LDcgQEAgaW5saW5l
IFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgTm9kZSogc3RhcnRDb250YWlu
ZXIsIGludCBzdGFydE9mZnMKICAgICByYW5nZUNvdW50ZXIuaW5jcmVtZW50KCk7CiAjZW5kaWYK
IAotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRv
Y3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CiAKICAgICAvLyBTaW1wbHkgc2V0dGluZyB0aGUg
Y29udGFpbmVycyBhbmQgb2Zmc2V0cyBkaXJlY3RseSB3b3VsZCBub3QgZG8gYW55IG9mIHRoZSBj
aGVja2luZwogICAgIC8vIHRoYXQgc2V0U3RhcnQgYW5kIHNldEVuZCBkbywgc28gd2UgY2FsbCB0
aG9zZSBmdW5jdGlvbnMuCkBAIC0xMjUsNyArMTI0LDcgQEAgUmVmPFJhbmdlPiBSYW5nZTo6Y3Jl
YXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGUKIAogUmFuZ2U6On5SYW5nZSgpCiB7Ci0gICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5n
ZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKCp0aGlzKTsKIAogI2lm
bmRlZiBOREVCVUcKICAgICByYW5nZUNvdW50ZXIuZGVjcmVtZW50KCk7CkBAIC0xMzUsMTEgKzEz
NCwxMSBAQCBSYW5nZTo6flJhbmdlKCkKIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1
bWVudCk7Ci0gICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293
bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKCp0aGlzKTsKICAgICBtX293bmVyRG9jdW1lbnQgPSBk
b2N1bWVudDsKICAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOwogICAgIG1f
ZW5kLnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOwotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0
YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7
CiB9CiAKIE5vZGUqIFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWlu
ZXJBLCBOb2RlKiBjb250YWluZXJCKQpAQCAtOTc3LDcgKzk3Niw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25z
dCBTdHJpbmcmCiAgICAgICAgIGVsZW1lbnQgPSAmZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAg
ICAgZWxzZQogICAgICAgICBlbGVtZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYg
KCFlbGVtZW50IHx8IChpczxIVE1MRG9jdW1lbnQ+KGVsZW1lbnQtPmRvY3VtZW50KCkpICYmIGlz
PEhUTUxIdG1sRWxlbWVudD4oKmVsZW1lbnQpKSkKKyAgICBpZiAoIWVsZW1lbnQgfHwgKGVsZW1l
bnQtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSAmJiBpczxIVE1MSHRtbEVsZW1lbnQ+KCpl
bGVtZW50KSkpCiAgICAgICAgIGVsZW1lbnQgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShub2Rl
LmRvY3VtZW50KCkpOwogICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQoKmVsZW1lbnQsIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50QW5kRG9Ob3RNYXJrQWxy
ZWFkeVN0YXJ0ZWQpOwogfQpAQCAtMTY2OSw5ICsxNjY4LDkgQEAgdm9pZCBSYW5nZTo6bm9kZVdp
bGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKICAgICBib3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKG1f
ZW5kLCBub2RlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVk
KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2Vy
dGVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAh
PSB0ZXh0KQorICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAgICAg
cmV0dXJuOwogICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7
CiAgICAgaWYgKG9mZnNldCA+PSBib3VuZGFyeU9mZnNldCkKQEAgLTE2NzksMTcgKzE2NzgsMTYg
QEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIE5vZGUqIHRleHQKICAgICBib3VuZGFyeS5zZXRPZmZzZXQoYm91bmRh
cnlPZmZzZXQgKyBsZW5ndGgpOwogfQogCi12b2lkIFJhbmdlOjp0ZXh0SW5zZXJ0ZWQoTm9kZSog
dGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFJhbmdlOjp0ZXh0
SW5zZXJ0ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgQVNTRVJUKHRleHQpOwotICAgIEFTU0VSVCgmdGV4dC0+ZG9jdW1lbnQoKSA9PSAmb3du
ZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJnRleHQuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1
bWVudCgpKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0ZWQobV9lbmQsIHRleHQsIG9mZnNldCwg
bGVuZ3RoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFu
Z2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVtb3ZlZChS
YW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gdGV4
dCkKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVy
bjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAg
IGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xNzAwLDEwICsxNjk4LDkgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBi
b3VuZGFyeSwgTm9kZSogdGV4dCwKICAgICAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KGJvdW5kYXJ5
T2Zmc2V0IC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSogdGV4
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFJhbmdlOjp0ZXh0UmVt
b3ZlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICBBU1NFUlQodGV4dCk7Ci0gICAgQVNTRVJUKCZ0ZXh0LT5kb2N1bWVudCgpID09ICZvd25lckRv
Y3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50
KCkpOwogICAgIGJvdW5kYXJ5VGV4dFJlbW92ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5n
dGgpOwogICAgIGJvdW5kYXJ5VGV4dFJlbW92ZWQobV9lbmQsIHRleHQsIG9mZnNldCwgbGVuZ3Ro
KTsKIH0KQEAgLTE3MjgsMTUgKzE3MjUsMTUgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2Vk
KE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICBib3VuZGFyeVRl
eHROb2Rlc01lcmdlZChtX2VuZCwgb2xkTm9kZSwgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFy
eSwgVGV4dCogb2xkTm9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQmIG9sZE5vZGUpCiB7Ci0gICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFyeS5j
b250YWluZXIoKSA9PSBvbGROb2RlKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNwbGl0T2Zmc2V0ID0g
b2xkTm9kZS0+bGVuZ3RoKCk7CisgICAgYXV0byogcGFyZW50ID0gb2xkTm9kZS5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09ICZvbGROb2RlKSB7CisgICAgICAg
IHVuc2lnbmVkIHNwbGl0T2Zmc2V0ID0gb2xkTm9kZS5sZW5ndGgoKTsKICAgICAgICAgdW5zaWdu
ZWQgYm91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICAgICAgaWYgKGJvdW5k
YXJ5T2Zmc2V0ID4gc3BsaXRPZmZzZXQpIHsKICAgICAgICAgICAgIGlmIChwYXJlbnQpCi0gICAg
ICAgICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFy
eU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXQo
Km9sZE5vZGUubmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KHNw
bGl0T2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMTc0NCwyMCArMTc0MSwxOCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXJ5LCBUZXh0KiBvbAogICAgIH0KICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRC
ZWZvcmUoKSA9PSBvbGROb2RlKSB7Ci0gICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS0+
bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gcGFyZW50ICYm
IGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gJm9sZE5vZGUpIHsKKyAgICAgICAgYXV0byogbmV3
Q2hpbGQgPSBvbGROb2RlLm5leHRTaWJsaW5nKCk7CiAgICAgICAgIEFTU0VSVChuZXdDaGlsZCk7
CiAgICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJDaGlsZCgqbmV3Q2hpbGQpOwogICAgIH0KIH0K
IAotdm9pZCBSYW5nZTo6dGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQordm9pZCBSYW5nZTo6
dGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKQogewotICAgIEFTU0VSVChvbGROb2RlKTsKLSAg
ICBBU1NFUlQoJm9sZE5vZGUtPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Ci0gICAg
QVNTRVJUKG9sZE5vZGUtPmlzVGV4dE5vZGUoKSk7Ci0gICAgQVNTRVJUKCFvbGROb2RlLT5wYXJl
bnROb2RlKCkgfHwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSk7Ci0gICAgQVNTRVJUKCFvbGROb2Rl
LT5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsK
KyAgICBBU1NFUlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAg
ICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKSk7
CisgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5n
KCktPmlzVGV4dE5vZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChtX3N0YXJ0LCBv
bGROb2RlKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1fZW5kLCBvbGROb2RlKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmgKaW5kZXggM2YxYzUwY2I0NGFhYmExODY1NDJlNzc2OWI0M2Q0ZjdiZDNmZDlj
NS4uZjJmYzU0MjhkZmMyYjkzY2NlMjU3YjQwYTc4NjhlYmE5OTU5MmVmYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmgKQEAgLTEzMywxMCArMTMzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIG5vZGVDaGlsZHJlbldp
bGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYpOwogICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQo
Tm9kZSYpOwogCi0gICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSosIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHRSZW1vdmVkKE5vZGUqLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSYsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRSZW1vdmVkKE5v
ZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgdm9pZCB0ZXh0Tm9k
ZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2
b2lkIHRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSk7CisgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0
KFRleHQmIG9sZE5vZGUpOwogCiAgICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5pdCAod29yZCBv
ciBzZW50ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCiAgICAgLy8gUGxlYXNl
IHJlZmVyIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBj
b21tZW50ICM1IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGE4MzNlMjgy
MjZkZGQxZGNkMTQyZDVjYTIyYjM1NDYyZTJiOWMwZWYuLjQzZWFmMTRkNGNkY2Y5NGQwMGNiYTc5
MTJmZjA0YTlmNThiMzE2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAg
LTI1NiwxMSArMjU2LDExIEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChjb25z
dCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExlZ2FjCiAgICAgfSBlbHNlIGlm
ICgoaXNDbGFzc2ljRXh0ZXJuYWxTY3JpcHQgfHwgc2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBlOjpN
b2R1bGUpICYmICFoYXNBc3luY0F0dHJpYnV0ZSgpICYmICFtX2ZvcmNlQXN5bmMpIHsKICAgICAg
ICAgbV93aWxsRXhlY3V0ZUluT3JkZXIgPSB0cnVlOwogICAgICAgICBBU1NFUlQobV9sb2FkYWJs
ZVNjcmlwdCk7Ci0gICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlwdEZv
ckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1bm5lcjo6SU5fT1JE
RVJfRVhFQ1VUSU9OKTsKKyAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCkucXVldWVTY3Jp
cHRGb3JFeGVjdXRpb24oKnRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklO
X09SREVSX0VYRUNVVElPTik7CiAgICAgfSBlbHNlIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSB8
fCBzY3JpcHRUeXBlID09IFNjcmlwdFR5cGU6Ok1vZHVsZSkgewogICAgICAgICBBU1NFUlQobV9s
b2FkYWJsZVNjcmlwdCk7CiAgICAgICAgIEFTU0VSVChoYXNBc3luY0F0dHJpYnV0ZSgpIHx8IG1f
Zm9yY2VBc3luYyk7Ci0gICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlw
dEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1bm5lcjo6QVNZ
TkNfRVhFQ1VUSU9OKTsKKyAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCkucXVldWVTY3Jp
cHRGb3JFeGVjdXRpb24oKnRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFT
WU5DX0VYRUNVVElPTik7CiAgICAgfSBlbHNlIGlmICghaGFzU291cmNlQXR0cmlidXRlKCkgJiYg
bV9wYXJzZXJJbnNlcnRlZCAmJiAhZG9jdW1lbnQuaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpIHsK
ICAgICAgICAgQVNTRVJUKHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6Q2xhc3NpYyk7CiAgICAg
ICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCmluZGV4IGZl
OGM5ZDQ2MGIwZmMzMTk2YzI2YWI0MjQ2ZTZmODVjNzU4MjQwMGIuLmY2M2Y0NWVlODE4YjMxYmU4
NjgwNjYyODZlY2VlNGQ5ODA5MzdlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgRXhjZXB0aW9uT3I8UmVmPFRleHQ+PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0
KQogICAgICAgICAgICAgcmV0dXJuIGluc2VydFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgfQogCi0gICAgZG9jdW1lbnQoKS50ZXh0Tm9kZVNwbGl0KHRoaXMpOworICAgIGRvY3VtZW50
KCkudGV4dE5vZGVTcGxpdCgqdGhpcyk7CiAKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAg
cmVuZGVyZXIoKS0+c2V0VGV4dFdpdGhPZmZzZXQoZGF0YSgpLCAwLCBvbGREYXRhLmxlbmd0aCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwCmluZGV4IGE3
ZGJlNTE0NmEzYzg4YzRlZmZjYTdmYmIyZjdkMjE5Mzc3NDI5ZDcuLjczZTNhNjIxZDZmOGY4MTZi
NWJkOGVkMTYwNzVmMmRmZWZiNzljYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9V
c2VyQWN0aW9uRWxlbWVudFNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rp
b25FbGVtZW50U2V0LmNwcApAQCAtMzIsOSArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmRpZERldGFjaChFbGVtZW50KiBlbGVtZW50
KQordm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZGlkRGV0YWNoKEVsZW1lbnQmIGVsZW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSk7CisgICAgQVNT
RVJUKGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKICAgICBjbGVhckZsYWdzKGVsZW1l
bnQsIElzQWN0aXZlRmxhZyB8IEluQWN0aXZlQ2hhaW5GbGFnIHwgSXNIb3ZlcmVkRmxhZyk7CiB9
CiAKQEAgLTQzLDMxICs0MywyOCBAQCB2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0Ojpkb2N1bWVu
dERpZFJlbW92ZUxhc3RSZWYoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAotYm9vbCBV
c2VyQWN0aW9uRWxlbWVudFNldDo6aGFzRmxhZ3MoY29uc3QgRWxlbWVudCogZWxlbWVudCwgdW5z
aWduZWQgZmxhZ3MpIGNvbnN0Citib29sIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpoYXNGbGFncyhj
b25zdCBFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykgY29uc3QKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICBFbGVtZW50RmxhZ01hcDo6
Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2VsZW1lbnRzLmZpbmQoY29uc3RfY2FzdDxFbGVtZW50
Kj4oZWxlbWVudCkpOwotICAgIGlmIChmb3VuZCA9PSBtX2VsZW1lbnRzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGZvdW5kLT52YWx1ZSAmIGZsYWdzOworICAgIEFT
U0VSVChlbGVtZW50LmlzVXNlckFjdGlvbkVsZW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZWxlbWVu
dHMuZ2V0KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSkgJiBmbGFnczsKIH0KIAotdm9p
ZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6Y2xlYXJGbGFncyhFbGVtZW50KiBlbGVtZW50LCB1bnNp
Z25lZCBmbGFncykKK3ZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmNsZWFyRmxhZ3MoRWxlbWVu
dCYgZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCiB7Ci0gICAgaWYgKCFlbGVtZW50LT5pc1VzZXJB
Y3Rpb25FbGVtZW50KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fZWxlbWVudHMuZW5kKCkgPT0gbV9l
bGVtZW50cy5maW5kKGVsZW1lbnQpKTsKKyAgICBpZiAoIWVsZW1lbnQuaXNVc2VyQWN0aW9uRWxl
bWVudCgpKSB7CisgICAgICAgIEFTU0VSVCghbV9lbGVtZW50cy5jb250YWlucygmZWxlbWVudCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRWxlbWVudEZsYWdNYXA6Oml0ZXJhdG9y
IGZvdW5kID0gbV9lbGVtZW50cy5maW5kKGVsZW1lbnQpOworICAgIGF1dG8gZm91bmQgPSBtX2Vs
ZW1lbnRzLmZpbmQoJmVsZW1lbnQpOwogICAgIGlmIChmb3VuZCA9PSBtX2VsZW1lbnRzLmVuZCgp
KSB7Ci0gICAgICAgIGVsZW1lbnQtPnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKKyAgICAg
ICAgZWxlbWVudC5zZXRVc2VyQWN0aW9uRWxlbWVudChmYWxzZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICB1bnNpZ25lZCB1cGRhdGVkID0gZm91bmQtPnZhbHVlICYgfmZsYWdzOwog
ICAgIGlmICghdXBkYXRlZCkgewotICAgICAgICBlbGVtZW50LT5zZXRVc2VyQWN0aW9uRWxlbWVu
dChmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuc2V0VXNlckFjdGlvbkVsZW1lbnQoZmFsc2UpOwog
ICAgICAgICBtX2VsZW1lbnRzLnJlbW92ZShmb3VuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC03NSwxNyArNzIsMTYgQEAgdm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6Y2xlYXJGbGFn
cyhFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykKICAgICBmb3VuZC0+dmFsdWUgPSB1
cGRhdGVkOwogfQogCi12b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpzZXRGbGFncyhFbGVtZW50
KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykKK3ZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OnNl
dEZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQogewotICAgIEVsZW1lbnRG
bGFnTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2VsZW1lbnRzLmZpbmQoZWxlbWVudCk7Ci0gICAg
aWYgKHJlc3VsdCAhPSBtX2VsZW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50
LT5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgICAgICByZXN1bHQtPnZhbHVlIHw9IGZsYWdz
OworICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50cy5hZGQoJmVsZW1lbnQsIGZsYWdzKTsKKyAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50LmlzVXNl
ckFjdGlvbkVsZW1lbnQoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gZmxh
Z3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbGVtZW50LT5zZXRVc2VyQWN0aW9u
RWxlbWVudCh0cnVlKTsKLSAgICBtX2VsZW1lbnRzLmFkZChlbGVtZW50LCBmbGFncyk7CisgICAg
ZWxlbWVudC5zZXRVc2VyQWN0aW9uRWxlbWVudCh0cnVlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaAppbmRleCBjZTc2NGMzZWI4MzcxODc3YmZlOGEx
Yjg5MTU4YTY4YjcyNWY4M2VmLi5hNGM1OWI5MjBmZDlkMWZkYTQ1MTBmMjE4ZGM5MzgzOGQyMWJl
ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaApAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yNyw4
ICsyNyw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zNiwxNiArMzYsMTcgQEAgY2xhc3MgRWxlbWVudDsKIAogY2xh
c3MgVXNlckFjdGlvbkVsZW1lbnRTZXQgewogcHVibGljOgotICAgIGJvb2wgaXNGb2N1c2VkKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzRm9jdXNl
ZEZsYWcpOyB9Ci0gICAgYm9vbCBpc0FjdGl2ZShjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJl
dHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcpOyB9Ci0gICAgYm9vbCBpc0luQWN0
aXZlQ2hhaW4oY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVu
dCwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9Ci0gICAgYm9vbCBpc0hvdmVyZWQoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNIb3ZlcmVkRmxhZyk7IH0K
LSAgICB2b2lkIHNldEZvY3VzZWQoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0
RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0ZvY3VzZWRGbGFnKTsgfQotICAgIHZvaWQgc2V0QWN0
aXZlKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVu
YWJsZSwgSXNBY3RpdmVGbGFnKTsgfQotICAgIHZvaWQgc2V0SW5BY3RpdmVDaGFpbihFbGVtZW50
KiBlbGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIEluQWN0
aXZlQ2hhaW5GbGFnKTsgfQotICAgIHZvaWQgc2V0SG92ZXJlZChFbGVtZW50KiBlbGVtZW50LCBi
b29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzSG92ZXJlZEZsYWcpOyB9
CisgICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1
cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNGb2N1c2VkRmxhZyk7IH0KKyAgICBib29sIGlzQWN0aXZl
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQs
IElzQWN0aXZlRmxhZyk7IH0KKyAgICBib29sIGlzSW5BY3RpdmVDaGFpbihjb25zdCBFbGVtZW50
JiBlbGVtZW50KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJbkFjdGl2ZUNoYWlu
RmxhZyk7IH0KKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25z
dCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0hvdmVyZWRGbGFnKTsgfQogCi0gICAgdm9p
ZCBkaWREZXRhY2goRWxlbWVudCopOworICAgIHZvaWQgc2V0Rm9jdXNlZChFbGVtZW50JiBlbGVt
ZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzRm9jdXNlZEZs
YWcpOyB9CisgICAgdm9pZCBzZXRBY3RpdmUoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUp
IHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0FjdGl2ZUZsYWcpOyB9CisgICAgdm9pZCBz
ZXRJbkFjdGl2ZUNoYWluKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdz
KGVsZW1lbnQsIGVuYWJsZSwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9CisgICAgdm9pZCBzZXRIb3Zl
cmVkKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVu
YWJsZSwgSXNIb3ZlcmVkRmxhZyk7IH0KKworICAgIHZvaWQgZGlkRGV0YWNoKEVsZW1lbnQmKTsK
ICAgICB2b2lkIGRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpOwogCiBwcml2YXRlOgpAQCAtNTYs
MTMgKzU3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIElzRm9jdXNlZEZsYWcgICAgID0gMSA8PCAz
CiAgICAgfTsKIAotICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFi
bGUsIHVuc2lnbmVkIGZsYWdzKSB7IGVuYWJsZSA/IHNldEZsYWdzKGVsZW1lbnQsIGZsYWdzKSA6
IGNsZWFyRmxhZ3MoZWxlbWVudCwgZmxhZ3MpOyB9Ci0gICAgdm9pZCBzZXRGbGFncyhFbGVtZW50
KiwgdW5zaWduZWQpOwotICAgIHZvaWQgY2xlYXJGbGFncyhFbGVtZW50KiwgdW5zaWduZWQpOwot
ICAgIGJvb2wgaGFzRmxhZ3MoY29uc3QgRWxlbWVudCosIHVuc2lnbmVkIGZsYWdzKSBjb25zdDsK
KyAgICB2b2lkIHNldEZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlLCB1bnNpZ25l
ZCBmbGFncykgeyBlbmFibGUgPyBzZXRGbGFncyhlbGVtZW50LCBmbGFncykgOiBjbGVhckZsYWdz
KGVsZW1lbnQsIGZsYWdzKTsgfQorICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCYsIHVuc2lnbmVk
KTsKKyAgICB2b2lkIGNsZWFyRmxhZ3MoRWxlbWVudCYsIHVuc2lnbmVkKTsKKyAgICBib29sIGhh
c0ZsYWdzKGNvbnN0IEVsZW1lbnQmLCB1bnNpZ25lZCBmbGFncykgY29uc3Q7CiAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCB1bnNpZ25lZD4gRWxlbWVudEZsYWdNYXA7Ci0g
ICAgRWxlbWVudEZsYWdNYXAgbV9lbGVtZW50czsKKyAgICAvLyBGSVhNRTogVW5jbGVhciB3aHkg
dGhpcyBuZWVkcyB0byBiZSBhIFJlZlB0ci4gU2hvdWxkIGNoYW5nZSB0byBhIGNvbnN0IEVsZW1l
bnQqLgorICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCB1bnNpZ25lZD4gbV9lbGVtZW50czsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGQxNDcyNDI3NzIzNzQ2
OGQ0ZjYxZmZlMzNjNzVmZTQ2YTgxOTIzZGMuLjNiOGY5ZDc0MzY1OGRjYTViOWE0ZjY1ZThmOWRj
ZDQ4MTk0MmRlMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdl
JiByYW5nZSwKICAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNv
bnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGgKICAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBv
ZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKICAgICAvLyB3aGljaCBzcGFu
cyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJh
bmdlV2l0aEFsdGVybmF0aXZlLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7CiAKICAgICBQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLnN0YXJ0
UG9zaXRpb24oKTsKICAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZl
LmNvbnRhaW5lck5vZGUoKSkKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFu
Z2UsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24g
b2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVw
bGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaEFzUmFuZ2UucHRyKCkpOwogCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBz
aW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdp
bmFsIHJhbmdlIGFyb3VuZC4KICAgICBhdXRvIHJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2Uu
Y2xvbmVSYW5nZSgpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwK
ICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogCiAgICAgZm9yIChhdXRv
IG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc1RvQWRkKQotICAgICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNjcmlwdGlvbkZv
ckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBlKSk7Cisg
ICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCpyZXBsYWNlbWVudFJhbmdlLCBtYXJrZXJUeXBlLCBt
YXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBl
LCBtYXJrZXJUeXBlKSk7CiB9CiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQpAQCAtMjY2LDEyICsy
NjYsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxp
ZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihtX2ZyYW1lKTsKICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0
aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpKTsKIAotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYg
bWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVt
b3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBhdXRvJiBtYXJr
ZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy5yZW1vdmVN
YXJrZXJzKHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnRpbWVyRmlyZWQoKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1
CiAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkpCiAgICAgICAgICAgICBhcHBseUFsdGVybmF0
aXZlVGV4dFRvUmFuZ2UoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fdHlwZSwgbWFy
a2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKICAgICAgICAgZWxzZSBpZiAoIW1faXNEaXNt
aXNzZWRCeUVkaXRpbmcpCi0gICAgICAgICAgICByYW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0
KTsKKyAgICAgICAgICAgIHJhbmdlV2l0aEFsdGVybmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3Vt
ZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOgogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CkBAIC00MTksNyArNDE5LDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSog
bm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6
IG5vZGUtPmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICBmb3Ig
KGF1dG8qIG1hcmtlciA6IG5vZGUtPmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKm5v
ZGUpKSB7CiAgICAgICAgIEFTU0VSVChtYXJrZXIpOwogICAgICAgICBpZiAocmVzcG9uZFRvTWFy
a2VyQXRFbmRPZldvcmQoKm1hcmtlciwgcG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBA
IC00NDEsMTIgKzQ0MSwxMCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICgh
Y29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNv
bW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rp
b24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vy
cy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFy
a2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0
aW9uKTsKIH0KIAogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQoKQpAQCAtNDc0LDggKzQ3Miw4IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRv
Y29ycmVjdGlvblJlc3BvCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1Jl
dmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpCiB7Ci0gICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29u
dGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygmY2hhbmdlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgY2hhbmdlZFJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCZjaGFuZ2VkUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBjaGFuZ2Vk
UmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGNo
YW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
IH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5n
ZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKQEAgLTQ4Myw5
ICs0ODEsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9u
KFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbgogICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6IG1hcmtlclR5cGVzRm9y
QXV0b2NvcnJlY3Rpb24oKSkgewogICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCkKLSAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCZyZXBsYWNlZFJhbmdlLCBt
YXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyZXBsYWNlZFJhbmdlLCBtYXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCZyZXBsYWNlZFJhbmdlLCBtYXJrZXJU
eXBlKTsKKyAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIG1hcmtl
clR5cGUpOwogICAgIH0KIH0KIApAQCAtNTA1LDcgKzUwMyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJl
Y3Rpb24oCiAgICAgICAgICAgICBjbGllbnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6RWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwog
ICAgIH0KIAotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygmcmFuZ2VPZkNvcnJlY3Rpb24sIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJrZXJzLnJlbW92ZU1hcmtl
cnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
IH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbFN0cmluZykKQEAgLTUyNCwxNSArNTIyLDE1IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25B
CiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0
ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRl
eHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGlu
Z0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7CisgICAgU3RyaW5nIHN0cmluZyA9
IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5wdHIoKSk7CiAgICAgaWYgKHN0cmlu
Zy5pc0VtcHR5KCkgfHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJp
bmcubGVuZ3RoKCkgLSAxXSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hcmsgdGhpcyB3
aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlvbiBm
b2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVzIHRo
ZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAvLyB3
b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKKyAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5hZGRN
YXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0
b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9u
KTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09u
VGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0
LCBSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJl
cGxhY2VkKQpAQCAtNTczLDIxICs1NzEsMTkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIFJlZlB0cjxSYW5n
ZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBt
YXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKLSAgICBpZiAo
IXdvcmRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBjdXJyZW50V29y
ZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQod29yZFJhbmdlLnB0cigpKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9vcmlnaW5hbFRleHQgPSBjdXJyZW50V29y
ZDsKICAgICBzd2l0Y2ggKG1hcmtlci50eXBlKCkpIHsKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZzoKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsK
KyAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURk1vdmUod29yZFJhbmdlKTsKICAg
ICAgICAgbV9kZXRhaWxzID0gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgc3RhcnRBbHRlcm5hdGl2
ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6Ci0gICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAgICAgIG1fZGV0YWlscyA9
IG1hcmtlci5kZXNjcmlwdGlvbigpOwogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGlt
ZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwpAQCAtNTk3
LDcgKzU5Myw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFy
a2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgICAgIGF1dG8mIG1hcmtl
ckRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRh
dGEoKSk7CiAgICAgICAgIGlmIChjdXJyZW50V29yZCAhPSBtYXJrZXJEYXRhLm9yaWdpbmFsVGV4
dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5h
dGl2ZSA9IHdvcmRSYW5nZTsKKyAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURk1v
dmUod29yZFJhbmdlKTsKICAgICAgICAgbV9kZXRhaWxzID0gbWFya2VyRGF0YS5jb250ZXh0Owog
ICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZURp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCBkNmZkNzNjMjNhY2IzMTczNWQ4YzZkM2Fm
NTZhM2FiN2ZiODE5MjY4Li4xZTIzNWY2YjRkYzYzZmZmZDI1Y2IzN2U2ZGFjYTQ2ODNmNWFhM2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cApAQCAtNzY4LDEzICs3NjgsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycyhUZXh0JiBub2RlLCB1bnNpZ24KICAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBkb2N1bWVudCgpLm1hcmtl
cnMoKTsKICAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2VycyhtYXJrZXJDb250cm9sbGVyLm1h
cmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJm5vZGUsIG9mZnNldCwgJm5v
ZGUsIG9mZnNldCArIGNvdW50KSwgRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwogICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwgY291bnQsIHJlcGxhY2VtZW50VGV4dCk7
Ci0gICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
Jm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7
CisgICAgYXV0byBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJm5vZGUsIG9m
ZnNldCwgJm5vZGUsIG9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBtYXJrZXIgOiBtYXJrZXJzKQogI2lmIFBMQVRGT1JNKElPUykKLSAgICAg
ICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBl
KCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5t
ZXRhZGF0YSgpKTsKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2Us
IG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVz
KCksIG1hcmtlci5tZXRhZGF0YSgpKTsKICNlbHNlCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXIu
YWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRp
b24oKSk7Ci0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICBtYXJrZXJDb250cm9sbGVy
LmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCkp
OworI2VuZGlmCiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91
dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCmluZGV4IDI4MmJkYzllMzE1YjcyYzI1YWQ1YmU4
MmM2YmYwNzE0ZDVjMTdhYjkuLjc5MDY2NWZkNjcyZGZiNGQ2ZTIxNjgxMTJjNTc0ZTFlNGExN2Mz
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApAQCAt
NjEsOSArNjEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpY3Rh
dGlvbk1hcmtlclN1cHBsaWVyKGFsdGVybmF0aXZlcykpOwogICAgIH0KIAotICAgIHZvaWQgYWRk
TWFya2Vyc1RvVGV4dE5vZGUoVGV4dCogdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0
aW9uLCBjb25zdCBTdHJpbmcmIHRleHRUb0JlSW5zZXJ0ZWQpIG92ZXJyaWRlCisgICAgdm9pZCBh
ZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNl
cnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNlcnRlZCkgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS0+ZG9jdW1lbnQoKS5tYXJr
ZXJzKCk7CisgICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKICAgICAgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0ZXJu
YXRpdmVzKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YSBkYXRh
IHsgYWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4dCwgdGV4dFRvQmVJbnNlcnRlZC5zdWJzdHJp
bmcoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgpIH07CiAg
ICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0
ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5n
ZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShk
YXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBlNzliNjQ2ZTIyODk3MjAw
NWU1OGZlNTBmYmMyOTUzMjAzY2I3YWUzLi5hMmQ4NTM4MmVhODhmMzUwMTNjMWM5NjMyNGI1ZDNl
ZTY5YTg3Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTExNjUsNyArMTE2
NSw3IEBAIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYgZmlyc3QsIGNvbnN0
IE5vZGUmIHNlY29uZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIGZpcnN0RWxl
bWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGZpcnN0KTsKICAgICBhdXRvJiBzZWNvbmRFbGVtZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oc2Vjb25kKTsKLSAgICByZXR1cm4gZmlyc3RFbGVtZW50Lmhh
c1RhZ05hbWUoc2Vjb25kRWxlbWVudC50YWdRTmFtZSgpKSAmJiBmaXJzdEVsZW1lbnQuaGFzRXF1
aXZhbGVudEF0dHJpYnV0ZXMoJnNlY29uZEVsZW1lbnQpOworICAgIHJldHVybiBmaXJzdEVsZW1l
bnQuaGFzVGFnTmFtZShzZWNvbmRFbGVtZW50LnRhZ1FOYW1lKCkpICYmIGZpcnN0RWxlbWVudC5o
YXNFcXVpdmFsZW50QXR0cmlidXRlcyhzZWNvbmRFbGVtZW50KTsKIH0KIAogYm9vbCBpc05vblRh
YmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCA2NDI1MWNmMWRjN2Y2OWY1Y2FiYWNhNzA5ZGVjNWM3ZTg3NjU5NWUw
Li44YWIwYTFlMGNlZmViZjUzYjFkMDE1NmI0YjA2OWE5YmUyNTVmMTcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCkBAIC0xOTE4LDcgKzE5MTgsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3Jl
U3BlbGxpbmcoKQogICAgICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVk
UmFuZ2UpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAg
QVNTRVJUKHRleHQubGVuZ3RoKCkpOwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgdm9pZCBFZGl0b3I6
OmxlYXJuU3BlbGxpbmcoKQogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJh
bmdlKQotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVk
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFT
U0VSVCh0ZXh0Lmxlbmd0aCgpKTsKQEAgLTIxMDAsMTIgKzIxMDAsMTIgQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAg
ICAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiAhPSAtMSAmJiBncmFtbWFyRGV0YWls
Lmxlbmd0aCA+IDApOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBn
ZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFy
YWdyYXBoCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFtbWFyUGhyYXNlT2Zmc2V0ICsg
Z3JhbW1hckRldGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5sZW5ndGgpOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpiYWRHcmFt
bWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIGF1dG8gYmFkR3JhbW1h
clJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFt
bWFyUGhyYXNlT2Zmc2V0ICsgZ3JhbW1hckRldGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5s
ZW5ndGgpOworICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAg
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAg
ICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1h
clBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBn
cmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBn
cmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICBp
ZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewpAQCAtMjExNyw3ICsyMTE3LDcgQEAgdm9p
ZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKQogICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQobWlzc3BlbGxlZFdvcmQpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIobWlzc3BlbGxpbmdSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgfQogfQogCkBAIC0yMjUwLDEzICsyMjUwLDEw
IEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkKICAgICByZXR1cm4gY2xp
ZW50KCktPnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6OmNsZWFyTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxl
Y3Rpb24pCit2b2lkIEVkaXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG1vdmluZ1NlbGVjdGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBtb3ZpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBpZiAoc2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7
Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgIH0KKyAgICBpZiAoYXV0byBz
ZWxlY3RlZFJhbmdlID0gbW92aW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIHsg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKQEAgLTI1NzgsMTQgKzI1NzUsMTQgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9
IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKICAgICAg
ICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc1NwZWxsaW5nTWFya2Vy
QWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxp
bmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CiAgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hciAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2Nh
dGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+
IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGRldGFp
bCA6IHJlc3VsdHNbaV0uZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwu
bGVuZ3RoID4gMCAmJiBkZXRhaWwubG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICAgICAgaWYg
KHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uICsgZGV0YWlsLmxv
Y2F0aW9uLCBkZXRhaWwubGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIGJhZEdy
YW1tYXJSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiArIGRldGFpbC5s
b2NhdGlvbiwgZGV0YWlsLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFk
R3JhbW1hclJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLnVzZXJE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdEVu
ZExvY2F0aW9uIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0RW5kTG9jYXRpb24g
Pj0gcGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKQpAQCAtMjY5OSw3ICsyNjk2LDcgQEAgdm9pZCBF
ZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcpCiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaCgqc2VsZWN0aW9uKTsK
ICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxz
ZSwgRWRpdEFjdGlvbkluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3Ro
KCkpOwotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQsIFN0cmluZygpKTsKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlKTsKICNlbHNlCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yODE0LDcgKzI4MTEsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0Zv
cldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAg
ICAgICBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwKICNlbmRpZgogICAgIH07Ci0gICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UucHRyKCksIG1hcmtlclR5cGVz
VG9SZW1vdmUsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29y
ZFJhbmdlLCBtYXJrZXJUeXBlc1RvUmVtb3ZlLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBkb2N1bWVudCgpLm1hcmtlcnMo
KS5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCkBAIC0zMjk5LDcgKzMyOTYsNyBAQCB1
bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IFJhbmdlKiByYW5nZSwgRmluZE9wdAogCiAgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CiAg
ICAgZG8gewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQo
KnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMgJiB+QmFja3dhcmRzKSk7CisgICAgICAgIGF1
dG8gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9u
cyAmIH5CYWNrd2FyZHMpKTsKICAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSkg
ewogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0luU2hh
ZG93VHJlZSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMxMSwxMCArMzMwOCwxMCBA
QCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogCiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAg
ICAgaWYgKG1hdGNoZXMpCi0gICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQocmVzdWx0UmFuZ2Up
OworICAgICAgICAgICAgbWF0Y2hlcy0+YXBwZW5kKHJlc3VsdFJhbmdlLnB0cigpKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtYXJrTWF0Y2hlcykKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRleHRN
YXRjaCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmVzdWx0
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogCiAgICAgICAgIC8vIFN0b3AgbG9v
a2luZyBpZiB3ZSBoaXQgdGhlIHNwZWNpZmllZCBsaW1pdC4gQSBsaW1pdCBvZiAwIG1lYW5zIG5v
IGxpbWl0LgogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCkBA
IC0zNDYxLDEwICszNDU4LDEwIEBAIHZvaWQgRWRpdG9yOjpzY2FuUmFuZ2VGb3JUZWxlcGhvbmVO
dW1iZXJzKFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nCiAgICAgICAgIHVu
c2lnbmVkIHN1YnJhbmdlT2Zmc2V0ID0gc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRpdmVTdGFydFBv
c2l0aW9uOwogICAgICAgICB1bnNpZ25lZCBzdWJyYW5nZUxlbmd0aCA9IHJlbGF0aXZlRW5kUG9z
aXRpb24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gKyAxOwogCi0gICAgICAgIFJlZlB0cjxSYW5n
ZT4gc3VicmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHJhbmdlLCBzdWJyYW5nZU9mZnNl
dCwgc3VicmFuZ2VMZW5ndGgpOworICAgICAgICBhdXRvIHN1YnJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpzdWJyYW5nZShyYW5nZSwgc3VicmFuZ2VPZmZzZXQsIHN1YnJhbmdlTGVuZ3RoKTsKIAotICAg
ICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKHN1YnJhbmdlKTsKLSAgICAgICAgcmFuZ2Uub3duZXJE
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoc3VicmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpUZWxlcGhvbmVOdW1iZXIpOworICAgICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKHN1YnJh
bmdlLnB0cigpKTsKKyAgICAgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXIoc3VicmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwogCiAgICAg
ICAgIHNjYW5uZXJQb3NpdGlvbiArPSByZWxhdGl2ZUVuZFBvc2l0aW9uICsgMTsKICAgICB9CkBA
IC0zNTI5LDExICszNTI2LDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmly
ZWQoKQogCiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91
bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGph
Y2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3Zl
TWFya2Vycygqd29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFz
ZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikpIHsK
ICAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3Rl
ZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycygqc2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0zNTc1LDcgKzM1NzIsNyBAQCBib29sIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSwgaQogCiAgICAgdW5zaWduZWQgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pihmcm9tKTsKICAgICB1bnNpZ25lZCBpbnQgZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pihmcm9tICsgbGVuZ3RoKTsKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUp
OworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50
KCkubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUpOwogICAgIGZvciAoYXV0byogbWFya2VyIDog
bWFya2VycykgewogICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IHN0YXJ0T2Zm
c2V0ICYmIGVuZE9mZnNldCA8PSBtYXJrZXItPmVuZE9mZnNldCgpICYmIG1hcmtlci0+dHlwZSgp
ID09IG1hcmtlclR5cGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2OTMsNyArMzY5
MCw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdS
ZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKICAgICBSZWZQdHI8UmFuZ2U+IGluc2VydGVkQ2Fu
ZGlkYXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRC
b3VuZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxh
Y2VtZW50Lmxlbmd0aCgpLCBEaXJlY3Rpb25CYWNrd2FyZCk7CiAgICAgaWYgKGluc2VydGVkQ2Fu
ZGlkYXRlUmFuZ2UpCi0gICAgICAgIGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGluc2VydGVkQ2FuZGlkYXRlUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5k
aWRhdGUucmVwbGFjZW1lbnQpOworICAgICAgICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqaW5zZXJ0ZWRDYW5k
aWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2NlcHRlZENh
bmRpZGF0ZS5yZXBsYWNlbWVudCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAppbmRleCBlZmQ4NjUwOWExNWU2YzU4ZGJjOWE3MGYxOTkwYmY2ZjU5MDJmZGMyLi5mYmNk
MmZmZmFlZWVkNDUyNjkwMTM1N2NhNjM1OGMyMmExY2E0NGExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQg
SW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUo
KnRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAgICAgICAgIGVuZFBvc2l0aW9uID0gUG9zaXRp
b24odGV4dE5vZGUuZ2V0KCksIG9mZnNldCArIG1fdGV4dC5sZW5ndGgoKSk7CiAgICAgICAgIGlm
IChtX21hcmtlclN1cHBsaWVyKQotICAgICAgICAgICAgbV9tYXJrZXJTdXBwbGllci0+YWRkTWFy
a2Vyc1RvVGV4dE5vZGUodGV4dE5vZGUuZ2V0KCksIG9mZnNldCwgbV90ZXh0KTsKKyAgICAgICAg
ICAgIG1fbWFya2VyU3VwcGxpZXItPmFkZE1hcmtlcnNUb1RleHROb2RlKCp0ZXh0Tm9kZSwgb2Zm
c2V0LCBtX3RleHQpOwogCiAgICAgICAgIGlmIChtX3JlYmFsYW5jZVR5cGUgPT0gUmViYWxhbmNl
TGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbnNl
cnRpb24gbWF5IHJlcXVpcmUgYWRqdXN0aW5nIGFkamFjZW50IHdoaXRlc3BhY2UsIGlmIGl0IGlz
IHByZXNlbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRD
b21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKaW5k
ZXggOWJjOGIzOTk1NjdlZDc1MmFhZDE5NGI0NmQ4NjEzMjJkMjZkNzYxMC4uMTJlYTlkNDQ2MDY1
MTk3NjZhZmRjMDU3MmZiNTdmM2RhNTYyNDNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBUZXh0OwogY2xhc3Mg
VGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dEluc2Vy
dGlvbk1hcmtlclN1cHBsaWVyPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dEluc2VydGlv
bk1hcmtlclN1cHBsaWVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZE1hcmtlcnNUb1RleHRO
b2RlKFRleHQqLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0
SW5zZXJ0ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWFya2Vyc1RvVGV4dE5vZGUoVGV4
dCYsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJpbmcmIHRleHRJbnNlcnRl
ZCkgPSAwOwogcHJvdGVjdGVkOgogICAgIFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcigpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCBhMjk0YmIz
MDM3YTQ4MWI3NDA0MmZiN2Q1MWJkNjI0ZjdlOWY5OGIyLi5hZmM5NGM5OWZlNjI1ZTY4ZWFlMjU2
MjY1NmNlMWVhYmM3Yjc1MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2Vl
ZChpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQKICAgICAgICAg
aWYgKHJlcXVlc3REYXRhLm1hc2soKSAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKQogICAgICAg
ICAgICAgbWFya2VyVHlwZXMgfD0gRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI7CiAgICAgICAgIGlm
ICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygmbV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdS
YW5nZSgpLCBtYXJrZXJUeXBlcyk7CisgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2Uo
KSwgbWFya2VyVHlwZXMpOwogICAgIH0KICAgICBkaWRDaGVjayhzZXF1ZW5jZSwgcmVzdWx0cyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3Bw
CmluZGV4IDlhZDA5MGYwOGY3NDcwOWNhZDExNzU4YTU3NDY0Yjk4YWUwNGEwYTUuLjliNzc2MTAy
ZjlmMTVhYzk2Njg5OTM4MDk3Y2IyMmVlYTJmZDBiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQg
U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgbV90ZXh0MSA9IFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKHByZWZpeFRleHQpKTsKICAgICBBU1NFUlQobV90ZXh0
MSk7Ci0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0Mi5wdHIoKSwg
MCwgbV9vZmZzZXQsIG1fdGV4dDEuZ2V0KCksIDApOworICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmNvcHlNYXJrZXJzKG1fdGV4dDIsIDAsIG1fb2Zmc2V0LCAqbV90ZXh0MSwgMCk7CiAKICAgICBp
bnNlcnRUZXh0MUFuZFRyaW1UZXh0MigpOwogfQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFNwbGl0
VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogCiAgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgw
LCBwcmVmaXhUZXh0KTsKIAotICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1f
dGV4dDEuZ2V0KCksIDAsIHByZWZpeFRleHQubGVuZ3RoKCksIG1fdGV4dDIucHRyKCksIDApOwor
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKCptX3RleHQxLCAwLCBwcmVmaXhU
ZXh0Lmxlbmd0aCgpLCBtX3RleHQyLCAwKTsKICAgICBtX3RleHQxLT5yZW1vdmUoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGY2
NTQxMDY0YmZlMzg5NWI5MDIyMGU0YTUzMWM5ZWZkMWIyZjkzNmUuLjhkOTU4MjQwMzU2ZGM3NzJj
NWE1NzJhY2QwMjQwMGEzODg4OWNmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTI1MiwxNyArMjUyLDE3IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09m
ZnNldCwgYm9vCiAKICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNz
cGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IHRleHRMZW5ndGggJiYg
bWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsg
bWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCkgewogICAgICAgICAgICAgLy8gQ29tcHV0
ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlz
c3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
ICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSht
X3JhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7CiAKICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVk
IG1pc3NwZWxsaW5nIGFuZCBpdHMgb2Zmc2V0LgogICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3Nw
ZWxsaW5nKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJl
bnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247CiAgICAgICAgICAgICAgICAgZmly
c3RNaXNzcGVsbGluZyA9IHRleHQuc3Vic3RyaW5nKG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZS5wdHIoKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgLy8gU3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQuCi0gICAgICAgICAg
ICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOworICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKIAogICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2lu
ZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywgYW5kIG5vdCBhbGwgaW5zdGFuY2VzLgogICAg
ICAgICAgICAgaWYgKCFtYXJrQWxsKQpAQCAtNDI2LDggKzQyNiw4IEBAIGludCBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICht
YXJrQWxsKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0g
c3RhcnRPZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7Ci0gICAgICAg
ICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1h
clJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLCBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3MgZWFybGllciB0aGFu
IG91ciBjdXJyZW50IGNhbmRpZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGluIGEgZ3VhcmFudGVl
ZCBvcmRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlv
bkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29t
bWFuZElPUy5jcHAKaW5kZXggYzE5MzJkZWUxZGE0YThkMmFhYmUyNjYyMDFmZjAwNDExOTQ2MjZl
OS4uZWU5Mzk5YTc2ZDI1ODVmODU3MWU5MzBiZWIxZWQzZDFmMWJkMDNjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAgLTU1
LDcgKzU1LDcgQEAgdm9pZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKICAgICAgICAg
aW5wdXRUZXh0KGZpcnN0SW50ZXJwcmV0YXRpb24sIHRydWUpOwogCiAgICAgICAgIGlmIChpbnRl
cnByZXRhdGlvbnMuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoZW5kaW5nU2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgaW50ZXJwcmV0YXRpb25zKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXNNYXJrZXIoKmVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCksIGludGVycHJl
dGF0aW9ucyk7CiAKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSk7CiAgICAgfQpAQCAtNzEsNyArNzEsOCBA
QCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogCiAgICAgaWYgKHN0YXJ0SW5k
ZXggPj0gMCkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVu
dCgpLCBzdGFydEluZGV4LCBlbmRJbmRleCwgdHJ1ZSk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgbV9tZXRh
ZGF0YSk7CisgICAgICAgIEFTU0VSVChyZXN1bHRSYW5nZSk7IC8vIEZJWE1FOiBXaGF0IGd1YXJh
bnRlZXMgdGhpcz8KKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVz
dWx0TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCAzNGJmMjc5N2QxNDNkMTkzNTc3YzJkOGU1
OTZiYzIxYzJmNjJhNjVjLi4wZThkOTYyOTk0MmQ1NzllMzQ2OGMwZjg5YWY0ODViYzE2OGQ4NGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTEzMiw3ICsxMzIsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwoQmxvYiYgYmxvYiwg
RmlsZVJlYWRlckxvYWRlcjo6UmVhZFR5cAogICAgIGlmIChtX3N0YXRlID09IExPQURJTkcpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAK
ICAgICBtX2Jsb2IgPSAmYmxvYjsKICAgICBtX3JlYWRUeXBlID0gdHlwZTsKQEAgLTE2OSw3ICsx
NjksNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmFib3J0KCkKICAgICAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogCiAgICAgICAgIC8vIEFsbCBwb3NzaWJsZSBldmVudHMg
aGF2ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5LgotICAg
ICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIH0pOwogfQogCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBGaWxl
UmVhZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxv
YWRlbmRFdmVudCk7CiAgICAgCiAgICAgLy8gQWxsIHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVk
IGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgdW5zZXRQZW5k
aW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQog
CiB2b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoaW50IGVycm9yQ29kZSkKQEAgLTIyMSw3ICsyMjEs
NyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoaW50IGVycm9yQ29kZSkKICAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCk7CiAgICAgCiAgICAgLy8gQWxsIHBvc3NpYmxl
IGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZp
dHkuCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmZpcmVFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3Bw
CmluZGV4IDg1ZGI0MzgzZWZmYTYxZDQxMTE5NjhkNzA2NTI0YmNmMTc4MjZmODQuLjgxNGU5MTZm
OWJmZjExZDRkNmY1YzIwZDM2ODg0ZTk1MTQ5YmQxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFwcGxldEVsZW1lbnQuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiRWxlbWVu
dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQYXJhbUVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVj
dC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCmluZGV4IGMz
ZjQ5ODQ1MGZmYTdmOGUxNzA2YmZjMDg4ZTUwYjNmZjllOTg2YTUuLjQ4NGJjYjc2YzFlMDAxMjA1
NWI3ODc0OGNjMjk1ZTU2NjU5MjQ3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERldGFpbHNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRh
aWxzRWxlbWVudC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVu
dD4gSFRNTERldGFpbHNFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZN
b3ZlKHN0eWxlKSk7CiB9CiAKLXZvaWQgSFRNTERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxEZXRhaWxzRWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIGF1dG8g
c3VtbWFyeVNsb3QgPSBIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgp
KTsKICAgICBzdW1tYXJ5U2xvdC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihu
YW1lQXR0ciwgc3VtbWFyeVNsb3ROYW1lKCkpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSFRN
TERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJv
b3QpCiAgICAgbV9kZWZhdWx0U3VtbWFyeSA9IGRlZmF1bHRTdW1tYXJ5LnB0cigpOwogCiAgICAg
c3VtbWFyeVNsb3QtPmFwcGVuZENoaWxkKGRlZmF1bHRTdW1tYXJ5KTsKLSAgICByb290LT5hcHBl
bmRDaGlsZChzdW1tYXJ5U2xvdCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChzdW1tYXJ5U2xvdCk7
CiAKICAgICBtX2RlZmF1bHRTbG90ID0gSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywg
ZG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCFtX2lzT3Blbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRGV0YWlsc0VsZW1lbnQuaAppbmRleCBmMWM0NmZmMzVkNzY2MjRhZmVlM2VjZWI2NDIwNDIz
NjJmMmQzYmYwLi5lNDgzNjU3MTYwMzg0NjgwMmU4N2EyYzE3OGU5NzdiMDFkM2E4ZGY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHJpdmF0ZToKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRl
cmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogICAg
IHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpIGZpbmFsOwogICAgIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9pc09wZW4geyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IGNiZGZkZDNlZmNhYWRhZjhmYmY0MDBiNmMy
NTQ4MGE0M2FlZDMyMDMuLjgxZWYxN2VmYjE0YzlkZmZmYmI4ODlkYTU5ZTkyMzk3ZWU1ODdhNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTg4LDYgKzg4LDE2IEBAIEhU
TUxEb2N1bWVudDo6SFRNTERvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIERv
Y3VtZW50Q2xhc3NGbGFncyBkb2N1CiAgICAgY2xlYXJYTUxWZXJzaW9uKCk7CiB9CiAKK1JlZjxI
VE1MRG9jdW1lbnQ+IEhUTUxEb2N1bWVudDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJM
JiB1cmwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1
cmwsIEhUTUxEb2N1bWVudENsYXNzKSk7Cit9CisKK1JlZjxIVE1MRG9jdW1lbnQ+IEhUTUxEb2N1
bWVudDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYgZnJhbWUsIGNvbnN0IFVSTCYg
dXJsKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudCgmZnJhbWUsIHVy
bCwgSFRNTERvY3VtZW50Q2xhc3MsIFN5bnRoZXNpemVkKSk7Cit9CisKIEhUTUxEb2N1bWVudDo6
fkhUTUxEb2N1bWVudCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAppbmRleCAy
M2RlNGRjMWM2ODVhMjhhMmY0MGU4YWNkNWNmMGE2ZDhmYzI3YzZmLi4xY2Q1YzExNTRkYThkNjU2
ZGE4MjVkMjcxMDAwZjI3Y2ZiYjg2MDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgK
QEAgLTI4LDE2ICsyOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTERvY3Vt
ZW50IDogcHVibGljIERvY3VtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEhUTUxEb2N1
bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3Vt
ZW50Q2xhc3MpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudD4gY3JlYXRl
U3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1cmwsIEhU
TUxEb2N1bWVudENsYXNzLCBTeW50aGVzaXplZCkpOwotICAgIH0KLQorICAgIHN0YXRpYyBSZWY8
SFRNTERvY3VtZW50PiBjcmVhdGUoRnJhbWUqLCBjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgUmVm
PEhUTUxEb2N1bWVudD4gY3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYsIGNvbnN0IFVS
TCYpOwogICAgIHZpcnR1YWwgfkhUTUxEb2N1bWVudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IHdpZHRoKCk7CkBAIC02NCw3ICs1Niw3IEBAIHByb3RlY3RlZDoKICAgICBIVE1MRG9jdW1l
bnQoRnJhbWUqLCBjb25zdCBVUkwmLCBEb2N1bWVudENsYXNzRmxhZ3MgPSAwLCB1bnNpZ25lZCBj
b25zdHJ1Y3Rpb25GbGFncyA9IDApOwogCiBwcml2YXRlOgotICAgIGJvb2wgaXNGcmFtZVNldCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IGZpbmFsOwogICAg
IFJlZjxEb2N1bWVudFBhcnNlcj4gY3JlYXRlUGFyc2VyKCkgb3ZlcnJpZGU7CiAgICAgUmVmPERv
Y3VtZW50PiBjbG9uZURvY3VtZW50V2l0aG91dENoaWxkcmVuKCkgY29uc3QgZmluYWw7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBlMzI1NjdhMmVhMTRhOTVm
NmU5NjhlODlkMTRhODQ5MmIwNTRjNWJjLi5lMWFkZDI2MDIzNGZhM2IwMzQ3MjQyOTIxNDIzZmNh
OTg0MTNhODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC03
Nyw3ICs3Nyw3IEBAIEhUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxlbWVudCgpCiB7CiAgICAg
ZG9jdW1lbnQoKS5mb3JtQ29udHJvbGxlcigpLndpbGxEZWxldGVGb3JtKHRoaXMpOwogICAgIGlm
ICghc2hvdWxkQXV0b2NvbXBsZXRlKCkpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgIG1f
ZGVmYXVsdEJ1dHRvbiA9IG51bGxwdHI7CiAgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVu
dCA6IG1fYXNzb2NpYXRlZEVsZW1lbnRzKQpAQCAtNDMxLDkgKzQzMSw5IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpCiAgICAgICAgIG1fYXR0cmlidXRlcy5zZXRBY2NlcHRDaGFyc2V0KHZhbHVl
KTsKICAgICBlbHNlIGlmIChuYW1lID09IGF1dG9jb21wbGV0ZUF0dHIpIHsKICAgICAgICAgaWYg
KCFzaG91bGRBdXRvY29tcGxldGUoKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KQEAgLTgwMiw4
ICs4MDIsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3VzcGVu
c2lvbigpCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1l
bnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCiB7CiAgICAgaWYgKCFzaG91
bGRBdXRvY29tcGxldGUoKSkgewotICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBvbGREb2N1
bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAg
ICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
KnRoaXMpOwogICAgIH0KIAogICAgIEhUTUxFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVF
bGVtZW50LmNwcAppbmRleCBkMzAzMjJkYzBjNDhmYjgyMDZlYWJiNjZjYWVmMmI4ZmU2OTdiNjRm
Li4zYmI3ZTRhN2U3YjBkNWMyOWRkYWQ2MzNmZTMyNWM3MGM1ZmRiMDI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
aW5kZXggYzA4Y2YzMzcwYzJhMzFhZDMwMzNiOWY2MThmYTk1ZDAwMjMwNmNjMS4uNjhiMWI0ZWZm
YjJhMjQ3ZWVjOTFhZGE2N2M0M2YwZmMwNjAxNGQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMzksNyArMTM5LDcgQEAgSFRNTEltYWdlTG9hZGVyJiBI
VE1MSW5wdXRFbGVtZW50OjplbnN1cmVJbWFnZUxvYWRlcigpCiAgICAgcmV0dXJuICptX2ltYWdl
TG9hZGVyOwogfQogCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCopCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpCiB7CiAgICAgbV9pbnB1dFR5cGUtPmNyZWF0ZVNoYWRv
d1N1YnRyZWUoKTsKICAgICB1cGRhdGVJbm5lclRleHRFbGVtZW50RWRpdGFiaWxpdHkoKTsKQEAg
LTE0OCw3ICsxNDgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNo
YWRvd1Jvb3QoU2hhZG93Um9vdCopCiBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVu
dCgpCiB7CiAgICAgaWYgKG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KCp0aGlzKTsKIAogICAgIC8vIE5lZWQgdG8gcmVtb3ZlIGZvcm0gYXNzb2NpYXRpb24gd2hpbGUg
dGhpcyBpcyBzdGlsbCBhbiBIVE1MSW5wdXRFbGVtZW50CiAgICAgLy8gc28gdGhhdCB2aXJ0dWFs
IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGNvcnJlY3RseS4KQEAgLTE1Niw3ICsxNTYsNyBAQCBIVE1M
SW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgLy8gc2V0Rm9ybSgwKSBtYXkg
cmVnaXN0ZXIgdGhpcyB0byBhIGRvY3VtZW50LWxldmVsIHJhZGlvIGJ1dHRvbiBncm91cC4KICAg
ICAvLyBXZSBzaG91bGQgdW5yZWdpc3RlciBpdCB0byBhdm9pZCBhY2Nlc3NpbmcgYSBkZWxldGVk
IG9iamVjdC4KICAgICBpZiAoaXNSYWRpb0J1dHRvbigpKQotICAgICAgICBkb2N1bWVudCgpLmZv
cm1Db250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24odGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJl
bW92ZUJ1dHRvbigqdGhpcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9o
YXNUb3VjaEV2ZW50SGFuZGxlcikKICAgICAgICAgZG9jdW1lbnQoKS5kaWRSZW1vdmVFdmVudFRh
cmdldE5vZGUoKnRoaXMpOwpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0Q2hlY2tlZChib29sIG5vd0NoZWNrZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCCiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKFJhZGlvQnV0
dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9u
cy0+dXBkYXRlQ2hlY2tlZFN0YXRlKHRoaXMpOworICAgICAgICBidXR0b25zLT51cGRhdGVDaGVj
a2VkU3RhdGUoKnRoaXMpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hh
bmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKICAgICB1cGRh
dGVWYWxpZGl0eSgpOwpAQCAtMTQyNSwxMyArMTQyNSwxMyBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6Om5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVn
aXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAgICAgaWYgKG5lZWRzU3Vz
cGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAg
ICAgaWYgKCFuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1bWVudCgpLnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRv
Y3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7
CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29u
c3QKQEAgLTE1MzAsMTEgKzE1MzAsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRNb3Zl
VG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXcKIAogICAg
IC8vIEFsd2F5cyB1bnJlZ2lzdGVyIGZvciBjYWNoZSBjYWxsYmFja3Mgd2hlbiBsZWF2aW5nIGEg
ZG9jdW1lbnQsIGV2ZW4gaWYgd2Ugd291bGQgb3RoZXJ3aXNlIGxpa2UgdG8gYmUgcmVnaXN0ZXJl
ZAogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKSB7Ci0gICAgICAgIG9sZERvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAg
ICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRo
aXMpOworICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KICAgICBpZiAoaXNSYWRpb0J1dHRv
bigpKQotICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3Jv
dXBzKCkucmVtb3ZlQnV0dG9uKHRoaXMpOworICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJv
bGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0aGlzKTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKSB7CiAgICAg
ICAgIG9sZERvY3VtZW50LmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CkBAIC0xNTYx
LDcgKzE1NjEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hh
bmdlZCgpCiB7CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmli
dXRlQ2hhbmdlZCgpOwogICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlv
QnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMtPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdl
ZCh0aGlzKTsKKyAgICAgICAgYnV0dG9ucy0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCp0aGlz
KTsKICAgICBtX2lucHV0VHlwZS0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiB9CiAKQEAg
LTE4MzksNyArMTgzOSw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNJblJlcXVpcmVkUmFk
aW9CdXR0b25Hcm91cCgpCiB7CiAgICAgQVNTRVJUKGlzUmFkaW9CdXR0b24oKSk7CiAgICAgaWYg
KFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAg
ICAgcmV0dXJuIGJ1dHRvbnMtPmlzSW5SZXF1aXJlZEdyb3VwKHRoaXMpOworICAgICAgICByZXR1
cm4gYnV0dG9ucy0+aXNJblJlcXVpcmVkR3JvdXAoKnRoaXMpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtMTg3MSwxNCArMTg3MSwxNCBAQCBSYWRpb0J1dHRvbkdyb3VwcyogSFRNTElucHV0
RWxlbWVudDo6cmFkaW9CdXR0b25Hcm91cHMoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjphZGRUb1JhZGlvQnV0dG9uR3JvdXAoKQogewotICAgIGlmIChSYWRpb0J1dHRv
bkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMt
PmFkZEJ1dHRvbih0aGlzKTsKKyAgICBpZiAoYXV0byogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3Jv
dXBzKCkpCisgICAgICAgIGJ1dHRvbnMtPmFkZEJ1dHRvbigqdGhpcyk7CiB9CiAKIGlubGluZSB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbW92ZUZyb21SYWRpb0J1dHRvbkdyb3VwKCkKIHsKLSAg
ICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQot
ICAgICAgICBidXR0b25zLT5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgaWYgKGF1dG8qIGJ1dHRv
bnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQorICAgICAgICBidXR0b25zLT5yZW1vdmVCdXR0b24o
KnRoaXMpOwogfQogCiB1bnNpZ25lZCBIVE1MSW5wdXRFbGVtZW50OjpoZWlnaHQoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBkMjYzMjdmZjgxZGE2MzQ5
NmYwMzlkNzNkYzBhNzAxYTc2N2IyYmQ5Li5iODNhYWUwYmNkYjg5YWM3ZTU2MTQzZTJhNzFhYmZm
OTA3YzBiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMzQx
LDcgKzM0MSw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZW51bSBBdXRvQ29tcGxldGVT
ZXR0aW5nIHsgVW5pbml0aWFsaXplZCwgT24sIE9mZiB9OwogCi0gICAgdm9pZCBkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgdm9pZCB3aWxsQ2hhbmdl
Rm9ybSgpIGZpbmFsOwogICAgIHZvaWQgZGlkQ2hhbmdlRm9ybSgpIGZpbmFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggODFhOTA4Yzg1MjlkZDMxOTc1YmEw
YWQ2ZjA1N2M4NTEzYWM5MDBhNS4uOTZkMGFiMzkwYzc5ZDI1ODNlMTllZTQzYTI1NGIxNmJlYmU1
NjUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC02NjMs
MzMgKzY2MywzMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKICAgICBtX21lZGlhU2Vzc2lvbi0+cmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0
KQotICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAg
ICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICNpZiAhUExB
VEZPUk0oSU9TKQotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3Mo
dGhpcyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNh
bGxiYWNrcygqdGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC5yZWdp
c3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1l
bnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAobV9yZXF1aXJlQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9u
UHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC5yZWdp
c3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlhQ29u
dHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJG
b3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVu
dC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAg
IGRvY3VtZW50LnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JBbGxvd3NN
ZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAotICAg
IGRvY3VtZW50LmFkZEF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgZG9jdW1lbnQuYWRkQXVkaW9Q
cm9kdWNlcigqdGhpcyk7CiAgICAgYWRkRWxlbWVudFRvRG9jdW1lbnRNYXAoKnRoaXMsIGRvY3Vt
ZW50KTsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC03MDIsMzMgKzcwMiwzMyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3Vt
ZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAg
ZG9jdW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudC5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCiAjaWYgIVBMQVRGT1JN
KElPUykKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhp
cyk7Ci0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVD
YWxsYmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC51
bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBk
b2N1bWVudC51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKG1fcmVxdWlyZUNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1
bWVudC51bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYg
KG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFj
a3MoKnRoaXMpOwogICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1l
bnQudW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlz
KTsKKyAgICBkb2N1bWVudC5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKICAgICByZW1vdmVF
bGVtZW50RnJvbURvY3VtZW50TWFwKCp0aGlzLCBkb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZWxlY3RNZWRpYVJlc291cmNlKCkKICAgICAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNh
blN0YXJ0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCA9IHRydWU7Ci0gICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cigqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM5MDMsNyArMzkwMyw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKFJlZjxUZXh0VHJhY2s+JiYgdHJh
Y2spCiAgICAgaWYgKCFtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KSB7CiAgICAgICAgIG1fcmVxdWlyZUNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mg
PSB0cnVlOwogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwot
ICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxs
YmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICAgICAgbV9jYXB0aW9uRGlzcGxheU1vZGUgPSBwYWdlLT5n
cm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgIH0K
QEAgLTUzNTUsNyArNTM1NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBs
YXllcihEZWxheWVkQWN0aW9uVHlwZSBmbGFncykKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGls
TWVkaWFDYW5TdGFydCkgewogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCA9
IGZhbHNlOwotICAgICAgICBkb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRo
aXMpOwogICAgIH0KIAogICAgIGlmIChtX3BsYXllcikgewpAQCAtNTQ4OSw3ICs1NDg5LDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWUoKQogICAgIHNldFNob3VsZEJ1ZmZlckRhdGEo
dHJ1ZSk7CiAKICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wYWdlQWxsb3dzUGxheWJhY2tBZnRl
clJlc3VtaW5nKCp0aGlzKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlz
dGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKIApA
QCAtNjk5OCw3ICs2OTk4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVy
SlNQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlMKICAgICBjb250cm9s
bGVyT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoY29udHJvbGxlck9iamVjdCwgZXhlYywgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZSksIHByb3BlcnR5VmFs
dWUsIHByb3BlcnR5U2xvdCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgREVC
VUdfTE9HKFRISVMpOwogCkBAIC03MDk3LDkgKzcwOTcsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sIGRlcGVuZHNP
blBhZwogICAgIG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yID0gZGVwZW5k
c09uUGFnZVNjYWxlOwogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxl
RmFjdG9yKQotICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAgIGVsc2UKLSAgICAgICAgZG9j
dW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlz
KTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZENhbGxiYWNrcygqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVk
aWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDFiMTAxMzAyM2MzNTVjZmE3ODE4MmY5MTI1YWMwYjY5
M2FhNDMwMjAuLjlhMzljODQzY2ZiMGY4YWM1OTRmZGNmYzUxYWY3NmZiZDc4MmFkNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC04MzAsNyArODMwLDcgQEAgcHJp
dmF0ZToKICAgICBTbGVlcFR5cGUgc2hvdWxkRGlzYWJsZVNsZWVwKCkgY29uc3Q7CiAKICNpZiBF
TkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmKSBvdmVycmlkZTsKICAgICBET01XcmFwcGVyV29ybGQmIGVu
c3VyZUlzb2xhdGVkV29ybGQoKTsKICAgICBib29sIGVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3Rl
ZFNjcmlwdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNw
cAppbmRleCAwMjM5YjMzNWM4MWZkOWY4OTVmYzA3OGJmMDE5MTIyMWU1YTEzNmU0Li5hNjc4YTIw
MGE4NTMwODAyYTUxMzI4NWQ1ZTU3YzVlM2ExYWFjNWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGVyRWxlbWVudC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCBSZW5kZXJNZXRlciogSFRN
TE1ldGVyRWxlbWVudDo6cmVuZGVyTWV0ZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwog
fQogCi12b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hh
ZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIEFTU0VSVCghbV92YWx1ZSk7CiAKQEAg
LTIzMSwxMyArMjMxLDEzIEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQogCiAgICAgYXV0byBzdHlsZSA9IEhUTUxTdHls
ZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OnN0eWxlVGFnLCBkb2N1bWVudCgpLCBmYWxzZSk7
CiAgICAgc3R5bGUtPnNldFRleHRDb250ZW50KHNoYWRvd1N0eWxlKTsKLSAgICByb290LT5hcHBl
bmRDaGlsZChzdHlsZSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChzdHlsZSk7CiAKICAgICAvLyBQ
c2V1ZG9zIGFyZSBzZXQgdG8gYWxsb3cgYXV0aG9yIHN0eWxpbmcuCiAgICAgYXV0byBpbm5lciA9
IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgaW5uZXItPnNldElkQXR0
cmlidXRlKCJpbm5lciIpOwogICAgIGlubmVyLT5zZXRQc2V1ZG8oIi13ZWJraXQtbWV0ZXItaW5u
ZXItZWxlbWVudCIpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKGlubmVyKTsKKyAgICByb290LmFw
cGVuZENoaWxkKGlubmVyKTsKIAogICAgIGF1dG8gYmFyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKICAgICBiYXItPnNldElkQXR0cmlidXRlKCJiYXIiKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKaW5kZXggNjA0YTY1YTllM2FiMmZjMzgzZjRmNjBi
MWEwM2YwMTkyZjhjMWJlMi4uNDg2NWE2ZGI3ZDhhYzIwMDhhOGVlNjhhYTdiZjE3YzI5ZTZkMGQy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKQEAgLTc1LDcgKzc1LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkRWxlbWVudFN0YXRl
Q2hhbmdlKCk7Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3Qq
KSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYp
IGZpbmFsOwogCiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX3ZhbHVlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAppbmRleCBkMTBjMzdmYjIyODgxYzEz
YzMwZjA3YzdiOTM0ZjkzMjc1NDZmMWVhLi5lMTE4YmRlMWRkYzIyM2E5M2I3MTg0YmE2MDc3ODkx
Y2NhYTJiNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3Bw
CkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEFwcGxldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5jcHAKaW5kZXggZTJlMzFhMTU1MzYxMDk2YTU2YWZkODQzYzMwMDJmMDg1ZjQ5ZTFkYS4u
OWRjNWZmMWFhOTBmYzNhNmQ0Mjc1NDIxMmM1ZmZiZDNlMmM0OTVlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQg
SFRNTFBsdWdJbkVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZShEaXNwbGF5U3RhdGUgc3RhdGUpCiAg
ICAgICAgIG1fc3dhcFJlbmRlcmVyVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLXZvaWQg
SFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCog
cm9vdCkKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBpZiAoIW1fcGx1Z2luUmVwbGFjZW1lbnQgfHwgIWRv
Y3VtZW50KCkucGFnZSgpIHx8IGRpc3BsYXlTdGF0ZSgpICE9IFByZXBhcmluZ1BsdWdpblJlcGxh
Y2VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgcm9vdC0+c2V0UmVzZXRTdHlsZUlu
aGVyaXRhbmNlKHRydWUpOwotICAgIGlmIChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVw
bGFjZW1lbnQoKnJvb3QpKSB7CisgICAgcm9vdC5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1
ZSk7CisgICAgaWYgKG1fcGx1Z2luUmVwbGFjZW1lbnQtPmluc3RhbGxSZXBsYWNlbWVudChyb290
KSkgewogICAgICAgICBzZXREaXNwbGF5U3RhdGUoRGlzcGxheWluZ1BsdWdpblJlcGxhY2VtZW50
KTsKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAppbmRleCA1MmEyOTJhYmIy
OTZjNDkzYTJlNmI4MzhhZDMwYzBiMWIwZjMwNGQyLi4xMWZlNjAyY2UxZTFkMDc1ZjVkY2UxNWIx
YzNkMWIwOTg4YzkxNmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5o
CkBAIC05OCw3ICs5OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0
T2JqZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290Kikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBvdmVycmlkZTsK
IAogICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2Fk
RXZlbnQgaW5zdGVhZCBvZiBjYWxsaW5nIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50IGRpcmVjdGx5
LgogICAgIGJvb2wgZ3VhcmRlZERpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwCmluZGV4IDVkNDE1YTYyYzFhMzQ3NWNkNWIyOGUzNzliYmRjOWM3MmY2ZDhiODcuLjBj
NTViOTlhOTFlZmMxMWZlYmQ1YjFmY2Q2M2RlZGE2OWMyNjVmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAtMTA5LDcgKzEwOSw3IEBA
IHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZmluaXNoQ3JlYXRpbmcoKQogSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6fkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoKQogewogICAgIGlmIChtX25l
ZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKQotICAgICAgICBkb2N1bWVudCgpLnVucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9
CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0RGlzcGxheVN0YXRlKERpc3BsYXlT
dGF0ZSBzdGF0ZSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4g
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eQog
ICAgIC8vIGluYWN0aXZlIG9yIHJlYWN0aXZhdGVzIHNvIGl0IGNhbiBjbGVhciB0aGUgcmVuZGVy
ZXIgYmVmb3JlIGdvaW5nIGludG8gdGhlIHBhZ2UgY2FjaGUuCiAgICAgaWYgKCFtX25lZWRzRG9j
dW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7CiAgICAgICAgIG1fbmVlZHNEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3MgPSB0cnVlOwotICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBp
ZiAoZGlzcGxheVN0YXRlKCkgPT0gRGlzcGxheWluZ1NuYXBzaG90KSB7CkBAIC0yODQsOCArMjg0
LDggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChE
b2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW4KIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTigmZG9jdW1lbnQoKSA9PSAmbmV3RG9jdW1lbnQpOwogICAgIGlmIChtX25l
ZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7Ci0gICAgICAgIG9sZERvY3VtZW50LnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgICAgIG5l
d0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwor
ICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3Bl
bnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KIAogICAgIGlmIChtX2ltYWdlTG9hZGVyKQpA
QCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIHBsdWdJbkltYWdlRWxl
bWVudElzb2xhdGVkV29ybGQoKQogICAgIHJldHVybiBpc29sYXRlZFdvcmxkOwogfQogCi12b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KHJvb3QpOwogICAgIGlmIChkaXNwbGF5U3RhdGUoKSA+
PSBQcmVwYXJpbmdQbHVnaW5SZXBsYWNlbWVudCkKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9v
dCogcm9vdCkKICAgICAvLyBSZXNldCBhbnkgYXV0aG9yIHN0eWxlcyB0aGF0IG1heSBhcHBseSBh
cyB3ZSBvbmx5IHdhbnQgZXhwbGljaXQKICAgICAvLyBzdHlsZXMgZGVmaW5lZCBpbiB0aGUgaW5q
ZWN0ZWQgdXNlciBhZ2VudHMgc3R5bGVzaGVldHMgdG8gc3BlY2lmeQogICAgIC8vIHRoZSBsb29r
LWFuZC1mZWVsIG9mIHRoZSBzbmFwc2hvdHRlZCBwbHVnLWluIG92ZXJsYXkuIAotICAgIHJvb3Qt
PnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsKKyAgICByb290LnNldFJlc2V0U3R5bGVJ
bmhlcml0YW5jZSh0cnVlKTsKICAgICAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBsb2FkZWRNaW1l
VHlwZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
CmluZGV4IGU5NDFmNTdhZGY4YTE5YTllZDE0ZWRjZWIwOTdiZDNhYjRhNGZhNjIuLmUzZjAzOTY0
ZmExNzQ0NTFlOGUyNjZhZTMyNzM2YTllYzliZjk4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgYWxsb3dlZFRvTG9hZFBsdWdpbkNvbnRlbnQoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJU
cmVlUG9zaXRpb24mKSBvdmVycmlkZTsKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5jcHAKaW5kZXggOGI0MGUxZGMyNThhOWJhNGZhZmNmMDgzYjM1Zjkz
YmNiMmM0NWU0Zi4uMTJkMzFjNzIyMGQ2ZDgyMjQxMGQ5OThmNGQzYWUxYmJmY2IyYTJmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC0xMzUsMTIg
KzEzNSwxMiBAQCB2b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5n
ZSgpCiAgICAgfQogfQogCi12b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIEFTU0VS
VCghbV92YWx1ZSk7CiAKICAgICBhdXRvIGlubmVyID0gUHJvZ3Jlc3NJbm5lckVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCgpKTsKLSAgICByb290LT5hcHBlbmRDaGlsZChpbm5lcik7CisgICAgcm9v
dC5hcHBlbmRDaGlsZChpbm5lcik7CiAKICAgICBhdXRvIGJhciA9IFByb2dyZXNzQmFyRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGF1dG8gdmFsdWUgPSBQcm9ncmVzc1ZhbHVlRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuaAppbmRleCBiZDMzYWExMjJlZGYyMTU0YTY3OWZlMTZkNjY0MGNiMTJmYjcwZTMw
Li44MjY3MzZkYWIyYmI2NTdhYjNlNWM3YWMzYmE0OTRkM2FkODBjZWUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJzKCkgZmluYWw7CiAKICAgICB2b2lkIGRpZEVs
ZW1lbnRTdGF0ZUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QmKSBmaW5hbDsKICAgICBib29sIGlzRGV0ZXJtaW5hdGUoKSBjb25zdDsKIAogICAg
IGJvb2wgY2FuQ29udGFpblJhbmdlRW5kUG9pbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAppbmRleCBhNDlm
ZjIwYzJiMzc4YTU2MjQ0MTVkNTQ5MzFlMzQ0M2IzOGI4YWVhLi45OWYzYzZmOGM0YzBhZjRmODdh
NDZmM2Y1MTliZjlkMDI2YzdlMDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VF
bGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBpY3R1cmVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCmlu
ZGV4IDk5MTBiZDFiNDJmYTI1NjJmMmEzMDZhYjIxMjA2YTg4NDRmMjU0OWIuLmRhNzQ5Y2Q5NDNm
MzkwZGNhMTA1NGFlNzU1YTJmOGFkM2EwMzY5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdW1tYXJ5RWxlbWVudC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gSFRNTFN1bW1hcnlFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVy
U3R5bGUmJgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlz
LCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLXZvaWQgSFRNTFN1bW1hcnlFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxTdW1tYXJ5RWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewotICAg
IHJvb3QtPmFwcGVuZENoaWxkKERldGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGUoZG9jdW1lbnQo
KSkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKEhUTUxTbG90RWxlbWVudDo6Y3JlYXRlKHNsb3RU
YWcsIGRvY3VtZW50KCkpKTsKKyAgICByb290LmFwcGVuZENoaWxkKERldGFpbHNNYXJrZXJDb250
cm9sOjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoSFRNTFNsb3RF
bGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1lbnQoKSkpOwogfQogCiBIVE1MRGV0YWlsc0Vs
ZW1lbnQqIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGV0YWlsc0VsZW1lbnQoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmgKaW5kZXggMTI3YTU0NmQyYTBkYzQwMjk4
NDEyYWJjNWQ2OWFmMDc4NTYzYjUyMC4uNmI3NDUwNTQ0NjBkYTAyNjJhZmNjOTljNDdlOWU5ZjY4
ZTJlNDY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oCkBAIC0z
OSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0
ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24m
KSBmaW5hbDsKICAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBmaW5hbDsKIAot
ICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7Cisg
ICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAog
ICAgIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAKaW5kZXgg
MjQyZmMxYTU4NWZmM2RiOWIyNGYxZjIwMjdhMWUxN2NjYTkwMmI1OC4uNjk2YTYzZjQwM2NlMTU5
MTI1MGZkMTRiMDBlZjIwYTZkOTliYjFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSFRNTFRlbXBs
YXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlRlbXBsYXRlQ29udGVudERvY3VtZW50RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZTNhMDIxOTBlZGEyMDI2YmFmMjIyY2QyMWNmNjhiNDI4
YzRiNzZkZi4uNjg4ZTNjYzA3NDZjNjYxODBjYmI1ODk3MTY3YmRkMjM2NjVhMjc2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0xMDAsOSArMTAw
LDkgQEAgUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW0KICAgICByZXR1cm4gdGV4dEFyZWE7CiB9CiAK
LXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290KiByb290KQordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoVGV4
dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIHJvb3Qu
YXBwZW5kQ2hpbGQoVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSkpOwogICAgIHVwZGF0ZUlubmVyVGV4dEVsZW1lbnRFZGl0YWJpbGl0eSgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCmluZGV4IGI5YTMyMjRjNzUwZTRk
NDA2YjIzYTZlNTRiMDQ3NTIyNTI5OWY4NTAuLmNiZDA2M2UzMjgxYmVjYWQ1NjliMmJjZDAyNzA2
MGZkN2ZiYWQ5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5o
CkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICBlbnVtIFdyYXBNZXRob2QgeyBOb1dy
YXAsIFNvZnRXcmFwLCBIYXJkV3JhcCB9OwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFk
b3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgdm9pZCBtYXhMZW5ndGhBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwogICAgIHZvaWQgbWluTGVuZ3Ro
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggZGVjMTliMmMwYjllMjIyMGY2N2FhNWRm
NDhkY2IxM2M5ODRlYTQyYi4uMGJjZmUxNTg5MTRjNGZkMzUwYzE2ZDM3ZTQxZTQ0Yjk4ZDBlZTRm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTE3OCw5ICsxNzgs
OSBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc1JhZGlvQnV0dG9uKCkgY29uc3QKIAogYm9vbCBS
YWRpb0lucHV0VHlwZTo6bWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcygpIGNvbnN0CiB7
Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsK
LSAgICBpZiAoY29uc3QgUmFkaW9CdXR0b25Hcm91cHMqIHJhZGlvQnV0dG9uR3JvdXBzID0gZWxl
bWVudC5yYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICByZXR1cm4gIXJhZGlvQnV0dG9uR3Jv
dXBzLT5oYXNDaGVja2VkQnV0dG9uKCZlbGVtZW50KTsKKyAgICBhdXRvJiBlbGVtZW50ID0gdGhp
cy0+ZWxlbWVudCgpOworICAgIGlmIChhdXRvKiByYWRpb0J1dHRvbkdyb3VwcyA9IGVsZW1lbnQu
cmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgcmV0dXJuICFyYWRpb0J1dHRvbkdyb3Vwcy0+
aGFzQ2hlY2tlZEJ1dHRvbihlbGVtZW50KTsKICAgICByZXR1cm4gIWVsZW1lbnQuY2hlY2tlZCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAppbmRleCAwMDVi
ZTRkMmQyZTE3ODA4ZWY4MmEzYjkzZDI5M2Q4NzhhMTlhMDkzLi42ZmM1YzE2MTZiZWYxOTYyMTNj
YWVhY2E2MWNjMTQ1ZDRjNTEzYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRXcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdy
aXRlci5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIERvY3VtZW50V3JpdGVyOjpiZWdpbihj
b25zdCBVUkwmIHVybFJlZmVyZW5jZSwgYm9vbCBkaXNwYXRjaCwgRG9jdW1lbnQqIG93bgogCiAg
ICAgYm9vbCBzaG91bGRSZXVzZURlZmF1bHRWaWV3ID0gbV9mcmFtZS0+bG9hZGVyKCkuc3RhdGVN
YWNoaW5lKCkuaXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwpOwogICAgIGlmIChzaG91bGRSZXVz
ZURlZmF1bHRWaWV3KQotICAgICAgICBkb2N1bWVudC0+dGFrZURPTVdpbmRvd0Zyb20obV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGRvY3VtZW50LT50YWtlRE9NV2luZG93RnJvbSgqbV9m
cmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBkb2N1bWVudC0+Y3JlYXRlRE9N
V2luZG93KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBlNTM4YmE2
YzUzMTJkOWM4MTllYjVhNzU2NjQwYWM1YWJhOGNkM2FiLi42ZjkwNzI0MTk0NGI3N2U1YjE0NDUz
MzFlMGVlNTc1ZTMyNjZiYTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zNTEzLDcgKzM1MTMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGlkU3RhcnREcmFnKCkKICAg
ICB9CiAKICAgICBpZiAoYXV0byByYW5nZSA9IGRyYWdTdGF0ZSgpLmRyYWdnZWRDb250ZW50UmFu
Z2UpIHsKLSAgICAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dl
ZENvbnRlbnRNYXJrZXIocmFuZ2UuZ2V0KCkpOworICAgICAgICByYW5nZS0+b3duZXJEb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcigqcmFuZ2UpOwogICAgICAgICBy
ZXBhaW50Q29udGVudHNPZlJhbmdlKHJhbmdlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudFNvdXJjZS5jcHAKaW5kZXggMDgwMTcyOTY5YmU0Y2JkYWI5NzkyMzM1NWExNjM3OWU0
OWJiMzQ2NC4uZTQ2ZmY5ZDlmYWY3MmMyNDIxYjE1MmZkMGZhNTUzOWM5ZGFhMjY2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgRXhjZXB0aW9uT3I8
UmVmPEV2ZW50U291cmNlPj4gRXZlbnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXgKICAgICB9CiAKICAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgRXZl
bnRTb3VyY2UoY29udGV4dCwgZnVsbFVSTCwgZXZlbnRTb3VyY2VJbml0KSk7Ci0gICAgc291cmNl
LT5zZXRQZW5kaW5nQWN0aXZpdHkoc291cmNlLnB0cigpKTsKKyAgICBzb3VyY2UtPnNldFBlbmRp
bmdBY3Rpdml0eShzb3VyY2UuZ2V0KCkpOwogICAgIHNvdXJjZS0+c2NoZWR1bGVJbml0aWFsQ29u
bmVjdCgpOwogICAgIHNvdXJjZS0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIFdURk1v
dmUoc291cmNlKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEV2ZW50U291cmNlOjpuZXR3b3Jr
UmVxdWVzdEVuZGVkKCkKICAgICBpZiAobV9zdGF0ZSAhPSBDTE9TRUQpCiAgICAgICAgIHNjaGVk
dWxlUmVjb25uZWN0KCk7CiAgICAgZWxzZQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEV2
ZW50U291cmNlOjpzY2hlZHVsZUluaXRpYWxDb25uZWN0KCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2
b2lkIEV2ZW50U291cmNlOjpjbG9zZSgpCiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKICAg
ICBlbHNlIHsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAg
ICB9CiB9CiAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIEV2ZW50U291cmNlOjphYm9ydENvbm5l
Y3Rpb25BdHRlbXB0KCkKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAgIGVsc2Ugewog
ICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0KIAogICAg
IEFTU0VSVChtX3N0YXRlID09IENMT1NFRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDdmNzRl
MzI1Y2U3ODViYWQ1MWJiNTdhMTUyYzFjYTJhNzMyOTQ1NmIuLjQ4NWZkMmUzMjVjMjhhMjVmNzcz
MzRiYzg5NzdhMjMxMzk2YzczYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01Niw3ICs1Niw2
IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGQ4ZTc2NWY5NGUxMTFmZDViN2Y5NjM4YmZkNTg2NGUyYTdlNTYw
YWUuLjAwNDNjZTVmZTkxZjk0Nzg2MmFjNjg2ZTYyZjZiYWJiYmYwODdkYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZVNldEVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5jcHAKaW5kZXggNGNmNWUyOWQwYjkzODZhZmZlMjcyNmM3M2FhZWUyMjM5MzUxNTNj
My4uYjQ3ZjUyYjQ1YzA5YWUyMGFiNTJmYjRmYjFiYzFjYjBkMjRiYjc2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKQEAgLTE2MCw3ICsx
NjAsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRp
b24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRl
SW5wdXQ6Ok1ha2VOZXcpIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0
aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
KnRoaXMpOwogICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0YXJ0VGlt
ZSA9IHN0ZDo6bnVsbG9wdDsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6
OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFy
YW0pCiAKICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1h
dGlvbikgewogICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlv
bi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1lID0gc3RkOjpu
dWxsb3B0OwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAg
IGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRBbmltYXRpb24pIHsKICAgICAg
ICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3Rh
dGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0
aW9uU3RhdGU6OkRvbmU7CiAgICAgICAgIGVuZEFuaW1hdGlvbigpOwpAQCAtMjMyLDcgKzIzMiw3
IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRl
SW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19M
RVZFTF8yKQogICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT50cmlnZ2VyKCkgJiYgbV9hbmlt
YXRpb24tPnRyaWdnZXIoKS0+aXNTY3JvbGxBbmltYXRpb25UcmlnZ2VyKCkpCi0gICAgICAgICAg
ICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0Fu
aW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc0RlcGVu
ZGVudE9uU2Nyb2xsKCp0aGlzKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOgpAQCAtMjQzLDcgKzI0Myw3IEBA
IHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5w
dXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBo
YXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8g
cmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlICh0aW1lIGlz
ICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwogICAg
ICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7
CisgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogCiAgICAgICAgICAg
ICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlvbgog
ICAgICAgICAgICAgICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+ZWxlbWVudCgpKQpAQCAt
MjgxLDcgKzI4MSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVPZmZzZXQgPSAtbV9hbmltYXRpb24tPmRlbGF5KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKHRpbWVPZmZzZXQpOwogCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0
ZWQpOworICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgq
dGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0
YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQzNyw3
ICs0MzcsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24oYmVn
aW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZV9vcigwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSh0aGlzLCBz
dGFydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKCp0aGlzLCBzdGFydGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2Nl
bGVyYXRlZCA9IHN0YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGIxMWRhNWMzMGI1MTAyOTY3ZTkxZDk2Njk2MzFkMGZm
ZmZmYWUzYjYuLmRmZTRjMDMyNDhhZDZiZGQ1ZTFhNGIxN2RkNGNiZWE2ZmRhZjlhMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC01MDMsMTcgKzUwMywxNSBAQCB1bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1
bQogICAgIHJldHVybiBjb3VudDsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1h
dGlvbikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgLy8gTWFr
ZSBzdXJlIHRoaXMgYW5pbWF0aW9uIGlzIG5vdCBpbiB0aGUgc3RhcnQgdGltZSB3YWl0ZXJzCi0g
ICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZShhbmltYXRp
b24pOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmFkZChhbmltYXRpb24pOwor
ICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1h
dGlvbik7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmFkZCgmYW5pbWF0aW9uKTsK
IH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1h
dGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uVG9SZW1vdmUpCit2
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsKKyAg
ICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUucmVtb3ZlKCZhbmltYXRpb25Ub1JlbW92ZSk7
CiB9CiAKIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxl
KCkKQEAgLTUyNSw3ICs1MjMsNyBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdHlsZUF2YWlsYWJsZSgpCiAgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmNsZWFy
KCk7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBhbmltYXRpb24s
IGJvb2wgd2lsbEdldFJlc3BvbnNlKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJh
c2UmIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCiB7CiAgICAgLy8gSWYgd2lsbEdl
dFJlc3BvbnNlIGlzIHRydWUsIGl0IG1lYW5zIHRoaXMgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IHdh
aXRpbmcgZm9yIGEgcmVzcG9uc2UKICAgICAvLyAod2hpY2ggd2lsbCBjb21lIGluIGFzIGEgY2Fs
bCB0byBub3RpZnlBbmltYXRpb25TdGFydGVkKCkpLgpAQCAtNTQ0LDE3ICs1NDIsMTYgQEAgdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlKEEKICAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxsIHNv
ZnR3YXJlIGFuZCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUgCiAg
ICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZCBjeWNsZS4KICAgICAvLwotICAgIAorCiAgICAgaWYg
KHdpbGxHZXRSZXNwb25zZSkKICAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNh
dGlvbiA9IHRydWU7CiAKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UuYWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlLmFkZCgmYW5pbWF0aW9uKTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2Uo
QW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uVG9SZW1vdmUpCit2b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShBbmltYXRpb25CYXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsK
LSAgICAKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3Zl
KCZhbmltYXRpb25Ub1JlbW92ZSk7CiAgICAgaWYgKG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWVSZXNwb25zZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnRO
b3RpZmljYXRpb24gPSBmYWxzZTsKIH0KQEAgLTU3MCw5ICs1NjcsOSBAQCB2b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdGltZSkKICAg
ICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7CiB9CiAKLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5p
bWF0aW9uQmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0g
ICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmlt
YXRpb25XaWxsQmVSZW1vdmVkOiAlcCIsIHRoaXMsIGFuaW1hdGlvbik7CisgICAgTE9HKEFuaW1h
dGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVS
ZW1vdmVkOiAlcCIsIHRoaXMsICZhbmltYXRpb24pOwogCiAgICAgcmVtb3ZlRnJvbUFuaW1hdGlv
bnNXYWl0aW5nRm9yU3R5bGUoYW5pbWF0aW9uKTsKICAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShhbmltYXRpb24pOwpAQCAtNTkzLDE0ICs1OTAsMTUg
QEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVt
b3ZlZChBbmltYXRpb25CYXNlKiBhbmltYXQKIH0KIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9O
U19MRVZFTF8yKQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9Bbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQorCit2b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRP
blNjcm9sbChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgbV9hbmltYXRpb25zRGVw
ZW5kZW50T25TY3JvbGwuYWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zRGVwZW5kZW50
T25TY3JvbGwuYWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlv
bkJhc2UqIGFuaW1hdGlvbikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
bW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYgYW5pbWF0
aW9uKQogewotICAgIG1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLnJlbW92ZShhbmltYXRp
b24pOworICAgIG1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLnJlbW92ZSgmYW5pbWF0aW9u
KTsKIH0KIAogdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2Nyb2xsV2FzVXBk
YXRlZCgpCkBAIC02MTcsNiArNjE1LDcgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6c2Nyb2xsV2FzVXBkYXRlZCgpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NDE3MAogICAgIHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldENoYW5n
ZWQpOwogfQorCiAjZW5kaWYKIAogQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Q1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAppbmRleCAx
NWE0ZjcyYzFlNmQ0NzY0MTRjNDg5ODQ0NTI3M2FjZTM1ODk2M2Y0Li5jMjNiZWEyZjM2NzEyNWIz
MGFjM2Y5Y2EzNTAxYTEzMmI0ZTgzN2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKQEAg
LTkzLDEzICs5MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmRBbmltYXRpb25VcGRhdGUoKTsK
ICAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoZG91YmxlKTsKICAgICAKLSAgICB2
b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7Ci0gICAg
dm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7
CisgICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYp
OworICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9u
QmFzZSYpOwogCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsKLSAgICB2b2lkIHJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJh
c2UqKTsKKyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZShBbmltYXRpb25CYXNlJiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOworICAgIHZvaWQgcmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYp
OwogCi0gICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqKTsKKyAg
ICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYpOwogCiAgICAgdm9p
ZCB1cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKIApAQCAt
MTEwLDggKzExMCw4IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZF
TF8yKQogICAgIGJvb2wgd2FudHNTY3JvbGxVcGRhdGVzKCkgY29uc3QgeyByZXR1cm4gIW1fYW5p
bWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLmlzRW1wdHkoKTsgfQotICAgIHZvaWQgYWRkVG9Bbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSopOwotICAgIHZvaWQgcmVtb3Zl
RnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKik7CisgICAgdm9p
ZCBhZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlJik7CisgICAg
dm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2Um
KTsKIAogICAgIHZvaWQgc2Nyb2xsV2FzVXBkYXRlZCgpOwogICAgIGZsb2F0IHNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggZDhl
MWIyZGJkYWQyNzA5NGJjMzdlMTU1OTJjMTY2ZWFlZTZhMmE0Ny4uNmM1OGNmM2M5MDZlNTRkYzBm
Njg5ZWE1MjU1YmQ4YjQzZWJiZWNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC02NCwxNCArNjQsMTQgQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBDbGVhciB0
aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3ZSBhcmUg
aW4gdGhlIG1pZGRsZSBvZgogICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRp
b24uZ2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoKnRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIo
KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1w
dHkoKSkgewogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFs
dWVzKCkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxs
QmVSZW1vdmVkKGFuaW1hdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9s
bGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKICAgICAgICAgICAgIGFu
aW1hdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxB
bmltLT5ibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKHByb3AsIG1vZGlmaWVkQ3VycmVudFN0eWxl
LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgZXhpc3RpbmcgSW1wbGljaXRBbmltYXRpb24g
JXAgZm9yIHByb3BlcnR5ICVzIiwgaW1wbEFuaW0sIGdldFByb3BlcnR5TmFtZShwcm9wKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZChpbXBsQW5pbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25D
b250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqaW1wbEFuaW0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBlcXVhbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODcs
NyArMTg3LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXIKICAgICBWZWN0b3I8aW50PiB0b0Jl
UmVtb3ZlZDsKICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVl
cygpKSB7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24u
Z2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoKnRyYW5zaXRpb24pOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRy
YW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwogICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBw
cm9wZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUo
dHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOwogICAgICAgICB9CkBAIC0yNzgsNyAr
Mjc4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9u
cyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QKICAgICAvLyBNYWtlIGEgbGlzdCBvZiBh
bmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCiAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tl
eWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMu
Y29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0
aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdldCgpKTsK
KyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KCphbmltYXRpb24pOwogICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwogICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIHJl
bmRlcmVyICVwIiwgYW5pbWF0aW9uLmdldCgpLCByZW5kZXJlcik7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggNDJjOGIzMWVmNmJmZmE2ODI4NTc1ODQ0ZDg5
MTA0NGZjNjk5ZThiMy4uMWY3NGM5MDRkMzVmZTU4NmUwZWMxNzllZTVmMzIwYjI2NjNmOTY2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgRnJhbWU6OmluaXRXaXRoU2lt
cGxlSFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgc3R5bGUsIGNvbnN0IFVSTCYgdXJsKQogewog
ICAgIG1fbG9hZGVyLT5pbml0Rm9yU3ludGhlc2l6ZWREb2N1bWVudCh1cmwpOwogCi0gICAgUmVm
UHRyPEhUTUxEb2N1bWVudD4gZG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNp
emVkRG9jdW1lbnQodGhpcywgdXJsKTsKKyAgICBhdXRvIGRvY3VtZW50ID0gSFRNTERvY3VtZW50
OjpjcmVhdGVTeW50aGVzaXplZERvY3VtZW50KCp0aGlzLCB1cmwpOwogICAgIGRvY3VtZW50LT5z
ZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudENvbXBhdGliaWxpdHlNb2RlOjpMaW1pdGVkUXVp
cmtzTW9kZSk7CiAgICAgZG9jdW1lbnQtPmNyZWF0ZURPTVdpbmRvdygpOwotICAgIHNldERvY3Vt
ZW50KGRvY3VtZW50KTsKKyAgICBzZXREb2N1bWVudChkb2N1bWVudC5wdHIoKSk7CiAKLSAgICBh
dXRvIHJvb3RFbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKKyAg
ICBhdXRvIHJvb3RFbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwog
Ci0gICAgYXV0byBib2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKKyAg
ICBhdXRvIGJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgaWYg
KCFzdHlsZS5pc0VtcHR5KCkpCiAgICAgICAgIGJvZHktPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OnN0eWxlQXR0ciwgc3R5bGUpOwogCkBAIC03NTQsNCArNzU0LDUgQEAgdm9pZCBGcmFtZTo6cmVz
ZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAppbmRleCBlNWJmMDRkYjIzZDJhY2I5Nzk1YTMy
ZTlhNDhlODNiMmIzODUyZjkzLi5hNzAzYzA5MDUzNzlkYjNkNjFlMTYxMjUwYzUwYWNkNTQ3OTZl
ODAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcgogICAg
ICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBp
dCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTMxMDg1PgogICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkK
LSAgICAgICAgICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jl
c291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRl
ck9wZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmlu
ZGV4IDU3NWZhMDZhZGU2MGM1MDEzYWVlNDUxYjdlNDNhOTFkMzBmMmZkNWIuLjRlMWUyMDI5NzZi
YTE5ZjExZjBmZDdlOWRkYmE2OTBlNjUwOWIzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTg5NSw3ICs4OTUsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRQbwogICAgIGlmICghcmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSByZW5kZXJl
cigpLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IocmVuZGVyZXIoKS50ZXh0Tm9kZSgp
KTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSByZW5kZXJl
cigpLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKnJlbmRlcmVyKCkudGV4dE5vZGUo
KSk7CiAKICAgICAvLyBHaXZlIGFueSBkb2N1bWVudCBtYXJrZXJzIHRoYXQgdG91Y2ggdGhpcyBy
dW4gYSBjaGFuY2UgdG8gZHJhdyBiZWZvcmUgdGhlIHRleHQgaGFzIGJlZW4gZHJhd24uCiAgICAg
Ly8gTm90ZSBlbmQoKSBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IG9uZSBwYXN0IGl0IGxp
a2UgZW5kT2Zmc2V0IGFuZCByYW5nZXMgZG8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAppbmRleCAwMjYwNjVhNDY2Yjk4MzFiMWQ5NThjM2IzZTRlNWRjZGVl
MzEwYzQyLi5kN2I1NjczODM3NDg4OTZiZmU0YjE5YWI5OWNlOTY4MjFlMjI2MTM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE2Miw3ICsxNjIs
NyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc2F2ZWRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZvLmNvbnRleHQoKSwgZmFsc2UpOwogICAg
IGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkp
IHsKICAgICAgICAgYXV0byogcGFyZW50Q29udGFpbmVyID0gZWxlbWVudCgpLT5wYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmIChkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVw
bGFjZWRFbGVtZW50KGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IocGFyZW50Q29udGFp
bmVyLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpLCAqZWxlbWVudCgpKSkgeworICAg
ICAgICBpZiAoZHJhZ2dlZENvbnRlbnRDb250YWluc1JlcGxhY2VkRWxlbWVudChkb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpwYXJlbnRDb250YWluZXIsIERvY3VtZW50TWFya2VyOjpE
cmFnZ2VkQ29udGVudCksICplbGVtZW50KCkpKSB7CiAgICAgICAgICAgICBzYXZlZEdyYXBoaWNz
Q29udGV4dC5zYXZlKCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldEFscGhh
KDAuMjUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
aW5kZXggOTJhZjBkN2NmYWI4MzhiY2EyODZjNjdhZjIxMmFmMDRlY2JlYzk5My4uMGI2MmRjMTEx
ZDAxMjYwMTlkMTFlM2Q1NTQ2ODdkYzdkOGQ3NGQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcApAQCAtMTA3MSw3ICsxMDcxLDcgQEAgVmVjdG9yPHN0ZDo6cGFpcjx1
bnNpZ25lZCwgdW5zaWduZWQ+PiBSZW5kZXJUZXh0OjpkcmFnZ2VkQ29udGVudFJhbmdlc0JldHdl
ZW5PZmYKICAgICBpZiAoIXRleHROb2RlKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHRleHROb2RlKCks
IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCk7CisgICAgYXV0byBtYXJrZXJzID0gZG9j
dW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcigqdGV4dE5vZGUoKSwgRG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50KTsKICAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZS5jcHAKaW5kZXggYjY1NmZkNmQwODNhMTY4YjhhMWYzOTMxNGM3NjFkZWY2ZDU4
ZDBlZS4uNDc1ZTE1ZjBkMzg1MDAwZjJjYjA1NjU4NzFlZGVkYmY2YTg3NDkxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKQEAg
LTE2NSw5ICsxNjUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRnJvbUNhY2hlQW5kSW52
YWxpZGF0ZURlcGVuZGVuY2llcyhSZW5kZXJFbGVtZW50JiByZW5kZQogICAgICAgICAgICAgY2xp
cHBlci0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKHJlbmRlcmVyKTsKICAgICB9CiAKLSAgICBpZiAo
IXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhcmVuZGVyZXIuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQo
KSkKKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVzID0gcmVuZGVy
ZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5j
aW5nVGFyZ2V0KGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpOworICAg
IGF1dG8qIGRlcGVuZGVuY2llcyA9IHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChkb3duY2FzdDxTVkdFbGVtZW50
PigqcmVuZGVyZXIuZWxlbWVudCgpKSk7CiAgICAgaWYgKCFkZXBlbmRlbmNpZXMpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAppbmRleCAxODE4NjAzODUwOGM4MzAyODg3
OTNlYzhhNmUzMTA2OWM4ZTcyYzMzLi4yZGJlYWYwNmZjNTA3YmIwMDZkZGEwYTI0MDE2ZjlmNjkz
MGNmNDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTcwLDE5ICsxNzAsMTkgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSgpCiB7CiAgICAg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zJiBleHRlbnNpb25zID0gc3ZnRXh0ZW5zaW9uc0Zyb21FbGVt
ZW50KGVsZW1lbnQoKSk7CiAgICAgaWYgKCFleHRlbnNpb25zLmlzSWRPZlBlbmRpbmdSZXNvdXJj
ZShtX2lkKSkgewotICAgICAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsIHRoaXMpOwor
ICAgICAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsICp0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OlBlbmRpbmdFbGVtZW50cz4gY2xpZW50cyA9IGV4dGVuc2lvbnMucmVtb3ZlUGVuZGluZ1Jlc291
cmNlKG1faWQpOwogCiAgICAgLy8gQ2FjaGUgdXMgd2l0aCB0aGUgbmV3IGlkLgotICAgIGV4dGVu
c2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7CisgICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJj
ZShtX2lkLCAqdGhpcyk7CiAKICAgICAvLyBVcGRhdGUgY2FjaGVkIHJlc291cmNlcyBvZiBwZW5k
aW5nIGNsaWVudHMuCiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiAqY2xpZW50cykgewogICAgICAg
ICBBU1NFUlQoY2xpZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwotICAgICAgICBleHRlbnNp
b25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoY2xpZW50KTsKKyAgICAgICAg
ZXh0ZW5zaW9ucy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCpjbGllbnQpOwog
ICAgICAgICBhdXRvKiByZW5kZXJlciA9IGNsaWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCmluZGV4IGVhOWI0NTIxMTU3MzMxMzIzY2EyYjIw
Y2ZmN2JmOWQyOWQzOTBlZmYuLjQxM2JiYzI2Yzk2NTg2MDUwN2U0ZjRkNzhkMDhlOTJiZGVlNjYz
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAK
QEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50JgogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZHRG9jdW1lbnRFeHRlbnNpb25zJiBl
eHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGV4dGVuc2lvbnMuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAmZWxlbWVudCk7CisgICAg
ZXh0ZW5zaW9ucy5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIGVsZW1lbnQpOwogfQogCiBib29sIFNW
R1Jlc291cmNlczo6YnVpbGRDYWNoZWRSZXNvdXJjZXMoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggODNkOTEyZWViZThmZTQy
ODM4NjhkMmQxM2FkYzQzOTI4ZGEyNTk2Ny4uNjk0MzNhYTI3YjMxZmZkM2I1YjhlOGYyNjE3Nzdi
NDdlMWI2ZGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE2OSw4ICsxNjksOCBAQCB2b2lkIFNWR1Jlc291cmNlc0Nh
Y2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYgcmVzb3Vy
Y2UpCiAKICAgICAgICAgLy8gTWFyayB1c2VycyBvZiBkZXN0cm95ZWQgcmVzb3VyY2VzIGFzIHBl
bmRpbmcgcmVzb2x1dGlvbiBiYXNlZCBvbiB0aGUgaWQgb2YgdGhlIG9sZCByZXNvdXJjZS4KICAg
ICAgICAgRWxlbWVudCYgcmVzb3VyY2VFbGVtZW50ID0gcmVzb3VyY2UuZWxlbWVudCgpOwotICAg
ICAgICBFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gaXQua2V5LT5lbGVtZW50KCk7Ci0gICAgICAg
IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRp
bmdSZXNvdXJjZShyZXNvdXJjZUVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKSwgY2xpZW50RWxlbWVu
dCk7CisgICAgICAgIEVsZW1lbnQmIGNsaWVudEVsZW1lbnQgPSAqaXQua2V5LT5lbGVtZW50KCk7
CisgICAgICAgIGNsaWVudEVsZW1lbnQuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLCBjbGll
bnRFbGVtZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKaW5k
ZXggMTc2OTBjY2Q2Nzc3OWMyM2I5Mzc3NjMwODQ0NTQ2MmQ3YWE5MjJkZC4uZTZmMDcxNGE0Mzdh
NTQ4ZjVhMTQxZDI1Nzk3OGU1N2U4ZGE2NDU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZS5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFNjb3BlOjpjb2xsZWN0QWN0aXZlU3R5bGVT
aGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHNoZWV0cykKICAgICAgICAgICAgIGlm
IChwaS5pc1hTTCgpICYmICFtX2RvY3VtZW50LnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB1bnRpbCBsb2Fk
aW5nIGlzIGZpbmlzaGVkLgogICAgICAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5wYXJzaW5n
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFuc2Zvcm0oJnBp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybShwaSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IGViODE1NGNmNWMy
ZWUzZjkwZWFlYjQzOTEyMzBlOWMwNTNiMmEzYjcuLmNlNDJjMjE3MTRmNjJlNDBjMjIzN2YwNjM2
OTgyZWFmMWVjM2E0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwCkBAIC01MSwyNyArNTEsMjUgQEAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp+U1ZH
RG9jdW1lbnRFeHRlbnNpb25zKCkKIHsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjphZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV90aW1lQ29udGFpbmVycy5hZGQoZWxlbWVudCk7CisgICAgbV90aW1lQ29udGFpbmVy
cy5hZGQoJmVsZW1lbnQpOwogICAgIGlmIChtX2FyZUFuaW1hdGlvbnNQYXVzZWQpCi0gICAgICAg
IGVsZW1lbnQtPnBhdXNlQW5pbWF0aW9ucygpOworICAgICAgICBlbGVtZW50LnBhdXNlQW5pbWF0
aW9ucygpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlVGltZUNvbnRh
aW5lcihTVkdTVkdFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3Rp
bWVDb250YWluZXJzLnJlbW92ZShlbGVtZW50KTsKKyAgICBtX3RpbWVDb250YWluZXJzLnJlbW92
ZSgmZWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRSZXNvdXJj
ZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVz
b3VyY2UpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUmVzb3VyY2UoY29uc3QgQXRv
bWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImIHJlc291cmNlKQogewot
ICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0KICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBSZXBsYWNlcyByZXNvdXJjZSBpZiBhbHJlYWR5IHByZXNlbnQsIHRv
IGhhbmRsZSBwb3RlbnRpYWwgaWQgY2hhbmdlcwotICAgIG1fcmVzb3VyY2VzLnNldChpZCwgcmVz
b3VyY2UpOworICAgIG1fcmVzb3VyY2VzLnNldChpZCwgJnJlc291cmNlKTsKIH0KIAogdm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYg
aWQpCkBAIC05Nyw3ICs5NSw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFydEFu
aW1hdGlvbnMoKQogICAgIC8vIEZJWE1FOiBXZSBob2xkIGEgcmVmIHBvaW50ZXJzIHRvIHByZXZl
bnQgYSBzaGFkb3cgdHJlZSBmcm9tIGdldHRpbmcgcmVtb3ZlZCBvdXQgZnJvbSB1bmRlcm5lYXRo
IHVzLgogICAgIC8vIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSB1c2UtZWxl
bWVudCB0byBhdm9pZCB0aGlzLiBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvNTM3MDQKICAgICBW
ZWN0b3I8UmVmUHRyPFNWR1NWR0VsZW1lbnQ+PiB0aW1lQ29udGFpbmVyczsKLSAgICB0aW1lQ29u
dGFpbmVycy5hcHBlbmRSYW5nZShtX3RpbWVDb250YWluZXJzLmJlZ2luKCksIG1fdGltZUNvbnRh
aW5lcnMuZW5kKCkpOworICAgIGNvcHlUb1ZlY3RvcihtX3RpbWVDb250YWluZXJzLCB0aW1lQ29u
dGFpbmVycyk7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdGltZUNvbnRhaW5lcnMpCiAgICAg
ICAgIGVsZW1lbnQtPnRpbWVDb250YWluZXIoKS5iZWdpbigpOwogfQpAQCAtMTQ0LDE5ICsxNDIs
MTcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKICAgICByZXBvcnRNZXNzYWdlKG1fZG9jdW1lbnQsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsICJFcnJvcjogIiArIG1lc3NhZ2UpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNl
KGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQpOwotCiAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byByZXN1bHQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCBudWxscHRyKTsKICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdFbGVtZW50cz4oKTsKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5hZGQoZWxlbWVudCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRk
KCZlbGVtZW50KTsKIAotICAgIGVsZW1lbnQtPnNldEhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKKyAg
ICBlbGVtZW50LnNldEhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKIH0KIAogYm9vbCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmlzSWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlk
KSBjb25zdApAQCAtMTY3LDQ5ICsxNjMsNDMgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmlzSWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogICAg
IHJldHVybiBtX3BlbmRpbmdSZXNvdXJjZXMuY29udGFpbnMoaWQpOwogfQogCi1ib29sIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6aXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRo
UGVuZGluZ1Jlc291cmNlcyhFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIC8vIFRoaXMg
YWxnb3JpdGhtIHRha2VzIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgcGVuZGlu
ZyByZXNvdXJjZXMgYW5kIG5lZWQgbm90LgogICAgIC8vIElmIHBlcmZvcm1hbmNlIGJlY29tZXMg
YW4gaXNzdWUgd2UgY2FuIGtlZXAgYSBjb3VudGVkIHNldCBvZiBlbGVtZW50cyBhbmQgYW5zd2Vy
IHRoZSBxdWVzdGlvbiBlZmZpY2llbnRseS4KLSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgZm9y
IChhdXRvJiBlbGVtZW50cyA6IG1fcGVuZGluZ1Jlc291cmNlcy52YWx1ZXMoKSkgewogICAgICAg
ICBBU1NFUlQoZWxlbWVudHMpOwotCi0gICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoZWxl
bWVudCkpCisgICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoJmVsZW1lbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0Citib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6aXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICBpZiAoIWlzSWRPZlBl
bmRpbmdSZXNvdXJjZShpZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBt
X3BlbmRpbmdSZXNvdXJjZXMuZ2V0KGlkKS0+Y29udGFpbnMoZWxlbWVudCk7CisgICAgcmV0dXJu
IG1fcGVuZGluZ1Jlc291cmNlcy5nZXQoaWQpLT5jb250YWlucygmZWxlbWVudCk7CiB9CiAKLXZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3Np
YmxlKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJI
YXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlm
ICghaXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoZWxlbWVudCkpCi0gICAgICAgIGVsZW1l
bnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlcygpOworICAgICAgICBlbGVtZW50LmNsZWFySGFz
UGVuZGluZ1Jlc291cmNlcygpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVt
b3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgLy8gUmVtb3Zl
IHRoZSBlbGVtZW50IGZyb20gcGVuZGluZyByZXNvdXJjZXMuCi0gICAgaWYgKCFtX3BlbmRpbmdS
ZXNvdXJjZXMuaXNFbXB0eSgpICYmIGVsZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgewor
ICAgIGlmICghbV9wZW5kaW5nUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiBlbGVtZW50Lmhhc1BlbmRp
bmdSZXNvdXJjZXMoKSkgewogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3Zl
ZDsKICAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGluZ1Jlc291cmNlcykgewog
ICAgICAgICAgICAgUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IHJlc291cmNlLnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCgh
ZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxl
bWVudCk7CisgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKCZlbGVtZW50KTsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVk
LmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAgICB9CkBAIC0yMjksNyArMjE5LDcgQEAgdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
cyhFbGVtZW50KiBlbGVtZW50KQogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAg
ICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGVsZW1l
bnRzLT5yZW1vdmUoZWxlbWVudCk7CisgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKCZlbGVt
ZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAgICB9CkBAIC0yODQs
NDAgKzI3NCwyOSBAQCBFbGVtZW50KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWxNYXAoYwogICAgIHJldHVybiBlbGVtZW50
OwogfQogCi1IYXNoU2V0PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQp
IGNvbnN0CitIYXNoU2V0PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBjb25zdCBhdXRv
IGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAg
IGlmIChpdCA9PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CisgICAgcmV0dXJuIG1fZWxlbWVudERlcGVu
ZGVuY2llcy5nZXQoJnJlZmVyZW5jZWRFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVu
Y2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQordm9pZCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiBy
ZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAg
IEFTU0VSVChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgIEFTU0VSVChyZWZlcmVuY2VkRWxlbWVu
dCk7Ci0KLSAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGVsZW1lbnRzID0gbV9lbGVtZW50
RGVwZW5kZW5jaWVzLmdldChyZWZlcmVuY2VkRWxlbWVudCkpIHsKLSAgICAgICAgZWxlbWVudHMt
PmFkZChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byBlbGVtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxTVkdFbGVtZW50Kj4+KCk7
Ci0gICAgZWxlbWVudHMtPmFkZChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgIG1fZWxlbWVudERl
cGVuZGVuY2llcy5zZXQocmVmZXJlbmNlZEVsZW1lbnQsIFdURk1vdmUoZWxlbWVudHMpKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbnN1cmUoJnJlZmVyZW5jZWRF
bGVtZW50LCBbJnJlZmVyZW5jaW5nRWxlbWVudF0geworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxIYXNoU2V0PFNWR0VsZW1lbnQqPj4oc3RkOjppbml0aWFsaXplcl9saXN0PFNWR0Vs
ZW1lbnQqPiB7ICZyZWZlcmVuY2luZ0VsZW1lbnQgfSk7CisgICAgfSk7CisgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKCZyZWZl
cmVuY2luZ0VsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZXJlbmNpbmdFbGVt
ZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5j
ZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVudCkKIHsKICAgICBWZWN0
b3I8U1ZHRWxlbWVudCo+IHRvQmVSZW1vdmVkOwogCiAgICAgZm9yIChhdXRvJiBkZXBlbmRlbmN5
IDogbV9lbGVtZW50RGVwZW5kZW5jaWVzKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHJlZmVyZW5j
ZWRFbGVtZW50ID0gZGVwZW5kZW5jeS5rZXk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+
JiByZWZlcmVuY2luZ0VsZW1lbnRzID0gKmRlcGVuZGVuY3kudmFsdWU7Ci0gICAgICAgIHJlZmVy
ZW5jaW5nRWxlbWVudHMucmVtb3ZlKHJlZmVyZW5jaW5nRWxlbWVudCk7CisgICAgICAgIGF1dG8m
IHJlZmVyZW5jaW5nRWxlbWVudHMgPSAqZGVwZW5kZW5jeS52YWx1ZTsKKyAgICAgICAgcmVmZXJl
bmNpbmdFbGVtZW50cy5yZW1vdmUoJnJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChy
ZWZlcmVuY2luZ0VsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFw
cGVuZChyZWZlcmVuY2VkRWxlbWVudCk7CisgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQo
ZGVwZW5kZW5jeS5rZXkpOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRvQmVS
ZW1vdmVkKQpAQCAtMzMzLDExICszMTIsOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVidWlsZEVsZW1lbnRzKCkKIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNsZWFyVGFy
Z2V0RGVwZW5kZW5jaWVzKFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAgIGF1
dG8gaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZCgmcmVmZXJlbmNlZEVsZW1lbnQpOwot
ICAgIGlmIChpdCA9PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCisgICAgYXV0byogcmVm
ZXJlbmNpbmdFbGVtZW50cyA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5nZXQoJnJlZmVyZW5jZWRF
bGVtZW50KTsKKyAgICBpZiAoIXJlZmVyZW5jaW5nRWxlbWVudHMpCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoaXQtPmtleSA9PSAmcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIEhhc2hTZXQ8
U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAg
IGZvciAoYXV0byogZWxlbWVudCA6ICpyZWZlcmVuY2luZ0VsZW1lbnRzKSB7CiAgICAgICAgIG1f
cmVidWlsZEVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgZWxlbWVudC0+Y2FsbENs
ZWFyVGFyZ2V0KCk7CkBAIC0zNjEsMjMgKzMzOCwyNSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVidWlsZEFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmIHJl
ZgogICAgICAgICBlbGVtZW50LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKFhMaW5rTmFtZXM6OmhyZWZB
dHRyKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRS
ZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQordm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0
KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAgIG1fZWxlbWVudERlcGVuZGVu
Y2llcy5yZW1vdmUocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIG1fcmVidWlsZEVsZW1lbnRzLnJl
bW92ZUZpcnN0KHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMu
cmVtb3ZlKCZyZWZlcmVuY2VkRWxlbWVudCk7CisgICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3Zl
Rmlyc3QoJnJlZmVyZW5jZWRFbGVtZW50KTsKIH0KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi12
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZH
Rm9udEZhY2VFbGVtZW50KiBlbGVtZW50KQorCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5hZGQoZWxlbWVudCk7CisgICAgbV9zdmdGb250
RmFjZUVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjp1bnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1bnJlZ2lzdGVyU1ZHRm9udEZhY2VF
bGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobV9zdmdG
b250RmFjZUVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpKTsKLSAgICBtX3N2Z0ZvbnRGYWNlRWxl
bWVudHMucmVtb3ZlKGVsZW1lbnQpOworICAgIEFTU0VSVChtX3N2Z0ZvbnRGYWNlRWxlbWVudHMu
Y29udGFpbnMoJmVsZW1lbnQpKTsKKyAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudHMucmVtb3ZlKCZl
bGVtZW50KTsKIH0KKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaAppbmRleCA2YTUyNzcwNDljNWIyNTUwMjVmOTlhNzJlMTlmMmNlMDgxYmQx
ZGViLi41YzIxZTU1MjBmZDc0MzA2ODBlODdhYzRlNTA2NDZiNmRiNGE3NmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCkBAIC00MywxMCArNDMsMTAgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IFNWR0RvY3VtZW50RXh0ZW5zaW9ucyhEb2N1bWVudCYpOwog
ICAgIH5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKTsKICAgICAKLSAgICB2b2lkIGFkZFRpbWVDb250
YWluZXIoU1ZHU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlVGltZUNvbnRhaW5lcihTVkdT
VkdFbGVtZW50Kik7CisgICAgdm9pZCBhZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmKTsK
KyAgICB2b2lkIHJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYpOwogCi0gICAgdm9p
ZCBhZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lciopOworICAgIHZvaWQgYWRkUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImKTsKICAgICB2b2lkIHJlbW92ZVJlc291cmNlKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQpOwogICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBy
ZXNvdXJjZUJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CiAKQEAgLTYxLDE5ICs2
MSwxOSBAQCBwdWJsaWM6CiAKICAgICBTVkdSZXNvdXJjZXNDYWNoZSYgcmVzb3VyY2VzQ2FjaGUo
KSB7IHJldHVybiAqbV9yZXNvdXJjZXNDYWNoZTsgfQogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIHNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2Vk
RWxlbWVudCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZH
RWxlbWVudCogcmVmZXJlbmNpbmdFbGVtZW50LCBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVu
dCk7Ci0gICAgdm9pZCByZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVt
ZW50Kik7CisgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHNldE9mRWxlbWVudHNSZWZlcmVuY2lu
Z1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkgY29uc3Q7CisgICAgdm9pZCBh
ZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNpbmdFbGVtZW50
LCBTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgdm9pZCByZW1vdmVBbGxUYXJn
ZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50Jik7CiAgICAgdm9pZCByZWJ1aWxkQWxs
RWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3Zl
QWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCopOworICAgIHZvaWQgcmVt
b3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYpOwogCiAgICAgdm9p
ZCBjbGVhclRhcmdldERlcGVuZGVuY2llcyhTVkdFbGVtZW50Jik7CiAgICAgdm9pZCByZWJ1aWxk
RWxlbWVudHMoKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgY29uc3QgSGFzaFNldDxT
VkdGb250RmFjZUVsZW1lbnQqPiYgc3ZnRm9udEZhY2VFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3ZnRm9udEZhY2VFbGVtZW50czsgfQotICAgIHZvaWQgcmVnaXN0ZXJTVkdGb250RmFjZUVs
ZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU1ZHRm9udEZh
Y2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJTVkdGb250
RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU1ZH
Rm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYpOwogI2VuZGlmCiAKIHByaXZhdGU6
CkBAIC05NSwxMSArOTUsMTEgQEAgcHVibGljOgogICAgIC8vIFRoaXMgSGFzaE1hcCBjb250YWlu
cyBhIGxpc3Qgb2YgcGVuZGluZyByZXNvdXJjZXMuIFBlbmRpbmcgcmVzb3VyY2VzLCBhcmUgc3Vj
aAogICAgIC8vIHdoaWNoIGFyZSByZWZlcmVuY2VkIGJ5IGFueSBvYmplY3QgaW4gdGhlIFNWRyBk
b2N1bWVudCwgYnV0IGRvIE5PVCBleGlzdCB5ZXQuCiAgICAgLy8gRm9yIGluc3RhbmNlLCBkeW5h
bWljYWxseSBidWlsZCBncmFkaWVudHMgLyBwYXR0ZXJucyAvIGNsaXBwZXJzLi4uCi0gICAgdm9p
ZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCopOwor
ICAgIHZvaWQgYWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1l
bnQmKTsKICAgICBib29sIGlzSWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdDsKLSAgICBib29sIGlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQqLCBjb25zdCBB
dG9taWNTdHJpbmcmIGlkKSBjb25zdDsKLSAgICB2b2lkIGNsZWFySGFzUGVuZGluZ1Jlc291cmNl
c0lmUG9zc2libGUoRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzKEVsZW1lbnQqKTsKKyAgICBib29sIGlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQm
LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKKyAgICB2b2lkIGNsZWFySGFzUGVuZGlu
Z1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlRWxlbWVudEZy
b21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVuZGlu
Z0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7
CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHNjaGVk
dWxpbmcgYSBwZW5kaW5nIHJlc291cmNlIHRvIGJlIHJlbW92ZWQuCkBAIC0xMDcsNyArMTA3LDcg
QEAgcHVibGljOgogICAgIEVsZW1lbnQqIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
c0ZvclJlbW92YWxNYXAoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBpc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KikgY29uc3Q7CisgICAgYm9v
bCBpc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50JikgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBlbmRpbmdFbGVtZW50cz4gcmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVt
b3ZhbChjb25zdCBBdG9taWNTdHJpbmcmKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cAppbmRleCA3MDE4OTgxYjkyYjk2ZGZiYjA1YWJhNTVkMTFlNmJjMWVmMTcxOGE4Li5kZTAxYTIy
ZGQ4YTg4MjAwMjFiNjlkMGRkN2FlMGRiZTU5ZDlmZmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCkBAIC0yOTQsNyArMjk0LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAg
ICAgICBtX3N2Z1JhcmVEYXRhID0gbnVsbHB0cjsKICAgICB9CiAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVidWlsZEFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0
aGlzKTsKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVt
ZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7CiB9
CiAKIGludCBTVkdFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CkBAIC0zNzUsNyArMzc1LDcgQEAg
dm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQog
CiAgICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuY2xlYXJUYXJnZXREZXBlbmRlbmNpZXMoKnRoaXMpOwotICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwogICAgIH0KICAgICBp
bnZhbGlkYXRlSW5zdGFuY2VzKCk7CiB9CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIFNWR0Vs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkKICAgICAgICAgQVNTRVJUKGNs
aWVudEVsZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIGlmIChjbGllbnRF
bGVtZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKICAgICAgICAgICAgIGNsaWVudEVsZW1l
bnQtPmJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBleHRlbnNpb25zLmNsZWFy
SGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoY2xpZW50RWxlbWVudCk7CisgICAgICAgICAg
ICBleHRlbnNpb25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKmNsaWVudEVs
ZW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAKaW5kZXggZWM3NGE4ZDBlNWFiNmI1YWQ5OGE4OGU3OGUxMmM0YmE2MjVkNmFl
Ny4uYjJjMzIzN2NhOWYzZDZkNGEzNjVlYmNkOTBkYzg5YTBkNzM4ODkzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgU1ZH
RkVJbWFnZUVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKICAgICAgICAgbV9jYWNo
ZWRJbWFnZSA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNl
c0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0
SW1hZ2VSZXNvdXJjZSgpCkBAIC0xMDcsMTMgKzEwNywxMyBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgICAgIGlmIChpZC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJj
ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQ
ZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQtPmlz
U1ZHRWxlbWVudCgpKSB7CisgICAgfSBlbHNlIGlmIChpczxTVkdFbGVtZW50PigqdGFyZ2V0KSkg
ewogICAgICAgICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVu
Y2llcyBtYXAuIEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFk
cyB0byByZWxheW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3Qg
dG8gaXQuCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1l
bnRSZWZlcmVuY2luZ1RhcmdldCh0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQpKTsK
KyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVy
ZW5jaW5nVGFyZ2V0KCp0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAg
fQogCiAgICAgaW52YWxpZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcAppbmRleCBiOGJhOWIwN2ZlMmE2NDA5MzY5ZjFhYzg0NTJiNWE1YWU4YWM2OGVjLi40
NjM4ODA2MTQ5ZDVmNTNjYWI4ZjhjMzNiNzMzZmQ2NGY0OGFlZmExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMjc4LDcgKzI3OCw3IEBAIE5vZGU6Oklu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kCiAgICAgICAgIEFTU0VSVCghbV9mb250RWxlbWVudCk7CiAgICAgICAg
IHJldHVybiBJbnNlcnRpb25Eb25lOwogICAgIH0KLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCgqdGhp
cyk7CiAKICAgICByZWJ1aWxkRm9udEZhY2UoKTsKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsK
QEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIAogICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVj
dGVkKCkpIHsKICAgICAgICAgbV9mb250RWxlbWVudCA9IG51bGxwdHI7Ci0gICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0
ZXJTVkdGb250RmFjZUVsZW1lbnQoKnRoaXMpOwogICAgICAgICBtX2ZvbnRGYWNlUnVsZS0+bXV0
YWJsZVByb3BlcnRpZXMoKS5jbGVhcigpOwogCiAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTY29w
ZSgpLmRpZENoYW5nZVN0eWxlU2hlZXRFbnZpcm9ubWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcAppbmRleCBmZjdkNDg3MmQ2OTQ1NjdlNzUyYzNmY2ZhNzA5MGY3Y2Zj
ZGE0NzE4Li5kZjI1MmJmMDJiNjhiNDhkNjY5OTk5OGJlOGQ1ZjAyYTVkMjUxZDUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcApAQCAtNjUsMTcgKzY1LDE3IEBAIHZvaWQg
U1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgRWxlbWVudCogdGFy
Z2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCks
IGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsKICAgICAgICAgLy8gRG8gbm90
IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2UgYXJlIGFscmVhZHkgcGVuZGluZyB0aGlzIHJlc291
cmNlLgotICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5k
aW5nUmVzb3VyY2UodGhpcywgaWQpKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UoKnRoaXMsIGlkKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJj
ZXMoKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhcmdldC0+aXNTVkdFbGVtZW50KCkp
IHsKKyAgICB9IGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCp0YXJnZXQpKSB7CiAgICAgICAgIC8v
IFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55
IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0
L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5n
VGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQo
KnRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9CiAKICAgICB0YXJn
ZXRQYXRoQ2hhbmdlZCgpOwpAQCAtODMsNyArODMsNyBAQCB2b2lkIFNWR01QYXRoRWxlbWVudDo6
YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogCiB2b2lkIFNWR01QYXRoRWxlbWVudDo6Y2xlYXJSZXNv
dXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVt
ZW50KCp0aGlzKTsKIH0KIAogTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdN
UGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggZTIyMzBmNDEyZGQ4MTM1YmYyNTc2
MTViZWI4ZWU0ODQ3N2ZkZTA0ZS4uZjcxNjQ3MGMyYjM5NTBkYjIyNTgxMGJjMzBlYzRhMTg4Mjcw
ZTczMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6aW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKCkK
IHsKICAgICAvLyA8bXBhdGg+IGNhbiBvbmx5IHJlZmVyZW5jZSA8cGF0aD4gYnV0IHRoaXMgZGVw
ZW5kZW5jeSBpcyBub3QgaGFuZGxlZCBpbgogICAgIC8vIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRS
ZXNvdXJjZUludmFsaWRhdGlvbiBzbyB3ZSB1cGRhdGUgYW55IG1wYXRoIGRlcGVuZGVuY2llcyBt
YW51YWxseS4KLSAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1Rh
cmdldCh0aGlzKSkgeworICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVz
ID0gZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5j
aW5nVGFyZ2V0KCp0aGlzKSkgewogICAgICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiAqZGVwZW5k
ZW5jaWVzKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZHTVBhdGhFbGVtZW50PigqZWxlbWVudCkp
CiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8U1ZHTVBhdGhFbGVtZW50PigqZWxlbWVudCkudGFy
Z2V0UGF0aENoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBi
ZmE5MTcyZTg5MWNjNjQzMDhmMzQ2MjRlNzRlNWVlOWIzYTdhMzI4Li45NDA1MGRiOTNhYWVmZWZj
Mjk0YzQ3NGI2MWRlYjRkMWY2YTNlZGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIGlubGluZSBTVkdTVkdFbGVtZW50OjpTVkdTVkdFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1CiB7CiAgICAgQVNT
RVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpOwogICAgIHJlZ2lzdGVyQW5pbWF0ZWRQ
cm9wZXJ0aWVzRm9yU1ZHU1ZHRWxlbWVudCgpOwotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogUmVmPFNWR1NWR0VsZW1l
bnQ+IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCYgZG9jdW1lbnQpCkBAIC05NiwxNCArOTYsMTQgQEAgU1ZHU1ZHRWxlbWVudDo6flNW
R1NWR0VsZW1lbnQoKQogewogICAgIGlmIChtX3ZpZXdTcGVjKQogICAgICAgICBtX3ZpZXdTcGVj
LT5yZXNldENvbnRleHRFbGVtZW50KCk7Ci0gICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CisgICAgZG9jdW1lbnQoKS51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKCp0aGlzKTsK
IH0KIAogdm9pZCBTVkdTVkdFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYg
b2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsKLSAgICBvbGREb2N1bWVudC51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3Vt
ZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAg
b2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
cygqdGhpcyk7CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogfQogCkBAIC00NzAsNyArNDcwLDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihS
ZW5kZXJTdHlsZSYmIHN0eWwKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZH
U1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiB7CiAg
ICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRUaW1lQ29udGFpbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRUaW1lQ29udGFpbmVyKCp0aGlzKTsKICAg
ICAgICAgaWYgKCFkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hcmVBbmltYXRpb25z
UGF1c2VkKCkpCiAgICAgICAgICAgICB1bnBhdXNlQW5pbWF0aW9ucygpOwogCkBAIC00ODYsNyAr
NDg2LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50
OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm8KIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cmVt
b3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIHsKICAgICBpZiAocm9vdFBhcmVu
dC5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIoKnRoaXMpOwogICAgICAgICBwYXVz
ZUFuaW1hdGlvbnMoKTsKICAgICB9CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZW1vdmVkRnJv
bShyb290UGFyZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCmluZGV4IGIw
ODM3MzYxNTEzNzA2ODMwMWFlMGZkZWI3ZTljOWE5OTA5ZjJhNDEuLjZmOWQ2ZTNmYzFmMTIzZmRm
ZjcxZGVhNWRmOGJlYTQyZjFhYjEyZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUUmVmRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50
LmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRldGFjaFRhcmdl
dCgpCiAgICAgU3RyaW5nIGlkOwogICAgIFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZy
b21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIGlmICghaWQuaXNFbXB0
eSgpKQotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5n
UmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKIH0KIAogdm9pZCBTVkdUUmVmRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50
OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAg
IEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAppbmRleCA3NTE3ZThiOGE2
MDEwZTZhYTZkN2U0NDM3ODlkODlmZjg0NjhkYjQxLi44MDZhZTg3NjU4OWYzN2ZkOTNjMzEzYzll
MjhiMGM2Njk3NTIzMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBh
dGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAj
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
KyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNjYsNyArNjcsNyBAQCBTVkdUZXh0
UGF0aEVsZW1lbnQ6On5TVkdUZXh0UGF0aEVsZW1lbnQoKQogCiB2b2lkIFNWR1RleHRQYXRoRWxl
bWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMp
OworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJl
ZmVyZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogYm9vbCBTVkdUZXh0UGF0aEVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAt
MTU5LDE3ICsxNjAsMTcgQEAgdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlKCkKICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIXRh
cmdldCkgewogICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUg
YWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAg
IGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgq
dGhpcywgaWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQ
ZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAg
ICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAodGFyZ2V0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwYXRoVGFnKSkgewogICAgICAgICAvLyBS
ZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAuIEFueSBj
aGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxheW91dC9y
ZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCi0gICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1Rh
cmdldCh0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQpKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KCp0
aGlzLCBkb3duY2FzdDxTVkdQYXRoRWxlbWVudD4oKnRhcmdldCkpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IDVlNzMyMzgwYzVkODA4Mzg4ZjM4YmE4
YzMwMWEyZWU5Y2U5OTgzM2EuLmRkZjY1NmMyNTFlOGUzZDIwYmZkNDk1YzRiYzNmMTEwOTA3MGFh
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBA
QCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnVwZGF0ZVNoYWRvd1RyZWUoKQogICAgIFN0cmluZyB0YXJn
ZXRJRDsKICAgICBhdXRvKiB0YXJnZXQgPSBmaW5kVGFyZ2V0KCZ0YXJnZXRJRCk7CiAgICAgaWYg
KCF0YXJnZXQpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRk
UGVuZGluZ1Jlc291cmNlKHRhcmdldElELCB0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHRhcmdldElELCAqdGhpcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggODYyZDY4YWI0ZDUyNzAzOGE0N2MzNTIxNzk1M2E4
OWE4NTNhNzhmNC4uNmU4NTgzYmJhNGNiYzNiMzBmY2M4NjEzZGNkMjM1ZDdiMjU1MjY0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBTVkdTTUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKIAogdm9p
ZCBTVkdTTUlMRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JF
bGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92
ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBTVkdTTUlM
RWxlbWVudDo6Y2xlYXJUYXJnZXQoKQpAQCAtMTkyLDE3ICsxOTIsMTcgQEAgdm9pZCBTVkdTTUlM
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogCiAgICAgaWYgKCFzdmdUYXJnZXQpIHsK
ICAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2UgYXJlIGFscmVhZHkg
cGVuZGluZyB0aGlzIHJlc291cmNlLgotICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UodGhpcywgaWQpKQorICAgICAgICBpZiAoZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UoKnRoaXMsIGlk
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jl
c291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJU
KGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAu
IEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxh
eW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCi0g
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVu
Y2luZ1RhcmdldCh0aGlzLCBzdmdUYXJnZXQpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMsICpzdmdUYXJn
ZXQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDlm
OGMyNGEyMjkyOWUxY2M5MWFkM2ZiM2E4ZTYyOGVkMzE4MzZiZmUuLmM1MDEzNDYxZDRiMTMyMDE4
NDgyZWQ3NWM0YmM5MTlhZmIwNDA0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTEzNzAsNyArMTM3MCw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6
Om1hcmtlckNvdW50Rm9yTm9kZShOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIG1hCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgbm9kZS5kb2N1bWVudCgp
LmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKLSAgICBy
ZXR1cm4gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCZub2RlLCBtYXJrZXJU
eXBlcykuc2l6ZSgpOworICAgIHJldHVybiBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtl
cnNGb3Iobm9kZSwgbWFya2VyVHlwZXMpLnNpemUoKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+IEludGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwgY29uc3Qg
U3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCkKQEAgLTEzODMsNyArMTM4Myw3IEBA
IEV4Y2VwdGlvbk9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBJbnRlcm5hbHM6Om1hcmtlckF0
KE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluCiAKICAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+
ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogCi0gICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzRm9yKCZub2RlLCBtYXJrZXJUeXBlcyk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5kZXgp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBtYXJrZXJzW2luZGV4XTsKQEAg
LTE0MzksNyArMTQzOSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpkdW1wTWFy
a2VyUmVjdHMoY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlU3RyaW5nKQogdm9pZCBJbnRlcm5hbHM6
OmFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wgaXNBY3RpdmUpCiB7
CiAgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwotICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkVGV4dE1h
dGNoTWFya2VyKCZyYW5nZSwgaXNBY3RpdmUpOworICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCBpc0FjdGl2ZSk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZChib29sIGZsYWcpCkBAIC0yNjE1LDQyICsyNjE1LDYgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFRv
cENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpCiAgICAgZG9jdW1lbnQtPnBhZ2UoKS0+
c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7CiB9CiAKLSNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCi0KLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBkb2N1bWVudC0+d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQp
OwotfQotCi12b2lkIEludGVybmFsczo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1
bWVudC0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0K
LXZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53
ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQotdm9pZCBJ
bnRlcm5hbHM6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwotICAg
IGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+d2Via2l0RGlk
RXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQotI2VuZGlmCi0KIHZvaWQg
SW50ZXJuYWxzOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggMmI4MTQ2MDRkYzVlZWM3YjM4ZTc5
NDYzMzAwMzI4NzViZGFlZGYwMi4uZGEyNzc0ZTBkZTY3MzNiNmYwMWY4YjRkYTJhMWI2ZDBkNDcx
ZDhkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0zNTYsMTMgKzM1Niw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKIAotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCYpOwotICAgIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50Jik7Ci0gICAgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoRWxlbWVudCYpOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9S
VCB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcp
OwogCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAppbmRleCBlODdhNzRjNThhYzVjMmM2ZjFmOThiMWVjOGJlZmFlNDExMTkxMjFkLi5jODMw
MDkwMjNjYWNhYTUxOWExZjQwMTFiODkwOTkyYTZmYTJiNzAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCkBAIC0zMzAsMTEgKzMzMCw2IEBAIGVudW0gRXZlbnRUaHJvdHRsaW5n
QmVoYXZpb3IgewogCiAgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQodW5yZXN0cmljdGVkIGZs
b2F0IGNvbnRlbnRJbnNldCk7CiAKLSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZv
aWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsK
LSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwotICAgIFtDb25kaXRpb25hbD1GVUxM
U0NSRUVOX0FQSV0gdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQgZWxlbWVudCk7Ci0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lkIHdlYmtp
dERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwotCiAgICAgdm9p
ZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3Rh
KTsKIAogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0
eVBvbGljeShET01TdHJpbmcgc2NoZW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAppbmRl
eCA4MjkwMzE0MDVkYmI3ZjdlYjQxMzlhNDdmMjA1YmU2ZDY3YzRkYTBhLi5iYjRhMTg1ZmQzMDc0
MzAxNGM1Yzg5OTQ4ZGIzZTA0YzQ2NGI0YWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3Bw
CkBAIC05MSw3ICs5MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxXb3JrZXI+PiBXb3JrZXI6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OlJ1CiAgICAgd29ya2VyLT5t
X3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IHNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeTsKIAogICAgIC8vIFRoZSB3b3JrZXIgY29u
dGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0
IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIG5vciBhcmUgaXRzIGV2ZW50IGxp
c3RlbmVycy4KLSAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIucHRyKCkpOwor
ICAgIHdvcmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5nZXQoKSk7CiAKICAgICAvLyBo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93b3JrZXJzLmh0bWwjb2ZmaWNp
YWwtbW9tZW50LW9mLWNyZWF0aW9uCiAgICAgd29ya2VyLT5tX3dvcmtlckNyZWF0aW9uVGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgV29ya2VyOjpu
b3RpZnlGaW5pc2hlZCgpCiAgICAgfQogICAgIG1fc2NyaXB0TG9hZGVyID0gbnVsbHB0cjsKIAot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggOWE0ZmRiN2QzMTM0ZjBhYTE3MmRhNTA2MGY1OWZlZmQ0NDhi
ZjM1NC4uYWQyNzViNjhhNTQ1MmViZDAwODM3MTM4NGZhOWM5NGYyZGExNGM0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xOTAsOSArMTkwLDkgQEAgRXhjZXB0aW9u
T3I8RG9jdW1lbnQqPiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoKQogICAgICAgICAgICAg
bV9yZXNwb25zZURvY3VtZW50ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChpc0hUTUwpCi0gICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gSFRN
TERvY3VtZW50OjpjcmVhdGUoMCwgbV91cmwpOworICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VE
b2N1bWVudCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlKG51bGxwdHIsIG1fdXJsKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBYTUxEb2N1bWVu
dDo6Y3JlYXRlKDAsIG1fdXJsKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQg
PSBYTUxEb2N1bWVudDo6Y3JlYXRlKG51bGxwdHIsIG1fdXJsKTsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTZXQgTGFzdC1Nb2RpZmllZC4KICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudC0+
c2V0Q29udGVudChtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7
CiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQtPnNldENvbnRleHREb2N1bWVudChkb3du
Y2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpOwpAQCAtNDkwLDcgKzQ5
MCw3IEBAIHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uT3I8dm9pZD4+IFhNTEh0dHBSZXF1ZXN0Ojpw
cmVwYXJlVG9TZW5kKCkKICAgICBpZiAoIWNvbnRleHQuc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29u
dGVudFNlY3VyaXR5UG9saWN5KCkgJiYgIWNvbnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCkt
PmFsbG93Q29ubmVjdFRvU291cmNlKG1fdXJsKSkgewogICAgICAgICBpZiAoIW1fYXN5bmMpCiAg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uT3I8dm9pZD4geyBFeGNlcHRpb24geyBOZXR3b3Jr
RXJyb3IgfSB9OwotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1fdGltZW91dFRpbWVyLnN0b3AoKTsK
ICAgICAgICAgbV9uZXR3b3JrRXJyb3JUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgfTsKQEAgLTc1OSw3ICs3NTksNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCgpCiAgICAgICAgIC8vIGEg
cmVxdWVzdCBpcyBpbiBwcm9ncmVzcyBiZWNhdXNlIHdlIG5lZWQgdG8ga2VlcCB0aGUgbGlzdGVu
ZXJzIGFsaXZlLAogICAgICAgICAvLyBhbmQgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgSmF2
YVNjcmlwdCB3cmFwcGVyLgogICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0
aXRpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT50b3BPcmlnaW4oKS5kb21haW5Gb3JDYWNo
ZVBhcnRpdGlvbigpKTsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9h
ZFhIUlN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKQEAgLTg5Myw3ICs4
OTMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQogICAgIHZtLmhlYXAu
ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICog
Mik7CiAKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0Ojpv
dmVycmlkZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGUpCkBAIC0xMDMxLDcgKzEwMzEs
NyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQogICAgIC8vIEluIGNhc2UgZGlkRmFpbCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSBvbiBh
biBhc3luY2hyb25vdXMgWEhSIGNhbGwsIGxldCdzIGRpc3BhdGNoIG5ldHdvcmsgZXJyb3IgYXN5
bmNocm9ub3VzbHkKICAgICBpZiAobV9hc3luYyAmJiBtX3NlbmRGbGFnICYmICFtX2xvYWRlcikg
ewogICAgICAgICBtX3NlbmRGbGFnID0gZmFsc2U7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgbV90
aW1lb3V0VGltZXIuc3RvcCgpOwogICAgICAgICBtX25ldHdvcmtFcnJvclRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhTdGVwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCmluZGV4
IDhjOTI3YmZmM2VlYjY5MDgxZjA0N2JmMGYyNmU2ZDhlZWU5MmM1Y2QuLmZjZGMwMmM1MjE0ZDM5
NTBiZmJkNGNjZmY3M2QxODViMjY2NTU1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFN0ZXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCkBA
IC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0y
MDEsNyArMjAwLDcgQEAgaW5saW5lIGJvb2wgbm9kZU1hdGNoZXNCYXNpY1Rlc3QoTm9kZSYgbm9k
ZSwgU3RlcDo6QXhpcyBheGlzLCBjb25zdCBTdGVwOjpOb2RlVGUKICAgICAgICAgICAgIGlmIChu
YW1lID09IHN0YXJBdG9tKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSS5p
c0VtcHR5KCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCk7CiAKLSAgICAg
ICAgICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KG5vZGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
UGF0aHMgd2l0aG91dCBuYW1lc3BhY2VzIHNob3VsZCBtYXRjaCBIVE1MIGVsZW1lbnRzIGluIEhU
TUwgZG9jdW1lbnRzIGRlc3BpdGUgdGhvc2UgaGF2aW5nIGFuIFhIVE1MIG5hbWVzcGFjZS4gTmFt
ZXMgYXJlIGNvbXBhcmVkIGNhc2UtaW5zZW5zaXRpdmVseS4KICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUp
LmxvY2FsTmFtZSgpLCBuYW1lKSAmJiAobmFtZXNwYWNlVVJJLmlzTnVsbCgpIHx8IG5hbWVzcGFj
ZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcAppbmRleCBhOTBiOTY1MDA0YzQ4ZmI0OTA0ZWI3ZmMyYmUxYmM2MzNhNzIwNmE1Li5lYTBh
YzQwMjU4NDRjYjIxNGI0ZWNlZDIwOWVhYzkzNmI4MjcwMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3IuY3BwCkBAIC0yMSwxMSArMjEsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgogCiAjaWYgRU5BQkxFKFhTTFQpCiAK
LSNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0KICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCkBAIC0zMyw3ICszMiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC04Nyw3ICs4
NSw3IEBAIFJlZjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nCiAKICAgICAgICAgaWYgKERvY3VtZW50KiBv
bGREb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICByZXN1bHQtPnNl
dFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KG9sZERvY3VtZW50KTsKLSAgICAgICAgICAgIHJlc3Vs
dC0+dGFrZURPTVdpbmRvd0Zyb20ob2xkRG9jdW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LT50
YWtlRE9NV2luZG93RnJvbSgqb2xkRG9jdW1lbnQpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRT
ZWN1cml0eU9yaWdpblBvbGljeShvbGREb2N1bWVudC0+c2VjdXJpdHlPcmlnaW5Qb2xpY3koKSk7
CiAgICAgICAgICAgICByZXN1bHQtPnNldENvb2tpZVVSTChvbGREb2N1bWVudC0+Y29va2llVVJM
KCkpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhvbGREb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKaW5k
ZXggMzY2OWMyZGE5ODYwYjNhZWE2MDJjOGRiZjdkMGZiYzk4Nzc5OGNkYy4uNWFiMjYyMGE3ODEx
MTc0NzcwZDcxYjYzNTdkOGQyZDkzOTFhOWUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcApA
QCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OmV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KQogdm9pZCBXZWJGdWxsU2Ny
ZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndl
YmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKm1fZWxlbWVudCk7CiAgICAgbV9wYWdlLT5oaWRlUGFn
ZUJhbm5lcnMoKTsKICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAg
ICAgbV9wYWdlLT5mb3JjZVJlcGFpbnRXaXRob3V0Q2FsbGJhY2soKTsKQEAgLTExOSwxNCArMTE5
LDE0IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OndpbGxFbnRlckZ1bGxTY3JlZW4oKQog
dm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBB
U1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJGdWxs
U2NyZWVuTWFuYWdlcjo6d2lsbEV4aXRGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVt
ZW50KTsKICAgICBtX2ZpbmFsRnJhbWUgPSBzY3JlZW5SZWN0T2ZDb250ZW50cyhtX2VsZW1lbnQu
Z2V0KCkpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpOwogICAgIG1fcGFnZS0+c2hvd1BhZ2VCYW5uZXJz
KCk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZ1bGxTY3JlZW5DbGllbnQoKS5iZWdhbkV4
aXRGdWxsU2NyZWVuKG1fcGFnZS5nZXQoKSwgbV9maW5hbEZyYW1lLCBtX2luaXRpYWxGcmFtZSk7
CiB9CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6d2lsbEV4
aXRGdWxsU2NyZWVuKCkKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsU2Ny
ZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7Cisg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAK
IHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oYm9vbCBh
bmltYXRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJl
YW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwCmluZGV4IGU5ZmYyNGY4MmRjNWQxOWU1OGNhOTZkYzE1NDZkZGRiMzdhNDNmYTMuLjk0NTAx
M2Q2ODg3Mzk3ZTJlYmY3MWIxOTlhOTVkNTI5YzM1MDUxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQg
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpzdGFydFVzZXJNZWRpYVJlcXVlc3Qo
VXNlck1lZGlhUmVxdWVzdCYKIAogICAgIGF1dG8mIHBlbmRpbmdSZXF1ZXN0cyA9IG1fYmxvY2tl
ZFJlcXVlc3RzLmFkZChkb2N1bWVudCwgVmVjdG9yPFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0Pj4o
KSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQot
ICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAg
ICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICBwZW5kaW5n
UmVxdWVzdHMuYXBwZW5kKCZyZXF1ZXN0KTsKIH0KIApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQg
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjptZWRpYUNhblN0YXJ0KERvY3VtZW50
JiBkb2N1bWVudCkKICAgICB3aGlsZSAoIXBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgaWYgKCFkb2N1bWVudC5wYWdlKCktPmNhblN0YXJ0TWVkaWEoKSkgewogICAgICAgICAg
ICAgbV9ibG9ja2VkUmVxdWVzdHMuYWRkKCZkb2N1bWVudCwgcGVuZGluZ1JlcXVlc3RzKTsKLSAg
ICAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZU1lZGlhUmVxdWVzdEZyb21NYXBzKFVz
ZXJNZWRpYVJlcXUKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChwZW5kaW5n
UmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVxdWVzdC5kb2N1bWVudCgpLT5yZW1v
dmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICByZXF1ZXN0LmRvY3Vt
ZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fYmxvY2tlZFJlcXVlc3RzLmFkZChyZXF1ZXN0LmRvY3VtZW50KCksIHBl
bmRpbmdSZXF1ZXN0cyk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBlZWEzOGYwOTgyYzdlZDUxMTI1ODMy
NzlhMjY4OTA5NjBjZDdlMjdiLi44Y2RlYzIyMTdmZGE1OGNiNmMzODY0NWRkZGJkNWViZDdkOGNm
MjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcApAQCAtMzE3LDkgKzMxNyw5IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKICAgICBB
U1NFUlQoIW1faXNCZWluZ0Rlc3Ryb3llZCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1l
ZGlhQ2FuU3RhcnQpCi0gICAgICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9j
dW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCi0gICAgbV9wbHVn
aW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgbV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogCiAg
ICAgZGVzdHJveVBsdWdpbkFuZFJlc2V0KCk7CiAKQEAgLTU5MCwxMyArNTkwLDEzIEBAIHZvaWQg
UGx1Z2luVmlldzo6aW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgICAgICBt
X3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlz
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkQXVkaW9Qcm9kdWNlcih0
aGlzKTsKKyAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkQXVkaW9Qcm9kdWNlcigq
dGhpcyk7CiAKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElD
KQogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCptX3BsdWdpbkVsZW1lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVl
bkxpc3RlbmVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
S2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tCmluZGV4IGFmNWFjMmYyODliYzFiMTIwNDY2YzU5YzAy
NzkwNmVjMTQ4MTY1ZTcuLjUzN2NjNjY4MDVkNDliZTBlZDBmYjQxZjYwOTA2MzVlNmI5OTVhZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktp
dEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0KQEAgLTQ1LDI1ICs0NSwyNSBA
QCAtIChpZClpbml0V2l0aEVsZW1lbnQ6KEVsZW1lbnQqKWVsZW1lbnQKIC0gKHZvaWQpd2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1l
bnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1l
bnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJG
dWxsU2NyZWVuKCpfZWxlbWVudCk7CiB9CiAKIC0gKHZvaWQpd2Via2l0RGlkRW50ZXJGdWxsU2Ny
ZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiB9CiAK
IC0gKHZvaWQpd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQot
ICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKIC0gKHZvaWQpd2Via2l0RGlkRXhpdEZ1bGxT
Y3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAg
ICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCmluZGV4IDNmMTA5OTZmYzI2Zjg2NzYxZDg3OTJjMDBh
N2ZiZjEyZjhlOGQ3YTguLmEyMTZiMGE4Y2ZlYWFmMzUyNzg2M2RjN2JiZTgzZGVlYTkxZTFjZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
dWxsU2NyZWVuQ29udHJvbGxlci5tbQpAQCAtMjM2LDcgKzIzNiw3IEBAIC0gKHZvaWQpZW50ZXJG
dWxsU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgogCiAgICAgX3NhdmVkU2NhbGUgPSBbX3dlYlZp
ZXcgX3ZpZXdTY2FsZUZhY3Rvcl07CiAgICAgW193ZWJWaWV3IF9zY2FsZVdlYlZpZXc6MSBhdE9y
aWdpbjpOU01ha2VQb2ludCgwLCAwKV07Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxmIF9k
b2N1bWVudF0tPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKl9lbGVtZW50KTsKICAgICBbc2Vs
ZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogICAgIFtzZWxmIF9k
b2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOwogCkBAIC0yNjksNyArMjY5LDcgQEAgLSAodm9pZClm
aW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQKICAgICAgICAg
Ly8gU2NyZWVuIHVwZGF0ZXMgdG8gYmUgcmUtZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRoaXMgYmxv
Y2sKICAgICAgICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRlcygpOwogICAgICAgICBbc2VsZiBfZG9j
dW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKLSAgICAgICAgW3NlbGYgX2Rv
Y3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQo
KSk7CisgICAgICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigp
OwogICAgICAgICAKICAgICAgICAgTlNSZWN0IHdpbmRvd0JvdW5kcyA9IFtbc2VsZiB3aW5kb3dd
IGZyYW1lXTsKICAgICAgICAgd2luZG93Qm91bmRzLm9yaWdpbiA9IE5TWmVyb1BvaW50OwpAQCAt
MzEzLDcgKzMxMyw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxTY3JlZW4KIAogICAgIF9maW5hbEZyYW1l
ID0gc2NyZWVuUmVjdE9mQ29udGVudHMoX2VsZW1lbnQuZ2V0KCkpOwogCi0gICAgW3NlbGYgX2Rv
Y3VtZW50XS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQo
KSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CiAg
ICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVlKTsKIAogICAg
IGlmIChfaXNFbnRlcmluZ0Z1bGxTY3JlZW4pCkBAIC0zNTMsNyArMzUzLDcgQEAgLSAodm9pZClm
aW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogICAgIE5TRGlz
YWJsZVNjcmVlblVwZGF0ZXMoKTsKIAogICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1hdGlu
Z0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdERpZEV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50
XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBbX3dlYlZpZXcgX3NjYWxlV2ViVmll
dzpfc2F2ZWRTY2FsZSBhdE9yaWdpbjpOU01ha2VQb2ludCgwLCAwKV07CiAKICAgICBOU1Jlc3Bv
bmRlciAqZmlyc3RSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA0
NjBlNzhlNmUxZjc4NDg2MGZhN2RlZTQ1ZmMxMjA1NWZhNmExYTkxLi44NWY3MjAxM2VkZDc4NDMx
ZDFkMTU4NTFjMDA2ZDkxYTVkY2ExYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIFBsdWdpblZp
ZXc6OnN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQogICAgIC8vIG91cnNlbHZlcy4gT3RoZXJ3
aXNlLCB0aGUgbG9hZGVyIHdpbGwgdHJ5IHRvIGRlbGl2ZXIgZGF0YSBiZWZvcmUgd2UndmUKICAg
ICAvLyBzdGFydGVkIHRoZSBwbHVnLWluLgogICAgIGlmICghbV9sb2FkTWFudWFsbHkgJiYgIW1f
cGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgIG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAg
ICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0
aGlzKTsKICAgICAgICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMjkxLDcgKzI5MSw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3
KCkKICAgICAgICAgaW5zdGFuY2VNYXAoKS5yZW1vdmUobV9pbnN0YW5jZSk7CiAKICAgICBpZiAo
bV9pc1dhaXRpbmdUb1N0YXJ0KQotICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1fcGFyZW50RnJhbWUt
PmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICAgICBz
dG9wKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggNGFhYTA5MjhjODJi
MjU5ZjQxMzVjOTJmZTFmNzEwZjk1YzEyYjljMi4uZDVmY2FhZjdmZGYxYTFmZDg0YTE1YmY1ZmQ2
MjNlN2MxMWJkODY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTc1MDYs
MTMgKzc1MDYsMTMgQEAgdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50U2V0UGFyZW50V2lu
ZG93KEhXTkQgaG9zdFdpbmRvdykKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxF
bnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50KTsKLSAg
ICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQo
Km1fZnVsbFNjcmVlbkVsZW1lbnQpOwogfQogCiB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGll
bnREaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50
KTsKLSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVs
bFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxs
U2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KCptX2Z1bGxTY3JlZW5FbGVtZW50KTsKIH0KIAogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVu
Q2xpZW50V2lsbEV4aXRGdWxsU2NyZWVuKCkKQEAgLTc1MjQsNyArNzUyNCw3IEBAIHZvaWQgV2Vi
Vmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxFeGl0RnVsbFNjcmVlbigpCiB2b2lkIFdlYlZpZXc6
OmZ1bGxTY3JlZW5DbGllbnREaWRFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZnVs
bFNjcmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Vi
a2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkp
OworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KCptX2Z1bGxTY3JlZW5FbGVtZW50KTsKICAgICBtX2Z1bGxTY3JlZW5F
bGVtZW50ID0gbnVsbHB0cjsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319841</attachid>
            <date>2017-09-03 22:58:10 -0700</date>
            <delta_ts>2017-09-04 00:04:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170903225809.patch</filename>
            <type>text/plain</type>
            <size>269164</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM3N2FlNzhmMzgzOWY2
MTY0NWI1MDA4ZGY2YjdiYjdjMGI4ZWYyMi4uODUyOWEwYzI5ZDFiNmIwNjJlNDNlYmI5M2FhYjkx
M2RjOWYzMzVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcj
dXRmOCgpIGFsbG9jYXRlcyBuZXcgQ1N0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhMTRmMTQyZGZiNTJhNmU3
NDAxYzEyNjk0NzdmNDBlNzk4YTNmMzE4Li4yYjYwMjc0NmJkMWViNmExYjM1ZDAyMTBlOWIwY2Y4
ODZlODRmMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIg
dGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBz
dHlsZSBpc3N1ZXMgaW4gdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCBhYzI2YThlNmZhYTgwZjUyYzE1MjEwMjY5N2FiMjQyYzNkNmRlYWIy
Li43MmI1ODUwYjIwNTM2YTg3NzQ1MDdjMDViZTg0NTgwYTVjNDk5MTU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTIgQEAKIDIwMTctMDktMDMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFu
IHBvaW50ZXJzIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwogICAgICAgICBbQ29jb2FdIFRpZHkgYSBmZXcgdGhp
bmdzIGluIGxlZ2FjeSBXZWJIVE1MVmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjgwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCAzODVkOTRkOWI5MjQ5NzI4NTU1
MmI5ZWU3ZTY2NGQ4MTY2MjFjZWI4Li43MjU3MTNkNTQzZWJmNTNmYTAzN2VkZWYwNTgwZWQyYTll
YzFkM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxl
UGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBs
ZVBheVNlc3Npb24uY3BwCkBAIC02OTksNyArNjk5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBw
bGVQYXlTZXNzaW9uOjpiZWdpbigpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAot
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRB
dXRob3JpemF0aW9uUgogICAgIH0KIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBib29s
IEFwcGxlUGF5U2Vzc2lvbjo6aXNGaW5hbFN0YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNz
aW9uOjpkaWRSZWFjaEZpbmFsU3RhdGUoKQogewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7
Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hl
U3RvcmFnZS5jcHAKaW5kZXggNDE1MzUxOGM3MmU4YTQ2ZmQ4MjY3MWY4MTJlOWU3Y2E4MDU2MjEx
YS4uZTNkYWRkMTBkMTExMTY3YzE1NTNkNWI4YWY2NmU4NWIyNGI5NGU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTAxLDcgKzEwMSw3
IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZv
LCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRp
bmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHN0YXJ0U2VxdWVudGlhbE1hdGNoKGNvcHlDYWNo
ZXMobV9jYWNoZXMpLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgcHJv
bWlzZSA9IFdURk1vdmUocHJvbWlzZSldKEV4Y2VwdGlvbk9yPEZldGNoUmVzcG9uc2UqPiYmIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTEzLDcgKzExMyw3IEBA
IHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZvLCBD
YWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxGZXRjaFJlc3BvbnNlPj4o
KnJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lk
IENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0
aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgIGlmIChvcmlnaW4uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+cmV0cmlldmVDYWNoZXMob3JpZ2luLCBt
X3VwZGF0ZUNvdW50ZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShDYWNo
ZUluZm9zT3JFcnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9pc1N0b3Bw
ZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2
b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgIH0pOwogfQogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUMK
ICAgICAgICAgU3RyaW5nIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOwogICAgICAgICBBU1NFUlQo
IW9yaWdpbi5pc051bGwoKSk7CiAKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX2Nvbm5lY3Rpb24t
Pm9wZW4ob3JpZ2luLCBuYW1lLCBbdGhpcywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlz
ZSldKGNvbnN0IENhY2hlSWRlbnRpZmllck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzVmFsdWUoKSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8RE9NQwog
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy5hcHBlbmQoV1RGTW92ZShjYWNoZSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIENhY2hlU3Rv
cmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURlZmVycmVkPElETEJv
b2xlYW4+JiYgcAogICAgICAgICBTdHJpbmcgb3JpZ2luID0gdGhpcy0+b3JpZ2luKCk7CiAgICAg
ICAgIEFTU0VSVCghb3JpZ2luLmlzTnVsbCgpKTsKIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1f
Y29ubmVjdGlvbi0+cmVtb3ZlKG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRlbnRpZmllcigpLCBbdGhp
cywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGNvbnN0IENhY2hlSWRlbnRpZmll
ck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVk
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTIzOCw3ICsy
MzgsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9N
UHJvbWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcAogICAgICAgICAgICAgICAgICAgICBwcm9t
aXNlLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICBtX2NhY2hlcy5yZW1v
dmUocG9zaXRpb24pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9ET01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlLmNwcAppbmRleCA0YmQ3YzUxMDdkMjBjYzdiZWIzNDE3ODFlOTU0ZjI4N2VjMzIzMjdlLi5i
YmE0ZTc2MWVlNjRkNTI5NmNkYzNiZWM0ZDM0NGE0ZTNmOTZiZjU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgRE9N
Q2FjaGU6OnB1dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjxGZXRjaFJlc3BvbnNlPiYmIHJlc3Bv
bnNlLCBET01Qcm9taXNlCiAgICAgfQogCiAgICAgaWYgKHJlc3BvbnNlLT5pc0xvYWRpbmcoKSkg
ewotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHJlc3BvbnNlLT5jb25zdW1lQm9keVdoZW5Mb2FkZWQo
W3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KSwg
cmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKSwgdGhpc10oRXhjZXB0aW9uT3I8UmVmUHRyPFNo
YXJlZEJ1ZmZlcj4+JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QocmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBET01DYWNoZTo6cHV0
KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVBy
b21pc2UKICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwOSw3ICs0
MDksNyBAQCB2b2lkIERPTUNhY2hlOjprZXlzKHN0ZDo6b3B0aW9uYWw8UmVxdWVzdEluZm8+JiYg
aW5mbywgQ2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpbwogCiB2b2lkIERPTUNhY2hlOjpyZXRyaWV2
ZVJlY29yZHMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKT4m
JiBjYWxsYmFjaykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPnJldHJpZXZlUmVjb3Jkcyht
X2lkZW50aWZpZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRz
T3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBE
T01DYWNoZTo6cmV0cmlldmVSZWNvcmRzKFdURjo6RnVuY3Rpb248dm9pZChzdGQ6Om9wdGlvbmFs
PEV4Y2VwdGlvbj4mJik+JiYKICAgICAgICAgICAgICAgICB1cGRhdGVSZWNvcmRzKFdURk1vdmUo
cmVzdWx0LnZhbHVlKCkpKTsKICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtNDU3LDcgKzQ1Nyw3
IEBAIFZlY3RvcjxDYWNoZVN0b3JhZ2VSZWNvcmQ+IERPTUNhY2hlOjpxdWVyeUNhY2hlV2l0aFRh
cmdldFN0b3JhZ2UoY29uc3QgRmV0Y2hSZXF1CiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoRGVsZXRl
T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVRdWVyeU9wdGlvbnMm
JiBvcHRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uT3I8Ym9vbD4mJik+JiYgY2Fs
bGJhY2spCiB7Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uLT5iYXRjaERlbGV0ZU9wZXJhdGlvbiht
X2lkZW50aWZpZXIsIHJlcXVlc3QuaW50ZXJuYWxSZXF1ZXN0KCksIFdURk1vdmUob3B0aW9ucyks
IFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRJZGVudGlmaWVyc09y
RXJyb3ImJiByZXN1bHQpIHsKICAgICAgICAgaWYgKCFtX2lzU3RvcHBlZCkgewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIERPTUNh
Y2hlOjpiYXRjaERlbGV0ZU9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIENh
Y2hlUXVlcnlPcHRpbwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxiYWNr
KCFyZXN1bHQudmFsdWUoKS5pc0VtcHR5KCkpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiAgICAgfSk7CiB9CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIERPTUNhY2hlOjpiYXRjaFB1
dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2UmIHJl
cwogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJl
Y29yZHMsIFdURjo6RnVuY3Rpb248dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFj
aykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPmJhdGNoUHV0T3BlcmF0aW9uKG1faWRlbnRp
ZmllciwgV1RGTW92ZShyZWNvcmRzKSwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKFJlY29yZElkZW50aWZpZXJzT3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1f
aXNTdG9wcGVkKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQpAQCAtNTA2
LDcgKzUwNiw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keU93bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5T3duZXIuY3BwCmluZGV4IDBmYjJkZjNjZjgxZWIzYmE4NTk5MDg2ZDg2YzFjNWZmYjBhN2Fm
NTQuLmIwYjlmNGM3MjFmMTZmNjM3ZDQwMWY3Y2YwNGQ4YWMxMTdkYjQzMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBGZXRjaEJvZHlPd25lcjo6bG9hZEJsb2IoY29uc3QgQmxvYiYgYmxvYiwg
RmV0Y2hCb2R5Q29uc3VtZXIqIGNvbnN1bWVyKQogICAgICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hC
b2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEZl
dGNoQm9keU93bmVyOjpmaW5pc2hCbG9iTG9hZGluZygpCiAgICAgQVNTRVJUKG1fYmxvYkxvYWRl
cik7CiAKICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2
b2lkIEZldGNoQm9keU93bmVyOjpibG9iTG9hZGluZ1N1Y2NlZWRlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKaW5kZXggMmFhN2NiYTBl
YzM4YmUyNTFhMmEwMmFkM2I3OTIwMGZhMmNkM2IxNC4uZWZiNTBjMDMyNWYxMWVhN2VhZWQ0NjY1
MWQ4YjZjZThlOTdkZTEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHlTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5U291cmNlLmNwcApAQCAtNDUsMTIgKzQ1LDEyIEBAIGJvb2wgRmV0Y2hCb2R5U291
cmNlOjppc1JlYWRhYmxlU3RyZWFtTG9ja2VkKCkgY29uc3QKIAogdm9pZCBGZXRjaEJvZHlTb3Vy
Y2U6OnNldEFjdGl2ZSgpCiB7Ci0gICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KCZt
X2JvZHlPd25lcik7CisgICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93
bmVyKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlTb3VyY2U6OnNldEluYWN0aXZlKCkKIHsKLSAgICBt
X2JvZHlPd25lci51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9ib2R5T3duZXIpOworICAgIG1fYm9k
eU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93bmVyKTsKIH0KIAogdm9pZCBGZXRj
aEJvZHlTb3VyY2U6OmRvU3RhcnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKaW5kZXggY2NlN2E4NzAxYzRmMTZjMDhjOTM1YWYzMDYzMDZiOTIw
NDc5ZTFkYy4uYWRlZDZjODMyZDdhOWI4ZTlkNGIzZDYyMzVmMmFjZGFiMzQxZDQwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCkBAIC0xNzAs
MTIgKzE3MCwxMiBAQCBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjpCb2R5TG9hZGVyKEZldGNo
UmVzcG9uc2UmIHJlc3BvbnNlLCBOb3RpZmljYXRpb25DYWxsYgogICAgIDogbV9yZXNwb25zZShy
ZXNwb25zZSkKICAgICAsIG1fcmVzcG9uc2VDYWxsYmFjayhXVEZNb3ZlKHJlc3BvbnNlQ2FsbGJh
Y2spKQogewotICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX3Jlc3BvbnNlKTsK
KyAgICBtX3Jlc3BvbnNlLnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogRmV0
Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6fkJvZHlMb2FkZXIoKQogewotICAgIG1fcmVzcG9uc2Uu
dW5zZXRQZW5kaW5nQWN0aXZpdHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2UudW5zZXRQ
ZW5kaW5nQWN0aXZpdHkobV9yZXNwb25zZSk7CiB9CiAKIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9k
eUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291
cmNlUmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2UuY3BwCmluZGV4IGMyY2VmYzY5YjA4YWU4MGNhNGI1NzNjOWY5ZjNlMTVkZDI5
NTEzMzYuLmIyZGZjZDg0NTUwNDdjYTdlMjJhYmVlMzY2MjZkY2Y1MThlYTUzZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBA
IC0xMzEsMTIgKzEzMSwxMiBAQCB2b2lkIE1lZGlhU291cmNlOjpzZXRQcml2YXRlQW5kT3BlbihS
ZWY8TWVkaWFTb3VyY2VQcml2YXRlPiYmIG1lZGlhU291cmNlUHJpdmF0ZQogCiB2b2lkIE1lZGlh
U291cmNlOjphZGRlZFRvUmVnaXN0cnkoKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE1lZGlhU291cmNl
OjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkKIHsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIE1lZGlhVGltZSBNZWRp
YVNvdXJjZTo6ZHVyYXRpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA3NDNlY2RiNTk1MGU3MzlhMDc1ZGVh
MjUzOGQ3MjU0MWZiMGUxMDhiLi5jODY0YTA0NzFkMjY4YzZlZGUzZDc3ZjdkMmNlNWQ2NTM5MTU2
NzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0o
KQogICAgICAgICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChtX2lzV2FpdGlu
Z1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4Niw3ICsyODYsNyBAQCB2
b2lkIE1lZGlhU3RyZWFtOjpzdGFydFByb2R1Y2luZ0RhdGEoKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAg
ICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IDE2ODg0ZTM4MjY2ODRjZTc3ODdkNTg2YTg0Zjg4
ZmRjNzkxYzI3ODkuLjhiMjQ1MjQ5YjkzNjZmMzg1YTM4NTk5ODA5MzFiMDcwMGUwMjYwNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLmNwcApAQCAtNjEsNyArNjEsNyBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0
cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxNZWRpYVN0cgog
ICAgIG1fcHJpdmF0ZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNl
cih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogfQog
CiBNZWRpYVN0cmVhbVRyYWNrOjp+TWVkaWFTdHJlYW1UcmFjaygpCkBAIC02OSw3ICs2OSw3IEBA
IE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKICAgICBtX3ByaXZhdGUtPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKIAogICAgIGlmIChhdXRvIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50LT5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5k
ZXggY2MwZTliNTRkMTA1MDg4YmZiNDYxMzkyYjEwZjM5NjZkN2QzMjY5ZC4uNzQ5NTA5ZDJiMjIy
YTAzMWNiYzY2YjE5MTIwYmRjZmRjZjMxNmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTU4LDcgKzU4LDcg
QEAgUmVmPFJUQ0RhdGFDaGFubmVsPiBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0ZDoKICAgICBhdXRvIGNoYW5uZWwgPSBhZG9wdFJlZigq
bmV3IFJUQ0RhdGFDaGFubmVsKGNvbnRleHQsIFdURk1vdmUoaGFuZGxlciksIFdURk1vdmUobGFi
ZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKSk7CiAgICAgY2hhbm5lbC0+c3VzcGVuZElmTmVlZGVkKCk7
CiAgICAgY2hhbm5lbC0+bV9oYW5kbGVyLT5zZXRDbGllbnQoY2hhbm5lbC5nZXQoKSk7Ci0gICAg
Y2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwucHRyKCkpOworICAgIGNoYW5uZWwt
PnNldFBlbmRpbmdBY3Rpdml0eShjaGFubmVsLmdldCgpKTsKICAgICByZXR1cm4gY2hhbm5lbDsK
IH0KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmNsb3NlKCkKIAog
ICAgIG1faGFuZGxlci0+Y2xvc2UoKTsKICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKIH0KIAogdm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZShSVENEYXRh
Q2hhbm5lbFN0YXRlIG5ld1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCA5MGIyMWVhNjIzYzE0
N2U0NTkxMmI1OTgxNWJkY2ExZDdkZDcwZDg5Li42ZTJmYTg3MzYzNzZkNTgxYzQwOWYyODM5ZjYy
ODM4MTAyNDBjYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNjIsMTIgKzYyLDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBQZWVyQ29ubmVjdGlvbjsKIAogUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBSVENQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7
Ci0gICAgUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpu
ZXcgUlRDUGVlckNvbm5lY3Rpb24oY29udGV4dCkpOworICAgIGF1dG8gcGVlckNvbm5lY3Rpb24g
PSBhZG9wdFJlZigqbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbnRleHQpKTsKICAgICBwZWVyQ29u
bmVjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgLy8gUlRDUGVlckNvbm5lY3Rpb24gbWF5
IHNlbmQgZXZlbnRzIGF0IGFib3V0IGFueSB0aW1lIGR1cmluZyBpdHMgbGlmZXRpbWUuCiAgICAg
Ly8gTGV0J3MgbWFrZSBpdCB1bmNvbGxlY3RhYmxlIHVudGlsIHRoZSBwYyBpcyBjbG9zZWQgYnkg
SlMgb3IgdGhlIHBhZ2Ugc3RvcHMgaXQuCiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+aXNDbG9z
ZWQoKSkgewotICAgICAgICBwZWVyQ29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJD
b25uZWN0aW9uLnB0cigpKTsKKyAgICAgICAgcGVlckNvbm5lY3Rpb24tPnNldFBlbmRpbmdBY3Rp
dml0eShwZWVyQ29ubmVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgLy8gSUNFIGNhbmRpZGF0ZSBm
aWx0ZXJpbmcgY2FuIG9ubHkgYmUgZGlzYWJsZWQgZm9yIGNvbm5lY3Rpb25zIGZyb20gZG9jdW1l
bnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIHRvcCBkb2N1bWVudCwKICAgICAg
ICAgLy8gb3IgaWYgdGhlIHBhZ2Ugd2FzIHNldCB0byBkaXNhYmxlIGl0LgpAQCAtNDMzLDcgKzQz
Myw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmRvU3RvcCgpCiAKICAgICBtX2JhY2tlbmQt
PnN0b3AoKTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cmVnaXN0
ZXJUb0NvbnRyb2xsZXIoUlRDQ29udHJvbGxlciYgY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXgg
ZjQzOTQzMThlYjFmZDdjZjA4N2Q5YjNjYjA4YzcxYjlmOWJkNzkxMS4uNzJhZDNhYmNjMDY2NjU0
MzI0NmNhODVhMzUzZTQwMjY1NjA1OTFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAg
dm9pZCBOb3RpZmljYXRpb246OnNob3coKQogICAgIH0KICAgICBpZiAoY2xpZW50LnNob3codGhp
cykpIHsKICAgICAgICAgbV9zdGF0ZSA9IFNob3dpbmc7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiB9
CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6ZmluYWxpemUoKQogICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUgPSBD
bG9zZWQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZl
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jh
c2ljSW5zcGVjdG9yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcAppbmRleCAyN2U1NmM0YzZiOTQ3YWViODI0NTllZDEz
ZjMzYjU4MWEzZDNhMGE0Li4wNTViZmY1ZjFlYmFhMWIyYmU1YTdjNDQwZWUwOWYzYjE3OGI5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtOTksNyArOTksNyBAQCB2b2lkIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKICAgICAgICAgLy8gV2hlbiBhbiBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUs
IGl0IHdpbGwgZ2V0IHB1bGxlZCBieSB0aGUKICAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0
aHVzIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KICAg
ICAgICAgaWYgKG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKLSAgICAgICAgICAgIGNvbnRleHQoKS5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5yZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQ
dWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA3LDExICsxMDcsMTEg
QEAgdm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCiAgICAg
ICAgIGlmIChudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgIW1fbmVlZEF1dG9tYXRpY1B1bGwp
IHsKICAgICAgICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgbm90
IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0cmVhbSBub2RlIHdoaWxlIHN0aWxsIGNvbm5lY3RlZCBm
cm9tCiAgICAgICAgICAgICAvLyB1cHN0cmVhbSBub2RlKHMpLCBhZGQgaXQgdG8gdGhlIGNvbnRl
eHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgotICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9t
YXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9tYXRpY1B1
bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAgIG1fbmVlZEF1dG9tYXRpY1B1bGwgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKCFudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgbV9uZWVkQXV0
b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gVGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
IGlzIGNvbm5lY3RlZCB0byBub3RoaW5nLCByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGF1
dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGlj
UHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVs
bE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCmluZGV4IGQ5NTA0N2M5MDMwNTFjMGJjM2Q1ZTYzOGIyN2I0NTg1NDI0
YjA1MzIuLjAxMmFlOGZmNjQ0MzhkYzYzYzdiNGI3MzBkOWJhMjdjMjM0NjA5YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKIHsKICAg
ICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBw
YWdlIG5hdmlnYXRlLgogICAgIC8vIExldHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0
aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgotICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CkBAIC0yMTgs
OCArMjE4LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGlu
ZUNvbnRleHQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcih0
aGlzKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZEF1ZGlv
UHJvZHVjZXIoKnRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICAgICAgLy8gVGhp
cyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRl
SW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1
ZGlvLgogICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwg
YSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhp
cyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9p
ZCBBdWRpb0NvbnRleHQ6OmNsZWFyKCkKICAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6
ZSgpKTsKIAogICAgIC8vIEl0IHdhcyBzZXQgaW4gY29uc3RydWN0Q29tbW9uLgotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCkBAIC0yNjMsOCArMjYzLDgg
QEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNr
cygqdGhpcyk7CiAKICAgICAgICAgQVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwogICAg
ICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CkBAIC04MjQsMTQgKzgyNCwxNCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6aGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogICAgIG1fZGVmZXJy
ZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtG
b3JEZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRl
bGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwog
CiAgICAgaWYgKGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKQotICAgICAgICBtX25vZGVzVG9EZWxl
dGUuYXBwZW5kKG5vZGUpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQobm9kZSk7
CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOwogCiAgICAg
Ly8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5v
ZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAogICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0aW9u
cyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRsZVBv
c3RSZW5kZXJUYXNrcygpCkBAIC05MjgsMTkgKzkyOCwxOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6
aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0
cy5jbGVhcigpOwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUo
QXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgIGlmICht
X2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fYXV0
b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIAotdm9pZCBBdWRpb0NvbnRl
eHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9D
b250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAg
QVNTRVJUKGlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5y
ZW1vdmUobm9kZSkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgmbm9kZSkp
CiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIApA
QCAtOTk3LDcgKzk5Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygp
CiAgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAg
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBh
Z2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVx
dWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKQEAgLTEwMTcsNyArMTAx
Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygpCiAgICAgaWYgKHBh
Z2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0
TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25z
ZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDU3NzMxN2QyZTgyZGVkOWZhMDc4NTlkYjBl
MDYwYTFhYTg5NWYzYWUuLjYzNDk3ZGFiZTExMzJiN2VjM2ZiMTIzYzFhNjMwNzQ3Y2FlN2M2MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApA
QCAtMTUzLDEzICsxNTMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWZGaW5pc2hlZFNvdXJj
ZU5vZGVzKCk7CiAKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2VkIG5v
ZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lk
IG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKKyAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihB
dWRpb05vZGUmKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7CiAKICAgICAvLyBBdWRp
b0NvbnRleHQgY2FuIHB1bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50
dW0gZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9k
ZXMuCiAgICAgLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hv
IHdhbnQgdG8gYWRkL3JlbW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1
bGwgbGlzdHMuCi0gICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKLSAg
ICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgYWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJik7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQ
dWxsTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxl
UG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVk
IGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgogICAgIHZvaWQg
cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAppbmRleCBmMjAwYjA1
MGU3MjYxMjdjYzFkNmY2YjVhNjM1ZjY3YWYyYjRlNzc2Li4xYWM3N2FhMzdjMjY1MzdiM2UyZmYy
MjM2MWFhNzI1MmQ1MDM1NWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGUuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBBdWRpb05vZGU6OmZpbmlz
aERlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNj
b25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0
by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNo
IHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAg
ICAgIGNvbnRleHQoKS5tYXJrRm9yRGVsZXRpb24odGhpcyk7CisgICAgICAgICAgICAgICAgY29u
dGV4dCgpLm1hcmtGb3JEZWxldGlvbigqdGhpcyk7CiAgICAgICAgICAgICAgICAgbV9pc01hcmtl
ZEZvckRlbGV0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChy
ZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA3MjNhMGI2YzhlMWU4ZmM4MmRkZGQ2MGRj
NjgyYzA0ZDg0MWIwOWU5Li4zYjU3MGZkMjlkNzYwZWUzOWU3ZjQ0NWFiODFiN2JkM2I0NmQwYTQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cApAQCAtMjgzLDggKzI4Myw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVj
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKICAgICAgICAg
UmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1
cmVDb250ZW50KGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsKSkgewotICAgICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRp
bmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3RvcCgpLgotICAgICAgICAgICAgQWN0aXZlRE9N
T2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICAvLyBCYWxhbmNl
ZCBieSB0aGUgY2FsbCB0byB1bnNldFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3Rv
cCgpLgorICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgICAgICAg
ICAgLy8gV2UgbXVzdCBibG9jayB0aGlzIGNvbm5lY3Rpb24uIEluc3RlYWQgb2YgdGhyb3dpbmcg
YW4gZXhjZXB0aW9uLCB3ZSBpbmRpY2F0ZSB0aGlzCiAgICAgICAgICAgICAvLyB1c2luZyB0aGUg
ZXJyb3IgZXZlbnQuIEJ1dCBzaW5jZSB0aGlzIGNvZGUgZXhlY3V0ZXMgYXMgcGFydCBvZiB0aGUg
V2ViU29ja2V0J3MKQEAgLTMxNSw3ICszMTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2Nr
ZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcgog
ICAgICAgICBwcm90b2NvbFN0cmluZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3VicHJvdG9j
b2xTZXBhcmF0b3IoKSk7CiAKICAgICBtX2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHByb3RvY29s
U3RyaW5nKTsKLSAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAg
LTU0NCw3ICs1NDQsNyBAQCB2b2lkIFdlYlNvY2tldDo6c3RvcCgpCiAgICAgbV9wZW5kaW5nRXZl
bnRzLmNsZWFyKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiAgICAgaWYgKHBlbmRp
bmcpCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogY29uc3QgY2hhciog
V2ViU29ja2V0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTYyOCw3ICs2MjgsNyBA
QCB2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVyZWRBbW91
bnQsIENsb3NpbmdIYW5kc2hha2VDb21wbAogICAgICAgICBtX2NoYW5uZWwgPSBudWxscHRyOwog
ICAgIH0KICAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2ZURPTU9i
amVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJTb2NrZXQ6OmRpZFVwZ3JhZGVVUkwoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYjRl
OGQ5MmIyZDFhMTJjZDEyMDE2ZmJiMDIzMmY4NGUxMDI0NTUxOS4uM2Y4MGFkNWI4M2E0MWM1ZWQ2
NDdhMjYwNzVlYmJkZWE5ODZmYjI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC0zNjYsNyArMzY2LDcgQEAgSlNDOjpKU0ludGVybmFs
UHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9i
YWxPYmplY3QKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBl
eGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRG
ZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5yZXNvbHZl
KGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBpbXBvcnRlck1v
ZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CkBAIC0zNzUsNyArMzc1LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0
KgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9N
V2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9j
dW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1
bGVMb2FkZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+bW9kdWxlTG9hZGVyKCkuZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2Fk
ZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhl
YywganNVbmRlZmluZWQoKSk7CiB9CkBAIC0zODQsNyArMzg0LDcgQEAgSlNDOjpKU1ZhbHVlIEpT
RE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmV2YWx1YXRlKGdsb2JhbE9iamVjdCwg
ZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIG1vZHVsZVJlY29yZCwgc2NyaXB0RmV0Y2hl
cik7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCkuZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBz
Y3JpcHRGZXRjaGVyKTsKICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0z
OTIsNyArMzkyLDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjpt
b2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE8KIHsKICAgICBKU0RPTVdpbmRv
d0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxP
YmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9h
ZGVyKCktPmltcG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9k
dWxlTmFtZSwgc291cmNlT3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVM
b2FkZXIoKS5pbXBvcnRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1v
ZHVsZU5hbWUsIHNvdXJjZU9yaWdpbik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggZTI3
MDUzZmE1ZGZmYTJjZmM5ZjFkOTM0Y2YzYzc1MjA2NWVkNTRiZS4uZjk1YTA2ZGJmZGU5M2IyOGUw
YTU0ZDE1YjgyYzJjZTVjYWM2MzY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
aApAQCAtNzAsMTggKzcwLDE4IEBAIHB1YmxpYzoKICAgICAvLyBJdCBjYW4sIGhvd2V2ZXIsIGhh
dmUgYSBzaWRlIGVmZmVjdCBvZiBkZWxldGluZyBhbiBBY3RpdmVET01PYmplY3QuCiAgICAgdmly
dHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgc2V0UGVuZGlu
Z0FjdGl2aXR5KFQqIHRoaXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVjdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0
aGlzT2JqZWN0ID09IHRoaXMpOwotICAgICAgICB0aGlzT2JqZWN0LT5yZWYoKTsKKyAgICAgICAg
QVNTRVJUKCZ0aGlzT2JqZWN0ID09IHRoaXMpOworICAgICAgICB0aGlzT2JqZWN0LnJlZigpOwog
ICAgICAgICArK21fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0eShUKiB0aGlzT2JqZWN0KQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdW5zZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVj
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdBY3Rpdml0eUNvdW50ID4gMCk7CiAg
ICAgICAgIC0tbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKLSAgICAgICAgdGhpc09iamVjdC0+ZGVy
ZWYoKTsKKyAgICAgICAgdGhpc09iamVjdC5kZXJlZigpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggYWU1NmQ2OWQw
ZWQ0YzJlNjhiZTlkOTVmMDFiNGM3MDRjNWYxNTFjMy4uMjI4OGUzMWJhZDkwZDJmMjRiY2MwMjFj
Zjk0ZmIxYjU0ZDYxZjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCiAgICAgaWYgKG1fZGF0
YSA9PSBub25OdWxsRGF0YSAmJiBjYW5Vc2VTZXREYXRhT3B0aW1pemF0aW9uKCp0aGlzKSkgewot
ICAgICAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAg
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiAgICAgICAg
IGlmIChkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgsIG9sZExlbmd0
aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVyRGF0YT4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5vbk51bGxEYXRhLCAw
LCBvbGRMZW5ndGgsIG5vbk51bGxEYXRhLmxlbmd0aCgpKTsKLSAgICBkb2N1bWVudCgpLnRleHRS
ZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgq
dGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBDaGFyYWN0ZXJE
YXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCkBAIC0x
MjgsNyArMTI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0
YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIAogICAgIHNldERhdGFBbmRV
cGRhdGUobmV3U3RyLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCi0gICAgZG9jdW1lbnQo
KS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBkb2N1bWVu
dCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFj
dGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAg
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCi0gICAgZG9j
dW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKKyAgICBkb2N1bWVudCgp
LnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKIAogICAgIHJldHVybiB7IH07CiB9
CkBAIC0xNjQsOCArMTY0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVw
bGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KICAgICBzZXREYXRh
QW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAv
LyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNr
aW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAg
ICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwor
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOworICAgIGRv
Y3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRhZDVhNjkyYWY0
MjZhYjVlNjU0MzE4MzQ1NDg2M2EyMWQwMjU5NTcuLjAwMmM2MzgzYTA5MWI2NDg3ODQ5MTdkNTgz
ZWNiNGU1YTcwOGE5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjgxLDIyICs2ODEs
MjAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJp
bmcmIGtleSkKICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIGJ1aWxkQWNjZXNzS2V5
TWFwKHRoaXMpOworICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgqdGhpcyk7CiAgICAgICAgIG1f
YWNjZXNzS2V5TWFwVmFsaWQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9lbGVtZW50c0J5
QWNjZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nl
c3NLZXlNYXAoVHJlZVNjb3BlKiBzY29wZSkKK3ZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5
TWFwKFRyZWVTY29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS0+cm9vdE5vZGUo
KSkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CisgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oc2NvcGUucm9vdE5vZGUo
KSkpIHsKKyAgICAgICAgYXV0byYgYWNjZXNzS2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGFjY2Vzc2tleUF0dHIpOwogICAgICAgICBpZiAoIWFjY2Vzc0tleS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vzc0tl
eS5pbXBsKCksICZlbGVtZW50KTsKLQotICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVs
ZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAocm9vdCk7
CisgICAgICAgIGlmIChhdXRvKiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAgICAg
ICAgICBidWlsZEFjY2Vzc0tleU1hcCgqcm9vdCk7CiAgICAgfQogfQogCkBAIC0xNTgxLDE0ICsx
NTc5LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OnRpdGxlRWxlbWVudFRleHRDaGFuZ2VkKEVsZW1lbnQm
IHRpdGxlRWxlbWVudCkKICAgICB1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tz
KFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVy
Rm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50
JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKGNs
aWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKCZjbGllbnQp
OwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50KiBjbGllbnQpCit2b2lkIERvY3VtZW50
Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5
Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0Ns
aWVudHMucmVtb3ZlKGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVu
dHMucmVtb3ZlKCZjbGllbnQpOwogfQogCiB2b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCkKQEAgLTM2MDEsMTUgKzM1OTksMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmll
d3BvcnRVbml0c09uUmVzaXplKCkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlv
UHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6OmFk
ZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYgYXVkaW9Qcm9kdWNlcikKIHsKLSAgICBtX2F1
ZGlvUHJvZHVjZXJzLmFkZChhdWRpb1Byb2R1Y2VyKTsKKyAgICBtX2F1ZGlvUHJvZHVjZXJzLmFk
ZCgmYXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1
Y2VyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBh
dWRpb1Byb2R1Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVj
ZXIpOworICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1
cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQogCkBAIC0zNzAxLDI0ICszNjk5LDI0IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wgYW1v
bmdDaGlsZHJlbk9ubHkpCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6aG92ZXJlZEVsZW1l
bnREaWREZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIW1faG92ZXJlZEVsZW1l
bnQgfHwgZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQorICAgIGlmICghbV9ob3ZlcmVkRWxl
bWVudCB8fCAmZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2hvdmVyZWRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIG1f
aG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobV9o
b3ZlcmVkRWxlbWVudCAmJiAhbV9ob3ZlcmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9ob3ZlcmVkRWxlbWVudCA9IG1faG92ZXJlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAg
ICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1bGVI
b3ZlclN0YXRlVXBkYXRlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNo
YWluRGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjplbGVtZW50SW5B
Y3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8IGVsZW1lbnQgIT0gbV9hY3RpdmVFbGVtZW50KQorICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1fYWN0aXZlRWxlbWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAg
IG1fYWN0aXZlRWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxlICht
X2FjdGl2ZUVsZW1lbnQgJiYgIW1fYWN0aXZlRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbV9hY3RpdmVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiB9CkBA
IC0zOTk2LDI2ICszOTk0LDI2IEBAIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25XaWxsQ2xlYXJJ
ZE5hbWVNYXAoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCiAgICAgbV9ub2RlTGlz
dEFuZENvbGxlY3Rpb25Db3VudHNbSW52YWxpZGF0ZU9uSWROYW1lQXR0ckNoYW5nZV0tLTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2
b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikK
IHsKLSAgICBtX25vZGVJdGVyYXRvcnMuYWRkKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMuYWRk
KCZpdGVyYXRvcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2Rl
SXRlcmF0b3IqIG5pKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciYgaXRlcmF0b3IpCiB7CiAgICAgLy8gVGhlIG5vZGUgaXRlcmF0b3IgY2FuIGJlIGRldGFj
aGVkIHdpdGhvdXQgaGF2aW5nIGJlZW4gYXR0YWNoZWQgaWYgaXRzIHJvb3Qgbm9kZSBkaWRuJ3Qg
aGF2ZSBhIGRvY3VtZW50CiAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3Igd2FzIGNyZWF0ZWQsIGJ1
dCBoYXMgaXQgbm93LgotICAgIG1fbm9kZUl0ZXJhdG9ycy5yZW1vdmUobmkpOworICAgIG1fbm9k
ZUl0ZXJhdG9ycy5yZW1vdmUoJml0ZXJhdG9yKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bW92ZU5v
ZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKIHsKICAgICBWZWN0b3I8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKICAgICBjb3B5
VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzLCBub2RlSXRlcmF0b3JzKTsKLSAgICBmb3IgKGF1dG8q
IGl0IDogbm9kZUl0ZXJhdG9ycykgewotICAgICAgICBpZiAoJml0LT5yb290KCkgPT0gJm5vZGUp
IHsKLSAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcihpdCk7Ci0gICAgICAgICAgICBuZXdE
b2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgIGZvciAoYXV0byogaXRlcmF0b3Ig
OiBub2RlSXRlcmF0b3JzKSB7CisgICAgICAgIGlmICgmaXRlcmF0b3ItPnJvb3QoKSA9PSAmbm9k
ZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdGVyYXRvcik7CisgICAgICAg
ICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoKml0ZXJhdG9yKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTQwNTUsNyArNDA1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGls
ZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogCiAgICAgaWYgKG1f
bWFya2Vycy0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBU
ZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZChjb250YWluZXIpOyB0ZXh0Tm9kZTsgdGV4dE5v
ZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKLSAgICAgICAg
ICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0Tm9kZSk7CisgICAgICAgICAgICBtX21h
cmtlcnMtPnJlbW92ZU1hcmtlcnMoKnRleHROb2RlKTsKICAgICB9CiB9CiAKQEAgLTQwODMsNyAr
NDA4MSw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKQotICAgICAgICBtX21hcmtlcnMtPnJlbW92
ZU1hcmtlcnMoJm5vZGUpOworICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMobm9kZSk7
CiB9CiAKIHN0YXRpYyBOb2RlKiBmYWxsYmFja0ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZUFm
dGVyUmVtb3ZhbChOb2RlJiBub2RlKQpAQCAtNDEwMiw3ICs0MTAwLDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVtb3ZlRm9jdXNOYXZpZ2F0aW9uTm9kZU9mU3VidHJlZShOb2RlJiBub2RlLCBib29sIGFt
b25nQ2hpbGRyZW4KICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2Rl
KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6
OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGF1dG8q
IHJhbmdlIDogbV9yYW5nZXMpCkBAIC00MTEzLDcgKzQxMTEsNyBAQCB2b2lkIERvY3VtZW50Ojp0
ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQog
Ci12b2lkIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQx
MjUsMTAgKzQxMjMsMTAgQEAgdm9pZCBEb2N1bWVudDo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1h
cmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3Zv
aWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZVdpdGhJ
bmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOworICAgICAgICBOb2RlV2l0aEluZGV4IG9s
ZE5vZGVXaXRoSW5kZXgoJm9sZE5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9y
YW5nZXMpCiAgICAgICAgICAgICByYW5nZS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRoSW5k
ZXgsIG9mZnNldCk7CiAgICAgfQpAQCAtNDEzNiw3ICs0MTM0LDcgQEAgdm9pZCBEb2N1bWVudDo6
dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFy
IGNoZWNraW5nLgogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5v
ZGUpCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7CiAgICAg
Zm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQogICAgICAgICByYW5nZS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKQEAgLTQxNTUsMTUgKzQxNTMsMTUgQEAgdm9pZCBEb2N1bWVudDo6Y3JlYXRl
RE9NV2luZG93KCkKICAgICBBU1NFUlQobV9kb21XaW5kb3ctPmZyYW1lKCkgPT0gbV9mcmFtZSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1bWVu
dCkKK3ZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0gICAg
QVNTRVJUKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1fZG9t
V2luZG93KTsKICAgICAvLyBBIHZhbGlkIERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVkRnJh
bWUgZm9yIGl0cyBkb2N1bWVudHMuCiAgICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0gTm90
SW5QYWdlQ2FjaGUpOwogCi0gICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5tX2Rv
bVdpbmRvdyk7CisgICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2luZG93
KTsKICAgICBtX2RvbVdpbmRvdy0+ZGlkU2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAogICAg
IEFTU0VSVChtX2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKQEAgLTQ4MTMsMTQgKzQ4
MTEsMTQgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9y
U3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi12b2lk
IERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50
KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
RWxlbWVudHMuYWRkKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBt
X2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKQEAgLTQ4MjksMTQgKzQ4
MjcsMTQgQEAgdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgICAgICBl
bGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdp
c3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
bV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1fbWVkaWFWb2x1bWVD
YWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVn
aXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6
dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fbWVkaWFW
b2x1bWVDYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKIGJvb2wgRG9jdW1l
bnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3QKQEAgLTQ4NzgsMjkg
KzQ4NzYsMjkgQEAgdm9pZCBEb2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2Uo
KQogICAgICAgICBlbGVtZW50LT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJv
d3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3By
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZChlKTsKKyAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX3ByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpLnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpOwogCi0g
ICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKGUpOworICAgIG1fY2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fY2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX2NhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50
OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKQEAgLTQ5MTMsMTQgKzQ5MTEsMTQgQEAgdm9p
ZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiAKICNpZiBFTkFCTEUoTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1M
TWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVs
ZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQordm9p
ZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
SFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5n
ZWRFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
RWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpCkBAIC01MDE1LDEwICs1MDEzLDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OnBvcEN1cnJlbnRTY3JpcHQoKQogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLXZvaWQgRG9j
dW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCit2b2lk
IERvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIGluc3Ry
dWN0aW9uKQogewotICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJv
Y2Vzc29yOjpjcmVhdGUoKTsKLSAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoZG93bmNh
c3Q8WFNMU3R5bGVTaGVldD4ocGktPnNoZWV0KCkpKTsKKyAgICBhdXRvIHByb2Nlc3NvciA9IFhT
TFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIHByb2Nlc3Nvci0+c2V0WFNMU3R5bGVTaGVldChk
b3duY2FzdDxYU0xTdHlsZVNoZWV0PihpbnN0cnVjdGlvbi5zaGVldCgpKSk7CiAgICAgU3RyaW5n
IHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CiAgICAgU3RyaW5nIHJlc3Vs
dEVuY29kaW5nOwpAQCAtNTQ5MCwxNyArNTQ4OCwxNyBAQCB2b2lkIERvY3VtZW50OjpzdGF0ZVBv
cHBlZChSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0KQogICAgICAgICBt
X3BlbmRpbmdTdGF0ZU9iamVjdCA9IFdURk1vdmUoc3RhdGVPYmplY3QpOwogfQogCi12b2lkIERv
Y3VtZW50OjphdHRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit2b2lkIERvY3VtZW50OjphdHRhY2hS
YW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlucyhyYW5n
ZSkpOwotICAgIG1fcmFuZ2VzLmFkZChyYW5nZSk7CisgICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250
YWlucygmcmFuZ2UpKTsKKyAgICBtX3Jhbmdlcy5hZGQoJnJhbmdlKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFu
Z2UoUmFuZ2UmIHJhbmdlKQogewotICAgIC8vIFdlIGRvbid0IEFTU0VSVCBtX3Jhbmdlcy5jb250
YWlucyhyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCisgICAgLy8gV2UgZG9uJ3QgQVNT
RVJUIG1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCiAg
ICAgLy8gdW5jb25kaXRpb25hbGx5IHRvIGZpeDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2MDQ0Ci0gICAgbV9yYW5nZXMucmVtb3ZlKHJhbmdlKTsKKyAgICBtX3Jh
bmdlcy5yZW1vdmUoJnJhbmdlKTsKIH0KIAogc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtNTY0MCw3ICs1NjM4LDcg
QEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6
UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24KIAogICAgIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhyZWFz
b24pOwotICAgIHNjcmlwdFJ1bm5lcigpLT5zdXNwZW5kKCk7CisgICAgc2NyaXB0UnVubmVyKCku
c3VzcGVuZCgpOwogICAgIG1fcGVuZGluZ1Rhc2tzVGltZXIuc3RvcCgpOwogCiAgICAgLy8gRGVm
ZXJyaW5nIGxvYWRpbmcgYW5kIHN1c3BlbmRpbmcgcGFyc2VyIGlzIG5lY2Vzc2FyeSB3aGVuIHdl
IG5lZWQgdG8gcHJldmVudCByZS1lbnRyYW50IEphdmFTY3JpcHQgZXhlY3V0aW9uCkBAIC01NjY0
LDcgKzU2NjIsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVE
T01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogICAgICAgICBtX3BhcnNlci0+
cmVzdW1lU2NoZWR1bGVkVGFza3MoKTsKICAgICBpZiAoIW1fcGVuZGluZ1Rhc2tzLmlzRW1wdHko
KSkKICAgICAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICBz
Y3JpcHRSdW5uZXIoKS0+cmVzdW1lKCk7CisgICAgc2NyaXB0UnVubmVyKCkucmVzdW1lKCk7CiAg
ICAgcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhyZWFzb24pOwogICAgIHJlc3VtZVNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIApAQCAtNTcxNywxNiArNTcxNSwxNiBA
QCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFBvcHN0YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVjdAogICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3Rh
dGVFdmVudDo6Y3JlYXRlKFdURk1vdmUoc3RhdGVPYmplY3QpLCBtX2RvbVdpbmRvdyA/IG1fZG9t
V2luZG93LT5oaXN0b3J5KCkgOiBudWxscHRyKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9p
ZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKCFtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29u
dGFpbnMobGlzdGVuZXIpKTsKLSAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKGxpc3Rl
bmVyKTsKKyAgICBBU1NFUlQoIW1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlz
dGVuZXIpKTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKCZsaXN0ZW5lcik7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0
YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFy
dExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJU
KG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVk
aWFDYW5TdGFydExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgIEFTU0VSVChtX21lZGlh
Q2FuU3RhcnRMaXN0ZW5lcnMuY29udGFpbnMoJmxpc3RlbmVyKSk7CisgICAgbV9tZWRpYUNhblN0
YXJ0TGlzdGVuZXJzLnJlbW92ZSgmbGlzdGVuZXIpOwogfQogCiBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIqIERvY3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKQEAgLTU3NTAsMTAg
KzU3NDgsOSBAQCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQogCi1ib29sIERvY3VtZW50OjpmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAorYm9vbCBEb2N1bWVudDo6ZnVsbFNjcmVlbklzQWxsb3dlZChFbGVt
ZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICByZXR1cm4g
aXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRhbGxvd2Z1
bGxzY3JlZW5BdHRyLCBlbGVtZW50LT5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKTsKKyAgICBy
ZXR1cm4gaXNBdHRyaWJ1dGVPbkFsbE93bmVycyhhbGxvd2Z1bGxzY3JlZW5BdHRyLCB3ZWJraXRh
bGxvd2Z1bGxzY3JlZW5BdHRyLCBlbGVtZW50LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpOwog
fQogCiB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZSBjaGVja1R5cGUpCkBAIC01NzcyLDcgKzU3Njks
NyBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogCiAgICAgICAgIC8vIFRoZSBjb250ZXh0IG9i
amVjdCdzIG5vZGUgZG9jdW1lbnQsIG9yIGFuIGFuY2VzdG9yIGJyb3dzaW5nIGNvbnRleHQncyBk
b2N1bWVudCBkb2VzIG5vdCBoYXZlCiAgICAgICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVuYWJsZWQg
ZmxhZyBzZXQuCi0gICAgICAgIGlmIChjaGVja1R5cGUgPT0gRW5mb3JjZUlGcmFtZUFsbG93RnVs
bFNjcmVlblJlcXVpcmVtZW50ICYmICFmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudChlbGVt
ZW50KSkKKyAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBFbmZvcmNlSUZyYW1lQWxsb3dGdWxsU2Ny
ZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxTY3JlZW5Jc0FsbG93ZWQoKmVsZW1lbnQpKQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVGhlIGNvbnRleHQgb2JqZWN0J3Mgbm9kZSBkb2N1
bWVudCBmdWxsc2NyZWVuIGVsZW1lbnQgc3RhY2sgaXMgbm90IGVtcHR5IGFuZCBpdHMgdG9wIGVs
ZW1lbnQKQEAgLTU4NDUsOCArNTg0Miw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAgICAg
ICAgICAgICAvLyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVk
IGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAg
IC8vIHNldCB0byB0cnVlIG9uIHRoZSBkb2N1bWVudC4KICAgICAgICAgICAgIGlmICghZm9sbG93
aW5nRG9jKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVt
ZW50U3RhY2soZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3Jl
ZW5DaGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAgICAgIGN1cnJlbnRE
b2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCplbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC01ODU3LDggKzU4
NTQsOCBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAgICAgIC8vIC4uLnB1
c2ggZm9sbG93aW5nIGRvY3VtZW50J3MgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIgb24gZG9j
dW1lbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQKICAgICAgICAgICAgICAgICAvLyBzdGFjaywgYW5k
IHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0
aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBv
biBkb2N1bWVudC4KLSAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjayhmb2xsb3dpbmdEb2MtPm93bmVyRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAg
ICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7Cisg
ICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKmZv
bGxvd2luZ0RvYy0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIGFkZERvY3VtZW50
VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTU5MjEsNyArNTkxOCw3IEBAIHZvaWQg
RG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4g
ZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBz
ZXQgdG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkZXNj
ZW5kYW50cykgewogICAgICAgICBkb2N1bWVudC0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNr
KCk7Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShkb2N1
bWVudC5nZXQoKSk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRR
dWV1ZSgqZG9jdW1lbnQpOwogICAgIH0KIAogICAgIC8vIDUuIFdoaWxlIGRvYyBpcyBub3QgbnVs
bCwgcnVuIHRoZXNlIHN1YnN0ZXBzOgpAQCAtNTkzOCw3ICs1OTM1LDcgQEAgdm9pZCBEb2N1bWVu
dDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogCiAgICAgICAgIC8vIDIuIFF1ZXVlIGEgdGFzayB0
byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBh
dHRyaWJ1dGUgc2V0IHRvIHRydWUKICAgICAgICAgLy8gb24gZG9jLgotICAgICAgICBhZGREb2N1
bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgIGFk
ZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAKICAg
ICAgICAgLy8gMy4gSWYgZG9jJ3MgZnVsbHNjcmVlbiBlbGVtZW50IHN0YWNrIGlzIGVtcHR5IGFu
ZCBkb2MncyBicm93c2luZyBjb250ZXh0IGhhcyBhIGJyb3dzaW5nIGNvbnRleHQKICAgICAgICAg
Ly8gY29udGFpbmVyLCBzZXQgZG9jIHRvIHRoYXQgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIn
cyBub2RlIGRvY3VtZW50LgpAQCAtNTk4OCwxMyArNTk4NSwxMSBAQCBzdGF0aWMgdm9pZCB1bndy
YXBGdWxsU2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVy
LCBFbGVtZQogICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pbnZh
bGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFoYXNMaXZpbmdSZW5kZXJUcmVlKCkgfHwgcGFnZUNhY2hlU3RhdGUoKSAh
PSBOb3RJblBhZ2VDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQp
OwotCiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBhZnRlciB0aGUgZG9jdW1l
bnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYWdlLgogICAgIGlmICghcGFnZSgpKQogICAg
ICAgICByZXR1cm47CkBAIC02MDAzLDEzICs1OTk4LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtp
dFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICB1
bndyYXBGdWxsU2NyZWVuUmVuZGVyZXIobV9mdWxsU2NyZWVuUmVuZGVyZXIsIG1fZnVsbFNjcmVl
bkVsZW1lbnQuZ2V0KCkpOwogCi0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQtPndp
bGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOworICAgIGVsZW1lbnQud2lsbEJlY29tZUZ1bGxz
Y3JlZW5FbGVtZW50KCk7CiAgICAgCi0gICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7
CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9ICZlbGVtZW50OwogCiAjaWYgVVNFKE5BVElWRV9G
VUxMU0NSRUVOX1ZJREVPKQotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzTWVkaWFFbGVt
ZW50KCkpCisgICAgaWYgKGVsZW1lbnQuaXNNZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKQEAgLTYwMzIsNyArNjAyNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmVzb2x2
ZVN0eWxlKFJlc29sdmVTdHlsZVR5cGU6OlJlYnVpbGQpOwogfQogCi12b2lkIERvY3VtZW50Ojp3
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQordm9pZCBEb2N1bWVu
dDo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fZnVsbFNjcmVlbkVs
ZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTYwNDUsNyArNjAzOSw3IEBAIHZvaWQgRG9jdW1l
bnQ6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCiAgICAgbV9m
dWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKK3Zv
aWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1
bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MDU2LDcgKzYwNTAsNyBAQCB2
b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQq
KQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPndpbGxTdG9wQmVpbmdGdWxsc2NyZWVuRWxlbWVu
dCgpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpCiB7
CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC02MTk0
LDE5ICs2MTg4LDE4IEBAIHZvaWQgRG9jdW1lbnQ6OnBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2so
KQogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50OjpwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50JiBlbGVtZW50
KQogewotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5hcHBlbmQoZWxlbWVudCk7CisgICAg
bV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OmFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCog
ZG9jKQordm9pZCBEb2N1bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1
ZXVlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoZG9jKTsKLSAgICBOb2RlKiB0
YXJnZXQgPSBkb2MtPndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KCk7CisgICAgTm9kZSogdGFyZ2V0
ID0gZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkK
LSAgICAgICAgdGFyZ2V0ID0gZG9jLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKTsK
KyAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IGRvYzsKKyAgICAgICAgdGFy
Z2V0ID0gJmRvY3VtZW50OwogICAgIG1fZnVsbFNjcmVlbkNoYW5nZUV2ZW50VGFyZ2V0UXVldWUu
YXBwZW5kKHRhcmdldCk7CiB9CiAKQEAgLTY2NjQsNyArNjY1Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6
OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEVs
ZW1lbnQqIGluCiAgICAgICAgIC8vIFdlIGFyZSBjbGVhcmluZyB0aGUgOmFjdGl2ZSBjaGFpbiBi
ZWNhdXNlIHRoZSBtb3VzZSBoYXMgYmVlbiByZWxlYXNlZC4KICAgICAgICAgZm9yIChFbGVtZW50
KiBjdXJyZW50RWxlbWVudCA9IG9sZEFjdGl2ZUVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50OyBjdXJy
ZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50SW5Db21wb3NlZFRyZWUo
KSkgewogICAgICAgICAgICAgY3VycmVudEVsZW1lbnQtPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAg
ICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2ZUNoYWluKGN1cnJlbnRFbGVt
ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFjdGl2
ZUNoYWluKCpjdXJyZW50RWxlbWVudCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIG1fYWN0
aXZlRWxlbWVudCA9IG51bGxwdHI7CiAgICAgfSBlbHNlIHsKQEAgLTY2NzYsNyArNjY2OSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEVsZW1lbnQqIGluCiAgICAgICAgICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGN1cnItPmVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgY3Vy
ci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbihlbGVt
ZW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFj
dGl2ZUNoYWluKCplbGVtZW50LCB0cnVlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbmV3QWN0aXZlRWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggNzc0MTJhNGM5NWNkNTcxMWMyMDVmZWI4ZTgyMjczNWRmNmIzZjJiOC4uN2Q5M2U4ZmQzNmRm
ODJjNTE5ZDhhNDRkOTZkZmY1ZDg2MmI4YTNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTcy
Niw4ICs3MjYsOCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZm9jdXNOYXZpZ2F0aW9uU3RhcnRp
bmdOb2RlKEZvY3VzRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3ZlRm9jdXNlZE5v
ZGVPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdDaGlsZHJlbk9ubHkgPSBmYWxzZSk7Ci0gICAg
dm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Kik7Ci0gICAgdm9pZCBlbGVtZW50
SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Kik7CisgICAgdm9pZCBob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50Jik7CisgICAgdm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERl
dGFjaChFbGVtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBFbGVtZW50Kik7CiAKQEAgLTc1NCwxMiArNzU0LDEyIEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW52YWxpZGF0aW9uRnVuY3Rpb24+CiAgICAgdm9p
ZCBpbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKEludmFsaWRhdGlvbkZ1bmN0
aW9uKTsKIAotICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOwotICAg
IHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciopOworICAgIHZvaWQgYXR0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOworICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9y
KE5vZGVJdGVyYXRvciYpOwogICAgIHZvaWQgbW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50
KE5vZGUmLCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSopOwotICAg
IHZvaWQgZGV0YWNoUmFuZ2UoUmFuZ2UqKTsKKyAgICB2b2lkIGF0dGFjaFJhbmdlKFJhbmdlJik7
CisgICAgdm9pZCBkZXRhY2hSYW5nZShSYW5nZSYpOwogCiAgICAgdm9pZCB1cGRhdGVSYW5nZXNB
ZnRlckNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlJik7CiAgICAgLy8gbm9kZUNoaWxkcmVu
V2lsbEJlUmVtb3ZlZCBpcyB1c2VkIHdoZW4gcmVtb3ZpbmcgYWxsIG5vZGUgY2hpbGRyZW4gYXQg
b25jZS4KQEAgLTc3MCwxMyArNzcwLDEzIEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEFjY2Vw
dENoaWxkT3BlcmF0aW9uIHsgUmVwbGFjZSwgSW5zZXJ0T3JBZGQgfTsKICAgICBib29sIGNhbkFj
Y2VwdENoaWxkKGNvbnN0IE5vZGUmIG5ld0NoaWxkLCBjb25zdCBOb2RlKiByZWZDaGlsZCwgQWNj
ZXB0Q2hpbGRPcGVyYXRpb24pIGNvbnN0OwogCi0gICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSos
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHRSZW1vdmVk
KE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHRl
eHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSk7CisgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSYs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRSZW1vdmVk
KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoVGV4dCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHRl
eHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICB2b2lkIGNyZWF0ZURPTVdpbmRvdygp
OwotICAgIHZvaWQgdGFrZURPTVdpbmRvd0Zyb20oRG9jdW1lbnQqKTsKKyAgICB2b2lkIHRha2VE
T01XaW5kb3dGcm9tKERvY3VtZW50Jik7CiAKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fZG9tV2luZG93LmdldCgpOyB9CiAgICAgLy8gSW4gRE9NIExldmVsIDIs
IHRoZSBEb2N1bWVudCdzIERPTVdpbmRvdyBpcyBjYWxsZWQgdGhlIGRlZmF1bHRWaWV3LgpAQCAt
ODQ3LDcgKzg0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByb2Nlc3NSZWZlcnJlclBvbGljeShj
b25zdCBTdHJpbmcmIHBvbGljeSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcgZWxlbWVu
dCBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgIC8vIFJldHVybnMgMCBpZiB0aGlzIGlzIHRo
ZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRoaXMgaXMg
dGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
RWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7IG5vIGRpcmVj
dGlvbiBrbm93bi4KQEAgLTk0MSwxNyArOTQxLDE3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudCog
cGFyZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudCYgdG9w
RG9jdW1lbnQoKSBjb25zdDsKICAgICAKLSAgICBTY3JpcHRSdW5uZXIqIHNjcmlwdFJ1bm5lcigp
IHsgcmV0dXJuIG1fc2NyaXB0UnVubmVyLmdldCgpOyB9Ci0gICAgU2NyaXB0TW9kdWxlTG9hZGVy
KiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiBtX21vZHVsZUxvYWRlci5nZXQoKTsgfQorICAgIFNj
cmlwdFJ1bm5lciYgc2NyaXB0UnVubmVyKCkgeyByZXR1cm4gKm1fc2NyaXB0UnVubmVyOyB9Cisg
ICAgU2NyaXB0TW9kdWxlTG9hZGVyJiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiAqbV9tb2R1bGVM
b2FkZXI7IH0KIAogICAgIEhUTUxTY3JpcHRFbGVtZW50KiBjdXJyZW50U2NyaXB0KCkgY29uc3Qg
eyByZXR1cm4gIW1fY3VycmVudFNjcmlwdFN0YWNrLmlzRW1wdHkoKSA/IG1fY3VycmVudFNjcmlw
dFN0YWNrLmxhc3QoKS5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHB1c2hDdXJyZW50U2Ny
aXB0KEhUTUxTY3JpcHRFbGVtZW50Kik7CiAgICAgdm9pZCBwb3BDdXJyZW50U2NyaXB0KCk7CiAK
ICNpZiBFTkFCTEUoWFNMVCkKLSAgICB2b2lkIGFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiogcGkpOworICAgIHZvaWQgYXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vzc2luZ0lu
c3RydWN0aW9uJik7CiAgICAgUmVmUHRyPERvY3VtZW50PiB0cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpIHsgcmV0dXJuIG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFRy
YW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50KiBkb2MpIHsgbV90cmFuc2Zvcm1Tb3VyY2VE
b2N1bWVudCA9IGRvYzsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2N1bWVudDsg
fQogCiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2Uoc3RkOjp1bmlxdWVfcHRyPFRyYW5zZm9y
bVNvdXJjZT4pOwogICAgIFRyYW5zZm9ybVNvdXJjZSogdHJhbnNmb3JtU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2UuZ2V0KCk7IH0KQEAgLTk5MiwxNyArOTkyLDE1IEBA
IHB1YmxpYzoKICAgICBQYWdlQ2FjaGVTdGF0ZSBwYWdlQ2FjaGVTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZUNhY2hlU3RhdGU7IH0KICAgICB2b2lkIHNldFBhZ2VDYWNoZVN0YXRlKFBhZ2VD
YWNoZVN0YXRlKTsKIAotICAgIC8vIEVsZW1lbnRzIGNhbiByZWdpc3RlciB0aGVtc2VsdmVzIGZv
ciB0aGUgInN1c3BlbmQoKSIgYW5kCi0gICAgLy8gInJlc3VtZSgpIiBjYWxsYmFja3MKLSAgICB2
b2lkIHJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCop
OworICAgIHZvaWQgcmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVu
dCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhF
bGVtZW50Jik7CiAKICAgICB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7CiAgICAg
dm9pZCBzdXNwZW5kKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAg
dm9pZCByZXN1bWUoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uKTsKIAotICAg
IHZvaWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQg
cmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgbWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKTsKIAogICAgIGJvb2wgYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmUoKSBjb25zdDsKQEAgLTEwMTIsMjggKzEwMTAsMjggQEAgcHVibGljOgogICAgIE1lZGlh
U2Vzc2lvbiYgZGVmYXVsdE1lZGlhU2Vzc2lvbigpOwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lz
dGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CiAgICAgdm9pZCBzdG9yYWdlQmxv
Y2tpbmdTdGF0ZURpZENoYW5nZSgpOwogICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRD
aGFuZ2UoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIHJlZ2lzdGVyRm9y
Q2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7
CisgICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWRDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZv
aWQgcmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2Fs
bGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50
Jik7CiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgdm9p
ZCByZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tz
KEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAg
dm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwogI2VuZGlmCiAKLSAg
ICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmls
aXR5Q2hhbmdlQ2xpZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7CisgICAgdm9pZCByZWdp
c3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNs
aWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxs
YmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IHZvaWQgcmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2Vk
Q2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKQEAgLTEwODQsOCArMTA4Miw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpc3BhdGNoUG9wc3RhdGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiYmIHN0YXRlT2JqZWN0KTsKICAgICBEb2N1bWVudEV2ZW50UXVldWUmIGV2ZW50UXVl
dWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V2ZW50UXVldWU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVy
KE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lciYpOwogICAgIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogdGFrZUFueU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcigpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTEwMiwxNyArMTEw
MCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCosIEZ1bGxTY3JlZW5DaGVja1R5cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0Q2FuY2VsRnVsbFNjcmVlbigpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJr
aXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbigpOwogICAgIAogICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRlcmVy
KFJlbmRlckZ1bGxTY3JlZW4qKTsKICAgICBSZW5kZXJGdWxsU2NyZWVuKiBmdWxsU2NyZWVuUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW5SZW5kZXJlcjsgfQogICAgIHZvaWQg
ZnVsbFNjcmVlblJlbmRlcmVyRGVzdHJveWVkKCk7CiAgICAgCiAgICAgdm9pZCBmdWxsU2NyZWVu
Q2hhbmdlRGVsYXlUaW1lckZpcmVkKCk7Ci0gICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkRm9y
RWxlbWVudChFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBmdWxsU2NyZWVuSXNBbGxvd2VkKEVs
ZW1lbnQmKSBjb25zdDsKICAgICB2b2lkIGZ1bGxTY3JlZW5FbGVtZW50UmVtb3ZlZCgpOwogICAg
IHZvaWQgcmVtb3ZlRnVsbFNjcmVlbkVsZW1lbnRPZlN1YnRyZWUoTm9kZSYsIGJvb2wgYW1vbmdD
aGlsZHJlbk9ubHkgPSBmYWxzZSk7CiAgICAgYm9vbCBpc0FuaW1hdGluZ0Z1bGxTY3JlZW4oKSBj
b25zdDsKQEAgLTExMzksOCArMTEzNyw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikgJiYgUExBVEZPUk0oSU9TKQotICAgIERldmljZU1vdGlvbkNv
bnRyb2xsZXIqIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKLSAgICBEZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIqIGRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0Owor
ICAgIERldmljZU1vdGlvbkNvbnRyb2xsZXImIGRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25z
dDsKKyAgICBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXImIGRldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBjb25zdCBEb2N1bWVudFRpbWluZyYgdGlt
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFRpbWluZzsgfQpAQCAtMTI3MSw4ICsxMjY5
LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzU3R5bGVXaXRoVmlld3BvcnRVbml0czsgfQogICAgIHZvaWQgdXBkYXRl
Vmlld3BvcnRVbml0c09uUmVzaXplKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1
ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYpOwogICAgIE1lZGlhUHJvZHVj
ZXI6Ok1lZGlhU3RhdGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0
YXRlOyB9CiAgICAgdm9pZCBub3RlVXNlckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwog
ICAgIGJvb2wgaXNDYXB0dXJpbmcoKSBjb25zdCB7IHJldHVybiBNZWRpYVByb2R1Y2VyOjppc0Nh
cHR1cmluZyhtX21lZGlhU3RhdGUpOyB9CkBAIC0xNDE3LDcgKzE0MTUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgdXBkYXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZv
aWQgdXBkYXRlQmFzZVVSTCgpOwogCi0gICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2Nv
cGUqIHJvb3QpOworICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiByb290KTsK
IAogICAgIHZvaWQgbG9hZEV2ZW50RGVsYXlUaW1lckZpcmVkKCk7CiAKQEAgLTE0MzAsOCArMTQy
OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaEZ1bGxTY3JlZW5DaGFuZ2VPckVycm9y
RXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1l
LCBib29sIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCk7CiAgICAgdm9pZCBjbGVhckZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soKTsKICAgICB2b2lkIHBvcEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsK
LSAgICB2b2lkIHB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQqKTsKLSAgICB2b2lk
IGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCopOworICAg
IHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCYpOworICAgIHZvaWQgYWRk
RG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggOTE0YzQ1YmU5MzQ3
NTU1OWZlNmY3YzU5OTNlOGU3MGMxNWNmMDhiOS4uZDRkNmQ0Mzk1ODk1NjJlNzdkMWE4NGQ5YWZi
MTMwMGUzNGUwOTBkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKQEAgLTYyLDk5ICs2Miw5OSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6ZGV0YWNoKCkKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsg
fTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSog
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24pCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdl
JiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBk
ZXNjcmlwdGlvbikKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtl
ZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFy
a2VkVGV4dC5yYW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0
ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbikpOworICAgICAgICBhZGRNYXJrZXIo
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGll
Y2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uKSk7
CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJh
bmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSB0eXBlKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQo
cmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAg
IGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5z
dGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zm
c2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQ
aWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5z
dGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpKSk7CiAgICAgfQogCiB9CiAKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUgdHlwZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJU
b05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKIHsKICAgICBhZGRNYXJrZXIobm9kZSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoKSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9k
ZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCiB7CiAgICAgYWRkTWFy
a2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCAr
IGxlbmd0aCwgV1RGTW92ZShkYXRhKSkpOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmVN
YXRjaCkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIo
Y29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNoKQogewotICAgIGZvciAoVGV4dEl0
ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0
LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldCgpOwotICAgICAgICBhZGRNYXJr
ZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0Y2gpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVj
ZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCwgYWN0aXZlTWF0Y2gpKTsKICAgICB9CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiAKLXZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBt
ZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2Um
IHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBS
ZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRU
ZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsK
KyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0
RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4
dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVj
ZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFy
dE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbiwgaW50ZXJwcmV0
YXRpb25zLCBtZXRhZGF0YSkpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENv
bnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCks
IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uLCBpbnRlcnByZXRhdGlvbnMsIG1l
dGFkYXRhKSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSogcmFuZ2UsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpCit2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSYg
cmFuZ2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpCiB7CiAgICAgQVNT
RVJUKGludGVycHJldGF0aW9ucy5zaXplKCkgPiAxKTsKICAgICBpZiAoaW50ZXJwcmV0YXRpb25z
LnNpemUoKSA8PSAxKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBbHRl
cm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnMuc2l6ZSgpIC0gMTsKLSAgICBmb3IgKFRleHRJdGVy
YXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5h
ZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFt
YXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICBEb2N1bWVu
dE1hcmtlciBtYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5h
dGl2ZXMsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwg
ZW1wdHlTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4obnVtYmVyT2ZBbHRlcm5hdGl2ZXMpLCBSZXRh
aW5QdHI8aWQ+KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQWx0
ZXJuYXRpdmVzOyArK2kpCiAgICAgICAgICAgICBtYXJrZXIuc2V0QWx0ZXJuYXRpdmUoaW50ZXJw
cmV0YXRpb25zW2kgKyAxXSwgaSk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFy
dENvbnRhaW5lcigpLCBtYXJrZXIpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFy
dENvbnRhaW5lcigpLCBtYXJrZXIpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSogcmFuZ2UsIGNvbnN0IFJl
dGFpblB0cjxpZD4mIG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFk
ZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSYgcmFuZ2UsIGNvbnN0IFJldGFpblB0cjxpZD4m
IG1ldGFkYXRhKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAh
bWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4
dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2Vk
VGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJr
ZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRh
aW5lcigpLCBEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0LCB0
ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIFN0cmluZygp
LCBWZWN0b3I8U3RyaW5nPigpLCBtZXRhZGF0YSkpOworICAgICAgICBhZGRNYXJrZXIodGV4dFBp
ZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUmVzdWx0LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zm
c2V0KCksIFN0cmluZygpLCBWZWN0b3I8U3RyaW5nPigpLCBtZXRhZGF0YSkpOwogICAgIH0KIH0K
IAogI2VuZGlmCiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29u
dGVudE1hcmtlcihSZWZQdHI8UmFuZ2U+IHJhbmdlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKFJhbmdlJiByYW5nZSkKIHsKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlLmdldCgpKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGll
Y2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4
dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewor
ICAgICAgICBhdXRvIHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgRG9j
dW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YSBkcmFnZ2VkQ29udGVudERhdGEgeyBtYXJr
ZWRUZXh0Lm5vZGUoKSB9OwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3Rh
cnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVu
dERhdGEpIH0pOworICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigp
LCB7IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCwgdGV4dFBpZWNlLT5zdGFydE9mZnNl
dCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBXVEZNb3ZlKGRyYWdnZWRDb250ZW50RGF0YSkg
fSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhSYW5nZSogcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
bWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxk
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cmVtb3ZlTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7Ci0g
ICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
ewogICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CisgICAg
ICAgIGF1dG8gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFy
a2VycygmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
IC0gc3RhcnRPZmZzZXQsIG1hcmtlclR5cGVzLCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7CisgICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBpZWNlLT5zdGFydENvbnRh
aW5lcigpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIG1hcmtlclR5cGVz
LCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAgICAgfQogfQogCkBA
IC0zMTksMTMgKzMxOSwxMyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiAvLyBNYXJrZXJzIGFyZSBzdG9y
ZWQgaW4gb3JkZXIgc29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9mZnNldC4KIC8vIE1hcmtlcnMgb2Yg
dGhlIHNhbWUgdHlwZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90aGVyLgogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFy
a2VyJiBuZXdNYXJrZXIpIAordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtl
cihOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKQogewogICAgIEFT
U0VSVChuZXdNYXJrZXIuZW5kT2Zmc2V0KCkgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwog
ICAgIGlmIChuZXdNYXJrZXIuZW5kT2Zmc2V0KCkgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCkpIHsKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IEZhY3RvciB0aGUgbWFya2VyIHBhaW50aW5nIGNvZGUgb3V0IG9mIElu
bGluZVRleHRCb3ggYW5kIHRlYWNoIHNpbXBsZSBsaW5lIGxheW91dCB0byB1c2UgaXQuCiAgICAg
ICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKQogICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5lbnN1cmVMaW5lQm94ZXMoKTsKQEAgLTMzNSw3ICszMzUs
NyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUs
IGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFy
a2VyVHlwZXMgfD0gbmV3TWFya2VyLnR5cGUoKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJr
ZXJMaXN0PiYgbGlzdCA9IG1fbWFya2Vycy5hZGQobm9kZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0PiYgbGlzdCA9IG1fbWFya2Vycy5h
ZGQoJm5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgIGlmICghbGlzdCkgewog
ICAgICAgICBsaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxNYXJrZXJMaXN0PigpOwpAQCAtMzkwLDE1
ICszOTAsMTUgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2Rl
KiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWEKICAgICAgICAgbGlzdC0+aW5zZXJ0
KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIodG9JbnNlcnQpKTsKICAgICB9CiAKLSAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwor
ICAgIGlmIChub2RlLnJlbmRlcmVyKCkpCisgICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWlu
dCgpOwogCi0gICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZSgqbm9kZSk7CisgICAg
aW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShub2RlKTsKIH0KIAogLy8gY29waWVzIG1h
cmtlcnMgZnJvbSBzcmNOb2RlIHRvIGRzdE5vZGUsIGFwcGx5aW5nIHRoZSBzcGVjaWZpZWQgc2hp
ZnQgZGVsdGEgdG8gdGhlIGNvcGllcy4gIFRoZSBzaGlmdCBpcwogLy8gdXNlZnVsIGlmLCBlLmcu
LCB0aGUgY2FsbGVyIGhhcyBjcmVhdGVkIHRoZSBkc3ROb2RlIGZyb20gYSBub24tcHJlZml4IHN1
YnN0cmluZyBvZiB0aGUgc3JjTm9kZS4KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpj
b3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0
aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNvcHlNYXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQg
bGVuZ3RoLCBOb2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpCiB7CiAgICAgaWYgKGxlbmd0aCA8PSAw
KQogICAgICAgICByZXR1cm47CkBAIC00MDcsNyArNDA3LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LAogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsK
IAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KHNyY05vZGUpOworICAgIE1h
cmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZzcmNOb2RlKTsKICAgICBpZiAoIWxpc3Qp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNDMzLDExICs0MzMsMTEgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LAogICAgICAgICBhZGRNYXJrZXIoZHN0Tm9kZSwgbWFya2VyKTsKICAgICB9CiAKLSAg
ICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgZHN0Tm9kZS0+
cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLnJlbmRl
cmVyKCkpCisgICAgICAgIGRzdE5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJP
ck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNo
b3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQogewogICAgIGlmIChsZW5ndGgg
PD0gMCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0
eSgpKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0
KQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5MywxMyArNDkzLDEzIEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpCiAgICAgfQogCiAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgewotICAgICAgICBt
X21hcmtlcnMucmVtb3ZlKG5vZGUpOworICAgICAgICBtX21hcmtlcnMucmVtb3ZlKCZub2RlKTsK
ICAgICAgICAgaWYgKG1fbWFya2Vycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3Bvc3NpYmx5
RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsgfTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGlydHkgJiYg
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwor
ICAgIGlmIChkb2NEaXJ0eSAmJiBub2RlLnJlbmRlcmVyKCkpCisgICAgICAgIG5vZGUucmVuZGVy
ZXIoKS0+cmVwYWludCgpOwogfQogCiBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQpAQCAtNTIzLDEzICs1MjMsMTMg
QEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFp
bmluZ1BvaW50KGNvbnN0IExheW91dFBvaW4KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVj
dG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1h
cmtlcnNGb3IoTm9kZSogbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhh
c01hcmtlcnMobWFya2VyVHlwZXMpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiByZXN1bHQ7Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5n
ZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAt
NTUzLDcgKzU1Myw3IEBAIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSYKIAogICAgIE5vZGUqIHBhc3RM
YXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJh
bmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zv
cihub2RlKSkgeworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUp
KSB7CiAgICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgp
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChub2RlID09ICZz
dGFydENvbnRhaW5lciAmJiBtYXJrZXItPmVuZE9mZnNldCgpIDw9IHJhbmdlLnN0YXJ0T2Zmc2V0
KCkpCkBAIC01NjYsMTMgKzU2NiwxMyBAQCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmCiAgICAgcmV0
dXJuIGZvdW5kTWFya2VyczsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXJrZXJzKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
bWFya2VyVHlwZXMpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMp
KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKICAg
ICAKLSAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQobm9k
ZSk7CisgICAgTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKCZu
b2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQogICAgICAgICByZW1v
dmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKIH0KQEAgLTY2MywxMyAr
NjYzLDEzIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2VycyhP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5CiAgICAgfQogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hp
ZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpCiB7
CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwog
Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2Vy
TGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02ODAsNyArNjgwLDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4K
ICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIGludCB0YXJnZXRTdGFydE9mZnNldCA9IG1hcmtl
ci5zdGFydE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIGludCB0YXJnZXRFbmRPZmZzZXQgPSBt
YXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAgICAgaWYgKHRhcmdldFN0YXJ0T2Zmc2V0
ID49IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7
CisgICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJhY3Rlck9mZnNl
dCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7CiAgICAgICAgICAgICBsaXN0LT5yZW1vdmUo
aSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNjk5LDcgKzY5OSw3IEBA
IHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAgICAgICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bWFya2VyLnNldEVuZE9mZnNldCh0YXJnZXRFbmRPZmZzZXQgPCBub2RlLT5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKTsK
KyAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQodGFyZ2V0RW5kT2Zmc2V0IDwgbm9kZS5t
YXhDaGFyYWN0ZXJPZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5vZGUubWF4Q2hhcmFjdGVy
T2Zmc2V0KCkpOwogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAgICB9
CiAjZW5kaWYKQEAgLTcwNywzNCArNzA3LDM0IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAg
ICAgfQogCiAgICAgaWYgKGRpZFNoaWZ0TWFya2VyKSB7Ci0gICAgICAgIGludmFsaWRhdGVSZWN0
c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJr
ZXJzSW5Ob2RlKG5vZGUpOwogCi0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQotICAgICAg
ICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgICAgICBpZiAobm9kZS5yZW5k
ZXJlcigpKQorICAgICAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiAgICAgfQog
fQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShSYW5n
ZSogcmFuZ2UsIGJvb2wgYWN0aXZlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNl
dE1hcmtlcnNBY3RpdmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKICAgICBpZiAoIXBv
c3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBOb2RlJiBz
dGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVuZENv
bnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKKyAgICBOb2RlJiBzdGFydENvbnRhaW5l
ciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7CisgICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFu
Z2UuZW5kQ29udGFpbmVyKCk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFz
dExhc3ROb2RlKCk7CisgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2Rl
KCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0g
cGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAg
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lciA/IHJhbmdl
LT5zdGFydE9mZnNldCgpIDogMDsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9kZSA9
PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKG5vZGUsIHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2Uu
Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZz
dGFydENvbnRhaW5lciA/IHJhbmdlLnN0YXJ0T2Zmc2V0KCkgOiAwOworICAgICAgICB1bnNpZ25l
ZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyByYW5nZS5lbmRPZmZzZXQoKSA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAgICAgc2V0TWFya2Vy
c0FjdGl2ZSgqbm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlKTsKICAgICB9CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0
aXZlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9k
ZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBh
Y3RpdmUpCiB7Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7Cisg
ICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlz
dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NTIsOCArNzUyLDggQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQKICAgICAgICAgZGlkQWN0aXZhdGVNYXJrZXIgPSB0cnVlOwogICAgIH0KIAotICAg
IGlmIChkaWRBY3RpdmF0ZU1hcmtlciAmJiBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBub2Rl
LT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRpZEFjdGl2YXRlTWFya2VyICYmIG5v
ZGUucmVuZGVyZXIoKSkKKyAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9CiAK
IGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKQEAgLTc2
Nyw3ICs3NjcsNyBAQCBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhS
YW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcgogCiAgICAgTm9kZSogcGFzdExh
c3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFu
Z2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9y
KG5vZGUpKSB7CisgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcigqbm9kZSkp
IHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0
YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJhbmdlLnN0YXJ0T2Zmc2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCmluZGV4IDkwMDdhMTg3M2FkNTljMWRjY2NhNTI3NmU4OTQ2ZWI0
ZWU1YTkxMGEuLmFmZWE3NmExYWFjMDkwZDE4NmRmNThlNzY3ZDZmNjZhOTg2NjQ5OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTMsNyAr
Myw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC00OCwxOSAr
NDgsMTkgQEAgcHVibGljOgogICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIoKTsKIAogICAg
IHZvaWQgZGV0YWNoKCk7Ci0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Ci0gICAgdm9pZCBhZGRN
YXJrZXJUb05vZGUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShO
b2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlKiwgYm9vbCBhY3RpdmVNYXRj
aCk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7CisgICAgdm9pZCBhZGRNYXJrZXJUb05vZGUo
Tm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlKTsKKyAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShOb2RlJiwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
VGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBhY3RpdmVNYXRjaCk7CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKLSAgICB2
b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UqLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zKTsKLSAgICB2b2lkIGFkZERpY3RhdGlv
blJlc3VsdE1hcmtlcihSYW5nZSosIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKKyAg
ICB2b2lkIGFkZE1hcmtlcihSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25z
dCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRp
b25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CisgICAgdm9pZCBhZGREaWN0YXRp
b25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGludGVycHJldGF0aW9ucyk7CisgICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIo
UmFuZ2UmLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CiAjZW5kaWYKLSAgICB2b2lk
IGFkZERyYWdnZWRDb250ZW50TWFya2VyKFJlZlB0cjxSYW5nZT4pOworICAgIHZvaWQgYWRkRHJh
Z2dlZENvbnRlbnRNYXJrZXIoUmFuZ2UmKTsKIAotICAgIHZvaWQgY29weU1hcmtlcnMoTm9kZSog
c3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUs
IGludCBkZWx0YSk7CisgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzcmNOb2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9kZSwgaW50IGRlbHRhKTsKICAg
ICBib29sIGhhc01hcmtlcnMoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWFya2Vy
cy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmNvbnRhaW5zKERv
Y3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKQEAgLTcyLDE3ICs3MiwxNyBAQCBwdWJsaWM6
CiAgICAgLy8gcmVtb3ZlIHRoZSBtYXJrZXIuIElmIHRoZSBhcmd1bWVudCBpcyBmYWxzZSwgd2Ug
d2lsbCBhZGp1c3QgdGhlIHNwYW4gb2YgdGhlIG1hcmtlciBzbyB0aGF0IGl0IHJldGFpbnMKICAg
ICAvLyB0aGUgcG9ydGlvbiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLgogICAgIGVudW0g
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCB7IERvTm90UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyIH07
Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJzKFJhbmdlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKLSAgICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSosIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
KyAgICB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
PSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCAgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKLSAg
ICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSosIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIHJlbW92
ZU1hcmtlcnMoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKICAgICB2b2lkIHJlcGFpbnRNYXJrZXJzKE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxs
TWFya2VycygpKTsKLSAgICB2b2lkIHNoaWZ0TWFya2VycyhOb2RlKiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGludCBkZWx0YSk7Ci0gICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKFJhbmdlKiwgYm9v
bCk7Ci0gICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKKyAgICB2b2lkIHNoaWZ0TWFya2VycyhOb2Rl
JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSk7CisgICAgdm9pZCBzZXRNYXJrZXJz
QWN0aXZlKFJhbmdlJiwgYm9vbCk7CisgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5vZGUmLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihO
b2RlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFy
a2VyOjphbGxNYXJrZXJzKCkpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2Uo
UmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKICAgICB2b2lk
IGNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogCkBAIC05OSw3ICs5OSw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgYWRkTWFya2VyKE5vZGUqLCBjb25z
dCBEb2N1bWVudE1hcmtlciYpOworICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBjb25zdCBEb2N1
bWVudE1hcmtlciYpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cj4gTWFya2VyTGlzdDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVu
aXF1ZV9wdHI8TWFya2VyTGlzdD4+IE1hcmtlck1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCA2ODk1NGY1MmVjM2ZkZjUyNzcyOTA4MmU4YjIxMTQ0OGI1MjZjMTJhLi5hMWVkNjdhYmQ1NGE3
MGVhZTU5ZTIwN2U5Nzk1M2Q4MzE5NzZmYWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0y
MDAsNyArMjAwLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQogICAgICAgICBkZXRhY2hBbGxBdHRy
Tm9kZXNGcm9tRWxlbWVudCgpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgewot
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVtZW50RnJv
bVBlbmRpbmdSZXNvdXJjZXModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcygqdGhpcyk7CiAgICAg
ICAgIEFTU0VSVCghaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICB9CiB9CkBAIC01MzcsMjUg
KzUzNywyNSBAQCBib29sIEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIGJvb2wgRWxlbWVu
dDo6aXNVc2VyQWN0aW9uRWxlbWVudEluQWN0aXZlQ2hhaW4oKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rp
b25FbGVtZW50cygpLmlzSW5BY3RpdmVDaGFpbih0aGlzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQo
KS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0luQWN0aXZlQ2hhaW4oKnRoaXMpOwogfQogCiBib29s
IEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRBY3RpdmUoKSBjb25zdAogewogICAgIEFTU0VS
VChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rp
b25FbGVtZW50cygpLmlzQWN0aXZlKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJB
Y3Rpb25FbGVtZW50cygpLmlzQWN0aXZlKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1Vz
ZXJBY3Rpb25FbGVtZW50Rm9jdXNlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlv
bkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCku
aXNGb2N1c2VkKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50
cygpLmlzRm9jdXNlZCgqdGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxl
bWVudEhvdmVyZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VzZXJBY3Rpb25FbGVtZW50KCkp
OwotICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzSG92ZXJlZCh0
aGlzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0hvdmVy
ZWQoKnRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGZsYWcsIGJvb2wg
cGF1c2UpCkBAIC01NjMsNyArNTYzLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRBY3RpdmUoYm9vbCBm
bGFnLCBib29sIHBhdXNlKQogICAgIGlmIChmbGFnID09IGFjdGl2ZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEFjdGl2ZSh0aGlz
LCBmbGFnKTsKKyAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEFjdGl2ZSgq
dGhpcywgZmxhZyk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSB0aGlz
LT5yZW5kZXJTdHlsZSgpOwogICAgIGJvb2wgcmVhY3RzVG9QcmVzcyA9IChyZW5kZXJTdHlsZSAm
JiByZW5kZXJTdHlsZS0+YWZmZWN0ZWRCeUFjdGl2ZSgpKSB8fCBzdHlsZUFmZmVjdGVkQnlBY3Rp
dmUoKTsKQEAgLTYxMiw3ICs2MTIsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEZvY3VzKGJvb2wgZmxh
ZykKICAgICBpZiAoZmxhZyA9PSBmb2N1c2VkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9jdXNlZCh0aGlzLCBmbGFnKTsKKyAg
ICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEZvY3VzZWQoKnRoaXMsIGZsYWcp
OwogICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGZvciAoRWxlbWVudCog
ZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50
SW5Db21wb3NlZFRyZWUoKSkKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldEhv
dmVyZWQoYm9vbCBmbGFnKQogICAgIGlmIChmbGFnID09IGhvdmVyZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRIb3ZlcmVkKHRo
aXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0SG92ZXJl
ZCgqdGhpcywgZmxhZyk7CiAKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gV2hl
biBzZXR0aW5nIGhvdmVyIHRvIGZhbHNlLCB0aGUgc3R5bGUgbmVlZHMgdG8gYmUgcmVjYWxjJ2Qg
ZXZlbiB3aGVuCkBAIC0xNjA5LDE2ICsxNjA5LDE2IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmli
dXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+
bGVuZ3RoKCk7CiB9CiAKLWJvb2wgRWxlbWVudDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29u
c3QgRWxlbWVudCogb3RoZXIpIGNvbnN0Citib29sIEVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRy
aWJ1dGVzKGNvbnN0IEVsZW1lbnQmIG90aGVyKSBjb25zdAogewogICAgIHN5bmNocm9uaXplQWxs
QXR0cmlidXRlcygpOwotICAgIG90aGVyLT5zeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAg
ICBpZiAoZWxlbWVudERhdGEoKSA9PSBvdGhlci0+ZWxlbWVudERhdGEoKSkKKyAgICBvdGhlci5z
eW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoZWxlbWVudERhdGEoKSA9PSBvdGhl
ci5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoZWxlbWVudERh
dGEoKSkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChvdGhlci0+
ZWxlbWVudERhdGEoKSk7Ci0gICAgaWYgKG90aGVyLT5lbGVtZW50RGF0YSgpKQotICAgICAgICBy
ZXR1cm4gb3RoZXItPmVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChlbGVtZW50RGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChvdGhlci5lbGVtZW50
RGF0YSgpKTsKKyAgICBpZiAob3RoZXIuZWxlbWVudERhdGEoKSkKKyAgICAgICAgcmV0dXJuIG90
aGVyLmVsZW1lbnREYXRhKCktPmlzRXF1aXZhbGVudChlbGVtZW50RGF0YSgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTc3NCw3ICsxNzc0LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVk
RnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKICAgICBDb250YWluZXJOb2RlOjpy
ZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiAKICAgICBpZiAoaGFzUGVuZGluZ1Jlc291cmNl
cygpKQotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVt
ZW50RnJvbVBlbmRpbmdSZXNvdXJjZXModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcygqdGhpcyk7
CiAKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTE4MTcsNyArMTgxNyw3IEBAIHZvaWQgRWxlbWVu
dDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um9vdD4mJiBuZXdTaGFkb3dSb290KQogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3QoKnRoaXMsIHNoYWRvd1Jv
b3QpOwogCiAgICAgaWYgKHNoYWRvd1Jvb3QubW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2Vy
QWdlbnQpCi0gICAgICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoJnNoYWRvd1Jvb3QpOwor
ICAgICAgICBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KHNoYWRvd1Jvb3QpOwogfQogCiB2b2lk
IEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jvb3QoKQpAQCAtMzUzMCwxMCArMzUzMCwxMCBAQCB2b2lk
IEVsZW1lbnQ6OmNsZWFySG92ZXJBbmRBY3RpdmVTdGF0dXNCZWZvcmVEZXRhY2hpbmdSZW5kZXJl
cigpCiAgICAgaWYgKCFpc1VzZXJBY3Rpb25FbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoaG92ZXJlZCgpKQotICAgICAgICBkb2N1bWVudCgpLmhvdmVyZWRFbGVtZW50RGlkRGV0
YWNoKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKCp0
aGlzKTsKICAgICBpZiAoaW5BY3RpdmVDaGFpbigpKQotICAgICAgICBkb2N1bWVudCgpLmVsZW1l
bnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKHRoaXMpOwotICAgIGRvY3VtZW50KCkudXNlckFjdGlv
bkVsZW1lbnRzKCkuZGlkRGV0YWNoKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmVsZW1lbnRJ
bkFjdGl2ZUNoYWluRGlkRGV0YWNoKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25F
bGVtZW50cygpLmRpZERldGFjaCgqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6d2lsbFJlY2Fs
Y1N0eWxlKFN0eWxlOjpDaGFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBmNmRiZWFjMzRhNWYz
NmVhOGUxMzA4YjZiMGZhYzE2MjJiZDc3NDMzLi42OWYwN2MwOGQ0ODMyZjFmMTA4MjFhOTE4ZDM1
OGE2YzQyNGQ0ZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTI1OSw3ICsyNTksNyBAQCBwdWJs
aWM6CiAgICAgLy8gQ2xvbmVzIGFsbCBhdHRyaWJ1dGUtZGVyaXZlZCBkYXRhLCBpbmNsdWRpbmcg
c3ViY2xhc3Mgc3BlY2lmaWNzICh0aHJvdWdoIGNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzLikK
ICAgICB2b2lkIGNsb25lRGF0YUZyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmKTsKIAotICAgIGJv
b2wgaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCogb3RoZXIpIGNvbnN0Owor
ICAgIGJvb2wgaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCYgb3RoZXIpIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzRnJvbUVs
ZW1lbnQoY29uc3QgRWxlbWVudCYpIHsgfQogCkBAIC01OTMsMTQgKzU5Myw5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpc1VzZXJBY3Rpb25FbGVtZW50Rm9jdXNlZCgpIGNvbnN0OwogICAgIGJvb2wg
aXNVc2VyQWN0aW9uRWxlbWVudEhvdmVyZWQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgeyB9CiAgICAgdmlydHVh
bCBib29sIGFsd2F5c0NyZWF0ZVVzZXJBZ2VudFNoYWRvd1Jvb3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgQXR0ciB0byBjYWxs
IHdpbGxNb2RpZnlBdHRyaWJ1dGUvZGlkTW9kaWZ5QXR0cmlidXRlLgotICAgIGZyaWVuZCBjbGFz
cyBBdHRyOwotCi0gICAgZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgeyBOb3RJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA9IDAsIEluU3luY2hyb25pemF0aW9uT2ZM
YXp5QXR0cmlidXRlIH07Ci0KICAgICB2b2lkIGRpZEFkZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgdm9pZCB3aWxsTW9kaWZ5QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIGRpZE1vZGlmeUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CkBAIC02MjgsNiArNjIzLDcgQEAgcHJpdmF0ZToK
ICAgICBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgY2hpbGRUeXBl
QWxsb3dlZChOb2RlVHlwZSkgY29uc3QgZmluYWw7CiAKKyAgICBlbnVtIFN5bmNocm9uaXphdGlv
bk9mTGF6eUF0dHJpYnV0ZSB7IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlLCBJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB9OwogICAgIHZvaWQgc2V0QXR0cmlidXRl
SW50ZXJuYWwodW5zaWduZWQgaW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlLCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAgIHZv
aWQgYWRkQXR0cmlidXRlSW50ZXJuYWwoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAgdm9p
ZCByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25lZCBpbmRleCwgU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5v
ZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggNWI3
NGEyYjM1OTg4NGQyNTY1MmZkZWUyODBhZjhmMjI2NzBiNTJkMC4uMTdiY2VlNmVhNzM4MmNiMGNi
NTgzM2YxMmFiNWRjNTRiNDdkNjBkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05h
bWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAK
QEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKIAogI2luY2x1ZGUg
IkF0dHIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Niw3ICs2NSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogVmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVudC5n
ZXRBdHRyaWJ1dGVOYW1lcygpOwotICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAm
JiBpczxIVE1MRG9jdW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgeworICAgIGlmIChpczxI
VE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBtX2VsZW1lbnQuZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpKSB7CiAgICAgICAgIG5hbWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdKFN0cmluZyYgbmFt
ZSkgewogICAgICAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IFN0cmluZ1ZpZXcgeyBuYW1l
IH0uY29kZVVuaXRzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVyKGNoYXJh
Y3RlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNWI5N2M2OGU3YjdkYTgzNmYzYzQ4NjAxMzU4MTkw
MjRiMmYwOWFhMC4uYjUyM2Y5MjVmYWM0MTJhNTkyMDQxNGM3NzY0OTVkMmQ5MzVkMjFkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcApAQCAtNTk5LDcgKzU5OSw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkK
ICAgICAgICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkg
ewogICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nLT5ub2RlVHlwZSgpICE9IFRFWFRfTk9ERSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBuZXh0VGV4
dCA9IGRvd25jYXN0PFRleHQ+KG5leHRTaWJsaW5nKTsKKyAgICAgICAgICAgIFJlZjxUZXh0PiBu
ZXh0VGV4dCA9IGRvd25jYXN0PFRleHQ+KCpuZXh0U2libGluZyk7CiAKICAgICAgICAgICAgIC8v
IFJlbW92ZSBlbXB0eSB0ZXh0IG5vZGVzLgogICAgICAgICAgICAgaWYgKCFuZXh0VGV4dC0+bGVu
Z3RoKCkpIHsKQEAgLTYxMCw3ICs2MTAsNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAg
ICAgICAgICAvLyBCb3RoIG5vbi1lbXB0eSB0ZXh0IG5vZGVzLiBNZXJnZSB0aGVtLgogICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgICAgICAgICB0ZXh0
LT5hcHBlbmREYXRhKG5leHRUZXh0LT5kYXRhKCkpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS50
ZXh0Tm9kZXNNZXJnZWQobmV4dFRleHQuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICBkb2N1
bWVudCgpLnRleHROb2Rlc01lcmdlZChuZXh0VGV4dCwgb2Zmc2V0KTsKICAgICAgICAgICAgIG5l
eHRUZXh0LT5yZW1vdmUoKTsKICAgICAgICAgfQogCkBAIC0xMzIzLDcgKzEzMjMsNyBAQCBib29s
IE5vZGU6OmlzRXF1YWxOb2RlKE5vZGUqIG90aGVyKSBjb25zdAogICAgICAgICBhdXRvJiBvdGhl
ckVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqb3RoZXIpOwogICAgICAgICBpZiAodGhpc0Vs
ZW1lbnQudGFnUU5hbWUoKSAhPSBvdGhlckVsZW1lbnQudGFnUU5hbWUoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF0aGlzRWxlbWVudC5oYXNFcXVpdmFsZW50QXR0
cmlidXRlcygmb3RoZXJFbGVtZW50KSkKKyAgICAgICAgaWYgKCF0aGlzRWxlbWVudC5oYXNFcXVp
dmFsZW50QXR0cmlidXRlcyhvdGhlckVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNw
cAppbmRleCA0NWQ4NjBiYTg2ZjQ5MDM2NjE5OGJmZTg0NjRmMWMyNjUxMmU5Yjc5Li5mNmYxMDIw
NjliOWVmYzQxYTQyNWNmNmRhM2MyNDc3YmVlZGExMmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0
ZXJhdG9yLmNwcApAQCAtNzMsNyArNzMsNyBAQCBpbmxpbmUgTm9kZUl0ZXJhdG9yOjpOb2RlSXRl
cmF0b3IoTm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlB0cjxObwogICAg
IDogTm9kZUl0ZXJhdG9yQmFzZShyb290Tm9kZSwgd2hhdFRvU2hvdywgV1RGTW92ZShmaWx0ZXIp
KQogICAgICwgbV9yZWZlcmVuY2VOb2RlKHJvb3ROb2RlLCB0cnVlKQogewotICAgIHJvb3QoKS5k
b2N1bWVudCgpLmF0dGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKKyAgICByb290KCkuZG9jdW1lbnQo
KS5hdHRhY2hOb2RlSXRlcmF0b3IoKnRoaXMpOwogfQogCiBSZWY8Tm9kZUl0ZXJhdG9yPiBOb2Rl
SXRlcmF0b3I6OmNyZWF0ZShOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywgUmVm
UHRyPE5vZGVGaWx0ZXI+JiYgZmlsdGVyKQpAQCAtODMsNyArODMsNyBAQCBSZWY8Tm9kZUl0ZXJh
dG9yPiBOb2RlSXRlcmF0b3I6OmNyZWF0ZShOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRv
U2hvdywgUmVmUAogCiBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogewotICAgIHJvb3Qo
KS5kb2N1bWVudCgpLmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKKyAgICByb290KCkuZG9jdW1l
bnQoKS5kZXRhY2hOb2RlSXRlcmF0b3IoKnRoaXMpOwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8
Tm9kZT4+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5jcHAKaW5kZXggNGQzMzcyNzljMGVjYmM5NTBkZjQ5ZWViMWU1NDI3NDI3MzBk
NTk3ZC4uNDU4MWE5NGIxM2VmYjZlMzhjMzY3YmE3MTgyNjRhY2U1ZTczZDZkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0zMCwzNSArMzAsMjcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmFkaW9CdXR0b25Hcm91cCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUmFkaW9CdXR0b25Hcm91cCgpOwogICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtYmVycy5pc0VtcHR5KCk7IH0KICAgICBi
b29sIGlzUmVxdWlyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVkQ291bnQ7IH0KICAgICBI
VE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2Vk
QnV0dG9uOyB9Ci0gICAgdm9pZCBhZGQoSFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgdXBk
YXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlcXVpcmVkQXR0
cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmUoSFRNTElu
cHV0RWxlbWVudCopOwotICAgIGJvb2wgY29udGFpbnMoSFRNTElucHV0RWxlbWVudCopIGNvbnN0
OworICAgIHZvaWQgYWRkKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNr
ZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNo
YW5nZWQoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlKEhUTUxJbnB1dEVsZW1l
bnQmKTsKKyAgICBib29sIGNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKICAgICBW
ZWN0b3I8SFRNTElucHV0RWxlbWVudCo+IG1lbWJlcnMoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0b25zKCk7CiAgICAgdm9pZCB1cGRh
dGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMoKTsKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAg
ICB2b2lkIGNoYW5nZUNoZWNrZWRCdXR0b24oSFRNTElucHV0RWxlbWVudCopOwogICAgIHZvaWQg
c2V0Q2hlY2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7CiAKICAgICBIYXNoU2V0PEhUTUxJ
bnB1dEVsZW1lbnQqPiBtX21lbWJlcnM7Ci0gICAgSFRNTElucHV0RWxlbWVudCogbV9jaGVja2Vk
QnV0dG9uOwotICAgIHNpemVfdCBtX3JlcXVpcmVkQ291bnQ7CisgICAgSFRNTElucHV0RWxlbWVu
dCogbV9jaGVja2VkQnV0dG9uIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX3JlcXVpcmVkQ291
bnQgeyAwIH07CiB9OwogCi1SYWRpb0J1dHRvbkdyb3VwOjpSYWRpb0J1dHRvbkdyb3VwKCkKLSAg
ICA6IG1fY2hlY2tlZEJ1dHRvbihudWxscHRyKQotICAgICwgbV9yZXF1aXJlZENvdW50KDApCi17
Ci19Ci0KIGlubGluZSBib29sIFJhZGlvQnV0dG9uR3JvdXA6OmlzVmFsaWQoKSBjb25zdAogewog
ICAgIHJldHVybiAhaXNSZXF1aXJlZCgpIHx8IG1fY2hlY2tlZEJ1dHRvbjsKQEAgLTg4LDE2ICs4
MCwxNiBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnNldENoZWNrZWRCdXR0b24oSFRNTElucHV0
RWxlbWVudCogYnV0dG9uKQogICAgICAgICBvbGRDaGVja2VkQnV0dG9uLT5zZXRDaGVja2VkKGZh
bHNlKTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjphZGQoSFRNTElucHV0RWxlbWVudCog
YnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjphZGQoSFRNTElucHV0RWxlbWVudCYgYnV0
dG9uKQogewotICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKCFt
X21lbWJlcnMuYWRkKGJ1dHRvbikuaXNOZXdFbnRyeSkKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFk
aW9CdXR0b24oKSk7CisgICAgaWYgKCFtX21lbWJlcnMuYWRkKCZidXR0b24pLmlzTmV3RW50cnkp
CiAgICAgICAgIHJldHVybjsKICAgICBib29sIGdyb3VwV2FzVmFsaWQgPSBpc1ZhbGlkKCk7Ci0g
ICAgaWYgKGJ1dHRvbi0+aXNSZXF1aXJlZCgpKQorICAgIGlmIChidXR0b24uaXNSZXF1aXJlZCgp
KQogICAgICAgICArK21fcmVxdWlyZWRDb3VudDsKLSAgICBpZiAoYnV0dG9uLT5jaGVja2VkKCkp
Ci0gICAgICAgIHNldENoZWNrZWRCdXR0b24oYnV0dG9uKTsKKyAgICBpZiAoYnV0dG9uLmNoZWNr
ZWQoKSkKKyAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbigmYnV0dG9uKTsKIAogICAgIGJvb2wgZ3Jv
dXBJc1ZhbGlkID0gaXNWYWxpZCgpOwogICAgIGlmIChncm91cFdhc1ZhbGlkICE9IGdyb3VwSXNW
YWxpZCkKQEAgLTEwNSwzMSArOTcsMzEgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjphZGQoSFRN
TElucHV0RWxlbWVudCogYnV0dG9uKQogICAgIGVsc2UgaWYgKCFncm91cElzVmFsaWQpIHsKICAg
ICAgICAgLy8gQSByYWRpbyBidXR0b24gbm90IGluIGEgZ3JvdXAgaXMgYWx3YXlzIHZhbGlkLiBX
ZSBuZWVkIHRvIG1ha2UgaXQKICAgICAgICAgLy8gaW52YWxpZCBvbmx5IGlmIHRoZSBncm91cCBp
cyBpbnZhbGlkLgotICAgICAgICBidXR0b24tPnVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAgIGJ1
dHRvbi51cGRhdGVWYWxpZGl0eSgpOwogICAgIH0KIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vw
Ojp1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRp
b0J1dHRvbkdyb3VwOjp1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCYgYnV0dG9u
KQogewotICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgQVNTRVJUKG1f
bWVtYmVycy5jb250YWlucyhidXR0b24pKTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0
b24oKSk7CisgICAgQVNTRVJUKG1fbWVtYmVycy5jb250YWlucygmYnV0dG9uKSk7CiAgICAgYm9v
bCB3YXNWYWxpZCA9IGlzVmFsaWQoKTsKLSAgICBpZiAoYnV0dG9uLT5jaGVja2VkKCkpCi0gICAg
ICAgIHNldENoZWNrZWRCdXR0b24oYnV0dG9uKTsKKyAgICBpZiAoYnV0dG9uLmNoZWNrZWQoKSkK
KyAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbigmYnV0dG9uKTsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSBidXR0b24pCisgICAgICAgIGlmIChtX2NoZWNrZWRCdXR0
b24gPT0gJmJ1dHRvbikKICAgICAgICAgICAgIHNldENoZWNrZWRCdXR0b24obnVsbHB0cik7CiAg
ICAgfQogICAgIGlmICh3YXNWYWxpZCAhPSBpc1ZhbGlkKCkpCiAgICAgICAgIHVwZGF0ZVZhbGlk
aXR5Rm9yQWxsQnV0dG9ucygpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlcXVpcmVk
QXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0
dG9uR3JvdXA6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50JiBidXR0
b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBBU1NFUlQo
bV9tZW1iZXJzLmNvbnRhaW5zKGJ1dHRvbikpOworICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1
dHRvbigpKTsKKyAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5zKCZidXR0b24pKTsKICAgICBi
b29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24tPmlzUmVxdWlyZWQoKSkK
KyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkKICAgICAgICAgKyttX3JlcXVpcmVkQ291bnQ7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX3JlcXVpcmVkQ291bnQpOwpAQCAtMTM5LDIy
ICsxMzEsMjIgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5n
ZWQoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKQogICAgICAgICB1cGRhdGVWYWxpZGl0eUZvckFs
bEJ1dHRvbnMoKTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUoSFRNTElucHV0
RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZW1vdmUoSFRNTElucHV0
RWxlbWVudCYgYnV0dG9uKQogewotICAgIEFTU0VSVChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7
Ci0gICAgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9tZW1iZXJz
LmZpbmQoYnV0dG9uKTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0b24oKSk7CisgICAg
YXV0byBpdCA9IG1fbWVtYmVycy5maW5kKCZidXR0b24pOwogICAgIGlmIChpdCA9PSBtX21lbWJl
cnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1ZhbGlk
KCk7CiAgICAgbV9tZW1iZXJzLnJlbW92ZShpdCk7Ci0gICAgaWYgKGJ1dHRvbi0+aXNSZXF1aXJl
ZCgpKSB7CisgICAgaWYgKGJ1dHRvbi5pc1JlcXVpcmVkKCkpIHsKICAgICAgICAgQVNTRVJUKG1f
cmVxdWlyZWRDb3VudCk7CiAgICAgICAgIC0tbV9yZXF1aXJlZENvdW50OwogICAgIH0KICAgICBp
ZiAobV9jaGVja2VkQnV0dG9uKSB7Ci0gICAgICAgIGJ1dHRvbi0+aW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwotICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09IGJ1dHRvbikgeworICAg
ICAgICBidXR0b24uaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworICAgICAgICBpZiAobV9j
aGVja2VkQnV0dG9uID09ICZidXR0b24pIHsKICAgICAgICAgICAgIG1fY2hlY2tlZEJ1dHRvbiA9
IG51bGxwdHI7CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjRm9yQWxsQnV0dG9ucygp
OwogICAgICAgICB9CkBAIC0xNjgsNyArMTYwLDcgQEAgdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpy
ZW1vdmUoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKQogICAgIGlmICghd2FzVmFsaWQpIHsKICAg
ICAgICAgLy8gQSByYWRpbyBidXR0b24gbm90IGluIGEgZ3JvdXAgaXMgYWx3YXlzIHZhbGlkLiBX
ZSBuZWVkIHRvIG1ha2UgaXQKICAgICAgICAgLy8gdmFsaWQgb25seSBpZiB0aGUgZ3JvdXAgd2Fz
IGludmFsaWQuCi0gICAgICAgIGJ1dHRvbi0+dXBkYXRlVmFsaWRpdHkoKTsKKyAgICAgICAgYnV0
dG9uLnVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgfQogfQogCkBAIC0xODgsOSArMTgwLDkgQEAgdm9p
ZCBSYWRpb0J1dHRvbkdyb3VwOjp1cGRhdGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMoKQogICAgIH0K
IH0KIAotYm9vbCBSYWRpb0J1dHRvbkdyb3VwOjpjb250YWlucyhIVE1MSW5wdXRFbGVtZW50KiBi
dXR0b24pIGNvbnN0Citib29sIFJhZGlvQnV0dG9uR3JvdXA6OmNvbnRhaW5zKEhUTUxJbnB1dEVs
ZW1lbnQmIGJ1dHRvbikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZW1iZXJzLmNvbnRhaW5zKGJ1
dHRvbik7CisgICAgcmV0dXJuIG1fbWVtYmVycy5jb250YWlucygmYnV0dG9uKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMjA2LDE2ICsxOTgsMTYgQEAgUmFkaW9CdXR0b25Hcm91cHM6On5SYWRpb0J1
dHRvbkdyb3VwcygpCiB7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbihI
VE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6YWRkQnV0
dG9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlz
UmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAg
QVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXAp
CiAgICAgICAgIG1fbmFtZVRvR3JvdXBNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPE5hbWVUb0dyb3Vw
TWFwPigpOwogCi0gICAgYXV0byYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVu
dC0+bmFtZSgpLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGF1dG8mIGdy
b3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQubmFtZSgpLmltcGwoKSwgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0gc3Rk
OjptYWtlX3VuaXF1ZTxSYWRpb0J1dHRvbkdyb3VwPigpOwogICAgIGdyb3VwLT5hZGQoZWxlbWVu
dCk7CkBAIC0yNDAsMzAgKzIzMiwyNiBAQCBWZWN0b3I8SFRNTElucHV0RWxlbWVudCo+IFJhZGlv
QnV0dG9uR3JvdXBzOjpncm91cE1lbWJlcnMoY29uc3QgSFRNTElucHV0RWxlbWVudAogICAgIHJl
dHVybiBncm91cC0+bWVtYmVycygpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjp1cGRh
dGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0
b25Hcm91cHM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50
LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7
CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IEFTU0VSVChtX25hbWVUb0dyb3VwTWFwKTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAg
ICAgICAgIHJldHVybjsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKLSAgICBBU1NFUlQoZ3JvdXApOwot
ICAgIGdyb3VwLT51cGRhdGVDaGVja2VkU3RhdGUoZWxlbWVudCk7CisgICAgbV9uYW1lVG9Hcm91
cE1hcC0+Z2V0KGVsZW1lbnQubmFtZSgpLmltcGwoKSktPnVwZGF0ZUNoZWNrZWRTdGF0ZShlbGVt
ZW50KTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFu
Z2VkKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpy
ZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAg
ICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFt
ZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAg
IGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQobV9uYW1lVG9Hcm91cE1hcCk7CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAg
ICByZXR1cm47Ci0gICAgUmFkaW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFw
LT5nZXQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKLSAgICBn
cm91cC0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKGVsZW1lbnQpOworICAgIG1fbmFtZVRvR3Jv
dXBNYXAtPmdldChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5n
ZWQoZWxlbWVudCk7CiB9CiAKIEhUTUxJbnB1dEVsZW1lbnQqIFJhZGlvQnV0dG9uR3JvdXBzOjpj
aGVja2VkQnV0dG9uRm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAt
Mjc1LDM4ICsyNjMsMzYgQEAgSFRNTElucHV0RWxlbWVudCogUmFkaW9CdXR0b25Hcm91cHM6OmNo
ZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIG4KICAgICByZXR1cm4gZ3Jv
dXAgPyBncm91cC0+Y2hlY2tlZEJ1dHRvbigpIDogbnVsbHB0cjsKIH0KIAotYm9vbCBSYWRpb0J1
dHRvbkdyb3Vwczo6aGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAorYm9vbCBSYWRpb0J1dHRvbkdyb3Vwczo6aGFzQ2hlY2tlZEJ1dHRvbihjb25z
dCBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGVsZW1l
bnQtPm5hbWUoKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGVsZW1lbnQubmFtZSgpOwogICAgIGlmIChuYW1lLmlz
RW1wdHkoKSB8fCAhbV9uYW1lVG9Hcm91cE1hcCkKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmNo
ZWNrZWQoKTsKLQotICAgIGNvbnN0IFJhZGlvQnV0dG9uR3JvdXAqIGdyb3VwID0gbV9uYW1lVG9H
cm91cE1hcC0+Z2V0KG5hbWUuaW1wbCgpKTsKLSAgICByZXR1cm4gZ3JvdXAtPmNoZWNrZWRCdXR0
b24oKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZCgpOworICAgIHJldHVybiBtX25h
bWVUb0dyb3VwTWFwLT5nZXQobmFtZS5pbXBsKCkpLT5jaGVja2VkQnV0dG9uKCk7CiB9CiAKLWJv
b2wgUmFkaW9CdXR0b25Hcm91cHM6OmlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Citib29sIFJhZGlvQnV0dG9uR3JvdXBzOjppc0luUmVxdWlyZWRHcm91
cChIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQor
ICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFt
ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9uYW1lVG9H
cm91cE1hcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJhZGlvQnV0dG9uR3JvdXAqIGdy
b3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOworICAg
IGF1dG8qIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQubmFtZSgpLmltcGwo
KSk7CiAgICAgcmV0dXJuIGdyb3VwICYmIGdyb3VwLT5pc1JlcXVpcmVkKCkgJiYgZ3JvdXAtPmNv
bnRhaW5zKGVsZW1lbnQpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZW1vdmVCdXR0
b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OnJl
bW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgp
KQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQu
bmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9uYW1lVG9Hcm91
cE1hcCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9uYW1lVG9Hcm91cE1hcC0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgIE5hbWVUb0dyb3VwTWFwOjppdGVyYXRvciBpdCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmZpbmQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSk7CisgICAgYXV0byBpdCA9IG1fbmFt
ZVRvR3JvdXBNYXAtPmZpbmQoZWxlbWVudC5uYW1lKCkuaW1wbCgpKTsKICAgICBpZiAoaXQgPT0g
bV9uYW1lVG9Hcm91cE1hcC0+ZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpdC0+dmFsdWUt
PnJlbW92ZShlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmgKaW5k
ZXggMWU1YTU4ZDU3ZGE3Njg1ZTFjMDE4ZmQ5NmFmYWYyMDdlZjAxMzM2YS4uNTMzMTJkZGU5NzA2
Y2U4ZDI0YTNlMjE0YWVjNGVjZjUzZWFlYTg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0
dG9uR3JvdXBzLmgKQEAgLTM0LDEzICszNCwxMyBAQCBjbGFzcyBSYWRpb0J1dHRvbkdyb3VwcyB7
CiBwdWJsaWM6CiAgICAgUmFkaW9CdXR0b25Hcm91cHMoKTsKICAgICB+UmFkaW9CdXR0b25Hcm91
cHMoKTsKLSAgICB2b2lkIGFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCB1
cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgcmVxdWlyZWRB
dHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgdm9pZCBhZGRCdXR0b24oSFRNTElucHV0RWxlbWVu
dCYpOworICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAg
ICB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Jik7CisgICAg
dm9pZCByZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCYpOwogICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIGdyb3VwTmFtZSkg
Y29uc3Q7Ci0gICAgYm9vbCBoYXNDaGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
KSBjb25zdDsKLSAgICBib29sIGlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQqKSBj
b25zdDsKKyAgICBib29sIGhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCYp
IGNvbnN0OworICAgIGJvb2wgaXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCYpIGNv
bnN0OwogICAgIFZlY3RvcjxIVE1MSW5wdXRFbGVtZW50Kj4gZ3JvdXBNZW1iZXJzKGNvbnN0IEhU
TUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4
IDVkYWUwNjM2YmIxOTczYTM1OTczODM5N2NiNjEzMDFmOTAyZTMwYzMuLjM2MTk5MDQ3YzM0Y2Fi
NmYyODE2NWUwZWY4MzRjMjI5YTg0ZDc0MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMzQsNyAr
MzQsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKQEAgLTc5LDcgKzc4LDcgQEAgaW5saW5lIFJhbmdlOjpSYW5nZShE
b2N1bWVudCYgb3duZXJEb2N1bWVudCkKICAgICByYW5nZUNvdW50ZXIuaW5jcmVtZW50KCk7CiAj
ZW5kaWYKIAotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9v
d25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CiB9CiAKIFJlZjxSYW5nZT4gUmFuZ2U6
OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCkKQEAgLTk2LDcgKzk1LDcgQEAgaW5saW5l
IFJhbmdlOjpSYW5nZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgTm9kZSogc3RhcnRDb250YWlu
ZXIsIGludCBzdGFydE9mZnMKICAgICByYW5nZUNvdW50ZXIuaW5jcmVtZW50KCk7CiAjZW5kaWYK
IAotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRv
Y3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CiAKICAgICAvLyBTaW1wbHkgc2V0dGluZyB0aGUg
Y29udGFpbmVycyBhbmQgb2Zmc2V0cyBkaXJlY3RseSB3b3VsZCBub3QgZG8gYW55IG9mIHRoZSBj
aGVja2luZwogICAgIC8vIHRoYXQgc2V0U3RhcnQgYW5kIHNldEVuZCBkbywgc28gd2UgY2FsbCB0
aG9zZSBmdW5jdGlvbnMuCkBAIC0xMjUsNyArMTI0LDcgQEAgUmVmPFJhbmdlPiBSYW5nZTo6Y3Jl
YXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGUKIAogUmFuZ2U6On5SYW5nZSgpCiB7Ci0gICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5n
ZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKCp0aGlzKTsKIAogI2lm
bmRlZiBOREVCVUcKICAgICByYW5nZUNvdW50ZXIuZGVjcmVtZW50KCk7CkBAIC0xMzUsMTEgKzEz
NCwxMSBAQCBSYW5nZTo6flJhbmdlKCkKIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQobV9vd25lckRvY3VtZW50LnB0cigpICE9ICZkb2N1
bWVudCk7Ci0gICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293
bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKCp0aGlzKTsKICAgICBtX293bmVyRG9jdW1lbnQgPSBk
b2N1bWVudDsKICAgICBtX3N0YXJ0LnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOwogICAgIG1f
ZW5kLnNldFRvU3RhcnRPZk5vZGUoZG9jdW1lbnQpOwotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0
YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7
CiB9CiAKIE5vZGUqIFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWlu
ZXJBLCBOb2RlKiBjb250YWluZXJCKQpAQCAtOTc3LDcgKzk3Niw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxEb2N1bWVudEZyYWdtZW50Pj4gUmFuZ2U6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25z
dCBTdHJpbmcmCiAgICAgICAgIGVsZW1lbnQgPSAmZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAg
ICAgZWxzZQogICAgICAgICBlbGVtZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYg
KCFlbGVtZW50IHx8IChpczxIVE1MRG9jdW1lbnQ+KGVsZW1lbnQtPmRvY3VtZW50KCkpICYmIGlz
PEhUTUxIdG1sRWxlbWVudD4oKmVsZW1lbnQpKSkKKyAgICBpZiAoIWVsZW1lbnQgfHwgKGVsZW1l
bnQtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSAmJiBpczxIVE1MSHRtbEVsZW1lbnQ+KCpl
bGVtZW50KSkpCiAgICAgICAgIGVsZW1lbnQgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShub2Rl
LmRvY3VtZW50KCkpOwogICAgIHJldHVybiBXZWJDb3JlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQoKmVsZW1lbnQsIG1hcmt1cCwgQWxsb3dTY3JpcHRpbmdDb250ZW50QW5kRG9Ob3RNYXJrQWxy
ZWFkeVN0YXJ0ZWQpOwogfQpAQCAtMTY2OSw5ICsxNjY4LDkgQEAgdm9pZCBSYW5nZTo6bm9kZVdp
bGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKICAgICBib3VuZGFyeU5vZGVXaWxsQmVSZW1vdmVkKG1f
ZW5kLCBub2RlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVk
KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2Vy
dGVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAh
PSB0ZXh0KQorICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAgICAg
cmV0dXJuOwogICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0KCk7
CiAgICAgaWYgKG9mZnNldCA+PSBib3VuZGFyeU9mZnNldCkKQEAgLTE2NzksMTcgKzE2NzgsMTYg
QEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dEluc2VydGVkKFJhbmdlQm91bmRhcnlQ
b2ludCYgYm91bmRhcnksIE5vZGUqIHRleHQKICAgICBib3VuZGFyeS5zZXRPZmZzZXQoYm91bmRh
cnlPZmZzZXQgKyBsZW5ndGgpOwogfQogCi12b2lkIFJhbmdlOjp0ZXh0SW5zZXJ0ZWQoTm9kZSog
dGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFJhbmdlOjp0ZXh0
SW5zZXJ0ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgQVNTRVJUKHRleHQpOwotICAgIEFTU0VSVCgmdGV4dC0+ZG9jdW1lbnQoKSA9PSAmb3du
ZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJnRleHQuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1
bWVudCgpKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX3N0YXJ0LCB0ZXh0LCBvZmZzZXQs
IGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0SW5zZXJ0ZWQobV9lbmQsIHRleHQsIG9mZnNldCwg
bGVuZ3RoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFu
Z2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVtb3ZlZChS
YW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gdGV4
dCkKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVy
bjsKICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAg
IGlmIChvZmZzZXQgPj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xNzAwLDEwICsxNjk4LDkgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBi
b3VuZGFyeSwgTm9kZSogdGV4dCwKICAgICAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KGJvdW5kYXJ5
T2Zmc2V0IC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSogdGV4
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFJhbmdlOjp0ZXh0UmVt
b3ZlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICBBU1NFUlQodGV4dCk7Ci0gICAgQVNTRVJUKCZ0ZXh0LT5kb2N1bWVudCgpID09ICZvd25lckRv
Y3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50
KCkpOwogICAgIGJvdW5kYXJ5VGV4dFJlbW92ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5n
dGgpOwogICAgIGJvdW5kYXJ5VGV4dFJlbW92ZWQobV9lbmQsIHRleHQsIG9mZnNldCwgbGVuZ3Ro
KTsKIH0KQEAgLTE3MjgsMTUgKzE3MjUsMTUgQEAgdm9pZCBSYW5nZTo6dGV4dE5vZGVzTWVyZ2Vk
KE5vZGVXaXRoSW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICBib3VuZGFyeVRl
eHROb2Rlc01lcmdlZChtX2VuZCwgb2xkTm9kZSwgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFy
eSwgVGV4dCogb2xkTm9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQmIG9sZE5vZGUpCiB7Ci0gICAg
YXV0byogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChib3VuZGFyeS5j
b250YWluZXIoKSA9PSBvbGROb2RlKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNwbGl0T2Zmc2V0ID0g
b2xkTm9kZS0+bGVuZ3RoKCk7CisgICAgYXV0byogcGFyZW50ID0gb2xkTm9kZS5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09ICZvbGROb2RlKSB7CisgICAgICAg
IHVuc2lnbmVkIHNwbGl0T2Zmc2V0ID0gb2xkTm9kZS5sZW5ndGgoKTsKICAgICAgICAgdW5zaWdu
ZWQgYm91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICAgICAgaWYgKGJvdW5k
YXJ5T2Zmc2V0ID4gc3BsaXRPZmZzZXQpIHsKICAgICAgICAgICAgIGlmIChwYXJlbnQpCi0gICAg
ICAgICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLT5uZXh0U2libGluZygpLCBib3VuZGFy
eU9mZnNldCAtIHNwbGl0T2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXQo
Km9sZE5vZGUubmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KHNw
bGl0T2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMTc0NCwyMCArMTc0MSwxOCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXJ5LCBUZXh0KiBvbAogICAgIH0KICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRC
ZWZvcmUoKSA9PSBvbGROb2RlKSB7Ci0gICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS0+
bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gcGFyZW50ICYm
IGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gJm9sZE5vZGUpIHsKKyAgICAgICAgYXV0byogbmV3
Q2hpbGQgPSBvbGROb2RlLm5leHRTaWJsaW5nKCk7CiAgICAgICAgIEFTU0VSVChuZXdDaGlsZCk7
CiAgICAgICAgIGJvdW5kYXJ5LnNldFRvQWZ0ZXJDaGlsZCgqbmV3Q2hpbGQpOwogICAgIH0KIH0K
IAotdm9pZCBSYW5nZTo6dGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQordm9pZCBSYW5nZTo6
dGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKQogewotICAgIEFTU0VSVChvbGROb2RlKTsKLSAg
ICBBU1NFUlQoJm9sZE5vZGUtPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Ci0gICAg
QVNTRVJUKG9sZE5vZGUtPmlzVGV4dE5vZGUoKSk7Ci0gICAgQVNTRVJUKCFvbGROb2RlLT5wYXJl
bnROb2RlKCkgfHwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSk7Ci0gICAgQVNTRVJUKCFvbGROb2Rl
LT5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsK
KyAgICBBU1NFUlQoJm9sZE5vZGUuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAg
ICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4dFNpYmxpbmcoKSk7
CisgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5n
KCktPmlzVGV4dE5vZGUoKSk7CiAgICAgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChtX3N0YXJ0LCBv
bGROb2RlKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1fZW5kLCBvbGROb2RlKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmgKaW5kZXggM2YxYzUwY2I0NGFhYmExODY1NDJlNzc2OWI0M2Q0ZjdiZDNmZDlj
NS4uZjJmYzU0MjhkZmMyYjkzY2NlMjU3YjQwYTc4NjhlYmE5OTU5MmVmYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmgKQEAgLTEzMywxMCArMTMzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIG5vZGVDaGlsZHJlbldp
bGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYpOwogICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQo
Tm9kZSYpOwogCi0gICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSosIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHRSZW1vdmVkKE5vZGUqLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0SW5zZXJ0ZWQoTm9kZSYsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRSZW1vdmVkKE5v
ZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgdm9pZCB0ZXh0Tm9k
ZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2
b2lkIHRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSk7CisgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0
KFRleHQmIG9sZE5vZGUpOwogCiAgICAgLy8gRXhwYW5kIHJhbmdlIHRvIGEgdW5pdCAod29yZCBv
ciBzZW50ZW5jZSBvciBibG9jayBvciBkb2N1bWVudCkgYm91bmRhcnkuCiAgICAgLy8gUGxlYXNl
IHJlZmVyIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzYzMiBj
b21tZW50ICM1IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IGE4MzNlMjgy
MjZkZGQxZGNkMTQyZDVjYTIyYjM1NDYyZTJiOWMwZWYuLjQzZWFmMTRkNGNkY2Y5NGQwMGNiYTc5
MTJmZjA0YTlmNThiMzE2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAg
LTI1NiwxMSArMjU2LDExIEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChjb25z
dCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIExlZ2FjCiAgICAgfSBlbHNlIGlm
ICgoaXNDbGFzc2ljRXh0ZXJuYWxTY3JpcHQgfHwgc2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBlOjpN
b2R1bGUpICYmICFoYXNBc3luY0F0dHJpYnV0ZSgpICYmICFtX2ZvcmNlQXN5bmMpIHsKICAgICAg
ICAgbV93aWxsRXhlY3V0ZUluT3JkZXIgPSB0cnVlOwogICAgICAgICBBU1NFUlQobV9sb2FkYWJs
ZVNjcmlwdCk7Ci0gICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlwdEZv
ckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1bm5lcjo6SU5fT1JE
RVJfRVhFQ1VUSU9OKTsKKyAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCkucXVldWVTY3Jp
cHRGb3JFeGVjdXRpb24oKnRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklO
X09SREVSX0VYRUNVVElPTik7CiAgICAgfSBlbHNlIGlmIChoYXNTb3VyY2VBdHRyaWJ1dGUoKSB8
fCBzY3JpcHRUeXBlID09IFNjcmlwdFR5cGU6Ok1vZHVsZSkgewogICAgICAgICBBU1NFUlQobV9s
b2FkYWJsZVNjcmlwdCk7CiAgICAgICAgIEFTU0VSVChoYXNBc3luY0F0dHJpYnV0ZSgpIHx8IG1f
Zm9yY2VBc3luYyk7Ci0gICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLT5xdWV1ZVNjcmlw
dEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1bm5lcjo6QVNZ
TkNfRVhFQ1VUSU9OKTsKKyAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCkucXVldWVTY3Jp
cHRGb3JFeGVjdXRpb24oKnRoaXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFT
WU5DX0VYRUNVVElPTik7CiAgICAgfSBlbHNlIGlmICghaGFzU291cmNlQXR0cmlidXRlKCkgJiYg
bV9wYXJzZXJJbnNlcnRlZCAmJiAhZG9jdW1lbnQuaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpIHsK
ICAgICAgICAgQVNTRVJUKHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6Q2xhc3NpYyk7CiAgICAg
ICAgIG1fd2lsbEJlUGFyc2VyRXhlY3V0ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCmluZGV4IGZl
OGM5ZDQ2MGIwZmMzMTk2YzI2YWI0MjQ2ZTZmODVjNzU4MjQwMGIuLmY2M2Y0NWVlODE4YjMxYmU4
NjgwNjYyODZlY2VlNGQ5ODA5MzdlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgRXhjZXB0aW9uT3I8UmVmPFRleHQ+PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0
KQogICAgICAgICAgICAgcmV0dXJuIGluc2VydFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgfQogCi0gICAgZG9jdW1lbnQoKS50ZXh0Tm9kZVNwbGl0KHRoaXMpOworICAgIGRvY3VtZW50
KCkudGV4dE5vZGVTcGxpdCgqdGhpcyk7CiAKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAg
cmVuZGVyZXIoKS0+c2V0VGV4dFdpdGhPZmZzZXQoZGF0YSgpLCAwLCBvbGREYXRhLmxlbmd0aCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwCmluZGV4IGE3
ZGJlNTE0NmEzYzg4YzRlZmZjYTdmYmIyZjdkMjE5Mzc3NDI5ZDcuLjczZTNhNjIxZDZmOGY4MTZi
NWJkOGVkMTYwNzVmMmRmZWZiNzljYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9V
c2VyQWN0aW9uRWxlbWVudFNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rp
b25FbGVtZW50U2V0LmNwcApAQCAtMzIsOSArMzIsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmRpZERldGFjaChFbGVtZW50KiBlbGVtZW50
KQordm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZGlkRGV0YWNoKEVsZW1lbnQmIGVsZW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSk7CisgICAgQVNT
RVJUKGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKICAgICBjbGVhckZsYWdzKGVsZW1l
bnQsIElzQWN0aXZlRmxhZyB8IEluQWN0aXZlQ2hhaW5GbGFnIHwgSXNIb3ZlcmVkRmxhZyk7CiB9
CiAKQEAgLTQzLDMxICs0MywyOCBAQCB2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0Ojpkb2N1bWVu
dERpZFJlbW92ZUxhc3RSZWYoKQogICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAotYm9vbCBV
c2VyQWN0aW9uRWxlbWVudFNldDo6aGFzRmxhZ3MoY29uc3QgRWxlbWVudCogZWxlbWVudCwgdW5z
aWduZWQgZmxhZ3MpIGNvbnN0Citib29sIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpoYXNGbGFncyhj
b25zdCBFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykgY29uc3QKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICBFbGVtZW50RmxhZ01hcDo6
Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX2VsZW1lbnRzLmZpbmQoY29uc3RfY2FzdDxFbGVtZW50
Kj4oZWxlbWVudCkpOwotICAgIGlmIChmb3VuZCA9PSBtX2VsZW1lbnRzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGZvdW5kLT52YWx1ZSAmIGZsYWdzOworICAgIEFT
U0VSVChlbGVtZW50LmlzVXNlckFjdGlvbkVsZW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZWxlbWVu
dHMuZ2V0KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSkgJiBmbGFnczsKIH0KIAotdm9p
ZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6Y2xlYXJGbGFncyhFbGVtZW50KiBlbGVtZW50LCB1bnNp
Z25lZCBmbGFncykKK3ZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmNsZWFyRmxhZ3MoRWxlbWVu
dCYgZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCiB7Ci0gICAgaWYgKCFlbGVtZW50LT5pc1VzZXJB
Y3Rpb25FbGVtZW50KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fZWxlbWVudHMuZW5kKCkgPT0gbV9l
bGVtZW50cy5maW5kKGVsZW1lbnQpKTsKKyAgICBpZiAoIWVsZW1lbnQuaXNVc2VyQWN0aW9uRWxl
bWVudCgpKSB7CisgICAgICAgIEFTU0VSVCghbV9lbGVtZW50cy5jb250YWlucygmZWxlbWVudCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRWxlbWVudEZsYWdNYXA6Oml0ZXJhdG9y
IGZvdW5kID0gbV9lbGVtZW50cy5maW5kKGVsZW1lbnQpOworICAgIGF1dG8gZm91bmQgPSBtX2Vs
ZW1lbnRzLmZpbmQoJmVsZW1lbnQpOwogICAgIGlmIChmb3VuZCA9PSBtX2VsZW1lbnRzLmVuZCgp
KSB7Ci0gICAgICAgIGVsZW1lbnQtPnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKKyAgICAg
ICAgZWxlbWVudC5zZXRVc2VyQWN0aW9uRWxlbWVudChmYWxzZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICB1bnNpZ25lZCB1cGRhdGVkID0gZm91bmQtPnZhbHVlICYgfmZsYWdzOwog
ICAgIGlmICghdXBkYXRlZCkgewotICAgICAgICBlbGVtZW50LT5zZXRVc2VyQWN0aW9uRWxlbWVu
dChmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuc2V0VXNlckFjdGlvbkVsZW1lbnQoZmFsc2UpOwog
ICAgICAgICBtX2VsZW1lbnRzLnJlbW92ZShmb3VuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC03NSwxNyArNzIsMTYgQEAgdm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6Y2xlYXJGbGFn
cyhFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykKICAgICBmb3VuZC0+dmFsdWUgPSB1
cGRhdGVkOwogfQogCi12b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpzZXRGbGFncyhFbGVtZW50
KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykKK3ZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OnNl
dEZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQogewotICAgIEVsZW1lbnRG
bGFnTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2VsZW1lbnRzLmZpbmQoZWxlbWVudCk7Ci0gICAg
aWYgKHJlc3VsdCAhPSBtX2VsZW1lbnRzLmVuZCgpKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50
LT5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgICAgICByZXN1bHQtPnZhbHVlIHw9IGZsYWdz
OworICAgIGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50cy5hZGQoJmVsZW1lbnQsIGZsYWdzKTsKKyAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50LmlzVXNl
ckFjdGlvbkVsZW1lbnQoKSk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgfD0gZmxh
Z3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbGVtZW50LT5zZXRVc2VyQWN0aW9u
RWxlbWVudCh0cnVlKTsKLSAgICBtX2VsZW1lbnRzLmFkZChlbGVtZW50LCBmbGFncyk7CisgICAg
ZWxlbWVudC5zZXRVc2VyQWN0aW9uRWxlbWVudCh0cnVlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaAppbmRleCBjZTc2NGMzZWI4MzcxODc3YmZlOGEx
Yjg5MTU4YTY4YjcyNWY4M2VmLi5hNGM1OWI5MjBmZDlkMWZkYTQ1MTBmMjE4ZGM5MzgzOGQyMWJl
ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaApAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yNyw4
ICsyNyw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zNiwxNiArMzYsMTcgQEAgY2xhc3MgRWxlbWVudDsKIAogY2xh
c3MgVXNlckFjdGlvbkVsZW1lbnRTZXQgewogcHVibGljOgotICAgIGJvb2wgaXNGb2N1c2VkKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzRm9jdXNl
ZEZsYWcpOyB9Ci0gICAgYm9vbCBpc0FjdGl2ZShjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJl
dHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcpOyB9Ci0gICAgYm9vbCBpc0luQWN0
aXZlQ2hhaW4oY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVu
dCwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9Ci0gICAgYm9vbCBpc0hvdmVyZWQoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNIb3ZlcmVkRmxhZyk7IH0K
LSAgICB2b2lkIHNldEZvY3VzZWQoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0
RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0ZvY3VzZWRGbGFnKTsgfQotICAgIHZvaWQgc2V0QWN0
aXZlKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVu
YWJsZSwgSXNBY3RpdmVGbGFnKTsgfQotICAgIHZvaWQgc2V0SW5BY3RpdmVDaGFpbihFbGVtZW50
KiBlbGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIEluQWN0
aXZlQ2hhaW5GbGFnKTsgfQotICAgIHZvaWQgc2V0SG92ZXJlZChFbGVtZW50KiBlbGVtZW50LCBi
b29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzSG92ZXJlZEZsYWcpOyB9
CisgICAgYm9vbCBpc0ZvY3VzZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1
cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNGb2N1c2VkRmxhZyk7IH0KKyAgICBib29sIGlzQWN0aXZl
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQs
IElzQWN0aXZlRmxhZyk7IH0KKyAgICBib29sIGlzSW5BY3RpdmVDaGFpbihjb25zdCBFbGVtZW50
JiBlbGVtZW50KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJbkFjdGl2ZUNoYWlu
RmxhZyk7IH0KKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25z
dCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0hvdmVyZWRGbGFnKTsgfQogCi0gICAgdm9p
ZCBkaWREZXRhY2goRWxlbWVudCopOworICAgIHZvaWQgc2V0Rm9jdXNlZChFbGVtZW50JiBlbGVt
ZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzRm9jdXNlZEZs
YWcpOyB9CisgICAgdm9pZCBzZXRBY3RpdmUoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUp
IHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0FjdGl2ZUZsYWcpOyB9CisgICAgdm9pZCBz
ZXRJbkFjdGl2ZUNoYWluKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdz
KGVsZW1lbnQsIGVuYWJsZSwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9CisgICAgdm9pZCBzZXRIb3Zl
cmVkKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVu
YWJsZSwgSXNIb3ZlcmVkRmxhZyk7IH0KKworICAgIHZvaWQgZGlkRGV0YWNoKEVsZW1lbnQmKTsK
ICAgICB2b2lkIGRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpOwogCiBwcml2YXRlOgpAQCAtNTYs
MTMgKzU3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIElzRm9jdXNlZEZsYWcgICAgID0gMSA8PCAz
CiAgICAgfTsKIAotICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFi
bGUsIHVuc2lnbmVkIGZsYWdzKSB7IGVuYWJsZSA/IHNldEZsYWdzKGVsZW1lbnQsIGZsYWdzKSA6
IGNsZWFyRmxhZ3MoZWxlbWVudCwgZmxhZ3MpOyB9Ci0gICAgdm9pZCBzZXRGbGFncyhFbGVtZW50
KiwgdW5zaWduZWQpOwotICAgIHZvaWQgY2xlYXJGbGFncyhFbGVtZW50KiwgdW5zaWduZWQpOwot
ICAgIGJvb2wgaGFzRmxhZ3MoY29uc3QgRWxlbWVudCosIHVuc2lnbmVkIGZsYWdzKSBjb25zdDsK
KyAgICB2b2lkIHNldEZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlLCB1bnNpZ25l
ZCBmbGFncykgeyBlbmFibGUgPyBzZXRGbGFncyhlbGVtZW50LCBmbGFncykgOiBjbGVhckZsYWdz
KGVsZW1lbnQsIGZsYWdzKTsgfQorICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCYsIHVuc2lnbmVk
KTsKKyAgICB2b2lkIGNsZWFyRmxhZ3MoRWxlbWVudCYsIHVuc2lnbmVkKTsKKyAgICBib29sIGhh
c0ZsYWdzKGNvbnN0IEVsZW1lbnQmLCB1bnNpZ25lZCBmbGFncykgY29uc3Q7CiAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCB1bnNpZ25lZD4gRWxlbWVudEZsYWdNYXA7Ci0g
ICAgRWxlbWVudEZsYWdNYXAgbV9lbGVtZW50czsKKyAgICAvLyBGSVhNRTogVW5jbGVhciB3aHkg
dGhpcyBuZWVkcyB0byBiZSBhIFJlZlB0ci4gU2hvdWxkIGNoYW5nZSB0byBhIGNvbnN0IEVsZW1l
bnQqLgorICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCB1bnNpZ25lZD4gbV9lbGVtZW50czsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGQxNDcyNDI3NzIzNzQ2
OGQ0ZjYxZmZlMzNjNzVmZTQ2YTgxOTIzZGMuLjNiOGY5ZDc0MzY1OGRjYTViOWE0ZjY1ZThmOWRj
ZDQ4MTk0MmRlMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdl
JiByYW5nZSwKICAgICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNv
bnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGgKICAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBv
ZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKICAgICAvLyB3aGljaCBzcGFu
cyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJh
bmdlV2l0aEFsdGVybmF0aXZlLgotICAgIFJlZlB0cjxSYW5nZT4gY29ycmVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBo
UmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7CiAKICAgICBQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLnN0YXJ0
UG9zaXRpb24oKTsKICAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZl
LmNvbnRhaW5lck5vZGUoKSkKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFu
Z2UsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24g
b2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVw
bGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJh
Z3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoQXNSYW5nZS5nZXQoKSk7CisgICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaEFzUmFuZ2UucHRyKCkpOwogCiAgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBz
aW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9yaWdp
bmFsIHJhbmdlIGFyb3VuZC4KICAgICBhdXRvIHJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2Uu
Y2xvbmVSYW5nZSgpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwK
ICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogCiAgICAgZm9yIChhdXRv
IG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc1RvQWRkKQotICAgICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNjcmlwdGlvbkZv
ckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBlKSk7Cisg
ICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCpyZXBsYWNlbWVudFJhbmdlLCBtYXJrZXJUeXBlLCBt
YXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBl
LCBtYXJrZXJUeXBlKSk7CiB9CiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQpAQCAtMjY2LDEyICsy
NjYsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxp
ZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVMKICAgICBSZWY8RnJhbWU+IHByb3RlY3Rv
cihtX2ZyYW1lKTsKICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAg
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0
aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQo
KSk7CisgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmVuZCgpKTsKIAotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYg
bWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVt
b3ZlTWFya2VycyhyYW5nZS5nZXQoKSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBhdXRvJiBtYXJr
ZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy5yZW1vdmVN
YXJrZXJzKHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnRpbWVyRmlyZWQoKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1
CiAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkpCiAgICAgICAgICAgICBhcHBseUFsdGVybmF0
aXZlVGV4dFRvUmFuZ2UoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fdHlwZSwgbWFy
a2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKICAgICAgICAgZWxzZSBpZiAoIW1faXNEaXNt
aXNzZWRCeUVkaXRpbmcpCi0gICAgICAgICAgICByYW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2VXaXRoQWx0ZXJu
YXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0
KTsKKyAgICAgICAgICAgIHJhbmdlV2l0aEFsdGVybmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3Vt
ZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOgogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6CkBAIC00MTksNyArNDE5LDcg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSog
bm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6
IG5vZGUtPmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICBmb3Ig
KGF1dG8qIG1hcmtlciA6IG5vZGUtPmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKm5v
ZGUpKSB7CiAgICAgICAgIEFTU0VSVChtYXJrZXIpOwogICAgICAgICBpZiAocmVzcG9uZFRvTWFy
a2VyQXRFbmRPZldvcmQoKm1hcmtlciwgcG9zaXRpb24pKQogICAgICAgICAgICAgYnJlYWs7CkBA
IC00NDEsMTIgKzQ0MSwxMCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3Bv
bmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICgh
Y29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNv
bW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5lbmQoKSk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwotICAgIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFy
a2VycygpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rp
b24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAgICBh
dXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vy
cy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFy
a2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0
aW9uKTsKIH0KIAogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjphbHRlcm5hdGl2ZVRleHRDbGllbnQoKQpAQCAtNDc0LDggKzQ3Miw4IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRv
Y29ycmVjdGlvblJlc3BvCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1Jl
dmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpCiB7Ci0gICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29u
dGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygmY2hhbmdlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgY2hhbmdlZFJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCZjaGFuZ2VkUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBjaGFuZ2Vk
UmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGNo
YW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsK
IH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5n
ZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKQEAgLTQ4Myw5
ICs0ODEsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtDb3JyZWN0aW9u
KFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbgogICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6IG1hcmtlclR5cGVzRm9y
QXV0b2NvcnJlY3Rpb24oKSkgewogICAgICAgICBpZiAobWFya2VyVHlwZSA9PSBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQgfHwgbWFya2VyVHlwZSA9PSBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCkKLSAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCZyZXBsYWNlZFJhbmdlLCBt
YXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtl
cihyZXBsYWNlZFJhbmdlLCBtYXJrZXJUeXBlLCByZXBsYWNlZFN0cmluZyk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCZyZXBsYWNlZFJhbmdlLCBtYXJrZXJU
eXBlKTsKKyAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIG1hcmtl
clR5cGUpOwogICAgIH0KIH0KIApAQCAtNTA1LDcgKzUwMyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJl
Y3Rpb24oCiAgICAgICAgICAgICBjbGllbnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6RWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwog
ICAgIH0KIAotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygmcmFuZ2VPZkNvcnJlY3Rpb24sIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJrZXJzLnJlbW92ZU1hcmtl
cnMocmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
IH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rp
b25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmln
aW5hbFN0cmluZykKQEAgLTUyNCwxNSArNTIyLDE1IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25B
CiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0
ZXJQb3NpdGlvbiwgZW5kT2ZTZWxlY3Rpb24pOwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRl
eHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGlu
Z0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7CisgICAgU3RyaW5nIHN0cmluZyA9
IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5wdHIoKSk7CiAgICAgaWYgKHN0cmlu
Zy5pc0VtcHR5KCkgfHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJp
bmcubGVuZ3RoKCkgLSAxXSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hcmsgdGhpcyB3
aGl0ZXNwYWNlIHRvIGluZGljYXRlIHdlIGhhdmUgZGVsZXRlZCBhbiBhdXRvY29ycmVjdGlvbiBm
b2xsb3dpbmcgdGhpcwogICAgIC8vIHdoaXRlc3BhY2UuIFNvIGlmIHRoZSB1c2VyIHR5cGVzIHRo
ZSBzYW1lIG9yaWdpbmFsIHdvcmQgYWdhaW4gYXQgdGhpcyBwb3NpdGlvbiwgd2UKICAgICAvLyB3
b24ndCBhdXRvY29ycmVjdCBpdCBhZ2Fpbi4KLSAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKS5hZGRNYXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKTsKKyAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5hZGRN
YXJrZXIocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0
b2NvcnJlY3Rpb24sIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9u
KTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09u
VGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0
LCBSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVG9CZVJl
cGxhY2VkKQpAQCAtNTczLDIxICs1NzEsMTkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAg
ICBpZiAoIXNob3VsZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIFJlZlB0cjxSYW5n
ZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBt
YXJrZXIuc3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKLSAgICBpZiAo
IXdvcmRSYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBjdXJyZW50V29y
ZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gd29yZFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBw
bGFpblRleHQod29yZFJhbmdlLnB0cigpKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxlbmd0aCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9vcmlnaW5hbFRleHQgPSBjdXJyZW50V29y
ZDsKICAgICBzd2l0Y2ggKG1hcmtlci50eXBlKCkpIHsKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZzoKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsK
KyAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURk1vdmUod29yZFJhbmdlKTsKICAg
ICAgICAgbV9kZXRhaWxzID0gZW1wdHlTdHJpbmcoKTsKICAgICAgICAgc3RhcnRBbHRlcm5hdGl2
ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVTcGVsbGluZ1N1Z2dlc3Rpb25zKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6Ci0gICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAgICAgIG1fZGV0YWlscyA9
IG1hcmtlci5kZXNjcmlwdGlvbigpOwogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGlt
ZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwpAQCAtNTk3
LDcgKzU5Myw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFy
a2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgICAgIGF1dG8mIG1hcmtl
ckRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRh
dGEoKSk7CiAgICAgICAgIGlmIChjdXJyZW50V29yZCAhPSBtYXJrZXJEYXRhLm9yaWdpbmFsVGV4
dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5h
dGl2ZSA9IHdvcmRSYW5nZTsKKyAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURk1v
dmUod29yZFJhbmdlKTsKICAgICAgICAgbV9kZXRhaWxzID0gbWFya2VyRGF0YS5jb250ZXh0Owog
ICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZURp
Y3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCBkNmZkNzNjMjNhY2IzMTczNWQ4YzZkM2Fm
NTZhM2FiN2ZiODE5MjY4Li4xZTIzNWY2YjRkYzYzZmZmZDI1Y2IzN2U2ZGFjYTQ2ODNmNWFhM2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cApAQCAtNzY4LDEzICs3NjgsMTMgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycyhUZXh0JiBub2RlLCB1bnNpZ24KICAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBkb2N1bWVudCgpLm1hcmtl
cnMoKTsKICAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2VycyhtYXJrZXJDb250cm9sbGVyLm1h
cmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJm5vZGUsIG9mZnNldCwgJm5v
ZGUsIG9mZnNldCArIGNvdW50KSwgRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwogICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwgY291bnQsIHJlcGxhY2VtZW50VGV4dCk7
Ci0gICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
Jm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7
CisgICAgYXV0byBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJm5vZGUsIG9m
ZnNldCwgJm5vZGUsIG9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBtYXJrZXIgOiBtYXJrZXJzKQogI2lmIFBMQVRGT1JNKElPUykKLSAgICAg
ICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBl
KCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5t
ZXRhZGF0YSgpKTsKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2Us
IG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVz
KCksIG1hcmtlci5tZXRhZGF0YSgpKTsKICNlbHNlCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXIu
YWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRp
b24oKSk7Ci0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICBtYXJrZXJDb250cm9sbGVy
LmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCkp
OworI2VuZGlmCiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91
dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCmluZGV4IDI4MmJkYzllMzE1YjcyYzI1YWQ1YmU4
MmM2YmYwNzE0ZDVjMTdhYjkuLjc5MDY2NWZkNjcyZGZiNGQ2ZTIxNjgxMTJjNTc0ZTFlNGExN2Mz
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApAQCAt
NjEsOSArNjEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpY3Rh
dGlvbk1hcmtlclN1cHBsaWVyKGFsdGVybmF0aXZlcykpOwogICAgIH0KIAotICAgIHZvaWQgYWRk
TWFya2Vyc1RvVGV4dE5vZGUoVGV4dCogdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0
aW9uLCBjb25zdCBTdHJpbmcmIHRleHRUb0JlSW5zZXJ0ZWQpIG92ZXJyaWRlCisgICAgdm9pZCBh
ZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNl
cnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNlcnRlZCkgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS0+ZG9jdW1lbnQoKS5tYXJr
ZXJzKCk7CisgICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKICAgICAgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0ZXJu
YXRpdmVzKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YSBkYXRh
IHsgYWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4dCwgdGV4dFRvQmVJbnNlcnRlZC5zdWJzdHJp
bmcoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgpIH07CiAg
ICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0
ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5n
ZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShk
YXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBlNzliNjQ2ZTIyODk3MjAw
NWU1OGZlNTBmYmMyOTUzMjAzY2I3YWUzLi5hMmQ4NTM4MmVhODhmMzUwMTNjMWM5NjMyNGI1ZDNl
ZTY5YTg3Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTExNjUsNyArMTE2
NSw3IEBAIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYgZmlyc3QsIGNvbnN0
IE5vZGUmIHNlY29uZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIGZpcnN0RWxl
bWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGZpcnN0KTsKICAgICBhdXRvJiBzZWNvbmRFbGVtZW50
ID0gZG93bmNhc3Q8RWxlbWVudD4oc2Vjb25kKTsKLSAgICByZXR1cm4gZmlyc3RFbGVtZW50Lmhh
c1RhZ05hbWUoc2Vjb25kRWxlbWVudC50YWdRTmFtZSgpKSAmJiBmaXJzdEVsZW1lbnQuaGFzRXF1
aXZhbGVudEF0dHJpYnV0ZXMoJnNlY29uZEVsZW1lbnQpOworICAgIHJldHVybiBmaXJzdEVsZW1l
bnQuaGFzVGFnTmFtZShzZWNvbmRFbGVtZW50LnRhZ1FOYW1lKCkpICYmIGZpcnN0RWxlbWVudC5o
YXNFcXVpdmFsZW50QXR0cmlidXRlcyhzZWNvbmRFbGVtZW50KTsKIH0KIAogYm9vbCBpc05vblRh
YmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCA2NDI1MWNmMWRjN2Y2OWY1Y2FiYWNhNzA5ZGVjNWM3ZTg3NjU5NWUw
Li44YWIwYTFlMGNlZmViZjUzYjFkMDE1NmI0YjA2OWE5YmUyNTVmMTcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCkBAIC0xOTE4LDcgKzE5MTgsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3Jl
U3BlbGxpbmcoKQogICAgICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVk
UmFuZ2UpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAg
QVNTRVJUKHRleHQubGVuZ3RoKCkpOwpAQCAtMTkzNCw3ICsxOTM0LDcgQEAgdm9pZCBFZGl0b3I6
OmxlYXJuU3BlbGxpbmcoKQogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJh
bmdlKQotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVk
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFT
U0VSVCh0ZXh0Lmxlbmd0aCgpKTsKQEAgLTIxMDAsMTIgKzIxMDAsMTIgQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAg
ICAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiAhPSAtMSAmJiBncmFtbWFyRGV0YWls
Lmxlbmd0aCA+IDApOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBn
ZXRzIGNvbmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFy
YWdyYXBoCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFtbWFyUGhyYXNlT2Zmc2V0ICsg
Z3JhbW1hckRldGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5sZW5ndGgpOwotICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpiYWRHcmFt
bWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIGF1dG8gYmFkR3JhbW1h
clJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFt
bWFyUGhyYXNlT2Zmc2V0ICsgZ3JhbW1hckRldGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5s
ZW5ndGgpOworICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAg
ICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAg
ICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1h
clBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBn
cmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBn
cmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICBp
ZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewpAQCAtMjExNyw3ICsyMTE3LDcgQEAgdm9p
ZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKQogICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAg
ICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQobWlzc3BlbGxlZFdvcmQpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIobWlzc3BlbGxpbmdSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgfQogfQogCkBAIC0yMjUwLDEzICsyMjUwLDEw
IEBAIGJvb2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkKICAgICByZXR1cm4gY2xp
ZW50KCktPnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6OmNsZWFyTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxl
Y3Rpb24pCit2b2lkIEVkaXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG1vdmluZ1NlbGVjdGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBtb3ZpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBpZiAoc2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7
Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgIH0KKyAgICBpZiAoYXV0byBz
ZWxlY3RlZFJhbmdlID0gbW92aW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIHsg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciB9KTsKIH0K
IAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKQEAgLTI1NzgsMTQgKzI1NzUsMTQgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9
IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKICAgICAg
ICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5pc1NwZWxsaW5nTWFya2Vy
QWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxp
bmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CiAgICAgICAg
IH0gZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hciAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNvdmVycyhyZXN1bHRMb2Nh
dGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdExlbmd0aCA+
IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGRldGFp
bCA6IHJlc3VsdHNbaV0uZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwu
bGVuZ3RoID4gMCAmJiBkZXRhaWwubG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICAgICAgaWYg
KHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uICsgZGV0YWlsLmxv
Y2F0aW9uLCBkZXRhaWwubGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIGJhZEdy
YW1tYXJSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiArIGRldGFpbC5s
b2NhdGlvbiwgZGV0YWlsLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFk
R3JhbW1hclJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLnVzZXJE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdEVu
ZExvY2F0aW9uIDw9IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgJiYgcmVzdWx0RW5kTG9jYXRpb24g
Pj0gcGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKQpAQCAtMjY5OSw3ICsyNjk2LDcgQEAgdm9pZCBF
ZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcpCiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaCgqc2VsZWN0aW9uKTsK
ICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxz
ZSwgRWRpdEFjdGlvbkluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3Ro
KCkpOwotICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQsIFN0cmluZygpKTsKKyAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlKTsKICNlbHNlCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yODE0LDcgKzI4MTEsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0Zv
cldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAg
ICAgICBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwKICNlbmRpZgogICAgIH07Ci0gICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UucHRyKCksIG1hcmtlclR5cGVz
VG9SZW1vdmUsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29y
ZFJhbmdlLCBtYXJrZXJUeXBlc1RvUmVtb3ZlLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICBkb2N1bWVudCgpLm1hcmtlcnMo
KS5jbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwogfQogCkBAIC0zMjk5LDcgKzMyOTYsNyBAQCB1
bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IFJhbmdlKiByYW5nZSwgRmluZE9wdAogCiAgICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7CiAg
ICAgZG8gewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQo
KnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMgJiB+QmFja3dhcmRzKSk7CisgICAgICAgIGF1
dG8gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9u
cyAmIH5CYWNrd2FyZHMpKTsKICAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSkg
ewogICAgICAgICAgICAgaWYgKCFyZXN1bHRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0luU2hh
ZG93VHJlZSgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMxMSwxMCArMzMwOCwxMCBA
QCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAogCiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAg
ICAgaWYgKG1hdGNoZXMpCi0gICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQocmVzdWx0UmFuZ2Up
OworICAgICAgICAgICAgbWF0Y2hlcy0+YXBwZW5kKHJlc3VsdFJhbmdlLnB0cigpKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtYXJrTWF0Y2hlcykKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRleHRN
YXRjaCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmVzdWx0
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogCiAgICAgICAgIC8vIFN0b3AgbG9v
a2luZyBpZiB3ZSBoaXQgdGhlIHNwZWNpZmllZCBsaW1pdC4gQSBsaW1pdCBvZiAwIG1lYW5zIG5v
IGxpbWl0LgogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCkBA
IC0zNDYxLDEwICszNDU4LDEwIEBAIHZvaWQgRWRpdG9yOjpzY2FuUmFuZ2VGb3JUZWxlcGhvbmVO
dW1iZXJzKFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nCiAgICAgICAgIHVu
c2lnbmVkIHN1YnJhbmdlT2Zmc2V0ID0gc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRpdmVTdGFydFBv
c2l0aW9uOwogICAgICAgICB1bnNpZ25lZCBzdWJyYW5nZUxlbmd0aCA9IHJlbGF0aXZlRW5kUG9z
aXRpb24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gKyAxOwogCi0gICAgICAgIFJlZlB0cjxSYW5n
ZT4gc3VicmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHJhbmdlLCBzdWJyYW5nZU9mZnNl
dCwgc3VicmFuZ2VMZW5ndGgpOworICAgICAgICBhdXRvIHN1YnJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpzdWJyYW5nZShyYW5nZSwgc3VicmFuZ2VPZmZzZXQsIHN1YnJhbmdlTGVuZ3RoKTsKIAotICAg
ICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKHN1YnJhbmdlKTsKLSAgICAgICAgcmFuZ2Uub3duZXJE
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoc3VicmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpUZWxlcGhvbmVOdW1iZXIpOworICAgICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKHN1YnJh
bmdlLnB0cigpKTsKKyAgICAgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXIoc3VicmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOwogCiAgICAg
ICAgIHNjYW5uZXJQb3NpdGlvbiArPSByZWxhdGl2ZUVuZFBvc2l0aW9uICsgMTsKICAgICB9CkBA
IC0zNTI5LDExICszNTI2LDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmly
ZWQoKQogCiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91
bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmcpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGph
Y2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3Zl
TWFya2Vycygqd29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFz
ZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikpIHsK
ICAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3Rl
ZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycygqc2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0zNTc1LDcgKzM1NzIsNyBAQCBib29sIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlw
ZSwgaQogCiAgICAgdW5zaWduZWQgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pihmcm9tKTsKICAgICB1bnNpZ25lZCBpbnQgZW5kT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pihmcm9tICsgbGVuZ3RoKTsKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUp
OworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50
KCkubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUpOwogICAgIGZvciAoYXV0byogbWFya2VyIDog
bWFya2VycykgewogICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IHN0YXJ0T2Zm
c2V0ICYmIGVuZE9mZnNldCA8PSBtYXJrZXItPmVuZE9mZnNldCgpICYmIG1hcmtlci0+dHlwZSgp
ID09IG1hcmtlclR5cGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2OTMsNyArMzY5
MCw3IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShUZXh0Q2hlY2tpbmdS
ZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAKICAgICBSZWZQdHI8UmFuZ2U+IGluc2VydGVkQ2Fu
ZGlkYXRlUmFuZ2UgPSByYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRC
b3VuZGFyeShzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxh
Y2VtZW50Lmxlbmd0aCgpLCBEaXJlY3Rpb25CYWNrd2FyZCk7CiAgICAgaWYgKGluc2VydGVkQ2Fu
ZGlkYXRlUmFuZ2UpCi0gICAgICAgIGluc2VydGVkQ2FuZGlkYXRlUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGluc2VydGVkQ2FuZGlkYXRlUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5k
aWRhdGUucmVwbGFjZW1lbnQpOworICAgICAgICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigqaW5zZXJ0ZWRDYW5k
aWRhdGVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2NlcHRlZENh
bmRpZGF0ZS5yZXBsYWNlbWVudCk7CiAKICAgICBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAppbmRleCBlZmQ4NjUwOWExNWU2YzU4ZGJjOWE3MGYxOTkwYmY2ZjU5MDJmZGMyLi5mYmNk
MmZmZmFlZWVkNDUyNjkwMTM1N2NhNjM1OGMyMmExY2E0NGExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQg
SW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUo
KnRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAgICAgICAgIGVuZFBvc2l0aW9uID0gUG9zaXRp
b24odGV4dE5vZGUuZ2V0KCksIG9mZnNldCArIG1fdGV4dC5sZW5ndGgoKSk7CiAgICAgICAgIGlm
IChtX21hcmtlclN1cHBsaWVyKQotICAgICAgICAgICAgbV9tYXJrZXJTdXBwbGllci0+YWRkTWFy
a2Vyc1RvVGV4dE5vZGUodGV4dE5vZGUuZ2V0KCksIG9mZnNldCwgbV90ZXh0KTsKKyAgICAgICAg
ICAgIG1fbWFya2VyU3VwcGxpZXItPmFkZE1hcmtlcnNUb1RleHROb2RlKCp0ZXh0Tm9kZSwgb2Zm
c2V0LCBtX3RleHQpOwogCiAgICAgICAgIGlmIChtX3JlYmFsYW5jZVR5cGUgPT0gUmViYWxhbmNl
TGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbnNl
cnRpb24gbWF5IHJlcXVpcmUgYWRqdXN0aW5nIGFkamFjZW50IHdoaXRlc3BhY2UsIGlmIGl0IGlz
IHByZXNlbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRD
b21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKaW5k
ZXggOWJjOGIzOTk1NjdlZDc1MmFhZDE5NGI0NmQ4NjEzMjJkMjZkNzYxMC4uMTJlYTlkNDQ2MDY1
MTk3NjZhZmRjMDU3MmZiNTdmM2RhNTYyNDNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0VGV4dENvbW1hbmQuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBUZXh0OwogY2xhc3Mg
VGV4dEluc2VydGlvbk1hcmtlclN1cHBsaWVyIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dEluc2Vy
dGlvbk1hcmtlclN1cHBsaWVyPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dEluc2VydGlv
bk1hcmtlclN1cHBsaWVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZE1hcmtlcnNUb1RleHRO
b2RlKFRleHQqLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0
SW5zZXJ0ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWFya2Vyc1RvVGV4dE5vZGUoVGV4
dCYsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJpbmcmIHRleHRJbnNlcnRl
ZCkgPSAwOwogcHJvdGVjdGVkOgogICAgIFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcigpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCBhMjk0YmIz
MDM3YTQ4MWI3NDA0MmZiN2Q1MWJkNjI0ZjdlOWY5OGIyLi5hZmM5NGM5OWZlNjI1ZTY4ZWFlMjU2
MjY1NmNlMWVhYmM3Yjc1MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2Vl
ZChpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQKICAgICAgICAg
aWYgKHJlcXVlc3REYXRhLm1hc2soKSAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKQogICAgICAg
ICAgICAgbWFya2VyVHlwZXMgfD0gRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI7CiAgICAgICAgIGlm
ICghbWFya2VyVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygmbV9wcm9jZXNzaW5nUmVxdWVzdC0+Y2hlY2tpbmdS
YW5nZSgpLCBtYXJrZXJUeXBlcyk7CisgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2Uo
KSwgbWFya2VyVHlwZXMpOwogICAgIH0KICAgICBkaWRDaGVjayhzZXF1ZW5jZSwgcmVzdWx0cyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3Bw
CmluZGV4IDlhZDA5MGYwOGY3NDcwOWNhZDExNzU4YTU3NDY0Yjk4YWUwNGEwYTUuLjliNzc2MTAy
ZjlmMTVhYzk2Njg5OTM4MDk3Y2IyMmVlYTJmZDBiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQg
U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgbV90ZXh0MSA9IFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKHByZWZpeFRleHQpKTsKICAgICBBU1NFUlQobV90ZXh0
MSk7Ci0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0Mi5wdHIoKSwg
MCwgbV9vZmZzZXQsIG1fdGV4dDEuZ2V0KCksIDApOworICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmNvcHlNYXJrZXJzKG1fdGV4dDIsIDAsIG1fb2Zmc2V0LCAqbV90ZXh0MSwgMCk7CiAKICAgICBp
bnNlcnRUZXh0MUFuZFRyaW1UZXh0MigpOwogfQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFNwbGl0
VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogCiAgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgw
LCBwcmVmaXhUZXh0KTsKIAotICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1f
dGV4dDEuZ2V0KCksIDAsIHByZWZpeFRleHQubGVuZ3RoKCksIG1fdGV4dDIucHRyKCksIDApOwor
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKCptX3RleHQxLCAwLCBwcmVmaXhU
ZXh0Lmxlbmd0aCgpLCBtX3RleHQyLCAwKTsKICAgICBtX3RleHQxLT5yZW1vdmUoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGY2
NTQxMDY0YmZlMzg5NWI5MDIyMGU0YTUzMWM5ZWZkMWIyZjkzNmUuLjhkOTU4MjQwMzU2ZGM3NzJj
NWE1NzJhY2QwMjQwMGEzODg4OWNmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTI1MiwxNyArMjUyLDE3IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09m
ZnNldCwgYm9vCiAKICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNz
cGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IHRleHRMZW5ndGggJiYg
bWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsg
bWlzc3BlbGxpbmdMZW5ndGggPD0gdGV4dExlbmd0aCkgewogICAgICAgICAgICAgLy8gQ29tcHV0
ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlz
c3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
ICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSht
X3JhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7CiAKICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVk
IG1pc3NwZWxsaW5nIGFuZCBpdHMgb2Zmc2V0LgogICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3Nw
ZWxsaW5nKSB7CiAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJl
bnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247CiAgICAgICAgICAgICAgICAgZmly
c3RNaXNzcGVsbGluZyA9IHRleHQuc3Vic3RyaW5nKG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3Nw
ZWxsaW5nTGVuZ3RoKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZS5wdHIoKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgLy8gU3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQuCi0gICAgICAgICAg
ICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOworICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKIAogICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2lu
ZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywgYW5kIG5vdCBhbGwgaW5zdGFuY2VzLgogICAg
ICAgICAgICAgaWYgKCFtYXJrQWxsKQpAQCAtNDI2LDggKzQyNiw4IEBAIGludCBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICht
YXJrQWxsKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0g
c3RhcnRPZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7Ci0gICAgICAg
ICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1h
clJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLCBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3MgZWFybGllciB0aGFu
IG91ciBjdXJyZW50IGNhbmRpZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGluIGEgZ3VhcmFudGVl
ZCBvcmRlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlv
bkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29t
bWFuZElPUy5jcHAKaW5kZXggYzE5MzJkZWUxZGE0YThkMmFhYmUyNjYyMDFmZjAwNDExOTQ2MjZl
OS4uZWU5Mzk5YTc2ZDI1ODVmODU3MWU5MzBiZWIxZWQzZDFmMWJkMDNjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAgLTU1
LDcgKzU1LDcgQEAgdm9pZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKICAgICAgICAg
aW5wdXRUZXh0KGZpcnN0SW50ZXJwcmV0YXRpb24sIHRydWUpOwogCiAgICAgICAgIGlmIChpbnRl
cnByZXRhdGlvbnMuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoZW5kaW5nU2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgaW50ZXJwcmV0YXRpb25zKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXNNYXJrZXIoKmVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCksIGludGVycHJl
dGF0aW9ucyk7CiAKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSk7CiAgICAgfQpAQCAtNzEsNyArNzEsOCBA
QCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogCiAgICAgaWYgKHN0YXJ0SW5k
ZXggPj0gMCkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVu
dCgpLCBzdGFydEluZGV4LCBlbmRJbmRleCwgdHJ1ZSk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgbV9tZXRh
ZGF0YSk7CisgICAgICAgIEFTU0VSVChyZXN1bHRSYW5nZSk7IC8vIEZJWE1FOiBXaGF0IGd1YXJh
bnRlZXMgdGhpcz8KKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVz
dWx0TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCAzNGJmMjc5N2QxNDNkMTkzNTc3YzJkOGU1
OTZiYzIxYzJmNjJhNjVjLi4wZThkOTYyOTk0MmQ1NzllMzQ2OGMwZjg5YWY0ODViYzE2OGQ4NGY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTEzMiw3ICsxMzIsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwoQmxvYiYgYmxvYiwg
RmlsZVJlYWRlckxvYWRlcjo6UmVhZFR5cAogICAgIGlmIChtX3N0YXRlID09IExPQURJTkcpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAK
ICAgICBtX2Jsb2IgPSAmYmxvYjsKICAgICBtX3JlYWRUeXBlID0gdHlwZTsKQEAgLTE2OSw3ICsx
NjksNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmFib3J0KCkKICAgICAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogCiAgICAgICAgIC8vIEFsbCBwb3NzaWJsZSBldmVudHMg
aGF2ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5LgotICAg
ICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIH0pOwogfQogCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBGaWxl
UmVhZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxv
YWRlbmRFdmVudCk7CiAgICAgCiAgICAgLy8gQWxsIHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVk
IGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgdW5zZXRQZW5k
aW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQog
CiB2b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoaW50IGVycm9yQ29kZSkKQEAgLTIyMSw3ICsyMjEs
NyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoaW50IGVycm9yQ29kZSkKICAgICBmaXJlRXZl
bnQoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCk7CiAgICAgCiAgICAgLy8gQWxsIHBvc3NpYmxl
IGV2ZW50cyBoYXZlIGZpcmVkIGFuZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZp
dHkuCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmZpcmVFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3Bw
CmluZGV4IDg1ZGI0MzgzZWZmYTYxZDQxMTE5NjhkNzA2NTI0YmNmMTc4MjZmODQuLjgxNGU5MTZm
OWJmZjExZDRkNmY1YzIwZDM2ODg0ZTk1MTQ5YmQxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEFwcGxldEVsZW1lbnQuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiRWxlbWVu
dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQYXJhbUVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVj
dC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCmluZGV4IGMz
ZjQ5ODQ1MGZmYTdmOGUxNzA2YmZjMDg4ZTUwYjNmZjllOTg2YTUuLjQ4NGJjYjc2YzFlMDAxMjA1
NWI3ODc0OGNjMjk1ZTU2NjU5MjQ3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERldGFpbHNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRh
aWxzRWxlbWVudC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVu
dD4gSFRNTERldGFpbHNFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZN
b3ZlKHN0eWxlKSk7CiB9CiAKLXZvaWQgSFRNTERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxEZXRhaWxzRWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIGF1dG8g
c3VtbWFyeVNsb3QgPSBIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgp
KTsKICAgICBzdW1tYXJ5U2xvdC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihu
YW1lQXR0ciwgc3VtbWFyeVNsb3ROYW1lKCkpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSFRN
TERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJv
b3QpCiAgICAgbV9kZWZhdWx0U3VtbWFyeSA9IGRlZmF1bHRTdW1tYXJ5LnB0cigpOwogCiAgICAg
c3VtbWFyeVNsb3QtPmFwcGVuZENoaWxkKGRlZmF1bHRTdW1tYXJ5KTsKLSAgICByb290LT5hcHBl
bmRDaGlsZChzdW1tYXJ5U2xvdCk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChzdW1tYXJ5U2xvdCk7
CiAKICAgICBtX2RlZmF1bHRTbG90ID0gSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywg
ZG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCFtX2lzT3Blbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRGV0YWlsc0VsZW1lbnQuaAppbmRleCBmMWM0NmZmMzVkNzY2MjRhZmVlM2VjZWI2NDIwNDIz
NjJmMmQzYmYwLi5lNDgzNjU3MTYwMzg0NjgwMmU4N2EyYzE3OGU5NzdiMDFkM2E4ZGY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHJpdmF0ZToKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRl
cmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogICAg
IHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpIGZpbmFsOwogICAgIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9pc09wZW4geyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IGNiZGZkZDNlZmNhYWRhZjhmYmY0MDBiNmMy
NTQ4MGE0M2FlZDMyMDMuLjgxZWYxN2VmYjE0YzlkZmZmYmI4ODlkYTU5ZTkyMzk3ZWU1ODdhNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTg4LDYgKzg4LDE2IEBAIEhU
TUxEb2N1bWVudDo6SFRNTERvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIERv
Y3VtZW50Q2xhc3NGbGFncyBkb2N1CiAgICAgY2xlYXJYTUxWZXJzaW9uKCk7CiB9CiAKK1JlZjxI
VE1MRG9jdW1lbnQ+IEhUTUxEb2N1bWVudDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJM
JiB1cmwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1
cmwsIEhUTUxEb2N1bWVudENsYXNzKSk7Cit9CisKK1JlZjxIVE1MRG9jdW1lbnQ+IEhUTUxEb2N1
bWVudDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYgZnJhbWUsIGNvbnN0IFVSTCYg
dXJsKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudCgmZnJhbWUsIHVy
bCwgSFRNTERvY3VtZW50Q2xhc3MsIFN5bnRoZXNpemVkKSk7Cit9CisKIEhUTUxEb2N1bWVudDo6
fkhUTUxEb2N1bWVudCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAppbmRleCAy
M2RlNGRjMWM2ODVhMjhhMmY0MGU4YWNkNWNmMGE2ZDhmYzI3YzZmLi4xY2Q1YzExNTRkYThkNjU2
ZGE4MjVkMjcxMDAwZjI3Y2ZiYjg2MDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgK
QEAgLTI4LDE2ICsyOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTERvY3Vt
ZW50IDogcHVibGljIERvY3VtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEhUTUxEb2N1
bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3Vt
ZW50Q2xhc3MpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudD4gY3JlYXRl
U3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1cmwsIEhU
TUxEb2N1bWVudENsYXNzLCBTeW50aGVzaXplZCkpOwotICAgIH0KLQorICAgIHN0YXRpYyBSZWY8
SFRNTERvY3VtZW50PiBjcmVhdGUoRnJhbWUqLCBjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgUmVm
PEhUTUxEb2N1bWVudD4gY3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYsIGNvbnN0IFVS
TCYpOwogICAgIHZpcnR1YWwgfkhUTUxEb2N1bWVudCgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IHdpZHRoKCk7CkBAIC02NCw3ICs1Niw3IEBAIHByb3RlY3RlZDoKICAgICBIVE1MRG9jdW1l
bnQoRnJhbWUqLCBjb25zdCBVUkwmLCBEb2N1bWVudENsYXNzRmxhZ3MgPSAwLCB1bnNpZ25lZCBj
b25zdHJ1Y3Rpb25GbGFncyA9IDApOwogCiBwcml2YXRlOgotICAgIGJvb2wgaXNGcmFtZVNldCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IGZpbmFsOwogICAg
IFJlZjxEb2N1bWVudFBhcnNlcj4gY3JlYXRlUGFyc2VyKCkgb3ZlcnJpZGU7CiAgICAgUmVmPERv
Y3VtZW50PiBjbG9uZURvY3VtZW50V2l0aG91dENoaWxkcmVuKCkgY29uc3QgZmluYWw7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBlMzI1NjdhMmVhMTRhOTVm
NmU5NjhlODlkMTRhODQ5MmIwNTRjNWJjLi5lMWFkZDI2MDIzNGZhM2IwMzQ3MjQyOTIxNDIzZmNh
OTg0MTNhODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC03
Nyw3ICs3Nyw3IEBAIEhUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxlbWVudCgpCiB7CiAgICAg
ZG9jdW1lbnQoKS5mb3JtQ29udHJvbGxlcigpLndpbGxEZWxldGVGb3JtKHRoaXMpOwogICAgIGlm
ICghc2hvdWxkQXV0b2NvbXBsZXRlKCkpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgIG1f
ZGVmYXVsdEJ1dHRvbiA9IG51bGxwdHI7CiAgICAgZm9yIChhdXRvJiBhc3NvY2lhdGVkRWxlbWVu
dCA6IG1fYXNzb2NpYXRlZEVsZW1lbnRzKQpAQCAtNDMxLDkgKzQzMSw5IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpCiAgICAgICAgIG1fYXR0cmlidXRlcy5zZXRBY2NlcHRDaGFyc2V0KHZhbHVl
KTsKICAgICBlbHNlIGlmIChuYW1lID09IGF1dG9jb21wbGV0ZUF0dHIpIHsKICAgICAgICAgaWYg
KCFzaG91bGRBdXRvY29tcGxldGUoKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KQEAgLTgwMiw4
ICs4MDIsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzdW1lRnJvbURvY3VtZW50U3VzcGVu
c2lvbigpCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1l
bnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCiB7CiAgICAgaWYgKCFzaG91
bGRBdXRvY29tcGxldGUoKSkgewotICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBvbGREb2N1
bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAg
ICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
KnRoaXMpOwogICAgIH0KIAogICAgIEhUTUxFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVF
bGVtZW50LmNwcAppbmRleCBkMzAzMjJkYzBjNDhmYjgyMDZlYWJiNjZjYWVmMmI4ZmU2OTdiNjRm
Li4zYmI3ZTRhN2U3YjBkNWMyOWRkYWQ2MzNmZTMyNWM3MGM1ZmRiMDI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
aW5kZXggYzA4Y2YzMzcwYzJhMzFhZDMwMzNiOWY2MThmYTk1ZDAwMjMwNmNjMS4uNjhiMWI0ZWZm
YjJhMjQ3ZWVjOTFhZGE2N2M0M2YwZmMwNjAxNGQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMzksNyArMTM5LDcgQEAgSFRNTEltYWdlTG9hZGVyJiBI
VE1MSW5wdXRFbGVtZW50OjplbnN1cmVJbWFnZUxvYWRlcigpCiAgICAgcmV0dXJuICptX2ltYWdl
TG9hZGVyOwogfQogCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCopCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpCiB7CiAgICAgbV9pbnB1dFR5cGUtPmNyZWF0ZVNoYWRv
d1N1YnRyZWUoKTsKICAgICB1cGRhdGVJbm5lclRleHRFbGVtZW50RWRpdGFiaWxpdHkoKTsKQEAg
LTE0OCw3ICsxNDgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNo
YWRvd1Jvb3QoU2hhZG93Um9vdCopCiBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVu
dCgpCiB7CiAgICAgaWYgKG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KCp0aGlzKTsKIAogICAgIC8vIE5lZWQgdG8gcmVtb3ZlIGZvcm0gYXNzb2NpYXRpb24gd2hpbGUg
dGhpcyBpcyBzdGlsbCBhbiBIVE1MSW5wdXRFbGVtZW50CiAgICAgLy8gc28gdGhhdCB2aXJ0dWFs
IGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGNvcnJlY3RseS4KQEAgLTE1Niw3ICsxNTYsNyBAQCBIVE1M
SW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgLy8gc2V0Rm9ybSgwKSBtYXkg
cmVnaXN0ZXIgdGhpcyB0byBhIGRvY3VtZW50LWxldmVsIHJhZGlvIGJ1dHRvbiBncm91cC4KICAg
ICAvLyBXZSBzaG91bGQgdW5yZWdpc3RlciBpdCB0byBhdm9pZCBhY2Nlc3NpbmcgYSBkZWxldGVk
IG9iamVjdC4KICAgICBpZiAoaXNSYWRpb0J1dHRvbigpKQotICAgICAgICBkb2N1bWVudCgpLmZv
cm1Db250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24odGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJl
bW92ZUJ1dHRvbigqdGhpcyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9o
YXNUb3VjaEV2ZW50SGFuZGxlcikKICAgICAgICAgZG9jdW1lbnQoKS5kaWRSZW1vdmVFdmVudFRh
cmdldE5vZGUoKnRoaXMpOwpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0Q2hlY2tlZChib29sIG5vd0NoZWNrZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IgZXZl
bnRCCiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAgaWYgKFJhZGlvQnV0
dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9u
cy0+dXBkYXRlQ2hlY2tlZFN0YXRlKHRoaXMpOworICAgICAgICBidXR0b25zLT51cGRhdGVDaGVj
a2VkU3RhdGUoKnRoaXMpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxl
KCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLnN0YXRlQ2hh
bmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRlKTsKICAgICB1cGRh
dGVWYWxpZGl0eSgpOwpAQCAtMTQyNSwxMyArMTQyNSwxMyBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6Om5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVn
aXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAgICAgaWYgKG5lZWRzU3Vz
cGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAg
ICAgaWYgKCFuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1bWVudCgpLnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRv
Y3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7
CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29u
c3QKQEAgLTE1MzAsMTEgKzE1MzAsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRNb3Zl
VG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXcKIAogICAg
IC8vIEFsd2F5cyB1bnJlZ2lzdGVyIGZvciBjYWNoZSBjYWxsYmFja3Mgd2hlbiBsZWF2aW5nIGEg
ZG9jdW1lbnQsIGV2ZW4gaWYgd2Ugd291bGQgb3RoZXJ3aXNlIGxpa2UgdG8gYmUgcmVnaXN0ZXJl
ZAogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKSB7Ci0gICAgICAgIG9sZERvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAg
ICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRo
aXMpOworICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KICAgICBpZiAoaXNSYWRpb0J1dHRv
bigpKQotICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3Jv
dXBzKCkucmVtb3ZlQnV0dG9uKHRoaXMpOworICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJv
bGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0aGlzKTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5kbGVyKSB7CiAgICAg
ICAgIG9sZERvY3VtZW50LmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhpcyk7CkBAIC0xNTYx
LDcgKzE1NjEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hh
bmdlZCgpCiB7CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmli
dXRlQ2hhbmdlZCgpOwogICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlv
QnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMtPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdl
ZCh0aGlzKTsKKyAgICAgICAgYnV0dG9ucy0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCp0aGlz
KTsKICAgICBtX2lucHV0VHlwZS0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiB9CiAKQEAg
LTE4MzksNyArMTgzOSw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNJblJlcXVpcmVkUmFk
aW9CdXR0b25Hcm91cCgpCiB7CiAgICAgQVNTRVJUKGlzUmFkaW9CdXR0b24oKSk7CiAgICAgaWYg
KFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAg
ICAgcmV0dXJuIGJ1dHRvbnMtPmlzSW5SZXF1aXJlZEdyb3VwKHRoaXMpOworICAgICAgICByZXR1
cm4gYnV0dG9ucy0+aXNJblJlcXVpcmVkR3JvdXAoKnRoaXMpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtMTg3MSwxNCArMTg3MSwxNCBAQCBSYWRpb0J1dHRvbkdyb3VwcyogSFRNTElucHV0
RWxlbWVudDo6cmFkaW9CdXR0b25Hcm91cHMoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjphZGRUb1JhZGlvQnV0dG9uR3JvdXAoKQogewotICAgIGlmIChSYWRpb0J1dHRv
bkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRvbnMt
PmFkZEJ1dHRvbih0aGlzKTsKKyAgICBpZiAoYXV0byogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3Jv
dXBzKCkpCisgICAgICAgIGJ1dHRvbnMtPmFkZEJ1dHRvbigqdGhpcyk7CiB9CiAKIGlubGluZSB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbW92ZUZyb21SYWRpb0J1dHRvbkdyb3VwKCkKIHsKLSAg
ICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQot
ICAgICAgICBidXR0b25zLT5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgaWYgKGF1dG8qIGJ1dHRv
bnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQorICAgICAgICBidXR0b25zLT5yZW1vdmVCdXR0b24o
KnRoaXMpOwogfQogCiB1bnNpZ25lZCBIVE1MSW5wdXRFbGVtZW50OjpoZWlnaHQoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBkMjYzMjdmZjgxZGE2MzQ5
NmYwMzlkNzNkYzBhNzAxYTc2N2IyYmQ5Li5iODNhYWUwYmNkYjg5YWM3ZTU2MTQzZTJhNzFhYmZm
OTA3YzBiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMzQx
LDcgKzM0MSw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZW51bSBBdXRvQ29tcGxldGVT
ZXR0aW5nIHsgVW5pbml0aWFsaXplZCwgT24sIE9mZiB9OwogCi0gICAgdm9pZCBkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgdm9pZCB3aWxsQ2hhbmdl
Rm9ybSgpIGZpbmFsOwogICAgIHZvaWQgZGlkQ2hhbmdlRm9ybSgpIGZpbmFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggODFhOTA4Yzg1MjlkZDMxOTc1YmEw
YWQ2ZjA1N2M4NTEzYWM5MDBhNS4uOTZkMGFiMzkwYzc5ZDI1ODNlMTllZTQzYTI1NGIxNmJlYmU1
NjUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC02NjMs
MzMgKzY2MywzMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKICAgICBtX21lZGlhU2Vzc2lvbi0+cmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0
KQotICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAg
ICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICNpZiAhUExB
VEZPUk0oSU9TKQotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3Mo
dGhpcyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNh
bGxiYWNrcygqdGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC5yZWdp
c3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1l
bnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAobV9yZXF1aXJlQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9u
UHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC5yZWdp
c3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChtX21lZGlhQ29u
dHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJG
b3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVu
dC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAg
IGRvY3VtZW50LnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JBbGxvd3NN
ZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAotICAg
IGRvY3VtZW50LmFkZEF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgZG9jdW1lbnQuYWRkQXVkaW9Q
cm9kdWNlcigqdGhpcyk7CiAgICAgYWRkRWxlbWVudFRvRG9jdW1lbnRNYXAoKnRoaXMsIGRvY3Vt
ZW50KTsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC03MDIsMzMgKzcwMiwzMyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3Vt
ZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAg
ZG9jdW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudC5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCiAjaWYgIVBMQVRGT1JN
KElPUykKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhp
cyk7Ci0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVD
YWxsYmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC51
bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBk
b2N1bWVudC51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKG1fcmVxdWlyZUNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1
bWVudC51bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYg
KG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFj
a3MoKnRoaXMpOwogICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1l
bnQudW5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlz
KTsKKyAgICBkb2N1bWVudC5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKICAgICByZW1vdmVF
bGVtZW50RnJvbURvY3VtZW50TWFwKCp0aGlzLCBkb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpz
ZWxlY3RNZWRpYVJlc291cmNlKCkKICAgICAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNh
blN0YXJ0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCA9IHRydWU7Ci0gICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cigqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM5MDMsNyArMzkwMyw3IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKFJlZjxUZXh0VHJhY2s+JiYgdHJh
Y2spCiAgICAgaWYgKCFtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KSB7CiAgICAgICAgIG1fcmVxdWlyZUNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mg
PSB0cnVlOwogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwot
ICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxs
YmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICAgICAgbV9jYXB0aW9uRGlzcGxheU1vZGUgPSBwYWdlLT5n
cm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgIH0K
QEAgLTUzNTUsNyArNTM1NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBs
YXllcihEZWxheWVkQWN0aW9uVHlwZSBmbGFncykKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGls
TWVkaWFDYW5TdGFydCkgewogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCA9
IGZhbHNlOwotICAgICAgICBkb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRo
aXMpOwogICAgIH0KIAogICAgIGlmIChtX3BsYXllcikgewpAQCAtNTQ4OSw3ICs1NDg5LDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWUoKQogICAgIHNldFNob3VsZEJ1ZmZlckRhdGEo
dHJ1ZSk7CiAKICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wYWdlQWxsb3dzUGxheWJhY2tBZnRl
clJlc3VtaW5nKCp0aGlzKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlz
dGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHNldFBhdXNlZEludGVybmFsKGZhbHNlKTsKIApA
QCAtNjk5OCw3ICs2OTk4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRDb250cm9sbGVy
SlNQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlMKICAgICBjb250cm9s
bGVyT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoY29udHJvbGxlck9iamVjdCwgZXhlYywgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZSksIHByb3BlcnR5VmFs
dWUsIHByb3BlcnR5U2xvdCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgREVC
VUdfTE9HKFRISVMpOwogCkBAIC03MDk3LDkgKzcwOTcsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sIGRlcGVuZHNP
blBhZwogICAgIG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yID0gZGVwZW5k
c09uUGFnZVNjYWxlOwogCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxl
RmFjdG9yKQotICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAgIGVsc2UKLSAgICAgICAgZG9j
dW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlz
KTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZENhbGxiYWNrcygqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVk
aWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDFiMTAxMzAyM2MzNTVjZmE3ODE4MmY5MTI1YWMwYjY5
M2FhNDMwMjAuLjlhMzljODQzY2ZiMGY4YWM1OTRmZGNmYzUxYWY3NmZiZDc4MmFkNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC04MzAsNyArODMwLDcgQEAgcHJp
dmF0ZToKICAgICBTbGVlcFR5cGUgc2hvdWxkRGlzYWJsZVNsZWVwKCkgY29uc3Q7CiAKICNpZiBF
TkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmKSBvdmVycmlkZTsKICAgICBET01XcmFwcGVyV29ybGQmIGVu
c3VyZUlzb2xhdGVkV29ybGQoKTsKICAgICBib29sIGVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3Rl
ZFNjcmlwdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNw
cAppbmRleCAwMjM5YjMzNWM4MWZkOWY4OTVmYzA3OGJmMDE5MTIyMWU1YTEzNmU0Li5hNjc4YTIw
MGE4NTMwODAyYTUxMzI4NWQ1ZTU3YzVlM2ExYWFjNWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGVyRWxlbWVudC5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCBSZW5kZXJNZXRlciogSFRN
TE1ldGVyRWxlbWVudDo6cmVuZGVyTWV0ZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwog
fQogCi12b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hh
ZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIEFTU0VSVCghbV92YWx1ZSk7CiAKQEAg
LTIzMSwxMyArMjMxLDEzIEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQogCiAgICAgYXV0byBzdHlsZSA9IEhUTUxTdHls
ZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OnN0eWxlVGFnLCBkb2N1bWVudCgpLCBmYWxzZSk7
CiAgICAgc3R5bGUtPnNldFRleHRDb250ZW50KHNoYWRvd1N0eWxlKTsKLSAgICByb290LT5hcHBl
bmRDaGlsZChzdHlsZSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChzdHlsZSk7CiAKICAgICAvLyBQ
c2V1ZG9zIGFyZSBzZXQgdG8gYWxsb3cgYXV0aG9yIHN0eWxpbmcuCiAgICAgYXV0byBpbm5lciA9
IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgaW5uZXItPnNldElkQXR0
cmlidXRlKCJpbm5lciIpOwogICAgIGlubmVyLT5zZXRQc2V1ZG8oIi13ZWJraXQtbWV0ZXItaW5u
ZXItZWxlbWVudCIpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKGlubmVyKTsKKyAgICByb290LmFw
cGVuZENoaWxkKGlubmVyKTsKIAogICAgIGF1dG8gYmFyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKICAgICBiYXItPnNldElkQXR0cmlidXRlKCJiYXIiKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKaW5kZXggNjA0YTY1YTllM2FiMmZjMzgzZjRmNjBi
MWEwM2YwMTkyZjhjMWJlMi4uNDg2NWE2ZGI3ZDhhYzIwMDhhOGVlNjhhYTdiZjE3YzI5ZTZkMGQy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKQEAgLTc1LDcgKzc1LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkRWxlbWVudFN0YXRl
Q2hhbmdlKCk7Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3Qq
KSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYp
IGZpbmFsOwogCiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX3ZhbHVlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAppbmRleCBkMTBjMzdmYjIyODgxYzEz
YzMwZjA3YzdiOTM0ZjkzMjc1NDZmMWVhLi5lMTE4YmRlMWRkYzIyM2E5M2I3MTg0YmE2MDc3ODkx
Y2NhYTJiNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3Bw
CkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEFwcGxldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5jcHAKaW5kZXggZTJlMzFhMTU1MzYxMDk2YTU2YWZkODQzYzMwMDJmMDg1ZjQ5ZTFkYS4u
OWRjNWZmMWFhOTBmYzNhNmQ0Mjc1NDIxMmM1ZmZiZDNlMmM0OTVlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKQEAgLTI5MiwxMyArMjkyLDEzIEBAIHZvaWQg
SFRNTFBsdWdJbkVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZShEaXNwbGF5U3RhdGUgc3RhdGUpCiAg
ICAgICAgIG1fc3dhcFJlbmRlcmVyVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLXZvaWQg
SFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCog
cm9vdCkKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBpZiAoIW1fcGx1Z2luUmVwbGFjZW1lbnQgfHwgIWRv
Y3VtZW50KCkucGFnZSgpIHx8IGRpc3BsYXlTdGF0ZSgpICE9IFByZXBhcmluZ1BsdWdpblJlcGxh
Y2VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgcm9vdC0+c2V0UmVzZXRTdHlsZUlu
aGVyaXRhbmNlKHRydWUpOwotICAgIGlmIChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVw
bGFjZW1lbnQoKnJvb3QpKSB7CisgICAgcm9vdC5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1
ZSk7CisgICAgaWYgKG1fcGx1Z2luUmVwbGFjZW1lbnQtPmluc3RhbGxSZXBsYWNlbWVudChyb290
KSkgewogICAgICAgICBzZXREaXNwbGF5U3RhdGUoRGlzcGxheWluZ1BsdWdpblJlcGxhY2VtZW50
KTsKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAppbmRleCA1MmEyOTJhYmIy
OTZjNDkzYTJlNmI4MzhhZDMwYzBiMWIwZjMwNGQyLi4xMWZlNjAyY2UxZTFkMDc1ZjVkY2UxNWIx
YzNkMWIwOTg4YzkxNmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5o
CkBAIC05OCw3ICs5OCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0
T2JqZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290Kikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBvdmVycmlkZTsK
IAogICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2Fk
RXZlbnQgaW5zdGVhZCBvZiBjYWxsaW5nIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50IGRpcmVjdGx5
LgogICAgIGJvb2wgZ3VhcmRlZERpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwCmluZGV4IDVkNDE1YTYyYzFhMzQ3NWNkNWIyOGUzNzliYmRjOWM3MmY2ZDhiODcuLjBj
NTViOTlhOTFlZmMxMWZlYmQ1YjFmY2Q2M2RlZGE2OWMyNjVmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcApAQCAtMTA5LDcgKzEwOSw3IEBA
IHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZmluaXNoQ3JlYXRpbmcoKQogSFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6fkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQoKQogewogICAgIGlmIChtX25l
ZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKQotICAgICAgICBkb2N1bWVudCgpLnVucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9
CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c2V0RGlzcGxheVN0YXRlKERpc3BsYXlT
dGF0ZSBzdGF0ZSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4g
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eQog
ICAgIC8vIGluYWN0aXZlIG9yIHJlYWN0aXZhdGVzIHNvIGl0IGNhbiBjbGVhciB0aGUgcmVuZGVy
ZXIgYmVmb3JlIGdvaW5nIGludG8gdGhlIHBhZ2UgY2FjaGUuCiAgICAgaWYgKCFtX25lZWRzRG9j
dW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7CiAgICAgICAgIG1fbmVlZHNEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3MgPSB0cnVlOwotICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBp
ZiAoZGlzcGxheVN0YXRlKCkgPT0gRGlzcGxheWluZ1NuYXBzaG90KSB7CkBAIC0yODQsOCArMjg0
LDggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChE
b2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW4KIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTigmZG9jdW1lbnQoKSA9PSAmbmV3RG9jdW1lbnQpOwogICAgIGlmIChtX25l
ZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7Ci0gICAgICAgIG9sZERvY3VtZW50LnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgICAgIG5l
d0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwor
ICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3Bl
bnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KIAogICAgIGlmIChtX2ltYWdlTG9hZGVyKQpA
QCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyBET01XcmFwcGVyV29ybGQmIHBsdWdJbkltYWdlRWxl
bWVudElzb2xhdGVkV29ybGQoKQogICAgIHJldHVybiBpc29sYXRlZFdvcmxkOwogfQogCi12b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KHJvb3QpOwogICAgIGlmIChkaXNwbGF5U3RhdGUoKSA+
PSBQcmVwYXJpbmdQbHVnaW5SZXBsYWNlbWVudCkKQEAgLTM1NCw3ICszNTQsNyBAQCB2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9v
dCogcm9vdCkKICAgICAvLyBSZXNldCBhbnkgYXV0aG9yIHN0eWxlcyB0aGF0IG1heSBhcHBseSBh
cyB3ZSBvbmx5IHdhbnQgZXhwbGljaXQKICAgICAvLyBzdHlsZXMgZGVmaW5lZCBpbiB0aGUgaW5q
ZWN0ZWQgdXNlciBhZ2VudHMgc3R5bGVzaGVldHMgdG8gc3BlY2lmeQogICAgIC8vIHRoZSBsb29r
LWFuZC1mZWVsIG9mIHRoZSBzbmFwc2hvdHRlZCBwbHVnLWluIG92ZXJsYXkuIAotICAgIHJvb3Qt
PnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsKKyAgICByb290LnNldFJlc2V0U3R5bGVJ
bmhlcml0YW5jZSh0cnVlKTsKICAgICAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBsb2FkZWRNaW1l
VHlwZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
CmluZGV4IGU5NDFmNTdhZGY4YTE5YTllZDE0ZWRjZWIwOTdiZDNhYjRhNGZhNjIuLmUzZjAzOTY0
ZmExNzQ0NTFlOGUyNjZhZTMyNzM2YTllYzliZjk4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgYWxsb3dlZFRvTG9hZFBsdWdpbkNvbnRlbnQoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJU
cmVlUG9zaXRpb24mKSBvdmVycmlkZTsKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5jcHAKaW5kZXggOGI0MGUxZGMyNThhOWJhNGZhZmNmMDgzYjM1Zjkz
YmNiMmM0NWU0Zi4uMTJkMzFjNzIyMGQ2ZDgyMjQxMGQ5OThmNGQzYWUxYmJmY2IyYTJmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC0xMzUsMTIg
KzEzNSwxMiBAQCB2b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5n
ZSgpCiAgICAgfQogfQogCi12b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAgIEFTU0VS
VCghbV92YWx1ZSk7CiAKICAgICBhdXRvIGlubmVyID0gUHJvZ3Jlc3NJbm5lckVsZW1lbnQ6OmNy
ZWF0ZShkb2N1bWVudCgpKTsKLSAgICByb290LT5hcHBlbmRDaGlsZChpbm5lcik7CisgICAgcm9v
dC5hcHBlbmRDaGlsZChpbm5lcik7CiAKICAgICBhdXRvIGJhciA9IFByb2dyZXNzQmFyRWxlbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGF1dG8gdmFsdWUgPSBQcm9ncmVzc1ZhbHVlRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuaAppbmRleCBiZDMzYWExMjJlZGYyMTU0YTY3OWZlMTZkNjY0MGNiMTJmYjcwZTMw
Li44MjY3MzZkYWIyYmI2NTdhYjNlNWM3YWMzYmE0OTRkM2FkODBjZWUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJzKCkgZmluYWw7CiAKICAgICB2b2lkIGRpZEVs
ZW1lbnRTdGF0ZUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QmKSBmaW5hbDsKICAgICBib29sIGlzRGV0ZXJtaW5hdGUoKSBjb25zdDsKIAogICAg
IGJvb2wgY2FuQ29udGFpblJhbmdlRW5kUG9pbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAppbmRleCBhNDlm
ZjIwYzJiMzc4YTU2MjQ0MTVkNTQ5MzFlMzQ0M2IzOGI4YWVhLi45OWYzYzZmOGM0YzBhZjRmODdh
NDZmM2Y1MTliZjlkMDI2YzdlMDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VF
bGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBpY3R1cmVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCmlu
ZGV4IDk5MTBiZDFiNDJmYTI1NjJmMmEzMDZhYjIxMjA2YTg4NDRmMjU0OWIuLmRhNzQ5Y2Q5NDNm
MzkwZGNhMTA1NGFlNzU1YTJmOGFkM2EwMzY5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdW1tYXJ5RWxlbWVudC5jcHAKQEAgLTY1LDEwICs2NSwxMCBAQCBSZW5kZXJQdHI8UmVuZGVy
RWxlbWVudD4gSFRNTFN1bW1hcnlFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVy
U3R5bGUmJgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlz
LCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLXZvaWQgSFRNTFN1bW1hcnlFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxTdW1tYXJ5RWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewotICAg
IHJvb3QtPmFwcGVuZENoaWxkKERldGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGUoZG9jdW1lbnQo
KSkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKEhUTUxTbG90RWxlbWVudDo6Y3JlYXRlKHNsb3RU
YWcsIGRvY3VtZW50KCkpKTsKKyAgICByb290LmFwcGVuZENoaWxkKERldGFpbHNNYXJrZXJDb250
cm9sOjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoSFRNTFNsb3RF
bGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1lbnQoKSkpOwogfQogCiBIVE1MRGV0YWlsc0Vs
ZW1lbnQqIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGV0YWlsc0VsZW1lbnQoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmgKaW5kZXggMTI3YTU0NmQyYTBkYzQwMjk4
NDEyYWJjNWQ2OWFmMDc4NTYzYjUyMC4uNmI3NDUwNTQ0NjBkYTAyNjJhZmNjOTljNDdlOWU5ZjY4
ZTJlNDY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oCkBAIC0z
OSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0
ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24m
KSBmaW5hbDsKICAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBmaW5hbDsKIAot
ICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7Cisg
ICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAog
ICAgIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAKaW5kZXgg
MjQyZmMxYTU4NWZmM2RiOWIyNGYxZjIwMjdhMWUxN2NjYTkwMmI1OC4uNjk2YTYzZjQwM2NlMTU5
MTI1MGZkMTRiMDBlZjIwYTZkOTliYjFlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSFRNTFRlbXBs
YXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlRlbXBsYXRlQ29udGVudERvY3VtZW50RnJhZ21l
bnQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZTNhMDIxOTBlZGEyMDI2YmFmMjIyY2QyMWNmNjhiNDI4
YzRiNzZkZi4uNjg4ZTNjYzA3NDZjNjYxODBjYmI1ODk3MTY3YmRkMjM2NjVhMjc2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0xMDAsOSArMTAw
LDkgQEAgUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW0KICAgICByZXR1cm4gdGV4dEFyZWE7CiB9CiAK
LXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290KiByb290KQordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoVGV4
dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIHJvb3Qu
YXBwZW5kQ2hpbGQoVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSkpOwogICAgIHVwZGF0ZUlubmVyVGV4dEVsZW1lbnRFZGl0YWJpbGl0eSgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCmluZGV4IGI5YTMyMjRjNzUwZTRk
NDA2YjIzYTZlNTRiMDQ3NTIyNTI5OWY4NTAuLmNiZDA2M2UzMjgxYmVjYWQ1NjliMmJjZDAyNzA2
MGZkN2ZiYWQ5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5o
CkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICBlbnVtIFdyYXBNZXRob2QgeyBOb1dy
YXAsIFNvZnRXcmFwLCBIYXJkV3JhcCB9OwogCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFk
b3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgdm9pZCBtYXhMZW5ndGhBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwogICAgIHZvaWQgbWluTGVuZ3Ro
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggZGVjMTliMmMwYjllMjIyMGY2N2FhNWRm
NDhkY2IxM2M5ODRlYTQyYi4uMGJjZmUxNTg5MTRjNGZkMzUwYzE2ZDM3ZTQxZTQ0Yjk4ZDBlZTRm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTE3OCw5ICsxNzgs
OSBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc1JhZGlvQnV0dG9uKCkgY29uc3QKIAogYm9vbCBS
YWRpb0lucHV0VHlwZTo6bWF0Y2hlc0luZGV0ZXJtaW5hdGVQc2V1ZG9DbGFzcygpIGNvbnN0CiB7
Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsK
LSAgICBpZiAoY29uc3QgUmFkaW9CdXR0b25Hcm91cHMqIHJhZGlvQnV0dG9uR3JvdXBzID0gZWxl
bWVudC5yYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICByZXR1cm4gIXJhZGlvQnV0dG9uR3Jv
dXBzLT5oYXNDaGVja2VkQnV0dG9uKCZlbGVtZW50KTsKKyAgICBhdXRvJiBlbGVtZW50ID0gdGhp
cy0+ZWxlbWVudCgpOworICAgIGlmIChhdXRvKiByYWRpb0J1dHRvbkdyb3VwcyA9IGVsZW1lbnQu
cmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgcmV0dXJuICFyYWRpb0J1dHRvbkdyb3Vwcy0+
aGFzQ2hlY2tlZEJ1dHRvbihlbGVtZW50KTsKICAgICByZXR1cm4gIWVsZW1lbnQuY2hlY2tlZCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAppbmRleCAwMDVi
ZTRkMmQyZTE3ODA4ZWY4MmEzYjkzZDI5M2Q4NzhhMTlhMDkzLi42ZmM1YzE2MTZiZWYxOTYyMTNj
YWVhY2E2MWNjMTQ1ZDRjNTEzYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRXcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdy
aXRlci5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIERvY3VtZW50V3JpdGVyOjpiZWdpbihj
b25zdCBVUkwmIHVybFJlZmVyZW5jZSwgYm9vbCBkaXNwYXRjaCwgRG9jdW1lbnQqIG93bgogCiAg
ICAgYm9vbCBzaG91bGRSZXVzZURlZmF1bHRWaWV3ID0gbV9mcmFtZS0+bG9hZGVyKCkuc3RhdGVN
YWNoaW5lKCkuaXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwpOwogICAgIGlmIChzaG91bGRSZXVz
ZURlZmF1bHRWaWV3KQotICAgICAgICBkb2N1bWVudC0+dGFrZURPTVdpbmRvd0Zyb20obV9mcmFt
ZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGRvY3VtZW50LT50YWtlRE9NV2luZG93RnJvbSgqbV9m
cmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBkb2N1bWVudC0+Y3JlYXRlRE9N
V2luZG93KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBlNTM4YmE2
YzUzMTJkOWM4MTllYjVhNzU2NjQwYWM1YWJhOGNkM2FiLi42ZjkwNzI0MTk0NGI3N2U1YjE0NDUz
MzFlMGVlNTc1ZTMyNjZiYTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zNTEzLDcgKzM1MTMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGlkU3RhcnREcmFnKCkKICAg
ICB9CiAKICAgICBpZiAoYXV0byByYW5nZSA9IGRyYWdTdGF0ZSgpLmRyYWdnZWRDb250ZW50UmFu
Z2UpIHsKLSAgICAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dl
ZENvbnRlbnRNYXJrZXIocmFuZ2UuZ2V0KCkpOworICAgICAgICByYW5nZS0+b3duZXJEb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcigqcmFuZ2UpOwogICAgICAgICBy
ZXBhaW50Q29udGVudHNPZlJhbmdlKHJhbmdlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudFNvdXJjZS5jcHAKaW5kZXggMDgwMTcyOTY5YmU0Y2JkYWI5NzkyMzM1NWExNjM3OWU0
OWJiMzQ2NC4uZTQ2ZmY5ZDlmYWY3MmMyNDIxYjE1MmZkMGZhNTUzOWM5ZGFhMjY2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgRXhjZXB0aW9uT3I8
UmVmPEV2ZW50U291cmNlPj4gRXZlbnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXgKICAgICB9CiAKICAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgRXZl
bnRTb3VyY2UoY29udGV4dCwgZnVsbFVSTCwgZXZlbnRTb3VyY2VJbml0KSk7Ci0gICAgc291cmNl
LT5zZXRQZW5kaW5nQWN0aXZpdHkoc291cmNlLnB0cigpKTsKKyAgICBzb3VyY2UtPnNldFBlbmRp
bmdBY3Rpdml0eShzb3VyY2UuZ2V0KCkpOwogICAgIHNvdXJjZS0+c2NoZWR1bGVJbml0aWFsQ29u
bmVjdCgpOwogICAgIHNvdXJjZS0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIFdURk1v
dmUoc291cmNlKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEV2ZW50U291cmNlOjpuZXR3b3Jr
UmVxdWVzdEVuZGVkKCkKICAgICBpZiAobV9zdGF0ZSAhPSBDTE9TRUQpCiAgICAgICAgIHNjaGVk
dWxlUmVjb25uZWN0KCk7CiAgICAgZWxzZQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEV2
ZW50U291cmNlOjpzY2hlZHVsZUluaXRpYWxDb25uZWN0KCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2
b2lkIEV2ZW50U291cmNlOjpjbG9zZSgpCiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKICAg
ICBlbHNlIHsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAg
ICB9CiB9CiAKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIEV2ZW50U291cmNlOjphYm9ydENvbm5l
Y3Rpb25BdHRlbXB0KCkKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAgIGVsc2Ugewog
ICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0KIAogICAg
IEFTU0VSVChtX3N0YXRlID09IENMT1NFRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDdmNzRl
MzI1Y2U3ODViYWQ1MWJiNTdhMTUyYzFjYTJhNzMyOTQ1NmIuLjQ4NWZkMmUzMjVjMjhhMjVmNzcz
MzRiYzg5NzdhMjMxMzk2YzczYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01Niw3ICs1Niw2
IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGQ4ZTc2NWY5NGUxMTFmZDViN2Y5NjM4YmZkNTg2NGUyYTdlNTYw
YWUuLjAwNDNjZTVmZTkxZjk0Nzg2MmFjNjg2ZTYyZjZiYWJiYmYwODdkYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZVNldEVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5jcHAKaW5kZXggNGNmNWUyOWQwYjkzODZhZmZlMjcyNmM3M2FhZWUyMjM5MzUxNTNj
My4uYjQ3ZjUyYjQ1YzA5YWUyMGFiNTJmYjRmYjFiYzFjYjBkMjRiYjc2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKQEAgLTE2MCw3ICsx
NjAsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRp
b24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRl
SW5wdXQ6Ok1ha2VOZXcpIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0
aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
KnRoaXMpOwogICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0YXJ0VGlt
ZSA9IHN0ZDo6bnVsbG9wdDsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6
OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFy
YW0pCiAKICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1h
dGlvbikgewogICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlv
bi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1lID0gc3RkOjpu
dWxsb3B0OwpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAg
IGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRBbmltYXRpb24pIHsKICAgICAg
ICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3Rh
dGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0
aW9uU3RhdGU6OkRvbmU7CiAgICAgICAgIGVuZEFuaW1hdGlvbigpOwpAQCAtMjMyLDcgKzIzMiw3
IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRl
SW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19M
RVZFTF8yKQogICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT50cmlnZ2VyKCkgJiYgbV9hbmlt
YXRpb24tPnRyaWdnZXIoKS0+aXNTY3JvbGxBbmltYXRpb25UcmlnZ2VyKCkpCi0gICAgICAgICAg
ICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0Fu
aW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc0RlcGVu
ZGVudE9uU2Nyb2xsKCp0aGlzKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOgpAQCAtMjQzLDcgKzI0Myw3IEBA
IHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5w
dXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBo
YXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8g
cmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlICh0aW1lIGlz
ICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwogICAg
ICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7
CisgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogCiAgICAgICAgICAg
ICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlvbgog
ICAgICAgICAgICAgICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+ZWxlbWVudCgpKQpAQCAt
MjgxLDcgKzI4MSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVPZmZzZXQgPSAtbV9hbmltYXRpb24tPmRlbGF5KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKHRpbWVPZmZzZXQpOwogCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0
ZWQpOworICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgq
dGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0
YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQzNyw3
ICs0MzcsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24oYmVn
aW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZV9vcigwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSh0aGlzLCBz
dGFydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKCp0aGlzLCBzdGFydGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2Nl
bGVyYXRlZCA9IHN0YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGIxMWRhNWMzMGI1MTAyOTY3ZTkxZDk2Njk2MzFkMGZm
ZmZmYWUzYjYuLmRmZTRjMDMyNDhhZDZiZGQ1ZTFhNGIxN2RkNGNiZWE2ZmRhZjlhMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC01MDMsMTcgKzUwMywxNSBAQCB1bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1
bQogICAgIHJldHVybiBjb3VudDsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1h
dGlvbikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgLy8gTWFr
ZSBzdXJlIHRoaXMgYW5pbWF0aW9uIGlzIG5vdCBpbiB0aGUgc3RhcnQgdGltZSB3YWl0ZXJzCi0g
ICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZShhbmltYXRp
b24pOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmFkZChhbmltYXRpb24pOwor
ICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1h
dGlvbik7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmFkZCgmYW5pbWF0aW9uKTsK
IH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1h
dGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uVG9SZW1vdmUpCit2
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsKKyAg
ICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUucmVtb3ZlKCZhbmltYXRpb25Ub1JlbW92ZSk7
CiB9CiAKIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxl
KCkKQEAgLTUyNSw3ICs1MjMsNyBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdHlsZUF2YWlsYWJsZSgpCiAgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmNsZWFy
KCk7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBhbmltYXRpb24s
IGJvb2wgd2lsbEdldFJlc3BvbnNlKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJh
c2UmIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCiB7CiAgICAgLy8gSWYgd2lsbEdl
dFJlc3BvbnNlIGlzIHRydWUsIGl0IG1lYW5zIHRoaXMgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IHdh
aXRpbmcgZm9yIGEgcmVzcG9uc2UKICAgICAvLyAod2hpY2ggd2lsbCBjb21lIGluIGFzIGEgY2Fs
bCB0byBub3RpZnlBbmltYXRpb25TdGFydGVkKCkpLgpAQCAtNTQ0LDE3ICs1NDIsMTYgQEAgdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlKEEKICAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxsIHNv
ZnR3YXJlIGFuZCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUgCiAg
ICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZCBjeWNsZS4KICAgICAvLwotICAgIAorCiAgICAgaWYg
KHdpbGxHZXRSZXNwb25zZSkKICAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNh
dGlvbiA9IHRydWU7CiAKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UuYWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlLmFkZCgmYW5pbWF0aW9uKTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2Uo
QW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uVG9SZW1vdmUpCit2b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShBbmltYXRpb25CYXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsK
LSAgICAKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3Zl
KCZhbmltYXRpb25Ub1JlbW92ZSk7CiAgICAgaWYgKG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWVSZXNwb25zZS5pc0VtcHR5KCkpCiAgICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnRO
b3RpZmljYXRpb24gPSBmYWxzZTsKIH0KQEAgLTU3MCw5ICs1NjcsOSBAQCB2b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdGltZSkKICAg
ICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7CiB9CiAKLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5p
bWF0aW9uQmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0g
ICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmlt
YXRpb25XaWxsQmVSZW1vdmVkOiAlcCIsIHRoaXMsIGFuaW1hdGlvbik7CisgICAgTE9HKEFuaW1h
dGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVS
ZW1vdmVkOiAlcCIsIHRoaXMsICZhbmltYXRpb24pOwogCiAgICAgcmVtb3ZlRnJvbUFuaW1hdGlv
bnNXYWl0aW5nRm9yU3R5bGUoYW5pbWF0aW9uKTsKICAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShhbmltYXRpb24pOwpAQCAtNTkzLDE0ICs1OTAsMTUg
QEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVt
b3ZlZChBbmltYXRpb25CYXNlKiBhbmltYXQKIH0KIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9O
U19MRVZFTF8yKQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9Bbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQorCit2b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRP
blNjcm9sbChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgbV9hbmltYXRpb25zRGVw
ZW5kZW50T25TY3JvbGwuYWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zRGVwZW5kZW50
T25TY3JvbGwuYWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlv
bkJhc2UqIGFuaW1hdGlvbikKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
bW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYgYW5pbWF0
aW9uKQogewotICAgIG1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLnJlbW92ZShhbmltYXRp
b24pOworICAgIG1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLnJlbW92ZSgmYW5pbWF0aW9u
KTsKIH0KIAogdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2Nyb2xsV2FzVXBk
YXRlZCgpCkBAIC02MTcsNiArNjE1LDcgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6c2Nyb2xsV2FzVXBkYXRlZCgpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NDE3MAogICAgIHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldENoYW5n
ZWQpOwogfQorCiAjZW5kaWYKIAogQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Q1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAppbmRleCAx
NWE0ZjcyYzFlNmQ0NzY0MTRjNDg5ODQ0NTI3M2FjZTM1ODk2M2Y0Li5jMjNiZWEyZjM2NzEyNWIz
MGFjM2Y5Y2EzNTAxYTEzMmI0ZTgzN2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKQEAg
LTkzLDEzICs5MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmRBbmltYXRpb25VcGRhdGUoKTsK
ICAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoZG91YmxlKTsKICAgICAKLSAgICB2
b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7Ci0gICAg
dm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7
CisgICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYp
OworICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9u
QmFzZSYpOwogCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsKLSAgICB2b2lkIHJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJh
c2UqKTsKKyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZShBbmltYXRpb25CYXNlJiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOworICAgIHZvaWQgcmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYp
OwogCi0gICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqKTsKKyAg
ICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYpOwogCiAgICAgdm9p
ZCB1cGRhdGVBbmltYXRpb25UaW1lckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKIApAQCAt
MTEwLDggKzExMCw4IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZF
TF8yKQogICAgIGJvb2wgd2FudHNTY3JvbGxVcGRhdGVzKCkgY29uc3QgeyByZXR1cm4gIW1fYW5p
bWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLmlzRW1wdHkoKTsgfQotICAgIHZvaWQgYWRkVG9Bbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSopOwotICAgIHZvaWQgcmVtb3Zl
RnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKik7CisgICAgdm9p
ZCBhZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlJik7CisgICAg
dm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2Um
KTsKIAogICAgIHZvaWQgc2Nyb2xsV2FzVXBkYXRlZCgpOwogICAgIGZsb2F0IHNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggZDhl
MWIyZGJkYWQyNzA5NGJjMzdlMTU1OTJjMTY2ZWFlZTZhMmE0Ny4uNmM1OGNmM2M5MDZlNTRkYzBm
Njg5ZWE1MjU1YmQ4YjQzZWJiZWNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC02NCwxNCArNjQsMTQgQEAgdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBDbGVhciB0
aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3ZSBhcmUg
aW4gdGhlIG1pZGRsZSBvZgogICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRp
b24uZ2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoKnRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIo
KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1w
dHkoKSkgewogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFs
dWVzKCkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxs
QmVSZW1vdmVkKGFuaW1hdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9s
bGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKICAgICAgICAgICAgIGFu
aW1hdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIGNvbnN0IFJlbmRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxB
bmltLT5ibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKHByb3AsIG1vZGlmaWVkQ3VycmVudFN0eWxl
LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgZXhpc3RpbmcgSW1wbGljaXRBbmltYXRpb24g
JXAgZm9yIHByb3BlcnR5ICVzIiwgaW1wbEFuaW0sIGdldFByb3BlcnR5TmFtZShwcm9wKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZChpbXBsQW5pbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25D
b250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqaW1wbEFuaW0pOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBlcXVhbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODcs
NyArMTg3LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXIKICAgICBWZWN0b3I8aW50PiB0b0Jl
UmVtb3ZlZDsKICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVl
cygpKSB7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24u
Z2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoKnRyYW5zaXRpb24pOwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRy
YW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwogICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBw
cm9wZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUo
dHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOwogICAgICAgICB9CkBAIC0yNzgsNyAr
Mjc4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9u
cyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QKICAgICAvLyBNYWtlIGEgbGlzdCBvZiBh
bmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCiAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tl
eWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMu
Y29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0
aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdldCgpKTsK
KyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVk
KCphbmltYXRpb24pOwogICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwogICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIHJl
bmRlcmVyICVwIiwgYW5pbWF0aW9uLmdldCgpLCByZW5kZXJlcik7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggNDJjOGIzMWVmNmJmZmE2ODI4NTc1ODQ0ZDg5
MTA0NGZjNjk5ZThiMy4uMWY3NGM5MDRkMzVmZTU4NmUwZWMxNzllZTVmMzIwYjI2NjNmOTY2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgRnJhbWU6OmluaXRXaXRoU2lt
cGxlSFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgc3R5bGUsIGNvbnN0IFVSTCYgdXJsKQogewog
ICAgIG1fbG9hZGVyLT5pbml0Rm9yU3ludGhlc2l6ZWREb2N1bWVudCh1cmwpOwogCi0gICAgUmVm
UHRyPEhUTUxEb2N1bWVudD4gZG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNp
emVkRG9jdW1lbnQodGhpcywgdXJsKTsKKyAgICBhdXRvIGRvY3VtZW50ID0gSFRNTERvY3VtZW50
OjpjcmVhdGVTeW50aGVzaXplZERvY3VtZW50KCp0aGlzLCB1cmwpOwogICAgIGRvY3VtZW50LT5z
ZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudENvbXBhdGliaWxpdHlNb2RlOjpMaW1pdGVkUXVp
cmtzTW9kZSk7CiAgICAgZG9jdW1lbnQtPmNyZWF0ZURPTVdpbmRvdygpOwotICAgIHNldERvY3Vt
ZW50KGRvY3VtZW50KTsKKyAgICBzZXREb2N1bWVudChkb2N1bWVudC5wdHIoKSk7CiAKLSAgICBh
dXRvIHJvb3RFbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKKyAg
ICBhdXRvIHJvb3RFbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwog
Ci0gICAgYXV0byBib2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKKyAg
ICBhdXRvIGJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgaWYg
KCFzdHlsZS5pc0VtcHR5KCkpCiAgICAgICAgIGJvZHktPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OnN0eWxlQXR0ciwgc3R5bGUpOwogCkBAIC03NTQsNCArNzU0LDUgQEAgdm9pZCBGcmFtZTo6cmVz
ZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAppbmRleCBlNWJmMDRkYjIzZDJhY2I5Nzk1YTMy
ZTlhNDhlODNiMmIzODUyZjkzLi5hNzAzYzA5MDUzNzlkYjNkNjFlMTYxMjUwYzUwYWNkNTQ3OTZl
ODAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcgogICAg
ICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBp
dCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTMxMDg1PgogICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkK
LSAgICAgICAgICAgIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jl
c291cmNlKGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGZpbHRl
ck9wZXJhdGlvbi5mcmFnbWVudCgpLCAqZWxlbWVudCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmlu
ZGV4IDU3NWZhMDZhZGU2MGM1MDEzYWVlNDUxYjdlNDNhOTFkMzBmMmZkNWIuLjRlMWUyMDI5NzZi
YTE5ZjExZjBmZDdlOWRkYmE2OTBlNjUwOWIzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTg5NSw3ICs4OTUsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRQbwogICAgIGlmICghcmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSByZW5kZXJl
cigpLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IocmVuZGVyZXIoKS50ZXh0Tm9kZSgp
KTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSByZW5kZXJl
cigpLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKnJlbmRlcmVyKCkudGV4dE5vZGUo
KSk7CiAKICAgICAvLyBHaXZlIGFueSBkb2N1bWVudCBtYXJrZXJzIHRoYXQgdG91Y2ggdGhpcyBy
dW4gYSBjaGFuY2UgdG8gZHJhdyBiZWZvcmUgdGhlIHRleHQgaGFzIGJlZW4gZHJhd24uCiAgICAg
Ly8gTm90ZSBlbmQoKSBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IG9uZSBwYXN0IGl0IGxp
a2UgZW5kT2Zmc2V0IGFuZCByYW5nZXMgZG8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAppbmRleCAwMjYwNjVhNDY2Yjk4MzFiMWQ5NThjM2IzZTRlNWRjZGVl
MzEwYzQyLi5kN2I1NjczODM3NDg4OTZiZmU0YjE5YWI5OWNlOTY4MjFlMjI2MTM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE2Miw3ICsxNjIs
NyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc2F2ZWRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZvLmNvbnRleHQoKSwgZmFsc2UpOwogICAg
IGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkp
IHsKICAgICAgICAgYXV0byogcGFyZW50Q29udGFpbmVyID0gZWxlbWVudCgpLT5wYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmIChkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVw
bGFjZWRFbGVtZW50KGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IocGFyZW50Q29udGFp
bmVyLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpLCAqZWxlbWVudCgpKSkgeworICAg
ICAgICBpZiAoZHJhZ2dlZENvbnRlbnRDb250YWluc1JlcGxhY2VkRWxlbWVudChkb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpwYXJlbnRDb250YWluZXIsIERvY3VtZW50TWFya2VyOjpE
cmFnZ2VkQ29udGVudCksICplbGVtZW50KCkpKSB7CiAgICAgICAgICAgICBzYXZlZEdyYXBoaWNz
Q29udGV4dC5zYXZlKCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldEFscGhh
KDAuMjUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
aW5kZXggOTJhZjBkN2NmYWI4MzhiY2EyODZjNjdhZjIxMmFmMDRlY2JlYzk5My4uMGI2MmRjMTEx
ZDAxMjYwMTlkMTFlM2Q1NTQ2ODdkYzdkOGQ3NGQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcApAQCAtMTA3MSw3ICsxMDcxLDcgQEAgVmVjdG9yPHN0ZDo6cGFpcjx1
bnNpZ25lZCwgdW5zaWduZWQ+PiBSZW5kZXJUZXh0OjpkcmFnZ2VkQ29udGVudFJhbmdlc0JldHdl
ZW5PZmYKICAgICBpZiAoIXRleHROb2RlKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBh
dXRvIG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHRleHROb2RlKCks
IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCk7CisgICAgYXV0byBtYXJrZXJzID0gZG9j
dW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcigqdGV4dE5vZGUoKSwgRG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50KTsKICAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZS5jcHAKaW5kZXggYjY1NmZkNmQwODNhMTY4YjhhMWYzOTMxNGM3NjFkZWY2ZDU4
ZDBlZS4uNDc1ZTE1ZjBkMzg1MDAwZjJjYjA1NjU4NzFlZGVkYmY2YTg3NDkxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHAKQEAg
LTE2NSw5ICsxNjUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRnJvbUNhY2hlQW5kSW52
YWxpZGF0ZURlcGVuZGVuY2llcyhSZW5kZXJFbGVtZW50JiByZW5kZQogICAgICAgICAgICAgY2xp
cHBlci0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKHJlbmRlcmVyKTsKICAgICB9CiAKLSAgICBpZiAo
IXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhcmVuZGVyZXIuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQo
KSkKKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVzID0gcmVuZGVy
ZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5j
aW5nVGFyZ2V0KGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpOworICAg
IGF1dG8qIGRlcGVuZGVuY2llcyA9IHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChkb3duY2FzdDxTVkdFbGVtZW50
PigqcmVuZGVyZXIuZWxlbWVudCgpKSk7CiAgICAgaWYgKCFkZXBlbmRlbmNpZXMpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcAppbmRleCAxODE4NjAzODUwOGM4MzAyODg3
OTNlYzhhNmUzMTA2OWM4ZTcyYzMzLi4yZGJlYWYwNmZjNTA3YmIwMDZkZGEwYTI0MDE2ZjlmNjkz
MGNmNDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmNwcApAQCAtMTcwLDE5ICsxNzAsMTkgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSgpCiB7CiAgICAg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zJiBleHRlbnNpb25zID0gc3ZnRXh0ZW5zaW9uc0Zyb21FbGVt
ZW50KGVsZW1lbnQoKSk7CiAgICAgaWYgKCFleHRlbnNpb25zLmlzSWRPZlBlbmRpbmdSZXNvdXJj
ZShtX2lkKSkgewotICAgICAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsIHRoaXMpOwor
ICAgICAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsICp0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OlBlbmRpbmdFbGVtZW50cz4gY2xpZW50cyA9IGV4dGVuc2lvbnMucmVtb3ZlUGVuZGluZ1Jlc291
cmNlKG1faWQpOwogCiAgICAgLy8gQ2FjaGUgdXMgd2l0aCB0aGUgbmV3IGlkLgotICAgIGV4dGVu
c2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7CisgICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJj
ZShtX2lkLCAqdGhpcyk7CiAKICAgICAvLyBVcGRhdGUgY2FjaGVkIHJlc291cmNlcyBvZiBwZW5k
aW5nIGNsaWVudHMuCiAgICAgZm9yIChhdXRvKiBjbGllbnQgOiAqY2xpZW50cykgewogICAgICAg
ICBBU1NFUlQoY2xpZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwotICAgICAgICBleHRlbnNp
b25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoY2xpZW50KTsKKyAgICAgICAg
ZXh0ZW5zaW9ucy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCpjbGllbnQpOwog
ICAgICAgICBhdXRvKiByZW5kZXJlciA9IGNsaWVudC0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCmluZGV4IGVhOWI0NTIxMTU3MzMxMzIzY2EyYjIw
Y2ZmN2JmOWQyOWQzOTBlZmYuLjQxM2JiYzI2Yzk2NTg2MDUwN2U0ZjRkNzhkMDhlOTJiZGVlNjYz
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2Vz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAK
QEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlQ29udGFp
bmVyKiBwYWludGluZ1Jlc291cmNlRnJvbVNWR1BhaW50KERvY3VtZW50JgogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgcmVnaXN0ZXJQZW5kaW5nUmVzb3VyY2UoU1ZHRG9jdW1lbnRFeHRlbnNpb25zJiBl
eHRlbnNpb25zLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBTVkdFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGV4dGVuc2lvbnMuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAmZWxlbWVudCk7CisgICAg
ZXh0ZW5zaW9ucy5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIGVsZW1lbnQpOwogfQogCiBib29sIFNW
R1Jlc291cmNlczo6YnVpbGRDYWNoZWRSZXNvdXJjZXMoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAKaW5kZXggODNkOTEyZWViZThmZTQy
ODM4NjhkMmQxM2FkYzQzOTI4ZGEyNTk2Ny4uNjk0MzNhYTI3YjMxZmZkM2I1YjhlOGYyNjE3Nzdi
NDdlMWI2ZGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZXNvdXJjZXNDYWNoZS5jcHAKQEAgLTE2OSw4ICsxNjksOCBAQCB2b2lkIFNWR1Jlc291cmNlc0Nh
Y2hlOjpyZXNvdXJjZURlc3Ryb3llZChSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYgcmVzb3Vy
Y2UpCiAKICAgICAgICAgLy8gTWFyayB1c2VycyBvZiBkZXN0cm95ZWQgcmVzb3VyY2VzIGFzIHBl
bmRpbmcgcmVzb2x1dGlvbiBiYXNlZCBvbiB0aGUgaWQgb2YgdGhlIG9sZCByZXNvdXJjZS4KICAg
ICAgICAgRWxlbWVudCYgcmVzb3VyY2VFbGVtZW50ID0gcmVzb3VyY2UuZWxlbWVudCgpOwotICAg
ICAgICBFbGVtZW50KiBjbGllbnRFbGVtZW50ID0gaXQua2V5LT5lbGVtZW50KCk7Ci0gICAgICAg
IGNsaWVudEVsZW1lbnQtPmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRp
bmdSZXNvdXJjZShyZXNvdXJjZUVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUoKSwgY2xpZW50RWxlbWVu
dCk7CisgICAgICAgIEVsZW1lbnQmIGNsaWVudEVsZW1lbnQgPSAqaXQua2V5LT5lbGVtZW50KCk7
CisgICAgICAgIGNsaWVudEVsZW1lbnQuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
YWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLCBjbGll
bnRFbGVtZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAKaW5k
ZXggMTc2OTBjY2Q2Nzc3OWMyM2I5Mzc3NjMwODQ0NTQ2MmQ3YWE5MjJkZC4uZTZmMDcxNGE0Mzdh
NTQ4ZjVhMTQxZDI1Nzk3OGU1N2U4ZGE2NDU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZS5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFNjb3BlOjpjb2xsZWN0QWN0aXZlU3R5bGVT
aGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHNoZWV0cykKICAgICAgICAgICAgIGlm
IChwaS5pc1hTTCgpICYmICFtX2RvY3VtZW50LnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB1bnRpbCBsb2Fk
aW5nIGlzIGZpbmlzaGVkLgogICAgICAgICAgICAgICAgIGlmICghbV9kb2N1bWVudC5wYXJzaW5n
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFuc2Zvcm0oJnBp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybShwaSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IGViODE1NGNmNWMy
ZWUzZjkwZWFlYjQzOTEyMzBlOWMwNTNiMmEzYjcuLmNlNDJjMjE3MTRmNjJlNDBjMjIzN2YwNjM2
OTgyZWFmMWVjM2E0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuY3BwCkBAIC01MSwyNyArNTEsMjUgQEAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp+U1ZH
RG9jdW1lbnRFeHRlbnNpb25zKCkKIHsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjphZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV90aW1lQ29udGFpbmVycy5hZGQoZWxlbWVudCk7CisgICAgbV90aW1lQ29udGFpbmVy
cy5hZGQoJmVsZW1lbnQpOwogICAgIGlmIChtX2FyZUFuaW1hdGlvbnNQYXVzZWQpCi0gICAgICAg
IGVsZW1lbnQtPnBhdXNlQW5pbWF0aW9ucygpOworICAgICAgICBlbGVtZW50LnBhdXNlQW5pbWF0
aW9ucygpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlVGltZUNvbnRh
aW5lcihTVkdTVkdFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3Rp
bWVDb250YWluZXJzLnJlbW92ZShlbGVtZW50KTsKKyAgICBtX3RpbWVDb250YWluZXJzLnJlbW92
ZSgmZWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRSZXNvdXJj
ZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVz
b3VyY2UpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUmVzb3VyY2UoY29uc3QgQXRv
bWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImIHJlc291cmNlKQogewot
ICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0KICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBSZXBsYWNlcyByZXNvdXJjZSBpZiBhbHJlYWR5IHByZXNlbnQsIHRv
IGhhbmRsZSBwb3RlbnRpYWwgaWQgY2hhbmdlcwotICAgIG1fcmVzb3VyY2VzLnNldChpZCwgcmVz
b3VyY2UpOworICAgIG1fcmVzb3VyY2VzLnNldChpZCwgJnJlc291cmNlKTsKIH0KIAogdm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYg
aWQpCkBAIC05Nyw3ICs5NSw3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzdGFydEFu
aW1hdGlvbnMoKQogICAgIC8vIEZJWE1FOiBXZSBob2xkIGEgcmVmIHBvaW50ZXJzIHRvIHByZXZl
bnQgYSBzaGFkb3cgdHJlZSBmcm9tIGdldHRpbmcgcmVtb3ZlZCBvdXQgZnJvbSB1bmRlcm5lYXRo
IHVzLgogICAgIC8vIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSB1c2UtZWxl
bWVudCB0byBhdm9pZCB0aGlzLiBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvNTM3MDQKICAgICBW
ZWN0b3I8UmVmUHRyPFNWR1NWR0VsZW1lbnQ+PiB0aW1lQ29udGFpbmVyczsKLSAgICB0aW1lQ29u
dGFpbmVycy5hcHBlbmRSYW5nZShtX3RpbWVDb250YWluZXJzLmJlZ2luKCksIG1fdGltZUNvbnRh
aW5lcnMuZW5kKCkpOworICAgIGNvcHlUb1ZlY3RvcihtX3RpbWVDb250YWluZXJzLCB0aW1lQ29u
dGFpbmVycyk7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdGltZUNvbnRhaW5lcnMpCiAgICAg
ICAgIGVsZW1lbnQtPnRpbWVDb250YWluZXIoKS5iZWdpbigpOwogfQpAQCAtMTQ0LDE5ICsxNDIs
MTcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKICAgICByZXBvcnRNZXNzYWdlKG1fZG9jdW1lbnQsIE1lc3NhZ2VMZXZlbDo6
RXJyb3IsICJFcnJvcjogIiArIG1lc3NhZ2UpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNl
KGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
KGVsZW1lbnQpOwotCiAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byByZXN1bHQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCBudWxscHRyKTsKICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBlbmRpbmdFbGVtZW50cz4oKTsKLSAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5hZGQoZWxlbWVudCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRk
KCZlbGVtZW50KTsKIAotICAgIGVsZW1lbnQtPnNldEhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKKyAg
ICBlbGVtZW50LnNldEhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKIH0KIAogYm9vbCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmlzSWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlk
KSBjb25zdApAQCAtMTY3LDQ5ICsxNjMsNDMgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmlzSWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogICAg
IHJldHVybiBtX3BlbmRpbmdSZXNvdXJjZXMuY29udGFpbnMoaWQpOwogfQogCi1ib29sIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6aXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRo
UGVuZGluZ1Jlc291cmNlcyhFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIC8vIFRoaXMg
YWxnb3JpdGhtIHRha2VzIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgcGVuZGlu
ZyByZXNvdXJjZXMgYW5kIG5lZWQgbm90LgogICAgIC8vIElmIHBlcmZvcm1hbmNlIGJlY29tZXMg
YW4gaXNzdWUgd2UgY2FuIGtlZXAgYSBjb3VudGVkIHNldCBvZiBlbGVtZW50cyBhbmQgYW5zd2Vy
IHRoZSBxdWVzdGlvbiBlZmZpY2llbnRseS4KLSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgZm9y
IChhdXRvJiBlbGVtZW50cyA6IG1fcGVuZGluZ1Jlc291cmNlcy52YWx1ZXMoKSkgewogICAgICAg
ICBBU1NFUlQoZWxlbWVudHMpOwotCi0gICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoZWxl
bWVudCkpCisgICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoJmVsZW1lbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0Citib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6aXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5n
JiBpZCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICBpZiAoIWlzSWRPZlBl
bmRpbmdSZXNvdXJjZShpZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBt
X3BlbmRpbmdSZXNvdXJjZXMuZ2V0KGlkKS0+Y29udGFpbnMoZWxlbWVudCk7CisgICAgcmV0dXJu
IG1fcGVuZGluZ1Jlc291cmNlcy5nZXQoaWQpLT5jb250YWlucygmZWxlbWVudCk7CiB9CiAKLXZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3Np
YmxlKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJI
YXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlm
ICghaXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoZWxlbWVudCkpCi0gICAgICAgIGVsZW1l
bnQtPmNsZWFySGFzUGVuZGluZ1Jlc291cmNlcygpOworICAgICAgICBlbGVtZW50LmNsZWFySGFz
UGVuZGluZ1Jlc291cmNlcygpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVt
b3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgLy8gUmVtb3Zl
IHRoZSBlbGVtZW50IGZyb20gcGVuZGluZyByZXNvdXJjZXMuCi0gICAgaWYgKCFtX3BlbmRpbmdS
ZXNvdXJjZXMuaXNFbXB0eSgpICYmIGVsZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgewor
ICAgIGlmICghbV9wZW5kaW5nUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiBlbGVtZW50Lmhhc1BlbmRp
bmdSZXNvdXJjZXMoKSkgewogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3Zl
ZDsKICAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGluZ1Jlc291cmNlcykgewog
ICAgICAgICAgICAgUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IHJlc291cmNlLnZhbHVlLmdl
dCgpOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCgh
ZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxl
bWVudCk7CisgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKCZlbGVtZW50KTsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVk
LmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAgICB9CkBAIC0yMjksNyArMjE5LDcgQEAgdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
cyhFbGVtZW50KiBlbGVtZW50KQogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAg
ICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGVsZW1l
bnRzLT5yZW1vdmUoZWxlbWVudCk7CisgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKCZlbGVt
ZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAgICB9CkBAIC0yODQs
NDAgKzI3NCwyOSBAQCBFbGVtZW50KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1l
bnRGcm9tUGVuZGluZ1Jlc291cmNlc0ZvclJlbW92YWxNYXAoYwogICAgIHJldHVybiBlbGVtZW50
OwogfQogCi1IYXNoU2V0PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQp
IGNvbnN0CitIYXNoU2V0PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRP
ZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBjb25zdCBhdXRv
IGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAg
IGlmIChpdCA9PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CisgICAgcmV0dXJuIG1fZWxlbWVudERlcGVu
ZGVuY2llcy5nZXQoJnJlZmVyZW5jZWRFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVu
Y2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQordm9pZCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiBy
ZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAg
IEFTU0VSVChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgIEFTU0VSVChyZWZlcmVuY2VkRWxlbWVu
dCk7Ci0KLSAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGVsZW1lbnRzID0gbV9lbGVtZW50
RGVwZW5kZW5jaWVzLmdldChyZWZlcmVuY2VkRWxlbWVudCkpIHsKLSAgICAgICAgZWxlbWVudHMt
PmFkZChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byBlbGVtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxTVkdFbGVtZW50Kj4+KCk7
Ci0gICAgZWxlbWVudHMtPmFkZChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgIG1fZWxlbWVudERl
cGVuZGVuY2llcy5zZXQocmVmZXJlbmNlZEVsZW1lbnQsIFdURk1vdmUoZWxlbWVudHMpKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbnN1cmUoJnJlZmVyZW5jZWRF
bGVtZW50LCBbJnJlZmVyZW5jaW5nRWxlbWVudF0geworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxIYXNoU2V0PFNWR0VsZW1lbnQqPj4oc3RkOjppbml0aWFsaXplcl9saXN0PFNWR0Vs
ZW1lbnQqPiB7ICZyZWZlcmVuY2luZ0VsZW1lbnQgfSk7CisgICAgfSk7CisgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKCZyZWZl
cmVuY2luZ0VsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZXJlbmNpbmdFbGVt
ZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5j
ZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVudCkKIHsKICAgICBWZWN0
b3I8U1ZHRWxlbWVudCo+IHRvQmVSZW1vdmVkOwogCiAgICAgZm9yIChhdXRvJiBkZXBlbmRlbmN5
IDogbV9lbGVtZW50RGVwZW5kZW5jaWVzKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHJlZmVyZW5j
ZWRFbGVtZW50ID0gZGVwZW5kZW5jeS5rZXk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+
JiByZWZlcmVuY2luZ0VsZW1lbnRzID0gKmRlcGVuZGVuY3kudmFsdWU7Ci0gICAgICAgIHJlZmVy
ZW5jaW5nRWxlbWVudHMucmVtb3ZlKHJlZmVyZW5jaW5nRWxlbWVudCk7CisgICAgICAgIGF1dG8m
IHJlZmVyZW5jaW5nRWxlbWVudHMgPSAqZGVwZW5kZW5jeS52YWx1ZTsKKyAgICAgICAgcmVmZXJl
bmNpbmdFbGVtZW50cy5yZW1vdmUoJnJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChy
ZWZlcmVuY2luZ0VsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFw
cGVuZChyZWZlcmVuY2VkRWxlbWVudCk7CisgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQo
ZGVwZW5kZW5jeS5rZXkpOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRvQmVS
ZW1vdmVkKQpAQCAtMzMzLDExICszMTIsOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVidWlsZEVsZW1lbnRzKCkKIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNsZWFyVGFy
Z2V0RGVwZW5kZW5jaWVzKFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAgIGF1
dG8gaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZCgmcmVmZXJlbmNlZEVsZW1lbnQpOwot
ICAgIGlmIChpdCA9PSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCisgICAgYXV0byogcmVm
ZXJlbmNpbmdFbGVtZW50cyA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5nZXQoJnJlZmVyZW5jZWRF
bGVtZW50KTsKKyAgICBpZiAoIXJlZmVyZW5jaW5nRWxlbWVudHMpCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoaXQtPmtleSA9PSAmcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIEhhc2hTZXQ8
U1ZHRWxlbWVudCo+KiByZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAg
IGZvciAoYXV0byogZWxlbWVudCA6ICpyZWZlcmVuY2luZ0VsZW1lbnRzKSB7CiAgICAgICAgIG1f
cmVidWlsZEVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgZWxlbWVudC0+Y2FsbENs
ZWFyVGFyZ2V0KCk7CkBAIC0zNjEsMjMgKzMzOCwyNSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVidWlsZEFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmIHJl
ZgogICAgICAgICBlbGVtZW50LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKFhMaW5rTmFtZXM6OmhyZWZB
dHRyKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRS
ZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQordm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0
KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAgIG1fZWxlbWVudERlcGVuZGVu
Y2llcy5yZW1vdmUocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIG1fcmVidWlsZEVsZW1lbnRzLnJl
bW92ZUZpcnN0KHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMu
cmVtb3ZlKCZyZWZlcmVuY2VkRWxlbWVudCk7CisgICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3Zl
Rmlyc3QoJnJlZmVyZW5jZWRFbGVtZW50KTsKIH0KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi12
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZH
Rm9udEZhY2VFbGVtZW50KiBlbGVtZW50KQorCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5hZGQoZWxlbWVudCk7CisgICAgbV9zdmdGb250
RmFjZUVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjp1bnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1bnJlZ2lzdGVyU1ZHRm9udEZhY2VF
bGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobV9zdmdG
b250RmFjZUVsZW1lbnRzLmNvbnRhaW5zKGVsZW1lbnQpKTsKLSAgICBtX3N2Z0ZvbnRGYWNlRWxl
bWVudHMucmVtb3ZlKGVsZW1lbnQpOworICAgIEFTU0VSVChtX3N2Z0ZvbnRGYWNlRWxlbWVudHMu
Y29udGFpbnMoJmVsZW1lbnQpKTsKKyAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudHMucmVtb3ZlKCZl
bGVtZW50KTsKIH0KKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuaAppbmRleCA2YTUyNzcwNDljNWIyNTUwMjVmOTlhNzJlMTlmMmNlMDgxYmQx
ZGViLi41YzIxZTU1MjBmZDc0MzA2ODBlODdhYzRlNTA2NDZiNmRiNGE3NmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCkBAIC00MywxMCArNDMsMTAgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IFNWR0RvY3VtZW50RXh0ZW5zaW9ucyhEb2N1bWVudCYpOwog
ICAgIH5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKTsKICAgICAKLSAgICB2b2lkIGFkZFRpbWVDb250
YWluZXIoU1ZHU1ZHRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlVGltZUNvbnRhaW5lcihTVkdT
VkdFbGVtZW50Kik7CisgICAgdm9pZCBhZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmKTsK
KyAgICB2b2lkIHJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYpOwogCi0gICAgdm9p
ZCBhZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNv
bnRhaW5lciopOworICAgIHZvaWQgYWRkUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImKTsKICAgICB2b2lkIHJlbW92ZVJlc291cmNlKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQpOwogICAgIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiBy
ZXNvdXJjZUJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CiAKQEAgLTYxLDE5ICs2
MSwxOSBAQCBwdWJsaWM6CiAKICAgICBTVkdSZXNvdXJjZXNDYWNoZSYgcmVzb3VyY2VzQ2FjaGUo
KSB7IHJldHVybiAqbV9yZXNvdXJjZXNDYWNoZTsgfQogCi0gICAgSGFzaFNldDxTVkdFbGVtZW50
Kj4qIHNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2Vk
RWxlbWVudCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZH
RWxlbWVudCogcmVmZXJlbmNpbmdFbGVtZW50LCBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVu
dCk7Ci0gICAgdm9pZCByZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVt
ZW50Kik7CisgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIHNldE9mRWxlbWVudHNSZWZlcmVuY2lu
Z1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkgY29uc3Q7CisgICAgdm9pZCBh
ZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNpbmdFbGVtZW50
LCBTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCk7CisgICAgdm9pZCByZW1vdmVBbGxUYXJn
ZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50Jik7CiAgICAgdm9pZCByZWJ1aWxkQWxs
RWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3Zl
QWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCopOworICAgIHZvaWQgcmVt
b3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYpOwogCiAgICAgdm9p
ZCBjbGVhclRhcmdldERlcGVuZGVuY2llcyhTVkdFbGVtZW50Jik7CiAgICAgdm9pZCByZWJ1aWxk
RWxlbWVudHMoKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgY29uc3QgSGFzaFNldDxT
VkdGb250RmFjZUVsZW1lbnQqPiYgc3ZnRm9udEZhY2VFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3ZnRm9udEZhY2VFbGVtZW50czsgfQotICAgIHZvaWQgcmVnaXN0ZXJTVkdGb250RmFjZUVs
ZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU1ZHRm9udEZh
Y2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJTVkdGb250
RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU1ZH
Rm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYpOwogI2VuZGlmCiAKIHByaXZhdGU6
CkBAIC05NSwxMSArOTUsMTEgQEAgcHVibGljOgogICAgIC8vIFRoaXMgSGFzaE1hcCBjb250YWlu
cyBhIGxpc3Qgb2YgcGVuZGluZyByZXNvdXJjZXMuIFBlbmRpbmcgcmVzb3VyY2VzLCBhcmUgc3Vj
aAogICAgIC8vIHdoaWNoIGFyZSByZWZlcmVuY2VkIGJ5IGFueSBvYmplY3QgaW4gdGhlIFNWRyBk
b2N1bWVudCwgYnV0IGRvIE5PVCBleGlzdCB5ZXQuCiAgICAgLy8gRm9yIGluc3RhbmNlLCBkeW5h
bWljYWxseSBidWlsZCBncmFkaWVudHMgLyBwYXR0ZXJucyAvIGNsaXBwZXJzLi4uCi0gICAgdm9p
ZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCopOwor
ICAgIHZvaWQgYWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1l
bnQmKTsKICAgICBib29sIGlzSWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdDsKLSAgICBib29sIGlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQqLCBjb25zdCBB
dG9taWNTdHJpbmcmIGlkKSBjb25zdDsKLSAgICB2b2lkIGNsZWFySGFzUGVuZGluZ1Jlc291cmNl
c0lmUG9zc2libGUoRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzKEVsZW1lbnQqKTsKKyAgICBib29sIGlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQm
LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKKyAgICB2b2lkIGNsZWFySGFzUGVuZGlu
Z1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlRWxlbWVudEZy
b21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGVuZGlu
Z0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7
CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHNjaGVk
dWxpbmcgYSBwZW5kaW5nIHJlc291cmNlIHRvIGJlIHJlbW92ZWQuCkBAIC0xMDcsNyArMTA3LDcg
QEAgcHVibGljOgogICAgIEVsZW1lbnQqIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
c0ZvclJlbW92YWxNYXAoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBpc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KikgY29uc3Q7CisgICAgYm9v
bCBpc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50JikgY29uc3Q7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBlbmRpbmdFbGVtZW50cz4gcmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVt
b3ZhbChjb25zdCBBdG9taWNTdHJpbmcmKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cAppbmRleCA3MDE4OTgxYjkyYjk2ZGZiYjA1YWJhNTVkMTFlNmJjMWVmMTcxOGE4Li5kZTAxYTIy
ZGQ4YTg4MjAwMjFiNjlkMGRkN2FlMGRiZTU5ZDlmZmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCkBAIC0yOTQsNyArMjk0LDcgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAg
ICAgICBtX3N2Z1JhcmVEYXRhID0gbnVsbHB0cjsKICAgICB9CiAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVidWlsZEFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0
aGlzKTsKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVt
ZW50UmVmZXJlbmNlc0ZvclRhcmdldCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7CiB9
CiAKIGludCBTVkdFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CkBAIC0zNzUsNyArMzc1LDcgQEAg
dm9pZCBTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQog
CiAgICAgaWYgKHdhc0luRG9jdW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuY2xlYXJUYXJnZXREZXBlbmRlbmNpZXMoKnRoaXMpOwotICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldCh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwogICAgIH0KICAgICBp
bnZhbGlkYXRlSW5zdGFuY2VzKCk7CiB9CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIFNWR0Vs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkKICAgICAgICAgQVNTRVJUKGNs
aWVudEVsZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIGlmIChjbGllbnRF
bGVtZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKICAgICAgICAgICAgIGNsaWVudEVsZW1l
bnQtPmJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7Ci0gICAgICAgICAgICBleHRlbnNpb25zLmNsZWFy
SGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoY2xpZW50RWxlbWVudCk7CisgICAgICAgICAg
ICBleHRlbnNpb25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKmNsaWVudEVs
ZW1lbnQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAKaW5kZXggZWM3NGE4ZDBlNWFiNmI1YWQ5OGE4OGU3OGUxMmM0YmE2MjVkNmFl
Ny4uYjJjMzIzN2NhOWYzZDZkNGEzNjVlYmNkOTBkYzg5YTBkNzM4ODkzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgU1ZH
RkVJbWFnZUVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKICAgICAgICAgbV9jYWNo
ZWRJbWFnZSA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNl
c0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0
SW1hZ2VSZXNvdXJjZSgpCkBAIC0xMDcsMTMgKzEwNywxMyBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVt
ZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgICAgIGlmIChpZC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJj
ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQ
ZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQtPmlz
U1ZHRWxlbWVudCgpKSB7CisgICAgfSBlbHNlIGlmIChpczxTVkdFbGVtZW50PigqdGFyZ2V0KSkg
ewogICAgICAgICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVu
Y2llcyBtYXAuIEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFk
cyB0byByZWxheW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3Qg
dG8gaXQuCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1l
bnRSZWZlcmVuY2luZ1RhcmdldCh0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQpKTsK
KyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVy
ZW5jaW5nVGFyZ2V0KCp0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAg
fQogCiAgICAgaW52YWxpZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcAppbmRleCBiOGJhOWIwN2ZlMmE2NDA5MzY5ZjFhYzg0NTJiNWE1YWU4YWM2OGVjLi40
NjM4ODA2MTQ5ZDVmNTNjYWI4ZjhjMzNiNzMzZmQ2NGY0OGFlZmExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMjc4LDcgKzI3OCw3IEBAIE5vZGU6Oklu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kCiAgICAgICAgIEFTU0VSVCghbV9mb250RWxlbWVudCk7CiAgICAgICAg
IHJldHVybiBJbnNlcnRpb25Eb25lOwogICAgIH0KLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCgqdGhp
cyk7CiAKICAgICByZWJ1aWxkRm9udEZhY2UoKTsKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsK
QEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIAogICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVj
dGVkKCkpIHsKICAgICAgICAgbV9mb250RWxlbWVudCA9IG51bGxwdHI7Ci0gICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0
ZXJTVkdGb250RmFjZUVsZW1lbnQoKnRoaXMpOwogICAgICAgICBtX2ZvbnRGYWNlUnVsZS0+bXV0
YWJsZVByb3BlcnRpZXMoKS5jbGVhcigpOwogCiAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTY29w
ZSgpLmRpZENoYW5nZVN0eWxlU2hlZXRFbnZpcm9ubWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TVBhdGhFbGVtZW50LmNwcAppbmRleCBmZjdkNDg3MmQ2OTQ1NjdlNzUyYzNmY2ZhNzA5MGY3Y2Zj
ZGE0NzE4Li5kZjI1MmJmMDJiNjhiNDhkNjY5OTk5OGJlOGQ1ZjAyYTVkMjUxZDUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcApAQCAtNjUsMTcgKzY1LDE3IEBAIHZvaWQg
U1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgRWxlbWVudCogdGFy
Z2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCks
IGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCF0YXJnZXQpIHsKICAgICAgICAgLy8gRG8gbm90
IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2UgYXJlIGFscmVhZHkgcGVuZGluZyB0aGlzIHJlc291
cmNlLgotICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5k
aW5nUmVzb3VyY2UodGhpcywgaWQpKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UoKnRoaXMsIGlkKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJj
ZXMoKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhcmdldC0+aXNTVkdFbGVtZW50KCkp
IHsKKyAgICB9IGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCp0YXJnZXQpKSB7CiAgICAgICAgIC8v
IFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55
IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0
L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5n
VGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQo
KnRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9CiAKICAgICB0YXJn
ZXRQYXRoQ2hhbmdlZCgpOwpAQCAtODMsNyArODMsNyBAQCB2b2lkIFNWR01QYXRoRWxlbWVudDo6
YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogCiB2b2lkIFNWR01QYXRoRWxlbWVudDo6Y2xlYXJSZXNv
dXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVt
ZW50KCp0aGlzKTsKIH0KIAogTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdN
UGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggZTIyMzBmNDEyZGQ4MTM1YmYyNTc2
MTViZWI4ZWU0ODQ3N2ZkZTA0ZS4uZjcxNjQ3MGMyYjM5NTBkYjIyNTgxMGJjMzBlYzRhMTg4Mjcw
ZTczMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6aW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKCkK
IHsKICAgICAvLyA8bXBhdGg+IGNhbiBvbmx5IHJlZmVyZW5jZSA8cGF0aD4gYnV0IHRoaXMgZGVw
ZW5kZW5jeSBpcyBub3QgaGFuZGxlZCBpbgogICAgIC8vIG1hcmtGb3JMYXlvdXRBbmRQYXJlbnRS
ZXNvdXJjZUludmFsaWRhdGlvbiBzbyB3ZSB1cGRhdGUgYW55IG1wYXRoIGRlcGVuZGVuY2llcyBt
YW51YWxseS4KLSAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9IGRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1Rh
cmdldCh0aGlzKSkgeworICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVz
ID0gZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5j
aW5nVGFyZ2V0KCp0aGlzKSkgewogICAgICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiAqZGVwZW5k
ZW5jaWVzKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZHTVBhdGhFbGVtZW50PigqZWxlbWVudCkp
CiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8U1ZHTVBhdGhFbGVtZW50PigqZWxlbWVudCkudGFy
Z2V0UGF0aENoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBi
ZmE5MTcyZTg5MWNjNjQzMDhmMzQ2MjRlNzRlNWVlOWIzYTdhMzI4Li45NDA1MGRiOTNhYWVmZWZj
Mjk0YzQ3NGI2MWRlYjRkMWY2YTNlZGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIGlubGluZSBTVkdTVkdFbGVtZW50OjpTVkdTVkdFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1CiB7CiAgICAgQVNT
RVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpOwogICAgIHJlZ2lzdGVyQW5pbWF0ZWRQ
cm9wZXJ0aWVzRm9yU1ZHU1ZHRWxlbWVudCgpOwotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogUmVmPFNWR1NWR0VsZW1l
bnQ+IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCYgZG9jdW1lbnQpCkBAIC05NiwxNCArOTYsMTQgQEAgU1ZHU1ZHRWxlbWVudDo6flNW
R1NWR0VsZW1lbnQoKQogewogICAgIGlmIChtX3ZpZXdTcGVjKQogICAgICAgICBtX3ZpZXdTcGVj
LT5yZXNldENvbnRleHRFbGVtZW50KCk7Ci0gICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CisgICAgZG9jdW1lbnQoKS51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKCp0aGlzKTsK
IH0KIAogdm9pZCBTVkdTVkdFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYg
b2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsKLSAgICBvbGREb2N1bWVudC51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3Vt
ZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAg
b2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
cygqdGhpcyk7CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogfQogCkBAIC00NzAsNyArNDcwLDcgQEAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihS
ZW5kZXJTdHlsZSYmIHN0eWwKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZH
U1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiB7CiAg
ICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRUaW1lQ29udGFpbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRUaW1lQ29udGFpbmVyKCp0aGlzKTsKICAg
ICAgICAgaWYgKCFkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hcmVBbmltYXRpb25z
UGF1c2VkKCkpCiAgICAgICAgICAgICB1bnBhdXNlQW5pbWF0aW9ucygpOwogCkBAIC00ODYsNyAr
NDg2LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50
OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm8KIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cmVt
b3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIHsKICAgICBpZiAocm9vdFBhcmVu
dC5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLnJlbW92ZVRpbWVDb250YWluZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIoKnRoaXMpOwogICAgICAgICBwYXVz
ZUFuaW1hdGlvbnMoKTsKICAgICB9CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZW1vdmVkRnJv
bShyb290UGFyZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCmluZGV4IGIw
ODM3MzYxNTEzNzA2ODMwMWFlMGZkZWI3ZTljOWE5OTA5ZjJhNDEuLjZmOWQ2ZTNmYzFmMTIzZmRm
ZjcxZGVhNWRmOGJlYTQyZjFhYjEyZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUUmVmRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50
LmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRldGFjaFRhcmdl
dCgpCiAgICAgU3RyaW5nIGlkOwogICAgIFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZy
b21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIGlmICghaWQuaXNFbXB0
eSgpKQotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5n
UmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKIH0KIAogdm9pZCBTVkdUUmVmRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50
OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAgICAgICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAg
IEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAppbmRleCA3NTE3ZThiOGE2
MDEwZTZhYTZkN2U0NDM3ODlkODlmZjg0NjhkYjQxLi44MDZhZTg3NjU4OWYzN2ZkOTNjMzEzYzll
MjhiMGM2Njk3NTIzMDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBh
dGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAj
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
KyNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIApAQCAtNjYsNyArNjcsNyBAQCBTVkdUZXh0
UGF0aEVsZW1lbnQ6On5TVkdUZXh0UGF0aEVsZW1lbnQoKQogCiB2b2lkIFNWR1RleHRQYXRoRWxl
bWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMp
OworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJl
ZmVyZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogYm9vbCBTVkdUZXh0UGF0aEVsZW1lbnQ6
OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAt
MTU5LDE3ICsxNjAsMTcgQEAgdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlKCkKICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIXRh
cmdldCkgewogICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUg
YWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAg
IGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgq
dGhpcywgaWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQ
ZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAg
ICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAodGFyZ2V0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpwYXRoVGFnKSkgewogICAgICAgICAvLyBS
ZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAuIEFueSBj
aGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxheW91dC9y
ZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCi0gICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1Rh
cmdldCh0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQpKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KCp0
aGlzLCBkb3duY2FzdDxTVkdQYXRoRWxlbWVudD4oKnRhcmdldCkpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCmluZGV4IDVlNzMyMzgwYzVkODA4Mzg4ZjM4YmE4
YzMwMWEyZWU5Y2U5OTgzM2EuLmRkZjY1NmMyNTFlOGUzZDIwYmZkNDk1YzRiYzNmMTEwOTA3MGFh
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBA
QCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnVwZGF0ZVNoYWRvd1RyZWUoKQogICAgIFN0cmluZyB0YXJn
ZXRJRDsKICAgICBhdXRvKiB0YXJnZXQgPSBmaW5kVGFyZ2V0KCZ0YXJnZXRJRCk7CiAgICAgaWYg
KCF0YXJnZXQpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRk
UGVuZGluZ1Jlc291cmNlKHRhcmdldElELCB0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHRhcmdldElELCAqdGhpcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggODYyZDY4YWI0ZDUyNzAzOGE0N2MzNTIxNzk1M2E4
OWE4NTNhNzhmNC4uNmU4NTgzYmJhNGNiYzNiMzBmY2M4NjEzZGNkMjM1ZDdiMjU1MjY0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBTVkdTTUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKIAogdm9p
ZCBTVkdTTUlMRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JF
bGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92
ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBTVkdTTUlM
RWxlbWVudDo6Y2xlYXJUYXJnZXQoKQpAQCAtMTkyLDE3ICsxOTIsMTcgQEAgdm9pZCBTVkdTTUlM
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogCiAgICAgaWYgKCFzdmdUYXJnZXQpIHsK
ICAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYgd2UgYXJlIGFscmVhZHkg
cGVuZGluZyB0aGlzIHJlc291cmNlLgotICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UodGhpcywgaWQpKQorICAgICAgICBpZiAoZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UoKnRoaXMsIGlk
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jl
c291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJU
KGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBtYXAu
IEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFkcyB0byByZWxh
eW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQuCi0g
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVu
Y2luZ1RhcmdldCh0aGlzLCBzdmdUYXJnZXQpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMsICpzdmdUYXJn
ZXQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDlm
OGMyNGEyMjkyOWUxY2M5MWFkM2ZiM2E4ZTYyOGVkMzE4MzZiZmUuLmM1MDEzNDYxZDRiMTMyMDE4
NDgyZWQ3NWM0YmM5MTlhZmIwNDA0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTEzNzAsNyArMTM3MCw3IEBAIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6
Om1hcmtlckNvdW50Rm9yTm9kZShOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIG1hCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgbm9kZS5kb2N1bWVudCgp
LmZyYW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKLSAgICBy
ZXR1cm4gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCZub2RlLCBtYXJrZXJU
eXBlcykuc2l6ZSgpOworICAgIHJldHVybiBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtl
cnNGb3Iobm9kZSwgbWFya2VyVHlwZXMpLnNpemUoKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+IEludGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwgY29uc3Qg
U3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCkKQEAgLTEzODMsNyArMTM4Myw3IEBA
IEV4Y2VwdGlvbk9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBJbnRlcm5hbHM6Om1hcmtlckF0
KE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluCiAKICAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+
ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwogCi0gICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzRm9yKCZub2RlLCBtYXJrZXJUeXBlcyk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKG5vZGUsIG1hcmtlclR5cGVzKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPD0gaW5kZXgp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBtYXJrZXJzW2luZGV4XTsKQEAg
LTE0MzksNyArMTQzOSw3IEBAIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjpkdW1wTWFy
a2VyUmVjdHMoY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlU3RyaW5nKQogdm9pZCBJbnRlcm5hbHM6
OmFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wgaXNBY3RpdmUpCiB7
CiAgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwotICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkVGV4dE1h
dGNoTWFya2VyKCZyYW5nZSwgaXNBY3RpdmUpOworICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCBpc0FjdGl2ZSk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZChib29sIGZsYWcpCkBAIC0yNjE1LDQyICsyNjE1LDYgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFRv
cENvbnRlbnRJbnNldChmbG9hdCBjb250ZW50SW5zZXQpCiAgICAgZG9jdW1lbnQtPnBhZ2UoKS0+
c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7CiB9CiAKLSNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCi0KLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
bnRleHREb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBkb2N1bWVudC0+d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQp
OwotfQotCi12b2lkIEludGVybmFsczo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1
bWVudC0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0K
LXZvaWQgSW50ZXJuYWxzOjp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53
ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQotdm9pZCBJ
bnRlcm5hbHM6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwotICAg
IGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+d2Via2l0RGlk
RXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQotI2VuZGlmCi0KIHZvaWQg
SW50ZXJuYWxzOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggMmI4MTQ2MDRkYzVlZWM3YjM4ZTc5
NDYzMzAwMzI4NzViZGFlZGYwMi4uZGEyNzc0ZTBkZTY3MzNiNmYwMWY4YjRkYTJhMWI2ZDBkNDcx
ZDhkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0zNTYsMTMgKzM1Niw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KGZsb2F0KTsKIAotI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCYpOwotICAgIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50Jik7Ci0gICAgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoRWxlbWVudCYpOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9S
VCB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcp
OwogCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAppbmRleCBlODdhNzRjNThhYzVjMmM2ZjFmOThiMWVjOGJlZmFlNDExMTkxMjFkLi5jODMw
MDkwMjNjYWNhYTUxOWExZjQwMTFiODkwOTkyYTZmYTJiNzAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCkBAIC0zMzAsMTEgKzMzMCw2IEBAIGVudW0gRXZlbnRUaHJvdHRsaW5n
QmVoYXZpb3IgewogCiAgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQodW5yZXN0cmljdGVkIGZs
b2F0IGNvbnRlbnRJbnNldCk7CiAKLSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZv
aWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsK
LSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwotICAgIFtDb25kaXRpb25hbD1GVUxM
U0NSRUVOX0FQSV0gdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQgZWxlbWVudCk7Ci0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lkIHdlYmtp
dERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwotCiAgICAgdm9p
ZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3Rh
KTsKIAogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0
eVBvbGljeShET01TdHJpbmcgc2NoZW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAppbmRl
eCA4MjkwMzE0MDVkYmI3ZjdlYjQxMzlhNDdmMjA1YmU2ZDY3YzRkYTBhLi5iYjRhMTg1ZmQzMDc0
MzAxNGM1Yzg5OTQ4ZGIzZTA0YzQ2NGI0YWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3Bw
CkBAIC05MSw3ICs5MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxXb3JrZXI+PiBXb3JrZXI6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OlJ1CiAgICAgd29ya2VyLT5t
X3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IHNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeTsKIAogICAgIC8vIFRoZSB3b3JrZXIgY29u
dGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0
IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIG5vciBhcmUgaXRzIGV2ZW50IGxp
c3RlbmVycy4KLSAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIucHRyKCkpOwor
ICAgIHdvcmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5nZXQoKSk7CiAKICAgICAvLyBo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93b3JrZXJzLmh0bWwjb2ZmaWNp
YWwtbW9tZW50LW9mLWNyZWF0aW9uCiAgICAgd29ya2VyLT5tX3dvcmtlckNyZWF0aW9uVGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgV29ya2VyOjpu
b3RpZnlGaW5pc2hlZCgpCiAgICAgfQogICAgIG1fc2NyaXB0TG9hZGVyID0gbnVsbHB0cjsKIAot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggOWE0ZmRiN2QzMTM0ZjBhYTE3MmRhNTA2MGY1OWZlZmQ0NDhi
ZjM1NC4uYWQyNzViNjhhNTQ1MmViZDAwODM3MTM4NGZhOWM5NGYyZGExNGM0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0xOTAsOSArMTkwLDkgQEAgRXhjZXB0aW9u
T3I8RG9jdW1lbnQqPiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoKQogICAgICAgICAgICAg
bV9yZXNwb25zZURvY3VtZW50ID0gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChpc0hUTUwpCi0gICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gSFRN
TERvY3VtZW50OjpjcmVhdGUoMCwgbV91cmwpOworICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VE
b2N1bWVudCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlKG51bGxwdHIsIG1fdXJsKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBYTUxEb2N1bWVu
dDo6Y3JlYXRlKDAsIG1fdXJsKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQg
PSBYTUxEb2N1bWVudDo6Y3JlYXRlKG51bGxwdHIsIG1fdXJsKTsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTZXQgTGFzdC1Nb2RpZmllZC4KICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudC0+
c2V0Q29udGVudChtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSk7
CiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQtPnNldENvbnRleHREb2N1bWVudChkb3du
Y2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpOwpAQCAtNDkwLDcgKzQ5
MCw3IEBAIHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uT3I8dm9pZD4+IFhNTEh0dHBSZXF1ZXN0Ojpw
cmVwYXJlVG9TZW5kKCkKICAgICBpZiAoIWNvbnRleHQuc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29u
dGVudFNlY3VyaXR5UG9saWN5KCkgJiYgIWNvbnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCkt
PmFsbG93Q29ubmVjdFRvU291cmNlKG1fdXJsKSkgewogICAgICAgICBpZiAoIW1fYXN5bmMpCiAg
ICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uT3I8dm9pZD4geyBFeGNlcHRpb24geyBOZXR3b3Jr
RXJyb3IgfSB9OwotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1fdGltZW91dFRpbWVyLnN0b3AoKTsK
ICAgICAgICAgbV9uZXR3b3JrRXJyb3JUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgfTsKQEAgLTc1OSw3ICs3NTksNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCgpCiAgICAgICAgIC8vIGEg
cmVxdWVzdCBpcyBpbiBwcm9ncmVzcyBiZWNhdXNlIHdlIG5lZWQgdG8ga2VlcCB0aGUgbGlzdGVu
ZXJzIGFsaXZlLAogICAgICAgICAvLyBhbmQgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgSmF2
YVNjcmlwdCB3cmFwcGVyLgogICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICBzZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlcXVlc3Quc2V0RG9tYWluRm9yQ2FjaGVQYXJ0
aXRpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT50b3BPcmlnaW4oKS5kb21haW5Gb3JDYWNo
ZVBhcnRpdGlvbigpKTsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTG9h
ZFhIUlN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKQEAgLTg5Myw3ICs4
OTMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5NQogICAgIHZtLmhlYXAu
ZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVtb3J5KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICog
Mik7CiAKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0Ojpv
dmVycmlkZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGUpCkBAIC0xMDMxLDcgKzEwMzEs
NyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQogICAgIC8vIEluIGNhc2UgZGlkRmFpbCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSBvbiBh
biBhc3luY2hyb25vdXMgWEhSIGNhbGwsIGxldCdzIGRpc3BhdGNoIG5ldHdvcmsgZXJyb3IgYXN5
bmNocm9ub3VzbHkKICAgICBpZiAobV9hc3luYyAmJiBtX3NlbmRGbGFnICYmICFtX2xvYWRlcikg
ewogICAgICAgICBtX3NlbmRGbGFnID0gZmFsc2U7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgbV90
aW1lb3V0VGltZXIuc3RvcCgpOwogICAgICAgICBtX25ldHdvcmtFcnJvclRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhTdGVwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCmluZGV4
IDhjOTI3YmZmM2VlYjY5MDgxZjA0N2JmMGYyNmU2ZDhlZWU5MmM1Y2QuLmZjZGMwMmM1MjE0ZDM5
NTBiZmJkNGNjZmY3M2QxODViMjY2NTU1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFN0ZXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCkBA
IC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0y
MDEsNyArMjAwLDcgQEAgaW5saW5lIGJvb2wgbm9kZU1hdGNoZXNCYXNpY1Rlc3QoTm9kZSYgbm9k
ZSwgU3RlcDo6QXhpcyBheGlzLCBjb25zdCBTdGVwOjpOb2RlVGUKICAgICAgICAgICAgIGlmIChu
YW1lID09IHN0YXJBdG9tKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSS5p
c0VtcHR5KCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCk7CiAKLSAgICAg
ICAgICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KG5vZGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
UGF0aHMgd2l0aG91dCBuYW1lc3BhY2VzIHNob3VsZCBtYXRjaCBIVE1MIGVsZW1lbnRzIGluIEhU
TUwgZG9jdW1lbnRzIGRlc3BpdGUgdGhvc2UgaGF2aW5nIGFuIFhIVE1MIG5hbWVzcGFjZS4gTmFt
ZXMgYXJlIGNvbXBhcmVkIGNhc2UtaW5zZW5zaXRpdmVseS4KICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUp
LmxvY2FsTmFtZSgpLCBuYW1lKSAmJiAobmFtZXNwYWNlVVJJLmlzTnVsbCgpIHx8IG5hbWVzcGFj
ZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcAppbmRleCBhOTBiOTY1MDA0YzQ4ZmI0OTA0ZWI3ZmMyYmUxYmM2MzNhNzIwNmE1Li5lYTBh
YzQwMjU4NDRjYjIxNGI0ZWNlZDIwOWVhYzkzNmI4MjcwMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3IuY3BwCkBAIC0yMSwxMSArMjEsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgogCiAjaWYgRU5BQkxFKFhTTFQpCiAK
LSNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0KICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlv
bi5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ29udGVu
dFNlY3VyaXR5UG9saWN5LmgiCkBAIC0zMyw3ICszMiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC04Nyw3ICs4
NSw3IEBAIFJlZjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nCiAKICAgICAgICAgaWYgKERvY3VtZW50KiBv
bGREb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICByZXN1bHQtPnNl
dFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KG9sZERvY3VtZW50KTsKLSAgICAgICAgICAgIHJlc3Vs
dC0+dGFrZURPTVdpbmRvd0Zyb20ob2xkRG9jdW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LT50
YWtlRE9NV2luZG93RnJvbSgqb2xkRG9jdW1lbnQpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRT
ZWN1cml0eU9yaWdpblBvbGljeShvbGREb2N1bWVudC0+c2VjdXJpdHlPcmlnaW5Qb2xpY3koKSk7
CiAgICAgICAgICAgICByZXN1bHQtPnNldENvb2tpZVVSTChvbGREb2N1bWVudC0+Y29va2llVVJM
KCkpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhvbGREb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKaW5k
ZXggMzY2OWMyZGE5ODYwYjNhZWE2MDJjOGRiZjdkMGZiYzk4Nzc5OGNkYy4uNWFiMjYyMGE3ODEx
MTc0NzcwZDcxYjYzNTdkOGQyZDkzOTFhOWUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcApA
QCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OmV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50KQogdm9pZCBXZWJGdWxsU2Ny
ZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndl
YmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKm1fZWxlbWVudCk7CiAgICAgbV9wYWdlLT5oaWRlUGFn
ZUJhbm5lcnMoKTsKICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAg
ICAgbV9wYWdlLT5mb3JjZVJlcGFpbnRXaXRob3V0Q2FsbGJhY2soKTsKQEAgLTExOSwxNCArMTE5
LDE0IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OndpbGxFbnRlckZ1bGxTY3JlZW4oKQog
dm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBB
U1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50
ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJGdWxs
U2NyZWVuTWFuYWdlcjo6d2lsbEV4aXRGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVt
ZW50KTsKICAgICBtX2ZpbmFsRnJhbWUgPSBzY3JlZW5SZWN0T2ZDb250ZW50cyhtX2VsZW1lbnQu
Z2V0KCkpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpOwogICAgIG1fcGFnZS0+c2hvd1BhZ2VCYW5uZXJz
KCk7CiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUZ1bGxTY3JlZW5DbGllbnQoKS5iZWdhbkV4
aXRGdWxsU2NyZWVuKG1fcGFnZS5nZXQoKSwgbV9maW5hbEZyYW1lLCBtX2luaXRpYWxGcmFtZSk7
CiB9CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6d2lsbEV4
aXRGdWxsU2NyZWVuKCkKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsU2Ny
ZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50
KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7Cisg
ICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAK
IHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oYm9vbCBh
bmltYXRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJl
YW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwCmluZGV4IGU5ZmYyNGY4MmRjNWQxOWU1OGNhOTZkYzE1NDZkZGRiMzdhNDNmYTMuLjk0NTAx
M2Q2ODg3Mzk3ZTJlYmY3MWIxOTlhOTVkNTI5YzM1MDUxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQg
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpzdGFydFVzZXJNZWRpYVJlcXVlc3Qo
VXNlck1lZGlhUmVxdWVzdCYKIAogICAgIGF1dG8mIHBlbmRpbmdSZXF1ZXN0cyA9IG1fYmxvY2tl
ZFJlcXVlc3RzLmFkZChkb2N1bWVudCwgVmVjdG9yPFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0Pj4o
KSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmIChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQot
ICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAg
ICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICBwZW5kaW5n
UmVxdWVzdHMuYXBwZW5kKCZyZXF1ZXN0KTsKIH0KIApAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQg
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjptZWRpYUNhblN0YXJ0KERvY3VtZW50
JiBkb2N1bWVudCkKICAgICB3aGlsZSAoIXBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgaWYgKCFkb2N1bWVudC5wYWdlKCktPmNhblN0YXJ0TWVkaWEoKSkgewogICAgICAgICAg
ICAgbV9ibG9ja2VkUmVxdWVzdHMuYWRkKCZkb2N1bWVudCwgcGVuZGluZ1JlcXVlc3RzKTsKLSAg
ICAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZU1lZGlhUmVxdWVzdEZyb21NYXBzKFVz
ZXJNZWRpYVJlcXUKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChwZW5kaW5n
UmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVxdWVzdC5kb2N1bWVudCgpLT5yZW1v
dmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICByZXF1ZXN0LmRvY3Vt
ZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fYmxvY2tlZFJlcXVlc3RzLmFkZChyZXF1ZXN0LmRvY3VtZW50KCksIHBl
bmRpbmdSZXF1ZXN0cyk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBlZWEzOGYwOTgyYzdlZDUxMTI1ODMy
NzlhMjY4OTA5NjBjZDdlMjdiLi44Y2RlYzIyMTdmZGE1OGNiNmMzODY0NWRkZGJkNWViZDdkOGNm
MjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcApAQCAtMzE3LDkgKzMxNyw5IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKICAgICBB
U1NFUlQoIW1faXNCZWluZ0Rlc3Ryb3llZCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1l
ZGlhQ2FuU3RhcnQpCi0gICAgICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9j
dW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCi0gICAgbV9wbHVn
aW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgbV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogCiAg
ICAgZGVzdHJveVBsdWdpbkFuZFJlc2V0KCk7CiAKQEAgLTU5MCwxMyArNTkwLDEzIEBAIHZvaWQg
UGx1Z2luVmlldzo6aW5pdGlhbGl6ZVBsdWdpbigpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgICAgICBt
X3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlz
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkQXVkaW9Qcm9kdWNlcih0
aGlzKTsKKyAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkQXVkaW9Qcm9kdWNlcigq
dGhpcyk7CiAKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElD
KQogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25j
YXN0PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCptX3BsdWdpbkVsZW1lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVl
bkxpc3RlbmVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
S2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tCmluZGV4IGFmNWFjMmYyODliYzFiMTIwNDY2YzU5YzAy
NzkwNmVjMTQ4MTY1ZTcuLjUzN2NjNjY4MDVkNDliZTBlZDBmYjQxZjYwOTA2MzVlNmI5OTVhZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktp
dEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0KQEAgLTQ1LDI1ICs0NSwyNSBA
QCAtIChpZClpbml0V2l0aEVsZW1lbnQ6KEVsZW1lbnQqKWVsZW1lbnQKIC0gKHZvaWQpd2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1l
bnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1l
bnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJG
dWxsU2NyZWVuKCpfZWxlbWVudCk7CiB9CiAKIC0gKHZvaWQpd2Via2l0RGlkRW50ZXJGdWxsU2Ny
ZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiB9CiAK
IC0gKHZvaWQpd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQot
ICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKIC0gKHZvaWQpd2Via2l0RGlkRXhpdEZ1bGxT
Y3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAg
ICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCmluZGV4IDNmMTA5OTZmYzI2Zjg2NzYxZDg3OTJjMDBh
N2ZiZjEyZjhlOGQ3YTguLmEyMTZiMGE4Y2ZlYWFmMzUyNzg2M2RjN2JiZTgzZGVlYTkxZTFjZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
dWxsU2NyZWVuQ29udHJvbGxlci5tbQpAQCAtMjM2LDcgKzIzNiw3IEBAIC0gKHZvaWQpZW50ZXJG
dWxsU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgogCiAgICAgX3NhdmVkU2NhbGUgPSBbX3dlYlZp
ZXcgX3ZpZXdTY2FsZUZhY3Rvcl07CiAgICAgW193ZWJWaWV3IF9zY2FsZVdlYlZpZXc6MSBhdE9y
aWdpbjpOU01ha2VQb2ludCgwLCAwKV07Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxmIF9k
b2N1bWVudF0tPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKl9lbGVtZW50KTsKICAgICBbc2Vs
ZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogICAgIFtzZWxmIF9k
b2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOwogCkBAIC0yNjksNyArMjY5LDcgQEAgLSAodm9pZClm
aW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQKICAgICAgICAg
Ly8gU2NyZWVuIHVwZGF0ZXMgdG8gYmUgcmUtZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRoaXMgYmxv
Y2sKICAgICAgICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRlcygpOwogICAgICAgICBbc2VsZiBfZG9j
dW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKLSAgICAgICAgW3NlbGYgX2Rv
Y3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQo
KSk7CisgICAgICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigp
OwogICAgICAgICAKICAgICAgICAgTlNSZWN0IHdpbmRvd0JvdW5kcyA9IFtbc2VsZiB3aW5kb3dd
IGZyYW1lXTsKICAgICAgICAgd2luZG93Qm91bmRzLm9yaWdpbiA9IE5TWmVyb1BvaW50OwpAQCAt
MzEzLDcgKzMxMyw3IEBAIC0gKHZvaWQpZXhpdEZ1bGxTY3JlZW4KIAogICAgIF9maW5hbEZyYW1l
ID0gc2NyZWVuUmVjdE9mQ29udGVudHMoX2VsZW1lbnQuZ2V0KCkpOwogCi0gICAgW3NlbGYgX2Rv
Y3VtZW50XS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQo
KSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CiAg
ICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVlKTsKIAogICAg
IGlmIChfaXNFbnRlcmluZ0Z1bGxTY3JlZW4pCkBAIC0zNTMsNyArMzUzLDcgQEAgLSAodm9pZClm
aW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogICAgIE5TRGlz
YWJsZVNjcmVlblVwZGF0ZXMoKTsKIAogICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1hdGlu
Z0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdERpZEV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50
XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBbX3dlYlZpZXcgX3NjYWxlV2ViVmll
dzpfc2F2ZWRTY2FsZSBhdE9yaWdpbjpOU01ha2VQb2ludCgwLCAwKV07CiAKICAgICBOU1Jlc3Bv
bmRlciAqZmlyc3RSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA0
NjBlNzhlNmUxZjc4NDg2MGZhN2RlZTQ1ZmMxMjA1NWZhNmExYTkxLi44NWY3MjAxM2VkZDc4NDMx
ZDFkMTU4NTFjMDA2ZDkxYTVkY2ExYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIFBsdWdpblZp
ZXc6OnN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQogICAgIC8vIG91cnNlbHZlcy4gT3RoZXJ3
aXNlLCB0aGUgbG9hZGVyIHdpbGwgdHJ5IHRvIGRlbGl2ZXIgZGF0YSBiZWZvcmUgd2UndmUKICAg
ICAvLyBzdGFydGVkIHRoZSBwbHVnLWluLgogICAgIGlmICghbV9sb2FkTWFudWFsbHkgJiYgIW1f
cGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgIG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAg
ICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0
aGlzKTsKICAgICAgICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMjkxLDcgKzI5MSw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3
KCkKICAgICAgICAgaW5zdGFuY2VNYXAoKS5yZW1vdmUobV9pbnN0YW5jZSk7CiAKICAgICBpZiAo
bV9pc1dhaXRpbmdUb1N0YXJ0KQotICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1fcGFyZW50RnJhbWUt
PmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICAgICBz
dG9wKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggNGFhYTA5MjhjODJi
MjU5ZjQxMzVjOTJmZTFmNzEwZjk1YzEyYjljMi4uYmVlNjQwOWYxNjA5ZjdjYTJhMjI4YzJlYWYz
Yjk5MjU2MDA0YTYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTc1MDYs
MTMgKzc1MDYsMTMgQEAgdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50U2V0UGFyZW50V2lu
ZG93KEhXTkQgaG9zdFdpbmRvdykKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxF
bnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50KTsKLSAg
ICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbigqbV9mdWxsU2Ny
ZWVuRWxlbWVudCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudERpZEVudGVy
RnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOwotICAgIG1f
ZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVt
ZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOwogfQogCiB2b2lkIFdl
YlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3JlZW4oKQpAQCAtNzUyNCw3ICs3
NTI0LDcgQEAgdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEV4aXRGdWxsU2NyZWVu
KCkKIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudERpZEV4aXRGdWxsU2NyZWVuKCkKIHsK
ICAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVu
dC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2Ny
ZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53
ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBudWxs
cHRyOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319843</attachid>
            <date>2017-09-04 00:04:47 -0700</date>
            <delta_ts>2017-09-04 09:26:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170904000446.patch</filename>
            <type>text/plain</type>
            <size>273609</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM3N2FlNzhmMzgzOWY2
MTY0NWI1MDA4ZGY2YjdiYjdjMGI4ZWYyMi4uODUyOWEwYzI5ZDFiNmIwNjJlNDNlYmI5M2FhYjkx
M2RjOWYzMzVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcj
dXRmOCgpIGFsbG9jYXRlcyBuZXcgQ1N0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhMTRmMTQyZGZiNTJhNmU3
NDAxYzEyNjk0NzdmNDBlNzk4YTNmMzE4Li4yYjYwMjc0NmJkMWViNmExYjM1ZDAyMTBlOWIwY2Y4
ODZlODRmMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIg
dGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wMyAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBz
dHlsZSBpc3N1ZXMgaW4gdGhlIFJlbW90ZSBMYXllciBUcmVlIGNvZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCBhYzI2YThlNmZhYTgwZjUyYzE1MjEwMjY5N2FiMjQyYzNkNmRlYWIy
Li43MmI1ODUwYjIwNTM2YTg3NzQ1MDdjMDViZTg0NTgwYTVjNDk5MTU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTIgQEAKIDIwMTctMDktMDMgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFu
IHBvaW50ZXJzIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisyMDE3LTA5LTAzICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwogICAgICAgICBbQ29jb2FdIFRpZHkgYSBmZXcgdGhp
bmdzIGluIGxlZ2FjeSBXZWJIVE1MVmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjgwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCAzODVkOTRkOWI5MjQ5NzI4NTU1
MmI5ZWU3ZTY2NGQ4MTY2MjFjZWI4Li43MjU3MTNkNTQzZWJmNTNmYTAzN2VkZWYwNTgwZWQyYTll
YzFkM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxl
UGF5U2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBs
ZVBheVNlc3Npb24uY3BwCkBAIC02OTksNyArNjk5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBw
bGVQYXlTZXNzaW9uOjpiZWdpbigpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAot
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRB
dXRob3JpemF0aW9uUgogICAgIH0KIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBib29s
IEFwcGxlUGF5U2Vzc2lvbjo6aXNGaW5hbFN0YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNz
aW9uOjpkaWRSZWFjaEZpbmFsU3RhdGUoKQogewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7
Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hl
U3RvcmFnZS5jcHAKaW5kZXggNDE1MzUxOGM3MmU4YTQ2ZmQ4MjY3MWY4MTJlOWU3Y2E4MDU2MjEx
YS4uZTNkYWRkMTBkMTExMTY3YzE1NTNkNWI4YWY2NmU4NWIyNGI5NGU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTAxLDcgKzEwMSw3
IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZv
LCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRp
bmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHN0YXJ0U2VxdWVudGlhbE1hdGNoKGNvcHlDYWNo
ZXMobV9jYWNoZXMpLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgcHJv
bWlzZSA9IFdURk1vdmUocHJvbWlzZSldKEV4Y2VwdGlvbk9yPEZldGNoUmVzcG9uc2UqPiYmIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTEzLDcgKzExMyw3IEBA
IHZvaWQgQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZvLCBD
YWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxGZXRjaFJlc3BvbnNlPj4o
KnJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lk
IENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0
aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgIGlmIChvcmlnaW4uaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+cmV0cmlldmVDYWNoZXMob3JpZ2luLCBt
X3VwZGF0ZUNvdW50ZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShDYWNo
ZUluZm9zT3JFcnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9pc1N0b3Bw
ZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2
b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgIH0pOwogfQogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUMK
ICAgICAgICAgU3RyaW5nIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOwogICAgICAgICBBU1NFUlQo
IW9yaWdpbi5pc051bGwoKSk7CiAKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX2Nvbm5lY3Rpb24t
Pm9wZW4ob3JpZ2luLCBuYW1lLCBbdGhpcywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlz
ZSldKGNvbnN0IENhY2hlSWRlbnRpZmllck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzVmFsdWUoKSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8RE9NQwog
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy5hcHBlbmQoV1RGTW92ZShjYWNoZSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIENhY2hlU3Rv
cmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURlZmVycmVkPElETEJv
b2xlYW4+JiYgcAogICAgICAgICBTdHJpbmcgb3JpZ2luID0gdGhpcy0+b3JpZ2luKCk7CiAgICAg
ICAgIEFTU0VSVCghb3JpZ2luLmlzTnVsbCgpKTsKIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1f
Y29ubmVjdGlvbi0+cmVtb3ZlKG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRlbnRpZmllcigpLCBbdGhp
cywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGNvbnN0IENhY2hlSWRlbnRpZmll
ck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVk
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTIzOCw3ICsy
MzgsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9N
UHJvbWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcAogICAgICAgICAgICAgICAgICAgICBwcm9t
aXNlLnJlc29sdmUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICBtX2NhY2hlcy5yZW1v
dmUocG9zaXRpb24pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9ET01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlLmNwcAppbmRleCA0YmQ3YzUxMDdkMjBjYzdiZWIzNDE3ODFlOTU0ZjI4N2VjMzIzMjdlLi5i
YmE0ZTc2MWVlNjRkNTI5NmNkYzNiZWM0ZDM0NGE0ZTNmOTZiZjU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgRE9N
Q2FjaGU6OnB1dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjxGZXRjaFJlc3BvbnNlPiYmIHJlc3Bv
bnNlLCBET01Qcm9taXNlCiAgICAgfQogCiAgICAgaWYgKHJlc3BvbnNlLT5pc0xvYWRpbmcoKSkg
ewotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHJlc3BvbnNlLT5jb25zdW1lQm9keVdoZW5Mb2FkZWQo
W3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCByZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KSwg
cmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKSwgdGhpc10oRXhjZXB0aW9uT3I8UmVmUHRyPFNo
YXJlZEJ1ZmZlcj4+JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QocmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBET01DYWNoZTo6cHV0
KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVBy
b21pc2UKICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwOSw3ICs0
MDksNyBAQCB2b2lkIERPTUNhY2hlOjprZXlzKHN0ZDo6b3B0aW9uYWw8UmVxdWVzdEluZm8+JiYg
aW5mbywgQ2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpbwogCiB2b2lkIERPTUNhY2hlOjpyZXRyaWV2
ZVJlY29yZHMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKT4m
JiBjYWxsYmFjaykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPnJldHJpZXZlUmVjb3Jkcyht
X2lkZW50aWZpZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRz
T3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBE
T01DYWNoZTo6cmV0cmlldmVSZWNvcmRzKFdURjo6RnVuY3Rpb248dm9pZChzdGQ6Om9wdGlvbmFs
PEV4Y2VwdGlvbj4mJik+JiYKICAgICAgICAgICAgICAgICB1cGRhdGVSZWNvcmRzKFdURk1vdmUo
cmVzdWx0LnZhbHVlKCkpKTsKICAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtNDU3LDcgKzQ1Nyw3
IEBAIFZlY3RvcjxDYWNoZVN0b3JhZ2VSZWNvcmQ+IERPTUNhY2hlOjpxdWVyeUNhY2hlV2l0aFRh
cmdldFN0b3JhZ2UoY29uc3QgRmV0Y2hSZXF1CiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoRGVsZXRl
T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVRdWVyeU9wdGlvbnMm
JiBvcHRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uT3I8Ym9vbD4mJik+JiYgY2Fs
bGJhY2spCiB7Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uLT5iYXRjaERlbGV0ZU9wZXJhdGlvbiht
X2lkZW50aWZpZXIsIHJlcXVlc3QuaW50ZXJuYWxSZXF1ZXN0KCksIFdURk1vdmUob3B0aW9ucyks
IFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRJZGVudGlmaWVyc09y
RXJyb3ImJiByZXN1bHQpIHsKICAgICAgICAgaWYgKCFtX2lzU3RvcHBlZCkgewogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIERPTUNh
Y2hlOjpiYXRjaERlbGV0ZU9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIENh
Y2hlUXVlcnlPcHRpbwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxiYWNr
KCFyZXN1bHQudmFsdWUoKS5pc0VtcHR5KCkpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiAgICAgfSk7CiB9CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIERPTUNhY2hlOjpiYXRjaFB1
dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2UmIHJl
cwogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJl
Y29yZHMsIFdURjo6RnVuY3Rpb248dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFj
aykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPmJhdGNoUHV0T3BlcmF0aW9uKG1faWRlbnRp
ZmllciwgV1RGTW92ZShyZWNvcmRzKSwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKFJlY29yZElkZW50aWZpZXJzT3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1f
aXNTdG9wcGVkKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQpAQCAtNTA2
LDcgKzUwNiw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keU93bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5T3duZXIuY3BwCmluZGV4IDBmYjJkZjNjZjgxZWIzYmE4NTk5MDg2ZDg2YzFjNWZmYjBhN2Fm
NTQuLmIwYjlmNGM3MjFmMTZmNjM3ZDQwMWY3Y2YwNGQ4YWMxMTdkYjQzMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBGZXRjaEJvZHlPd25lcjo6bG9hZEJsb2IoY29uc3QgQmxvYiYgYmxvYiwg
RmV0Y2hCb2R5Q29uc3VtZXIqIGNvbnN1bWVyKQogICAgICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6
Om51bGxvcHQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hC
b2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEZl
dGNoQm9keU93bmVyOjpmaW5pc2hCbG9iTG9hZGluZygpCiAgICAgQVNTRVJUKG1fYmxvYkxvYWRl
cik7CiAKICAgICBtX2Jsb2JMb2FkZXIgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2
b2lkIEZldGNoQm9keU93bmVyOjpibG9iTG9hZGluZ1N1Y2NlZWRlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKaW5kZXggMmFhN2NiYTBl
YzM4YmUyNTFhMmEwMmFkM2I3OTIwMGZhMmNkM2IxNC4uZWZiNTBjMDMyNWYxMWVhN2VhZWQ0NjY1
MWQ4YjZjZThlOTdkZTEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHlTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hCb2R5U291cmNlLmNwcApAQCAtNDUsMTIgKzQ1LDEyIEBAIGJvb2wgRmV0Y2hCb2R5U291
cmNlOjppc1JlYWRhYmxlU3RyZWFtTG9ja2VkKCkgY29uc3QKIAogdm9pZCBGZXRjaEJvZHlTb3Vy
Y2U6OnNldEFjdGl2ZSgpCiB7Ci0gICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KCZt
X2JvZHlPd25lcik7CisgICAgbV9ib2R5T3duZXIuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93
bmVyKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlTb3VyY2U6OnNldEluYWN0aXZlKCkKIHsKLSAgICBt
X2JvZHlPd25lci51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9ib2R5T3duZXIpOworICAgIG1fYm9k
eU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1fYm9keU93bmVyKTsKIH0KIAogdm9pZCBGZXRj
aEJvZHlTb3VyY2U6OmRvU3RhcnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKaW5kZXggY2NlN2E4NzAxYzRmMTZjMDhjOTM1YWYzMDYzMDZiOTIw
NDc5ZTFkYy4uYWRlZDZjODMyZDdhOWI4ZTlkNGIzZDYyMzVmMmFjZGFiMzQxZDQwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwCkBAIC0xNzAs
MTIgKzE3MCwxMiBAQCBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjpCb2R5TG9hZGVyKEZldGNo
UmVzcG9uc2UmIHJlc3BvbnNlLCBOb3RpZmljYXRpb25DYWxsYgogICAgIDogbV9yZXNwb25zZShy
ZXNwb25zZSkKICAgICAsIG1fcmVzcG9uc2VDYWxsYmFjayhXVEZNb3ZlKHJlc3BvbnNlQ2FsbGJh
Y2spKQogewotICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX3Jlc3BvbnNlKTsK
KyAgICBtX3Jlc3BvbnNlLnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogRmV0
Y2hSZXNwb25zZTo6Qm9keUxvYWRlcjo6fkJvZHlMb2FkZXIoKQogewotICAgIG1fcmVzcG9uc2Uu
dW5zZXRQZW5kaW5nQWN0aXZpdHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2UudW5zZXRQ
ZW5kaW5nQWN0aXZpdHkobV9yZXNwb25zZSk7CiB9CiAKIHZvaWQgRmV0Y2hSZXNwb25zZTo6Qm9k
eUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc291
cmNlUmVzcG9uc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
TWVkaWFTb3VyY2UuY3BwCmluZGV4IGMyY2VmYzY5YjA4YWU4MGNhNGI1NzNjOWY5ZjNlMTVkZDI5
NTEzMzYuLmIyZGZjZDg0NTUwNDdjYTdlMjJhYmVlMzY2MjZkY2Y1MThlYTUzZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBA
IC0xMzEsMTIgKzEzMSwxMiBAQCB2b2lkIE1lZGlhU291cmNlOjpzZXRQcml2YXRlQW5kT3BlbihS
ZWY8TWVkaWFTb3VyY2VQcml2YXRlPiYmIG1lZGlhU291cmNlUHJpdmF0ZQogCiB2b2lkIE1lZGlh
U291cmNlOjphZGRlZFRvUmVnaXN0cnkoKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE1lZGlhU291cmNl
OjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkKIHsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIE1lZGlhVGltZSBNZWRp
YVNvdXJjZTo6ZHVyYXRpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA3NDNlY2RiNTk1MGU3MzlhMDc1ZGVh
MjUzOGQ3MjU0MWZiMGUxMDhiLi5jODY0YTA0NzFkMjY4YzZlZGUzZDc3ZjdkMmNlNWQ2NTM5MTU2
NzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIE1lZGlhU3RyZWFtOjp+TWVkaWFTdHJlYW0o
KQogICAgICAgICB0cmFjay0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogICAgIGlmIChEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChtX2lzV2FpdGlu
Z1VudGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4Niw3ICsyODYsNyBAQCB2
b2lkIE1lZGlhU3RyZWFtOjpzdGFydFByb2R1Y2luZ0RhdGEoKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAg
ICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IDE2ODg0ZTM4MjY2ODRjZTc3ODdkNTg2YTg0Zjg4
ZmRjNzkxYzI3ODkuLjhiMjQ1MjQ5YjkzNjZmMzg1YTM4NTk5ODA5MzFiMDcwMGUwMjYwNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrLmNwcApAQCAtNjEsNyArNjEsNyBAQCBNZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0
cmVhbVRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxNZWRpYVN0cgog
ICAgIG1fcHJpdmF0ZS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9jdW1l
bnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNl
cih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogfQog
CiBNZWRpYVN0cmVhbVRyYWNrOjp+TWVkaWFTdHJlYW1UcmFjaygpCkBAIC02OSw3ICs2OSw3IEBA
IE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkKICAgICBtX3ByaXZhdGUtPnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKIAogICAgIGlmIChhdXRvIGRvY3VtZW50ID0gdGhpcy0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIodGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50LT5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBNZWRpYVN0cmVhbVRyYWNrOjpraW5kKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5k
ZXggY2MwZTliNTRkMTA1MDg4YmZiNDYxMzkyYjEwZjM5NjZkN2QzMjY5ZC4uNzQ5NTA5ZDJiMjIy
YTAzMWNiYzY2YjE5MTIwYmRjZmRjZjMxNmYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTU4LDcgKzU4LDcg
QEAgUmVmPFJUQ0RhdGFDaGFubmVsPiBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIHN0ZDoKICAgICBhdXRvIGNoYW5uZWwgPSBhZG9wdFJlZigq
bmV3IFJUQ0RhdGFDaGFubmVsKGNvbnRleHQsIFdURk1vdmUoaGFuZGxlciksIFdURk1vdmUobGFi
ZWwpLCBXVEZNb3ZlKG9wdGlvbnMpKSk7CiAgICAgY2hhbm5lbC0+c3VzcGVuZElmTmVlZGVkKCk7
CiAgICAgY2hhbm5lbC0+bV9oYW5kbGVyLT5zZXRDbGllbnQoY2hhbm5lbC5nZXQoKSk7Ci0gICAg
Y2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwucHRyKCkpOworICAgIGNoYW5uZWwt
PnNldFBlbmRpbmdBY3Rpdml0eShjaGFubmVsLmdldCgpKTsKICAgICByZXR1cm4gY2hhbm5lbDsK
IH0KIApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmNsb3NlKCkKIAog
ICAgIG1faGFuZGxlci0+Y2xvc2UoKTsKICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwotICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKIH0KIAogdm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkQ2hhbmdlUmVhZHlTdGF0ZShSVENEYXRh
Q2hhbm5lbFN0YXRlIG5ld1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCA5MGIyMWVhNjIzYzE0
N2U0NTkxMmI1OTgxNWJkY2ExZDdkZDcwZDg5Li42ZTJmYTg3MzYzNzZkNTgxYzQwOWYyODM5ZjYy
ODM4MTAyNDBjYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNjIsMTIgKzYyLDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBQZWVyQ29ubmVjdGlvbjsKIAogUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBSVENQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7
Ci0gICAgUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpu
ZXcgUlRDUGVlckNvbm5lY3Rpb24oY29udGV4dCkpOworICAgIGF1dG8gcGVlckNvbm5lY3Rpb24g
PSBhZG9wdFJlZigqbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbnRleHQpKTsKICAgICBwZWVyQ29u
bmVjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgLy8gUlRDUGVlckNvbm5lY3Rpb24gbWF5
IHNlbmQgZXZlbnRzIGF0IGFib3V0IGFueSB0aW1lIGR1cmluZyBpdHMgbGlmZXRpbWUuCiAgICAg
Ly8gTGV0J3MgbWFrZSBpdCB1bmNvbGxlY3RhYmxlIHVudGlsIHRoZSBwYyBpcyBjbG9zZWQgYnkg
SlMgb3IgdGhlIHBhZ2Ugc3RvcHMgaXQuCiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+aXNDbG9z
ZWQoKSkgewotICAgICAgICBwZWVyQ29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJD
b25uZWN0aW9uLnB0cigpKTsKKyAgICAgICAgcGVlckNvbm5lY3Rpb24tPnNldFBlbmRpbmdBY3Rp
dml0eShwZWVyQ29ubmVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgLy8gSUNFIGNhbmRpZGF0ZSBm
aWx0ZXJpbmcgY2FuIG9ubHkgYmUgZGlzYWJsZWQgZm9yIGNvbm5lY3Rpb25zIGZyb20gZG9jdW1l
bnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIHRvcCBkb2N1bWVudCwKICAgICAg
ICAgLy8gb3IgaWYgdGhlIHBhZ2Ugd2FzIHNldCB0byBkaXNhYmxlIGl0LgpAQCAtNDMzLDcgKzQz
Myw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmRvU3RvcCgpCiAKICAgICBtX2JhY2tlbmQt
PnN0b3AoKTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6cmVnaXN0
ZXJUb0NvbnRyb2xsZXIoUlRDQ29udHJvbGxlciYgY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXgg
ZjQzOTQzMThlYjFmZDdjZjA4N2Q5YjNjYjA4YzcxYjlmOWJkNzkxMS4uNzJhZDNhYmNjMDY2NjU0
MzI0NmNhODVhMzUzZTQwMjY1NjA1OTFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAg
dm9pZCBOb3RpZmljYXRpb246OnNob3coKQogICAgIH0KICAgICBpZiAoY2xpZW50LnNob3codGhp
cykpIHsKICAgICAgICAgbV9zdGF0ZSA9IFNob3dpbmc7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiB9
CiAKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6ZmluYWxpemUoKQogICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUgPSBD
bG9zZWQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIE5vdGlmaWNhdGlvbjo6ZGlzcGF0Y2hTaG93RXZl
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jh
c2ljSW5zcGVjdG9yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcAppbmRleCAyN2U1NmM0YzZiOTQ3YWViODI0NTllZDEz
ZjMzYjU4MWEzZDNhMGE0Li4wNTViZmY1ZjFlYmFhMWIyYmU1YTdjNDQwZWUwOWYzYjE3OGI5YzFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcApAQCAtOTksNyArOTksNyBAQCB2b2lkIEF1ZGlvQmFz
aWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQdWxsU3RhdHVzKCkKICAgICAgICAgLy8gV2hlbiBhbiBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb3duc3RyZWFtIG5vZGUs
IGl0IHdpbGwgZ2V0IHB1bGxlZCBieSB0aGUKICAgICAgICAgLy8gZG93bnN0cmVhbSBub2RlLCB0
aHVzIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KICAg
ICAgICAgaWYgKG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKLSAgICAgICAgICAgIGNvbnRleHQoKS5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5yZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0aWNQ
dWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA3LDExICsxMDcsMTEg
QEAgdm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCiAgICAg
ICAgIGlmIChudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgIW1fbmVlZEF1dG9tYXRpY1B1bGwp
IHsKICAgICAgICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgbm90
IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0cmVhbSBub2RlIHdoaWxlIHN0aWxsIGNvbm5lY3RlZCBm
cm9tCiAgICAgICAgICAgICAvLyB1cHN0cmVhbSBub2RlKHMpLCBhZGQgaXQgdG8gdGhlIGNvbnRl
eHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgotICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9t
YXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgY29udGV4dCgpLmFkZEF1dG9tYXRpY1B1
bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAgIG1fbmVlZEF1dG9tYXRpY1B1bGwgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UgaWYgKCFudW1iZXJPZklucHV0Q29ubmVjdGlvbnMgJiYgbV9uZWVkQXV0
b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gVGhlIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
IGlzIGNvbm5lY3RlZCB0byBub3RoaW5nLCByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGF1
dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGlj
UHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVs
bE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCmluZGV4IGQ5NTA0N2M5MDMwNTFjMGJjM2Q1ZTYzOGIyN2I0NTg1NDI0
YjA1MzIuLjAxMmFlOGZmNjQ0MzhkYzYzYzdiNGI3MzBkOWJhMjdjMjM0NjA5YjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKCkKIHsKICAg
ICAvLyBBY2NvcmRpbmcgdG8gc3BlYyBBdWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBw
YWdlIG5hdmlnYXRlLgogICAgIC8vIExldHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0
aCBwZW5kaW5nIGFjdGl2aXR5IGFuZCB1bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgotICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpbml0aWFsaXplR1N0cmVhbWVyKCk7CkBAIC0yMTgs
OCArMjE4LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlzT2ZmbGlu
ZUNvbnRleHQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcih0
aGlzKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZEF1ZGlv
UHJvZHVjZXIoKnRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICAgICAgLy8gVGhp
cyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRl
SW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1
ZGlvLgogICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwg
YSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhp
cyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9p
ZCBBdWRpb0NvbnRleHQ6OmNsZWFyKCkKICAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6
ZSgpKTsKIAogICAgIC8vIEl0IHdhcyBzZXQgaW4gY29uc3RydWN0Q29tbW9uLgotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCkBAIC0yNjMsOCArMjYzLDgg
QEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlvVGhyZWFk
RmluaXNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAgZG9jdW1l
bnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNr
cygqdGhpcyk7CiAKICAgICAgICAgQVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwogICAg
ICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CkBAIC04MjQsMTQgKzgyNCwxNCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6aGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogICAgIG1fZGVmZXJy
ZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6Om1hcmtG
b3JEZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRl
bGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwog
CiAgICAgaWYgKGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKQotICAgICAgICBtX25vZGVzVG9EZWxl
dGUuYXBwZW5kKG5vZGUpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQobm9kZSk7
CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOwogCiAgICAg
Ly8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhlIG5v
ZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAogICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0aW9u
cyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRsZVBv
c3RSZW5kZXJUYXNrcygpCkBAIC05MjgsMTkgKzkyOCwxOSBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6
aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0
cy5jbGVhcigpOwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUo
QXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1bGxOb2Rl
KEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgIGlmICht
X2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fYXV0
b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIAotdm9pZCBBdWRpb0NvbnRl
eHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9D
b250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7CiAgICAg
QVNTRVJUKGlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5y
ZW1vdmUobm9kZSkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgmbm9kZSkp
CiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIApA
QCAtOTk3LDcgKzk5Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygp
CiAgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAg
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBh
Z2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVx
dWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKQEAgLTEwMTcsNyArMTAx
Nyw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygpCiAgICAgaWYgKHBh
Z2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNhblN0YXJ0
TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VDb25z
ZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDU3NzMxN2QyZTgyZGVkOWZhMDc4NTlkYjBl
MDYwYTFhYTg5NWYzYWUuLjYzNDk3ZGFiZTExMzJiN2VjM2ZiMTIzYzFhNjMwNzQ3Y2FlN2M2MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaApA
QCAtMTUzLDEzICsxNTMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWZGaW5pc2hlZFNvdXJj
ZU5vZGVzKCk7CiAKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFya2VkIG5v
ZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lk
IG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKKyAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihB
dWRpb05vZGUmKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7CiAKICAgICAvLyBBdWRp
b0NvbnRleHQgY2FuIHB1bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50
dW0gZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9k
ZXMuCiAgICAgLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9kZXMgd2hv
IHdhbnQgdG8gYWRkL3JlbW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21hdGljIHB1
bGwgbGlzdHMuCi0gICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqKTsKLSAg
ICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZvaWQgYWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJik7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQ
dWxsTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxl
UG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVk
IGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgogICAgIHZvaWQg
cHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAppbmRleCBmMjAwYjA1
MGU3MjYxMjdjYzFkNmY2YjVhNjM1ZjY3YWYyYjRlNzc2Li4xYWM3N2FhMzdjMjY1MzdiM2UyZmYy
MjM2MWFhNzI1MmQ1MDM1NWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGUuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBBdWRpb05vZGU6OmZpbmlz
aERlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNj
b25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0
by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNo
IHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAgICAgICAg
ICAgIGNvbnRleHQoKS5tYXJrRm9yRGVsZXRpb24odGhpcyk7CisgICAgICAgICAgICAgICAgY29u
dGV4dCgpLm1hcmtGb3JEZWxldGlvbigqdGhpcyk7CiAgICAgICAgICAgICAgICAgbV9pc01hcmtl
ZEZvckRlbGV0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChy
ZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA3MjNhMGI2YzhlMWU4ZmM4MmRkZGQ2MGRj
NjgyYzA0ZDg0MWIwOWU5Li4zYjU3MGZkMjlkNzYwZWUzOWU3ZjQ0NWFiODFiN2JkM2I0NmQwYTQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cApAQCAtMjgzLDggKzI4Myw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVj
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKICAgICAgICAg
UmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVuSW5zZWN1
cmVDb250ZW50KGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsKSkgewotICAgICAgICAg
ICAgLy8gQmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRp
bmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3RvcCgpLgotICAgICAgICAgICAgQWN0aXZlRE9N
T2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICAvLyBCYWxhbmNl
ZCBieSB0aGUgY2FsbCB0byB1bnNldFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3Rv
cCgpLgorICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgICAgICAg
ICAgLy8gV2UgbXVzdCBibG9jayB0aGlzIGNvbm5lY3Rpb24uIEluc3RlYWQgb2YgdGhyb3dpbmcg
YW4gZXhjZXB0aW9uLCB3ZSBpbmRpY2F0ZSB0aGlzCiAgICAgICAgICAgICAvLyB1c2luZyB0aGUg
ZXJyb3IgZXZlbnQuIEJ1dCBzaW5jZSB0aGlzIGNvZGUgZXhlY3V0ZXMgYXMgcGFydCBvZiB0aGUg
V2ViU29ja2V0J3MKQEAgLTMxNSw3ICszMTUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2Nr
ZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcgog
ICAgICAgICBwcm90b2NvbFN0cmluZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3VicHJvdG9j
b2xTZXBhcmF0b3IoKSk7CiAKICAgICBtX2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHByb3RvY29s
U3RyaW5nKTsKLSAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAg
LTU0NCw3ICs1NDQsNyBAQCB2b2lkIFdlYlNvY2tldDo6c3RvcCgpCiAgICAgbV9wZW5kaW5nRXZl
bnRzLmNsZWFyKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiAgICAgaWYgKHBlbmRp
bmcpCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogY29uc3QgY2hhciog
V2ViU29ja2V0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTYyOCw3ICs2MjgsNyBA
QCB2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVyZWRBbW91
bnQsIENsb3NpbmdIYW5kc2hha2VDb21wbAogICAgICAgICBtX2NoYW5uZWwgPSBudWxscHRyOwog
ICAgIH0KICAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2ZURPTU9i
amVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJTb2NrZXQ6OmRpZFVwZ3JhZGVVUkwoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYjRl
OGQ5MmIyZDFhMTJjZDEyMDE2ZmJiMDIzMmY4NGUxMDI0NTUxOS4uM2Y4MGFkNWI4M2E0MWM1ZWQ2
NDdhMjYwNzVlYmJkZWE5ODZmYjI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC0zNjYsNyArMzY2LDcgQEAgSlNDOjpKU0ludGVybmFs
UHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9i
YWxPYmplY3QKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBl
eGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRG
ZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5yZXNvbHZl
KGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBpbXBvcnRlck1v
ZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CkBAIC0zNzUsNyArMzc1LDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZSogSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJGZXRjaChKU0M6OkpTR2xvYmFsT2JqZWN0
KgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9N
V2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9j
dW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1
bGVMb2FkZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+bW9kdWxlTG9hZGVyKCkuZmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2Fk
ZXIsIG1vZHVsZUtleSwgc2NyaXB0RmV0Y2hlcik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhl
YywganNVbmRlZmluZWQoKSk7CiB9CkBAIC0zODQsNyArMzg0LDcgQEAgSlNDOjpKU1ZhbHVlIEpT
RE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyRXZhbHVhdGUoSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmV2YWx1YXRlKGdsb2JhbE9iamVjdCwg
ZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIG1vZHVsZVJlY29yZCwgc2NyaXB0RmV0Y2hl
cik7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCkuZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBz
Y3JpcHRGZXRjaGVyKTsKICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0z
OTIsNyArMzkyLDcgQEAgSlNDOjpKU0ludGVybmFsUHJvbWlzZSogSlNET01XaW5kb3dCYXNlOjpt
b2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNDOjpKU0dsb2JhbE8KIHsKICAgICBKU0RPTVdpbmRv
d0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxP
YmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9h
ZGVyKCktPmltcG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9k
dWxlTmFtZSwgc291cmNlT3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVM
b2FkZXIoKS5pbXBvcnRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1v
ZHVsZU5hbWUsIHNvdXJjZU9yaWdpbik7CiAgICAgSlNDOjpKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywganNV
bmRlZmluZWQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9N
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKaW5kZXggZTI3
MDUzZmE1ZGZmYTJjZmM5ZjFkOTM0Y2YzYzc1MjA2NWVkNTRiZS4uZjk1YTA2ZGJmZGU5M2IyOGUw
YTU0ZDE1YjgyYzJjZTVjYWM2MzY2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Fj
dGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
aApAQCAtNzAsMTggKzcwLDE4IEBAIHB1YmxpYzoKICAgICAvLyBJdCBjYW4sIGhvd2V2ZXIsIGhh
dmUgYSBzaWRlIGVmZmVjdCBvZiBkZWxldGluZyBhbiBBY3RpdmVET01PYmplY3QuCiAgICAgdmly
dHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgc2V0UGVuZGlu
Z0FjdGl2aXR5KFQqIHRoaXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBz
ZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVjdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0
aGlzT2JqZWN0ID09IHRoaXMpOwotICAgICAgICB0aGlzT2JqZWN0LT5yZWYoKTsKKyAgICAgICAg
QVNTRVJUKCZ0aGlzT2JqZWN0ID09IHRoaXMpOworICAgICAgICB0aGlzT2JqZWN0LnJlZigpOwog
ICAgICAgICArK21fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0eShUKiB0aGlzT2JqZWN0KQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdW5zZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVj
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdBY3Rpdml0eUNvdW50ID4gMCk7CiAg
ICAgICAgIC0tbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKLSAgICAgICAgdGhpc09iamVjdC0+ZGVy
ZWYoKTsKKyAgICAgICAgdGhpc09iamVjdC5kZXJlZigpOwogICAgIH0KIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggYWU1NmQ2OWQw
ZWQ0YzJlNjhiZTlkOTVmMDFiNGM3MDRjNWYxNTFjMy4uMjI4OGUzMWJhZDkwZDJmMjRiY2MwMjFj
Zjk0ZmIxYjU0ZDYxZjA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3Rl
ckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAt
NTIsNyArNTIsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCiAgICAgaWYgKG1fZGF0
YSA9PSBub25OdWxsRGF0YSAmJiBjYW5Vc2VTZXREYXRhT3B0aW1pemF0aW9uKCp0aGlzKSkgewot
ICAgICAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAg
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiAgICAgICAg
IGlmIChkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgsIG9sZExlbmd0
aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRh
OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVyRGF0YT4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5vbk51bGxEYXRhLCAw
LCBvbGRMZW5ndGgsIG5vbk51bGxEYXRhLmxlbmd0aCgpKTsKLSAgICBkb2N1bWVudCgpLnRleHRS
ZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgq
dGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBDaGFyYWN0ZXJE
YXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCkBAIC0x
MjgsNyArMTI4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0
YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIAogICAgIHNldERhdGFBbmRV
cGRhdGUobmV3U3RyLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCi0gICAgZG9jdW1lbnQo
KS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBkb2N1bWVu
dCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIHJl
dHVybiB7IH07CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFj
dGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAg
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCi0gICAgZG9j
dW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKKyAgICBkb2N1bWVudCgp
LnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKIAogICAgIHJldHVybiB7IH07CiB9
CkBAIC0xNjQsOCArMTY0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6cmVw
bGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KICAgICBzZXREYXRh
QW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAv
LyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNr
aW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAg
ICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwor
ICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOworICAgIGRv
Y3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGRhZDVhNjkyYWY0
MjZhYjVlNjU0MzE4MzQ1NDg2M2EyMWQwMjU5NTcuLmM5ZmY1NjllZjEwOGZjOWZlMzY5OTBhZmVi
NDZmOGU0MzI3OWRhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjgxLDIyICs2ODEs
MjAgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJp
bmcmIGtleSkKICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgaWYgKCFtX2FjY2Vzc0tleU1hcFZhbGlkKSB7Ci0gICAgICAgIGJ1aWxkQWNjZXNzS2V5
TWFwKHRoaXMpOworICAgICAgICBidWlsZEFjY2Vzc0tleU1hcCgqdGhpcyk7CiAgICAgICAgIG1f
YWNjZXNzS2V5TWFwVmFsaWQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9lbGVtZW50c0J5
QWNjZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nl
c3NLZXlNYXAoVHJlZVNjb3BlKiBzY29wZSkKK3ZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5
TWFwKFRyZWVTY29wZSYgc2NvcGUpCiB7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS0+cm9vdE5vZGUo
KSkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CisgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oc2NvcGUucm9vdE5vZGUo
KSkpIHsKKyAgICAgICAgYXV0byYgYWNjZXNzS2V5ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGFjY2Vzc2tleUF0dHIpOwogICAgICAgICBpZiAoIWFjY2Vzc0tleS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuc2V0KGFjY2Vzc0tl
eS5pbXBsKCksICZlbGVtZW50KTsKLQotICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVs
ZW1lbnQuc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAocm9vdCk7
CisgICAgICAgIGlmIChhdXRvKiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAgICAg
ICAgICBidWlsZEFjY2Vzc0tleU1hcCgqcm9vdCk7CiAgICAgfQogfQogCkBAIC0xNTgxLDE0ICsx
NTc5LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OnRpdGxlRWxlbWVudFRleHRDaGFuZ2VkKEVsZW1lbnQm
IHRpdGxlRWxlbWVudCkKICAgICB1cGRhdGVUaXRsZUZyb21UaXRsZUVsZW1lbnQoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tz
KFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVy
Rm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50
JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKGNs
aWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVudHMuYWRkKCZjbGllbnQp
OwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50KiBjbGllbnQpCit2b2lkIERvY3VtZW50
Ojp1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5
Q2hhbmdlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0Ns
aWVudHMucmVtb3ZlKGNsaWVudCk7CisgICAgbV92aXNpYmlsaXR5U3RhdGVDYWxsYmFja0NsaWVu
dHMucmVtb3ZlKCZjbGllbnQpOwogfQogCiB2b2lkIERvY3VtZW50Ojp2aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCkKQEAgLTM2MDEsMTUgKzM1OTksMTUgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlVmll
d3BvcnRVbml0c09uUmVzaXplKCkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEF1ZGlv
UHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1lbnQ6OmFk
ZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYgYXVkaW9Qcm9kdWNlcikKIHsKLSAgICBtX2F1
ZGlvUHJvZHVjZXJzLmFkZChhdWRpb1Byb2R1Y2VyKTsKKyAgICBtX2F1ZGlvUHJvZHVjZXJzLmFk
ZCgmYXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1
Y2VyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBh
dWRpb1Byb2R1Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKGF1ZGlvUHJvZHVj
ZXIpOworICAgIG1fYXVkaW9Qcm9kdWNlcnMucmVtb3ZlKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1
cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQogCkBAIC0zNzAxLDI0ICszNjk5LDI0IEBAIHZvaWQg
RG9jdW1lbnQ6OnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wgYW1v
bmdDaGlsZHJlbk9ubHkpCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxlbWVu
dERpZERldGFjaChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6aG92ZXJlZEVsZW1l
bnREaWREZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIW1faG92ZXJlZEVsZW1l
bnQgfHwgZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQorICAgIGlmICghbV9ob3ZlcmVkRWxl
bWVudCB8fCAmZWxlbWVudCAhPSBtX2hvdmVyZWRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2hvdmVyZWRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIG1f
aG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobV9o
b3ZlcmVkRWxlbWVudCAmJiAhbV9ob3ZlcmVkRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9ob3ZlcmVkRWxlbWVudCA9IG1faG92ZXJlZEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAg
ICBpZiAoZnJhbWUoKSkKICAgICAgICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkuc2NoZWR1bGVI
b3ZlclN0YXRlVXBkYXRlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNo
YWluRGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjplbGVtZW50SW5B
Y3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8IGVsZW1lbnQgIT0gbV9hY3RpdmVFbGVtZW50KQorICAgIGlmICghbV9hY3Rp
dmVFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1fYWN0aXZlRWxlbWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAg
IG1fYWN0aXZlRWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxlICht
X2FjdGl2ZUVsZW1lbnQgJiYgIW1fYWN0aXZlRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
bV9hY3RpdmVFbGVtZW50ID0gbV9hY3RpdmVFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiB9CkBA
IC0zOTk2LDI2ICszOTk0LDI2IEBAIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3Rpb25XaWxsQ2xlYXJJ
ZE5hbWVNYXAoY29uc3QgSFRNTENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCiAgICAgbV9ub2RlTGlz
dEFuZENvbGxlY3Rpb25Db3VudHNbSW52YWxpZGF0ZU9uSWROYW1lQXR0ckNoYW5nZV0tLTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2
b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikK
IHsKLSAgICBtX25vZGVJdGVyYXRvcnMuYWRkKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMuYWRk
KCZpdGVyYXRvcik7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2Rl
SXRlcmF0b3IqIG5pKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciYgaXRlcmF0b3IpCiB7CiAgICAgLy8gVGhlIG5vZGUgaXRlcmF0b3IgY2FuIGJlIGRldGFj
aGVkIHdpdGhvdXQgaGF2aW5nIGJlZW4gYXR0YWNoZWQgaWYgaXRzIHJvb3Qgbm9kZSBkaWRuJ3Qg
aGF2ZSBhIGRvY3VtZW50CiAgICAgLy8gd2hlbiB0aGUgaXRlcmF0b3Igd2FzIGNyZWF0ZWQsIGJ1
dCBoYXMgaXQgbm93LgotICAgIG1fbm9kZUl0ZXJhdG9ycy5yZW1vdmUobmkpOworICAgIG1fbm9k
ZUl0ZXJhdG9ycy5yZW1vdmUoJml0ZXJhdG9yKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6bW92ZU5v
ZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKIHsKICAgICBWZWN0b3I8Tm9kZUl0ZXJhdG9yKj4gbm9kZUl0ZXJhdG9yczsKICAgICBjb3B5
VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzLCBub2RlSXRlcmF0b3JzKTsKLSAgICBmb3IgKGF1dG8q
IGl0IDogbm9kZUl0ZXJhdG9ycykgewotICAgICAgICBpZiAoJml0LT5yb290KCkgPT0gJm5vZGUp
IHsKLSAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcihpdCk7Ci0gICAgICAgICAgICBuZXdE
b2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgIGZvciAoYXV0byogaXRlcmF0b3Ig
OiBub2RlSXRlcmF0b3JzKSB7CisgICAgICAgIGlmICgmaXRlcmF0b3ItPnJvb3QoKSA9PSAmbm9k
ZSkgeworICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKCppdGVyYXRvcik7CisgICAgICAg
ICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoKml0ZXJhdG9yKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTQwNTUsNyArNDA1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVDaGls
ZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYgY29udGFpbmVyKQogCiAgICAgaWYgKG1f
bWFya2Vycy0+aGFzTWFya2VycygpKSB7CiAgICAgICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBU
ZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZChjb250YWluZXIpOyB0ZXh0Tm9kZTsgdGV4dE5v
ZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoKnRleHROb2RlKSkKLSAgICAgICAg
ICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0Tm9kZSk7CisgICAgICAgICAgICBtX21h
cmtlcnMtPnJlbW92ZU1hcmtlcnMoKnRleHROb2RlKTsKICAgICB9CiB9CiAKQEAgLTQwODMsNyAr
NDA4MSw3IEBAIHZvaWQgRG9jdW1lbnQ6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgaWYgKGlzPFRleHQ+KG5vZGUpKQotICAgICAgICBtX21hcmtlcnMtPnJlbW92
ZU1hcmtlcnMoJm5vZGUpOworICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnMobm9kZSk7
CiB9CiAKIHN0YXRpYyBOb2RlKiBmYWxsYmFja0ZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZUFm
dGVyUmVtb3ZhbChOb2RlJiBub2RlKQpAQCAtNDEwMiw3ICs0MTAwLDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVtb3ZlRm9jdXNOYXZpZ2F0aW9uTm9kZU9mU3VidHJlZShOb2RlJiBub2RlLCBib29sIGFt
b25nQ2hpbGRyZW4KICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2Rl
KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6
OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGF1dG8q
IHJhbmdlIDogbV9yYW5nZXMpCkBAIC00MTEzLDcgKzQxMTEsNyBAQCB2b2lkIERvY3VtZW50Ojp0
ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQog
Ci12b2lkIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQx
MjUsMTAgKzQxMjMsMTAgQEAgdm9pZCBEb2N1bWVudDo6dGV4dFJlbW92ZWQoTm9kZSogdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgbV9tYXJrZXJzLT5zaGlmdE1h
cmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK3Zv
aWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTm9kZVdpdGhJ
bmRleCBvbGROb2RlV2l0aEluZGV4KG9sZE5vZGUpOworICAgICAgICBOb2RlV2l0aEluZGV4IG9s
ZE5vZGVXaXRoSW5kZXgoJm9sZE5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9y
YW5nZXMpCiAgICAgICAgICAgICByYW5nZS0+dGV4dE5vZGVzTWVyZ2VkKG9sZE5vZGVXaXRoSW5k
ZXgsIG9mZnNldCk7CiAgICAgfQpAQCAtNDEzNiw3ICs0MTM0LDcgQEAgdm9pZCBEb2N1bWVudDo6
dGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFy
IGNoZWNraW5nLgogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5v
ZGUpCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7CiAgICAg
Zm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQogICAgICAgICByYW5nZS0+dGV4dE5vZGVTcGxp
dChvbGROb2RlKTsKQEAgLTQxNTUsMTUgKzQxNTMsMTUgQEAgdm9pZCBEb2N1bWVudDo6Y3JlYXRl
RE9NV2luZG93KCkKICAgICBBU1NFUlQobV9kb21XaW5kb3ctPmZyYW1lKCkgPT0gbV9mcmFtZSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1bWVu
dCkKK3ZvaWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0gICAg
QVNTRVJUKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1fZG9t
V2luZG93KTsKICAgICAvLyBBIHZhbGlkIERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVkRnJh
bWUgZm9yIGl0cyBkb2N1bWVudHMuCiAgICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0gTm90
SW5QYWdlQ2FjaGUpOwogCi0gICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5tX2Rv
bVdpbmRvdyk7CisgICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2luZG93
KTsKICAgICBtX2RvbVdpbmRvdy0+ZGlkU2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAogICAg
IEFTU0VSVChtX2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKQEAgLTQ4MTMsMTQgKzQ4
MTEsMTQgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9y
U3VzcGVuc2lvbiByZWFzb24pCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCi12b2lk
IERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50
KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
RWxlbWVudHMuYWRkKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBt
X2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKSAKQEAgLTQ4MjksMTQgKzQ4
MjcsMTQgQEAgdm9pZCBEb2N1bWVudDo6bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKQogICAgICAgICBl
bGVtZW50LT5tZWRpYVZvbHVtZURpZENoYW5nZSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdp
c3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
bV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKGUpOworICAgIG1fbWVkaWFWb2x1bWVD
YWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVn
aXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6
dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fbWVkaWFW
b2x1bWVDYWxsYmFja0VsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKIGJvb2wgRG9jdW1l
bnQ6OmF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3QKQEAgLTQ4NzgsMjkg
KzQ4NzYsMjkgQEAgdm9pZCBEb2N1bWVudDo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2Uo
KQogICAgICAgICBlbGVtZW50LT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJv
d3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3By
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZChlKTsKKyAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3ByaXZhdGVC
cm93c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX3ByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKHBhZ2UoKSkKICAgICAgICAgcGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVm
ZXJlbmNlcygpLnNldEludGVyZXN0ZWRJbkNhcHRpb25QcmVmZXJlbmNlQ2hhbmdlcygpOwogCi0g
ICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKGUpOworICAgIG1fY2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tz
KEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fY2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlKTsKKyAgICBtX2NhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50
OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKQEAgLTQ5MTMsMTQgKzQ5MTEsMTQgQEAgdm9p
ZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiAKICNpZiBFTkFCTEUoTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1M
TWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVs
ZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50
cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50KQordm9p
ZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
SFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5n
ZWRFbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
RWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpCkBAIC01MDE1LDEwICs1MDEzLDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OnBvcEN1cnJlbnRTY3JpcHQoKQogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLXZvaWQgRG9j
dW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkpCit2b2lk
IERvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIGluc3Ry
dWN0aW9uKQogewotICAgIFJlZlB0cjxYU0xUUHJvY2Vzc29yPiBwcm9jZXNzb3IgPSBYU0xUUHJv
Y2Vzc29yOjpjcmVhdGUoKTsKLSAgICBwcm9jZXNzb3ItPnNldFhTTFN0eWxlU2hlZXQoZG93bmNh
c3Q8WFNMU3R5bGVTaGVldD4ocGktPnNoZWV0KCkpKTsKKyAgICBhdXRvIHByb2Nlc3NvciA9IFhT
TFRQcm9jZXNzb3I6OmNyZWF0ZSgpOworICAgIHByb2Nlc3Nvci0+c2V0WFNMU3R5bGVTaGVldChk
b3duY2FzdDxYU0xTdHlsZVNoZWV0PihpbnN0cnVjdGlvbi5zaGVldCgpKSk7CiAgICAgU3RyaW5n
IHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CiAgICAgU3RyaW5nIHJlc3Vs
dEVuY29kaW5nOwpAQCAtNTQ5MCwxNyArNTQ4OCwxNyBAQCB2b2lkIERvY3VtZW50OjpzdGF0ZVBv
cHBlZChSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0KQogICAgICAgICBt
X3BlbmRpbmdTdGF0ZU9iamVjdCA9IFdURk1vdmUoc3RhdGVPYmplY3QpOwogfQogCi12b2lkIERv
Y3VtZW50OjphdHRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit2b2lkIERvY3VtZW50OjphdHRhY2hS
YW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250YWlucyhyYW5n
ZSkpOwotICAgIG1fcmFuZ2VzLmFkZChyYW5nZSk7CisgICAgQVNTRVJUKCFtX3Jhbmdlcy5jb250
YWlucygmcmFuZ2UpKTsKKyAgICBtX3Jhbmdlcy5hZGQoJnJhbmdlKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQordm9pZCBEb2N1bWVudDo6ZGV0YWNoUmFu
Z2UoUmFuZ2UmIHJhbmdlKQogewotICAgIC8vIFdlIGRvbid0IEFTU0VSVCBtX3Jhbmdlcy5jb250
YWlucyhyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCisgICAgLy8gV2UgZG9uJ3QgQVNT
RVJUIG1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkgdG8gYWxsb3cgdXMgdG8gY2FsbCB0aGlzCiAg
ICAgLy8gdW5jb25kaXRpb25hbGx5IHRvIGZpeDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2MDQ0Ci0gICAgbV9yYW5nZXMucmVtb3ZlKHJhbmdlKTsKKyAgICBtX3Jh
bmdlcy5yZW1vdmUoJnJhbmdlKTsKIH0KIAogc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtNTY0MCw3ICs1NjM4LDcg
QEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6
UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24KIAogICAgIHN1c3BlbmRTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0cyhyZWFz
b24pOwotICAgIHNjcmlwdFJ1bm5lcigpLT5zdXNwZW5kKCk7CisgICAgc2NyaXB0UnVubmVyKCku
c3VzcGVuZCgpOwogICAgIG1fcGVuZGluZ1Rhc2tzVGltZXIuc3RvcCgpOwogCiAgICAgLy8gRGVm
ZXJyaW5nIGxvYWRpbmcgYW5kIHN1c3BlbmRpbmcgcGFyc2VyIGlzIG5lY2Vzc2FyeSB3aGVuIHdl
IG5lZWQgdG8gcHJldmVudCByZS1lbnRyYW50IEphdmFTY3JpcHQgZXhlY3V0aW9uCkBAIC01NjY0
LDcgKzU2NjIsNyBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVE
T01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogICAgICAgICBtX3BhcnNlci0+
cmVzdW1lU2NoZWR1bGVkVGFza3MoKTsKICAgICBpZiAoIW1fcGVuZGluZ1Rhc2tzLmlzRW1wdHko
KSkKICAgICAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICBz
Y3JpcHRSdW5uZXIoKS0+cmVzdW1lKCk7CisgICAgc2NyaXB0UnVubmVyKCkucmVzdW1lKCk7CiAg
ICAgcmVzdW1lQWN0aXZlRE9NT2JqZWN0cyhyZWFzb24pOwogICAgIHJlc3VtZVNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIApAQCAtNTcxNywxNiArNTcxNSwxNiBA
QCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFBvcHN0YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVjdAogICAgIGRpc3BhdGNoV2luZG93RXZlbnQoUG9wU3Rh
dGVFdmVudDo6Y3JlYXRlKFdURk1vdmUoc3RhdGVPYmplY3QpLCBtX2RvbVdpbmRvdyA/IG1fZG9t
V2luZG93LT5oaXN0b3J5KCkgOiBudWxscHRyKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9p
ZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKCFtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuY29u
dGFpbnMobGlzdGVuZXIpKTsKLSAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKGxpc3Rl
bmVyKTsKKyAgICBBU1NFUlQoIW1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlz
dGVuZXIpKTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMuYWRkKCZsaXN0ZW5lcik7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0
YXJ0TGlzdGVuZXIqIGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFy
dExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYgbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJU
KG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVk
aWFDYW5TdGFydExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgIEFTU0VSVChtX21lZGlh
Q2FuU3RhcnRMaXN0ZW5lcnMuY29udGFpbnMoJmxpc3RlbmVyKSk7CisgICAgbV9tZWRpYUNhblN0
YXJ0TGlzdGVuZXJzLnJlbW92ZSgmbGlzdGVuZXIpOwogfQogCiBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIqIERvY3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKQEAgLTU3MzYsMjQg
KzU3MzQsMjMgQEAgTWVkaWFDYW5TdGFydExpc3RlbmVyKiBEb2N1bWVudDo6dGFrZUFueU1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcigpCiAKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiBQ
TEFURk9STShJT1MpCiAKLURldmljZU1vdGlvbkNvbnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VN
b3Rpb25Db250cm9sbGVyKCkgY29uc3QKK0RldmljZU1vdGlvbkNvbnRyb2xsZXImIERvY3VtZW50
OjpkZXZpY2VNb3Rpb25Db250cm9sbGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZXZpY2VN
b3Rpb25Db250cm9sbGVyLmdldCgpOworICAgIHJldHVybiAqbV9kZXZpY2VNb3Rpb25Db250cm9s
bGVyOwogfQogCi1EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAorRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVy
JiBEb2N1bWVudDo6ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7CisgICAgcmV0dXJuICpt
X2RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCiAKLWJvb2wgRG9jdW1lbnQ6OmZ1bGxTY3JlZW5Jc0FsbG93ZWRGb3JF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIERvY3VtZW50OjpmdWxsU2NyZWVu
SXNBbGxvd2VkKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQp
OwotICAgIHJldHVybiBpc0F0dHJpYnV0ZU9uQWxsT3duZXJzKGFsbG93ZnVsbHNjcmVlbkF0dHIs
IHdlYmtpdGFsbG93ZnVsbHNjcmVlbkF0dHIsIGVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJFbGVt
ZW50KCkpOworICAgIHJldHVybiBpc0F0dHJpYnV0ZU9uQWxsT3duZXJzKGFsbG93ZnVsbHNjcmVl
bkF0dHIsIHdlYmtpdGFsbG93ZnVsbHNjcmVlbkF0dHIsIGVsZW1lbnQuZG9jdW1lbnQoKS5vd25l
ckVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlIGNoZWNrVHlwZSkKQEAg
LTU3NzIsNyArNTc2OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAKICAgICAgICAgLy8g
VGhlIGNvbnRleHQgb2JqZWN0J3Mgbm9kZSBkb2N1bWVudCwgb3IgYW4gYW5jZXN0b3IgYnJvd3Np
bmcgY29udGV4dCdzIGRvY3VtZW50IGRvZXMgbm90IGhhdmUKICAgICAgICAgLy8gdGhlIGZ1bGxz
Y3JlZW4gZW5hYmxlZCBmbGFnIHNldC4KLSAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBFbmZvcmNl
SUZyYW1lQWxsb3dGdWxsU2NyZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxTY3JlZW5Jc0FsbG93ZWRG
b3JFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICBpZiAoY2hlY2tUeXBlID09IEVuZm9yY2VJRnJh
bWVBbGxvd0Z1bGxTY3JlZW5SZXF1aXJlbWVudCAmJiAhZnVsbFNjcmVlbklzQWxsb3dlZCgqZWxl
bWVudCkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBUaGUgY29udGV4dCBvYmpl
Y3QncyBub2RlIGRvY3VtZW50IGZ1bGxzY3JlZW4gZWxlbWVudCBzdGFjayBpcyBub3QgZW1wdHkg
YW5kIGl0cyB0b3AgZWxlbWVudApAQCAtNTg0NSw4ICs1ODQyLDggQEAgdm9pZCBEb2N1bWVudDo6
cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxTY3JlZW5D
aGVja1R5cGUKICAgICAgICAgICAgIC8vIHN0YWNrLCBhbmQgcXVldWUgYSB0YXNrIHRvIGZpcmUg
YW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0
ZQogICAgICAgICAgICAgLy8gc2V0IHRvIHRydWUgb24gdGhlIGRvY3VtZW50LgogICAgICAgICAg
ICAgaWYgKCFmb2xsb3dpbmdEb2MpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNo
RnVsbHNjcmVlbkVsZW1lbnRTdGFjayhlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBhZGREb2N1
bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgICAg
ICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKmVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgq
Y3VycmVudERvYyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
QEAgLTU4NTcsOCArNTg1NCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAgICAgICAgICAg
ICAgICAgLy8gLi4ucHVzaCBmb2xsb3dpbmcgZG9jdW1lbnQncyBicm93c2luZyBjb250ZXh0IGNv
bnRhaW5lciBvbiBkb2N1bWVudCdzIGZ1bGxzY3JlZW4gZWxlbWVudAogICAgICAgICAgICAgICAg
IC8vIHN0YWNrLCBhbmQgcXVldWUgYSB0YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVsbHNj
cmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgIC8v
IHNldCB0byB0cnVlIG9uIGRvY3VtZW50LgotICAgICAgICAgICAgICAgIGN1cnJlbnREb2MtPnB1
c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKGZvbGxvd2luZ0RvYy0+b3duZXJFbGVtZW50KCkpOwot
ICAgICAgICAgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShj
dXJyZW50RG9jKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjaygqZm9sbG93aW5nRG9jLT5vd25lckVsZW1lbnQoKSk7CisgICAgICAgICAgICAg
ICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKCpjdXJyZW50RG9jKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtNTkyMSw3ICs1
OTE4LDcgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogICAgIC8vIHRh
c2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJs
ZXMgYXR0cmlidXRlIHNldCB0byB0cnVlIG9uIGRlc2NlbmRhbnQuCiAgICAgZm9yIChhdXRvJiBk
b2N1bWVudCA6IGRlc2NlbmRhbnRzKSB7CiAgICAgICAgIGRvY3VtZW50LT5jbGVhckZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soKTsKLSAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VF
dmVudFF1ZXVlKGRvY3VtZW50LmdldCgpKTsKKyAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3Jl
ZW5DaGFuZ2VFdmVudFF1ZXVlKCpkb2N1bWVudCk7CiAgICAgfQogCiAgICAgLy8gNS4gV2hpbGUg
ZG9jIGlzIG5vdCBudWxsLCBydW4gdGhlc2Ugc3Vic3RlcHM6CkBAIC01OTM4LDcgKzU5MzUsNyBA
QCB2b2lkIERvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVlbigpCiAKICAgICAgICAgLy8gMi4g
UXVldWUgYSB0YXNrIHRvIGZpcmUgYW4gZXZlbnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRo
IGl0cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQgdG8gdHJ1ZQogICAgICAgICAvLyBvbiBkb2MuCi0g
ICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShjdXJyZW50RG9j
KTsKKyAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKCpjdXJy
ZW50RG9jKTsKIAogICAgICAgICAvLyAzLiBJZiBkb2MncyBmdWxsc2NyZWVuIGVsZW1lbnQgc3Rh
Y2sgaXMgZW1wdHkgYW5kIGRvYydzIGJyb3dzaW5nIGNvbnRleHQgaGFzIGEgYnJvd3NpbmcgY29u
dGV4dAogICAgICAgICAvLyBjb250YWluZXIsIHNldCBkb2MgdG8gdGhhdCBicm93c2luZyBjb250
ZXh0IGNvbnRhaW5lcidzIG5vZGUgZG9jdW1lbnQuCkBAIC01OTg4LDEzICs1OTg1LDExIEBAIHN0
YXRpYyB2b2lkIHVud3JhcEZ1bGxTY3JlZW5SZW5kZXJlcihSZW5kZXJGdWxsU2NyZWVuKiBmdWxs
U2NyZWVuUmVuZGVyZXIsIEVsZW1lCiAgICAgICAgIGZ1bGxTY3JlZW5FbGVtZW50LT5wYXJlbnRF
bGVtZW50KCktPmludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oRWxl
bWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIWhhc0xpdmluZ1JlbmRlclRyZWUoKSB8fCBwYWdl
Q2FjaGVTdGF0ZSgpICE9IE5vdEluUGFnZUNhY2hlKQogICAgICAgICByZXR1cm47CiAKLSAgICBB
U1NFUlQoZWxlbWVudCk7Ci0KICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgY2FsbGVkIGFm
dGVyIHRoZSBkb2N1bWVudCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBhZ2UuCiAgICAgaWYg
KCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYwMDMsMTMgKzU5OTgsMTIgQEAgdm9pZCBE
b2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCkKIAogICAgIHVud3JhcEZ1bGxTY3JlZW5SZW5kZXJlcihtX2Z1bGxTY3JlZW5SZW5kZXJl
ciwgbV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CiAKLSAgICBpZiAoZWxlbWVudCkKLSAgICAg
ICAgZWxlbWVudC0+d2lsbEJlY29tZUZ1bGxzY3JlZW5FbGVtZW50KCk7CisgICAgZWxlbWVudC53
aWxsQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQoKTsKICAgICAKLSAgICBtX2Z1bGxTY3JlZW5FbGVt
ZW50ID0gZWxlbWVudDsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gJmVsZW1lbnQ7CiAKICNp
ZiBVU0UoTkFUSVZFX0ZVTExTQ1JFRU5fVklERU8pCi0gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVu
dC0+aXNNZWRpYUVsZW1lbnQoKSkKKyAgICBpZiAoZWxlbWVudC5pc01lZGlhRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm47CiAjZW5kaWYKIApAQCAtNjAzMiw3ICs2MDI2LDcgQEAgdm9pZCBEb2N1
bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKICAgICByZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlVHlwZTo6UmVidWlsZCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCop
Cit2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIGlmICgh
bV9mdWxsU2NyZWVuRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjA0NSw3ICs2MDM5LDcg
QEAgdm9pZCBEb2N1bWVudDo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVt
ZW50KikKICAgICBtX2Z1bGxTY3JlZW5DaGFuZ2VEZWxheVRpbWVyLnN0YXJ0T25lU2hvdCgwX3Mp
OwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQqKQordm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCkKIHsK
ICAgICBpZiAoIW1fZnVsbFNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTYwNTYs
NyArNjA1MCw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoRWxlbWVudCopCiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+d2lsbFN0b3BCZWluZ0Z1
bGxzY3JlZW5FbGVtZW50KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRG
dWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fZnVsbFNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTYxOTQsMTkgKzYxODgsMTggQEAgdm9pZCBEb2N1bWVudDo6cG9wRnVsbHNjcmVl
bkVsZW1lbnRTdGFjaygpCiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLnJlbW92ZUxhc3Qo
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVu
dCogZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZChl
bGVtZW50KTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKCZlbGVtZW50KTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1
ZXVlKERvY3VtZW50KiBkb2MpCit2b2lkIERvY3VtZW50OjphZGREb2N1bWVudFRvRnVsbFNjcmVl
bkNoYW5nZUV2ZW50UXVldWUoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIEFTU0VSVChkb2Mp
OwotICAgIE5vZGUqIHRhcmdldCA9IGRvYy0+d2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsKKyAg
ICBOb2RlKiB0YXJnZXQgPSBkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpOwogICAg
IGlmICghdGFyZ2V0KQotICAgICAgICB0YXJnZXQgPSBkb2MtPndlYmtpdEN1cnJlbnRGdWxsU2Ny
ZWVuRWxlbWVudCgpOworICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC53ZWJraXRDdXJyZW50RnVs
bFNjcmVlbkVsZW1lbnQoKTsKICAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gZG9j
OworICAgICAgICB0YXJnZXQgPSAmZG9jdW1lbnQ7CiAgICAgbV9mdWxsU2NyZWVuQ2hhbmdlRXZl
bnRUYXJnZXRRdWV1ZS5hcHBlbmQodGFyZ2V0KTsKIH0KIApAQCAtNjY2NCw3ICs2NjU3LDcgQEAg
dm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgRWxlbWVudCogaW4KICAgICAgICAgLy8gV2UgYXJlIGNsZWFyaW5nIHRoZSA6
YWN0aXZlIGNoYWluIGJlY2F1c2UgdGhlIG1vdXNlIGhhcyBiZWVuIHJlbGVhc2VkLgogICAgICAg
ICBmb3IgKEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50ID0gb2xkQWN0aXZlRWxlbWVudDsgY3VycmVu
dEVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnRJ
bkNvbXBvc2VkVHJlZSgpKSB7CiAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC0+c2V0QWN0aXZl
KGZhbHNlKTsKLSAgICAgICAgICAgIG1fdXNlckFjdGlvbkVsZW1lbnRzLnNldEluQWN0aXZlQ2hh
aW4oY3VycmVudEVsZW1lbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fdXNlckFjdGlvbkVsZW1l
bnRzLnNldEluQWN0aXZlQ2hhaW4oKmN1cnJlbnRFbGVtZW50LCBmYWxzZSk7CiAgICAgICAgIH0K
ICAgICAgICAgbV9hY3RpdmVFbGVtZW50ID0gbnVsbHB0cjsKICAgICB9IGVsc2UgewpAQCAtNjY3
Niw3ICs2NjY5LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgRWxlbWVudCogaW4KICAgICAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gY3Vyci0+ZWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmICgh
ZWxlbWVudCB8fCBjdXJyLT5pc1RleHRPckxpbmVCcmVhaygpKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtX3VzZXJBY3Rpb25FbGVtZW50cy5zZXRJbkFj
dGl2ZUNoYWluKGVsZW1lbnQsIHRydWUpOworICAgICAgICAgICAgICAgIG1fdXNlckFjdGlvbkVs
ZW1lbnRzLnNldEluQWN0aXZlQ2hhaW4oKmVsZW1lbnQsIHRydWUpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtX2FjdGl2ZUVsZW1lbnQgPSBuZXdBY3RpdmVFbGVtZW50OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAppbmRleCA3NzQxMmE0Yzk1Y2Q1NzExYzIwNWZlYjhlODIyNzM1ZGY2YjNmMmI4
Li43ZDkzZThmZDM2ZGY4MmM1MTlkOGE0NGQ5NmRmZjVkODYyYjhhM2E2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaApAQCAtNzI2LDggKzcyNiw4IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBmb2N1c05h
dmlnYXRpb25TdGFydGluZ05vZGUoRm9jdXNEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgdm9pZCBy
ZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShOb2RlJiwgYm9vbCBhbW9uZ0NoaWxkcmVuT25seSA9
IGZhbHNlKTsKLSAgICB2b2lkIGhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKEVsZW1lbnQqKTsKLSAg
ICB2b2lkIGVsZW1lbnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKEVsZW1lbnQqKTsKKyAgICB2b2lk
IGhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKEVsZW1lbnQmKTsKKyAgICB2b2lkIGVsZW1lbnRJbkFj
dGl2ZUNoYWluRGlkRGV0YWNoKEVsZW1lbnQmKTsKIAogICAgIHZvaWQgdXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEVsZW1lbnQqKTsKIApAQCAtNzU0LDEyICs3
NTQsMTIgQEAgcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnZhbGlkYXRpb25GdW5j
dGlvbj4KICAgICB2b2lkIGludmFsaWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMoSW52
YWxpZGF0aW9uRnVuY3Rpb24pOwogCi0gICAgdm9pZCBhdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0
ZXJhdG9yKik7Ci0gICAgdm9pZCBkZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7Cisg
ICAgdm9pZCBhdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJik7CisgICAgdm9pZCBkZXRh
Y2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJik7CiAgICAgdm9pZCBtb3ZlTm9kZUl0ZXJhdG9y
c1RvTmV3RG9jdW1lbnQoTm9kZSYsIERvY3VtZW50Jik7CiAKLSAgICB2b2lkIGF0dGFjaFJhbmdl
KFJhbmdlKik7Ci0gICAgdm9pZCBkZXRhY2hSYW5nZShSYW5nZSopOworICAgIHZvaWQgYXR0YWNo
UmFuZ2UoUmFuZ2UmKTsKKyAgICB2b2lkIGRldGFjaFJhbmdlKFJhbmdlJik7CiAKICAgICB2b2lk
IHVwZGF0ZVJhbmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmKTsKICAgICAv
LyBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkIGlzIHVzZWQgd2hlbiByZW1vdmluZyBhbGwgbm9k
ZSBjaGlsZHJlbiBhdCBvbmNlLgpAQCAtNzcwLDEzICs3NzAsMTMgQEAgcHVibGljOgogICAgIGVu
dW0gY2xhc3MgQWNjZXB0Q2hpbGRPcGVyYXRpb24geyBSZXBsYWNlLCBJbnNlcnRPckFkZCB9Owog
ICAgIGJvb2wgY2FuQWNjZXB0Q2hpbGQoY29uc3QgTm9kZSYgbmV3Q2hpbGQsIGNvbnN0IE5vZGUq
IHJlZkNoaWxkLCBBY2NlcHRDaGlsZE9wZXJhdGlvbikgY29uc3Q7CiAKLSAgICB2b2lkIHRleHRJ
bnNlcnRlZChOb2RlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZv
aWQgdGV4dFJlbW92ZWQoTm9kZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICB2b2lkIHRleHROb2Rlc01lcmdlZChUZXh0KiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQp
OwotICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKTsKKyAgICB2b2lkIHRleHRJ
bnNlcnRlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZv
aWQgdGV4dFJlbW92ZWQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICB2b2lkIHRleHROb2Rlc01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQp
OworICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAogICAgIHZvaWQgY3Jl
YXRlRE9NV2luZG93KCk7Ci0gICAgdm9pZCB0YWtlRE9NV2luZG93RnJvbShEb2N1bWVudCopOwor
ICAgIHZvaWQgdGFrZURPTVdpbmRvd0Zyb20oRG9jdW1lbnQmKTsKIAogICAgIERPTVdpbmRvdyog
ZG9tV2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9kb21XaW5kb3cuZ2V0KCk7IH0KICAgICAvLyBJ
biBET00gTGV2ZWwgMiwgdGhlIERvY3VtZW50J3MgRE9NV2luZG93IGlzIGNhbGxlZCB0aGUgZGVm
YXVsdFZpZXcuCkBAIC04NDcsNyArODQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJvY2Vzc1Jl
ZmVycmVyUG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5KTsKIAogICAgIC8vIFJldHVybnMgdGhl
IG93bmluZyBlbGVtZW50IGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuCi0gICAgLy8gUmV0dXJucyAw
IGlmIHRoaXMgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KKyAgICAvLyBSZXR1cm5zIG51bGxw
dHIgaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgogICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CiAKICAgICAvLyBVc2VkIGJ5IERPTSBiaW5k
aW5nczsgbm8gZGlyZWN0aW9uIGtub3duLgpAQCAtOTQxLDE3ICs5NDEsMTcgQEAgcHVibGljOgog
ICAgIERvY3VtZW50KiBwYXJlbnREb2N1bWVudCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IERvY3VtZW50JiB0b3BEb2N1bWVudCgpIGNvbnN0OwogICAgIAotICAgIFNjcmlwdFJ1bm5lciog
c2NyaXB0UnVubmVyKCkgeyByZXR1cm4gbV9zY3JpcHRSdW5uZXIuZ2V0KCk7IH0KLSAgICBTY3Jp
cHRNb2R1bGVMb2FkZXIqIG1vZHVsZUxvYWRlcigpIHsgcmV0dXJuIG1fbW9kdWxlTG9hZGVyLmdl
dCgpOyB9CisgICAgU2NyaXB0UnVubmVyJiBzY3JpcHRSdW5uZXIoKSB7IHJldHVybiAqbV9zY3Jp
cHRSdW5uZXI7IH0KKyAgICBTY3JpcHRNb2R1bGVMb2FkZXImIG1vZHVsZUxvYWRlcigpIHsgcmV0
dXJuICptX21vZHVsZUxvYWRlcjsgfQogCiAgICAgSFRNTFNjcmlwdEVsZW1lbnQqIGN1cnJlbnRT
Y3JpcHQoKSBjb25zdCB7IHJldHVybiAhbV9jdXJyZW50U2NyaXB0U3RhY2suaXNFbXB0eSgpID8g
bV9jdXJyZW50U2NyaXB0U3RhY2subGFzdCgpLmdldCgpIDogbnVsbHB0cjsgfQogICAgIHZvaWQg
cHVzaEN1cnJlbnRTY3JpcHQoSFRNTFNjcmlwdEVsZW1lbnQqKTsKICAgICB2b2lkIHBvcEN1cnJl
bnRTY3JpcHQoKTsKIAogI2lmIEVOQUJMRShYU0xUKQotICAgIHZvaWQgYXBwbHlYU0xUcmFuc2Zv
cm0oUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBwaSk7CisgICAgdm9pZCBhcHBseVhTTFRyYW5zZm9y
bShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mKTsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IHRyYW5zZm9y
bVNvdXJjZURvY3VtZW50KCkgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudDsgfQot
ICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykgeyBtX3Ry
YW5zZm9ybVNvdXJjZURvY3VtZW50ID0gZG9jOyB9CisgICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpIHsgbV90cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCA9IGRvY3VtZW50OyB9CiAKICAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZShzdGQ6OnVuaXF1
ZV9wdHI8VHJhbnNmb3JtU291cmNlPik7CiAgICAgVHJhbnNmb3JtU291cmNlKiB0cmFuc2Zvcm1T
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZS5nZXQoKTsgfQpAQCAtOTky
LDE3ICs5OTIsMTUgQEAgcHVibGljOgogICAgIFBhZ2VDYWNoZVN0YXRlIHBhZ2VDYWNoZVN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlQ2FjaGVTdGF0ZTsgfQogICAgIHZvaWQgc2V0UGFnZUNh
Y2hlU3RhdGUoUGFnZUNhY2hlU3RhdGUpOwogCi0gICAgLy8gRWxlbWVudHMgY2FuIHJlZ2lzdGVy
IHRoZW1zZWx2ZXMgZm9yIHRoZSAic3VzcGVuZCgpIiBhbmQKLSAgICAvLyAicmVzdW1lKCkiIGNh
bGxiYWNrcwotICAgIHZvaWQgcmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
RWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcyhFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNh
bGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tzKEVsZW1lbnQmKTsKIAogICAgIHZvaWQgZG9jdW1lbnRXaWxsQmVjb21lSW5h
Y3RpdmUoKTsKICAgICB2b2lkIHN1c3BlbmQoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNw
ZW5zaW9uKTsKICAgICB2b2lkIHJlc3VtZShBY3RpdmVET01PYmplY3Q6OlJlYXNvbkZvclN1c3Bl
bnNpb24pOwogCi0gICAgdm9pZCByZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1l
bnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50
Kik7CisgICAgdm9pZCByZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQmKTsK
KyAgICB2b2lkIHVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Jik7CiAg
ICAgdm9pZCBtZWRpYVZvbHVtZURpZENoYW5nZSgpOwogCiAgICAgYm9vbCBhdWRpb1BsYXliYWNr
UmVxdWlyZXNVc2VyR2VzdHVyZSgpIGNvbnN0OwpAQCAtMTAxMiwyOCArMTAxMCwyOCBAQCBwdWJs
aWM6CiAgICAgTWVkaWFTZXNzaW9uJiBkZWZhdWx0TWVkaWFTZXNzaW9uKCk7CiAjZW5kaWYKIAot
ICAgIHZvaWQgcmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hh
bmdlZENhbGxiYWNrcyhFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvclByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmKTsKICAgICB2
b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiAgICAgdm9pZCBwcml2YXRlQnJv
d3NpbmdTdGF0ZURpZENoYW5nZSgpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHZv
aWQgcmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQq
KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9yQ2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CiAgICAgdm9pZCBjYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19T
Q1JJUFQpCi0gICAgdm9pZCByZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFj
a3MoSFRNTE1lZGlhRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvclBhZ2VTY2FsZUZh
Y3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0
ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsK
KyAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhU
TUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWRBbmRTdGFi
bGUoKTsKICAgICB2b2lkIHJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNo
YW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgdW5yZWdpc3RlckZv
clVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVs
ZW1lbnQmKTsKICAgICB2b2lkIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7
CiAjZW5kaWYKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2Fs
bGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JW
aXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqKTsK
KyAgICB2b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNp
YmlsaXR5Q2hhbmdlQ2xpZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0
YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Jik7CiAKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgdm9pZCByZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQ
bGF5YmFja0NoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwpAQCAtMTA4NCw4ICsx
MDgyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hQb3BzdGF0ZUV2ZW50KFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgc3RhdGVPYmplY3QpOwogICAgIERvY3VtZW50RXZlbnRR
dWV1ZSYgZXZlbnRRdWV1ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXZlbnRRdWV1ZTsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVkaWFD
YW5TdGFydExpc3RlbmVyKik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNZWRpYUNh
blN0YXJ0TGlzdGVuZXIoTWVkaWFDYW5TdGFydExpc3RlbmVyKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVkaWFDYW5TdGFydExpc3RlbmVyJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVk
aWFDYW5TdGFydExpc3RlbmVyJik7CiAgICAgTWVkaWFDYW5TdGFydExpc3RlbmVyKiB0YWtlQW55
TWVkaWFDYW5TdGFydExpc3RlbmVyKCk7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBA
IC0xMTAyLDE3ICsxMTAwLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcXVlc3RGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50KiwgRnVsbFNjcmVlbkNoZWNrVHlwZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB3ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7CiAgICAgCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdFdpbGxFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Vi
a2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oRWxlbWVudCYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgCiAgICAgdm9pZCBzZXRGdWxs
U2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiopOwogICAgIFJlbmRlckZ1bGxTY3JlZW4q
IGZ1bGxTY3JlZW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlblJlbmRlcmVy
OyB9CiAgICAgdm9pZCBmdWxsU2NyZWVuUmVuZGVyZXJEZXN0cm95ZWQoKTsKICAgICAKICAgICB2
b2lkIGZ1bGxTY3JlZW5DaGFuZ2VEZWxheVRpbWVyRmlyZWQoKTsKLSAgICBib29sIGZ1bGxTY3Jl
ZW5Jc0FsbG93ZWRGb3JFbGVtZW50KEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGZ1bGxTY3Jl
ZW5Jc0FsbG93ZWQoRWxlbWVudCYpIGNvbnN0OwogICAgIHZvaWQgZnVsbFNjcmVlbkVsZW1lbnRS
ZW1vdmVkKCk7CiAgICAgdm9pZCByZW1vdmVGdWxsU2NyZWVuRWxlbWVudE9mU3VidHJlZShOb2Rl
JiwgYm9vbCBhbW9uZ0NoaWxkcmVuT25seSA9IGZhbHNlKTsKICAgICBib29sIGlzQW5pbWF0aW5n
RnVsbFNjcmVlbigpIGNvbnN0OwpAQCAtMTEzOSw4ICsxMTM3LDggQEAgcHVibGljOgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiBQTEFURk9STShJT1MpCi0gICAg
RGV2aWNlTW90aW9uQ29udHJvbGxlciogZGV2aWNlTW90aW9uQ29udHJvbGxlcigpIGNvbnN0Owot
ICAgIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogZGV2aWNlT3JpZW50YXRpb25Db250cm9s
bGVyKCkgY29uc3Q7CisgICAgRGV2aWNlTW90aW9uQ29udHJvbGxlciYgZGV2aWNlTW90aW9uQ29u
dHJvbGxlcigpIGNvbnN0OworICAgIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciYgZGV2aWNl
T3JpZW50YXRpb25Db250cm9sbGVyKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIGNvbnN0IERvY3Vt
ZW50VGltaW5nJiB0aW1pbmcoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50VGltaW5nOyB9CkBA
IC0xMjcxLDggKzEyNjksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTdHlsZVdpdGhWaWV3cG9y
dFVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTdHlsZVdpdGhWaWV3cG9ydFVuaXRzOyB9CiAg
ICAgdm9pZCB1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpemUoKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXIqKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFkZEF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJik7CiAg
ICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX21lZGlhU3RhdGU7IH0KICAgICB2b2lkIG5vdGVVc2VySW50ZXJhY3Rpb25XaXRoTWVk
aWFFbGVtZW50KCk7CiAgICAgYm9vbCBpc0NhcHR1cmluZygpIGNvbnN0IHsgcmV0dXJuIE1lZGlh
UHJvZHVjZXI6OmlzQ2FwdHVyaW5nKG1fbWVkaWFTdGF0ZSk7IH0KQEAgLTE0MTcsNyArMTQxNSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0
aW9uJik7CiAgICAgdm9pZCB1cGRhdGVCYXNlVVJMKCk7CiAKLSAgICB2b2lkIGJ1aWxkQWNjZXNz
S2V5TWFwKFRyZWVTY29wZSogcm9vdCk7CisgICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVl
U2NvcGUmIHJvb3QpOwogCiAgICAgdm9pZCBsb2FkRXZlbnREZWxheVRpbWVyRmlyZWQoKTsKIApA
QCAtMTQzMCw4ICsxNDI4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRnVsbFNjcmVl
bkNoYW5nZU9yRXJyb3JFdmVudChEZXF1ZTxSZWZQdHI8Tm9kZT4+JiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudE5hbWUsIGJvb2wgc2hvdWxkTm90aWZ5TWVkaWFFbGVtZW50KTsKICAgICB2b2lk
IGNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwogICAgIHZvaWQgcG9wRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjaygpOwotICAgIHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVu
dCopOwotICAgIHZvaWQgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERv
Y3VtZW50Kik7CisgICAgdm9pZCBwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50Jik7
CisgICAgdm9pZCBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoRG9jdW1l
bnQmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRl
eCA5MTRjNDViZTkzNDc1NTU5ZmU2ZjdjNTk5M2U4ZTcwYzE1Y2YwOGI5Li5kNGQ2ZDQzOTU4OTU2
MmU3N2QxYTg0ZDlhZmIxMzAwZTM0ZTA5MGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtNjIsOTkgKzYyLDk5IEBAIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpkZXRhY2goKQogICAgIG1fcG9zc2libHlFeGlzdGluZ01h
cmtlclR5cGVzID0geyB9OwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
TWFya2VyKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29u
c3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjph
ZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtl
ZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
eworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQu
YXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0
ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBp
ZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0
YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uKSk7CisgICAg
ICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2Vy
KHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwg
ZGVzY3JpcHRpb24pKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBl
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2Us
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0
b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2
YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFy
a2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKLSAgICAgICAgYWRkTWFya2Vy
KCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQ
aWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSkpOworICAgICAgICBh
ZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBl
LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkpKTsKICAg
ICB9CiAKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9k
ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQogewogICAgIGFk
ZE1hcmtlcihub2RlLCBEb2N1bWVudE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZz
ZXQgKyBsZW5ndGgpKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1h
cmtlclRvTm9kZShOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0
YSYmIGRhdGEpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2Rl
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkK
IHsKICAgICBhZGRNYXJrZXIobm9kZSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRPZmZzZXQs
IHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoLCBXVEZNb3ZlKGRhdGEpKSk7CiB9CiAKLXZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UqIHJhbmdl
LCBib29sIGFjdGl2ZU1hdGNoKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRl
eHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCiB7Ci0g
ICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
ewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsK
ICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCk7
CiAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCk7Ci0g
ICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1h
cmtlcihzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOworICAgICAgICBhZGRN
YXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcihzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOwogICAgIH0KIH0KIAogI2lmIFBMQVRGT1JN
KElPUykKIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSog
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJl
dGFpblB0cjxpZD4mIG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFk
ZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRh
dGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKQogewotICAgIGZvciAoVGV4dEl0
ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0
LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1h
cmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0
ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0
aW9uLCBpbnRlcnByZXRhdGlvbnMsIG1ldGFkYXRhKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0
UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+
c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVy
cHJldGF0aW9ucywgbWV0YWRhdGEpKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdl
KiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucykKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
TWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9u
cykKIHsKICAgICBBU1NFUlQoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpOwogICAgIGlmIChp
bnRlcnByZXRhdGlvbnMuc2l6ZSgpIDw9IDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNpemVf
dCBudW1iZXJPZkFsdGVybmF0aXZlcyA9IGludGVycHJldGF0aW9ucy5zaXplKCkgLSAxOwotICAg
IGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgp
OyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRl
eHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsK
ICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAg
ICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlcywgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2Ut
PmVuZE9mZnNldCgpLCBlbXB0eVN0cmluZygpLCBWZWN0b3I8U3RyaW5nPihudW1iZXJPZkFsdGVy
bmF0aXZlcyksIFJldGFpblB0cjxpZD4oKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZBbHRlcm5hdGl2ZXM7ICsraSkKICAgICAgICAgICAgIG1hcmtlci5zZXRBbHRl
cm5hdGl2ZShpbnRlcnByZXRhdGlvbnNbaSArIDFdLCBpKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0
ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIG1hcmtlcik7CisgICAgICAgIGFkZE1hcmtlcih0
ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIG1hcmtlcik7CiAgICAgfQogfQogCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlKiBy
YW5nZSwgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCit2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3Qg
UmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7
CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5h
dEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRl
eHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25SZXN1bHQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZz
ZXQoKSwgU3RyaW5nKCksIFZlY3RvcjxTdHJpbmc+KCksIG1ldGFkYXRhKSk7CisgICAgICAgIGFk
ZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKERvY3Vt
ZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4
dFBpZWNlLT5lbmRPZmZzZXQoKSwgU3RyaW5nKCksIFZlY3RvcjxTdHJpbmc+KCksIG1ldGFkYXRh
KSk7CiAgICAgfQogfQogCiAjZW5kaWYKIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZERyYWdnZWRDb250ZW50TWFya2VyKFJlZlB0cjxSYW5nZT4gcmFuZ2UpCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmFuZ2UmIHJhbmdl
KQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2UuZ2V0KCkpOyAhbWFy
a2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewotICAgICAgICBSZWZQdHI8
UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKKyAgICBmb3IgKFRleHRJdGVy
YXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQu
YWR2YW5jZSgpKSB7CisgICAgICAgIGF1dG8gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgp
OwogICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250
ZW50RGF0YSB7IG1hcmtlZFRleHQubm9kZSgpIH07Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBp
ZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCwg
dGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBXVEZNb3Zl
KGRyYWdnZWRDb250ZW50RGF0YSkgfSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0
YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGll
Y2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dl
ZENvbnRlbnREYXRhKSB9KTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlKiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGlu
Z01hcmtlcikKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1h
cmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJ
dGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRl
eHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5
cGVzKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNF
bXB0eSgpKTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQu
cmFuZ2UoKTsKKyAgICAgICAgYXV0byB0ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpOwog
ICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldCgpOwotICAg
ICAgICByZW1vdmVNYXJrZXJzKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIHNob3VsZFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vycyh0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNl
dCwgbWFya2VyVHlwZXMsIHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
ICAgICB9CiB9CiAKQEAgLTMxOSwxMyArMzE5LDEzIEBAIHN0YXRpYyBib29sIHNob3VsZEluc2Vy
dEFzU2VwYXJhdGVNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikKIC8vIE1h
cmtlcnMgYXJlIHN0b3JlZCBpbiBvcmRlciBzb3J0ZWQgYnkgdGhlaXIgc3RhcnQgb2Zmc2V0Lgog
Ly8gTWFya2VycyBvZiB0aGUgc2FtZSB0eXBlIGRvIG5vdCBvdmVybGFwIGVhY2ggb3RoZXIuCiAK
LXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29u
c3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikgCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJr
ZXIpCiB7CiAgICAgQVNTRVJUKG5ld01hcmtlci5lbmRPZmZzZXQoKSA+PSBuZXdNYXJrZXIuc3Rh
cnRPZmZzZXQoKSk7CiAgICAgaWYgKG5ld01hcmtlci5lbmRPZmZzZXQoKSA9PSBuZXdNYXJrZXIu
c3RhcnRPZmZzZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKSkgeworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG5vZGUucmVu
ZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogRmFjdG9yIHRoZSBtYXJrZXIgcGFpbnRpbmcg
Y29kZSBvdXQgb2YgSW5saW5lVGV4dEJveCBhbmQgdGVhY2ggc2ltcGxlIGxpbmUgbGF5b3V0IHRv
IHVzZSBpdC4KICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikpCiAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLmVuc3VyZUxpbmVCb3hlcygpOwpA
QCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJr
ZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAKICAgICBtX3Bvc3Np
Ymx5RXhpc3RpbmdNYXJrZXJUeXBlcyB8PSBuZXdNYXJrZXIudHlwZSgpOwogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBsaXN0ID0gbV9tYXJrZXJzLmFkZChub2RlLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBsaXN0
ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAg
aWYgKCFsaXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE1hcmtlckxpc3Q+
KCk7CkBAIC0zOTAsMTUgKzM5MCwxNSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAgICAg
ICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcih0b0luc2VydCkpOwogICAg
IH0KIAotICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBub2RlLT5yZW5kZXJlcigp
LT5yZXBhaW50KCk7CisgICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgbm9kZS5yZW5k
ZXJlcigpLT5yZXBhaW50KCk7CiAKLSAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2Rl
KCpub2RlKTsKKyAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwogfQog
CiAvLyBjb3BpZXMgbWFya2VycyBmcm9tIHNyY05vZGUgdG8gZHN0Tm9kZSwgYXBwbHlpbmcgdGhl
IHNwZWNpZmllZCBzaGlmdCBkZWx0YSB0byB0aGUgY29waWVzLiAgVGhlIHNoaWZ0IGlzCiAvLyB1
c2VmdWwgaWYsIGUuZy4sIHRoZSBjYWxsZXIgaGFzIGNyZWF0ZWQgdGhlIGRzdE5vZGUgZnJvbSBh
IG5vbi1wcmVmaXggc3Vic3RyaW5nIG9mIHRoZSBzcmNOb2RlLgotdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2RlLCBpbnQgZGVsdGEpCit2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc3JjTm9kZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGludCBkZWx0YSkKIHsKICAgICBp
ZiAobGVuZ3RoIDw9IDApCiAgICAgICAgIHJldHVybjsKQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vy
cy5pc0VtcHR5KCkpOwogCi0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoc3Jj
Tm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNyY05vZGUpOwog
ICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MzMsMTEgKzQzMywxMSBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsCiAgICAgICAgIGFkZE1hcmtlcihkc3ROb2RlLCBtYXJrZXIp
OwogICAgIH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLT5yZW5kZXJlcigpKQotICAg
ICAgICBkc3ROb2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRvY0RpcnR5ICYm
IGRzdE5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgZHN0Tm9kZS5yZW5kZXJlcigpLT5yZXBhaW50
KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5v
ZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7CiAg
ICAgaWYgKGxlbmd0aCA8PSAwKQogICAgICAgICByZXR1cm47CkBAIC00NDYsNyArNDQ2LDcgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghKG1f
bWFya2Vycy5pc0VtcHR5KCkpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMu
Z2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsK
ICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDkzLDEzICs0OTMsMTMgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICB9CiAKICAgICBpZiAobGlzdC0+aXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fbWFya2Vycy5yZW1vdmUobm9kZSk7CisgICAgICAgIG1fbWFya2Vycy5y
ZW1vdmUoJm5vZGUpOwogICAgICAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzID0geyB9OwogICAgIH0KIAotICAgIGlm
IChkb2NEaXJ0eSAmJiBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBub2RlLT5yZW5kZXJlcigp
LT5yZXBhaW50KCk7CisgICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUucmVuZGVyZXIoKSkKKyAgICAg
ICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9CiAKIERvY3VtZW50TWFya2VyKiBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCkBAIC01
MjMsMTMgKzUyMywxMyBAQCBEb2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjptYXJrZXJDb250YWluaW5nUG9pbnQoY29uc3QgTGF5b3V0UG9pbgogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6bWFya2Vyc0ZvcihOb2RlKiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQorVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSYgbm9kZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBp
ZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IHJlc3VsdDsKLSAgICBNYXJr
ZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogCkBAIC01NTMsNyArNTUzLDcgQEAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlJgogCiAg
ICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7CiAgICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJr
ZXIgOiBtYXJrZXJzRm9yKG5vZGUpKSB7CisgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFy
a2Vyc0Zvcigqbm9kZSkpIHsKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMo
bWFya2VyLT50eXBlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
aWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFu
Z2Uuc3RhcnRPZmZzZXQoKSkKQEAgLTU2NiwxMyArNTY2LDEzIEBAIFZlY3RvcjxSZW5kZXJlZERv
Y3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShS
YW5nZSYKICAgICByZXR1cm4gZm91bmRNYXJrZXJzOwogfQogCi12b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vy
cyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5p
c0VtcHR5KCkpOwogICAgIAotICAgIE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX21h
cmtlcnMuZmluZChub2RlKTsKKyAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9t
YXJrZXJzLmZpbmQoJm5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkp
CiAgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMpOwog
fQpAQCAtNjYzLDEzICs2NjMsMTMgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
cGFpbnRNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHkKICAgICB9CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IGludCBkZWx0YSkKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtl
cjo6YWxsTWFya2VycygpKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJz
LmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2Rl
KTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYg
KCFsaXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbgogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgaW50IHRhcmdldFN0YXJ0
T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBkZWx0YTsKICAgICAgICAgaW50IHRhcmdl
dEVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBpZiAodGFy
Z2V0U3RhcnRPZmZzZXQgPj0gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5k
T2Zmc2V0IDw9IDApIHsKKyAgICAgICAgaWYgKHRhcmdldFN0YXJ0T2Zmc2V0ID49IG5vZGUubWF4
Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5kT2Zmc2V0IDw9IDApIHsKICAgICAgICAgICAg
IGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC02
OTksNyArNjk5LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2Vy
cyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgICAgICBs
aXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUt
Pm1heENoYXJhY3Rlck9mZnNldCgpID8gdGFyZ2V0RW5kT2Zmc2V0IDogbm9kZS0+bWF4Q2hhcmFj
dGVyT2Zmc2V0KCkpOworICAgICAgICAgICAgbWFya2VyLnNldEVuZE9mZnNldCh0YXJnZXRFbmRP
ZmZzZXQgPCBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpID8gdGFyZ2V0RW5kT2Zmc2V0IDogbm9k
ZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CiAgICAgICAgICAgICBkaWRTaGlmdE1hcmtlciA9IHRy
dWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtNzA3LDM0ICs3MDcsMzQgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgaW4KICAgICB9CiAKICAgICBpZiAoZGlkU2hpZnRNYXJrZXIpIHsKLSAgICAgICAg
aW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZSgqbm9kZSk7CisgICAgICAgIGludmFsaWRh
dGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7CiAKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCkpCi0gICAgICAgICAgICBub2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgICAg
IGlmIChub2RlLnJlbmRlcmVyKCkpCisgICAgICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFp
bnQoKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJr
ZXJzQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmUpCit2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYgcmFuZ2UsIGJvb2wgYWN0aXZlKQog
ewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJz
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsK
IAotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0g
ICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOworICAgIE5vZGUm
IHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKKyAgICBOb2RlJiBlbmRD
b250YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKIAotICAgIE5vZGUqIHBhc3RMYXN0Tm9k
ZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5n
ZS5wYXN0TGFzdE5vZGUoKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5v
ZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29u
dGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwotICAgICAgICB1bnNpZ25lZCBlbmRP
ZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyByYW5nZS0+ZW5kT2Zmc2V0KCkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIHNldE1hcmtlcnNBY3Rp
dmUobm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlKTsKKyAgICBmb3IgKE5vZGUq
IG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNl
dCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3RhcnRPZmZzZXQoKSA6IDA7Cisg
ICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lciA/IHJhbmdl
LmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAg
ICAgICBzZXRNYXJrZXJzQWN0aXZlKCpub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3Rp
dmUpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtl
cnNBY3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgYm9vbCBhY3RpdmUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFy
a2Vyc0FjdGl2ZShOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCBib29sIGFjdGl2ZSkKIHsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJz
LmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7
CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTc1Miw4ICs3NTIsOCBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldAogICAgICAgICBkaWRBY3RpdmF0ZU1hcmtlciA9IHRydWU7
CiAgICAgfQogCi0gICAgaWYgKGRpZEFjdGl2YXRlTWFya2VyICYmIG5vZGUtPnJlbmRlcmVyKCkp
Ci0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAoZGlkQWN0aXZh
dGVNYXJrZXIgJiYgbm9kZS5yZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJl
cGFpbnQoKTsKIH0KIAogYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMo
UmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtl
clR5cGVzKQpAQCAtNzY3LDcgKzc2Nyw3IEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyCiAKICAg
ICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5vZGUoKTsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBmb3IgKGF1dG8qIG1hcmtl
ciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJr
ZXJzRm9yKCpub2RlKSkgewogICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyht
YXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBp
ZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uuc3RhcnRPZmZzZXQoKSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKaW5kZXggOTAwN2ExODczYWQ1OWMxZGNj
Y2E1Mjc2ZTg5NDZlYjRlZTVhOTEwYS4uYWZlYTc2YTFhYWMwOTBkMTg2ZGY1OGU3NjdkNmY2NmE5
ODY2NDk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKQEAgLTQ4LDE5ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgfkRvY3VtZW50TWFya2VyQ29udHJv
bGxlcigpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKLSAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSos
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSos
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsK
LSAgICB2b2lkIGFkZE1hcmtlclRvTm9kZShOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIHZvaWQgYWRk
TWFya2VyVG9Ob2RlKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UqLCBi
b29sIGFjdGl2ZU1hdGNoKTsKKyAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSYsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlKTsKKyAgICB2b2lkIGFkZE1hcmtlcihSYW5nZSYsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKKyAgICB2b2lkIGFk
ZE1hcmtlclRvTm9kZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRkTWFya2VyVG9Ob2Rl
KE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmLCBib29sIGFjdGl2ZU1h
dGNoKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0
YWRhdGEpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cihSYW5nZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpOwotICAgIHZv
aWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlKiwgY29uc3QgUmV0YWluUHRyPGlkPiYg
bWV0YWRhdGEpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKKyAgICB2
b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UmLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zKTsKKyAgICB2b2lkIGFkZERpY3RhdGlv
blJlc3VsdE1hcmtlcihSYW5nZSYsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKTsKICNl
bmRpZgotICAgIHZvaWQgYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmVmUHRyPFJhbmdlPik7Cisg
ICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihSYW5nZSYpOwogCi0gICAgdm9pZCBjb3B5
TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwg
Tm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsKKyAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUmIHNy
Y05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlJiBkc3ROb2RlLCBp
bnQgZGVsdGEpOwogICAgIGJvb2wgaGFzTWFya2VycygpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlw
ZXMuY29udGFpbnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwpAQCAtNzIsMTcgKzcy
LDE3IEBAIHB1YmxpYzoKICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50
IGlzIGZhbHNlLCB3ZSB3aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQg
aXQgcmV0YWlucwogICAgIC8vIHRoZSBwb3J0aW9uIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFu
Z2UuCiAgICAgZW51bSBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHsgRG9O
b3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciwgUmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIgfTsKLSAgICB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UqLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlKiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCAgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhSYW5nZSYsIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2Vycygp
LCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0
aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksICBSZW1vdmVQYXJ0
aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxN
YXJrZXJzKCkpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlKiwgT3B0aW9uU2V0PERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwor
ICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgcmVw
YWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwotICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUqLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3Rp
dmUoUmFuZ2UqLCBib29sKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSosIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOworICAgIHZvaWQgc2hp
ZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKKyAgICB2
b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2UmLCBib29sKTsKKyAgICB2b2lkIHNldE1hcmtlcnNB
Y3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJv
b2wpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
PiBtYXJrZXJzRm9yKE5vZGUqLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CisgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBt
YXJrZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4pOwogICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jhbmdl
KFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CiAKQEAgLTk5
LDcgKzk5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhZGRNYXJr
ZXIoTm9kZSosIGNvbnN0IERvY3VtZW50TWFya2VyJik7CisgICAgdm9pZCBhZGRNYXJrZXIoTm9k
ZSYsIGNvbnN0IERvY3VtZW50TWFya2VyJik7CiAKICAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0Pj4gTWFya2VyTWFwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IDY4OTU0ZjUyZWMzZmRmNTI3NzI5MDgyZThiMjExNDQ4YjUyNmMxMmEu
LmExZWQ2N2FiZDU0YTcwZWFlNTllMjA3ZTk3OTUzZDgzMTk3NmZhYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBFbGVtZW50Ojp+RWxlbWVudCgpCiAgICAgICAg
IGRldGFjaEFsbEF0dHJOb2Rlc0Zyb21FbGVtZW50KCk7CiAKICAgICBpZiAoaGFzUGVuZGluZ1Jl
c291cmNlcygpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJl
bW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KCp0aGlzKTsKICAgICAgICAgQVNTRVJUKCFoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgIH0K
IH0KQEAgLTUzNywyNSArNTM3LDI1IEBAIGJvb2wgRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25z
dAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25FbGVtZW50SW5BY3RpdmVDaGFpbigpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNJbkFjdGl2ZUNoYWluKHRoaXMpOworICAgIHJl
dHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzSW5BY3RpdmVDaGFpbigqdGhp
cyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxlbWVudEFjdGl2ZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNBY3RpdmUodGhpcyk7CisgICAgcmV0dXJuIGRv
Y3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNBY3RpdmUoKnRoaXMpOwogfQogCiBib29s
IEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRGb2N1c2VkKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0
aW9uRWxlbWVudHMoKS5pc0ZvY3VzZWQodGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXNl
ckFjdGlvbkVsZW1lbnRzKCkuaXNGb2N1c2VkKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojpp
c1VzZXJBY3Rpb25FbGVtZW50SG92ZXJlZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFj
dGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRz
KCkuaXNIb3ZlcmVkKHRoaXMpOworICAgIHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVt
ZW50cygpLmlzSG92ZXJlZCgqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJv
b2wgZmxhZywgYm9vbCBwYXVzZSkKQEAgLTU2Myw3ICs1NjMsNyBAQCB2b2lkIEVsZW1lbnQ6OnNl
dEFjdGl2ZShib29sIGZsYWcsIGJvb2wgcGF1c2UpCiAgICAgaWYgKGZsYWcgPT0gYWN0aXZlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCku
c2V0QWN0aXZlKHRoaXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRz
KCkuc2V0QWN0aXZlKCp0aGlzLCBmbGFnKTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5k
ZXJTdHlsZSA9IHRoaXMtPnJlbmRlclN0eWxlKCk7CiAgICAgYm9vbCByZWFjdHNUb1ByZXNzID0g
KHJlbmRlclN0eWxlICYmIHJlbmRlclN0eWxlLT5hZmZlY3RlZEJ5QWN0aXZlKCkpIHx8IHN0eWxl
QWZmZWN0ZWRCeUFjdGl2ZSgpOwpAQCAtNjEyLDcgKzYxMiw3IEBAIHZvaWQgRWxlbWVudDo6c2V0
Rm9jdXMoYm9vbCBmbGFnKQogICAgIGlmIChmbGFnID09IGZvY3VzZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKHRo
aXMsIGZsYWcpOworICAgIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0Rm9jdXNl
ZCgqdGhpcywgZmxhZyk7CiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAg
Zm9yIChFbGVtZW50KiBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnRJbkNvbXBvc2VkVHJlZSgpKQpAQCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQg
RWxlbWVudDo6c2V0SG92ZXJlZChib29sIGZsYWcpCiAgICAgaWYgKGZsYWcgPT0gaG92ZXJlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygp
LnNldEhvdmVyZWQodGhpcywgZmxhZyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVu
dHMoKS5zZXRIb3ZlcmVkKCp0aGlzLCBmbGFnKTsKIAogICAgIGlmICghcmVuZGVyZXIoKSkgewog
ICAgICAgICAvLyBXaGVuIHNldHRpbmcgaG92ZXIgdG8gZmFsc2UsIHRoZSBzdHlsZSBuZWVkcyB0
byBiZSByZWNhbGMnZCBldmVuIHdoZW4KQEAgLTE2MDksMTYgKzE2MDksMTYgQEAgYm9vbCBFbGVt
ZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKICAgICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBl
bGVtZW50RGF0YSgpLT5sZW5ndGgoKTsKIH0KIAotYm9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50
QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBvdGhlcikgY29uc3QKK2Jvb2wgRWxlbWVudDo6aGFz
RXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCYgb3RoZXIpIGNvbnN0CiB7CiAgICAg
c3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgb3RoZXItPnN5bmNocm9uaXplQWxsQXR0
cmlidXRlcygpOwotICAgIGlmIChlbGVtZW50RGF0YSgpID09IG90aGVyLT5lbGVtZW50RGF0YSgp
KQorICAgIG90aGVyLnN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOworICAgIGlmIChlbGVtZW50
RGF0YSgpID09IG90aGVyLmVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGlmIChlbGVtZW50RGF0YSgpKQotICAgICAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+aXNFcXVp
dmFsZW50KG90aGVyLT5lbGVtZW50RGF0YSgpKTsKLSAgICBpZiAob3RoZXItPmVsZW1lbnREYXRh
KCkpCi0gICAgICAgIHJldHVybiBvdGhlci0+ZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KGVs
ZW1lbnREYXRhKCkpOworICAgICAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50
KG90aGVyLmVsZW1lbnREYXRhKCkpOworICAgIGlmIChvdGhlci5lbGVtZW50RGF0YSgpKQorICAg
ICAgICByZXR1cm4gb3RoZXIuZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KGVsZW1lbnREYXRh
KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB2b2lkIEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQogICAgIENv
bnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKIAogICAgIGlmIChoYXNQ
ZW5kaW5nUmVzb3VyY2VzKCkpCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyh0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKCp0aGlzKTsKIAogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTgxNyw3ICsxODE3LDcg
QEAgdm9pZCBFbGVtZW50OjphZGRTaGFkb3dSb290KFJlZjxTaGFkb3dSb290PiYmIG5ld1NoYWRv
d1Jvb3QpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdCgq
dGhpcywgc2hhZG93Um9vdCk7CiAKICAgICBpZiAoc2hhZG93Um9vdC5tb2RlKCkgPT0gU2hhZG93
Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCgm
c2hhZG93Um9vdCk7CisgICAgICAgIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qoc2hhZG93Um9v
dCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCgpCkBAIC0zNTMwLDEwICsz
NTMwLDEwIEBAIHZvaWQgRWxlbWVudDo6Y2xlYXJIb3ZlckFuZEFjdGl2ZVN0YXR1c0JlZm9yZURl
dGFjaGluZ1JlbmRlcmVyKCkKICAgICBpZiAoIWlzVXNlckFjdGlvbkVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChob3ZlcmVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkuaG92ZXJl
ZEVsZW1lbnREaWREZXRhY2godGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuaG92ZXJlZEVsZW1l
bnREaWREZXRhY2goKnRoaXMpOwogICAgIGlmIChpbkFjdGl2ZUNoYWluKCkpCi0gICAgICAgIGRv
Y3VtZW50KCkuZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2godGhpcyk7Ci0gICAgZG9jdW1l
bnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWREZXRhY2godGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50KCkuZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goKnRoaXMpOworICAgIGRvY3VtZW50
KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuZGlkRGV0YWNoKCp0aGlzKTsKIH0KIAogdm9pZCBFbGVt
ZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4
IGY2ZGJlYWMzNGE1ZjM2ZWE4ZTEzMDhiNmIwZmFjMTYyMmJkNzc0MzMuLjY5ZjA3YzA4ZDQ4MzJm
MWYxMDgyMWE5MThkMzU4YTZjNDI0ZDRmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjU5LDcg
KzI1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDbG9uZXMgYWxsIGF0dHJpYnV0ZS1kZXJpdmVkIGRh
dGEsIGluY2x1ZGluZyBzdWJjbGFzcyBzcGVjaWZpY3MgKHRocm91Z2ggY29weU5vbkF0dHJpYnV0
ZVByb3BlcnRpZXMuKQogICAgIHZvaWQgY2xvbmVEYXRhRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVu
dCYpOwogCi0gICAgYm9vbCBoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBv
dGhlcikgY29uc3Q7CisgICAgYm9vbCBoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVt
ZW50JiBvdGhlcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29weU5vbkF0dHJpYnV0ZVBy
b3BlcnRpZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JikgeyB9CiAKQEAgLTU5MywxNCArNTkz
LDkgQEAgcHJpdmF0ZToKICAgICBib29sIGlzVXNlckFjdGlvbkVsZW1lbnRGb2N1c2VkKCkgY29u
c3Q7CiAgICAgYm9vbCBpc1VzZXJBY3Rpb25FbGVtZW50SG92ZXJlZCgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSB7
IH0KICAgICB2aXJ0dWFsIGJvb2wgYWx3YXlzQ3JlYXRlVXNlckFnZW50U2hhZG93Um9vdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZv
ciBBdHRyIHRvIGNhbGwgd2lsbE1vZGlmeUF0dHJpYnV0ZS9kaWRNb2RpZnlBdHRyaWJ1dGUuCi0g
ICAgZnJpZW5kIGNsYXNzIEF0dHI7Ci0KLSAgICBlbnVtIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0
dHJpYnV0ZSB7IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlID0gMCwgSW5TeW5j
aHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgfTsKLQogICAgIHZvaWQgZGlkQWRkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICB2b2lkIHdp
bGxNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwogICAgIHZvaWQgZGlk
TW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKQEAgLTYyOCw2ICs2MjMs
NyBAQCBwcml2YXRlOgogICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29uc3QgZmluYWw7CiAgICAg
Ym9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdCBmaW5hbDsKIAorICAgIGVudW0g
U3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIHsgTm90SW5TeW5jaHJvbml6YXRpb25PZkxh
enlBdHRyaWJ1dGUsIEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIH07CiAgICAgdm9p
ZCBzZXRBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25lZCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJp
YnV0ZSk7CiAgICAgdm9pZCBhZGRBdHRyaWJ1dGVJbnRlcm5hbChjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmli
dXRlKTsKICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHVuc2lnbmVkIGluZGV4LCBT
eW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFw
LmNwcAppbmRleCA1Yjc0YTJiMzU5ODg0ZDI1NjUyZmRlZTI4MGFmOGYyMjY3MGI1MmQwLi4xN2Jj
ZWU2ZWE3MzgyY2IwY2I1ODMzZjEyYWI1ZGM1NGI0N2Q2MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5o
IgogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY2LDcgKzY1LDcg
QEAgRXhjZXB0aW9uT3I8UmVmPEF0dHI+PiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiBWZWN0b3I8U3RyaW5nPiBOYW1lZE5vZGVNYXA6OnN1
cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVz
ID0gbV9lbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7Ci0gICAgaWYgKGlzPEhUTUxFbGVtZW50
PihtX2VsZW1lbnQpICYmIGlzPEhUTUxEb2N1bWVudD4obV9lbGVtZW50LmRvY3VtZW50KCkpKSB7
CisgICAgaWYgKGlzPEhUTUxFbGVtZW50PihtX2VsZW1lbnQpICYmIG1fZWxlbWVudC5kb2N1bWVu
dCgpLmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgbmFtZXMucmVtb3ZlQWxsTWF0Y2hpbmco
W10oU3RyaW5nJiBuYW1lKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogU3Ry
aW5nVmlldyB7IG5hbWUgfS5jb2RlVW5pdHMoKSkgewogICAgICAgICAgICAgICAgIGlmIChpc0FT
Q0lJVXBwZXIoY2hhcmFjdGVyKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA1Yjk3YzY4ZTdiN2RhODM2
ZjNjNDg2MDEzNTgxOTAyNGIyZjA5YWEwLi5iNTIzZjkyNWZhYzQxMmE1OTIwNDE0Yzc3NjQ5NWQy
ZDkzNWQyMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01OTksNyArNTk5LDcgQEAgdm9pZCBOb2Rl
Ojpub3JtYWxpemUoKQogICAgICAgICB3aGlsZSAoTm9kZSogbmV4dFNpYmxpbmcgPSBub2RlLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAobmV4dFNpYmxpbmctPm5vZGVUeXBlKCkg
IT0gVEVYVF9OT0RFKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgUmVmUHRy
PFRleHQ+IG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4obmV4dFNpYmxpbmcpOworICAgICAgICAg
ICAgUmVmPFRleHQ+IG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHRTaWJsaW5nKTsKIAog
ICAgICAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IHRleHQgbm9kZXMuCiAgICAgICAgICAgICBpZiAo
IW5leHRUZXh0LT5sZW5ndGgoKSkgewpAQCAtNjEwLDcgKzYxMCw3IEBAIHZvaWQgTm9kZTo6bm9y
bWFsaXplKCkKICAgICAgICAgICAgIC8vIEJvdGggbm9uLWVtcHR5IHRleHQgbm9kZXMuIE1lcmdl
IHRoZW0uCiAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB0ZXh0LT5sZW5ndGgoKTsKICAg
ICAgICAgICAgIHRleHQtPmFwcGVuZERhdGEobmV4dFRleHQtPmRhdGEoKSk7Ci0gICAgICAgICAg
ICBkb2N1bWVudCgpLnRleHROb2Rlc01lcmdlZChuZXh0VGV4dC5nZXQoKSwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkudGV4dE5vZGVzTWVyZ2VkKG5leHRUZXh0LCBvZmZzZXQpOwog
ICAgICAgICAgICAgbmV4dFRleHQtPnJlbW92ZSgpOwogICAgICAgICB9CiAKQEAgLTEzMjMsNyAr
MTMyMyw3IEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5vZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAgICAg
ICAgIGF1dG8mIG90aGVyRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpvdGhlcik7CiAgICAg
ICAgIGlmICh0aGlzRWxlbWVudC50YWdRTmFtZSgpICE9IG90aGVyRWxlbWVudC50YWdRTmFtZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXRoaXNFbGVtZW50Lmhh
c0VxdWl2YWxlbnRBdHRyaWJ1dGVzKCZvdGhlckVsZW1lbnQpKQorICAgICAgICBpZiAoIXRoaXNF
bGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKG90aGVyRWxlbWVudCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlSXRlcmF0b3IuY3BwCmluZGV4IDQ1ZDg2MGJhODZmNDkwMzY2MTk4YmZlODQ2NGYxYzI2NTEy
ZTliNzkuLmY2ZjEwMjA2OWI5ZWZjNDFhNDI1Y2Y2ZGEzYzI0NzdiZWVkYTEyZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCkBAIC03Myw3ICs3Myw3IEBAIGlubGluZSBOb2RlSXRl
cmF0b3I6Ok5vZGVJdGVyYXRvcihOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywg
UmVmUHRyPE5vCiAgICAgOiBOb2RlSXRlcmF0b3JCYXNlKHJvb3ROb2RlLCB3aGF0VG9TaG93LCBX
VEZNb3ZlKGZpbHRlcikpCiAgICAgLCBtX3JlZmVyZW5jZU5vZGUocm9vdE5vZGUsIHRydWUpCiB7
Ci0gICAgcm9vdCgpLmRvY3VtZW50KCkuYXR0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOworICAgIHJv
b3QoKS5kb2N1bWVudCgpLmF0dGFjaE5vZGVJdGVyYXRvcigqdGhpcyk7CiB9CiAKIFJlZjxOb2Rl
SXRlcmF0b3I+IE5vZGVJdGVyYXRvcjo6Y3JlYXRlKE5vZGUmIHJvb3ROb2RlLCB1bnNpZ25lZCB3
aGF0VG9TaG93LCBSZWZQdHI8Tm9kZUZpbHRlcj4mJiBmaWx0ZXIpCkBAIC04Myw3ICs4Myw3IEBA
IFJlZjxOb2RlSXRlcmF0b3I+IE5vZGVJdGVyYXRvcjo6Y3JlYXRlKE5vZGUmIHJvb3ROb2RlLCB1
bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQCiAKIE5vZGVJdGVyYXRvcjo6fk5vZGVJdGVyYXRvcigp
CiB7Ci0gICAgcm9vdCgpLmRvY3VtZW50KCkuZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOworICAg
IHJvb3QoKS5kb2N1bWVudCgpLmRldGFjaE5vZGVJdGVyYXRvcigqdGhpcyk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxOb2RlPj4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAppbmRleCA0ZDMzNzI3OWMwZWNiYzk1MGRmNDll
ZWIxZTU0Mjc0MjczMGQ1OTdkLi40NTgxYTk0YjEzZWZiNmUzOGMzNjdiYTcxODI2NGFjZTVlNzNk
NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTMwLDM1
ICszMCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSYWRpb0J1dHRvbkdyb3VwIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBSYWRpb0J1dHRvbkdy
b3VwKCk7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1iZXJzLmlzRW1w
dHkoKTsgfQogICAgIGJvb2wgaXNSZXF1aXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZWRD
b3VudDsgfQogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGNoZWNrZWRCdXR0b24oKSBjb25zdCB7IHJl
dHVybiBtX2NoZWNrZWRCdXR0b247IH0KLSAgICB2b2lkIGFkZChIVE1MSW5wdXRFbGVtZW50Kik7
Ci0gICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCopOwotICAgIHZv
aWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lk
IHJlbW92ZShIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgYm9vbCBjb250YWlucyhIVE1MSW5wdXRF
bGVtZW50KikgY29uc3Q7CisgICAgdm9pZCBhZGQoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZv
aWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlcXVp
cmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmUo
SFRNTElucHV0RWxlbWVudCYpOworICAgIGJvb2wgY29udGFpbnMoSFRNTElucHV0RWxlbWVudCYp
IGNvbnN0OwogICAgIFZlY3RvcjxIVE1MSW5wdXRFbGVtZW50Kj4gbWVtYmVycygpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMoKTsK
ICAgICB2b2lkIHVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpOwogICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0OwotICAgIHZvaWQgY2hhbmdlQ2hlY2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50
Kik7CiAgICAgdm9pZCBzZXRDaGVja2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKIAogICAg
IEhhc2hTZXQ8SFRNTElucHV0RWxlbWVudCo+IG1fbWVtYmVyczsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBtX2NoZWNrZWRCdXR0b247Ci0gICAgc2l6ZV90IG1fcmVxdWlyZWRDb3VudDsKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBtX2NoZWNrZWRCdXR0b24geyBudWxscHRyIH07CisgICAgc2l6ZV90
IG1fcmVxdWlyZWRDb3VudCB7IDAgfTsKIH07CiAKLVJhZGlvQnV0dG9uR3JvdXA6OlJhZGlvQnV0
dG9uR3JvdXAoKQotICAgIDogbV9jaGVja2VkQnV0dG9uKG51bGxwdHIpCi0gICAgLCBtX3JlcXVp
cmVkQ291bnQoMCkKLXsKLX0KLQogaW5saW5lIGJvb2wgUmFkaW9CdXR0b25Hcm91cDo6aXNWYWxp
ZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFpc1JlcXVpcmVkKCkgfHwgbV9jaGVja2VkQnV0dG9u
OwpAQCAtODgsMTYgKzgwLDE2IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6c2V0Q2hlY2tlZEJ1
dHRvbihIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgICAgIG9sZENoZWNrZWRCdXR0b24t
PnNldENoZWNrZWQoZmFsc2UpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1M
SW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1MSW5w
dXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigp
KTsKLSAgICBpZiAoIW1fbWVtYmVycy5hZGQoYnV0dG9uKS5pc05ld0VudHJ5KQorICAgIEFTU0VS
VChidXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoIW1fbWVtYmVycy5hZGQoJmJ1dHRv
bikuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgZ3JvdXBXYXNWYWxpZCA9
IGlzVmFsaWQoKTsKLSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1dHRv
bi5pc1JlcXVpcmVkKCkpCiAgICAgICAgICsrbV9yZXF1aXJlZENvdW50OwotICAgIGlmIChidXR0
b24tPmNoZWNrZWQoKSkKLSAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbihidXR0b24pOworICAgIGlm
IChidXR0b24uY2hlY2tlZCgpKQorICAgICAgICBzZXRDaGVja2VkQnV0dG9uKCZidXR0b24pOwog
CiAgICAgYm9vbCBncm91cElzVmFsaWQgPSBpc1ZhbGlkKCk7CiAgICAgaWYgKGdyb3VwV2FzVmFs
aWQgIT0gZ3JvdXBJc1ZhbGlkKQpAQCAtMTA1LDMxICs5NywzMSBAQCB2b2lkIFJhZGlvQnV0dG9u
R3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgZWxzZSBpZiAoIWdyb3Vw
SXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlvIGJ1dHRvbiBub3QgaW4gYSBncm91cCBpcyBh
bHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBpdAogICAgICAgICAvLyBpbnZhbGlkIG9ubHkg
aWYgdGhlIGdyb3VwIGlzIGludmFsaWQuCi0gICAgICAgIGJ1dHRvbi0+dXBkYXRlVmFsaWRpdHko
KTsKKyAgICAgICAgYnV0dG9uLnVwZGF0ZVZhbGlkaXR5KCk7CiAgICAgfQogfQogCi12b2lkIFJh
ZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0
b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRF
bGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsK
LSAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5zKGJ1dHRvbikpOworICAgIEFTU0VSVChidXR0
b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBBU1NFUlQobV9tZW1iZXJzLmNvbnRhaW5zKCZidXR0
b24pKTsKICAgICBib29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24tPmNo
ZWNrZWQoKSkKLSAgICAgICAgc2V0Q2hlY2tlZEJ1dHRvbihidXR0b24pOworICAgIGlmIChidXR0
b24uY2hlY2tlZCgpKQorICAgICAgICBzZXRDaGVja2VkQnV0dG9uKCZidXR0b24pOwogICAgIGVs
c2UgewotICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09IGJ1dHRvbikKKyAgICAgICAgaWYg
KG1fY2hlY2tlZEJ1dHRvbiA9PSAmYnV0dG9uKQogICAgICAgICAgICAgc2V0Q2hlY2tlZEJ1dHRv
bihudWxscHRyKTsKICAgICB9CiAgICAgaWYgKHdhc1ZhbGlkICE9IGlzVmFsaWQoKSkKICAgICAg
ICAgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25H
cm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikK
K3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1
dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkp
OwotICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMoYnV0dG9uKSk7CisgICAgQVNTRVJUKGJ1
dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMoJmJ1
dHRvbikpOwogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1ZhbGlkKCk7Ci0gICAgaWYgKGJ1dHRvbi0+
aXNSZXF1aXJlZCgpKQorICAgIGlmIChidXR0b24uaXNSZXF1aXJlZCgpKQogICAgICAgICArK21f
cmVxdWlyZWRDb3VudDsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fcmVxdWlyZWRDb3Vu
dCk7CkBAIC0xMzksMjIgKzEzMSwyMiBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlcXVpcmVk
QXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgICAgIHVwZGF0
ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJl
bW92ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJl
bW92ZShIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pCiB7Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNS
YWRpb0J1dHRvbigpKTsKLSAgICBIYXNoU2V0PEhUTUxJbnB1dEVsZW1lbnQqPjo6aXRlcmF0b3Ig
aXQgPSBtX21lbWJlcnMuZmluZChidXR0b24pOworICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1
dHRvbigpKTsKKyAgICBhdXRvIGl0ID0gbV9tZW1iZXJzLmZpbmQoJmJ1dHRvbik7CiAgICAgaWYg
KGl0ID09IG1fbWVtYmVycy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB3YXNW
YWxpZCA9IGlzVmFsaWQoKTsKICAgICBtX21lbWJlcnMucmVtb3ZlKGl0KTsKLSAgICBpZiAoYnV0
dG9uLT5pc1JlcXVpcmVkKCkpIHsKKyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkgewogICAg
ICAgICBBU1NFUlQobV9yZXF1aXJlZENvdW50KTsKICAgICAgICAgLS1tX3JlcXVpcmVkQ291bnQ7
CiAgICAgfQogICAgIGlmIChtX2NoZWNrZWRCdXR0b24pIHsKLSAgICAgICAgYnV0dG9uLT5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0g
YnV0dG9uKSB7CisgICAgICAgIGJ1dHRvbi5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Cisg
ICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0gJmJ1dHRvbikgewogICAgICAgICAgICAgbV9j
aGVja2VkQnV0dG9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNG
b3JBbGxCdXR0b25zKCk7CiAgICAgICAgIH0KQEAgLTE2OCw3ICsxNjAsNyBAQCB2b2lkIFJhZGlv
QnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCiAgICAgaWYgKCF3
YXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlvIGJ1dHRvbiBub3QgaW4gYSBncm91cCBpcyBh
bHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBpdAogICAgICAgICAvLyB2YWxpZCBvbmx5IGlm
IHRoZSBncm91cCB3YXMgaW52YWxpZC4KLSAgICAgICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgp
OworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRpdHkoKTsKICAgICB9CiB9CiAKQEAgLTE4OCw5
ICsxODAsOSBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0
dG9ucygpCiAgICAgfQogfQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXA6OmNvbnRhaW5zKEhUTUxJ
bnB1dEVsZW1lbnQqIGJ1dHRvbikgY29uc3QKK2Jvb2wgUmFkaW9CdXR0b25Hcm91cDo6Y29udGFp
bnMoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKSBjb25zdAogewotICAgIHJldHVybiBtX21lbWJl
cnMuY29udGFpbnMoYnV0dG9uKTsKKyAgICByZXR1cm4gbV9tZW1iZXJzLmNvbnRhaW5zKCZidXR0
b24pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDYsMTYgKzE5OCwxNiBAQCBSYWRpb0J1dHRvbkdy
b3Vwczo6flJhZGlvQnV0dG9uR3JvdXBzKCkKIHsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vw
czo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9u
R3JvdXBzOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlz
RW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChl
bGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9u
YW1lVG9Hcm91cE1hcCkKICAgICAgICAgbV9uYW1lVG9Hcm91cE1hcCA9IHN0ZDo6bWFrZV91bmlx
dWU8TmFtZVRvR3JvdXBNYXA+KCk7CiAKLSAgICBhdXRvJiBncm91cCA9IG1fbmFtZVRvR3JvdXBN
YXAtPmFkZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgYXV0byYgZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC5uYW1lKCku
aW1wbCgpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKCFncm91cCkKICAgICAg
ICAgZ3JvdXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhZGlvQnV0dG9uR3JvdXA+KCk7CiAgICAgZ3Jv
dXAtPmFkZChlbGVtZW50KTsKQEAgLTI0MCwzMCArMjMyLDI2IEBAIFZlY3RvcjxIVE1MSW5wdXRF
bGVtZW50Kj4gUmFkaW9CdXR0b25Hcm91cHM6Omdyb3VwTWVtYmVycyhjb25zdCBIVE1MSW5wdXRF
bGVtZW50CiAgICAgcmV0dXJuIGdyb3VwLT5tZW1iZXJzKCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0
b25Hcm91cHM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0g
ICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNS
YWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKG1fbmFtZVRvR3JvdXBNYXApOwogICAgIGlmICghbV9uYW1l
VG9Hcm91cE1hcCkKICAgICAgICAgcmV0dXJuOwotICAgIFJhZGlvQnV0dG9uR3JvdXAqIGdyb3Vw
ID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOwotICAgIEFT
U0VSVChncm91cCk7Ci0gICAgZ3JvdXAtPnVwZGF0ZUNoZWNrZWRTdGF0ZShlbGVtZW50KTsKKyAg
ICBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC5uYW1lKCkuaW1wbCgpKS0+dXBkYXRlQ2hl
Y2tlZFN0YXRlKGVsZW1lbnQpOwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9C
dXR0b25Hcm91cHM6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50JiBl
bGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlm
IChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9C
dXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVChtX25hbWVUb0dyb3VwTWFwKTsKICAgICBpZiAoIW1fbmFtZVRvR3Jv
dXBNYXApCiAgICAgICAgIHJldHVybjsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1f
bmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKLSAgICBBU1NFUlQo
Z3JvdXApOwotICAgIGdyb3VwLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoZWxlbWVudCk7Cisg
ICAgbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQubmFtZSgpLmltcGwoKSktPnJlcXVpcmVk
QXR0cmlidXRlQ2hhbmdlZChlbGVtZW50KTsKIH0KIAogSFRNTElucHV0RWxlbWVudCogUmFkaW9C
dXR0b25Hcm91cHM6OmNoZWNrZWRCdXR0b25Gb3JHcm91cChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpIGNvbnN0CkBAIC0yNzUsMzggKzI2MywzNiBAQCBIVE1MSW5wdXRFbGVtZW50KiBSYWRpb0J1
dHRvbkdyb3Vwczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYgbgog
ICAgIHJldHVybiBncm91cCA/IGdyb3VwLT5jaGVja2VkQnV0dG9uKCkgOiBudWxscHRyOwogfQog
Ci1ib29sIFJhZGlvQnV0dG9uR3JvdXBzOjpoYXNDaGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1
dEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFJhZGlvQnV0dG9uR3JvdXBzOjpoYXNDaGVj
a2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lID0gZWxlbWVudC0+bmFtZSgpOworICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0
b24oKSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZWxlbWVudC5uYW1lKCk7CiAg
ICAgaWYgKG5hbWUuaXNFbXB0eSgpIHx8ICFtX25hbWVUb0dyb3VwTWFwKQotICAgICAgICByZXR1
cm4gZWxlbWVudC0+Y2hlY2tlZCgpOwotCi0gICAgY29uc3QgUmFkaW9CdXR0b25Hcm91cCogZ3Jv
dXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQobmFtZS5pbXBsKCkpOwotICAgIHJldHVybiBncm91
cC0+Y2hlY2tlZEJ1dHRvbigpOworICAgICAgICByZXR1cm4gZWxlbWVudC5jaGVja2VkKCk7Cisg
ICAgcmV0dXJuIG1fbmFtZVRvR3JvdXBNYXAtPmdldChuYW1lLmltcGwoKSktPmNoZWNrZWRCdXR0
b24oKTsKIH0KIAotYm9vbCBSYWRpb0J1dHRvbkdyb3Vwczo6aXNJblJlcXVpcmVkR3JvdXAoSFRN
TElucHV0RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgUmFkaW9CdXR0b25Hcm91cHM6Omlz
SW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUo
KS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBp
ZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmFkaW9C
dXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC0+bmFtZSgp
LmltcGwoKSk7CisgICAgYXV0byogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVu
dC5uYW1lKCkuaW1wbCgpKTsKICAgICByZXR1cm4gZ3JvdXAgJiYgZ3JvdXAtPmlzUmVxdWlyZWQo
KSAmJiBncm91cC0+Y29udGFpbnMoZWxlbWVudCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91
cHM6OnJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQordm9pZCBSYWRpb0J1
dHRvbkdyb3Vwczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5h
bWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAg
ICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm47CiAKICAgICBtX25hbWVUb0dyb3Vw
TWFwLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgTmFtZVRvR3JvdXBNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKKyAgICBh
dXRvIGl0ID0gbV9uYW1lVG9Hcm91cE1hcC0+ZmluZChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpOwog
ICAgIGlmIChpdCA9PSBtX25hbWVUb0dyb3VwTWFwLT5lbmQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGl0LT52YWx1ZS0+cmVtb3ZlKGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0
b25Hcm91cHMuaAppbmRleCAxZTVhNThkNTdkYTc2ODVlMWMwMThmZDk2YWZhZjIwN2VmMDEzMzZh
Li41MzMxMmRkZTk3MDZjZThkMjRhM2UyMTRhZWM0ZWNmNTNlYWVhODU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaApAQCAtMzQsMTMgKzM0LDEzIEBAIGNsYXNzIFJhZGlv
QnV0dG9uR3JvdXBzIHsKIHB1YmxpYzoKICAgICBSYWRpb0J1dHRvbkdyb3VwcygpOwogICAgIH5S
YWRpb0J1dHRvbkdyb3VwcygpOwotICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQq
KTsKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAg
dm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCopOwotICAgIHZv
aWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZEJ1dHRvbihI
VE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0
RWxlbWVudCYpOworICAgIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVs
ZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Jik7CiAgICAg
SFRNTElucHV0RWxlbWVudCogY2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZ3JvdXBOYW1lKSBjb25zdDsKLSAgICBib29sIGhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRN
TElucHV0RWxlbWVudCopIGNvbnN0OwotICAgIGJvb2wgaXNJblJlcXVpcmVkR3JvdXAoSFRNTElu
cHV0RWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBIVE1M
SW5wdXRFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBpc0luUmVxdWlyZWRHcm91cChIVE1MSW5w
dXRFbGVtZW50JikgY29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBncm91cE1l
bWJlcnMoY29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAKaW5kZXggNWRhZTA2MzZiYjE5NzNhMzU5NzM4Mzk3Y2I2MTMwMWY5MDJlMzBjMy4u
MzYxOTkwNDdjMzRjYWI2ZjI4MTY1ZTBlZjgzNGMyMjlhODRkNzQzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzksNyArNzgsNyBAQCBpbmxpbmUg
UmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50KQogICAgIHJhbmdlQ291bnRlci5p
bmNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0
aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAogUmVm
PFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50KQpAQCAtOTYsNyAr
OTUsNyBAQCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBOb2Rl
KiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2ZmcwogICAgIHJhbmdlQ291bnRlci5pbmNyZW1l
bnQoKTsKICNlbmRpZgogCi0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsK
KyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIAogICAgIC8vIFNpbXBs
eSBzZXR0aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBk
byBhbnkgb2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRv
LCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KQEAgLTEyNSw3ICsxMjQsNyBAQCBSZWY8UmFu
Z2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZQogCiBSYW5nZTo6flJhbmdlKCkKIHsKLSAgICBtX293bmVyRG9jdW1l
bnQtPmRldGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2Uo
KnRoaXMpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHJhbmdlQ291bnRlci5kZWNyZW1lbnQoKTsK
QEAgLTEzNSwxMSArMTM0LDExIEBAIFJhbmdlOjp+UmFuZ2UoKQogdm9pZCBSYW5nZTo6c2V0RG9j
dW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChtX293bmVyRG9jdW1lbnQu
cHRyKCkgIT0gJmRvY3VtZW50KTsKLSAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKHRo
aXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UoKnRoaXMpOwogICAgIG1fb3du
ZXJEb2N1bWVudCA9IGRvY3VtZW50OwogICAgIG1fc3RhcnQuc2V0VG9TdGFydE9mTm9kZShkb2N1
bWVudCk7CiAgICAgbV9lbmQuc2V0VG9TdGFydE9mTm9kZShkb2N1bWVudCk7Ci0gICAgbV9vd25l
ckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFj
aFJhbmdlKCp0aGlzKTsKIH0KIAogTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KE5vZGUqIGNvbnRhaW5lckEsIE5vZGUqIGNvbnRhaW5lckIpCkBAIC05NzcsNyArOTc2LDcgQEAg
RXhjZXB0aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGNvbnN0IFN0cmluZyYKICAgICAgICAgZWxlbWVudCA9ICZkb3duY2FzdDxFbGVt
ZW50Pihub2RlKTsKICAgICBlbHNlCiAgICAgICAgIGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1l
bnQoKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgKGlzPEhUTUxEb2N1bWVudD4oZWxlbWVudC0+ZG9j
dW1lbnQoKSkgJiYgaXM8SFRNTEh0bWxFbGVtZW50PigqZWxlbWVudCkpKQorICAgIGlmICghZWxl
bWVudCB8fCAoZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGlzPEhUTUxI
dG1sRWxlbWVudD4oKmVsZW1lbnQpKSkKICAgICAgICAgZWxlbWVudCA9IEhUTUxCb2R5RWxlbWVu
dDo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSk7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudCgqZWxlbWVudCwgbWFya3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnRB
bmREb05vdE1hcmtBbHJlYWR5U3RhcnRlZCk7CiB9CkBAIC0xNjY5LDkgKzE2NjgsOSBAQCB2b2lk
IFJhbmdlOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogICAgIGJvdW5kYXJ5Tm9kZVdp
bGxCZVJlbW92ZWQobV9lbmQsIG5vZGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRh
cnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91
bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5
LmNvbnRhaW5lcigpICE9IHRleHQpCisgICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0
ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlPZmZzZXQgPSBib3Vu
ZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zmc2V0KQpAQCAtMTY3
OSwxNyArMTY3OCwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQo
UmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dAogICAgIGJvdW5kYXJ5LnNl
dE9mZnNldChib3VuZGFyeU9mZnNldCArIGxlbmd0aCk7CiB9CiAKLXZvaWQgUmFuZ2U6OnRleHRJ
bnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3Zv
aWQgUmFuZ2U6OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKLSAgICBBU1NFUlQodGV4dCk7Ci0gICAgQVNTRVJUKCZ0ZXh0LT5kb2N1
bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgp
ID09ICZvd25lckRvY3VtZW50KCkpOwogICAgIGJvdW5kYXJ5VGV4dEluc2VydGVkKG1fc3RhcnQs
IHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX2VuZCwg
dGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0UmVtb3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFy
eVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5jb250
YWluZXIoKSAhPSB0ZXh0KQorICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkK
ICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnku
b2Zmc2V0KCk7CiAgICAgaWYgKG9mZnNldCA+PSBib3VuZGFyeU9mZnNldCkKQEAgLTE3MDAsMTAg
KzE2OTgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVtb3ZlZChSYW5nZUJv
dW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LAogICAgICAgICBib3VuZGFyeS5zZXRP
ZmZzZXQoYm91bmRhcnlPZmZzZXQgLSBsZW5ndGgpOwogfQogCi12b2lkIFJhbmdlOjp0ZXh0UmVt
b3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQg
UmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQogewotICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBBU1NFUlQoJnRleHQtPmRvY3VtZW50
KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0g
Jm93bmVyRG9jdW1lbnQoKSk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0
LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwg
b2Zmc2V0LCBsZW5ndGgpOwogfQpAQCAtMTcyOCwxNSArMTcyNSwxNSBAQCB2b2lkIFJhbmdlOjp0
ZXh0Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQog
ICAgIGJvdW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKG1fZW5kLCBvbGROb2RlLCBvZmZzZXQpOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXJ5LCBUZXh0KiBvbGROb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5k
YXJ5VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCYgb2xk
Tm9kZSkKIHsKLSAgICBhdXRvKiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAg
aWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUpIHsKLSAgICAgICAgdW5zaWduZWQg
c3BsaXRPZmZzZXQgPSBvbGROb2RlLT5sZW5ndGgoKTsKKyAgICBhdXRvKiBwYXJlbnQgPSBvbGRO
b2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJm9sZE5v
ZGUpIHsKKyAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLmxlbmd0aCgpOwog
ICAgICAgICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAg
ICAgICBpZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewogICAgICAgICAgICAgaWYg
KHBhcmVudCkKLSAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUtPm5leHRTaWJs
aW5nKCksIGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOworICAgICAgICAgICAgICAg
IGJvdW5kYXJ5LnNldCgqb2xkTm9kZS5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNw
bGl0T2Zmc2V0LCAwKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBib3VuZGFy
eS5zZXRPZmZzZXQoc3BsaXRPZmZzZXQpOwogICAgICAgICB9CkBAIC0xNzQ0LDIwICsxNzQxLDE4
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRh
cnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sCiAgICAgfQogICAgIGlmICghcGFyZW50KQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBi
b3VuZGFyeS5jaGlsZEJlZm9yZSgpID09IG9sZE5vZGUpIHsKLSAgICAgICAgYXV0byogbmV3Q2hp
bGQgPSBvbGROb2RlLT5uZXh0U2libGluZygpOworICAgIGlmIChib3VuZGFyeS5jb250YWluZXIo
KSA9PSBwYXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmb2xkTm9kZSkgeworICAg
ICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4dFNpYmxpbmcoKTsKICAgICAgICAgQVNT
RVJUKG5ld0NoaWxkKTsKICAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlckNoaWxkKCpuZXdDaGls
ZCk7CiAgICAgfQogfQogCi12b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUp
Cit2b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNTRVJU
KG9sZE5vZGUpOwotICAgIEFTU0VSVCgmb2xkTm9kZS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1
bWVudCgpKTsKLSAgICBBU1NFUlQob2xkTm9kZS0+aXNUZXh0Tm9kZSgpKTsKLSAgICBBU1NFUlQo
IW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLT5uZXh0U2libGluZygpKTsKLSAgICBB
U1NFUlQoIW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLT5uZXh0U2libGluZygpLT5p
c1RleHROb2RlKCkpOworICAgIEFTU0VSVCgmb2xkTm9kZS5kb2N1bWVudCgpID09ICZvd25lckRv
Y3VtZW50KCkpOworICAgIEFTU0VSVCghb2xkTm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5u
ZXh0U2libGluZygpKTsKKyAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5v
ZGUubmV4dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KG1fc3RhcnQsIG9sZE5vZGUpOwogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQs
IG9sZE5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCAzZjFjNTBjYjQ0YWFiYTE4NjU0MmU3NzY5
YjQzZDRmN2JkM2ZkOWM1Li5mMmZjNTQyOGRmYzJiOTNjY2UyNTdiNDBhNzg2OGViYTk5NTkyZWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuaApAQCAtMTMzLDEwICsxMzMsMTAgQEAgcHVibGljOgogICAgIHZvaWQg
bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJik7CiAgICAgdm9pZCBub2Rl
V2lsbEJlUmVtb3ZlZChOb2RlJik7CiAKLSAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlKiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9k
ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRJbnNl
cnRlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQg
dGV4dFJlbW92ZWQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKICAg
ICB2b2lkIHRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBv
ZmZzZXQpOwotICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKTsKKyAgICB2b2lk
IHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICAvLyBFeHBhbmQgcmFuZ2UgdG8g
YSB1bml0ICh3b3JkIG9yIHNlbnRlbmNlIG9yIGJsb2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4K
ICAgICAvLyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3NjMyIGNvbW1lbnQgIzUgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAK
aW5kZXggYTgzM2UyODIyNmRkZDFkY2QxNDJkNWNhMjJiMzU0NjJlMmI5YzBlZi4uNDNlYWYxNGQ0
Y2RjZjk0ZDAwY2JhNzkxMmZmMDRhOWY1OGIzMTY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmNwcApAQCAtMjU2LDExICsyNTYsMTEgQEAgYm9vbCBTY3JpcHRFbGVtZW50OjpwcmVw
YXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVnYWMK
ICAgICB9IGVsc2UgaWYgKChpc0NsYXNzaWNFeHRlcm5hbFNjcmlwdCB8fCBzY3JpcHRUeXBlID09
IFNjcmlwdFR5cGU6Ok1vZHVsZSkgJiYgIWhhc0FzeW5jQXR0cmlidXRlKCkgJiYgIW1fZm9yY2VB
c3luYykgewogICAgICAgICBtX3dpbGxFeGVjdXRlSW5PcmRlciA9IHRydWU7CiAgICAgICAgIEFT
U0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCkt
PnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0
UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOworICAgICAgICBkb2N1bWVudC5zY3JpcHRSdW5u
ZXIoKS5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNj
cmlwdFJ1bm5lcjo6SU5fT1JERVJfRVhFQ1VUSU9OKTsKICAgICB9IGVsc2UgaWYgKGhhc1NvdXJj
ZUF0dHJpYnV0ZSgpIHx8IHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6TW9kdWxlKSB7CiAgICAg
ICAgIEFTU0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKICAgICAgICAgQVNTRVJUKGhhc0FzeW5jQXR0
cmlidXRlKCkgfHwgbV9mb3JjZUFzeW5jKTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVy
KCktPnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2Ny
aXB0UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOworICAgICAgICBkb2N1bWVudC5zY3JpcHRSdW5u
ZXIoKS5xdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNj
cmlwdFJ1bm5lcjo6QVNZTkNfRVhFQ1VUSU9OKTsKICAgICB9IGVsc2UgaWYgKCFoYXNTb3VyY2VB
dHRyaWJ1dGUoKSAmJiBtX3BhcnNlckluc2VydGVkICYmICFkb2N1bWVudC5oYXZlU3R5bGVzaGVl
dHNMb2FkZWQoKSkgewogICAgICAgICBBU1NFUlQoc2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBlOjpD
bGFzc2ljKTsKICAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4
dC5jcHAKaW5kZXggZmU4YzlkNDYwYjBmYzMxOTZjMjZhYjQyNDZlNmY4NWM3NTgyNDAwYi4uZjYz
ZjQ1ZWU4MThiMzFiZTg2ODA2NjI4NmVjZWU0ZDk4MDkzN2UyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcApA
QCAtNzIsNyArNzIsNyBAQCBFeGNlcHRpb25PcjxSZWY8VGV4dD4+IFRleHQ6OnNwbGl0VGV4dCh1
bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0UmVzdWx0LnJlbGVhc2VF
eGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLnRleHROb2RlU3BsaXQodGhpcyk7
CisgICAgZG9jdW1lbnQoKS50ZXh0Tm9kZVNwbGl0KCp0aGlzKTsKIAogICAgIGlmIChyZW5kZXJl
cigpKQogICAgICAgICByZW5kZXJlcigpLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhKCksIDAsIG9s
ZERhdGEubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rp
b25FbGVtZW50U2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNl
dC5jcHAKaW5kZXggYTdkYmU1MTQ2YTNjODhjNGVmZmNhN2ZiYjJmN2QyMTkzNzc0MjlkNy4uNzNl
M2E2MjFkNmY4ZjgxNmI1YmQ4ZWQxNjA3NWYyZGZlZmI3OWNhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwCkBAIC0zMiw5ICszMiw5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZGlkRGV0YWNoKEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpkaWREZXRhY2goRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVu
dCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwogICAgIGNs
ZWFyRmxhZ3MoZWxlbWVudCwgSXNBY3RpdmVGbGFnIHwgSW5BY3RpdmVDaGFpbkZsYWcgfCBJc0hv
dmVyZWRGbGFnKTsKIH0KIApAQCAtNDMsMzEgKzQzLDI4IEBAIHZvaWQgVXNlckFjdGlvbkVsZW1l
bnRTZXQ6OmRvY3VtZW50RGlkUmVtb3ZlTGFzdFJlZigpCiAgICAgbV9lbGVtZW50cy5jbGVhcigp
OwogfQogCi1ib29sIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpoYXNGbGFncyhjb25zdCBFbGVtZW50
KiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykgY29uc3QKK2Jvb2wgVXNlckFjdGlvbkVsZW1lbnRT
ZXQ6Omhhc0ZsYWdzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKSBjb25z
dAogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIEVs
ZW1lbnRGbGFnTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1fZWxlbWVudHMuZmluZChjb25z
dF9jYXN0PEVsZW1lbnQqPihlbGVtZW50KSk7Ci0gICAgaWYgKGZvdW5kID09IG1fZWxlbWVudHMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZm91bmQtPnZhbHVlICYg
ZmxhZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKKyAgICBy
ZXR1cm4gbV9lbGVtZW50cy5nZXQoY29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQpKSAmIGZs
YWdzOwogfQogCi12b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQq
IGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQordm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6Y2xl
YXJGbGFncyhFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBmbGFncykKIHsKLSAgICBpZiAoIWVs
ZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSkgewotICAgICAgICBBU1NFUlQobV9lbGVtZW50
cy5lbmQoKSA9PSBtX2VsZW1lbnRzLmZpbmQoZWxlbWVudCkpOworICAgIGlmICghZWxlbWVudC5p
c1VzZXJBY3Rpb25FbGVtZW50KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2VsZW1lbnRzLmNvbnRh
aW5zKCZlbGVtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFbGVtZW50Rmxh
Z01hcDo6aXRlcmF0b3IgZm91bmQgPSBtX2VsZW1lbnRzLmZpbmQoZWxlbWVudCk7CisgICAgYXV0
byBmb3VuZCA9IG1fZWxlbWVudHMuZmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGZvdW5kID09IG1f
ZWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQo
ZmFsc2UpOworICAgICAgICBlbGVtZW50LnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHVwZGF0ZWQgPSBmb3VuZC0+dmFs
dWUgJiB+ZmxhZ3M7CiAgICAgaWYgKCF1cGRhdGVkKSB7Ci0gICAgICAgIGVsZW1lbnQtPnNldFVz
ZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5zZXRVc2VyQWN0aW9uRWxl
bWVudChmYWxzZSk7CiAgICAgICAgIG1fZWxlbWVudHMucmVtb3ZlKGZvdW5kKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTc1LDE3ICs3MiwxNiBAQCB2b2lkIFVzZXJBY3Rpb25FbGVtZW50
U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQogICAgIGZv
dW5kLT52YWx1ZSA9IHVwZGF0ZWQ7CiB9CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OnNl
dEZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKQordm9pZCBVc2VyQWN0aW9u
RWxlbWVudFNldDo6c2V0RmxhZ3MoRWxlbWVudCYgZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCiB7
Ci0gICAgRWxlbWVudEZsYWdNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fZWxlbWVudHMuZmluZChl
bGVtZW50KTsKLSAgICBpZiAocmVzdWx0ICE9IG1fZWxlbWVudHMuZW5kKCkpIHsKLSAgICAgICAg
QVNTRVJUKGVsZW1lbnQtPmlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgICAgIHJlc3VsdC0+
dmFsdWUgfD0gZmxhZ3M7CisgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnRzLmFkZCgmZWxlbWVu
dCwgZmxhZ3MpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgQVNTRVJU
KGVsZW1lbnQuaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSB8PSBmbGFnczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVsZW1lbnQt
PnNldFVzZXJBY3Rpb25FbGVtZW50KHRydWUpOwotICAgIG1fZWxlbWVudHMuYWRkKGVsZW1lbnQs
IGZsYWdzKTsKKyAgICBlbGVtZW50LnNldFVzZXJBY3Rpb25FbGVtZW50KHRydWUpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5oCmluZGV4IGNlNzY0YzNl
YjgzNzE4NzdiZmU4YTFiODkxNThhNjhiNzI1ZjgzZWYuLmE0YzU5YjkyMGZkOWQxZmRhNDUxMGYy
MThkYzkzODM4ZDIxYmVlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0
aW9uRWxlbWVudFNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVu
dFNldC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTI3LDggKzI3LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDE2ICszNiwxNyBAQCBjbGFzcyBF
bGVtZW50OwogCiBjbGFzcyBVc2VyQWN0aW9uRWxlbWVudFNldCB7CiBwdWJsaWM6Ci0gICAgYm9v
bCBpc0ZvY3VzZWQoY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxl
bWVudCwgSXNGb2N1c2VkRmxhZyk7IH0KLSAgICBib29sIGlzQWN0aXZlKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzQWN0aXZlRmxhZyk7IH0KLSAg
ICBib29sIGlzSW5BY3RpdmVDaGFpbihjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBo
YXNGbGFncyhlbGVtZW50LCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0KLSAgICBib29sIGlzSG92ZXJl
ZChjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0hv
dmVyZWRGbGFnKTsgfQotICAgIHZvaWQgc2V0Rm9jdXNlZChFbGVtZW50KiBlbGVtZW50LCBib29s
IGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzRm9jdXNlZEZsYWcpOyB9Ci0g
ICAgdm9pZCBzZXRBY3RpdmUoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0Rmxh
Z3MoZWxlbWVudCwgZW5hYmxlLCBJc0FjdGl2ZUZsYWcpOyB9Ci0gICAgdm9pZCBzZXRJbkFjdGl2
ZUNoYWluKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQs
IGVuYWJsZSwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9Ci0gICAgdm9pZCBzZXRIb3ZlcmVkKEVsZW1l
bnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJsZSwgSXNI
b3ZlcmVkRmxhZyk7IH0KKyAgICBib29sIGlzRm9jdXNlZChjb25zdCBFbGVtZW50JiBlbGVtZW50
KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0ZvY3VzZWRGbGFnKTsgfQorICAg
IGJvb2wgaXNBY3RpdmUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4gaGFz
RmxhZ3MoZWxlbWVudCwgSXNBY3RpdmVGbGFnKTsgfQorICAgIGJvb2wgaXNJbkFjdGl2ZUNoYWlu
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQs
IEluQWN0aXZlQ2hhaW5GbGFnKTsgfQorICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzSG92ZXJlZEZsYWcp
OyB9CiAKLSAgICB2b2lkIGRpZERldGFjaChFbGVtZW50Kik7CisgICAgdm9pZCBzZXRGb2N1c2Vk
KEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJs
ZSwgSXNGb2N1c2VkRmxhZyk7IH0KKyAgICB2b2lkIHNldEFjdGl2ZShFbGVtZW50JiBlbGVtZW50
LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzQWN0aXZlRmxhZyk7
IH0KKyAgICB2b2lkIHNldEluQWN0aXZlQ2hhaW4oRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFi
bGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0KKyAg
ICB2b2lkIHNldEhvdmVyZWQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0Rmxh
Z3MoZWxlbWVudCwgZW5hYmxlLCBJc0hvdmVyZWRGbGFnKTsgfQorCisgICAgdm9pZCBkaWREZXRh
Y2goRWxlbWVudCYpOwogICAgIHZvaWQgZG9jdW1lbnREaWRSZW1vdmVMYXN0UmVmKCk7CiAKIHBy
aXZhdGU6CkBAIC01NiwxMyArNTcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgSXNGb2N1c2VkRmxh
ZyAgICAgPSAxIDw8IDMKICAgICB9OwogCi0gICAgdm9pZCBzZXRGbGFncyhFbGVtZW50KiBlbGVt
ZW50LCBib29sIGVuYWJsZSwgdW5zaWduZWQgZmxhZ3MpIHsgZW5hYmxlID8gc2V0RmxhZ3MoZWxl
bWVudCwgZmxhZ3MpIDogY2xlYXJGbGFncyhlbGVtZW50LCBmbGFncyk7IH0KLSAgICB2b2lkIHNl
dEZsYWdzKEVsZW1lbnQqLCB1bnNpZ25lZCk7Ci0gICAgdm9pZCBjbGVhckZsYWdzKEVsZW1lbnQq
LCB1bnNpZ25lZCk7Ci0gICAgYm9vbCBoYXNGbGFncyhjb25zdCBFbGVtZW50KiwgdW5zaWduZWQg
ZmxhZ3MpIGNvbnN0OworICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBl
bmFibGUsIHVuc2lnbmVkIGZsYWdzKSB7IGVuYWJsZSA/IHNldEZsYWdzKGVsZW1lbnQsIGZsYWdz
KSA6IGNsZWFyRmxhZ3MoZWxlbWVudCwgZmxhZ3MpOyB9CisgICAgdm9pZCBzZXRGbGFncyhFbGVt
ZW50JiwgdW5zaWduZWQpOworICAgIHZvaWQgY2xlYXJGbGFncyhFbGVtZW50JiwgdW5zaWduZWQp
OworICAgIGJvb2wgaGFzRmxhZ3MoY29uc3QgRWxlbWVudCYsIHVuc2lnbmVkIGZsYWdzKSBjb25z
dDsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIHVuc2lnbmVkPiBFbGVt
ZW50RmxhZ01hcDsKLSAgICBFbGVtZW50RmxhZ01hcCBtX2VsZW1lbnRzOworICAgIC8vIEZJWE1F
OiBVbmNsZWFyIHdoeSB0aGlzIG5lZWRzIHRvIGJlIGEgUmVmUHRyLiBTaG91bGQgY2hhbmdlIHRv
IGEgY29uc3QgRWxlbWVudCouCisgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIHVuc2lnbmVk
PiBtX2VsZW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXgg
ZDE0NzI0Mjc3MjM3NDY4ZDRmNjFmZmUzM2M3NWZlNDZhODE5MjNkYy4uM2I4ZjlkNzQzNjU4ZGNh
NWI5YTRmNjVlOGY5ZGNkNDgxOTQyZGUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFu
Z2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3Np
dGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaAogICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVyIHRv
IG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQogICAg
IC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCi0gICAgUmVmUHRyPFJhbmdlPiBjb3Jy
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOworICAg
IGF1dG8gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9z
aXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlv
bigpKTsKIAogICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZl
ID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwogICAgIGlmICghc3RhcnRQb3NpdGlvbk9mUmFuZ2VX
aXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNv
bnN0IFJhbmdlJiByYW5nZSwKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGFrZSBub3RlIG9m
IHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2Vy
IGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3Rh
cnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlv
blN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLmdldCgpKTsKKyAgICBpbnQgY29ycmVjdGlv
blN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5wdHIoKSk7CiAKICAgICAvLyBDbG9u
ZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8g
a2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgogICAgIGF1dG8gcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgPSByYW5nZS5jbG9uZVJhbmdlKCk7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3Qg
UmFuZ2UmIHJhbmdlLAogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IHJl
cGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAK
ICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6IG1hcmtlclR5cGVzVG9BZGQpCi0gICAgICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIG1hcmtlclR5cGUsIG1hcmtl
ckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1h
cmtlclR5cGUpKTsKKyAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJlcGxhY2VtZW50UmFuZ2Us
IG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChh
bHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZBcHByb3ByaWF0ZSgp
CkBAIC0yNjYsMTIgKzI2NiwxMiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlUwogICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwogICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0KCk7CiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9u
T2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
IHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmVuZCgpKTsKKyAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFt
ZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogCi0gICAgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0g
ICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLmdldCgpLCBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1h
cmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLmFkZE1hcmtl
cihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwor
ICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBt
YXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRv
Y29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25z
dCBTdHJpbmcmIHJlc3UKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKICAgICAgICAgICAg
IGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3Vs
dCwgbV90eXBlLCBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOwogICAgICAgICBlbHNl
IGlmICghbV9pc0Rpc21pc3NlZEJ5RWRpdGluZykKLSAgICAgICAgICAgIHJhbmdlV2l0aEFsdGVy
bmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihy
YW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwg
bV9vcmlnaW5hbFRleHQpOworICAgICAgICAgICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCpyYW5nZVdpdGhBbHRl
cm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbiwgbV9vcmlnaW5hbFRl
eHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNp
b246CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKQEAg
LTQxOSw3ICs0MTksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbgogICAgICAgICByZXR1cm47
CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGZvciAo
YXV0byogbWFya2VyIDogbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2Rl
KSkgeworICAgIGZvciAoYXV0byogbWFya2VyIDogbm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0Zvcigqbm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG1hcmtlcik7CiAgICAgICAgIGlm
IChyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCgqbWFya2VyLCBwb3NpdGlvbikpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTQ0MSwxMiArNDQxLDEwIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9u
CiB7CiAgICAgaWYgKCFjb21tYW5kLT53YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUu
ZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBjb21tYW5k
LT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gbV9mcmFtZS5k
b2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5z
dGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCku
ZW5kKCkpOworICAgIGF1dG8mIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMo
KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2Vt
ZW50KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiBBbHRlcm5hdGl2ZVRleHRDbGllbnQqIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmFsdGVybmF0aXZlVGV4dENsaWVudCgpCkBAIC00NzQsOCArNDcy
LDggQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG8KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjptYXJrUmV2ZXJzZWQoUmFuZ2UmIGNoYW5nZWRSYW5nZSkKIHsKLSAgICBjaGFuZ2Vk
UmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCZjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBj
aGFuZ2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OworICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LnJlbW92ZU1hcmtlcnMoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tp
bmdFeGVtcHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtD
b3JyZWN0aW9uKFJhbmdlJiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nKQpAQCAtNDgzLDkgKzQ4MSw5IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
bWFya0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluCiAgICAgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDog
bWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJUeXBl
ID09IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50
TWFya2VyOjpBdXRvY29ycmVjdGVkKQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoJnJl
cGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKKyAgICAgICAgICAgIG1h
cmtlcnMuYWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5n
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoJnJlcGxhY2Vk
UmFuZ2UsIG1hcmtlclR5cGUpOworICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFj
ZWRSYW5nZSwgbWFya2VyVHlwZSk7CiAgICAgfQogfQogCkBAIC01MDUsNyArNTAzLDcgQEAgdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZv
ck1vZGlmaWVkQ29ycmVjdGlvbigKICAgICAgICAgICAgIGNsaWVudC0+cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpFZGl0ZWQsIGNvcnJlY3RlZCwg
Y29ycmVjdGlvbik7CiAgICAgfQogCi0gICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKCZyYW5nZU9m
Q29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtl
cnMucmVtb3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9j
b3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRlbGV0
ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBTdHJpbmcmIG9yaWdpbmFsU3RyaW5nKQpAQCAtNTI0LDE1ICs1MjIsMTUgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRB
dXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFj
dGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHBy
ZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5nIHN0
cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisgICAgYXV0
byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1l
bnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBT
dHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLnB0cigpKTsK
ICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3Bh
Y2Uoc3RyaW5nW3N0cmluZy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gTWFyayB0aGlzIHdoaXRlc3BhY2UgdG8gaW5kaWNhdGUgd2UgaGF2ZSBkZWxldGVkIGFuIGF1
dG9jb3JyZWN0aW9uIGZvbGxvd2luZyB0aGlzCiAgICAgLy8gd2hpdGVzcGFjZS4gU28gaWYgdGhl
IHVzZXIgdHlwZXMgdGhlIHNhbWUgb3JpZ2luYWwgd29yZCBhZ2FpbiBhdCB0aGlzIHBvc2l0aW9u
LCB3ZQogICAgIC8vIHdvbid0IGF1dG9jb3JyZWN0IGl0IGFnYWluLgotICAgIG1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmlu
Z0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOworICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
bWFya2VycygpLmFkZE1hcmtlcihwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVk
QXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnBy
b2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5n
UmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5n
JiBzdHJpbmdUb0JlUmVwbGFjZWQpCkBAIC01NzMsMjEgKzU3MSwxOSBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3Vt
ZW50TWFya2VyJgogICAgIGlmICghc2hvdWxkU3RhcnRUaW1lckZvcihtYXJrZXIsIGVuZE9mV29y
ZFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIE5vZGUqIG5vZGUgPSBlbmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3Vt
ZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0
KCkpOwotICAgIGlmICghd29yZFJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3Ry
aW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CisgICAgYXV0byB3
b3JkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtl
ci5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOworICAgIFN0cmluZyBj
dXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UucHRyKCkpOwogICAgIGlmICghY3VycmVu
dFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX29yaWdpbmFsVGV4
dCA9IGN1cnJlbnRXb3JkOwogICAgIHN3aXRjaCAobWFya2VyLnR5cGUoKSkgewogICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgotICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZl
ID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGTW92ZSh3
b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBlbXB0eVN0cmluZygpOwogICAgICAgICBz
dGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3Vn
Z2VzdGlvbnMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudDoKLSAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsKKyAg
ICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IFdURk1vdmUod29yZFJhbmdlKTsKICAgICAg
ICAgbV9kZXRhaWxzID0gbWFya2VyLmRlc2NyaXB0aW9uKCk7CiAgICAgICAgIHN0YXJ0QWx0ZXJu
YXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uKTsKICAgICAgICAg
YnJlYWs7CkBAIC01OTcsNyArNTkzLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICAg
ICAgYXV0byYgbWFya2VyRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25E
YXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1hcmtlckRh
dGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3Jh
bmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVy
bmF0aXZlID0gV1RGTW92ZSh3b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBtYXJrZXJE
YXRhLmNvbnRleHQ7CiAgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5h
dGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGQ2ZmQ3M2MyM2Fj
YjMxNzM1ZDhjNmQzYWY1NmEzYWI3ZmI4MTkyNjguLjFlMjM1ZjZiNGRjNjNmZmZkMjVjYjM3ZTZk
YWNhNDY4M2Y1YWEzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCkBAIC03NjgsMTMgKzc2OCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQmIG5vZGUsIHVu
c2lnbgogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IGRv
Y3VtZW50KCkubWFya2VycygpOwogICAgIGF1dG8gbWFya2VycyA9IGNvcHlNYXJrZXJzKG1hcmtl
ckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9k
ZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBEb2N1bWVudE1hcmtlcjo6YWxsTWFy
a2VycygpKSk7CiAgICAgcmVwbGFjZVRleHRJbk5vZGUobm9kZSwgb2Zmc2V0LCBjb3VudCwgcmVw
bGFjZW1lbnRUZXh0KTsKLSAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRU
ZXh0Lmxlbmd0aCgpKTsKKyAgICBhdXRvIG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVu
dCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0
aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCiAjaWYgUExBVEZP
Uk0oSU9TKQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZS5nZXQo
KSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtlci5hbHRlcm5hdGl2
ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOworICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1h
cmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtl
ci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOwogI2Vsc2UKLSAgICAgICAgbWFy
a2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBlKCksIG1h
cmtlci5kZXNjcmlwdGlvbigpKTsKLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCisgICAgICAgIG1h
cmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIu
ZGVzY3JpcHRpb24oKSk7CisjZW5kaWYKIH0KIAogUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKaW5kZXggMjgyYmRjOWUz
MTViNzJjMjVhZDViZTgyYzZiZjA3MTRkNWMxN2FiOS4uNzkwNjY1ZmQ2NzJkZmI0ZDZlMjE2ODEx
MmM1NzRlMWU0YTE3YzNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0
YXRpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNv
bW1hbmQuY3BwCkBAIC02MSw5ICs2MSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRGljdGF0aW9uTWFya2VyU3VwcGxpZXIoYWx0ZXJuYXRpdmVzKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiB0ZXh0Tm9kZSwgdW5zaWduZWQg
b2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNlcnRlZCkgb3ZlcnJp
ZGUKKyAgICB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRleHQmIHRleHROb2RlLCB1bnNpZ25l
ZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0VG9CZUluc2VydGVkKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgYXV0byYgbWFya2VyQ29udHJvbGxlciA9IHRleHROb2RlLT5k
b2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICAgICAgYXV0byYgbWFya2VyQ29udHJvbGxlciA9IHRl
eHROb2RlLmRvY3VtZW50KCkubWFya2VycygpOwogICAgICAgICBmb3IgKGF1dG8mIGFsdGVybmF0
aXZlIDogbV9hbHRlcm5hdGl2ZXMpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25EYXRhIGRhdGEgeyBhbHRlcm5hdGl2ZS5kaWN0YXRpb25Db250ZXh0LCB0ZXh0VG9CZUlu
c2VydGVkLnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5n
ZUxlbmd0aCkgfTsKICAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyVG9Ob2Rl
KHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0ICsgb2Zmc2V0T2ZJbnNlcnRpb24sIGFs
dGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVzLCBXVEZNb3ZlKGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGU3
OWI2NDZlMjI4OTcyMDA1ZTU4ZmU1MGZiYzI5NTMyMDNjYjdhZTMuLmEyZDg1MzgyZWE4OGYzNTAx
M2MxYzk2MzI0YjVkM2VlNjlhODdjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApA
QCAtMTE2NSw3ICsxMTY1LDcgQEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2Rl
JiBmaXJzdCwgY29uc3QgTm9kZSYgc2Vjb25kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
YXV0byYgZmlyc3RFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oZmlyc3QpOwogICAgIGF1dG8m
IHNlY29uZEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzZWNvbmQpOwotICAgIHJldHVybiBm
aXJzdEVsZW1lbnQuaGFzVGFnTmFtZShzZWNvbmRFbGVtZW50LnRhZ1FOYW1lKCkpICYmIGZpcnN0
RWxlbWVudC5oYXNFcXVpdmFsZW50QXR0cmlidXRlcygmc2Vjb25kRWxlbWVudCk7CisgICAgcmV0
dXJuIGZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNlY29uZEVsZW1lbnQudGFnUU5hbWUoKSkgJiYg
Zmlyc3RFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKHNlY29uZEVsZW1lbnQpOwogfQog
CiBib29sIGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDY0MjUxY2YxZGM3ZjY5ZjVjYWJhY2E3MDlk
ZWM1YzdlODc2NTk1ZTAuLjhhYjBhMWUwY2VmZWJmNTNiMWQwMTU2YjRiMDY5YTliZTI1NWYxNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE5MTgsNyArMTkxOCw3IEBAIHZvaWQg
RWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3Zl
TWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwor
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3Rl
ZFRleHQoKTsKICAgICBBU1NFUlQodGV4dC5sZW5ndGgoKSk7CkBAIC0xOTM0LDcgKzE5MzQsNyBA
QCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVj
dGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1h
cmtlcnMoc2VsZWN0ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRU
ZXh0KCk7CiAgICAgQVNTRVJUKHRleHQubGVuZ3RoKCkpOwpAQCAtMjEwMCwxMiArMjEwMCwxMiBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAgICAgICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uICE9IC0xICYm
IGdyYW1tYXJEZXRhaWwubGVuZ3RoID4gMCk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRSA0
ODU5MTkwOiBUaGlzIGdldHMgY29uZnVzZWQgd2l0aCBkb3VibGVkIHB1bmN0dWF0aW9uIGF0IHRo
ZSBlbmQgb2YgYSBwYXJhZ3JhcGgKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpncmFtbWFyU2VhcmNoUmFuZ2UsIGdyYW1tYXJQ
aHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9uLCBncmFtbWFyRGV0YWlsLmxlbmd0
aCk7Ci0gICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oKmJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAg
YXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpncmFtbWFyU2Vh
cmNoUmFuZ2UsIGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxvY2F0aW9uLCBn
cmFtbWFyRGV0YWlsLmxlbmd0aCk7CisgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJ
TklUWSkpOwogICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwog
ICAgICAgICAKICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKLSAgICAgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsIGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKICAgICB9IGVsc2UK
ICNlbmRpZgogICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7CkBAIC0yMTE3LDcg
KzIxMTcsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2ZWFsU2Vs
ZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3Bl
bGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICB9CiB9CiAKQEAgLTIy
NTAsMTMgKzIyNTAsMTAgQEAgYm9vbCBFZGl0b3I6OnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKQog
ICAgIHJldHVybiBjbGllbnQoKS0+c3BlbGxpbmdVSUlzU2hvd2luZygpOwogfQogCi12b2lkIEVk
aXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24gJm1vdmluZ1NlbGVjdGlvbikKK3ZvaWQgRWRpdG9yOjpjbGVhck1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbW92aW5nU2VsZWN0aW9uKQogewotICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1vdmluZ1NlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7Ci0gICAgfQor
ICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtb3ZpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2Vs
ZWN0ZWRSYW5nZSwgeyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpH
cmFtbWFyIH0pOwogfQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aW9uKQpAQCAtMjU3OCwxNCAr
MjU3NSwxNCBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoY29uc3QgU3BlbGxDaGVj
a1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAgICAgICAgICAgYXV0byBtaXNz
cGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRM
ZW5ndGgpOwogICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmlz
U3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFuZ2UpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5wdHIoKSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CisgICAgICAgICAgICBtaXNz
cGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2Vt
ZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3JhbW1hciAmJiByZXN1bHRUeXBl
ID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292
ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgZGV0YWlsIDogcmVzdWx0c1tpXS5kZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGRldGFpbC5sZW5ndGggPiAwICYmIGRldGFpbC5sb2NhdGlvbiA+PSAwKTsKICAgICAg
ICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRp
b24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0
aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFy
LCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1h
clJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihi
YWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwudXNlckRlc2Ny
aXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0RW5kTG9jYXRpb24gPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiByZXN1
bHRFbmRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpCkBAIC0yNjk5LDcgKzI2
OTYsNyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZykKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBo
KCpzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmlu
ZywgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uSW5zZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRSYW5n
ZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNl
ZFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UucHRyKCksIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOworICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKICAgICBtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2UpOwogI2Vsc2UKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI4MTQsNyArMjgxMSw3IEBAIHZvaWQgRWRpdG9yOjp1
cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZT
ZWxlY3Rpb25BCiAgICAgICAgIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLAogI2VuZGlmCiAgICAg
fTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5wdHIo
KSwgbWFya2VyVHlwZXNUb1JlbW92ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycyh3b3JkUmFuZ2UsIG1hcmtlclR5cGVzVG9SZW1vdmUsIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5n
ZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CiB9CiAKQEAgLTMyOTks
NyArMzI5Niw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBT
dHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAKICAgICB1bnNpZ25lZCBtYXRj
aENvdW50ID0gMDsKICAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2Uo
ZmluZFBsYWluVGV4dCgqc2VhcmNoUmFuZ2UsIHRhcmdldCwgb3B0aW9ucyAmIH5CYWNrd2FyZHMp
KTsKKyAgICAgICAgYXV0byByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwg
dGFyZ2V0LCBvcHRpb25zICYgfkJhY2t3YXJkcykpOwogICAgICAgICBpZiAocmVzdWx0UmFuZ2Ut
PmNvbGxhcHNlZCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzEx
LDEwICszMzA4LDEwIEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAKICAgICAgICAgKyttYXRj
aENvdW50OwogICAgICAgICBpZiAobWF0Y2hlcykKLSAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVu
ZChyZXN1bHRSYW5nZSk7CisgICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQocmVzdWx0UmFuZ2Uu
cHRyKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKG1hcmtNYXRjaGVzKQotICAgICAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAKICAgICAg
ICAgLy8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0
IG9mIDAgbWVhbnMgbm8gbGltaXQuCiAgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3Vu
dCA+PSBsaW1pdCkKQEAgLTM0NjEsMTAgKzM0NTgsMTAgQEAgdm9pZCBFZGl0b3I6OnNjYW5SYW5n
ZUZvclRlbGVwaG9uZU51bWJlcnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmdWaWV3JiBzdHJp
bmcKICAgICAgICAgdW5zaWduZWQgc3VicmFuZ2VPZmZzZXQgPSBzY2FubmVyUG9zaXRpb24gKyBy
ZWxhdGl2ZVN0YXJ0UG9zaXRpb247CiAgICAgICAgIHVuc2lnbmVkIHN1YnJhbmdlTGVuZ3RoID0g
cmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiArIDE7CiAKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzdWJyYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2Us
IHN1YnJhbmdlT2Zmc2V0LCBzdWJyYW5nZUxlbmd0aCk7CisgICAgICAgIGF1dG8gc3VicmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHJhbmdlLCBzdWJyYW5nZU9mZnNldCwgc3VicmFuZ2VM
ZW5ndGgpOwogCi0gICAgICAgIG1hcmtlZFJhbmdlcy5hcHBlbmQoc3VicmFuZ2UpOwotICAgICAg
ICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihzdWJyYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7CisgICAgICAgIG1hcmtlZFJhbmdl
cy5hcHBlbmQoc3VicmFuZ2UucHRyKCkpOworICAgICAgICByYW5nZS5vd25lckRvY3VtZW50KCku
bWFya2VycygpLmFkZE1hcmtlcihzdWJyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51
bWJlcik7CiAKICAgICAgICAgc2Nhbm5lclBvc2l0aW9uICs9IHJlbGF0aXZlRW5kUG9zaXRpb24g
KyAxOwogICAgIH0KQEAgLTM1MjksMTEgKzM1MjYsMTEgQEAgdm9pZCBFZGl0b3I6OmVkaXRvclVJ
VXBkYXRlVGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRD
aGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZykpIHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRS
YW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2Vy
KCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5
cGVHcmFtbWFyKSkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VSYW5n
ZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
R3JhbW1hcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM1NzUsNyArMzU3Miw3IEBAIGJvb2wg
RWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZSBtYXJrZXJUeXBlLCBpCiAKICAgICB1bnNpZ25lZCBpbnQgc3RhcnRPZmZzZXQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20pOwogICAgIHVuc2lnbmVkIGludCBlbmRPZmZzZXQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGZyb20gKyBsZW5ndGgpOwotICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1h
cmtlcnNGb3Iobm9kZSk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJr
ZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSk7CiAgICAgZm9yIChh
dXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0
KCkgPD0gc3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IG1hcmtlci0+ZW5kT2Zmc2V0KCkgJiYg
bWFya2VyLT50eXBlKCkgPT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMzY5Myw3ICszNjkwLDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAogICAgIFJlZlB0cjxSYW5n
ZT4gaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRp
cmVjdGlvbkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRD
YW5kaWRhdGUucmVwbGFjZW1lbnQubGVuZ3RoKCksIERpcmVjdGlvbkJhY2t3YXJkKTsKICAgICBp
ZiAoaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZSkKLSAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoaW5zZXJ0
ZWRDYW5kaWRhdGVSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRl
LCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CisgICAgICAgIGluc2VydGVkQ2FuZGlk
YXRlUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KCppbnNlcnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRh
dGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKIAogICAgIG1faXNIYW5kbGluZ0Fj
Y2VwdGVkQ2FuZGlkYXRlID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwCmluZGV4IGVmZDg2NTA5YTE1ZTZjNThkYmM5YTcwZjE5OTBiZjZm
NTkwMmZkYzIuLmZiY2QyZmZmYWVlZWQ0NTI2OTAxMzU3Y2E2MzU4YzIyYTFjYTQ0YTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0yMDYsNyAr
MjA2LDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGluc2Vy
dFRleHRJbnRvTm9kZSgqdGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKICAgICAgICAgZW5kUG9z
aXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0aCgp
KTsKICAgICAgICAgaWYgKG1fbWFya2VyU3VwcGxpZXIpCi0gICAgICAgICAgICBtX21hcmtlclN1
cHBsaWVyLT5hZGRNYXJrZXJzVG9UZXh0Tm9kZSh0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0LCBtX3Rl
eHQpOworICAgICAgICAgICAgbV9tYXJrZXJTdXBwbGllci0+YWRkTWFya2Vyc1RvVGV4dE5vZGUo
KnRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAKICAgICAgICAgaWYgKG1fcmViYWxhbmNlVHlw
ZSA9PSBSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcykgewogICAgICAgICAg
ICAgLy8gVGhlIGluc2VydGlvbiBtYXkgcmVxdWlyZSBhZGp1c3RpbmcgYWRqYWNlbnQgd2hpdGVz
cGFjZSwgaWYgaXQgaXMgcHJlc2VudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0VGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4
dENvbW1hbmQuaAppbmRleCA5YmM4YjM5OTU2N2VkNzUyYWFkMTk0YjQ2ZDg2MTMyMmQyNmQ3NjEw
Li4xMmVhOWQ0NDYwNjUxOTc2NmFmZGMwNTcyZmI1N2YzZGE1NjI0M2M4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNz
IFRleHQ7CiBjbGFzcyBUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXI+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5UZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
TWFya2Vyc1RvVGV4dE5vZGUoVGV4dCosIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25z
dCBTdHJpbmcmIHRleHRJbnNlcnRlZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJz
VG9UZXh0Tm9kZShUZXh0JiwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmlu
ZyYgdGV4dEluc2VydGVkKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dEluc2VydGlvbk1hcmtl
clN1cHBsaWVyKCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
CmluZGV4IGEyOTRiYjMwMzdhNDgxYjc0MDQyZmI3ZDUxYmQ2MjRmN2U5Zjk4YjIuLmFmYzk0Yzk5
ZmU2MjVlNjhlYWUyNTYyNjU2Y2UxZWFiYzdiNzUyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6
ZGlkQ2hlY2tTdWNjZWVkKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdAogICAgICAgICBpZiAocmVxdWVzdERhdGEubWFzaygpICYgVGV4dENoZWNraW5nVHlwZUdy
YW1tYXIpCiAgICAgICAgICAgICBtYXJrZXJUeXBlcyB8PSBEb2N1bWVudE1hcmtlcjo6R3JhbW1h
cjsKICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Zy
YW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCZtX3Byb2Nlc3NpbmdSZXF1
ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKKyAgICAgICAgICAgIG1fZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMobV9wcm9jZXNzaW5nUmVxdWVzdC0+
Y2hlY2tpbmdSYW5nZSgpLCBtYXJrZXJUeXBlcyk7CiAgICAgfQogICAgIGRpZENoZWNrKHNlcXVl
bmNlLCByZXN1bHRzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29tbWFuZC5jcHAKaW5kZXggOWFkMDkwZjA4Zjc0NzA5Y2FkMTE3NThhNTc0NjRiOThhZTA0
YTBhNS4uOWI3NzYxMDJmOWYxNWFjOTY2ODk5MzgwOTdjYjIyZWVhMmZkMGJiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTYyLDcg
KzYyLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBtX3Rl
eHQxID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUocHJlZml4VGV4dCkpOwogICAg
IEFTU0VSVChtX3RleHQxKTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2Vycyht
X3RleHQyLnB0cigpLCAwLCBtX29mZnNldCwgbV90ZXh0MS5nZXQoKSwgMCk7CisgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0MiwgMCwgbV9vZmZzZXQsICptX3RleHQx
LCAwKTsKIAogICAgIGluc2VydFRleHQxQW5kVHJpbVRleHQyKCk7CiB9CkBAIC03OCw3ICs3OCw3
IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiAKICAgICBtX3RleHQy
LT5pbnNlcnREYXRhKDAsIHByZWZpeFRleHQpOwogCi0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
Y29weU1hcmtlcnMobV90ZXh0MS5nZXQoKSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0
Mi5wdHIoKSwgMCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMoKm1fdGV4
dDEsIDAsIHByZWZpeFRleHQubGVuZ3RoKCksIG1fdGV4dDIsIDApOwogICAgIG1fdGV4dDEtPnJl
bW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKaW5kZXggZjY1NDEwNjRiZmUzODk1YjkwMjIwZTRhNTMxYzllZmQxYjJmOTM2ZS4uOGQ5
NTgyNDAzNTZkYzc3MmM1YTU3MmFjZDAyNDAwYTM4ODg5Y2YxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjUyLDE3ICsyNTIsMTcgQEAg
U3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJz
dE1pc3NwZWxsaW5nT2Zmc2V0LCBib28KIAogICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlv
biA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDwg
dGV4dExlbmd0aCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxs
aW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSB0ZXh0TGVuZ3RoKSB7CiAgICAgICAg
ICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAotICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3Jh
bmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7CisgICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9j
YXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIAogICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmly
c3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCiAgICAgICAgICAgICBp
ZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsKICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5n
T2Zmc2V0ID0gY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKICAgICAg
ICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gdGV4dC5zdWJzdHJpbmcobWlzc3BlbGxpbmdM
b2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAgICAgICAgICAg
ICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlLnB0cigpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9yIG1pc3NwZWxsZWQgd29y
ZC4KLSAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1Jhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgICAgICAgICAvLyBCYWlsIG91dCBp
ZiB3ZSdyZSBtYXJraW5nIG9ubHkgdGhlIGZpcnN0IG1pc3NwZWxsaW5nLCBhbmQgbm90IGFsbCBp
bnN0YW5jZXMuCiAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCkBAIC00MjYsOCArNDI2LDggQEAg
aW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0
b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAK
ICAgICAgICAgaWYgKG1hcmtBbGwpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3Jh
bW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLCBiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVu
Z3RoKTsKLSAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOworICAgICAgICAgICAg
YXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGJh
ZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5sb2NhdGlvbiwg
ZGV0YWlsLT5sZW5ndGgpOworICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgZGV0YWlsIG9ubHkgaWYgaXQn
cyBlYXJsaWVyIHRoYW4gb3VyIGN1cnJlbnQgY2FuZGlkYXRlICh0aGUgZGV0YWlscyBhcmVuJ3Qg
aW4gYSBndWFyYW50ZWVkIG9yZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCBjMTkzMmRlZTFkYTRhOGQyYWFiZTI2NjIw
MWZmMDA0MTE5NDYyNmU5Li5lZTkzOTlhNzZkMjU4NWY4NTcxZTkzMGJlYjFlZDNkMWYxYmQwM2Nm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBw
bHkoKQogICAgICAgICBpbnB1dFRleHQoZmlyc3RJbnRlcnByZXRhdGlvbiwgdHJ1ZSk7CiAKICAg
ICAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXplKCkgPiAxKQotICAgICAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihl
bmRpbmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBpbnRlcnByZXRhdGlv
bnMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlc01hcmtlcigqZW5kaW5nU2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSwgaW50ZXJwcmV0YXRpb25zKTsKIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKTsKICAgICB9CkBA
IC03MSw3ICs3MSw4IEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAKICAg
ICBpZiAoc3RhcnRJbmRleCA+PSAwKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KCksIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0cnVlKTsKLSAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3VsdFJhbmdl
LmdldCgpLCBtX21ldGFkYXRhKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdFJhbmdlKTsgLy8gRklY
TUU6IFdoYXQgZ3VhcmFudGVlcyB0aGlzPworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBtX21ldGFkYXRhKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBkYzZlNzE1
NTkwMDYwMWZiYTk2ZjQ5YzFlMDBiZGMwNGY4ZjAzOTNhLi5kNDZhNzg2NWQwYmI5MjBjZGMwMmEz
OWUxYmFiZmU1ZDVkZjYyZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9T
Lm1tCkBAIC00NjYsMTMgKzQ2NiwxMyBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNl
c0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgICAg
ICBpbnQgZGljdGF0aW9uUGhyYXNlRW5kID0gcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCAr
IGRpY3RhdGlvblBocmFzZUxlbmd0aDsKICAgICAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXpl
KCkgPiAxKSB7CiAgICAgICAgICAgICBhdXRvIGRpY3RhdGlvblBocmFzZVJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUsIHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3Rh
cnQsICZ0ZXh0Tm9kZSwgZGljdGF0aW9uUGhyYXNlRW5kKTsKLSAgICAgICAgICAgIGRvY3VtZW50
KCkubWFya2VycygpLmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoZGlj
dGF0aW9uUGhyYXNlUmFuZ2UucHRyKCksIGludGVycHJldGF0aW9ucyk7CisgICAgICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFy
a2VyKGRpY3RhdGlvblBocmFzZVJhbmdlLmdldCgpLCBpbnRlcnByZXRhdGlvbnMpOwogICAgICAg
ICB9CiAgICAgICAgIHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSBkaWN0YXRpb25QaHJh
c2VFbmQ7CiAgICAgfQogCiAgICAgYXV0byByZXN1bHRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgJnRleHROb2RlLCAwLCAmdGV4dE5vZGUsIHRleHROb2RlLmxlbmd0aCgpKTsKLSAg
ICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1bHRNYXJrZXIocmVzdWx0UmFu
Z2UucHRyKCksIG1ldGFkYXRhKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRp
b25SZXN1bHRNYXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIG1ldGFkYXRhKTsKIAogICAgIGNsaWVu
dCgpLT5yZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCmluZGV4IDM0YmYyNzk3ZDE0M2QxOTM1NzdjMmQ4ZTU5NmJjMjFjMmY2MmE2
NWMuLjBlOGQ5NjI5OTQyZDU3OWUzNDY4YzBmODlhZjQ4NWJjMTY4ZDg0ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IEZpbGVSZWFkZXI6OnJlYWRJbnRlcm5hbChCbG9iJiBibG9iLCBGaWxlUmVhZGVyTG9h
ZGVyOjpSZWFkVHlwCiAgICAgaWYgKG1fc3RhdGUgPT0gTE9BRElORykKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBzZXRQZW5kaW5nQWN0aXZp
dHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgIG1fYmxvYiA9
ICZibG9iOwogICAgIG1fcmVhZFR5cGUgPSB0eXBlOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQg
RmlsZVJlYWRlcjo6YWJvcnQoKQogICAgICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRl
bmRFdmVudCk7CiAKICAgICAgICAgLy8gQWxsIHBvc3NpYmxlIGV2ZW50cyBoYXZlIGZpcmVkIGFu
ZCB3ZSdyZSBkb25lLCBubyBtb3JlIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiAgICAgfSk7CiB9CiAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZp
bmlzaExvYWRpbmcoKQogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsK
ICAgICAKICAgICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRv
bmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4KLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmlsZVJl
YWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgRmls
ZVJlYWRlcjo6ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQogICAgIGZpcmVFdmVudChldmVudE5hbWVz
KCkubG9hZGVuZEV2ZW50KTsKICAgICAKICAgICAvLyBBbGwgcG9zc2libGUgZXZlbnRzIGhhdmUg
ZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4KLSAgICB1bnNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6ZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKaW5kZXggODVkYjQz
ODNlZmZhNjFkNDExMTk2OGQ3MDY1MjRiY2YxNzgyNmY4NC4uODE0ZTkxNmY5YmZmMTFkNGQ2ZjVj
MjBkMzY4ODRlOTUxNDliZDE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxl
bWVudC5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBh
cmFtRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAKaW5kZXggYzNmNDk4NDUwZmZhN2Y4
ZTE3MDZiZmMwODhlNTBiM2ZmOWU5ODZhNS4uNDg0YmNiNzZjMWUwMDEyMDU1Yjc4NzQ4Y2MyOTVl
NTY2NTkyNDc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNw
cApAQCAtMTA0LDcgKzEwNCw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MRGV0YWls
c0VsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmCiAgICAgcmV0dXJu
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsK
IH0KIAotdm9pZCBIVE1MRGV0YWlsc0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTERldGFpbHNFbGVtZW50OjpkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgYXV0byBzdW1tYXJ5U2xvdCA9
IEhUTUxTbG90RWxlbWVudDo6Y3JlYXRlKHNsb3RUYWcsIGRvY3VtZW50KCkpOwogICAgIHN1bW1h
cnlTbG90LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG5hbWVBdHRyLCBzdW1t
YXJ5U2xvdE5hbWUoKSk7CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBIVE1MRGV0YWlsc0VsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKICAgICBtX2Rl
ZmF1bHRTdW1tYXJ5ID0gZGVmYXVsdFN1bW1hcnkucHRyKCk7CiAKICAgICBzdW1tYXJ5U2xvdC0+
YXBwZW5kQ2hpbGQoZGVmYXVsdFN1bW1hcnkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKHN1bW1h
cnlTbG90KTsKKyAgICByb290LmFwcGVuZENoaWxkKHN1bW1hcnlTbG90KTsKIAogICAgIG1fZGVm
YXVsdFNsb3QgPSBIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShzbG90VGFnLCBkb2N1bWVudCgpKTsK
ICAgICBBU1NFUlQoIW1faXNPcGVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERldGFpbHNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxl
bWVudC5oCmluZGV4IGYxYzQ2ZmYzNWQ3NjYyNGFmZWUzZWNlYjY0MjA0MjM2MmYyZDNiZjAuLmU0
ODM2NTcxNjAzODQ2ODAyZTg3YTJjMTc4ZTk3N2IwMWQzYThkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAg
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5
bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgZmluYWw7CiAgICAgdm9pZCBwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7
CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFs
OworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7
CiAgICAgYm9vbCBoYXNDdXN0b21Gb2N1c0xvZ2ljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogCiAgICAgYm9vbCBtX2lzT3BlbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5jcHAKaW5kZXggY2JkZmRkM2VmY2FhZGFmOGZiZjQwMGI2YzI1NDgwYTQzYWVkMzIw
My4uODFlZjE3ZWZiMTRjOWRmZmZiYjg4OWRhNTllOTIzOTdlZTU4N2E0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtODgsNiArODgsMTYgQEAgSFRNTERvY3VtZW50OjpI
VE1MRG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgRG9jdW1lbnRDbGFzc0Zs
YWdzIGRvY3UKICAgICBjbGVhclhNTFZlcnNpb24oKTsKIH0KIAorUmVmPEhUTUxEb2N1bWVudD4g
SFRNTERvY3VtZW50OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3Vt
ZW50Q2xhc3MpKTsKK30KKworUmVmPEhUTUxEb2N1bWVudD4gSFRNTERvY3VtZW50OjpjcmVhdGVT
eW50aGVzaXplZERvY3VtZW50KEZyYW1lJiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KCZmcmFtZSwgdXJsLCBIVE1MRG9jdW1l
bnRDbGFzcywgU3ludGhlc2l6ZWQpKTsKK30KKwogSFRNTERvY3VtZW50Ojp+SFRNTERvY3VtZW50
KCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCmluZGV4IDIzZGU0ZGMxYzY4NWEy
OGEyZjQwZThhY2Q1Y2YwYTZkOGZjMjdjNmYuLjFjZDVjMTE1NGRhOGQ2NTZkYTgyNWQyNzEwMDBm
MjdjZmJiODYwNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaApAQCAtMjgsMTYgKzI4
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRG9jdW1lbnQgOiBwdWJsaWMg
RG9jdW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50PiBjcmVhdGUo
RnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEhUTUxEb2N1bWVudChmcmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcykpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50PiBjcmVhdGVTeW50aGVzaXplZERv
Y3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUsIHVybCwgSFRNTERvY3VtZW50Q2xh
c3MsIFN5bnRoZXNpemVkKSk7Ci0gICAgfQotCisgICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+
IGNyZWF0ZShGcmFtZSosIGNvbnN0IFVSTCYpOworICAgIHN0YXRpYyBSZWY8SFRNTERvY3VtZW50
PiBjcmVhdGVTeW50aGVzaXplZERvY3VtZW50KEZyYW1lJiwgY29uc3QgVVJMJik7CiAgICAgdmly
dHVhbCB+SFRNTERvY3VtZW50KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgd2lkdGgoKTsK
QEAgLTY0LDcgKzU2LDcgQEAgcHJvdGVjdGVkOgogICAgIEhUTUxEb2N1bWVudChGcmFtZSosIGNv
bnN0IFVSTCYsIERvY3VtZW50Q2xhc3NGbGFncyA9IDAsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZs
YWdzID0gMCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgZmluYWw7CiAgICAgUmVmPERvY3VtZW50
UGFyc2VyPiBjcmVhdGVQYXJzZXIoKSBvdmVycmlkZTsKICAgICBSZWY8RG9jdW1lbnQ+IGNsb25l
RG9jdW1lbnRXaXRob3V0Q2hpbGRyZW4oKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGUzMjU2N2EyZWExNGE5NWY2ZTk2OGU4OWQxNGE4
NDkyYjA1NGM1YmMuLmUxYWRkMjYwMjM0ZmEzYjAzNDcyNDI5MjE0MjNmY2E5ODQxM2E4OGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAg
SFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KCkKIHsKICAgICBkb2N1bWVudCgpLmZv
cm1Db250cm9sbGVyKCkud2lsbERlbGV0ZUZvcm0odGhpcyk7CiAgICAgaWYgKCFzaG91bGRBdXRv
Y29tcGxldGUoKSkKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogCiAgICAgbV9kZWZhdWx0QnV0dG9u
ID0gbnVsbHB0cjsKICAgICBmb3IgKGF1dG8mIGFzc29jaWF0ZWRFbGVtZW50IDogbV9hc3NvY2lh
dGVkRWxlbWVudHMpCkBAIC00MzEsOSArNDMxLDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmkK
ICAgICAgICAgbV9hdHRyaWJ1dGVzLnNldEFjY2VwdENoYXJzZXQodmFsdWUpOwogICAgIGVsc2Ug
aWYgKG5hbWUgPT0gYXV0b2NvbXBsZXRlQXR0cikgewogICAgICAgICBpZiAoIXNob3VsZEF1dG9j
b21wbGV0ZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3ModGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQpAQCAtODAyLDggKzgwMiw4IEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpyZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1l
bnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsKICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0
ZSgpKSB7Ci0gICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja3ModGhpcyk7Ci0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgICAgICBuZXdEb2N1
bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAg
fQogCiAgICAgSFRNTEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBu
ZXdEb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCmlu
ZGV4IGQzMDMyMmRjMGM0OGZiODIwNmVhYmI2NmNhZWYyYjhmZTY5N2I2NGYuLjNiYjdlNGE3ZTdi
MGQ1YzI5ZGRhZDYzM2ZlMzI1YzcwYzVmZGIwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElGcmFtZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBjMDhjZjMz
NzBjMmEzMWFkMzAzM2I5ZjYxOGZhOTVkMDAyMzA2Y2MxLi42OGIxYjRlZmZiMmEyNDdlZWM5MWFk
YTY3YzQzZjBmYzA2MDE0ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQCBIVE1MSW1hZ2VMb2FkZXImIEhUTUxJbnB1dEVsZW1l
bnQ6OmVuc3VyZUltYWdlTG9hZGVyKCkKICAgICByZXR1cm4gKm1faW1hZ2VMb2FkZXI7CiB9CiAK
LXZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dS
b290KikKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290JikKIHsKICAgICBtX2lucHV0VHlwZS0+Y3JlYXRlU2hhZG93U3VidHJlZSgpOwog
ICAgIHVwZGF0ZUlubmVyVGV4dEVsZW1lbnRFZGl0YWJpbGl0eSgpOwpAQCAtMTQ4LDcgKzE0OCw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFk
b3dSb290KikKIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKIHsKICAgICBp
ZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVu
dCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogCiAg
ICAgLy8gTmVlZCB0byByZW1vdmUgZm9ybSBhc3NvY2lhdGlvbiB3aGlsZSB0aGlzIGlzIHN0aWxs
IGFuIEhUTUxJbnB1dEVsZW1lbnQKICAgICAvLyBzbyB0aGF0IHZpcnR1YWwgZnVuY3Rpb25zIGFy
ZSBjYWxsZWQgY29ycmVjdGx5LgpAQCAtMTU2LDcgKzE1Niw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6
On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAvLyBzZXRGb3JtKDApIG1heSByZWdpc3RlciB0aGlz
IHRvIGEgZG9jdW1lbnQtbGV2ZWwgcmFkaW8gYnV0dG9uIGdyb3VwLgogICAgIC8vIFdlIHNob3Vs
ZCB1bnJlZ2lzdGVyIGl0IHRvIGF2b2lkIGFjY2Vzc2luZyBhIGRlbGV0ZWQgb2JqZWN0LgogICAg
IGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIo
KS5yYWRpb0J1dHRvbkdyb3VwcygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0
aGlzKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRI
YW5kbGVyKQogICAgICAgICBkb2N1bWVudCgpLmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhp
cyk7CkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2Vk
KGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVudEIKICAgICBpbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1
dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICBidXR0b25zLT51cGRhdGVDaGVj
a2VkU3RhdGUodGhpcyk7CisgICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSgqdGhp
cyk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS5oYXNBcHBlYXJh
bmNlKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkuc3RhdGVDaGFuZ2VkKCpyZW5kZXJl
cigpLCBDb250cm9sU3RhdGVzOjpDaGVja2VkU3RhdGUpOwogICAgIHVwZGF0ZVZhbGlkaXR5KCk7
CkBAIC0xNDI1LDEzICsxNDI1LDEzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6bmVlZHNTdXNw
ZW5zaW9uQ2FsbGJhY2soKQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZWdpc3RlckZvclN1c3Bl
bnNpb25DYWxsYmFja0lmTmVlZGVkKCkKIHsKICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJh
Y2soKSkKLSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNh
bGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dW5y
ZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCkKIHsKICAgICBpZiAoIW5lZWRz
U3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJl
Z2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogYm9vbCBI
VE1MSW5wdXRFbGVtZW50Ojppc1JlcXVpcmVkRm9ybUNvbnRyb2woKSBjb25zdApAQCAtMTUzMCwx
MSArMTUzMCwxMSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50
KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ldwogCiAgICAgLy8gQWx3YXlzIHVu
cmVnaXN0ZXIgZm9yIGNhY2hlIGNhbGxiYWNrcyB3aGVuIGxlYXZpbmcgYSBkb2N1bWVudCwgZXZl
biBpZiB3ZSB3b3VsZCBvdGhlcndpc2UgbGlrZSB0byBiZSByZWdpc3RlcmVkCiAgICAgaWYgKG5l
ZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgbmV3RG9jdW1l
bnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAg
IG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRo
aXMpOworICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNh
bGxiYWNrcygqdGhpcyk7CiAgICAgfQogICAgIGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAg
IG9sZERvY3VtZW50LmZvcm1Db250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVC
dXR0b24odGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LmZvcm1Db250cm9sbGVyKCkucmFkaW9C
dXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24oKnRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAgICAgaWYgKG1faGFzVG91Y2hFdmVudEhhbmRsZXIpIHsKICAgICAgICAgb2xkRG9jdW1l
bnQuZGlkUmVtb3ZlRXZlbnRUYXJnZXROb2RlKCp0aGlzKTsKQEAgLTE1NjEsNyArMTU2MSw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKICAg
ICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7
CiAgICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMo
KSkKLSAgICAgICAgYnV0dG9ucy0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKHRoaXMpOworICAg
ICAgICBidXR0b25zLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKnRoaXMpOwogICAgIG1faW5w
dXRUeXBlLT5yZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKIH0KIApAQCAtMTgzOSw3ICsxODM5
LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc0luUmVxdWlyZWRSYWRpb0J1dHRvbkdyb3Vw
KCkKIHsKICAgICBBU1NFUlQoaXNSYWRpb0J1dHRvbigpKTsKICAgICBpZiAoUmFkaW9CdXR0b25H
cm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICByZXR1cm4gYnV0
dG9ucy0+aXNJblJlcXVpcmVkR3JvdXAodGhpcyk7CisgICAgICAgIHJldHVybiBidXR0b25zLT5p
c0luUmVxdWlyZWRHcm91cCgqdGhpcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODcx
LDE0ICsxODcxLDE0IEBAIFJhZGlvQnV0dG9uR3JvdXBzKiBIVE1MSW5wdXRFbGVtZW50OjpyYWRp
b0J1dHRvbkdyb3VwcygpIGNvbnN0CiAKIGlubGluZSB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFk
ZFRvUmFkaW9CdXR0b25Hcm91cCgpCiB7Ci0gICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0
b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9ucy0+YWRkQnV0dG9uKHRo
aXMpOworICAgIGlmIChhdXRvKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAg
ICAgYnV0dG9ucy0+YWRkQnV0dG9uKCp0aGlzKTsKIH0KIAogaW5saW5lIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6cmVtb3ZlRnJvbVJhZGlvQnV0dG9uR3JvdXAoKQogewotICAgIGlmIChSYWRpb0J1
dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1dHRv
bnMtPnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICBpZiAoYXV0byogYnV0dG9ucyA9IHJhZGlvQnV0
dG9uR3JvdXBzKCkpCisgICAgICAgIGJ1dHRvbnMtPnJlbW92ZUJ1dHRvbigqdGhpcyk7CiB9CiAK
IHVuc2lnbmVkIEhUTUxJbnB1dEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IGQyNjMyN2ZmODFkYTYzNDk2ZjAzOWQ3M2RjMGE3
MDFhNzY3YjJiZDkuLmI4M2FhZTBiY2RiODlhYzdlNTYxNDNlMmE3MWFiZmY5MDdjMGJkYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0zNDEsNyArMzQxLDcgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBlbnVtIEF1dG9Db21wbGV0ZVNldHRpbmcgeyBVbmlu
aXRpYWxpemVkLCBPbiwgT2ZmIH07CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dChTaGFkb3dSb290JikgZmluYWw7CiAKICAgICB2b2lkIHdpbGxDaGFuZ2VGb3JtKCkgZmluYWw7
CiAgICAgdm9pZCBkaWRDaGFuZ2VGb3JtKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAppbmRleCA4MWE5MDhjODUyOWRkMzE5NzViYTBhZDZmMDU3Yzg1MTNh
YzkwMGE1Li45NmQwYWIzOTBjNzlkMjU4M2UxOWVlNDNhMjU0YjE2YmViZTU2NTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTY2MywzMyArNjYzLDMzIEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVu
dCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCi0gICAgICAgIGRv
Y3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQu
YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAogI2lmICFQTEFURk9STShJT1MpCi0g
ICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBk
b2N1bWVudC5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyh0
aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCp0aGlz
KTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENh
bGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJp
bGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZv
clZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgIGlmIChtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2Fs
bGJhY2tzKQotICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0No
YW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlv
blByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9u
UGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvclBhZ2VTY2FsZUZh
Y3RvckNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgZG9jdW1lbnQucmVn
aXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAg
ZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Cisg
ICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMp
OwogI2VuZGlmCiAKICAgICBkb2N1bWVudC5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJ
bmxpbmVQbGF5YmFja0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQuYWRk
QXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlz
KTsKICAgICBhZGRFbGVtZW50VG9Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwogCiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTcwMiwzMyArNzAyLDMzIEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dW5yZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAg
bV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAg
aWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICBkb2N1bWVudC5yZW1v
dmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlbW92ZU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGRv
Y3VtZW50LnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1
bWVudC51bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRo
aXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcygqdGhp
cyk7CisgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JW
aXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnVucmVn
aXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogI2lmIEVO
QUJMRShWSURFT19UUkFDSykKICAgICBpZiAobV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZENhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckNhcHRpb25QcmVm
ZXJlbmNlc0NoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnVucmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9tZWRpYUNvbnRy
b2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJG
b3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAg
ICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3Bl
bnNpb25DYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICAgICBkb2N1bWVudC51bnJlZ2lzdGVy
Rm9yQWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiAKLSAgICBkb2N1bWVudC5yZW1vdmVBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIGRvY3Vt
ZW50LnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogICAgIHJlbW92ZUVsZW1lbnRGcm9tRG9j
dW1lbnRNYXAoKnRoaXMsIGRvY3VtZW50KTsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBA
IC0xMzE5LDcgKzEzMTksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVz
b3VyY2UoKQogICAgICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0g
dHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzkwMyw3ICszOTAzLDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjphZGRUZXh0VHJhY2soUmVmPFRleHRUcmFjaz4mJiB0cmFjaykKICAgICBpZiAo
IW1fcmVxdWlyZUNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpIHsKICAgICAgICAg
bV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyA9IHRydWU7CiAgICAg
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAgICAgIGRvY3Vt
ZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsK
KyAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2Fs
bGJhY2tzKCp0aGlzKTsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkp
CiAgICAgICAgICAgICBtX2NhcHRpb25EaXNwbGF5TW9kZSA9IHBhZ2UtPmdyb3VwKCkuY2FwdGlv
blByZWZlcmVuY2VzKCkuY2FwdGlvbkRpc3BsYXlNb2RlKCk7CiAgICAgfQpAQCAtNTM1NSw3ICs1
MzU1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVyKERlbGF5ZWRB
Y3Rpb25UeXBlIGZsYWdzKQogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0
KSB7CiAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0gZmFsc2U7Ci0gICAg
ICAgIGRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgfQog
CiAgICAgaWYgKG1fcGxheWVyKSB7CkBAIC01NDg5LDcgKzU0ODksNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlc3VtZSgpCiAgICAgc2V0U2hvdWxkQnVmZmVyRGF0YSh0cnVlKTsKIAogICAg
IGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoKnRo
aXMpKQotICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsK
KyAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAg
IGVsc2UKICAgICAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOwogCkBAIC02OTk4LDcgKzY5
OTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xsZXJKU1Byb3BlcnR5KGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgSlNDOjpKUwogICAgIGNvbnRyb2xsZXJPYmplY3QtPm1l
dGhvZFRhYmxlKCktPnB1dChjb250cm9sbGVyT2JqZWN0LCBleGVjLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lKSwgcHJvcGVydHlWYWx1ZSwgcHJvcGVydHlT
bG90KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dS
b290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBERUJVR19MT0coVEhJUyk7
CiAKQEAgLTcwOTcsOSArNzA5Nyw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFD
b250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJvb2wgZGVwZW5kc09uUGFnCiAgICAgbV9t
ZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IgPSBkZXBlbmRzT25QYWdlU2NhbGU7
CiAKICAgICBpZiAobV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAg
ICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tz
KHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZENhbGxiYWNrcygqdGhpcyk7CiAgICAgZWxzZQotICAgICAgICBkb2N1bWVudCgpLnVucmVn
aXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBk
b2N1bWVudCgpLnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0
aGlzKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xzQWZ0
ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKaW5kZXggMWIxMDEzMDIzYzM1NWNmYTc4MTgyZjkxMjVhYzBiNjkzYWE0MzAyMC4uOWEz
OWM4NDNjZmIwZjhhYzU5NGZkY2ZjNTFhZjc2ZmJkNzgyYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTgzMCw3ICs4MzAsNyBAQCBwcml2YXRlOgogICAgIFNs
ZWVwVHlwZSBzaG91bGREaXNhYmxlU2xlZXAoKSBjb25zdDsKIAogI2lmIEVOQUJMRShNRURJQV9D
T05UUk9MU19TQ1JJUFQpCi0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hh
ZG93Um9vdCYpIG92ZXJyaWRlOwogICAgIERPTVdyYXBwZXJXb3JsZCYgZW5zdXJlSXNvbGF0ZWRX
b3JsZCgpOwogICAgIGJvb2wgZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCmluZGV4IDAyMzli
MzM1YzgxZmQ5Zjg5NWZjMDc4YmYwMTkxMjIxZTVhMTM2ZTQuLmE2NzhhMjAwYTg1MzA4MDJhNTEz
Mjg1ZDVlNTdjNWUzYTFhYWM1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1ldGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVt
ZW50LmNwcApAQCAtMjIzLDcgKzIyMyw3IEBAIFJlbmRlck1ldGVyKiBIVE1MTWV0ZXJFbGVtZW50
OjpyZW5kZXJNZXRlcigpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgSFRN
TE1ldGVyRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290
KQordm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QmIHJvb3QpCiB7CiAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKIApAQCAtMjMxLDEzICsyMzEs
MTMgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QqIHJvb3QpCiAKICAgICBhdXRvIHN0eWxlID0gSFRNTFN0eWxlRWxlbWVudDo6Y3Jl
YXRlKEhUTUxOYW1lczo6c3R5bGVUYWcsIGRvY3VtZW50KCksIGZhbHNlKTsKICAgICBzdHlsZS0+
c2V0VGV4dENvbnRlbnQoc2hhZG93U3R5bGUpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKHN0eWxl
KTsKKyAgICByb290LmFwcGVuZENoaWxkKHN0eWxlKTsKIAogICAgIC8vIFBzZXVkb3MgYXJlIHNl
dCB0byBhbGxvdyBhdXRob3Igc3R5bGluZy4KICAgICBhdXRvIGlubmVyID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICBpbm5lci0+c2V0SWRBdHRyaWJ1dGUoImlubmVy
Iik7CiAgICAgaW5uZXItPnNldFBzZXVkbygiLXdlYmtpdC1tZXRlci1pbm5lci1lbGVtZW50Iik7
Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoaW5uZXIpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoaW5u
ZXIpOwogCiAgICAgYXV0byBiYXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkp
OwogICAgIGJhci0+c2V0SWRBdHRyaWJ1dGUoImJhciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuaAppbmRleCA2MDRhNjVhOWUzYWIyZmMzODNmNGY2MGIxYTAzZjAxOTJmOGMx
YmUyLi40ODY1YTZkYjdkOGFjMjAwOGE4ZWU2OGFhN2JmMTdjMjllNmQwZDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRFbGVtZW50U3RhdGVDaGFuZ2UoKTsKLSAg
ICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFsOworICAg
IHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7CiAKICAg
ICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTmFtZUNvbGxlY3Rpb24uY3BwCmluZGV4IGQxMGMzN2ZiMjI4ODFjMTNjMzBmMDdjN2I5MzRm
OTMyNzU0NmYxZWEuLmUxMThiZGUxZGRjMjIzYTkzYjcxODRiYTYwNzc4OTFjY2FhMmI3NjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKQEAgLTI1LDcgKzI1
LDYgQEAKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAppbmRl
eCBlMmUzMWExNTUzNjEwOTZhNTZhZmQ4NDNjMzAwMmYwODVmNDllMWRhLi45ZGM1ZmYxYWE5MGZj
M2E2ZDQyNzU0MjEyYzVmZmJkM2UyYzQ5NWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmNwcApAQCAtMjkyLDEzICsyOTIsMTMgQEAgdm9pZCBIVE1MUGx1Z0luRWxl
bWVudDo6c2V0RGlzcGxheVN0YXRlKERpc3BsYXlTdGF0ZSBzdGF0ZSkKICAgICAgICAgbV9zd2Fw
UmVuZGVyZXJUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBIVE1MUGx1Z0luRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBI
VE1MUGx1Z0luRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiBy
b290KQogewogICAgIGlmICghbV9wbHVnaW5SZXBsYWNlbWVudCB8fCAhZG9jdW1lbnQoKS5wYWdl
KCkgfHwgZGlzcGxheVN0YXRlKCkgIT0gUHJlcGFyaW5nUGx1Z2luUmVwbGFjZW1lbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICByb290LT5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1
ZSk7Ci0gICAgaWYgKG1fcGx1Z2luUmVwbGFjZW1lbnQtPmluc3RhbGxSZXBsYWNlbWVudCgqcm9v
dCkpIHsKKyAgICByb290LnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsKKyAgICBpZiAo
bV9wbHVnaW5SZXBsYWNlbWVudC0+aW5zdGFsbFJlcGxhY2VtZW50KHJvb3QpKSB7CiAgICAgICAg
IHNldERpc3BsYXlTdGF0ZShEaXNwbGF5aW5nUGx1Z2luUmVwbGFjZW1lbnQpOwogICAgICAgICBp
bnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCmluZGV4IDUyYTI5MmFiYjI5NmM0OTNhMmU2Yjgz
OGFkMzBjMGIxYjBmMzA0ZDIuLjExZmU2MDJjZTFlMWQwNzVmNWRjZTE1YjFjM2QxYjA5ODhjOTE2
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKQEAgLTk4LDcgKzk4
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBib29sIHJlcXVlc3RPYmplY3QoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEFk
ZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIG92ZXJyaWRlOwogCiAgICAgLy8gU3Vi
Y2xhc3NlcyBzaG91bGQgdXNlIGd1YXJkZWREaXNwYXRjaEJlZm9yZUxvYWRFdmVudCBpbnN0ZWFk
IG9mIGNhbGxpbmcgZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQgZGlyZWN0bHkuCiAgICAgYm9vbCBn
dWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXgg
NWQ0MTVhNjJjMWEzNDc1Y2Q1YjI4ZTM3OWJiZGM5YzcyZjZkOGI4Ny4uMGM1NWI5OWE5MWVmYzEx
ZmViZDViMWZjZDYzZGVkYTY5YzI2NWYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjpmaW5pc2hDcmVhdGluZygpCiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
Ojp+SFRNTFBsdWdJbkltYWdlRWxlbWVudCgpCiB7CiAgICAgaWYgKG1fbmVlZHNEb2N1bWVudEFj
dGl2YXRpb25DYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpzZXREaXNwbGF5U3RhdGUoRGlzcGxheVN0YXRlIHN0YXRlKQpA
QCAtMTc1LDcgKzE3NSw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5CiAgICAgLy8gaW5hY3Rp
dmUgb3IgcmVhY3RpdmF0ZXMgc28gaXQgY2FuIGNsZWFyIHRoZSByZW5kZXJlciBiZWZvcmUgZ29p
bmcgaW50byB0aGUgcGFnZSBjYWNoZS4KICAgICBpZiAoIW1fbmVlZHNEb2N1bWVudEFjdGl2YXRp
b25DYWxsYmFja3MpIHsKICAgICAgICAgbV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNr
cyA9IHRydWU7Ci0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KIAogICAgIGlmIChkaXNwbGF5U3Rh
dGUoKSA9PSBEaXNwbGF5aW5nU25hcHNob3QpIHsKQEAgLTI4NCw4ICsyODQsOCBAQCB2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGRE
b2N1bWVudCwgRG9jdW1lbgogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCZkb2N1bWVudCgpID09ICZuZXdEb2N1bWVudCk7CiAgICAgaWYgKG1fbmVlZHNEb2N1bWVudEFj
dGl2YXRpb25DYWxsYmFja3MpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgbmV3RG9jdW1lbnQucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIG9sZERv
Y3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwor
ICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
cygqdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKG1faW1hZ2VMb2FkZXIpCkBAIC0zNDEsNyArMzQx
LDcgQEAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgcGx1Z0luSW1hZ2VFbGVtZW50SXNvbGF0ZWRX
b3JsZCgpCiAgICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbklt
YWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQor
dm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3Qocm9vdCk7CiAgICAgaWYgKGRpc3BsYXlTdGF0ZSgpID49IFByZXBhcmluZ1Bs
dWdpblJlcGxhY2VtZW50KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQogICAg
IC8vIFJlc2V0IGFueSBhdXRob3Igc3R5bGVzIHRoYXQgbWF5IGFwcGx5IGFzIHdlIG9ubHkgd2Fu
dCBleHBsaWNpdAogICAgIC8vIHN0eWxlcyBkZWZpbmVkIGluIHRoZSBpbmplY3RlZCB1c2VyIGFn
ZW50cyBzdHlsZXNoZWV0cyB0byBzcGVjaWZ5CiAgICAgLy8gdGhlIGxvb2stYW5kLWZlZWwgb2Yg
dGhlIHNuYXBzaG90dGVkIHBsdWctaW4gb3ZlcmxheS4gCi0gICAgcm9vdC0+c2V0UmVzZXRTdHls
ZUluaGVyaXRhbmNlKHRydWUpOworICAgIHJvb3Quc2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRy
dWUpOwogICAgIAogICAgIFN0cmluZyBtaW1lVHlwZSA9IGxvYWRlZE1pbWVUeXBlKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKaW5kZXggZTk0MWY1
N2FkZjhhMTlhOWVkMTRlZGNlYjA5N2JkM2FiNGE0ZmE2Mi4uZTNmMDM5NjRmYTE3NDQ1MWU4ZTI2
NmFlMzI3MzZhOWVjOWJmOTg1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBh
bGxvd2VkVG9Mb2FkUGx1Z2luQ29udGVudChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkgY29uc3Q7CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290JikgZmluYWw7CiAKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRl
RWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYp
IG92ZXJyaWRlOwogICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2Rl
JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
cm9ncmVzc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVt
ZW50LmNwcAppbmRleCA4YjQwZTFkYzI1OGE5YmE0ZmFmY2YwODNiMzVmOTNiY2IyYzQ1ZTRmLi4x
MmQzMWM3MjIwZDZkODIyNDEwZDk5OGY0ZDNhZTFiYmZjYjJhMmZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTEzNSwxMiArMTM1LDEyIEBAIHZv
aWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlkRWxlbWVudFN0YXRlQ2hhbmdlKCkKICAgICB9CiB9
CiAKLXZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KiByb290KQordm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgQVNTRVJUKCFtX3ZhbHVlKTsK
IAogICAgIGF1dG8gaW5uZXIgPSBQcm9ncmVzc0lubmVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KCkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKGlubmVyKTsKKyAgICByb290LmFwcGVuZENoaWxk
KGlubmVyKTsKIAogICAgIGF1dG8gYmFyID0gUHJvZ3Jlc3NCYXJFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQoKSk7CiAgICAgYXV0byB2YWx1ZSA9IFByb2dyZXNzVmFsdWVFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oCmlu
ZGV4IGJkMzNhYTEyMmVkZjIxNTRhNjc5ZmUxNmQ2NjQwY2IxMmZiNzBlMzAuLjgyNjczNmRhYjJi
YjY1N2FiM2U1YzdhYzNiYTQ5NGQzYWQ4MGNlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
aWRBdHRhY2hSZW5kZXJlcnMoKSBmaW5hbDsKIAogICAgIHZvaWQgZGlkRWxlbWVudFN0YXRlQ2hh
bmdlKCk7Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBm
aW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZp
bmFsOwogICAgIGJvb2wgaXNEZXRlcm1pbmF0ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBjYW5Db250
YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCmluZGV4IGE0OWZmMjBjMmIzNzhhNTYy
NDQxNWQ1NDkzMWUzNDQzYjM4YjhhZWEuLjk5ZjNjNmY4YzRjMGFmNGY4N2E0NmYzZjUxOWJmOWQw
MjZjN2UwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBA
IC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUGljdHVyZUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKaW5kZXggOTkxMGJkMWI0
MmZhMjU2MmYyYTMwNmFiMjEyMDZhODg0NGYyNTQ5Yi4uZGE3NDljZDk0M2YzOTBkY2ExMDU0YWU3
NTVhMmY4YWQzYTAzNjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3Vt
bWFyeUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcApAQCAtNjUsMTAgKzY1LDEwIEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1M
U3VtbWFyeUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmCiAgICAg
cmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4oKnRoaXMsIFdURk1vdmUoc3R5
bGUpKTsKIH0KIAotdm9pZCBIVE1MU3VtbWFyeUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRv
d1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFN1bW1hcnlFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgcm9vdC0+YXBwZW5k
Q2hpbGQoRGV0YWlsc01hcmtlckNvbnRyb2w6OmNyZWF0ZShkb2N1bWVudCgpKSk7Ci0gICAgcm9v
dC0+YXBwZW5kQ2hpbGQoSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1lbnQo
KSkpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoRGV0YWlsc01hcmtlckNvbnRyb2w6OmNyZWF0ZShk
b2N1bWVudCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0
ZShzbG90VGFnLCBkb2N1bWVudCgpKSk7CiB9CiAKIEhUTUxEZXRhaWxzRWxlbWVudCogSFRNTFN1
bW1hcnlFbGVtZW50OjpkZXRhaWxzRWxlbWVudCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3VtbWFyeUVsZW1lbnQuaAppbmRleCAxMjdhNTQ2ZDJhMGRjNDAyOTg0MTJhYmM1ZDY5YWYw
Nzg1NjNiNTIwLi42Yjc0NTA1NDQ2MGRhMDI2MmFmY2M5OWM0N2U5ZTlmNjhlMmU0NjQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAg
cHJpdmF0ZToKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRl
cmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogICAg
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFk
ZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgYm9vbCBoYXND
dXN0b21Gb2N1c0xvZ2ljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAppbmRleCAyNDJmYzFhNTg1ZmYz
ZGI5YjI0ZjFmMjAyN2ExZTE3Y2NhOTAyYjU4Li42OTZhNjNmNDAzY2UxNTkxMjUwZmQxNGIwMGVm
MjBhNmQ5OWJiMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVu
dC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50Lmgi
CiAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVDb250ZW50RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIm1hcmt1cC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50
LmNwcAppbmRleCBlM2EwMjE5MGVkYTIwMjZiYWYyMjJjZDIxY2Y2OGI0MjhjNGI3NmRmLi42ODhl
M2NjMDc0NmM2NjE4MGNiYjU4OTcxNjdiZGQyMzY2NWEyNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCBSZWY8SFRN
TFRleHRBcmVhRWxlbWVudD4gSFRNTFRleHRBcmVhRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbQogICAgIHJldHVybiB0ZXh0QXJlYTsKIH0KIAotdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3Qp
Cit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hh
ZG93Um9vdCYgcm9vdCkKIHsKLSAgICByb290LT5hcHBlbmRDaGlsZChUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChU
ZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgdXBk
YXRlSW5uZXJUZXh0RWxlbWVudEVkaXRhYmlsaXR5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKaW5kZXggYjlhMzIyNGM3NTBlNGQ0MDZiMjNhNmU1NGIw
NDc1MjI1Mjk5Zjg1MC4uY2JkMDYzZTMyODFiZWNhZDU2OWIyYmNkMDI3MDYwZmQ3ZmJhZDliNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKQEAgLTcxLDcgKzcx
LDcgQEAgcHJpdmF0ZToKIAogICAgIGVudW0gV3JhcE1ldGhvZCB7IE5vV3JhcCwgU29mdFdyYXAs
IEhhcmRXcmFwIH07CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dS
b290JikgZmluYWw7CiAKICAgICB2b2lkIG1heExlbmd0aEF0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CiAgICAgdm9pZCBtaW5MZW5ndGhBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlv
SW5wdXRUeXBlLmNwcAppbmRleCBkZWMxOWIyYzBiOWUyMjIwZjY3YWE1ZGY0OGRjYjEzYzk4NGVh
NDJiLi4wYmNmZTE1ODkxNGM0ZmQzNTBjMTZkMzdlNDFlNDRiOThkMGVlNGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcApAQCAtMTc4LDkgKzE3OCw5IEBAIGJvb2wgUmFk
aW9JbnB1dFR5cGU6OmlzUmFkaW9CdXR0b24oKSBjb25zdAogCiBib29sIFJhZGlvSW5wdXRUeXBl
OjptYXRjaGVzSW5kZXRlcm1pbmF0ZVBzZXVkb0NsYXNzKCkgY29uc3QKIHsKLSAgICBjb25zdCBI
VE1MSW5wdXRFbGVtZW50JiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOwotICAgIGlmIChjb25z
dCBSYWRpb0J1dHRvbkdyb3VwcyogcmFkaW9CdXR0b25Hcm91cHMgPSBlbGVtZW50LnJhZGlvQnV0
dG9uR3JvdXBzKCkpCi0gICAgICAgIHJldHVybiAhcmFkaW9CdXR0b25Hcm91cHMtPmhhc0NoZWNr
ZWRCdXR0b24oJmVsZW1lbnQpOworICAgIGF1dG8mIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7
CisgICAgaWYgKGF1dG8qIHJhZGlvQnV0dG9uR3JvdXBzID0gZWxlbWVudC5yYWRpb0J1dHRvbkdy
b3VwcygpKQorICAgICAgICByZXR1cm4gIXJhZGlvQnV0dG9uR3JvdXBzLT5oYXNDaGVja2VkQnV0
dG9uKGVsZW1lbnQpOwogICAgIHJldHVybiAhZWxlbWVudC5jaGVja2VkKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCmluZGV4IDAwNWJlNGQyZDJlMTc4MDhl
ZjgyYTNiOTNkMjkzZDg3OGExOWEwOTMuLjZmYzVjMTYxNmJlZjE5NjIxM2NhZWFjYTYxY2MxNDVk
NGM1MTNiMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcApAQCAt
MTQ3LDcgKzE0Nyw3IEBAIHZvaWQgRG9jdW1lbnRXcml0ZXI6OmJlZ2luKGNvbnN0IFVSTCYgdXJs
UmVmZXJlbmNlLCBib29sIGRpc3BhdGNoLCBEb2N1bWVudCogb3duCiAKICAgICBib29sIHNob3Vs
ZFJldXNlRGVmYXVsdFZpZXcgPSBtX2ZyYW1lLT5sb2FkZXIoKS5zdGF0ZU1hY2hpbmUoKS5pc0Rp
c3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmlz
U2VjdXJlVHJhbnNpdGlvblRvKHVybCk7CiAgICAgaWYgKHNob3VsZFJldXNlRGVmYXVsdFZpZXcp
Ci0gICAgICAgIGRvY3VtZW50LT50YWtlRE9NV2luZG93RnJvbShtX2ZyYW1lLT5kb2N1bWVudCgp
KTsKKyAgICAgICAgZG9jdW1lbnQtPnRha2VET01XaW5kb3dGcm9tKCptX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKICAgICBlbHNlCiAgICAgICAgIGRvY3VtZW50LT5jcmVhdGVET01XaW5kb3coKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGIyMzljOGFmZTQ5MDA4Mzk5MGMzYjQwNWJh
NzQ3YjlkOTE1MWViMDcuLjMxZDBhZmRjZGE2ZjM2YWE1OWFhM2RhYTVjNmYxMzY2ZWFkZDRkOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE4MTMsOSArMTgxMyw5IEBAIGJvb2wg
RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBSZWY8RXZlbnRMaXN0ZW5lCiAgICAgZWxzZSBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuZGV2aWNlbW90aW9uRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2Vv
cmllbnRhdGlvbkV2ZW50KSAmJiBkb2N1bWVudCgpKSB7CiAgICAgICAgIGlmIChpc1NhbWVTZWN1
cml0eU9yaWdpbkFzTWFpbkZyYW1lKCkpIHsKICAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZlbnQpCi0gICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS0+ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCktPmFkZERldmljZUV2ZW50TGlz
dGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyKCkuYWRkRGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kZXZpY2VNb3Rpb25Db250cm9sbGVy
KCktPmFkZERldmljZUV2ZW50TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+ZGV2aWNlTW90aW9uQ29udHJvbGxlcigpLmFkZERldmljZUV2ZW50TGlzdGVuZXIodGhp
cyk7CiAgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50
KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldh
cm5pbmcsIEFTQ0lJTGl0ZXJhbCgiQmxvY2tlZCBhdHRlbXB0IGFkZCBkZXZpY2UgbW90aW9uIG9y
IG9yaWVudGF0aW9uIGxpc3RlbmVyIGZyb20gY2hpbGQgZnJhbWUgdGhhdCB3YXNuJ3QgdGhlIHNh
bWUgc2VjdXJpdHkgb3JpZ2luIGFzIHRoZSBtYWluIHBhZ2UuIikpOwogICAgIH0KQEAgLTE5MDcs
OSArMTkwNyw5IEBAIGJvb2wgRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyCiAjaWYgRU5BQkxFKERFVklDRV9P
UklFTlRBVElPTikKICNpZiBQTEFURk9STShJT1MpCiAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCAmJiBkb2N1bWVudCgpKQotICAgICAgICBk
b2N1bWVudCgpLT5kZXZpY2VNb3Rpb25Db250cm9sbGVyKCktPnJlbW92ZURldmljZUV2ZW50TGlz
dGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPmRldmljZU1vdGlvbkNvbnRyb2xsZXIo
KS5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOwogICAgIGVsc2UgaWYgKGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCAmJiBkb2N1bWVudCgpKQot
ICAgICAgICBkb2N1bWVudCgpLT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3Zl
RGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyKCkucmVtb3ZlRGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKICNl
bHNlCiAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25F
dmVudCkgewogICAgICAgICBpZiAoRGV2aWNlTW90aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9
IERldmljZU1vdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSgpKSkKQEAgLTIwMTQsOCArMjAxNCw4
IEBAIHZvaWQgRE9NV2luZG93OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiAjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKERvY3VtZW50
KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmRldmlj
ZU1vdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnModGhpcyk7
Ci0gICAgICAgIGRvY3VtZW50LT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3Zl
QWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnModGhpcyk7CisgICAgICAgIGRvY3VtZW50LT5kZXZpY2VN
b3Rpb25Db250cm9sbGVyKCkucmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnModGhpcyk7Cisg
ICAgICAgIGRvY3VtZW50LT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVBbGxE
ZXZpY2VFdmVudExpc3RlbmVycyh0aGlzKTsKICAgICB9CiAjZWxzZQogICAgIGlmIChEZXZpY2VN
b3Rpb25Db250cm9sbGVyKiBjb250cm9sbGVyID0gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6ZnJv
bShwYWdlKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGU1MzhiYTZj
NTMxMmQ5YzgxOWViNWE3NTY2NDBhYzVhYmE4Y2QzYWIuLjZmOTA3MjQxOTQ0Yjc3ZTViMTQ0NTMz
MWUwZWU1NzVlMzI2NmJhNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTM1MTMsNyArMzUxMyw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkaWRTdGFydERyYWcoKQogICAg
IH0KIAogICAgIGlmIChhdXRvIHJhbmdlID0gZHJhZ1N0YXRlKCkuZHJhZ2dlZENvbnRlbnRSYW5n
ZSkgewotICAgICAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREcmFnZ2Vk
Q29udGVudE1hcmtlcihyYW5nZS5nZXQoKSk7CisgICAgICAgIHJhbmdlLT5vd25lckRvY3VtZW50
KCkubWFya2VycygpLmFkZERyYWdnZWRDb250ZW50TWFya2VyKCpyYW5nZSk7CiAgICAgICAgIHJl
cGFpbnRDb250ZW50c09mUmFuZ2UocmFuZ2UpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50U291cmNlLmNwcAppbmRleCAwODAxNzI5NjliZTRjYmRhYjk3OTIzMzU1YTE2Mzc5ZTQ5
YmIzNDY0Li5lNDZmZjlkOWZhZjcyYzI0MjFiMTUyZmQwZmE1NTM5YzlkYWEyNjY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtNzMsNyArNzMsNyBAQCBFeGNlcHRpb25PcjxS
ZWY8RXZlbnRTb3VyY2U+PiBFdmVudFNvdXJjZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleAogICAgIH0KIAogICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBFdmVu
dFNvdXJjZShjb250ZXh0LCBmdWxsVVJMLCBldmVudFNvdXJjZUluaXQpKTsKLSAgICBzb3VyY2Ut
PnNldFBlbmRpbmdBY3Rpdml0eShzb3VyY2UucHRyKCkpOworICAgIHNvdXJjZS0+c2V0UGVuZGlu
Z0FjdGl2aXR5KHNvdXJjZS5nZXQoKSk7CiAgICAgc291cmNlLT5zY2hlZHVsZUluaXRpYWxDb25u
ZWN0KCk7CiAgICAgc291cmNlLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gV1RGTW92
ZShzb3VyY2UpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6Om5ldHdvcmtS
ZXF1ZXN0RW5kZWQoKQogICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKICAgICAgICAgc2NoZWR1
bGVSZWNvbm5lY3QoKTsKICAgICBlbHNlCi0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRXZl
bnRTb3VyY2U6OnNjaGVkdWxlSW5pdGlhbENvbm5lY3QoKQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZv
aWQgRXZlbnRTb3VyY2U6OmNsb3NlKCkKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAg
IGVsc2UgewogICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAg
IH0KIH0KIApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmFib3J0Q29ubmVj
dGlvbkF0dGVtcHQoKQogICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfQogCiAgICAg
QVNTRVJUKG1fc3RhdGUgPT0gQ0xPU0VEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggN2Y3NGUz
MjVjZTc4NWJhZDUxYmI1N2ExNTJjMWNhMmE3MzI5NDU2Yi4uNDg1ZmQyZTMyNWMyOGEyNWY3NzMz
NGJjODk3N2EyMzEzOTZjNzNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU2LDcgKzU2LDYg
QEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKaW5kZXggZDhlNzY1Zjk0ZTExMWZkNWI3Zjk2MzhiZmQ1ODY0ZTJhN2U1NjBh
ZS4uMDA0M2NlNWZlOTFmOTQ3ODYyYWM2ODZlNjJmNmJhYmJiZjA4N2RiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcApAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1l
U2V0RWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcAppbmRleCA0Y2Y1ZTI5ZDBiOTM4NmFmZmUyNzI2YzczYWFlZTIyMzkzNTE1M2Mz
Li5iNDdmNTJiNDVjMDlhZTIwYWI1MmZiNGZiMWJjMWNiMGQyNGJiNzZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtMTYwLDcgKzE2
MCw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAvLyBJZiB3ZSBnZXQgQW5pbWF0aW9u
U3RhdGVJbnB1dDo6UmVzdGFydEFuaW1hdGlvbiB0aGVuIHdlIGZvcmNlIGEgbmV3IGFuaW1hdGlv
biwgcmVnYXJkbGVzcyBvZiBzdGF0ZS4KICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6TWFrZU5ldykgewogICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0
ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2Fp
dGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgq
dGhpcyk7CiAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
TmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9h
bmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1l
ID0gc3RkOjpudWxsb3B0OwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6
dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJh
bSkKIAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0
aW9uKSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKICAg
ICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlz
LCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0
YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSBzdGQ6Om51
bGxvcHQ7CkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0
ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAg
aWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbikgewogICAgICAg
ICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVB
dmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOworICAg
ICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1v
dmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAgICAgICAgIExPRyhBbmlt
YXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRG9uZSIsIHRoaXMsIG5hbWVGb3JTdGF0
ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRp
b25TdGF0ZTo6RG9uZTsKICAgICAgICAgZW5kQW5pbWF0aW9uKCk7CkBAIC0yMzIsNyArMjMyLDcg
QEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xF
VkVMXzIpCiAgICAgICAgICAgICBpZiAobV9hbmltYXRpb24tPnRyaWdnZXIoKSAmJiBtX2FuaW1h
dGlvbi0+dHJpZ2dlcigpLT5pc1Njcm9sbEFuaW1hdGlvblRyaWdnZXIoKSkKLSAgICAgICAgICAg
ICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5p
bWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKHRoaXMpOworICAgICAgICAgICAgICAgIG1fY29tcG9z
aXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zRGVwZW5k
ZW50T25TY3JvbGwoKnRoaXMpOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXI6CkBAIC0yNDMsNyArMjQzLDcgQEAg
dm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1
dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhh
cyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byBy
ZXNwb25kIHdpdGggc3RhcnQgdGltZQogICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUgKHRpbWUgaXMg
JWYpIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7CiAgICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRT
dHlsZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsK
KyAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAKICAgICAgICAgICAg
ICAgICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCiAg
ICAgICAgICAgICAgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT5lbGVtZW50KCkpCkBAIC0y
ODEsNyArMjgxLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5p
bWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZU9mZnNldCA9IC1tX2FuaW1hdGlvbi0+ZGVsYXkoKTsKICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24odGltZU9mZnNldCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UodGhpcywgc3RhcnRl
ZCk7CisgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25D
b250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKCp0
aGlzLCBzdGFydGVkKTsKICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3Rh
cnRlZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDM3LDcg
KzQzNyw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
blN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAgICAgICAg
IG1faXNBY2NlbGVyYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbihiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZhbHVlX29yKDApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0
YXJ0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2Vs
ZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYjExZGE1YzMwYjUxMDI5NjdlOTFkOTY2OTYzMWQwZmZm
ZmZhZTNiNi4uZGZlNGMwMzI0OGFkNmJkZDVlMWE0YjE3ZGQ0Y2JlYTZmZGFmOWEyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKQEAgLTUwMywxNyArNTAzLDE1IEBAIHVuc2lnbmVkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3Vt
CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSogYW5pbWF0
aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25z
V2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAgICAvLyBNYWtl
IHN1cmUgdGhpcyBhbmltYXRpb24gaXMgbm90IGluIHRoZSBzdGFydCB0aW1lIHdhaXRlcnMKLSAg
ICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3ZlKGFuaW1hdGlv
bik7Ci0KLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYWRkKGFuaW1hdGlvbik7Cisg
ICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0
aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYWRkKCZhbmltYXRpb24pOwog
fQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3Zv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2Fp
dGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQogewotICAgIG1f
YW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUpOworICAg
IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsK
IH0KIAogdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUo
KQpAQCAtNTI1LDcgKzUyMyw3IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnN0eWxlQXZhaWxhYmxlKCkKICAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuY2xlYXIo
KTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwg
Ym9vbCB3aWxsR2V0UmVzcG9uc2UpCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFz
ZSYgYW5pbWF0aW9uLCBib29sIHdpbGxHZXRSZXNwb25zZSkKIHsKICAgICAvLyBJZiB3aWxsR2V0
UmVzcG9uc2UgaXMgdHJ1ZSwgaXQgbWVhbnMgdGhpcyBhbmltYXRpb24gaXMgYWN0dWFsbHkgd2Fp
dGluZyBmb3IgYSByZXNwb25zZQogICAgIC8vICh3aGljaCB3aWxsIGNvbWUgaW4gYXMgYSBjYWxs
IHRvIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkuCkBAIC01NDQsMTcgKzU0MiwxNiBAQCB2b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UoQQogICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwgc29m
dHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAKICAg
ICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgogICAgIC8vCi0gICAgCisKICAgICBpZiAo
d2lsbEdldFJlc3BvbnNlKQogICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0
aW9uID0gdHJ1ZTsKIAotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZS5hZGQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UuYWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShB
bmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3Bv
bnNlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQogewotICAgIG1fYW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUpOwot
ICAgIAorICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUo
JmFuaW1hdGlvblRvUmVtb3ZlKTsKICAgICBpZiAobV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKICAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5v
dGlmaWNhdGlvbiA9IGZhbHNlOwogfQpAQCAtNTcwLDkgKzU2Nyw5IEBAIHZvaWQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSB0aW1lKQogICAg
IG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKIH0KIAotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmlt
YXRpb25CYXNlKiBhbmltYXRpb24pCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAg
ICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIGFuaW1h
dGlvbldpbGxCZVJlbW92ZWQ6ICVwIiwgdGhpcywgYW5pbWF0aW9uKTsKKyAgICBMT0coQW5pbWF0
aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIGFuaW1hdGlvbldpbGxCZVJl
bW92ZWQ6ICVwIiwgdGhpcywgJmFuaW1hdGlvbik7CiAKICAgICByZW1vdmVGcm9tQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdHlsZShhbmltYXRpb24pOwogICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKGFuaW1hdGlvbik7CkBAIC01OTMsMTQgKzU5MCwxNSBA
QCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1v
dmVkKEFuaW1hdGlvbkJhc2UqIGFuaW1hdAogfQogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05T
X0xFVkVMXzIpCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1h
dGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCisKK3ZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9u
U2Nyb2xsKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAgICBtX2FuaW1hdGlvbnNEZXBl
bmRlbnRPblNjcm9sbC5hZGQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRP
blNjcm9sbC5hZGQoJmFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9u
QmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVt
b3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlJiBhbmltYXRp
b24pCiB7Ci0gICAgbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwucmVtb3ZlKGFuaW1hdGlv
bik7CisgICAgbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwucmVtb3ZlKCZhbmltYXRpb24p
OwogfQogCiB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzY3JvbGxXYXNVcGRh
dGVkKCkKQEAgLTYxNyw2ICs2MTUsNyBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzY3JvbGxXYXNVcGRhdGVkKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0MTcwCiAgICAgdXBkYXRlQW5pbWF0aW9ucyhDYWxsU2V0Q2hhbmdl
ZCk7CiB9CisKICNlbmRpZgogCiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25D
b250cm9sbGVyKEZyYW1lJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCmluZGV4IDE1
YTRmNzJjMWU2ZDQ3NjQxNGM0ODk4NDQ1MjczYWNlMzU4OTYzZjQuLmMyM2JlYTJmMzY3MTI1YjMw
YWMzZjljYTM1MDFhMTMyYjRlODM3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaApAQCAt
OTMsMTMgKzkzLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGVuZEFuaW1hdGlvblVwZGF0ZSgpOwog
ICAgIHZvaWQgcmVjZWl2ZWRTdGFydFRpbWVSZXNwb25zZShkb3VibGUpOwogICAgIAotICAgIHZv
aWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2
b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqKTsK
KyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJik7
CisgICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25C
YXNlJik7CiAKLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShBbmltYXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOwotICAgIHZvaWQgcmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFz
ZSopOworICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
KEFuaW1hdGlvbkJhc2UmLCBib29sIHdpbGxHZXRSZXNwb25zZSk7CisgICAgdm9pZCByZW1vdmVG
cm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJik7
CiAKLSAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOworICAg
IHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlJik7CiAKICAgICB2b2lk
IHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwogCkBAIC0x
MTAsOCArMTEwLDggQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVM
XzIpCiAgICAgYm9vbCB3YW50c1Njcm9sbFVwZGF0ZXMoKSBjb25zdCB7IHJldHVybiAhbV9hbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhZGRUb0FuaW1h
dGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlKik7Ci0gICAgdm9pZCByZW1vdmVG
cm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lk
IGFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UmKTsKKyAgICB2
b2lkIHJlbW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYp
OwogCiAgICAgdm9pZCBzY3JvbGxXYXNVcGRhdGVkKCk7CiAgICAgZmxvYXQgc2Nyb2xsUG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCBkOGUx
YjJkYmRhZDI3MDk0YmMzN2UxNTU5MmMxNjZlYWVlNmEyYTQ3Li42YzU4Y2YzYzkwNmU1NGRjMGY2
ODllYTUyNTViZDhiNDNlYmJlY2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTY0LDE0ICs2NCwxNCBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIC8vIENsZWFyIHRo
ZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBp
biB0aGUgbWlkZGxlIG9mCiAgICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKICAgICAgICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZCgqdHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigp
OwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoYW5pbWF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwogICAgICAgICAgICAgYW5p
bWF0aW9uLT5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbEFu
aW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50U3R5bGUu
Z2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBleGlzdGluZyBJbXBsaWNpdEFuaW1hdGlvbiAl
cCBmb3IgcHJvcGVydHkgJXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVydHlOYW1lKHByb3ApKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxs
QmVSZW1vdmVkKGltcGxBbmltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCppbXBsQW5pbSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGVxdWFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4Nyw3
ICsxODcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlcgogICAgIFZlY3RvcjxpbnQ+IHRvQmVS
ZW1vdmVkOwogICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVz
KCkpIHsKICAgICAgICAgaWYgKCF0cmFuc2l0aW9uLT5hY3RpdmUoKSkgewotICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbi5n
ZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJl
UmVtb3ZlZCgqdHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQodHJh
bnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CiAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIlJlbW92aW5nIEltcGxpY2l0QW5pbWF0aW9uICVwIGZyb20gcmVuZGVyZXIgJXAgZm9yIHBy
b3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgcmVuZGVyZXIsIGdldFByb3BlcnR5TmFtZSh0
cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KQEAgLTI3OCw3ICsy
NzgsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25z
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdAogICAgIC8vIE1ha2UgYSBsaXN0IG9mIGFu
aW1hdGlvbnMgdG8gYmUgcmVtb3ZlZC4KICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5
ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7CiAgICAgICAgIGlmICghbmV3QW5pbWF0aW9ucy5j
b250YWlucyhhbmltYXRpb24tPm5hbWUoKS5pbXBsKCkpKSB7Ci0gICAgICAgICAgICBhbmltYXRp
b25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltYXRpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQo
KmFuaW1hdGlvbik7CiAgICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7CiAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gcmVu
ZGVyZXIgJXAiLCBhbmltYXRpb24uZ2V0KCksIHJlbmRlcmVyKTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA0MmM4YjMxZWY2YmZmYTY4Mjg1NzU4NDRkODkx
MDQ0ZmM2OTllOGIzLi4xZjc0YzkwNGQzNWZlNTg2ZTBlYzE3OWVlNWYzMjBiMjY2M2Y5NjZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04MSwxNCArODEsMTQgQEAgdm9pZCBGcmFtZTo6aW5pdFdpdGhTaW1w
bGVIVE1MRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBzdHlsZSwgY29uc3QgVVJMJiB1cmwpCiB7CiAg
ICAgbV9sb2FkZXItPmluaXRGb3JTeW50aGVzaXplZERvY3VtZW50KHVybCk7CiAKLSAgICBSZWZQ
dHI8SFRNTERvY3VtZW50PiBkb2N1bWVudCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlU3ludGhlc2l6
ZWREb2N1bWVudCh0aGlzLCB1cmwpOworICAgIGF1dG8gZG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6
OmNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoKnRoaXMsIHVybCk7CiAgICAgZG9jdW1lbnQtPnNl
dENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50Q29tcGF0aWJpbGl0eU1vZGU6OkxpbWl0ZWRRdWly
a3NNb2RlKTsKICAgICBkb2N1bWVudC0+Y3JlYXRlRE9NV2luZG93KCk7Ci0gICAgc2V0RG9jdW1l
bnQoZG9jdW1lbnQpOworICAgIHNldERvY3VtZW50KGRvY3VtZW50LnB0cigpKTsKIAotICAgIGF1
dG8gcm9vdEVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOworICAg
IGF1dG8gcm9vdEVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAK
LSAgICBhdXRvIGJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOworICAg
IGF1dG8gYm9keSA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICBpZiAo
IXN0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgYm9keS0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
c3R5bGVBdHRyLCBzdHlsZSk7CiAKQEAgLTc1NCw0ICs3NTQsNSBAQCB2b2lkIEZyYW1lOjpyZXNl
dEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4IGU1YmYwNGRiMjNkMmFjYjk3OTVhMzJl
OWE0OGU4M2IyYjM4NTJmOTMuLmE3MDNjMDkwNTM3OWRiM2Q2MWUxNjEyNTBjNTBhY2Q1NDc5NmU4
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IEZpbHRlckVm
ZmVjdFJlbmRlcmVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByCiAgICAg
ICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0
IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
MzEwODU+CiAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQot
ICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVz
b3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksIGVsZW1lbnQpOworICAgICAgICAgICAg
ZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVy
T3BlcmF0aW9uLmZyYWdtZW50KCksICplbGVtZW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5k
ZXggNTc1ZmEwNmFkZTYwYzUwMTNhZWU0NTFiN2U0M2E5MWQzMGYyZmQ1Yi4uNGUxZTIwMjk3NmJh
MTlmMTFmMGZkN2U5ZGRiYTY5MGU2NTA5YjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtODk1LDcgKzg5NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFBvCiAgICAgaWYgKCFyZW5kZXJlcigpLnRleHROb2RlKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJlcigpLnRleHROb2RlKCkp
OworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcigqcmVuZGVyZXIoKS50ZXh0Tm9kZSgp
KTsKIAogICAgIC8vIEdpdmUgYW55IGRvY3VtZW50IG1hcmtlcnMgdGhhdCB0b3VjaCB0aGlzIHJ1
biBhIGNoYW5jZSB0byBkcmF3IGJlZm9yZSB0aGUgdGV4dCBoYXMgYmVlbiBkcmF3bi4KICAgICAv
LyBOb3RlIGVuZCgpIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3Qgb25lIHBhc3QgaXQgbGlr
ZSBlbmRPZmZzZXQgYW5kIHJhbmdlcyBkby4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCmluZGV4IDAyNjA2NWE0NjZiOTgzMWIxZDk1OGMzYjNlNGU1ZGNkZWUz
MTBjNDIuLmQ3YjU2NzM4Mzc0ODg5NmJmZTRiMTlhYjk5Y2U5NjgyMWUyMjYxMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlZEdyYXBoaWNzQ29udGV4dChwYWludEluZm8uY29udGV4dCgpLCBmYWxzZSk7CiAgICAg
aWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkg
ewogICAgICAgICBhdXRvKiBwYXJlbnRDb250YWluZXIgPSBlbGVtZW50KCktPnBhcmVudE9yU2hh
ZG93SG9zdEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBs
YWNlZEVsZW1lbnQoZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihwYXJlbnRDb250YWlu
ZXIsIERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCksICplbGVtZW50KCkpKSB7CisgICAg
ICAgIGlmIChkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVtZW50KGRvY3VtZW50KCku
bWFya2VycygpLm1hcmtlcnNGb3IoKnBhcmVudENvbnRhaW5lciwgRG9jdW1lbnRNYXJrZXI6OkRy
YWdnZWRDb250ZW50KSwgKmVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIHNhdmVkR3JhcGhpY3ND
b250ZXh0LnNhdmUoKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0QWxwaGEo
MC4yNSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApp
bmRleCA5MmFmMGQ3Y2ZhYjgzOGJjYTI4NmM2N2FmMjEyYWYwNGVjYmVjOTkzLi4wYjYyZGMxMTFk
MDEyNjAxOWQxMWUzZDU1NDY4N2RjN2Q4ZDc0ZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBWZWN0b3I8c3RkOjpwYWlyPHVu
c2lnbmVkLCB1bnNpZ25lZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRDb250ZW50UmFuZ2VzQmV0d2Vl
bk9mZgogICAgIGlmICghdGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1
dG8gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IodGV4dE5vZGUoKSwg
RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KTsKKyAgICBhdXRvIG1hcmtlcnMgPSBkb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCp0ZXh0Tm9kZSgpLCBEb2N1bWVudE1hcmtlcjo6
RHJhZ2dlZENvbnRlbnQpOwogICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlLmNwcAppbmRleCBiNjU2ZmQ2ZDA4M2ExNjhiOGExZjM5MzE0Yzc2MWRlZjZkNThk
MGVlLi40NzVlMTVmMGQzODUwMDBmMmNiMDU2NTg3MWVkZWRiZjZhODc0OTE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAt
MTY1LDkgKzE2NSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVGcm9tQ2FjaGVBbmRJbnZh
bGlkYXRlRGVwZW5kZW5jaWVzKFJlbmRlckVsZW1lbnQmIHJlbmRlCiAgICAgICAgICAgICBjbGlw
cGVyLT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUocmVuZGVyZXIpOwogICAgIH0KIAotICAgIGlmICgh
cmVuZGVyZXIuZWxlbWVudCgpIHx8ICFyZW5kZXJlci5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgp
KQorICAgIGlmICghaXM8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSkKICAgICAgICAg
cmV0dXJuOwotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSByZW5kZXJl
ci5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNp
bmdUYXJnZXQoZG93bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSk7CisgICAg
YXV0byogZGVwZW5kZW5jaWVzID0gcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KGRvd25jYXN0PFNWR0VsZW1lbnQ+
KCpyZW5kZXJlci5lbGVtZW50KCkpKTsKICAgICBpZiAoIWRlcGVuZGVuY2llcykKICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCmluZGV4IDE4MTg2MDM4NTA4YzgzMDI4ODc5
M2VjOGE2ZTMxMDY5YzhlNzJjMzMuLjJkYmVhZjA2ZmM1MDdiYjAwNmRkYTBhMjQwMTZmOWY2OTMw
Y2Y0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwCkBAIC0xNzAsMTkgKzE3MCwxOSBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIHsKICAgICBT
VkdEb2N1bWVudEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJvbUVsZW1l
bnQoZWxlbWVudCgpKTsKICAgICBpZiAoIWV4dGVuc2lvbnMuaXNJZE9mUGVuZGluZ1Jlc291cmNl
KG1faWQpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7Cisg
ICAgICAgIGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgKnRoaXMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
UGVuZGluZ0VsZW1lbnRzPiBjbGllbnRzID0gZXh0ZW5zaW9ucy5yZW1vdmVQZW5kaW5nUmVzb3Vy
Y2UobV9pZCk7CiAKICAgICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBuZXcgaWQuCi0gICAgZXh0ZW5z
aW9ucy5hZGRSZXNvdXJjZShtX2lkLCB0aGlzKTsKKyAgICBleHRlbnNpb25zLmFkZFJlc291cmNl
KG1faWQsICp0aGlzKTsKIAogICAgIC8vIFVwZGF0ZSBjYWNoZWQgcmVzb3VyY2VzIG9mIHBlbmRp
bmcgY2xpZW50cy4KICAgICBmb3IgKGF1dG8qIGNsaWVudCA6ICpjbGllbnRzKSB7CiAgICAgICAg
IEFTU0VSVChjbGllbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7Ci0gICAgICAgIGV4dGVuc2lv
bnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShjbGllbnQpOworICAgICAgICBl
eHRlbnNpb25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKmNsaWVudCk7CiAg
ICAgICAgIGF1dG8qIHJlbmRlcmVyID0gY2xpZW50LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKaW5kZXggZWE5YjQ1MjExNTczMzEzMjNjYTJiMjBj
ZmY3YmY5ZDI5ZDM5MGVmZi4uNDEzYmJjMjZjOTY1ODYwNTA3ZTRmNGQ3OGQwOGU5MmJkZWU2NjMz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApA
QCAtMTc1LDcgKzE3NSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqIHBhaW50aW5nUmVzb3VyY2VGcm9tU1ZHUGFpbnQoRG9jdW1lbnQmCiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCByZWdpc3RlclBlbmRpbmdSZXNvdXJjZShTVkdEb2N1bWVudEV4dGVuc2lvbnMmIGV4
dGVuc2lvbnMsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgZXh0ZW5zaW9ucy5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICZlbGVtZW50KTsKKyAgICBl
eHRlbnNpb25zLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgZWxlbWVudCk7CiB9CiAKIGJvb2wgU1ZH
UmVzb3VyY2VzOjpidWlsZENhY2hlZFJlc291cmNlcyhjb25zdCBSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcAppbmRleCA4M2Q5MTJlZWJlOGZlNDI4
Mzg2OGQyZDEzYWRjNDM5MjhkYTI1OTY3Li42OTQzM2FhMjdiMzFmZmQzYjViOGU4ZjI2MTc3N2I0
N2UxYjZkYzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlc0NhY2hlLmNwcApAQCAtMTY5LDggKzE2OSw4IEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2Fj
aGU6OnJlc291cmNlRGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJiByZXNvdXJj
ZSkKIAogICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVu
ZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAg
ICAgICBFbGVtZW50JiByZXNvdXJjZUVsZW1lbnQgPSByZXNvdXJjZS5lbGVtZW50KCk7Ci0gICAg
ICAgIEVsZW1lbnQqIGNsaWVudEVsZW1lbnQgPSBpdC5rZXktPmVsZW1lbnQoKTsKLSAgICAgICAg
Y2xpZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGlu
Z1Jlc291cmNlKHJlc291cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLCBjbGllbnRFbGVtZW50
KTsKKyAgICAgICAgRWxlbWVudCYgY2xpZW50RWxlbWVudCA9ICppdC5rZXktPmVsZW1lbnQoKTsK
KyAgICAgICAgY2xpZW50RWxlbWVudC5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LmdldElkQXR0cmlidXRlKCksIGNsaWVu
dEVsZW1lbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAppbmRl
eCAxNzY5MGNjZDY3Nzc5YzIzYjkzNzc2MzA4NDQ1NDYyZDdhYTkyMmRkLi5lNmYwNzE0YTQzN2E1
NDhmNWExNDFkMjU3OTc4ZTU3ZThkYTY0NTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3Bl
LmNwcApAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQgU2NvcGU6OmNvbGxlY3RBY3RpdmVTdHlsZVNo
ZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQogICAgICAgICAgICAgaWYg
KHBpLmlzWFNMKCkgJiYgIW1fZG9jdW1lbnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewog
ICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRp
bmcgaXMgZmluaXNoZWQuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnBhcnNpbmco
KSkKLSAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybSgmcGkp
OworICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNmb3JtKHBpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggZWI4MTU0Y2Y1YzJl
ZTNmOTBlYWViNDM5MTIzMGU5YzA1M2IyYTNiNy4uY2U0MmMyMTcxNGY2MmU0MGMyMjM3ZjA2MzY5
ODJlYWYxZWMzYTQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50
RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5z
aW9ucy5jcHAKQEAgLTUxLDI3ICs1MSwyNSBAQCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6On5TVkdE
b2N1bWVudEV4dGVuc2lvbnMoKQogewogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
YWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsK
LSAgICBtX3RpbWVDb250YWluZXJzLmFkZChlbGVtZW50KTsKKyAgICBtX3RpbWVDb250YWluZXJz
LmFkZCgmZWxlbWVudCk7CiAgICAgaWYgKG1fYXJlQW5pbWF0aW9uc1BhdXNlZCkKLSAgICAgICAg
ZWxlbWVudC0+cGF1c2VBbmltYXRpb25zKCk7CisgICAgICAgIGVsZW1lbnQucGF1c2VBbmltYXRp
b25zKCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVUaW1lQ29udGFp
bmVyKFNWR1NWR0VsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
cmVtb3ZlVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fdGlt
ZUNvbnRhaW5lcnMucmVtb3ZlKGVsZW1lbnQpOworICAgIG1fdGltZUNvbnRhaW5lcnMucmVtb3Zl
KCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFJlc291cmNl
KGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNv
dXJjZSkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRSZXNvdXJjZShjb25zdCBBdG9t
aWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYgcmVzb3VyY2UpCiB7Ci0g
ICAgQVNTRVJUKHJlc291cmNlKTsKLQogICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFJlcGxhY2VzIHJlc291cmNlIGlmIGFscmVhZHkgcHJlc2VudCwgdG8g
aGFuZGxlIHBvdGVudGlhbCBpZCBjaGFuZ2VzCi0gICAgbV9yZXNvdXJjZXMuc2V0KGlkLCByZXNv
dXJjZSk7CisgICAgbV9yZXNvdXJjZXMuc2V0KGlkLCAmcmVzb3VyY2UpOwogfQogCiB2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBp
ZCkKQEAgLTk3LDcgKzk1LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnN0YXJ0QW5p
bWF0aW9ucygpCiAgICAgLy8gRklYTUU6IFdlIGhvbGQgYSByZWYgcG9pbnRlcnMgdG8gcHJldmVu
dCBhIHNoYWRvdyB0cmVlIGZyb20gZ2V0dGluZyByZW1vdmVkIG91dCBmcm9tIHVuZGVybmVhdGgg
dXMuCiAgICAgLy8gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgcmVmYWN0b3IgdGhlIHVzZS1lbGVt
ZW50IHRvIGF2b2lkIHRoaXMuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi81MzcwNAogICAgIFZl
Y3RvcjxSZWZQdHI8U1ZHU1ZHRWxlbWVudD4+IHRpbWVDb250YWluZXJzOwotICAgIHRpbWVDb250
YWluZXJzLmFwcGVuZFJhbmdlKG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKSwgbV90aW1lQ29udGFp
bmVycy5lbmQoKSk7CisgICAgY29weVRvVmVjdG9yKG1fdGltZUNvbnRhaW5lcnMsIHRpbWVDb250
YWluZXJzKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB0aW1lQ29udGFpbmVycykKICAgICAg
ICAgZWxlbWVudC0+dGltZUNvbnRhaW5lcigpLmJlZ2luKCk7CiB9CkBAIC0xNDQsMTkgKzE0Miwx
NyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogICAgIHJlcG9ydE1lc3NhZ2UobV9kb2N1bWVudCwgTWVzc2FnZUxldmVsOjpF
cnJvciwgIkVycm9yOiAiICsgbWVzc2FnZSk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjphZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQo
ZWxlbWVudCk7Ci0KICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQsIG51bGxwdHIpOwogICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ0VsZW1lbnRzPigpOwotICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUtPmFkZChlbGVtZW50KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQo
JmVsZW1lbnQpOwogCi0gICAgZWxlbWVudC0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcygpOworICAg
IGVsZW1lbnQuc2V0SGFzUGVuZGluZ1Jlc291cmNlcygpOwogfQogCiBib29sIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6aXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQp
IGNvbnN0CkBAIC0xNjcsNDkgKzE2Myw0MyBAQCBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
aXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiAgICAg
cmV0dXJuIG1fcGVuZGluZ1Jlc291cmNlcy5jb250YWlucyhpZCk7CiB9CiAKLWJvb2wgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBl
bGVtZW50KSBjb25zdAorYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQ
ZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBh
bGdvcml0aG0gdGFrZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBwZW5kaW5n
IHJlc291cmNlcyBhbmQgbmVlZCBub3QuCiAgICAgLy8gSWYgcGVyZm9ybWFuY2UgYmVjb21lcyBh
biBpc3N1ZSB3ZSBjYW4ga2VlcCBhIGNvdW50ZWQgc2V0IG9mIGVsZW1lbnRzIGFuZCBhbnN3ZXIg
dGhlIHF1ZXN0aW9uIGVmZmljaWVudGx5LgotICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBmb3Ig
KGF1dG8mIGVsZW1lbnRzIDogbV9wZW5kaW5nUmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAg
IEFTU0VSVChlbGVtZW50cyk7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVt
ZW50KSkKKyAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucygmZWxlbWVudCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
Ojppc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcm
IGlkKSBjb25zdAogewotICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIGlmICghaXNJZE9mUGVu
ZGluZ1Jlc291cmNlKGlkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1f
cGVuZGluZ1Jlc291cmNlcy5nZXQoaWQpLT5jb250YWlucyhlbGVtZW50KTsKKyAgICByZXR1cm4g
bV9wZW5kaW5nUmVzb3VyY2VzLmdldChpZCktPmNvbnRhaW5zKCZlbGVtZW50KTsKIH0KIAotdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2li
bGUoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpjbGVhckhh
c1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYg
KCFpc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhlbGVtZW50KSkKLSAgICAgICAgZWxlbWVu
dC0+Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgICAgIGVsZW1lbnQuY2xlYXJIYXNQ
ZW5kaW5nUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICAvLyBSZW1vdmUg
dGhlIGVsZW1lbnQgZnJvbSBwZW5kaW5nIHJlc291cmNlcy4KLSAgICBpZiAoIW1fcGVuZGluZ1Jl
c291cmNlcy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7Cisg
ICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMuaXNFbXB0eSgpICYmIGVsZW1lbnQuaGFzUGVuZGlu
Z1Jlc291cmNlcygpKSB7CiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVk
OwogICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9wZW5kaW5nUmVzb3VyY2VzKSB7CiAg
ICAgICAgICAgICBQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gcmVzb3VyY2UudmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFl
bGVtZW50cy0+aXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVt
ZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVsZW1lbnQpOwogICAgICAgICAg
ICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQu
YXBwZW5kKHJlc291cmNlLmtleSk7CiAgICAgICAgIH0KQEAgLTIyOSw3ICsyMTksNyBAQCB2b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAg
ICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgZWxlbWVu
dHMtPnJlbW92ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVsZW1l
bnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlc291cmNlLmtleSk7CiAgICAgICAgIH0KQEAgLTI4NCw0
MCArMjc0LDI5IEBAIEVsZW1lbnQqIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVu
dEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbE1hcChjCiAgICAgcmV0dXJuIGVsZW1lbnQ7
CiB9CiAKLUhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9m
RWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkg
Y29uc3QKK0hhc2hTZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9m
RWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGNvbnN0IGF1dG8g
aXQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAg
aWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLmdldCgmcmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5j
aW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCit2b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJl
ZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAg
QVNTRVJUKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgQVNTRVJUKHJlZmVyZW5jZWRFbGVtZW50
KTsKLQotICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZWxlbWVudHMgPSBtX2VsZW1lbnRE
ZXBlbmRlbmNpZXMuZ2V0KHJlZmVyZW5jZWRFbGVtZW50KSkgewotICAgICAgICBlbGVtZW50cy0+
YWRkKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGVsZW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0PFNWR0VsZW1lbnQqPj4oKTsK
LSAgICBlbGVtZW50cy0+YWRkKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgbV9lbGVtZW50RGVw
ZW5kZW5jaWVzLnNldChyZWZlcmVuY2VkRWxlbWVudCwgV1RGTW92ZShlbGVtZW50cykpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuc3VyZSgmcmVmZXJlbmNlZEVs
ZW1lbnQsIFsmcmVmZXJlbmNpbmdFbGVtZW50XSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEhhc2hTZXQ8U1ZHRWxlbWVudCo+PihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U1ZHRWxl
bWVudCo+IHsgJnJlZmVyZW5jaW5nRWxlbWVudCB9KTsKKyAgICB9KTsKKyAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQoJnJlZmVy
ZW5jaW5nRWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVB
bGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1l
bnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNl
c0ZvckVsZW1lbnQoU1ZHRWxlbWVudCYgcmVmZXJlbmNpbmdFbGVtZW50KQogewogICAgIFZlY3Rv
cjxTVkdFbGVtZW50Kj4gdG9CZVJlbW92ZWQ7CiAKICAgICBmb3IgKGF1dG8mIGRlcGVuZGVuY3kg
OiBtX2VsZW1lbnREZXBlbmRlbmNpZXMpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNl
ZEVsZW1lbnQgPSBkZXBlbmRlbmN5LmtleTsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4m
IHJlZmVyZW5jaW5nRWxlbWVudHMgPSAqZGVwZW5kZW5jeS52YWx1ZTsKLSAgICAgICAgcmVmZXJl
bmNpbmdFbGVtZW50cy5yZW1vdmUocmVmZXJlbmNpbmdFbGVtZW50KTsKKyAgICAgICAgYXV0byYg
cmVmZXJlbmNpbmdFbGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOworICAgICAgICByZWZlcmVu
Y2luZ0VsZW1lbnRzLnJlbW92ZSgmcmVmZXJlbmNpbmdFbGVtZW50KTsKICAgICAgICAgaWYgKHJl
ZmVyZW5jaW5nRWxlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBw
ZW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChk
ZXBlbmRlbmN5LmtleSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9CZVJl
bW92ZWQpCkBAIC0zMzMsMTEgKzMxMiw5IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZWJ1aWxkRWxlbWVudHMoKQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJUYXJn
ZXREZXBlbmRlbmNpZXMoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgYXV0
byBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKCZyZWZlcmVuY2VkRWxlbWVudCk7Ci0g
ICAgaWYgKGl0ID09IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKKyAgICBhdXRvKiByZWZl
cmVuY2luZ0VsZW1lbnRzID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdldCgmcmVmZXJlbmNlZEVs
ZW1lbnQpOworICAgIGlmICghcmVmZXJlbmNpbmdFbGVtZW50cykKICAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChpdC0+a2V5ID09ICZyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgSGFzaFNldDxT
VkdFbGVtZW50Kj4qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAg
Zm9yIChhdXRvKiBlbGVtZW50IDogKnJlZmVyZW5jaW5nRWxlbWVudHMpIHsKICAgICAgICAgbV9y
ZWJ1aWxkRWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOwogICAgICAgICBlbGVtZW50LT5jYWxsQ2xl
YXJUYXJnZXQoKTsKQEAgLTM2MSwyMyArMzM4LDI1IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpyZWJ1aWxkQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVm
CiAgICAgICAgIGVsZW1lbnQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoWExpbmtOYW1lczo6aHJlZkF0
dHIpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJl
ZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCit2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQo
U1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgbV9lbGVtZW50RGVwZW5kZW5j
aWVzLnJlbW92ZShyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgbV9yZWJ1aWxkRWxlbWVudHMucmVt
b3ZlRmlyc3QocmVmZXJlbmNlZEVsZW1lbnQpOworICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5y
ZW1vdmUoJnJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICBtX3JlYnVpbGRFbGVtZW50cy5yZW1vdmVG
aXJzdCgmcmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLXZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdG
b250RmFjZUVsZW1lbnQqIGVsZW1lbnQpCisKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpy
ZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3N2Z0ZvbnRG
YWNlRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucmVnaXN0ZXJTVkdGb250RmFjZUVs
ZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChtX3N2Z0Zv
bnRGYWNlRWxlbWVudHMuY29udGFpbnMoZWxlbWVudCkpOwotICAgIG1fc3ZnRm9udEZhY2VFbGVt
ZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3ZnRm9udEZhY2VFbGVtZW50cy5j
b250YWlucygmZWxlbWVudCkpOworICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5yZW1vdmUoJmVs
ZW1lbnQpOwogfQorCiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oCmluZGV4IDZhNTI3NzA0OWM1YjI1NTAyNWY5OWE3MmUxOWYyY2UwODFiZDFk
ZWIuLjVjMjFlNTUyMGZkNzQzMDY4MGU4N2FjNGU1MDY0NmI2ZGI0YTc2ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKQEAgLTQzLDEwICs0MywxMCBAQCBw
dWJsaWM6CiAgICAgZXhwbGljaXQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKERvY3VtZW50Jik7CiAg
ICAgflNWR0RvY3VtZW50RXh0ZW5zaW9ucygpOwogICAgIAotICAgIHZvaWQgYWRkVGltZUNvbnRh
aW5lcihTVkdTVkdFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NW
R0VsZW1lbnQqKTsKKyAgICB2b2lkIGFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYpOwor
ICAgIHZvaWQgcmVtb3ZlVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50Jik7CiAKLSAgICB2b2lk
IGFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyKik7CisgICAgdm9pZCBhZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYpOwogICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UoY29u
c3QgQXRvbWljU3RyaW5nJiBpZCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJl
c291cmNlQnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKIApAQCAtNjEsMTkgKzYx
LDE5IEBAIHB1YmxpYzoKIAogICAgIFNWR1Jlc291cmNlc0NhY2hlJiByZXNvdXJjZXNDYWNoZSgp
IHsgcmV0dXJuICptX3Jlc291cmNlc0NhY2hlOyB9CiAKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQq
Piogc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRF
bGVtZW50KSBjb25zdDsKLSAgICB2b2lkIGFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdF
bGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50
KTsKLSAgICB2b2lkIHJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1l
bnQqKTsKKyAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5n
VGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdDsKKyAgICB2b2lkIGFk
ZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2luZ0VsZW1lbnQs
IFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICB2b2lkIHJlbW92ZUFsbFRhcmdl
dFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQmKTsKICAgICB2b2lkIHJlYnVpbGRBbGxF
bGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Jik7Ci0gICAgdm9pZCByZW1vdmVB
bGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Kik7CisgICAgdm9pZCByZW1v
dmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Jik7CiAKICAgICB2b2lk
IGNsZWFyVGFyZ2V0RGVwZW5kZW5jaWVzKFNWR0VsZW1lbnQmKTsKICAgICB2b2lkIHJlYnVpbGRF
bGVtZW50cygpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBjb25zdCBIYXNoU2V0PFNW
R0ZvbnRGYWNlRWxlbWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9zdmdGb250RmFjZUVsZW1lbnRzOyB9Ci0gICAgdm9pZCByZWdpc3RlclNWR0ZvbnRGYWNlRWxl
bWVudChTVkdGb250RmFjZUVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTVkdGb250RmFj
ZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlclNWR0ZvbnRG
YWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTVkdG
b250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50Jik7CiAjZW5kaWYKIAogcHJpdmF0ZToK
QEAgLTk1LDExICs5NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBIYXNoTWFwIGNvbnRhaW5z
IGEgbGlzdCBvZiBwZW5kaW5nIHJlc291cmNlcy4gUGVuZGluZyByZXNvdXJjZXMsIGFyZSBzdWNo
CiAgICAgLy8gd2hpY2ggYXJlIHJlZmVyZW5jZWQgYnkgYW55IG9iamVjdCBpbiB0aGUgU1ZHIGRv
Y3VtZW50LCBidXQgZG8gTk9UIGV4aXN0IHlldC4KICAgICAvLyBGb3IgaW5zdGFuY2UsIGR5bmFt
aWNhbGx5IGJ1aWxkIGdyYWRpZW50cyAvIHBhdHRlcm5zIC8gY2xpcHBlcnMuLi4KLSAgICB2b2lk
IGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Kik7Cisg
ICAgdm9pZCBhZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVu
dCYpOwogICAgIGJvb2wgaXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYg
aWQpIGNvbnN0OwotICAgIGJvb2wgaXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCosIGNvbnN0IEF0
b21pY1N0cmluZyYgaWQpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2Vz
SWZQb3NzaWJsZShFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdS
ZXNvdXJjZXMoRWxlbWVudCopOworICAgIGJvb2wgaXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCYs
IGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OworICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5n
UmVzb3VyY2VzSWZQb3NzaWJsZShFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVFbGVtZW50RnJv
bVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5n
RWxlbWVudHM+IHJlbW92ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKTsK
IAogICAgIC8vIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3Igc2NoZWR1
bGluZyBhIHBlbmRpbmcgcmVzb3VyY2UgdG8gYmUgcmVtb3ZlZC4KQEAgLTEwNyw3ICsxMDcsNyBA
QCBwdWJsaWM6CiAgICAgRWxlbWVudCogcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
Rm9yUmVtb3ZhbE1hcChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29s
IGlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29s
IGlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmKSBjb25zdDsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGVuZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1v
dmFsKGNvbnN0IEF0b21pY1N0cmluZyYpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3Bw
CmluZGV4IDcwMTg5ODFiOTJiOTZkZmJiMDVhYmE1NWQxMWU2YmMxZWYxNzE4YTguLmRlMDFhMjJk
ZDhhODgyMDAyMWI2OWQwZGQ3YWUwZGJlNTlkOWZmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAKQEAgLTI5NCw3ICsyOTQsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAg
ICAgIG1fc3ZnUmFyZURhdGEgPSBudWxscHRyOwogICAgIH0KICAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5yZWJ1aWxkQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRo
aXMpOwotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1l
bnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0aGlzKTsKIH0K
IAogaW50IFNWR0VsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKQEAgLTM3NSw3ICszNzUsNyBAQCB2
b2lkIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiAK
ICAgICBpZiAod2FzSW5Eb2N1bWVudCkgewogICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5jbGVhclRhcmdldERlcGVuZGVuY2llcygqdGhpcyk7Ci0gICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9y
VGFyZ2V0KHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5y
ZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7CiAgICAgfQogICAgIGlu
dmFsaWRhdGVJbnN0YW5jZXMoKTsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgU1ZHRWxl
bWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKQogICAgICAgICBBU1NFUlQoY2xp
ZW50RWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgaWYgKGNsaWVudEVs
ZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgewogICAgICAgICAgICAgY2xpZW50RWxlbWVu
dC0+YnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuY2xlYXJI
YXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShjbGllbnRFbGVtZW50KTsKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgqY2xpZW50RWxl
bWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcAppbmRleCBlYzc0YThkMGU1YWI2YjVhZDk4YTg4ZTc4ZTEyYzRiYTYyNWQ2YWU3
Li5iMmMzMjM3Y2E5ZjNkNmQ0YTM2NWViY2Q5MGRjODlhMGQ3Mzg4OTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogICAgICAgICBtX2NhY2hl
ZEltYWdlID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2Vz
Rm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnJlcXVlc3RJ
bWFnZVJlc291cmNlKCkKQEAgLTEwNywxMyArMTA3LDEzIEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHJlcXVlc3RJbWFnZVJlc291cmNlKCk7CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNl
KGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJUKGhhc1Bl
bmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhcmdldC0+aXNT
VkdFbGVtZW50KCkpIHsKKyAgICB9IGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCp0YXJnZXQpKSB7
CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5j
aWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRz
IHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0
byBpdC4KLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVu
dFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOwor
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJl
bmNpbmdUYXJnZXQoKnRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9
CiAKICAgICBpbnZhbGlkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udEZhY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwCmluZGV4IGI4YmE5YjA3ZmUyYTY0MDkzNjlmMWFjODQ1MmI1YTVhZThhYzY4ZWMuLjQ2
Mzg4MDYxNDlkNWY1M2NhYjhmOGMzM2I3MzNmZDY0ZjQ4YWVmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCkBAIC0yNzgsNyArMjc4LDcgQEAgTm9kZTo6SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2QKICAgICAgICAgQVNTRVJUKCFtX2ZvbnRFbGVtZW50KTsKICAgICAgICAg
cmV0dXJuIEluc2VydGlvbkRvbmU7CiAgICAgfQotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KCp0aGlz
KTsKIAogICAgIHJlYnVpbGRGb250RmFjZSgpOwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwpA
QCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJiByb290UGFyZW50KQogCiAgICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0
ZWQoKSkgewogICAgICAgICBtX2ZvbnRFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkudW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCh0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkudW5yZWdpc3Rl
clNWR0ZvbnRGYWNlRWxlbWVudCgqdGhpcyk7CiAgICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRh
YmxlUHJvcGVydGllcygpLmNsZWFyKCk7CiAKICAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3Bl
KCkuZGlkQ2hhbmdlU3R5bGVTaGVldEVudmlyb25tZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
UGF0aEVsZW1lbnQuY3BwCmluZGV4IGZmN2Q0ODcyZDY5NDU2N2U3NTJjM2ZjZmE3MDkwZjdjZmNk
YTQ3MTguLmRmMjUyYmYwMmI2OGI0OGQ2Njk5OTk4YmU4ZDVmMDJhNWQyNTFkNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCkBAIC02NSwxNyArNjUsMTcgQEAgdm9pZCBT
VkdNUGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICBFbGVtZW50KiB0YXJn
ZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwg
ZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAvLyBEbyBub3Qg
cmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3Vy
Y2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRp
bmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgqdGhpcywgaWQpKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOwor
ICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jl
c291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNl
cygpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkg
eworICAgIH0gZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oKnRhcmdldCkpIHsKICAgICAgICAgLy8g
UmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkg
Y2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQv
cmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAg
ICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdU
YXJnZXQodGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7CisgICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgq
dGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnRhcmdldCkpOwogICAgIH0KIAogICAgIHRhcmdl
dFBhdGhDaGFuZ2VkKCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50Ojpi
dWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAKIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpjbGVhclJlc291
cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1l
bnQoKnRoaXMpOwogfQogCiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR01Q
YXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAppbmRleCBlMjIzMGY0MTJkZDgxMzViZjI1NzYx
NWJlYjhlZTQ4NDc3ZmRlMDRlLi5mNzE2NDcwYzJiMzk1MGRiMjI1ODEwYmMzMGVjNGExODgyNzBl
NzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI3Miw3ICsyNzIs
NyBAQCB2b2lkIFNWR1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKQog
ewogICAgIC8vIDxtcGF0aD4gY2FuIG9ubHkgcmVmZXJlbmNlIDxwYXRoPiBidXQgdGhpcyBkZXBl
bmRlbmN5IGlzIG5vdCBoYW5kbGVkIGluCiAgICAgLy8gbWFya0ZvckxheW91dEFuZFBhcmVudFJl
c291cmNlSW52YWxpZGF0aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBhdGggZGVwZW5kZW5jaWVzIG1h
bnVhbGx5LgotICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVzID0gZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFy
Z2V0KHRoaXMpKSB7CisgICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMg
PSBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNp
bmdUYXJnZXQoKnRoaXMpKSB7CiAgICAgICAgIGZvciAoYXV0byogZWxlbWVudCA6ICpkZXBlbmRl
bmNpZXMpIHsKICAgICAgICAgICAgIGlmIChpczxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KSkK
ICAgICAgICAgICAgICAgICBkb3duY2FzdDxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KS50YXJn
ZXRQYXRoQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IGJm
YTkxNzJlODkxY2M2NDMwOGYzNDYyNGU3NGU1ZWU5YjNhN2EzMjguLjk0MDUwZGI5M2FhZWZlZmMy
OTRjNDc0YjYxZGViNGQxZjZhM2VkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5j
cHAKQEAgLTc5LDcgKzc5LDcgQEAgaW5saW5lIFNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3UKIHsKICAgICBBU1NF
UlQoaGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSk7CiAgICAgcmVnaXN0ZXJBbmltYXRlZFBy
b3BlcnRpZXNGb3JTVkdTVkdFbGVtZW50KCk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiBSZWY8U1ZHU1ZHRWxlbWVu
dD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50JiBkb2N1bWVudCkKQEAgLTk2LDE0ICs5NiwxNCBAQCBTVkdTVkdFbGVtZW50Ojp+U1ZH
U1ZHRWxlbWVudCgpCiB7CiAgICAgaWYgKG1fdmlld1NwZWMpCiAgICAgICAgIG1fdmlld1NwZWMt
PnJlc2V0Q29udGV4dEVsZW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1
bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICBkb2N1bWVudCgpLnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIoKnRoaXMpOwog
fQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBv
bGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewotICAgIG9sZERvY3VtZW50LnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1l
bnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBv
bGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlz
KTsKKyAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KCp0aGlzKTsKICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9s
ZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiB9CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJl
bmRlclN0eWxlJiYgc3R5bAogTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdT
VkdFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIHsKICAg
ICBpZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFRpbWVDb250YWluZXIodGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFRpbWVDb250YWluZXIoKnRoaXMpOwogICAg
ICAgICBpZiAoIWRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFyZUFuaW1hdGlvbnNQ
YXVzZWQoKSkKICAgICAgICAgICAgIHVucGF1c2VBbmltYXRpb25zKCk7CiAKQEAgLTQ4Niw3ICs0
ODYsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NWR0VsZW1lbnQ6
Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBybwogdm9pZCBTVkdTVkdFbGVtZW50OjpyZW1v
dmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIGlmIChyb290UGFyZW50
LmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcigqdGhpcyk7CiAgICAgICAgIHBhdXNl
QW5pbWF0aW9ucygpOwogICAgIH0KICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnJlbW92ZWRGcm9t
KHJvb3RQYXJlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKaW5kZXggYjA4
MzczNjE1MTM3MDY4MzAxYWUwZmRlYjdlOWM5YTk5MDlmMmE0MS4uNmY5ZDZlM2ZjMWYxMjNmZGZm
NzFkZWE1ZGY4YmVhNDJmMWFiMTJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RSZWZFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQu
Y3BwCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6ZGV0YWNoVGFyZ2V0
KCkKICAgICBTdHJpbmcgaWQ7CiAgICAgU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJv
bUlSSVN0cmluZyhocmVmKCksIGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCFpZC5pc0VtcHR5
KCkpCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogfQogCiB2b2lkIFNWR1RSZWZFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAg
QVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCmluZGV4IDc1MTdlOGI4YTYw
MTBlNmFhNmQ3ZTQ0Mzc4OWQ4OWZmODQ2OGRiNDEuLjgwNmFlODc2NTg5ZjM3ZmQ5M2MzMTNjOWUy
OGIwYzY2OTc1MjMwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0
aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQu
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKICNp
bmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgor
I2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIFNWR1RleHRQ
YXRoRWxlbWVudDo6flNWR1RleHRQYXRoRWxlbWVudCgpCiAKIHZvaWQgU1ZHVGV4dFBhdGhFbGVt
ZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7
CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVm
ZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiBib29sIFNWR1RleHRQYXRoRWxlbWVudDo6
aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0x
NTksMTcgKzE2MCwxNyBAQCB2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVz
b3VyY2UoKQogICAgIEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxl
bWVudEZyb21JUklTdHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIGlmICghdGFy
Z2V0KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBh
bHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAgICAg
aWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0
aGlzLCBpZCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBl
bmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAg
IEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlm
ICh0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcpKSB7CiAgICAgICAgIC8vIFJl
Z2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNo
YW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3Jl
cGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFy
Z2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRo
aXMsIGRvd25jYXN0PFNWR1BhdGhFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKaW5kZXggNWU3MzIzODBjNWQ4MDgzODhmMzhiYThj
MzAxYTJlZTljZTk5ODMzYS4uZGRmNjU2YzI1MWU4ZTNkMjBiZmQ0OTVjNGJjM2YxMTA5MDcwYWE2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtMjM2LDcgKzIzNiw3IEBA
IHZvaWQgU1ZHVXNlRWxlbWVudDo6dXBkYXRlU2hhZG93VHJlZSgpCiAgICAgU3RyaW5nIHRhcmdl
dElEOwogICAgIGF1dG8qIHRhcmdldCA9IGZpbmRUYXJnZXQoJnRhcmdldElEKTsKICAgICBpZiAo
IXRhcmdldCkgewotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQ
ZW5kaW5nUmVzb3VyY2UodGFyZ2V0SUQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UodGFyZ2V0SUQsICp0aGlzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCA4NjJkNjhhYjRkNTI3MDM4YTQ3YzM1MjE3OTUzYTg5
YTg1M2E3OGY0Li42ZTg1ODNiYmE0Y2JjM2IzMGZjYzg2MTNkY2QyMzVkN2IyNTUyNjRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAt
MTU3LDcgKzE1Nyw3IEBAIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogCiB2b2lk
IFNWR1NNSUxFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVs
ZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiB2b2lkIFNWR1NNSUxF
bGVtZW50OjpjbGVhclRhcmdldCgpCkBAIC0xOTIsMTcgKzE5MiwxNyBAQCB2b2lkIFNWR1NNSUxF
bGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSgpCiAKICAgICBpZiAoIXN2Z1RhcmdldCkgewog
ICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBw
ZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAgIGlmIChkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgqdGhpcywgaWQp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVz
b3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQo
aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4g
QW55IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5
b3V0L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5j
aW5nVGFyZ2V0KHRoaXMsIHN2Z1RhcmdldCk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgKnN2Z1Rhcmdl
dCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOWY4
YzI0YTIyOTI5ZTFjYzkxYWQzZmIzYThlNjI4ZWQzMTgzNmJmZS4uYzUwMTM0NjFkNGIxMzIwMTg0
ODJlZDc1YzRiYzkxOWFmYjA0MDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMTM3MCw3ICsxMzcwLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6
bWFya2VyQ291bnRGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWEKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBub2RlLmRvY3VtZW50KCku
ZnJhbWUoKS0+ZWRpdG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwotICAgIHJl
dHVybiBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5
cGVzKS5zaXplKCk7CisgICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0Zvcihub2RlLCBtYXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCiBFeGNlcHRpb25PcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyKj4gSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlJiBub2RlLCBjb25zdCBT
dHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KQpAQCAtMTM4Myw3ICsxMzgzLDcgQEAg
RXhjZXB0aW9uT3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IEludGVybmFsczo6bWFya2VyQXQo
Tm9kZSYgbm9kZSwgY29uc3QgU3RyaW4KIAogICAgIG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5l
ZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAKLSAgICBWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2Vycygp
Lm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNG
b3Iobm9kZSwgbWFya2VyVHlwZXMpOwogICAgIGlmIChtYXJrZXJzLnNpemUoKSA8PSBpbmRleCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1hcmtlcnNbaW5kZXhdOwpAQCAt
MTQzOSw3ICsxNDM5LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmR1bXBNYXJr
ZXJSZWN0cyhjb25zdCBTdHJpbmcmIG1hcmtlclR5cGVTdHJpbmcpCiB2b2lkIEludGVybmFsczo6
YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKIHsK
ICAgICByYW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0
Y2hNYXJrZXIoJnJhbmdlLCBpc0FjdGl2ZSk7CisgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIocmFuZ2UsIGlzQWN0aXZlKTsKIH0KIAogRXhjZXB0
aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVk
KGJvb2wgZmxhZykKQEAgLTI2MTUsNDIgKzI2MTUsNiBAQCB2b2lkIEludGVybmFsczo6c2V0VG9w
Q29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKICAgICBkb2N1bWVudC0+cGFnZSgpLT5z
ZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KTsKIH0KIAotI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKLQotdm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29u
dGV4dERvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGRvY3VtZW50LT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7
Ci19Ci0KLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3Vt
ZW50LT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQot
dm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndl
YmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi12b2lkIElu
dGVybmFsczo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXREaWRF
eGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi0jZW5kaWYKLQogdm9pZCBJ
bnRlcm5hbHM6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxv
bmcgcXVvdGEpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCAyYjgxNDYwNGRjNWVlYzdiMzhlNzk0
NjMzMDAzMjg3NWJkYWVkZjAyLi5kYTI3NzRlMGRlNjczM2I2ZjAxZjhiNGRhMmExYjZkMGQ0NzFk
OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTM1NiwxMyArMzU2LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOwogCi0jaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCYpOwotICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50Jik7Ci0gICAgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50Jik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JU
IHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyk7
CiAKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQ
b2xpY3koY29uc3QgU3RyaW5nJiBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCmluZGV4IGU4N2E3NGM1OGFjNWMyYzZmMWY5OGIxZWM4YmVmYWU0MTExOTEyMWQuLmM4MzAw
OTAyM2NhY2FhNTE5YTFmNDAxMWI4OTA5OTJhNmZhMmI3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwKQEAgLTMzMCwxMSArMzMwLDYgQEAgZW51bSBFdmVudFRocm90dGxpbmdC
ZWhhdmlvciB7CiAKICAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldCh1bnJlc3RyaWN0ZWQgZmxv
YXQgY29udGVudEluc2V0KTsKIAotICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9p
ZCB3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwot
ICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NvbmRpdGlvbmFsPUZVTExT
Q1JFRU5fQVBJXSB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCBlbGVtZW50KTsKLSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZvaWQgd2Via2l0
RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0KICAgICB2b2lk
IHNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEp
OwogCiAgICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5
UG9saWN5KERPTVN0cmluZyBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4
IDgyOTAzMTQwNWRiYjdmN2ViNDEzOWE0N2YyMDViZTZkNjdjNGRhMGEuLmJiNGExODVmZDMwNzQz
MDE0YzVjODk5NDhkYjNlMDRjNDY0YjRhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAK
QEAgLTkxLDcgKzkxLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFdvcmtlcj4+IFdvcmtlcjo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEpTQzo6UnUKICAgICB3b3JrZXItPm1f
c2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID0gc2hvdWxkQnlwYXNz
TWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5OwogCiAgICAgLy8gVGhlIHdvcmtlciBjb250
ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQg
dGhlIHdvcmtlciBvYmplY3QgaXMgbm90IGNvbGxlY3RlZCwgbm9yIGFyZSBpdHMgZXZlbnQgbGlz
dGVuZXJzLgotICAgIHdvcmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5wdHIoKSk7Cisg
ICAgd29ya2VyLT5zZXRQZW5kaW5nQWN0aXZpdHkod29ya2VyLmdldCgpKTsKIAogICAgIC8vIGh0
dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dvcmtlcnMuaHRtbCNvZmZpY2lh
bC1tb21lbnQtb2YtY3JlYXRpb24KICAgICB3b3JrZXItPm1fd29ya2VyQ3JlYXRpb25UaW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBXb3JrZXI6Om5v
dGlmeUZpbmlzaGVkKCkKICAgICB9CiAgICAgbV9zY3JpcHRMb2FkZXIgPSBudWxscHRyOwogCi0g
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAppbmRleCA5YTRmZGI3ZDMxMzRmMGFhMTcyZGE1MDYwZjU5ZmVmZDQ0OGJm
MzU0Li5hZDI3NWI2OGE1NDUyZWJkMDA4MzcxMzg0ZmE5Yzk0ZjJkYTE0YzQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTE5MCw5ICsxOTAsOSBAQCBFeGNlcHRpb25P
cjxEb2N1bWVudCo+IFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCgpCiAgICAgICAgICAgICBt
X3Jlc3BvbnNlRG9jdW1lbnQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaWYgKGlzSFRNTCkKLSAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBIVE1M
RG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZURv
Y3VtZW50ID0gSFRNTERvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgbV91cmwpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50
OjpjcmVhdGUoMCwgbV91cmwpOworICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9
IFhNTERvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgbV91cmwpOwogICAgICAgICAgICAgLy8gRklY
TUU6IFNldCBMYXN0LU1vZGlmaWVkLgogICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50LT5z
ZXRDb250ZW50KG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsK
ICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudC0+c2V0Q29udGV4dERvY3VtZW50KGRvd25j
YXN0PERvY3VtZW50Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSk7CkBAIC00OTAsNyArNDkw
LDcgQEAgc3RkOjpvcHRpb25hbDxFeGNlcHRpb25Pcjx2b2lkPj4gWE1MSHR0cFJlcXVlc3Q6OnBy
ZXBhcmVUb1NlbmQoKQogICAgIGlmICghY29udGV4dC5zaG91bGRCeXBhc3NNYWluV29ybGRDb250
ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+
YWxsb3dDb25uZWN0VG9Tb3VyY2UobV91cmwpKSB7CiAgICAgICAgIGlmICghbV9hc3luYykKICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb25Pcjx2b2lkPiB7IEV4Y2VwdGlvbiB7IE5ldHdvcmtF
cnJvciB9IH07Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0
UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOwog
ICAgICAgICBtX25ldHdvcmtFcnJvclRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uT3I8dm9pZD4geyB9OwpAQCAtNzU5LDcgKzc1OSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KCkKICAgICAgICAgLy8gYSBy
ZXF1ZXN0IGlzIGluIHByb2dyZXNzIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0ZW5l
cnMgYWxpdmUsCiAgICAgICAgIC8vIGFuZCB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBKYXZh
U2NyaXB0IHdyYXBwZXIuCiAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIHNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRp
dGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnRvcE9yaWdpbigpLmRvbWFpbkZvckNhY2hl
UGFydGl0aW9uKCkpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2Fk
WEhSU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwpAQCAtODkzLDcgKzg5
Myw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CiAgICAgdm0uaGVhcC5k
ZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnkobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAy
KTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6Om92
ZXJyaWRlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBvdmVycmlkZSkKQEAgLTEwMzEsNyArMTAzMSw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiAgICAgLy8gSW4gY2FzZSBkaWRGYWlsIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IG9uIGFu
IGFzeW5jaHJvbm91cyBYSFIgY2FsbCwgbGV0J3MgZGlzcGF0Y2ggbmV0d29yayBlcnJvciBhc3lu
Y2hyb25vdXNseQogICAgIGlmIChtX2FzeW5jICYmIG1fc2VuZEZsYWcgJiYgIW1fbG9hZGVyKSB7
CiAgICAgICAgIG1fc2VuZEZsYWcgPSBmYWxzZTsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX3Rp
bWVvdXRUaW1lci5zdG9wKCk7CiAgICAgICAgIG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aFN0ZXAuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKaW5kZXgg
OGM5MjdiZmYzZWViNjkwODFmMDQ3YmYwZjI2ZTZkOGVlZTkyYzVjZC4uZmNkYzAyYzUyMTRkMzk1
MGJmYmQ0Y2NmZjczZDE4NWIyNjY1NTUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L1hQYXRoU3RlcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKQEAg
LTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAj
aW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlhNTE5TTmFtZXMuaCIKQEAgLTIw
MSw3ICsyMDAsNyBAQCBpbmxpbmUgYm9vbCBub2RlTWF0Y2hlc0Jhc2ljVGVzdChOb2RlJiBub2Rl
LCBTdGVwOjpBeGlzIGF4aXMsIGNvbnN0IFN0ZXA6Ok5vZGVUZQogICAgICAgICAgICAgaWYgKG5h
bWUgPT0gc3RhckF0b20oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJLmlz
RW1wdHkoKSB8fCBuYW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKTsKIAotICAgICAg
ICAgICAgaWYgKGlzPEhUTUxEb2N1bWVudD4obm9kZS5kb2N1bWVudCgpKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUuZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBQ
YXRocyB3aXRob3V0IG5hbWVzcGFjZXMgc2hvdWxkIG1hdGNoIEhUTUwgZWxlbWVudHMgaW4gSFRN
TCBkb2N1bWVudHMgZGVzcGl0ZSB0aG9zZSBoYXZpbmcgYW4gWEhUTUwgbmFtZXNwYWNlLiBOYW1l
cyBhcmUgY29tcGFyZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSku
bG9jYWxOYW1lKCksIG5hbWUpICYmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNwYWNl
VVJJID09IG5vZGUubmFtZXNwYWNlVVJJKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hTTFRQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
Y3BwCmluZGV4IGE5MGI5NjUwMDRjNDhmYjQ5MDRlYjdmYzJiZTFiYzYzM2E3MjA2YTUuLmVhMGFj
NDAyNTg0NGNiMjE0YjRlY2VkMjA5ZWFjOTM2YjgyNzAwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3Nvci5jcHAKQEAgLTIxLDExICsyMSwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCiAKICNpZiBFTkFCTEUoWFNMVCkKIAot
I2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKLQogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKQEAgLTMzLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpblBvbGljeS5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTg3LDcgKzg1
LDcgQEAgUmVmPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcKIAogICAgICAgICBpZiAoRG9jdW1lbnQqIG9s
ZERvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0
VHJhbnNmb3JtU291cmNlRG9jdW1lbnQob2xkRG9jdW1lbnQpOwotICAgICAgICAgICAgcmVzdWx0
LT50YWtlRE9NV2luZG93RnJvbShvbGREb2N1bWVudCk7CisgICAgICAgICAgICByZXN1bHQtPnRh
a2VET01XaW5kb3dGcm9tKCpvbGREb2N1bWVudCk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFNl
Y3VyaXR5T3JpZ2luUG9saWN5KG9sZERvY3VtZW50LT5zZWN1cml0eU9yaWdpblBvbGljeSgpKTsK
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0Q29va2llVVJMKG9sZERvY3VtZW50LT5jb29raWVVUkwo
KSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKG9sZERvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcAppbmRl
eCAzNjY5YzJkYTk4NjBiM2FlYTYwMmM4ZGJmN2QwZmJjOTg3Nzk4Y2RjLi41YWIyNjIwYTc4MTEx
NzQ3NzBkNzFiNjM1N2Q4ZDJkOTM5MWE5ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCkBA
IC0xMDgsNyArMTA4LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQpCiB2b2lkIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyOjp3aWxsRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50
KTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbigqbV9lbGVtZW50KTsKICAgICBtX3BhZ2UtPmhpZGVQYWdl
QmFubmVycygpOwogICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKICAg
ICBtX3BhZ2UtPmZvcmNlUmVwYWludFdpdGhvdXRDYWxsYmFjaygpOwpAQCAtMTE5LDE0ICsxMTks
MTQgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbFNjcmVlbigpCiB2
b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFT
U0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRl
ckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5k
b2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigpOwogfQogCiB2b2lkIFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyOjp3aWxsRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1l
bnQpOwogICAgIG1fZmluYWxGcmFtZSA9IHNjcmVlblJlY3RPZkNvbnRlbnRzKG1fZWxlbWVudC5n
ZXQoKSk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCku
d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgbV9wYWdlLT5zaG93UGFnZUJhbm5lcnMo
KTsKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudCgpLmJlZ2FuRXhp
dEZ1bGxTY3JlZW4obV9wYWdlLmdldCgpLCBtX2ZpbmFsRnJhbWUsIG1faW5pdGlhbEZyYW1lKTsK
IH0KQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRXhp
dEZ1bGxTY3JlZW4oKQogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxTY3Jl
ZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAg
ICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAog
dm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihib29sIGFu
aW1hdGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVh
bS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5j
cHAKaW5kZXggZTlmZjI0ZjgyZGM1ZDE5ZTU4Y2E5NmRjMTU0NmRkZGIzN2E0M2ZhMy4uOTQ1MDEz
ZDY4ODczOTdlMmViZjcxYjE5OWE5NWQ1MjljMzUwNTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnN0YXJ0VXNlck1lZGlhUmVxdWVzdChV
c2VyTWVkaWFSZXF1ZXN0JgogCiAgICAgYXV0byYgcGVuZGluZ1JlcXVlc3RzID0gbV9ibG9ja2Vk
UmVxdWVzdHMuYWRkKGRvY3VtZW50LCBWZWN0b3I8UmVmUHRyPFVzZXJNZWRpYVJlcXVlc3Q+Pigp
KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAg
IGRvY3VtZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIHBlbmRpbmdS
ZXF1ZXN0cy5hcHBlbmQoJnJlcXVlc3QpOwogfQogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6Om1lZGlhQ2FuU3RhcnQoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgIHdoaWxlICghcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewogICAg
ICAgICBpZiAoIWRvY3VtZW50LnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgpKSB7CiAgICAgICAgICAg
ICBtX2Jsb2NrZWRSZXF1ZXN0cy5hZGQoJmRvY3VtZW50LCBwZW5kaW5nUmVxdWVzdHMpOwotICAg
ICAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAg
ICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFVzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlTWVkaWFSZXF1ZXN0RnJvbU1hcHMoVXNl
ck1lZGlhUmVxdQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKHBlbmRpbmdS
ZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXF1ZXN0LmRvY3VtZW50KCktPnJlbW92
ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIHJlcXVlc3QuZG9jdW1l
bnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV9ibG9ja2VkUmVxdWVzdHMuYWRkKHJlcXVlc3QuZG9jdW1lbnQoKSwgcGVu
ZGluZ1JlcXVlc3RzKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGVlYTM4ZjA5ODJjN2VkNTExMjU4MzI3
OWEyNjg5MDk2MGNkN2UyN2IuLjhjZGVjMjIxN2ZkYTU4Y2I2YzM4NjQ1ZGRkYmQ1ZWJkN2Q4Y2Yy
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCkBAIC0zMTcsOSArMzE3LDkgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogICAgIEFT
U0VSVCghbV9pc0JlaW5nRGVzdHJveWVkKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCkKLSAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKLSAgICBtX3BsdWdp
bkVsZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICBtX3Bs
dWdpbkVsZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNlcigqdGhpcyk7CiAKICAg
ICBkZXN0cm95UGx1Z2luQW5kUmVzZXQoKTsKIApAQCAtNTkwLDEzICs1OTAsMTMgQEAgdm9pZCBQ
bHVnaW5WaWV3Ojppbml0aWFsaXplUGx1Z2luKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRp
YUNhblN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3Vt
ZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgIG1f
cGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIAotICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRBdWRpb1Byb2R1Y2VyKHRo
aXMpOworICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRBdWRpb1Byb2R1Y2VyKCp0
aGlzKTsKIAogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMp
CiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNh
c3Q8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4oKm1fcGx1Z2luRWxlbWVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVu
TGlzdGVuZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJL
aXRGdWxsU2NyZWVuTGlzdGVuZXIubW0KaW5kZXggYWY1YWMyZjI4OWJjMWIxMjA0NjZjNTljMDI3
OTA2ZWMxNDgxNjVlNy4uNTM3Y2M2NjgwNWQ0OWJlMGVkMGZiNDFmNjA5MDYzNWU2Yjk5NWFmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0
RnVsbFNjcmVlbkxpc3RlbmVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQpAQCAtNDUsMjUgKzQ1LDI1IEBA
IC0gKGlkKWluaXRXaXRoRWxlbWVudDooRWxlbWVudCopZWxlbWVudAogLSAodm9pZCl3ZWJraXRX
aWxsRW50ZXJGdWxsU2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVu
dC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVu
dC5nZXQoKSk7CisgICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1
bGxTY3JlZW4oKl9lbGVtZW50KTsKIH0KIAogLSAodm9pZCl3ZWJraXREaWRFbnRlckZ1bGxTY3Jl
ZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndl
YmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAg
ICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAog
LSAodm9pZCl3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0g
ICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJr
aXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAogLSAodm9pZCl3ZWJraXREaWRFeGl0RnVsbFNj
cmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCku
d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAog
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KaW5kZXggM2YxMDk5NmZjMjZmODY3NjFkODc5MmMwMGE3
ZmJmMTJmOGU4ZDdhOC4uYTIxNmIwYThjZmVhYWYzNTI3ODYzZGM3YmJlODNkZWVhOTFlMWNmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLm1tCkBAIC0yMzYsNyArMjM2LDcgQEAgLSAodm9pZCllbnRlckZ1
bGxTY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCiAKICAgICBfc2F2ZWRTY2FsZSA9IFtfd2ViVmll
dyBfdmlld1NjYWxlRmFjdG9yXTsKICAgICBbX3dlYlZpZXcgX3NjYWxlV2ViVmlldzoxIGF0T3Jp
Z2luOk5TTWFrZVBvaW50KDAsIDApXTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxs
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2Rv
Y3VtZW50XS0+d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbigqX2VsZW1lbnQpOwogICAgIFtzZWxm
IF9kb2N1bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CiAgICAgW3NlbGYgX2Rv
Y3VtZW50XS0+dXBkYXRlTGF5b3V0KCk7CiAKQEAgLTI2OSw3ICsyNjksNyBAQCAtICh2b2lkKWZp
bmlzaGVkRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogICAgICAgICAv
LyBTY3JlZW4gdXBkYXRlcyB0byBiZSByZS1lbmFibGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9j
awogICAgICAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAgICAgICAgIFtzZWxmIF9kb2N1
bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgICAgICBbc2VsZiBfZG9j
dW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgp
KTsKKyAgICAgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7
CiAgICAgICAgIAogICAgICAgICBOU1JlY3Qgd2luZG93Qm91bmRzID0gW1tzZWxmIHdpbmRvd10g
ZnJhbWVdOwogICAgICAgICB3aW5kb3dCb3VuZHMub3JpZ2luID0gTlNaZXJvUG9pbnQ7CkBAIC0z
MTMsNyArMzEzLDcgQEAgLSAodm9pZClleGl0RnVsbFNjcmVlbgogCiAgICAgX2ZpbmFsRnJhbWUg
PSBzY3JlZW5SZWN0T2ZDb250ZW50cyhfZWxlbWVudC5nZXQoKSk7CiAKLSAgICBbc2VsZiBfZG9j
dW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgp
KTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKICAg
ICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogCiAgICAg
aWYgKF9pc0VudGVyaW5nRnVsbFNjcmVlbikKQEAgLTM1Myw3ICszNTMsNyBAQCAtICh2b2lkKWZp
bmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCiAgICAgTlNEaXNh
YmxlU2NyZWVuVXBkYXRlcygpOwogCiAgICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5n
RnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRXhpdEZ1
bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRd
LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogICAgIFtfd2ViVmlldyBfc2NhbGVXZWJWaWV3
Ol9zYXZlZFNjYWxlIGF0T3JpZ2luOk5TTWFrZVBvaW50KDAsIDApXTsKIAogICAgIE5TUmVzcG9u
ZGVyICpmaXJzdFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDQ2
MGU3OGU2ZTFmNzg0ODYwZmE3ZGVlNDVmYzEyMDU1ZmE2YTFhOTEuLjg1ZjcyMDEzZWRkNzg0MzFk
MWQxNTg1MWMwMDZkOTFhNWRjYTFjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6c3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpCiAgICAgLy8gb3Vyc2VsdmVzLiBPdGhlcndp
c2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRhIGJlZm9yZSB3ZSd2ZQogICAg
IC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCiAgICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiAhbV9w
YXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgbV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAg
ICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRo
aXMpOwogICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC0yOTEsNyArMjkxLDcgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXco
KQogICAgICAgICBpbnN0YW5jZU1hcCgpLnJlbW92ZShtX2luc3RhbmNlKTsKIAogICAgIGlmICht
X2lzV2FpdGluZ1RvU3RhcnQpCi0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnJl
bW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAogICAgIHN0
b3AoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0YWFhMDkyOGM4MmIy
NTlmNDEzNWM5MmZlMWY3MTBmOTVjMTJiOWMyLi5iZWU2NDA5ZjE2MDlmN2NhMmEyMjhjMmVhZjNi
OTkyNTYwMDRhNjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNzUwNiwx
MyArNzUwNiwxMyBAQCB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRTZXRQYXJlbnRXaW5k
b3coSFdORCBob3N0V2luZG93KQogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEVu
dGVyRnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOwotICAg
IG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2NyZWVu
RWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKCptX2Z1bGxTY3Jl
ZW5FbGVtZW50KTsKIH0KIAogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRW50ZXJG
dWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7Ci0gICAgbV9m
dWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVsbFNjcmVlbkVsZW1l
bnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiB9CiAKIHZvaWQgV2Vi
Vmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxFeGl0RnVsbFNjcmVlbigpCkBAIC03NTI0LDcgKzc1
MjQsNyBAQCB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3JlZW4o
KQogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRXhpdEZ1bGxTY3JlZW4oKQogewog
ICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50KTsKLSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50
LT5kb2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3Jl
ZW5FbGVtZW50LmdldCgpKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndl
YmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IG51bGxw
dHI7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319854</attachid>
            <date>2017-09-04 09:26:28 -0700</date>
            <delta_ts>2017-09-10 13:28:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170904092627.patch</filename>
            <type>text/plain</type>
            <size>274452</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDllM2MxNjkxNzA0ZDY1
OWIzZGRhODNlOGE5MmU4OGFkODE0M2Q4Yi4uOGM0NzY0Y2IwNjQ0NjBjZDRjOTYyMzI1NDU4NWU0
NGY4MTlhZTNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wNCAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXZWJJRExdIFNpbXBsaWZ5
IEVuYWJsZWRCeVNldHRpbmdzIGdlbmVyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZGE4ZDhkZGMyNWUzNTk0
NzUzZGIxMmFhNTY5MjhmZmY5NmE2OTIyMy4uYjliNTJlODc4Mjc5MWYzMzJkMmE2NjUwMzk1NGE0
NmQ3MDA2ZDdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMCBAQAorMjAxNy0wOS0wMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgcmF0aGVy
IHRoYW4gcG9pbnRlcnMgZm9yIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZnVuY3Rpb25zLCBhbmQgbW9y
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MDI4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMTctMDktMDMgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUaHJl
YWRlZCBDb21wb3NpdG9yXSBEZWFkbG9jayBpbiBUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGFjMjZhOGU2ZmFhODBmNTJjMTUyMTAy
Njk3YWIyNDJjM2Q2ZGVhYjIuLjcyYjU4NTBiMjA1MzZhODc3NDUwN2MwNWJlODQ1ODBhNWM0OTkx
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMiBAQAogMjAxNy0w
OS0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgcmF0aGVyIHRoYW4gcG9pbnRlcnMgZm9yIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZnVuY3Rp
b25zLCBhbmQgbW9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MDI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKzIw
MTctMDktMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCiAgICAgICAgIFtDb2Nv
YV0gVGlkeSBhIGZldyB0aGluZ3MgaW4gbGVnYWN5IFdlYkhUTUxWaWV3CiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYyODAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCmluZGV4IDM4
NWQ5NGQ5YjkyNDk3Mjg1NTUyYjllZTdlNjY0ZDgxNjYyMWNlYjguLjcyNTcxM2Q1NDNlYmY1M2Zh
MDM3ZWRlZjA1ODBlZDJhOWVjMWQzZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHAKQEAgLTY5OSw3ICs2OTksNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Npb246OmJlZ2luKCkKIAogICAgIG1fc3RhdGUgPSBT
dGF0ZTo6QWN0aXZlOwogCi0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBl
bmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtODA2LDcgKzgw
Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVQYXltZW50
KEFwcGxlUGF5UGF5bWVudEF1dGhvcml6YXRpb25SCiAgICAgfQogCiAgICAgbV9zdGF0ZSA9IFN0
YXRlOjpDb21wbGV0ZWQ7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5z
ZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTExOTYs
NyArMTE5Niw3IEBAIGJvb2wgQXBwbGVQYXlTZXNzaW9uOjppc0ZpbmFsU3RhdGUoKSBjb25zdAog
dm9pZCBBcHBsZVBheVNlc3Npb246OmRpZFJlYWNoRmluYWxTdGF0ZSgpCiB7CiAgICAgQVNTRVJU
KGlzRmluYWxTdGF0ZSgpKTsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcAppbmRleCA0MTUzNTE4YzcyZThhNDZmZDgyNjcx
ZjgxMmU5ZTdjYTgwNTYyMTFhLi5lM2RhZGQxMGQxMTExNjdjMTU1M2Q1YjhhZjY2ZTg1YjI0Yjk0
ZTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hlU3RvcmFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2UuY3Bw
CkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om1hdGNoKERPTUNhY2hlOjpS
ZXF1ZXN0SW5mbyYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW8KICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgc3RhcnRTZXF1ZW50
aWFsTWF0Y2goY29weUNhY2hlcyhtX2NhY2hlcyksIFdURk1vdmUoaW5mbyksIFdURk1vdmUob3B0
aW9ucyksIFt0aGlzLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oRXhjZXB0aW9uT3I8RmV0
Y2hSZXNwb25zZSo+JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmICghbV9pc1N0
b3BwZWQpIHsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkBA
IC0xMTMsNyArMTEzLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om1hdGNoKERPTUNhY2hlOjpSZXF1
ZXN0SW5mbyYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW8KICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHByb21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNl
PEZldGNoUmVzcG9uc2U+PigqcmVzdWx0LnJldHVyblZhbHVlKCkpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNl
dFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQpAQCAtMTM1
LDcgKzEzNSw3IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZUNhY2hlcyhXVEY6OkZ1bmN0
aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFeGNlcHRpb24+JiYpCiAgICAgaWYgKG9yaWdpbi5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uLT5yZXRyaWV2
ZUNhY2hlcyhvcmlnaW4sIG1fdXBkYXRlQ291bnRlciwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKENhY2hlSW5mb3NPckVycm9yJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgaWYgKCFtX2lzU3RvcHBlZCkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUo
KSkgewpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZUNhY2hl
cyhXVEY6OkZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxFeGNlcHRpb24+JiYpCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOwogICAgICAgICB9Ci0g
ICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgfSk7CiB9CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIENh
Y2hlU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJ
RExJbnRlcmZhY2U8RE9NQwogICAgICAgICBTdHJpbmcgb3JpZ2luID0gdGhpcy0+b3JpZ2luKCk7
CiAgICAgICAgIEFTU0VSVCghb3JpZ2luLmlzTnVsbCgpKTsKIAotICAgICAgICBzZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAg
ICAgIG1fY29ubmVjdGlvbi0+b3BlbihvcmlnaW4sIG5hbWUsIFt0aGlzLCBuYW1lLCBwcm9taXNl
ID0gV1RGTW92ZShwcm9taXNlKV0oY29uc3QgQ2FjaGVJZGVudGlmaWVyT3JFcnJvciYgcmVzdWx0
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmICghbV9pc1N0b3BwZWQpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgQ2Fj
aGVTdG9yYWdlOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURlZmVycmVkPElE
TEludGVyZmFjZTxET01DCiAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLmFwcGVuZChXVEZN
b3ZlKGNhY2hlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQpAQCAtMjI3LDcgKzIyNyw3
IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBET01Qcm9t
aXNlRGVmZXJyZWQ8SURMQm9vbGVhbj4mJiBwCiAgICAgICAgIFN0cmluZyBvcmlnaW4gPSB0aGlz
LT5vcmlnaW4oKTsKICAgICAgICAgQVNTRVJUKCFvcmlnaW4uaXNOdWxsKCkpOwogCi0gICAgICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0
aGlzKTsKICAgICAgICAgbV9jb25uZWN0aW9uLT5yZW1vdmUobV9jYWNoZXNbcG9zaXRpb25dLT5p
ZGVudGlmaWVyKCksIFt0aGlzLCBuYW1lLCBwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oY29u
c3QgQ2FjaGVJZGVudGlmaWVyT3JFcnJvciYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGlmICghbV9pc1N0b3BwZWQpIHsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1
ZSgpKQpAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgQ2FjaGVTdG9yYWdlOjpyZW1vdmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMQm9vbGVhbj4mJiBwCiAgICAgICAg
ICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZSh0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAg
ICAgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIG1fY2FjaGVzLnJlbW92ZShwb3NpdGlvbik7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDRiZDdjNTEwN2QyMGNjN2JlYjM0MTc4MWU5
NTRmMjg3ZWMzMjMyN2UuLmJiYTRlNzYxZWU2NGQ1Mjk2Y2RjM2JlYzRkMzQ0YTRlM2Y5NmJmNTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCkBAIC0zMjQsNyAr
MzI0LDcgQEAgdm9pZCBET01DYWNoZTo6cHV0KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPEZldGNo
UmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVByb21pc2UKICAgICB9CiAKICAgICBpZiAocmVzcG9u
c2UtPmlzTG9hZGluZygpKSB7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAg
ICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgcmVzcG9uc2UtPmNvbnN1
bWVCb2R5V2hlbkxvYWRlZChbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHJlcXVlc3QgPSBX
VEZNb3ZlKHJlcXVlc3QpLCByZXNwb25zZSA9IFdURk1vdmUocmVzcG9uc2UpLCB0aGlzXShFeGNl
cHRpb25PcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4mJiByZXN1bHQpIG11dGFibGUgewogICAgICAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICBwcm9taXNl
LnJlamVjdChyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKQEAgLTMzNiw3ICszMzYsNyBAQCB2
b2lkIERPTUNhY2hlOjpwdXQoUmVxdWVzdEluZm8mJiBpbmZvLCBSZWY8RmV0Y2hSZXNwb25zZT4m
JiByZXNwb25zZSwgRE9NUHJvbWlzZQogICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnNldHRs
ZShXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNl
dFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgRE9NQ2FjaGU6OmtleXMoc3RkOjpvcHRpb25h
bDxSZXF1ZXN0SW5mbz4mJiBpbmZvLCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvCiAKIHZvaWQg
RE9NQ2FjaGU6OnJldHJpZXZlUmVjb3JkcyhXVEY6OkZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25h
bDxFeGNlcHRpb24+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+
cmV0cmlldmVSZWNvcmRzKG1faWRlbnRpZmllciwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKFJlY29yZHNPckVycm9yJiYgcmVzdWx0KSB7CiAgICAgICAgIGlmICghbV9pc1N0
b3BwZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIERPTUNhY2hlOjpyZXRyaWV2ZVJlY29yZHMoV1RGOjpGdW5jdGlvbjx2
b2lkKHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiYmKT4mJgogICAgICAgICAgICAgICAgIHVwZGF0
ZVJlY29yZHMoV1RGTW92ZShyZXN1bHQudmFsdWUoKSkpOwogICAgICAgICAgICAgY2FsbGJhY2so
c3RkOjpudWxsb3B0KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0pOwogfQog
CkBAIC00NTcsNyArNDU3LDcgQEAgVmVjdG9yPENhY2hlU3RvcmFnZVJlY29yZD4gRE9NQ2FjaGU6
OnF1ZXJ5Q2FjaGVXaXRoVGFyZ2V0U3RvcmFnZShjb25zdCBGZXRjaFJlcXUKIAogdm9pZCBET01D
YWNoZTo6YmF0Y2hEZWxldGVPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBD
YWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChFeGNlcHRpb25P
cjxib29sPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb24tPmJhdGNo
RGVsZXRlT3BlcmF0aW9uKG1faWRlbnRpZmllciwgcmVxdWVzdC5pbnRlcm5hbFJlcXVlc3QoKSwg
V1RGTW92ZShvcHRpb25zKSwgW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFJl
Y29yZElkZW50aWZpZXJzT3JFcnJvciYmIHJlc3VsdCkgewogICAgICAgICBpZiAoIW1faXNTdG9w
cGVkKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQpAQCAtNDY1LDcgKzQ2
NSw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoRGVsZXRlT3BlcmF0aW9uKGNvbnN0IEZldGNoUmVx
dWVzdCYgcmVxdWVzdCwgQ2FjaGVRdWVyeU9wdGlvCiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgY2FsbGJhY2soIXJlc3VsdC52YWx1ZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIH0K
LSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQg
RE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwg
RmV0Y2hSZXNwb25zZSYgcmVzCiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZl
Y3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4Y2VwdGlvbk9yPHZv
aWQ+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+YmF0Y2hQdXRP
cGVyYXRpb24obV9pZGVudGlmaWVyLCBXVEZNb3ZlKHJlY29yZHMpLCBbdGhpcywgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oUmVjb3JkSWRlbnRpZmllcnNPckVycm9yJiYgcmVzdWx0KSB7
CiAgICAgICAgIGlmICghbV9pc1N0b3BwZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhh
c1ZhbHVlKCkpCkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVy
YXRpb24oVmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXgKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjYWxsYmFjayh7IH0pOwogICAgICAgICB9
Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKaW5kZXggMGZiMmRmM2NmODFlYjNiYTg1OTkw
ODZkODZjMWM1ZmZiMGE3YWY1NC4uYjBiOWY0YzcyMWYxNmY2MzdkNDAxZjdjZjA0ZDhhYzExN2Ri
NDMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlP
d25lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25l
ci5jcHAKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEZldGNoQm9keU93bmVyOjpsb2FkQmxvYihj
b25zdCBCbG9iJiBibG9iLCBGZXRjaEJvZHlDb25zdW1lciogY29uc3VtZXIpCiAgICAgICAgIG1f
YmxvYkxvYWRlciA9IHN0ZDo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBz
ZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBGZXRjaEJvZHlPd25lcjo6ZmluaXNoQmxvYkxvYWRpbmcoKQpAQCAtMjI1LDcg
KzIyNSw3IEBAIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkKICAgICBB
U1NFUlQobV9ibG9iTG9hZGVyKTsKIAogICAgIG1fYmxvYkxvYWRlciA9IHN0ZDo6bnVsbG9wdDsK
LSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmJsb2JMb2FkaW5nU3VjY2VlZGVk
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5U291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5U291cmNlLmNw
cAppbmRleCAyYWE3Y2JhMGVjMzhiZTI1MWEyYTAyYWQzYjc5MjAwZmEyY2QzYjE0Li5lZmI1MGMw
MzI1ZjExZWE3ZWFlZDQ2NjUxZDhiNmNlOGU5N2RlMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlTb3VyY2UuY3BwCkBAIC00NSwxMiArNDUsMTIgQEAg
Ym9vbCBGZXRjaEJvZHlTb3VyY2U6OmlzUmVhZGFibGVTdHJlYW1Mb2NrZWQoKSBjb25zdAogCiB2
b2lkIEZldGNoQm9keVNvdXJjZTo6c2V0QWN0aXZlKCkKIHsKLSAgICBtX2JvZHlPd25lci5zZXRQ
ZW5kaW5nQWN0aXZpdHkoJm1fYm9keU93bmVyKTsKKyAgICBtX2JvZHlPd25lci5zZXRQZW5kaW5n
QWN0aXZpdHkobV9ib2R5T3duZXIpOwogfQogCiB2b2lkIEZldGNoQm9keVNvdXJjZTo6c2V0SW5h
Y3RpdmUoKQogewotICAgIG1fYm9keU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2aXR5KCZtX2JvZHlP
d25lcik7CisgICAgbV9ib2R5T3duZXIudW5zZXRQZW5kaW5nQWN0aXZpdHkobV9ib2R5T3duZXIp
OwogfQogCiB2b2lkIEZldGNoQm9keVNvdXJjZTo6ZG9TdGFydCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAppbmRleCBjY2U3YTg3MDFjNGYxNmMw
OGM5MzVhZjMwNjMwNmI5MjA0NzllMWRjLi5hZGVkNmM4MzJkN2E5YjhlOWQ0YjNkNjIzNWYyYWNk
YWIzNDFkNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
UmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNw
b25zZS5jcHAKQEAgLTE3MCwxMiArMTcwLDEyIEBAIEZldGNoUmVzcG9uc2U6OkJvZHlMb2FkZXI6
OkJvZHlMb2FkZXIoRmV0Y2hSZXNwb25zZSYgcmVzcG9uc2UsIE5vdGlmaWNhdGlvbkNhbGxiCiAg
ICAgOiBtX3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9yZXNwb25zZUNhbGxiYWNrKFdURk1v
dmUocmVzcG9uc2VDYWxsYmFjaykpCiB7Ci0gICAgbV9yZXNwb25zZS5zZXRQZW5kaW5nQWN0aXZp
dHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2aXR5KG1fcmVz
cG9uc2UpOwogfQogCiBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjp+Qm9keUxvYWRlcigpCiB7
Ci0gICAgbV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9yZXNwb25zZSk7CisgICAg
bV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0KIAogdm9pZCBG
ZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggYzJjZWZjNjliMDhhZTgwY2E0
YjU3M2M5ZjlmM2UxNWRkMjk1MTMzNi4uYjJkZmNkODQ1NTA0N2NhN2UyMmFiZWUzNjYyNmRjZjUx
OGVhNTNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNl
dFByaXZhdGVBbmRPcGVuKFJlZjxNZWRpYVNvdXJjZVByaXZhdGU+JiYgbWVkaWFTb3VyY2VQcml2
YXRlCiAKIHZvaWQgTWVkaWFTb3VyY2U6OmFkZGVkVG9SZWdpc3RyeSgpCiB7Ci0gICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAK
IHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogewotICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0K
IAogTWVkaWFUaW1lIE1lZGlhU291cmNlOjpkdXJhdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IDc0M2Vj
ZGI1OTUwZTczOWEwNzVkZWEyNTM4ZDcyNTQxZmIwZTEwOGIuLmM4NjRhMDQ3MWQyNjhjNmVkZTNk
NzdmN2QyY2U1ZDY1MzkxNTY3N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgTWVkaWFTdHJl
YW06On5NZWRpYVN0cmVhbSgpCiAgICAgICAgIHRyYWNrLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7
CiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpIHsKICAgICAg
ICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICAgICAgZG9jdW1l
bnQtPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIH0KIH0KIApAQCAt
Mjg2LDcgKzI4Niw3IEBAIHZvaWQgTWVkaWFTdHJlYW06OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQgPSB0cnVlOwotICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRo
aXMpOworICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKaW5kZXggMTY4ODRlMzgyNjY4
NGNlNzc4N2Q1ODZhODRmODhmZGM3OTFjMjc4OS4uOGIyNDUyNDliOTM2NmYzODVhMzg1OTk4MDkz
MWIwNzAwZTAyNjA0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCkBAIC02MSw3ICs2MSw3IEBAIE1lZGlhU3Ry
ZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgUmVmPE1lZGlhU3RyCiAgICAgbV9wcml2YXRlLT5hZGRPYnNlcnZlcigqdGhpcyk7CiAKICAg
ICBpZiAoYXV0byBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50
LT5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+YWRkQXVkaW9Qcm9k
dWNlcigqdGhpcyk7CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVhbVRyYWNrKCkK
QEAgLTY5LDcgKzY5LDcgQEAgTWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFtVHJhY2soKQog
ICAgIG1fcHJpdmF0ZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYgKGF1dG8gZG9j
dW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+cmVtb3ZlQXVkaW9Q
cm9kdWNlcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRo
aXMpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6OmtpbmQoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENE
YXRhQ2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0Rh
dGFDaGFubmVsLmNwcAppbmRleCBjYzBlOWI1NGQxMDUwODhiZmI0NjEzOTJiMTBmMzk2NmQ3ZDMy
NjlkLi43NDk1MDlkMmIyMjJhMDMxY2JjNjZiMTkxMjBiZGNmZGNmMzE2ZjA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNw
cApAQCAtNTgsNyArNTgsNyBAQCBSZWY8UlRDRGF0YUNoYW5uZWw+IFJUQ0RhdGFDaGFubmVsOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3RkOgogICAgIGF1dG8gY2hh
bm5lbCA9IGFkb3B0UmVmKCpuZXcgUlRDRGF0YUNoYW5uZWwoY29udGV4dCwgV1RGTW92ZShoYW5k
bGVyKSwgV1RGTW92ZShsYWJlbCksIFdURk1vdmUob3B0aW9ucykpKTsKICAgICBjaGFubmVsLT5z
dXNwZW5kSWZOZWVkZWQoKTsKICAgICBjaGFubmVsLT5tX2hhbmRsZXItPnNldENsaWVudChjaGFu
bmVsLmdldCgpKTsKLSAgICBjaGFubmVsLT5zZXRQZW5kaW5nQWN0aXZpdHkoY2hhbm5lbC5wdHIo
KSk7CisgICAgY2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwuZ2V0KCkpOwogICAg
IHJldHVybiBjaGFubmVsOwogfQogCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBSVENEYXRhQ2hh
bm5lbDo6Y2xvc2UoKQogCiAgICAgbV9oYW5kbGVyLT5jbG9zZSgpOwogICAgIG1faGFuZGxlciA9
IG51bGxwdHI7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5k
aW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpkaWRDaGFuZ2VS
ZWFkeVN0YXRlKFJUQ0RhdGFDaGFubmVsU3RhdGUgbmV3U3RhdGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmlu
ZGV4IDkwYjIxZWE2MjNjMTQ3ZTQ1OTEyYjU5ODE1YmRjYTFkN2RkNzBkODkuLjZlMmZhODczNjM3
NmQ1ODFjNDA5ZjI4MzlmNjI4MzgxMDI0MGNhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC02Miwx
MiArNjIsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFBlZXJDb25uZWN0aW9uOwogCiBSZWY8UlRDUGVl
ckNvbm5lY3Rpb24+IFJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICBSZWY8UlRDUGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0
aW9uID0gYWRvcHRSZWYoKm5ldyBSVENQZWVyQ29ubmVjdGlvbihjb250ZXh0KSk7CisgICAgYXV0
byBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29udGV4
dCkpOwogICAgIHBlZXJDb25uZWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICAvLyBSVENQ
ZWVyQ29ubmVjdGlvbiBtYXkgc2VuZCBldmVudHMgYXQgYWJvdXQgYW55IHRpbWUgZHVyaW5nIGl0
cyBsaWZldGltZS4KICAgICAvLyBMZXQncyBtYWtlIGl0IHVuY29sbGVjdGFibGUgdW50aWwgdGhl
IHBjIGlzIGNsb3NlZCBieSBKUyBvciB0aGUgcGFnZSBzdG9wcyBpdC4KICAgICBpZiAoIXBlZXJD
b25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLT5zZXRQZW5k
aW5nQWN0aXZpdHkocGVlckNvbm5lY3Rpb24ucHRyKCkpOworICAgICAgICBwZWVyQ29ubmVjdGlv
bi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJDb25uZWN0aW9uLmdldCgpKTsKIAogICAgICAgICAv
LyBJQ0UgY2FuZGlkYXRlIGZpbHRlcmluZyBjYW4gb25seSBiZSBkaXNhYmxlZCBmb3IgY29ubmVj
dGlvbnMgZnJvbSBkb2N1bWVudHMgdGhhdCBoYXZlIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgdG9w
IGRvY3VtZW50LAogICAgICAgICAvLyBvciBpZiB0aGUgcGFnZSB3YXMgc2V0IHRvIGRpc2FibGUg
aXQuCkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6ZG9TdG9wKCkK
IAogICAgIG1fYmFja2VuZC0+c3RvcCgpOwogCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFJUQ1BlZXJD
b25uZWN0aW9uOjpyZWdpc3RlclRvQ29udHJvbGxlcihSVENDb250cm9sbGVyJiBjb250cm9sbGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlm
aWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uLmNwcAppbmRleCBmNDM5NDMxOGViMWZkN2NmMDg3ZDliM2NiMDhjNzFiOWY5YmQ3OTEx
Li43MmFkM2FiY2MwNjY2NTQzMjQ2Y2E4NWEzNTNlNDAyNjU2MDU5MWY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcApA
QCAtOTMsNyArOTMsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6c2hvdygpCiAgICAgfQogICAgIGlm
IChjbGllbnQuc2hvdyh0aGlzKSkgewogICAgICAgICBtX3N0YXRlID0gU2hvd2luZzsKLSAgICAg
ICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogICAgIH0KIH0KIApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
OjpmaW5hbGl6ZSgpCiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQogICAgICAgICByZXR1cm47
CiAgICAgbV9zdGF0ZSA9IENsb3NlZDsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgTm90aWZpY2F0aW9u
OjpkaXNwYXRjaFNob3dFdmVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCmluZGV4IDI3ZTU2YzRj
NmI5NDdhZWI4MjQ1OWVkMTNmMzNiNTgxYTNkM2EwYTQuLjA1NWJmZjVmMWViYWExYjJiZTVhN2M0
NDBlZTA5ZjNiMTc4YjljMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCkBAIC05OSw3ICs5OSw3
IEBAIHZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0ZVB1bGxTdGF0dXMoKQogICAg
ICAgICAvLyBXaGVuIGFuIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGNvbm5lY3RlZCB0byBh
IGRvd25zdHJlYW0gbm9kZSwgaXQgd2lsbCBnZXQgcHVsbGVkIGJ5IHRoZQogICAgICAgICAvLyBk
b3duc3RyZWFtIG5vZGUsIHRodXMgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQncyBhdXRvbWF0
aWMgcHVsbCBsaXN0LgogICAgICAgICBpZiAobV9uZWVkQXV0b21hdGljUHVsbCkgewotICAgICAg
ICAgICAgY29udGV4dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAg
ICAgY29udGV4dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAg
IG1fbmVlZEF1dG9tYXRpY1B1bGwgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBA
IC0xMDcsMTEgKzEwNywxMSBAQCB2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjp1cGRhdGVQ
dWxsU3RhdHVzKCkKICAgICAgICAgaWYgKG51bWJlck9mSW5wdXRDb25uZWN0aW9ucyAmJiAhbV9u
ZWVkQXV0b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gV2hlbiBhbiBBdWRpb0Jhc2ljSW5z
cGVjdG9yTm9kZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBkb3duc3RyZWFtIG5vZGUgd2hpbGUg
c3RpbGwgY29ubmVjdGVkIGZyb20KICAgICAgICAgICAgIC8vIHVwc3RyZWFtIG5vZGUocyksIGFk
ZCBpdCB0byB0aGUgY29udGV4dCdzIGF1dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAgICAgICAgICBj
b250ZXh0KCkuYWRkQXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAgICBjb250ZXh0
KCkuYWRkQXV0b21hdGljUHVsbE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9uZWVkQXV0b21h
dGljUHVsbCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mSW5wdXRDb25uZWN0
aW9ucyAmJiBtX25lZWRBdXRvbWF0aWNQdWxsKSB7CiAgICAgICAgICAgICAvLyBUaGUgQXVkaW9C
YXNpY0luc3BlY3Rvck5vZGUgaXMgY29ubmVjdGVkIHRvIG5vdGhpbmcsIHJlbW92ZSBpdCBmcm9t
IHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KLSAgICAgICAgICAgIGNvbnRleHQo
KS5yZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRleHQoKS5y
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRvbWF0
aWNQdWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggZDk1MDQ3YzkwMzA1MWMwYmMz
ZDVlNjM4YjI3YjQ1ODU0MjRiMDUzMi4uMDEyYWU4ZmY2NDQzOGRjNjNjN2I0YjczMGQ5YmEyN2My
MzQ2MDliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgQXVkaW9Db250ZXh0Ojpjb25zdHJ1
Y3RDb21tb24oKQogewogICAgIC8vIEFjY29yZGluZyB0byBzcGVjIEF1ZGlvQ29udGV4dCBtdXN0
IGRpZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdhdGUuCiAgICAgLy8gTGV0cyBtYXJrIGl0IGFzIEFj
dGl2ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgYW5kIHVubWFyayBpdCBpbiBjbGVh
ciBtZXRob2QuCi0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIGluaXRpYWxpemVHU3Ry
ZWFtZXIoKTsKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6bGF6eUluaXRp
YWxpemUoKQogICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6ZSgpOwogCiAgICAg
ICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5h
ZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJG
b3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcigqdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgp
LT5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCiAg
ICAgICAgICAgICAvLyBUaGlzIHN0YXJ0cyB0aGUgYXVkaW8gdGhyZWFkLiBUaGUgZGVzdGluYXRp
b24gbm9kZSdzIHByb3ZpZGVJbnB1dCgpIG1ldGhvZCB3aWxsIG5vdyBiZSBjYWxsZWQgcmVwZWF0
ZWRseSB0byByZW5kZXIgYXVkaW8uCiAgICAgICAgICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlu
cHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24gb2YgdGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJl
ZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVyaW9kIGEgInJlbmRlciBxdWFudHVtIi4KQEAgLTI0
Niw3ICsyNDYsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y2xlYXIoKQogICAgIH0gd2hpbGUgKG1f
bm9kZXNUb0RlbGV0ZS5zaXplKCkpOwogCiAgICAgLy8gSXQgd2FzIHNldCBpbiBjb25zdHJ1Y3RD
b21tb24uCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkK
QEAgLTI2Myw4ICsyNjMsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFsaXplKCkKICAg
ICBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCA9IHRydWU7CiAKICAgICBpZiAoIWlzT2ZmbGluZUNv
bnRleHQoKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVBdWRpb1Byb2R1Y2VyKHRoaXMp
OwotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNl
cigqdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3Rh
dGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNv
bnRleHRDb3VudCk7CiAgICAgICAgIC0tc19oYXJkd2FyZUNvbnRleHRDb3VudDsKQEAgLTgyNCwx
NCArODI0LDE0IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVm
cygpCiAgICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5jbGVhcigpOwogfQogCi12b2lkIEF1
ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQgQXVkaW9D
b250ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlJiBub2RlKQogewogICAgIEFTU0VSVChp
c0dyYXBoT3duZXIoKSk7CiAKICAgICBpZiAoaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpCi0gICAg
ICAgIG1fbm9kZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXNUb0RlbGV0
ZS5hcHBlbmQoJm5vZGUpOwogICAgIGVsc2UKLSAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0
aW9uLmFwcGVuZChub2RlKTsKKyAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0aW9uLmFwcGVu
ZCgmbm9kZSk7CiAKICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRpbWUgZm9yIHVz
IHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxpc3QsCiAgICAgLy8gc2lu
Y2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFwaCBsb2NrLiBU
aGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKQEAgLTkyOCwxOSArOTI4LDE5IEBAIHZv
aWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKQogICAgIG1fZGly
dHlBdWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQXVkaW9Db250ZXh0OjphZGRB
dXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6YWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJiBub2RlKQogewogICAgIEFTU0VSVChpc0dyYXBo
T3duZXIoKSk7CiAKLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMuYWRkKG5vZGUpLmlzTmV3
RW50cnkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZCgmbm9kZSkuaXNOZXdFbnRy
eSkKICAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0cnVlOwogfQog
Ci12b2lkIEF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlKiBu
b2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9k
ZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAgaWYgKG1fYXV0
b21hdGljUHVsbE5vZGVzLnJlbW92ZShub2RlKSkKKyAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9k
ZXMucmVtb3ZlKCZub2RlKSkKICAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRp
bmcgPSB0cnVlOwogfQogCkBAIC05OTcsNyArOTk3LDcgQEAgYm9vbCBBdWRpb0NvbnRleHQ6Ondp
bGxCZWdpblBsYXliYWNrKCkKICAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3Rh
cnQoKSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgICAg
ICBpZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1
bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1
bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
QXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24p
OwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxQYXVzZVBsYXli
YWNrKCkKICAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewogICAg
ICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgICAgICBpZiAocGFnZSAm
JiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250ZXh0
OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggNTc3MzE3ZDJl
ODJkZWQ5ZmEwNzg1OWRiMGUwNjBhMWFhODk1ZjNhZS4uNjM0OTdkYWJlMTEzMmI3ZWMzZmIxMjNj
MWE2MzA3NDdjYWU3YzYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCkBAIC0xNTMsMTMgKzE1MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
ZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKIAogICAgIC8vIFdlIHNjaGVkdWxlIGRlbGV0aW9u
IG9mIGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1lIHJlbmRlciBx
dWFudHVtLgotICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSopOworICAgIHZvaWQg
bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYpOwogICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMo
KTsKIAogICAgIC8vIEF1ZGlvQ29udGV4dCBjYW4gcHVsbCBub2RlKHMpIGF0IHRoZSBlbmQgb2Yg
ZWFjaCByZW5kZXIgcXVhbnR1bSBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBh
bnkgZG93bnN0cmVhbSBub2Rlcy4KICAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgY2FsbGVk
IGJ5IHRoZSBub2RlcyB3aG8gd2FudCB0byBhZGQvcmVtb3ZlIHRoZW1zZWx2ZXMgaW50by9mcm9t
IHRoZSBhdXRvbWF0aWMgcHVsbCBsaXN0cy4KLSAgICB2b2lkIGFkZEF1dG9tYXRpY1B1bGxOb2Rl
KEF1ZGlvTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2Rl
Kik7CisgICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKTsKKyAgICB2b2lk
IHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYpOwogCiAgICAgLy8gQ2FsbGVkIHJp
Z2h0IGJlZm9yZSBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSB0byBoYW5kbGUgbm9kZXMgd2hpY2gg
bmVlZCB0byBiZSBwdWxsZWQgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55
dGhpbmcuCiAgICAgdm9pZCBwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNU
b1Byb2Nlc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUu
Y3BwCmluZGV4IGYyMDBiMDUwZTcyNjEyN2NjMWQ2ZjZiNWE2MzVmNjdhZjJiNGU3NzYuLjFhYzc3
YWEzN2MyNjUzN2IzZTJmZjIyMzYxYWE3MjUyZDUwMzU1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lk
IEF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAgICAgICAgICAg
ICAgICBvdXRwdXQtPmRpc2Nvbm5lY3RBbGwoKTsgLy8gVGhpcyB3aWxsIGRlcmVmKCkgbm9kZXMg
d2UncmUgY29ubmVjdGVkIHRvLgogCiAgICAgICAgICAgICAgICAgLy8gTWFyayBmb3IgZGVsZXRp
b24gYXQgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gb3Igd2hlbiBjb250ZXh0IHNodXRzIGRv
d24uCi0gICAgICAgICAgICAgICAgY29udGV4dCgpLm1hcmtGb3JEZWxldGlvbih0aGlzKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0KCkubWFya0ZvckRlbGV0aW9uKCp0aGlzKTsKICAgICAgICAg
ICAgICAgICBtX2lzTWFya2VkRm9yRGVsZXRpb24gPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKHJlZlR5cGUgPT0gUmVmVHlwZUNvbm5lY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDcyM2EwYjZj
OGUxZThmYzgyZGRkZDYwZGM2ODJjMDRkODQxYjA5ZTkuLjNiNTcwZmQyOWQ3NjBlZTM5ZTdmNDQ1
YWI4MWI3YmQzYjQ2ZDBhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yODMsOCArMjgzLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4g
V2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcHIKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpOwogICAgICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsK
ICAgICAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigpLm1peGVkQ29udGVudENoZWNr
ZXIoKS5jYW5SdW5JbnNlY3VyZUNvbnRlbnQoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgbV91
cmwpKSB7Ci0gICAgICAgICAgICAvLyBCYWxhbmNlZCBieSB0aGUgY2FsbCB0byBBY3RpdmVET01P
YmplY3Q6OnVuc2V0UGVuZGluZ0FjdGl2aXR5KCkgaW4gV2ViU29ja2V0OjpzdG9wKCkuCi0gICAg
ICAgICAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAg
ICAgICAgIC8vIEJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCkg
aW4gV2ViU29ja2V0OjpzdG9wKCkuCisgICAgICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogCiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJsb2NrIHRoaXMgY29ubmVjdGlvbi4gSW5z
dGVhZCBvZiB0aHJvd2luZyBhbiBleGNlcHRpb24sIHdlIGluZGljYXRlIHRoaXMKICAgICAgICAg
ICAgIC8vIHVzaW5nIHRoZSBlcnJvciBldmVudC4gQnV0IHNpbmNlIHRoaXMgY29kZSBleGVjdXRl
cyBhcyBwYXJ0IG9mIHRoZSBXZWJTb2NrZXQncwpAQCAtMzE1LDcgKzMxNSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHByCiAgICAgICAgIHByb3RvY29sU3RyaW5nID0gam9pblN0cmluZ3MocHJv
dG9jb2xzLCBzdWJwcm90b2NvbFNlcGFyYXRvcigpKTsKIAogICAgIG1fY2hhbm5lbC0+Y29ubmVj
dChtX3VybCwgcHJvdG9jb2xTdHJpbmcpOwotICAgIEFjdGl2ZURPTU9iamVjdDo6c2V0UGVuZGlu
Z0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAKICAgICBy
ZXR1cm4geyB9OwogfQpAQCAtNTQ0LDcgKzU0NCw3IEBAIHZvaWQgV2ViU29ja2V0OjpzdG9wKCkK
ICAgICBtX3BlbmRpbmdFdmVudHMuY2xlYXIoKTsKICAgICBBY3RpdmVET01PYmplY3Q6OnN0b3Ao
KTsKICAgICBpZiAocGVuZGluZykKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
fQogCiBjb25zdCBjaGFyKiBXZWJTb2NrZXQ6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdApA
QCAtNjI4LDcgKzYyOCw3IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRDbG9zZSh1bnNpZ25lZCB1bmhh
bmRsZWRCdWZmZXJlZEFtb3VudCwgQ2xvc2luZ0hhbmRzaGFrZUNvbXBsCiAgICAgICAgIG1fY2hh
bm5lbCA9IG51bGxwdHI7CiAgICAgfQogICAgIGlmIChoYXNQZW5kaW5nQWN0aXZpdHkoKSkKLSAg
ICAgICAgQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAg
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFdlYlNvY2tldDo6ZGlk
VXBncmFkZVVSTCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAppbmRleCBkY2NkMjgzMzhlM2U4MGZkM2E0OGYzODU1MmEzZWYyYTAzMzU3YTk1Li41
ZTdkOTUyODUxZTkzZmRiNzFlNWE4Y2IyZmQ3MWYwZTk0NDIxYThlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTM2OCw3ICszNjgsNyBA
QCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlclJl
c29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdAogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09i
amVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAg
aWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9j
dW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+cmVzb2x2
ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwgaW1wb3J0ZXJN
b2R1bGVLZXksIHNjcmlwdEZldGNoZXIpOworICAgICAgICByZXR1cm4gZG9jdW1lbnQtPm1vZHVs
ZUxvYWRlcigpLnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVs
ZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKICAgICBKU0M6OkpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVmZXJyZWQt
PnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTM3Nyw3ICszNzcsNyBAQCBKU0M6
OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckZldGNoKEpT
Qzo6SlNHbG9iYWxPYmplY3QqCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0ID0g
SlNDOjpqc0Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoUmVm
UHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5kb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLT5mZXRjaChnbG9iYWxP
YmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKKyAg
ICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5mZXRjaChnbG9iYWxPYmplY3Qs
IGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKICAgICBKU0M6
OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVm
ZXJyZWQtPnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTM4Niw3ICszODYsNyBA
QCBKU0M6OkpTVmFsdWUgSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09i
amVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAg
aWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9j
dW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZXZhbHVh
dGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVj
b3JkLCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2Fk
ZXIoKS5ldmFsdWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5
LCBtb2R1bGVSZWNvcmQsIHNjcmlwdEZldGNoZXIpOwogICAgIHJldHVybiBKU0M6OmpzVW5kZWZp
bmVkKCk7CiB9CiAKQEAgLTM5NCw3ICszOTQsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBK
U0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6OkpTR2xvYmFsTwog
ewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1l
bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRv
Y3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+aW1wb3J0TW9kdWxlKGdsb2JhbE9iamVjdCwgZXhlYywg
bW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBzb3VyY2VPcmlnaW4pOworICAgICAgICByZXR1cm4g
ZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLmltcG9ydE1vZHVsZShnbG9iYWxPYmplY3QsIGV4ZWMs
IG1vZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwgc291cmNlT3JpZ2luKTsKICAgICBKU0M6OkpTSW50
ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4gZGVmZXJyZWQt
PnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9BY3RpdmVET01PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuaAppbmRleCBlMjcwNTNmYTVkZmZhMmNmYzlmMWQ5MzRjZjNjNzUyMDY1ZWQ1NGJlLi5m
OTVhMDZkYmZkZTkzYjI4ZTBhNTRkMTViODJjMmNlNWNhYzYzNjZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0FjdGl2ZURPTU9iamVjdC5oCkBAIC03MCwxOCArNzAsMTggQEAgcHVibGljOgogICAgIC8vIEl0
IGNhbiwgaG93ZXZlciwgaGF2ZSBhIHNpZGUgZWZmZWN0IG9mIGRlbGV0aW5nIGFuIEFjdGl2ZURP
TU9iamVjdC4KICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gdm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoVCogdGhpc09iamVjdCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHNldFBlbmRpbmdBY3Rpdml0eShUJiB0aGlzT2JqZWN0KQogICAgIHsK
LSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QgPT0gdGhpcyk7Ci0gICAgICAgIHRoaXNPYmplY3Qt
PnJlZigpOworICAgICAgICBBU1NFUlQoJnRoaXNPYmplY3QgPT0gdGhpcyk7CisgICAgICAgIHRo
aXNPYmplY3QucmVmKCk7CiAgICAgICAgICsrbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHVuc2V0UGVuZGluZ0FjdGl2aXR5KFQqIHRo
aXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rp
dml0eShUJiB0aGlzT2JqZWN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0FjdGl2
aXR5Q291bnQgPiAwKTsKICAgICAgICAgLS1tX3BlbmRpbmdBY3Rpdml0eUNvdW50OwotICAgICAg
ICB0aGlzT2JqZWN0LT5kZXJlZigpOworICAgICAgICB0aGlzT2JqZWN0LmRlcmVmKCk7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNw
cAppbmRleCBhZTU2ZDY5ZDBlZDRjMmU2OGJlOWQ5NWYwMWI0YzcwNGM1ZjE1MWMzLi4yMjg4ZTMx
YmFkOTBkMmYyNGJjYzAyMWNmOTRmYjFiNTRkNjFmMDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0
YShjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7
CiAKICAgICBpZiAobV9kYXRhID09IG5vbk51bGxEYXRhICYmIGNhblVzZVNldERhdGFPcHRpbWl6
YXRpb24oKnRoaXMpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQodGhpcywgMCwg
b2xkTGVuZ3RoKTsKKyAgICAgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgqdGhpcywgMCwgb2xk
TGVuZ3RoKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgIGRv
Y3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkudGV4dFdhc1JlcGxhY2VkKHRoaXMsIDAsIG9s
ZExlbmd0aCwgb2xkTGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjEsNyArNjEsNyBAQCB2
b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIFJlZjxD
aGFyYWN0ZXJEYXRhPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAogICAgIHNldERhdGFBbmRVcGRh
dGUobm9uTnVsbERhdGEsIDAsIG9sZExlbmd0aCwgbm9uTnVsbERhdGEubGVuZ3RoKCkpOwotICAg
IGRvY3VtZW50KCkudGV4dFJlbW92ZWQodGhpcywgMCwgb2xkTGVuZ3RoKTsKKyAgICBkb2N1bWVu
dCgpLnRleHRSZW1vdmVkKCp0aGlzLCAwLCBvbGRMZW5ndGgpOwogfQogCiBFeGNlcHRpb25PcjxT
dHJpbmc+IENoYXJhY3RlckRhdGE6OnN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBjb3VudCkKQEAgLTEyOCw3ICsxMjgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDaGFyYWN0
ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhKQog
CiAgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgMCwgZGF0YS5sZW5ndGgoKSk7
CiAKLSAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3Ro
KCkpOworICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVu
Z3RoKCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBDaGFyYWN0ZXJEYXRhOjpkZWxldGVEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgY291bnQpCiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3Vu
dCwgMCk7CiAKLSAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIG9mZnNldCwgY291bnQp
OworICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE2NCw4ICsxNjQsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBD
aGFyYWN0ZXJEYXRhOjpyZXBsYWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50
LCBjbwogICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxl
bmd0aCgpKTsKIAogICAgIC8vIHVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGwgY2hlY2tpbmcg
YW5kIGdyYW1tYXIgY2hlY2tpbmcKLSAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIG9m
ZnNldCwgY291bnQpOwotICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKHRoaXMsIG9mZnNldCwg
ZGF0YS5sZW5ndGgoKSk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgqdGhpcywgb2Zmc2V0
LCBjb3VudCk7CisgICAgZG9jdW1lbnQoKS50ZXh0SW5zZXJ0ZWQoKnRoaXMsIG9mZnNldCwgZGF0
YS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggZGFkNWE2OTJhZjQyNmFiNWU2NTQzMTgzNDU0ODYzYTIxZDAyNTk1Ny4uYzlmZjU2OWVm
MTA4ZmM5ZmUzNjk5MGFmZWI0NmY4ZTQzMjc5ZGFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC02ODEsMjIgKzY4MSwyMCBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5QWNj
ZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5KQogICAgIGlmIChrZXkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1fYWNjZXNzS2V5TWFwVmFsaWQpIHsKLSAgICAg
ICAgYnVpbGRBY2Nlc3NLZXlNYXAodGhpcyk7CisgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKCp0
aGlzKTsKICAgICAgICAgbV9hY2Nlc3NLZXlNYXBWYWxpZCA9IHRydWU7CiAgICAgfQogICAgIHJl
dHVybiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtleS5pbXBsKCkpOwogfQogCi12b2lkIERv
Y3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHNjb3BlKQordm9pZCBEb2N1bWVu
dDo6YnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiBzY29wZSkKIHsKLSAgICBBU1NFUlQoc2Nv
cGUpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+
KHNjb3BlLT5yb290Tm9kZSgpKSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vz
c0tleSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhY2Nlc3NrZXlB
dHRyKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50
PihzY29wZS5yb290Tm9kZSgpKSkgeworICAgICAgICBhdXRvJiBhY2Nlc3NLZXkgPSBlbGVtZW50
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CiAgICAgICAg
IGlmICghYWNjZXNzS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vz
c0tleS5zZXQoYWNjZXNzS2V5LmltcGwoKSwgJmVsZW1lbnQpOwotCi0gICAgICAgIGlmIChTaGFk
b3dSb290KiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCi0gICAgICAgICAgICBidWlsZEFj
Y2Vzc0tleU1hcChyb290KTsKKyAgICAgICAgaWYgKGF1dG8qIHJvb3QgPSBlbGVtZW50LnNoYWRv
d1Jvb3QoKSkKKyAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKCpyb290KTsKICAgICB9CiB9
CiAKQEAgLTE1ODEsMTQgKzE1NzksMTQgQEAgdm9pZCBEb2N1bWVudDo6dGl0bGVFbGVtZW50VGV4
dENoYW5nZWQoRWxlbWVudCYgdGl0bGVFbGVtZW50KQogICAgIHVwZGF0ZVRpdGxlRnJvbVRpdGxl
RWxlbWVudCgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclZpc2liaWxpdHlTdGF0
ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCogY2xpZW50KQordm9pZCBE
b2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2li
aWxpdHlDaGFuZ2VDbGllbnQmIGNsaWVudCkKIHsKLSAgICBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxi
YWNrQ2xpZW50cy5hZGQoY2xpZW50KTsKKyAgICBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrQ2xp
ZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVu
dCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2Fs
bGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQmIGNsaWVudCkKIHsKLSAgICBtX3Zpc2liaWxp
dHlTdGF0ZUNhbGxiYWNrQ2xpZW50cy5yZW1vdmUoY2xpZW50KTsKKyAgICBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrQ2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKQpAQCAtMzYwMSwxNSArMzU5OSwxNSBAQCB2b2lkIERv
Y3VtZW50Ojp1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpemUoKQogICAgIH0KIH0KIAotdm9pZCBE
b2N1bWVudDo6YWRkQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1Byb2R1Y2VyKQor
dm9pZCBEb2N1bWVudDo6YWRkQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBhdWRpb1Byb2R1
Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMuYWRkKGF1ZGlvUHJvZHVjZXIpOworICAgIG1f
YXVkaW9Qcm9kdWNlcnMuYWRkKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1cGRhdGVJc1BsYXlpbmdN
ZWRpYSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZW1vdmVBdWRpb1Byb2R1Y2VyKE1lZGlhUHJv
ZHVjZXIqIGF1ZGlvUHJvZHVjZXIpCit2b2lkIERvY3VtZW50OjpyZW1vdmVBdWRpb1Byb2R1Y2Vy
KE1lZGlhUHJvZHVjZXImIGF1ZGlvUHJvZHVjZXIpCiB7Ci0gICAgbV9hdWRpb1Byb2R1Y2Vycy5y
ZW1vdmUoYXVkaW9Qcm9kdWNlcik7CisgICAgbV9hdWRpb1Byb2R1Y2Vycy5yZW1vdmUoJmF1ZGlv
UHJvZHVjZXIpOwogICAgIHVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiB9CiAKQEAgLTM3MDEsMjQg
KzM2OTksMjQgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUoTm9k
ZSYgbm9kZSwgYm9vbCBhbW9uZ0NoaWxkcmVuT25seSkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1l
bnQ6OmhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3Vt
ZW50Ojpob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlm
ICghbV9ob3ZlcmVkRWxlbWVudCB8fCBlbGVtZW50ICE9IG1faG92ZXJlZEVsZW1lbnQpCisgICAg
aWYgKCFtX2hvdmVyZWRFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1faG92ZXJlZEVsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1faG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCk7CisgICAgbV9ob3ZlcmVkRWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgp
OwogICAgIHdoaWxlIChtX2hvdmVyZWRFbGVtZW50ICYmICFtX2hvdmVyZWRFbGVtZW50LT5yZW5k
ZXJlcigpKQogICAgICAgICBtX2hvdmVyZWRFbGVtZW50ID0gbV9ob3ZlcmVkRWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpOwogICAgIGlmIChmcmFtZSgpKQogICAgICAgICBmcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS5zY2hlZHVsZUhvdmVyU3RhdGVVcGRhdGUoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
ZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgRG9j
dW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgaWYgKCFtX2FjdGl2ZUVsZW1lbnQgfHwgZWxlbWVudCAhPSBtX2FjdGl2ZUVsZW1lbnQp
CisgICAgaWYgKCFtX2FjdGl2ZUVsZW1lbnQgfHwgJmVsZW1lbnQgIT0gbV9hY3RpdmVFbGVtZW50
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2FjdGl2ZUVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCk7CisgICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50
KCk7CiAgICAgd2hpbGUgKG1fYWN0aXZlRWxlbWVudCAmJiAhbV9hY3RpdmVFbGVtZW50LT5yZW5k
ZXJlcigpKQogICAgICAgICBtX2FjdGl2ZUVsZW1lbnQgPSBtX2FjdGl2ZUVsZW1lbnQtPnBhcmVu
dEVsZW1lbnQoKTsKIH0KQEAgLTM5OTYsMjYgKzM5OTQsMjYgQEAgdm9pZCBEb2N1bWVudDo6Y29s
bGVjdGlvbldpbGxDbGVhcklkTmFtZU1hcChjb25zdCBIVE1MQ29sbGVjdGlvbiYgY29sbGVjdGlv
bikKICAgICBtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50c1tJbnZhbGlkYXRlT25JZE5hbWVB
dHRyQ2hhbmdlXS0tOwogfQogCi12b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRlcmF0b3IoTm9k
ZUl0ZXJhdG9yKiBuaSkKK3ZvaWQgRG9jdW1lbnQ6OmF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRl
cmF0b3ImIGl0ZXJhdG9yKQogewotICAgIG1fbm9kZUl0ZXJhdG9ycy5hZGQobmkpOworICAgIG1f
bm9kZUl0ZXJhdG9ycy5hZGQoJml0ZXJhdG9yKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGV0YWNo
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2b2lkIERvY3VtZW50OjpkZXRhY2hOb2Rl
SXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikKIHsKICAgICAvLyBUaGUgbm9kZSBpdGVy
YXRvciBjYW4gYmUgZGV0YWNoZWQgd2l0aG91dCBoYXZpbmcgYmVlbiBhdHRhY2hlZCBpZiBpdHMg
cm9vdCBub2RlIGRpZG4ndCBoYXZlIGEgZG9jdW1lbnQKICAgICAvLyB3aGVuIHRoZSBpdGVyYXRv
ciB3YXMgY3JlYXRlZCwgYnV0IGhhcyBpdCBub3cuCi0gICAgbV9ub2RlSXRlcmF0b3JzLnJlbW92
ZShuaSk7CisgICAgbV9ub2RlSXRlcmF0b3JzLnJlbW92ZSgmaXRlcmF0b3IpOwogfQogCiB2b2lk
IERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQoTm9kZSYgbm9kZSwgRG9j
dW1lbnQmIG5ld0RvY3VtZW50KQogewogICAgIFZlY3RvcjxOb2RlSXRlcmF0b3IqPiBub2RlSXRl
cmF0b3JzOwogICAgIGNvcHlUb1ZlY3RvcihtX25vZGVJdGVyYXRvcnMsIG5vZGVJdGVyYXRvcnMp
OwotICAgIGZvciAoYXV0byogaXQgOiBub2RlSXRlcmF0b3JzKSB7Ci0gICAgICAgIGlmICgmaXQt
PnJvb3QoKSA9PSAmbm9kZSkgewotICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJhdG9yKGl0KTsK
LSAgICAgICAgICAgIG5ld0RvY3VtZW50LmF0dGFjaE5vZGVJdGVyYXRvcihpdCk7CisgICAgZm9y
IChhdXRvKiBpdGVyYXRvciA6IG5vZGVJdGVyYXRvcnMpIHsKKyAgICAgICAgaWYgKCZpdGVyYXRv
ci0+cm9vdCgpID09ICZub2RlKSB7CisgICAgICAgICAgICBkZXRhY2hOb2RlSXRlcmF0b3IoKml0
ZXJhdG9yKTsKKyAgICAgICAgICAgIG5ld0RvY3VtZW50LmF0dGFjaE5vZGVJdGVyYXRvcigqaXRl
cmF0b3IpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDA1NSw3ICs0MDUzLDcgQEAgdm9pZCBE
b2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJiBjb250YWlu
ZXIpCiAKICAgICBpZiAobV9tYXJrZXJzLT5oYXNNYXJrZXJzKCkpIHsKICAgICAgICAgZm9yIChU
ZXh0KiB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpmaXJzdENoaWxkKGNvbnRhaW5lcik7
IHRleHROb2RlOyB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZygqdGV4
dE5vZGUpKQotICAgICAgICAgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHROb2RlKTsK
KyAgICAgICAgICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2VycygqdGV4dE5vZGUpOwogICAgIH0K
IH0KIApAQCAtNDA4Myw3ICs0MDgxLDcgQEAgdm9pZCBEb2N1bWVudDo6bm9kZVdpbGxCZVJlbW92
ZWQoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBpZiAoaXM8VGV4dD4obm9kZSkpCi0gICAgICAg
IG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycygmbm9kZSk7CisgICAgICAgIG1fbWFya2Vycy0+cmVt
b3ZlTWFya2Vycyhub2RlKTsKIH0KIAogc3RhdGljIE5vZGUqIGZhbGxiYWNrRm9jdXNOYXZpZ2F0
aW9uU3RhcnRpbmdOb2RlQWZ0ZXJSZW1vdmFsKE5vZGUmIG5vZGUpCkBAIC00MTAyLDcgKzQxMDAs
NyBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVGb2N1c05hdmlnYXRpb25Ob2RlT2ZTdWJ0cmVlKE5v
ZGUmIG5vZGUsIGJvb2wgYW1vbmdDaGlsZHJlbgogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudDo6
dGV4dEluc2VydGVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQordm9pZCBEb2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQxMTMsNyArNDExMSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKICAgICBtX21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0ZXh0LCBvZmZz
ZXQsIGxlbmd0aCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQs
IHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEb2N1bWVudDo6dGV4dFJl
bW92ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiByYW5nZSA6
IG1fcmFuZ2VzKQpAQCAtNDEyNSwxMCArNDEyMywxMCBAQCB2b2lkIERvY3VtZW50Ojp0ZXh0UmVt
b3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICBt
X21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0ZXh0LCBvZmZzZXQgKyBsZW5ndGgsIDAgLSBsZW5ndGgp
OwogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwgdW5z
aWduZWQgb2Zmc2V0KQordm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRleHQmIG9sZE5v
ZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewot
ICAgICAgICBOb2RlV2l0aEluZGV4IG9sZE5vZGVXaXRoSW5kZXgob2xkTm9kZSk7CisgICAgICAg
IE5vZGVXaXRoSW5kZXggb2xkTm9kZVdpdGhJbmRleCgmb2xkTm9kZSk7CiAgICAgICAgIGZvciAo
YXV0byogcmFuZ2UgOiBtX3JhbmdlcykKICAgICAgICAgICAgIHJhbmdlLT50ZXh0Tm9kZXNNZXJn
ZWQob2xkTm9kZVdpdGhJbmRleCwgb2Zmc2V0KTsKICAgICB9CkBAIC00MTM2LDcgKzQxMzQsNyBA
QCB2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwgdW5zaWduZWQg
b2Zmc2V0KQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1cGRhdGUgbWFya2VycyBmb3Igc3Bl
bGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcuCiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHROb2Rl
U3BsaXQoVGV4dCogb2xkTm9kZSkKK3ZvaWQgRG9jdW1lbnQ6OnRleHROb2RlU3BsaXQoVGV4dCYg
b2xkTm9kZSkKIHsKICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCiAgICAgICAgIHJh
bmdlLT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOwpAQCAtNDE1NSwxNSArNDE1MywxNSBAQCB2b2lk
IERvY3VtZW50OjpjcmVhdGVET01XaW5kb3coKQogICAgIEFTU0VSVChtX2RvbVdpbmRvdy0+ZnJh
bWUoKSA9PSBtX2ZyYW1lKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dGFrZURPTVdpbmRvd0Zyb20o
RG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBEb2N1bWVudDo6dGFrZURPTVdpbmRvd0Zyb20oRG9j
dW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBBU1NFUlQoIW1f
ZG9tV2luZG93KTsKLSAgICBBU1NFUlQoZG9jdW1lbnQtPm1fZG9tV2luZG93KTsKKyAgICBBU1NF
UlQoZG9jdW1lbnQubV9kb21XaW5kb3cpOwogICAgIC8vIEEgdmFsaWQgRE9NV2luZG93IGlzIG5l
ZWRlZCBieSBDYWNoZWRGcmFtZSBmb3IgaXRzIGRvY3VtZW50cy4KICAgICBBU1NFUlQocGFnZUNh
Y2hlU3RhdGUoKSA9PSBOb3RJblBhZ2VDYWNoZSk7CiAKLSAgICBtX2RvbVdpbmRvdyA9IFdURk1v
dmUoZG9jdW1lbnQtPm1fZG9tV2luZG93KTsKKyAgICBtX2RvbVdpbmRvdyA9IFdURk1vdmUoZG9j
dW1lbnQubV9kb21XaW5kb3cpOwogICAgIG1fZG9tV2luZG93LT5kaWRTZWN1cmVUcmFuc2l0aW9u
VG8oKnRoaXMpOwogCiAgICAgQVNTRVJUKG1fZG9tV2luZG93LT5kb2N1bWVudCgpID09IHRoaXMp
OwpAQCAtNDgxMywxNCArNDgxMSwxNCBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWUoQWN0aXZlRE9N
T2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKICAgICBtX2lzU3VzcGVuZGVkID0g
ZmFsc2U7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fZG9jdW1lbnRT
dXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cy5hZGQoZSk7CisgICAgbV9kb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVu
dCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMu
cmVtb3ZlKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cy5yZW1v
dmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSgp
IApAQCAtNDgyOSwxNCArNDgyNywxNCBAQCB2b2lkIERvY3VtZW50OjptZWRpYVZvbHVtZURpZENo
YW5nZSgpCiAgICAgICAgIGVsZW1lbnQtPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCogZSkK
K3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYg
ZWxlbWVudCkKIHsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5hZGQoZSk7Cisg
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUp
Cit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVu
dCYgZWxlbWVudCkKIHsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5yZW1vdmUo
ZSk7CisgICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsK
IH0KIAogYm9vbCBEb2N1bWVudDo6YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSBj
b25zdApAQCAtNDg3OCwyOSArNDg3NiwyOSBAQCB2b2lkIERvY3VtZW50Ojpwcml2YXRlQnJvd3Np
bmdTdGF0ZURpZENoYW5nZSgpCiAgICAgICAgIGVsZW1lbnQtPnByaXZhdGVCcm93c2luZ1N0YXRl
RGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50OjpyZWdp
c3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuYWRkKGUp
OworICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuYWRkKCZlbGVtZW50
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRl
Q2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZv
clByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKGUpOwor
ICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50
KTsKIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lk
IERvY3VtZW50OjpyZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAocGFnZSgpKQogICAgICAgICBwYWdlKCktPmdy
b3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0SW50ZXJlc3RlZEluQ2FwdGlvblByZWZlcmVu
Y2VDaGFuZ2VzKCk7CiAKLSAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5h
ZGQoZSk7CisgICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMuYWRkKCZlbGVt
ZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKGUpOworICAg
IG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQpAQCAtNDkxMywx
NCArNDkxMSwxNCBAQCB2b2lkIERvY3VtZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkK
IAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAKLXZvaWQgRG9jdW1lbnQ6OnJl
Z2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50
KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9wYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkRWxlbWVudHMuYWRkKGVsZW1lbnQpOworICAgIG1fcGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVu
cmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1l
bnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fcGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTsKKyAgICBtX3BhZ2VT
Y2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERv
Y3VtZW50OjpwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCkKQEAgLTUwMTUsMTAgKzUw
MTMsMTAgQEAgdm9pZCBEb2N1bWVudDo6cG9wQ3VycmVudFNjcmlwdCgpCiAKICNpZiBFTkFCTEUo
WFNMVCkKIAotdm9pZCBEb2N1bWVudDo6YXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKiBwaSkKK3ZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbiYgaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgUmVmUHRyPFhTTFRQcm9jZXNzb3I+IHBy
b2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOwotICAgIHByb2Nlc3Nvci0+c2V0WFNM
U3R5bGVTaGVldChkb3duY2FzdDxYU0xTdHlsZVNoZWV0PihwaS0+c2hlZXQoKSkpOworICAgIGF1
dG8gcHJvY2Vzc29yID0gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlKCk7CisgICAgcHJvY2Vzc29yLT5z
ZXRYU0xTdHlsZVNoZWV0KGRvd25jYXN0PFhTTFN0eWxlU2hlZXQ+KGluc3RydWN0aW9uLnNoZWV0
KCkpKTsKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5nIG5ld1NvdXJjZTsK
ICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7CkBAIC01NDkwLDE3ICs1NDg4LDE3IEBAIHZvaWQg
RG9jdW1lbnQ6OnN0YXRlUG9wcGVkKFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgc3RhdGVP
YmplY3QpCiAgICAgICAgIG1fcGVuZGluZ1N0YXRlT2JqZWN0ID0gV1RGTW92ZShzdGF0ZU9iamVj
dCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlKiByYW5nZSkKK3ZvaWQg
RG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlJiByYW5nZSkKIHsKLSAgICBBU1NFUlQoIW1fcmFu
Z2VzLmNvbnRhaW5zKHJhbmdlKSk7Ci0gICAgbV9yYW5nZXMuYWRkKHJhbmdlKTsKKyAgICBBU1NF
UlQoIW1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkpOworICAgIG1fcmFuZ2VzLmFkZCgmcmFuZ2Up
OwogfQogCi12b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCit2b2lkIERv
Y3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgLy8gV2UgZG9uJ3QgQVNT
RVJUIG1fcmFuZ2VzLmNvbnRhaW5zKHJhbmdlKSB0byBhbGxvdyB1cyB0byBjYWxsIHRoaXMKKyAg
ICAvLyBXZSBkb24ndCBBU1NFUlQgbV9yYW5nZXMuY29udGFpbnMoJnJhbmdlKSB0byBhbGxvdyB1
cyB0byBjYWxsIHRoaXMKICAgICAvLyB1bmNvbmRpdGlvbmFsbHkgdG8gZml4OiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNDQKLSAgICBtX3Jhbmdlcy5yZW1vdmUo
cmFuZ2UpOworICAgIG1fcmFuZ2VzLnJlbW92ZSgmcmFuZ2UpOwogfQogCiBzdGQ6Om9wdGlvbmFs
PFJlbmRlcmluZ0NvbnRleHQ+IERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCkBA
IC01NjQwLDcgKzU2MzgsNyBAQCB2b2lkIERvY3VtZW50OjpzdXNwZW5kU2NoZWR1bGVkVGFza3Mo
QWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbgogCiAgICAgc3VzcGVu
ZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIHN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKHJlYXNvbik7Ci0gICAgc2NyaXB0UnVubmVyKCktPnN1c3BlbmQoKTsKKyAg
ICBzY3JpcHRSdW5uZXIoKS5zdXNwZW5kKCk7CiAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdG9w
KCk7CiAKICAgICAvLyBEZWZlcnJpbmcgbG9hZGluZyBhbmQgc3VzcGVuZGluZyBwYXJzZXIgaXMg
bmVjZXNzYXJ5IHdoZW4gd2UgbmVlZCB0byBwcmV2ZW50IHJlLWVudHJhbnQgSmF2YVNjcmlwdCBl
eGVjdXRpb24KQEAgLTU2NjQsNyArNTY2Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZVNjaGVk
dWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAg
ICAgICAgIG1fcGFyc2VyLT5yZXN1bWVTY2hlZHVsZWRUYXNrcygpOwogICAgIGlmICghbV9wZW5k
aW5nVGFza3MuaXNFbXB0eSgpKQogICAgICAgICBtX3BlbmRpbmdUYXNrc1RpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwotICAgIHNjcmlwdFJ1bm5lcigpLT5yZXN1bWUoKTsKKyAgICBzY3JpcHRSdW5u
ZXIoKS5yZXN1bWUoKTsKICAgICByZXN1bWVBY3RpdmVET01PYmplY3RzKHJlYXNvbik7CiAgICAg
cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CiAgICAgCkBAIC01
NzE3LDE2ICs1NzE1LDE2IEBAIHZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoUG9wc3RhdGVFdmVudChS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0CiAgICAgZGlzcGF0Y2hX
aW5kb3dFdmVudChQb3BTdGF0ZUV2ZW50OjpjcmVhdGUoV1RGTW92ZShzdGF0ZU9iamVjdCksIG1f
ZG9tV2luZG93ID8gbV9kb21XaW5kb3ctPmhpc3RvcnkoKSA6IG51bGxwdHIpKTsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciogbGlzdGVuZXIpCit2b2lkIERvY3VtZW50OjphZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVk
aWFDYW5TdGFydExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKLSAgICBBU1NFUlQoIW1fbWVkaWFDYW5T
dGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVkaWFDYW5TdGFydExp
c3RlbmVycy5hZGQobGlzdGVuZXIpOworICAgIEFTU0VSVCghbV9tZWRpYUNhblN0YXJ0TGlzdGVu
ZXJzLmNvbnRhaW5zKCZsaXN0ZW5lcikpOworICAgIG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5h
ZGQoJmxpc3RlbmVyKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFydExp
c3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIpCit2b2lkIERvY3VtZW50Ojpy
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVkaWFDYW5TdGFydExpc3RlbmVyJiBsaXN0ZW5l
cikKIHsKLSAgICBBU1NFUlQobV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLmNvbnRhaW5zKGxpc3Rl
bmVyKSk7Ci0gICAgbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Cisg
ICAgQVNTRVJUKG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlzdGVuZXIpKTsK
KyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMucmVtb3ZlKCZsaXN0ZW5lcik7CiB9CiAKIE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lciogRG9jdW1lbnQ6OnRha2VBbnlNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIoKQpAQCAtNTczNiwyNCArNTczNCwyMyBAQCBNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIERvY3Vt
ZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKIAogI2lmIEVOQUJMRShERVZJQ0Vf
T1JJRU5UQVRJT04pICYmIFBMQVRGT1JNKElPUykKIAotRGV2aWNlTW90aW9uQ29udHJvbGxlciog
RG9jdW1lbnQ6OmRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdAorRGV2aWNlTW90aW9uQ29u
dHJvbGxlciYgRG9jdW1lbnQ6OmRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdAogewotICAg
IHJldHVybiBtX2RldmljZU1vdGlvbkNvbnRyb2xsZXIuZ2V0KCk7CisgICAgcmV0dXJuICptX2Rl
dmljZU1vdGlvbkNvbnRyb2xsZXI7CiB9CiAKLURldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciog
RG9jdW1lbnQ6OmRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0CitEZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXImIERvY3VtZW50OjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIo
KSBjb25zdAogewotICAgIHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5nZXQo
KTsKKyAgICByZXR1cm4gKm1fZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOwogfQogCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKIAotYm9vbCBEb2N1bWVudDo6ZnVsbFNj
cmVlbklzQWxsb3dlZEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgRG9j
dW1lbnQ6OmZ1bGxTY3JlZW5Jc0FsbG93ZWQoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzQXR0cmlidXRlT25BbGxPd25lcnMoYWxs
b3dmdWxsc2NyZWVuQXR0ciwgd2Via2l0YWxsb3dmdWxsc2NyZWVuQXR0ciwgZWxlbWVudC0+ZG9j
dW1lbnQoKS5vd25lckVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGlzQXR0cmlidXRlT25BbGxPd25l
cnMoYWxsb3dmdWxsc2NyZWVuQXR0ciwgd2Via2l0YWxsb3dmdWxsc2NyZWVuQXR0ciwgZWxlbWVu
dC5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVxdWVz
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxTY3JlZW5DaGVja1R5
cGUgY2hlY2tUeXBlKQpAQCAtNTc3Miw3ICs1NzY5LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVxdWVz
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxTY3JlZW5DaGVja1R5
cGUKIAogICAgICAgICAvLyBUaGUgY29udGV4dCBvYmplY3QncyBub2RlIGRvY3VtZW50LCBvciBh
biBhbmNlc3RvciBicm93c2luZyBjb250ZXh0J3MgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZQogICAg
ICAgICAvLyB0aGUgZnVsbHNjcmVlbiBlbmFibGVkIGZsYWcgc2V0LgotICAgICAgICBpZiAoY2hl
Y2tUeXBlID09IEVuZm9yY2VJRnJhbWVBbGxvd0Z1bGxTY3JlZW5SZXF1aXJlbWVudCAmJiAhZnVs
bFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIGlmIChjaGVja1R5
cGUgPT0gRW5mb3JjZUlGcmFtZUFsbG93RnVsbFNjcmVlblJlcXVpcmVtZW50ICYmICFmdWxsU2Ny
ZWVuSXNBbGxvd2VkKCplbGVtZW50KSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8v
IFRoZSBjb250ZXh0IG9iamVjdCdzIG5vZGUgZG9jdW1lbnQgZnVsbHNjcmVlbiBlbGVtZW50IHN0
YWNrIGlzIG5vdCBlbXB0eSBhbmQgaXRzIHRvcCBlbGVtZW50CkBAIC01ODQ1LDggKzU4NDIsOCBA
QCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAgLy8gc3RhY2ssIGFuZCBxdWV1
ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdpdGggaXRz
IGJ1YmJsZXMgYXR0cmlidXRlCiAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBvbiB0aGUgZG9j
dW1lbnQuCiAgICAgICAgICAgICBpZiAoIWZvbGxvd2luZ0RvYykgewotICAgICAgICAgICAgICAg
IGN1cnJlbnREb2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKGVsZW1lbnQpOwotICAgICAg
ICAgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShjdXJyZW50
RG9jKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVsZW1lbnRT
dGFjaygqZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKCpjdXJyZW50RG9jKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIApAQCAtNTg1Nyw4ICs1ODU0LDggQEAgdm9pZCBEb2N1bWVudDo6cmVx
dWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxTY3JlZW5DaGVj
a1R5cGUKICAgICAgICAgICAgICAgICAvLyAuLi5wdXNoIGZvbGxvd2luZyBkb2N1bWVudCdzIGJy
b3dzaW5nIGNvbnRleHQgY29udGFpbmVyIG9uIGRvY3VtZW50J3MgZnVsbHNjcmVlbiBlbGVtZW50
CiAgICAgICAgICAgICAgICAgLy8gc3RhY2ssIGFuZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBl
dmVudCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlCiAg
ICAgICAgICAgICAgICAgLy8gc2V0IHRvIHRydWUgb24gZG9jdW1lbnQuCi0gICAgICAgICAgICAg
ICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soZm9sbG93aW5nRG9jLT5v
d25lckVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAgICAgIGN1cnJlbnREb2Mt
PnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCpmb2xsb3dpbmdEb2MtPm93bmVyRWxlbWVudCgp
KTsKKyAgICAgICAgICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVl
dWUoKmN1cnJlbnREb2MpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCkBAIC01OTIxLDcgKzU5MTgsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRFeGl0RnVsbHNj
cmVlbigpCiAgICAgLy8gdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFu
Z2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUgb24gZGVzY2VuZGFudC4K
ICAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogZGVzY2VuZGFudHMpIHsKICAgICAgICAgZG9jdW1l
bnQtPmNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwotICAgICAgICBhZGREb2N1bWVudFRv
RnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoZG9jdW1lbnQuZ2V0KCkpOworICAgICAgICBhZGRE
b2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmRvY3VtZW50KTsKICAgICB9CiAK
ICAgICAvLyA1LiBXaGlsZSBkb2MgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJzdGVwczoKQEAg
LTU5MzgsNyArNTkzNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkK
IAogICAgICAgICAvLyAyLiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBmdWxs
c2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlCiAgICAg
ICAgIC8vIG9uIGRvYy4KLSAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVu
dFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5n
ZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwogCiAgICAgICAgIC8vIDMuIElmIGRvYydzIGZ1bGxz
Y3JlZW4gZWxlbWVudCBzdGFjayBpcyBlbXB0eSBhbmQgZG9jJ3MgYnJvd3NpbmcgY29udGV4dCBo
YXMgYSBicm93c2luZyBjb250ZXh0CiAgICAgICAgIC8vIGNvbnRhaW5lciwgc2V0IGRvYyB0byB0
aGF0IGJyb3dzaW5nIGNvbnRleHQgY29udGFpbmVyJ3Mgbm9kZSBkb2N1bWVudC4KQEAgLTU5ODgs
MTMgKzU5ODUsMTEgQEAgc3RhdGljIHZvaWQgdW53cmFwRnVsbFNjcmVlblJlbmRlcmVyKFJlbmRl
ckZ1bGxTY3JlZW4qIGZ1bGxTY3JlZW5SZW5kZXJlciwgRWxlbWUKICAgICAgICAgZnVsbFNjcmVl
bkVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9y
U3VidHJlZSgpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVu
dGVyRnVsbFNjcmVlbihFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghaGFzTGl2aW5nUmVu
ZGVyVHJlZSgpIHx8IHBhZ2VDYWNoZVN0YXRlKCkgIT0gTm90SW5QYWdlQ2FjaGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0
aGUgcGFnZS4KICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjAwMywxMyAr
NTk5OCwxMiBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KQogCiAgICAgdW53cmFwRnVsbFNjcmVlblJlbmRlcmVyKG1f
ZnVsbFNjcmVlblJlbmRlcmVyLCBtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKIAotICAgIGlm
IChlbGVtZW50KQotICAgICAgICBlbGVtZW50LT53aWxsQmVjb21lRnVsbHNjcmVlbkVsZW1lbnQo
KTsKKyAgICBlbGVtZW50LndpbGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOwogICAgIAotICAg
IG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBlbGVtZW50OworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQg
PSAmZWxlbWVudDsKIAogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykKLSAgICBpZiAo
ZWxlbWVudCAmJiBlbGVtZW50LT5pc01lZGlhRWxlbWVudCgpKQorICAgIGlmIChlbGVtZW50Lmlz
TWVkaWFFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCkBAIC02MDMyLDcgKzYw
MjYsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KQogICAgIHJlc29sdmVTdHlsZShSZXNvbHZlU3R5bGVUeXBlOjpS
ZWJ1aWxkKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50KikKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEVudGVyRnVsbFNjcmVl
bigpCiB7CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICByZXR1cm47CkBA
IC02MDQ1LDcgKzYwMzksNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFbnRlckZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQogICAgIG1fZnVsbFNjcmVlbkNoYW5nZURlbGF5VGltZXIu
c3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVs
bFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRXhp
dEZ1bGxTY3JlZW4oKQogewogICAgIGlmICghbV9mdWxsU2NyZWVuRWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwpAQCAtNjA1Niw3ICs2MDUwLDcgQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEV4
aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50
LT53aWxsU3RvcEJlaW5nRnVsbHNjcmVlbkVsZW1lbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQordm9pZCBEb2N1bWVu
dDo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIGlmICghbV9mdWxsU2NyZWVuRWxl
bWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjE5NCwxOSArNjE4OCwxOCBAQCB2b2lkIERvY3Vt
ZW50Ojpwb3BGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCkKICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50
U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi12b2lkIERvY3VtZW50OjpwdXNoRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjayhFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6cHVzaEZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2Z1bGxTY3JlZW5FbGVt
ZW50U3RhY2suYXBwZW5kKGVsZW1lbnQpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnRTdGFjay5h
cHBlbmQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50OjphZGREb2N1bWVudFRvRnVsbFNj
cmVlbkNoYW5nZUV2ZW50UXVldWUoRG9jdW1lbnQqIGRvYykKK3ZvaWQgRG9jdW1lbnQ6OmFkZERv
Y3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgQVNTRVJUKGRvYyk7Ci0gICAgTm9kZSogdGFyZ2V0ID0gZG9jLT53ZWJraXRGdWxsc2Ny
ZWVuRWxlbWVudCgpOworICAgIE5vZGUqIHRhcmdldCA9IGRvY3VtZW50LndlYmtpdEZ1bGxzY3Jl
ZW5FbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9IGRvYy0+d2Vi
a2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAgIHRhcmdldCA9IGRvY3VtZW50
LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0KQotICAg
ICAgICB0YXJnZXQgPSBkb2M7CisgICAgICAgIHRhcmdldCA9ICZkb2N1bWVudDsKICAgICBtX2Z1
bGxTY3JlZW5DaGFuZ2VFdmVudFRhcmdldFF1ZXVlLmFwcGVuZCh0YXJnZXQpOwogfQogCkBAIC02
NjY0LDcgKzY2NTcsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBFbGVtZW50KiBpbgogICAgICAgICAvLyBXZSBh
cmUgY2xlYXJpbmcgdGhlIDphY3RpdmUgY2hhaW4gYmVjYXVzZSB0aGUgbW91c2UgaGFzIGJlZW4g
cmVsZWFzZWQuCiAgICAgICAgIGZvciAoRWxlbWVudCogY3VycmVudEVsZW1lbnQgPSBvbGRBY3Rp
dmVFbGVtZW50OyBjdXJyZW50RWxlbWVudDsgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVu
dC0+cGFyZW50RWxlbWVudEluQ29tcG9zZWRUcmVlKCkpIHsKICAgICAgICAgICAgIGN1cnJlbnRF
bGVtZW50LT5zZXRBY3RpdmUoZmFsc2UpOwotICAgICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVu
dHMuc2V0SW5BY3RpdmVDaGFpbihjdXJyZW50RWxlbWVudCwgZmFsc2UpOworICAgICAgICAgICAg
bV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbigqY3VycmVudEVsZW1lbnQsIGZh
bHNlKTsKICAgICAgICAgfQogICAgICAgICBtX2FjdGl2ZUVsZW1lbnQgPSBudWxscHRyOwogICAg
IH0gZWxzZSB7CkBAIC02Njc2LDcgKzY2NjksNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3Zl
ckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBFbGVtZW50KiBpbgog
ICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBjdXJyLT5lbGVtZW50KCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGN1cnItPmlzVGV4dE9yTGluZUJyZWFrKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1fdXNlckFjdGlv
bkVsZW1lbnRzLnNldEluQWN0aXZlQ2hhaW4oZWxlbWVudCwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbigqZWxlbWVudCwgdHJ1ZSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fYWN0aXZlRWxlbWVudCA9IG5ld0FjdGl2
ZUVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDc3NDEyYTRjOTVjZDU3MTFjMjA1ZmVi
OGU4MjI3MzVkZjZiM2YyYjguLjdkOTNlOGZkMzZkZjgyYzUxOWQ4YTQ0ZDk2ZGZmNWQ4NjJiOGEz
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03MjYsOCArNzI2LDggQEAgcHVibGljOgogICAg
IEVsZW1lbnQqIGZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZShGb2N1c0RpcmVjdGlvbikgY29u
c3Q7CiAKICAgICB2b2lkIHJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUmLCBib29sIGFt
b25nQ2hpbGRyZW5Pbmx5ID0gZmFsc2UpOwotICAgIHZvaWQgaG92ZXJlZEVsZW1lbnREaWREZXRh
Y2goRWxlbWVudCopOwotICAgIHZvaWQgZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goRWxl
bWVudCopOworICAgIHZvaWQgaG92ZXJlZEVsZW1lbnREaWREZXRhY2goRWxlbWVudCYpOworICAg
IHZvaWQgZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goRWxlbWVudCYpOwogCiAgICAgdm9p
ZCB1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgRWxlbWVudCop
OwogCkBAIC03NTQsMTIgKzc1NCwxMiBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEludmFsaWRhdGlvbkZ1bmN0aW9uPgogICAgIHZvaWQgaW52YWxpZGF0ZU5vZGVMaXN0QW5kQ29s
bGVjdGlvbkNhY2hlcyhJbnZhbGlkYXRpb25GdW5jdGlvbik7CiAKLSAgICB2b2lkIGF0dGFjaE5v
ZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqKTsKLSAgICB2b2lkIGRldGFjaE5vZGVJdGVyYXRvcihO
b2RlSXRlcmF0b3IqKTsKKyAgICB2b2lkIGF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3Im
KTsKKyAgICB2b2lkIGRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3ImKTsKICAgICB2b2lk
IG1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChOb2RlJiwgRG9jdW1lbnQmKTsKIAotICAg
IHZvaWQgYXR0YWNoUmFuZ2UoUmFuZ2UqKTsKLSAgICB2b2lkIGRldGFjaFJhbmdlKFJhbmdlKik7
CisgICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSYpOworICAgIHZvaWQgZGV0YWNoUmFuZ2UoUmFu
Z2UmKTsKIAogICAgIHZvaWQgdXBkYXRlUmFuZ2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoQ29udGFp
bmVyTm9kZSYpOwogICAgIC8vIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQgaXMgdXNlZCB3aGVu
IHJlbW92aW5nIGFsbCBub2RlIGNoaWxkcmVuIGF0IG9uY2UuCkBAIC03NzAsMTMgKzc3MCwxMyBA
QCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBBY2NlcHRDaGlsZE9wZXJhdGlvbiB7IFJlcGxhY2Us
IEluc2VydE9yQWRkIH07CiAgICAgYm9vbCBjYW5BY2NlcHRDaGlsZChjb25zdCBOb2RlJiBuZXdD
aGlsZCwgY29uc3QgTm9kZSogcmVmQ2hpbGQsIEFjY2VwdENoaWxkT3BlcmF0aW9uKSBjb25zdDsK
IAotICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlKiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKFRleHQqIG9sZE5vZGUs
IHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUp
OworICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKFRleHQmIG9sZE5vZGUs
IHVuc2lnbmVkIG9mZnNldCk7CisgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUp
OwogCiAgICAgdm9pZCBjcmVhdGVET01XaW5kb3coKTsKLSAgICB2b2lkIHRha2VET01XaW5kb3dG
cm9tKERvY3VtZW50Kik7CisgICAgdm9pZCB0YWtlRE9NV2luZG93RnJvbShEb2N1bWVudCYpOwog
CiAgICAgRE9NV2luZG93KiBkb21XaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2RvbVdpbmRvdy5n
ZXQoKTsgfQogICAgIC8vIEluIERPTSBMZXZlbCAyLCB0aGUgRG9jdW1lbnQncyBET01XaW5kb3cg
aXMgY2FsbGVkIHRoZSBkZWZhdWx0Vmlldy4KQEAgLTg0Nyw3ICs4NDcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwcm9jZXNzUmVmZXJyZXJQb2xpY3koY29uc3QgU3RyaW5nJiBwb2xpY3kpOwogCiAg
ICAgLy8gUmV0dXJucyB0aGUgb3duaW5nIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudC4K
LSAgICAvLyBSZXR1cm5zIDAgaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3VtZW50LgorICAg
IC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCiAg
ICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsKIAogICAgIC8v
IFVzZWQgYnkgRE9NIGJpbmRpbmdzOyBubyBkaXJlY3Rpb24ga25vd24uCkBAIC05NDEsMTcgKzk0
MSwxNyBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnQqIHBhcmVudERvY3VtZW50KCkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQmIHRvcERvY3VtZW50KCkgY29uc3Q7CiAgICAgCi0g
ICAgU2NyaXB0UnVubmVyKiBzY3JpcHRSdW5uZXIoKSB7IHJldHVybiBtX3NjcmlwdFJ1bm5lci5n
ZXQoKTsgfQotICAgIFNjcmlwdE1vZHVsZUxvYWRlciogbW9kdWxlTG9hZGVyKCkgeyByZXR1cm4g
bV9tb2R1bGVMb2FkZXIuZ2V0KCk7IH0KKyAgICBTY3JpcHRSdW5uZXImIHNjcmlwdFJ1bm5lcigp
IHsgcmV0dXJuICptX3NjcmlwdFJ1bm5lcjsgfQorICAgIFNjcmlwdE1vZHVsZUxvYWRlciYgbW9k
dWxlTG9hZGVyKCkgeyByZXR1cm4gKm1fbW9kdWxlTG9hZGVyOyB9CiAKICAgICBIVE1MU2NyaXB0
RWxlbWVudCogY3VycmVudFNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICFtX2N1cnJlbnRTY3JpcHRT
dGFjay5pc0VtcHR5KCkgPyBtX2N1cnJlbnRTY3JpcHRTdGFjay5sYXN0KCkuZ2V0KCkgOiBudWxs
cHRyOyB9CiAgICAgdm9pZCBwdXNoQ3VycmVudFNjcmlwdChIVE1MU2NyaXB0RWxlbWVudCopOwog
ICAgIHZvaWQgcG9wQ3VycmVudFNjcmlwdCgpOwogCiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgdm9p
ZCBhcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpKTsKKyAgICB2b2lk
IGFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYpOwogICAgIFJlZlB0cjxE
b2N1bWVudD4gdHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSB7IHJldHVybiBtX3RyYW5zZm9ybVNv
dXJjZURvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChEb2N1
bWVudCogZG9jKSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2M7IH0KKyAgICB2b2lk
IHNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkgeyBtX3RyYW5z
Zm9ybVNvdXJjZURvY3VtZW50ID0gZG9jdW1lbnQ7IH0KIAogICAgIHZvaWQgc2V0VHJhbnNmb3Jt
U291cmNlKHN0ZDo6dW5pcXVlX3B0cjxUcmFuc2Zvcm1Tb3VyY2U+KTsKICAgICBUcmFuc2Zvcm1T
b3VyY2UqIHRyYW5zZm9ybVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtU291cmNl
LmdldCgpOyB9CkBAIC05OTIsMTcgKzk5MiwxNSBAQCBwdWJsaWM6CiAgICAgUGFnZUNhY2hlU3Rh
dGUgcGFnZUNhY2hlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDYWNoZVN0YXRlOyB9CiAg
ICAgdm9pZCBzZXRQYWdlQ2FjaGVTdGF0ZShQYWdlQ2FjaGVTdGF0ZSk7CiAKLSAgICAvLyBFbGVt
ZW50cyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyBmb3IgdGhlICJzdXNwZW5kKCkiIGFuZAotICAg
IC8vICJyZXN1bWUoKSIgY2FsbGJhY2tzCi0gICAgdm9pZCByZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYpOwogCiAgICAgdm9pZCBkb2N1
bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOwogICAgIHZvaWQgc3VzcGVuZChBY3RpdmVET01PYmpl
Y3Q6OlJlYXNvbkZvclN1c3BlbnNpb24pOwogICAgIHZvaWQgcmVzdW1lKEFjdGl2ZURPTU9iamVj
dDo6UmVhc29uRm9yU3VzcGVuc2lvbik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9yTWVkaWFWb2x1
bWVDYWxsYmFja3MoRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck1lZGlhVm9sdW1l
Q2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxs
YmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJh
Y2tzKEVsZW1lbnQmKTsKICAgICB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiAKICAgICBi
b29sIGF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3Q7CkBAIC0xMDEyLDI4
ICsxMDEwLDI4IEBAIHB1YmxpYzoKICAgICBNZWRpYVNlc3Npb24mIGRlZmF1bHRNZWRpYVNlc3Np
b24oKTsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRl
Q2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yUHJpdmF0
ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lz
dGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmKTsKKyAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
RWxlbWVudCYpOwogICAgIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVEaWRDaGFuZ2UoKTsKICAg
ICB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiAKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRD
YWxsYmFja3MoRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JDYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmKTsKICAg
ICB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICB2b2lkIHJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lz
dGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Kik7
CisgICAgdm9pZCByZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRN
TE1lZGlhRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgcGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwogICAgIHZvaWQgcmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAg
dm9pZCB1bnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWRDYWxs
YmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgdXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbkNoYW5nZWQoKTsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3RlckZvclZpc2liaWxp
dHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCopOwotICAgIHZv
aWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0
eUNoYW5nZUNsaWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFu
Z2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0
ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGll
bnQmKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHJlZ2lzdGVyRm9yQWxsb3dzTWVk
aWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50
Jik7CkBAIC0xMDg0LDggKzEwODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwYXRjaFBvcHN0
YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzdGF0ZU9iamVjdCk7CiAg
ICAgRG9jdW1lbnRFdmVudFF1ZXVlJiBldmVudFF1ZXVlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9ldmVudFF1ZXVlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZE1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNh
blN0YXJ0TGlzdGVuZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXImKTsKICAgICBNZWRpYUNhblN0YXJ0
TGlzdGVuZXIqIHRha2VBbnlNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKTsKIAogI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKQEAgLTExMDIsMTcgKzExMDAsMTcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqLCBGdWxsU2NyZWVuQ2hlY2tUeXBl
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTsKICAg
ICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JF
bGVtZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEVudGVy
RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCop
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbihFbGVt
ZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4o
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKICAgICAK
ICAgICB2b2lkIHNldEZ1bGxTY3JlZW5SZW5kZXJlcihSZW5kZXJGdWxsU2NyZWVuKik7CiAgICAg
UmVuZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9m
dWxsU2NyZWVuUmVuZGVyZXI7IH0KICAgICB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJlckRlc3Ryb3ll
ZCgpOwogICAgIAogICAgIHZvaWQgZnVsbFNjcmVlbkNoYW5nZURlbGF5VGltZXJGaXJlZCgpOwot
ICAgIGJvb2wgZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoRWxlbWVudCopIGNvbnN0Owor
ICAgIGJvb2wgZnVsbFNjcmVlbklzQWxsb3dlZChFbGVtZW50JikgY29uc3Q7CiAgICAgdm9pZCBm
dWxsU2NyZWVuRWxlbWVudFJlbW92ZWQoKTsKICAgICB2b2lkIHJlbW92ZUZ1bGxTY3JlZW5FbGVt
ZW50T2ZTdWJ0cmVlKE5vZGUmLCBib29sIGFtb25nQ2hpbGRyZW5Pbmx5ID0gZmFsc2UpOwogICAg
IGJvb2wgaXNBbmltYXRpbmdGdWxsU2NyZWVuKCkgY29uc3Q7CkBAIC0xMTM5LDggKzExMzcsOCBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pICYmIFBM
QVRGT1JNKElPUykKLSAgICBEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBkZXZpY2VNb3Rpb25Db250
cm9sbGVyKCkgY29uc3Q7Ci0gICAgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKiBkZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKKyAgICBEZXZpY2VNb3Rpb25Db250cm9sbGVy
JiBkZXZpY2VNb3Rpb25Db250cm9sbGVyKCkgY29uc3Q7CisgICAgRGV2aWNlT3JpZW50YXRpb25D
b250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKICNlbmRpZgog
CiAgICAgY29uc3QgRG9jdW1lbnRUaW1pbmcmIHRpbWluZygpIGNvbnN0IHsgcmV0dXJuIG1fZG9j
dW1lbnRUaW1pbmc7IH0KQEAgLTEyNzEsOCArMTI2OSw4IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c1N0eWxlV2l0aFZpZXdwb3J0VW5pdHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1N0eWxlV2l0aFZp
ZXdwb3J0VW5pdHM7IH0KICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6ZSgpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXIq
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9k
dWNlciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQXVkaW9Qcm9kdWNlcihNZWRpYVBy
b2R1Y2VyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBdWRpb1Byb2R1Y2VyKE1l
ZGlhUHJvZHVjZXImKTsKICAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbWVkaWFT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTdGF0ZTsgfQogICAgIHZvaWQgbm90ZVVzZXJJ
bnRlcmFjdGlvbldpdGhNZWRpYUVsZW1lbnQoKTsKICAgICBib29sIGlzQ2FwdHVyaW5nKCkgY29u
c3QgeyByZXR1cm4gTWVkaWFQcm9kdWNlcjo6aXNDYXB0dXJpbmcobV9tZWRpYVN0YXRlKTsgfQpA
QCAtMTQxNyw3ICsxNDE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRpdGxlKGNvbnN0
IFN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICB2b2lkIHVwZGF0ZUJhc2VVUkwoKTsKIAotICAg
IHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlKiByb290KTsKKyAgICB2b2lkIGJ1aWxk
QWNjZXNzS2V5TWFwKFRyZWVTY29wZSYgcm9vdCk7CiAKICAgICB2b2lkIGxvYWRFdmVudERlbGF5
VGltZXJGaXJlZCgpOwogCkBAIC0xNDMwLDggKzE0MjgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZGlzcGF0Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KERlcXVlPFJlZlB0cjxOb2RlPj4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgYm9vbCBzaG91bGROb3RpZnlNZWRpYUVs
ZW1lbnQpOwogICAgIHZvaWQgY2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7CiAgICAgdm9p
ZCBwb3BGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7Ci0gICAgdm9pZCBwdXNoRnVsbHNjcmVlbkVs
ZW1lbnRTdGFjayhFbGVtZW50Kik7Ci0gICAgdm9pZCBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNo
YW5nZUV2ZW50UXVldWUoRG9jdW1lbnQqKTsKKyAgICB2b2lkIHB1c2hGdWxsc2NyZWVuRWxlbWVu
dFN0YWNrKEVsZW1lbnQmKTsKKyAgICB2b2lkIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdl
RXZlbnRRdWV1ZShEb2N1bWVudCYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwCmluZGV4IDkxNGM0NWJlOTM0NzU1NTlmZTZmN2M1OTkzZThlNzBjMTVjZjA4
YjkuLmQ0ZDZkNDM5NTg5NTYyZTc3ZDFhODRkOWFmYjEzMDBlMzRlMDkwZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC02Miw5OSAr
NjIsOTkgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmRldGFjaCgpCiAgICAgbV9w
b3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMgPSB7IH07CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQordm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCiB7Ci0gICAgZm9yIChU
ZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtl
ZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFu
Z2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKLSAgICAgICAg
YWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5
cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVz
Y3JpcHRpb24pKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIo
KSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGll
Y2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbikpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlIHR5cGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFy
a2VyKFJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKIHsKLSAg
ICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRU
ZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7
CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwot
ICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRN
YXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNl
dCgpKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERv
Y3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5l
bmRPZmZzZXQoKSkpOwogICAgIH0KIAogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IHR5cGUpCiB7CiAgICAgYWRkTWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0
T2Zmc2V0LCBzdGFydE9mZnNldCArIGxlbmd0aCkpOwogfQogCi12b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIERv
Y3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJr
ZXI6OkRhdGEmJiBkYXRhKQogewogICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVudE1hcmtlcih0
eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgsIFdURk1vdmUoZGF0YSkpKTsK
IH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcihj
b25zdCBSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCit2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBh
Y3RpdmVNYXRjaCkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsg
IW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtl
ZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFy
a2VkVGV4dC5yYW5nZSgpOwogICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHRleHRQaWVj
ZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNl
LT5lbmRPZmZzZXQoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFp
bmVyKCksIERvY3VtZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZU1hdGNo
KSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3Vt
ZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZU1hdGNoKSk7CiAgICAgfQog
fQogCiAjaWYgUExBVEZPUk0oSU9TKQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkTWFya2VyKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJl
dGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCit2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCiB7
Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0
RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFy
a2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2Uo
KSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2Uo
KTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3Vt
ZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRP
ZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVycHJldGF0aW9ucywgbWV0YWRhdGEpKTsKKyAgICAg
ICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIo
dHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBk
ZXNjcmlwdGlvbiwgaW50ZXJwcmV0YXRpb25zLCBtZXRhZGF0YSkpOwogICAgIH0KIH0KIAotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5h
dGl2ZXNNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0
YXRpb25zKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW50ZXJwcmV0YXRpb25zKQogewogICAgIEFTU0VSVChpbnRlcnByZXRhdGlvbnMuc2l6ZSgp
ID4gMSk7CiAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXplKCkgPD0gMSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc2l6ZV90IG51bWJlck9mQWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0YXRpb25z
LnNpemUoKSAtIDE7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFt
YXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0
SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRU
ZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtl
ZFRleHQucmFuZ2UoKTsKICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyKERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCB0ZXh0UGllY2UtPnN0YXJ0T2Zm
c2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGVtcHR5U3RyaW5nKCksIFZlY3RvcjxTdHJp
bmc+KG51bWJlck9mQWx0ZXJuYXRpdmVzKSwgUmV0YWluUHRyPGlkPigpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkFsdGVybmF0aXZlczsgKytpKQogICAgICAgICAg
ICAgbWFya2VyLnNldEFsdGVybmF0aXZlKGludGVycHJldGF0aW9uc1tpICsgMV0sIGkpOwotICAg
ICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgbWFya2VyKTsKKyAg
ICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgbWFya2VyKTsKICAg
ICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25SZXN1
bHRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKK3Zv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoUmFu
Z2UmIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsKLSAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2Vk
VGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5n
ZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAg
IFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwotICAgICAgICBh
ZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0
ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4oKSwgbWV0YWRh
dGEpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9j
dW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCwgdGV4dFBpZWNlLT5z
dGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBTdHJpbmcoKSwgVmVjdG9yPFN0
cmluZz4oKSwgbWV0YWRhdGEpKTsKICAgICB9CiB9CiAKICNlbmRpZgogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmVmUHRyPFJhbmdlPiBy
YW5nZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29udGVudE1h
cmtlcihSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChy
YW5nZS5nZXQoKSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7
Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwor
ICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRF
bmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgYXV0byB0ZXh0UGllY2UgPSBt
YXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVu
dERhdGEgZHJhZ2dlZENvbnRlbnREYXRhIHsgbWFya2VkVGV4dC5ub2RlKCkgfTsKLSAgICAgICAg
YWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5k
T2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRhKSB9KTsKKyAgICAgICAgYWRkTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dl
ZENvbnRlbnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQo
KSwgV1RGTW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOwogICAgIH0KIH0KIAotdm9pZCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFuZ2UqIHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFu
Z2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5
cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtl
ZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
eworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQu
YXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKCFwb3NzaWJseUhh
c01hcmtlcnMobWFya2VyVHlwZXMpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NF
UlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBp
ZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOworICAgICAgICBhdXRvIHRleHRQaWVjZSA9IG1hcmtl
ZFRleHQucmFuZ2UoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0ZXh0UGllY2Ut
PnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHRleHRQaWVjZS0+
ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIHJlbW92ZU1hcmtlcnMoJnRleHRQaWVjZS0+c3RhcnRDb250
YWluZXIoKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBl
cywgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgICAgICByZW1v
dmVNYXJrZXJzKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBlcywgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3Zl
cmxhcHBpbmdNYXJrZXIpOwogICAgIH0KIH0KIApAQCAtMzE5LDEzICszMTksMTMgQEAgc3RhdGlj
IGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYg
bmV3TWFya2VyKQogLy8gTWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyIHNvcnRlZCBieSB0aGVp
ciBzdGFydCBvZmZzZXQuCiAvLyBNYXJrZXJzIG9mIHRoZSBzYW1lIHR5cGUgZG8gbm90IG92ZXJs
YXAgZWFjaCBvdGhlci4KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtl
cihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKSAKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSYgbm9kZSwgY29uc3QgRG9jdW1l
bnRNYXJrZXImIG5ld01hcmtlcikKIHsKICAgICBBU1NFUlQobmV3TWFya2VyLmVuZE9mZnNldCgp
ID49IG5ld01hcmtlci5zdGFydE9mZnNldCgpKTsKICAgICBpZiAobmV3TWFya2VyLmVuZE9mZnNl
dCgpID09IG5ld01hcmtlci5zdGFydE9mZnNldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoYXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKSB7CisgICAgaWYgKGF1dG8qIHJl
bmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBGYWN0b3IgdGhl
IG1hcmtlciBwYWludGluZyBjb2RlIG91dCBvZiBJbmxpbmVUZXh0Qm94IGFuZCB0ZWFjaCBzaW1w
bGUgbGluZSBsYXlvdXQgdG8gdXNlIGl0LgogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oKnJl
bmRlcmVyKSkKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuZW5z
dXJlTGluZUJveGVzKCk7CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3
TWEKIAogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzIHw9IG5ld01hcmtlci50eXBl
KCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBtX21hcmtlcnMu
YWRkKG5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWFya2VyTGlzdD4mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKICAgICAgICAgbGlzdCA9IHN0ZDo6bWFrZV91
bmlxdWU8TWFya2VyTGlzdD4oKTsKQEAgLTM5MCwxNSArMzkwLDE1IEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJr
ZXImIG5ld01hCiAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50TWFya2Vy
KHRvSW5zZXJ0KSk7CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAg
IG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAobm9kZS5yZW5kZXJlcigpKQor
ICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIAotICAgIGludmFsaWRhdGVSZWN0
c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgIGludmFsaWRhdGVSZWN0c0Zvck1hcmtlcnNJ
bk5vZGUobm9kZSk7CiB9CiAKIC8vIGNvcGllcyBtYXJrZXJzIGZyb20gc3JjTm9kZSB0byBkc3RO
b2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3BpZXMuICBU
aGUgc2hpZnQgaXMKIC8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMgY3JlYXRlZCB0
aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNyY05vZGUuCi12
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSogc3JjTm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUsIGludCBkZWx0
YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlJiBzcmNO
b2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9kZSwgaW50
IGRlbHRhKQogewogICAgIGlmIChsZW5ndGggPD0gMCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA3
LDcgKzQwNyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhO
b2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICAgICAgcmV0dXJuOwogICAg
IEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
bV9tYXJrZXJzLmdldChzcmNOb2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJz
LmdldCgmc3JjTm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTQz
MywxMSArNDMzLDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vy
cyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICAgICAgYWRkTWFya2Vy
KGRzdE5vZGUsIG1hcmtlcik7CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIGRzdE5vZGUt
PnJlbmRlcmVyKCkpCi0gICAgICAgIGRzdE5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAg
ICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS5yZW5kZXJlcigpKQorICAgICAgICBkc3ROb2RlLnJl
bmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5n
dGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3Zl
TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcikKIHsKICAgICBpZiAobGVuZ3RoIDw9IDApCiAgICAgICAgIHJldHVybjsKQEAg
LTQ0Niw3ICs0NDYsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICByZXR1cm47
CiAgICAgQVNTRVJUKCEobV9tYXJrZXJzLmlzRW1wdHkoKSkpOwogCi0gICAgTWFya2VyTGlzdCog
bGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFy
a2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
OTMsMTMgKzQ5MywxMyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgIH0KIAogICAgIGlm
IChsaXN0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9tYXJrZXJzLnJlbW92ZShub2RlKTsKKyAg
ICAgICAgbV9tYXJrZXJzLnJlbW92ZSgmbm9kZSk7CiAgICAgICAgIGlmIChtX21hcmtlcnMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMgPSB7IH07
CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAg
IG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAoZG9jRGlydHkgJiYgbm9kZS5y
ZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAogRG9j
dW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1Bv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
bWFya2VyVHlwZSkKQEAgLTUyMywxMyArNTIzLDEzIEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2lu
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
Kj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5vZGUsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0Zv
cihOb2RlJiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtl
clR5cGVzKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4g
cmVzdWx0OwotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3Qp
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTU1Myw3ICs1NTMsNyBAQCBWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0lu
UmFuZ2UoUmFuZ2UmCiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5v
ZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBw
YXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAg
ICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICAgICAgZm9yIChh
dXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICAgICAgaWYgKCFtYXJr
ZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5l
bmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydE9mZnNldCgpKQpAQCAtNTY2LDEzICs1NjYsMTMgQEAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
Om1hcmtlcnNJblJhbmdlKFJhbmdlJgogICAgIHJldHVybiBmb3VuZE1hcmtlcnM7CiB9CiAKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCit2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQogewogICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAgICAgCi0gICAgTWFya2VyTWFwOjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOworICAgIE1hcmtlck1hcDo6aXRlcmF0
b3IgaXRlcmF0b3IgPSBtX21hcmtlcnMuZmluZCgmbm9kZSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9
IG1fbWFya2Vycy5lbmQoKSkKICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGl0ZXJhdG9y
LCBtYXJrZXJUeXBlcyk7CiB9CkBAIC02NjMsMTMgKzY2MywxMyBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeQogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0
TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
QVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBt
X21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0
KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjgwLDcgKzY4
MCw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSog
bm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAg
ICBpbnQgdGFyZ2V0U3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRlbHRhOwog
ICAgICAgICBpbnQgdGFyZ2V0RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgpICsgZGVsdGE7
Ci0gICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLT5tYXhDaGFyYWN0ZXJPZmZz
ZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkgeworICAgICAgICBpZiAodGFyZ2V0U3RhcnRP
ZmZzZXQgPj0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0g
MCkgewogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KQEAgLTY5OSw3ICs2OTksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgog
ICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQodGFyZ2V0
RW5kT2Zmc2V0IDwgbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgPyB0YXJnZXRFbmRPZmZzZXQg
OiBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CisgICAgICAgICAgICBtYXJrZXIuc2V0RW5k
T2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgPyB0YXJn
ZXRFbmRPZmZzZXQgOiBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKTsKICAgICAgICAgICAgIGRp
ZFNoaWZ0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC03MDcsMzQgKzcwNywz
NCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgIH0KIAogICAgIGlmIChkaWRTaGlmdE1h
cmtlcikgewotICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2RlKCpub2RlKTsK
KyAgICAgICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShub2RlKTsKIAotICAgICAg
ICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJl
cGFpbnQoKTsKKyAgICAgICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgICAgIG5vZGUu
cmVuZGVyZXIoKS0+cmVwYWludCgpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkKK3Zv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJhbmdlJiByYW5n
ZSwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRN
YXJrZXI6OmFsbE1hcmtlcnMoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFy
a2Vycy5pc0VtcHR5KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFp
bmVyKCk7CisgICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigp
OworICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAg
Tm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOworICAgIE5vZGUqIHBh
c3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwogCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0g
bm9kZSA9PSAmc3RhcnRDb250YWluZXIgPyByYW5nZS0+c3RhcnRPZmZzZXQoKSA6IDA7Ci0gICAg
ICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lciA/IHJhbmdlLT5l
bmRPZmZzZXQoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICAg
ICAgc2V0TWFya2Vyc0FjdGl2ZShub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmUp
OworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RM
YXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAgICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIgPyByYW5nZS5zdGFy
dE9mZnNldCgpIDogMDsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9kZSA9PSAmZW5k
Q29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCk7CisgICAgICAgIHNldE1hcmtlcnNBY3RpdmUoKm5vZGUsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0aXZlKQogewotICAgIE1hcmtlckxpc3Qq
IGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21h
cmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzUyLDggKzc1Miw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJz
QWN0aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0CiAgICAgICAgIGRpZEFjdGl2
YXRlTWFya2VyID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZGlkQWN0aXZhdGVNYXJrZXIgJiYg
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOwor
ICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtlciAmJiBub2RlLnJlbmRlcmVyKCkpCisgICAgICAgIG5v
ZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCiBib29sIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6aGFzTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCkBAIC03NjcsNyArNzY3LDcgQEAgYm9vbCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXIKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9k
ZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBh
c3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAg
IGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgeworICAgICAgICBmb3IgKGF1
dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoIW1hcmtl
clR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5lciAmJiBtYXJrZXItPmVu
ZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5zdGFydE9mZnNldCgpKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCA5
MDA3YTE4NzNhZDU5YzFkY2NjYTUyNzZlODk0NmViNGVlNWE5MTBhLi5hZmVhNzZhMWFhYzA5MGQx
ODZkZjU4ZTc2N2Q2ZjY2YTk4NjY0OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDgsMTkgKzQ4LDE5IEBAIHB1YmxpYzoKICAgICB+RG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyKCk7CiAKICAgICB2b2lkIGRldGFjaCgpOwotICAgIHZvaWQg
YWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIHZvaWQg
YWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24pOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUqLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1bWVudE1h
cmtlcjo6RGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtl
cihjb25zdCBSYW5nZSosIGJvb2wgYWN0aXZlTWF0Y2gpOworICAgIHZvaWQgYWRkTWFya2VyKFJh
bmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRkTWFya2VyKFJh
bmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRp
b24pOworICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CisgICAgdm9p
ZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5n
ZSYsIGJvb2wgYWN0aXZlTWF0Y2gpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICB2b2lkIGFkZE1h
cmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBS
ZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJl
dGF0aW9ucyk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoUmFuZ2UqLCBjb25z
dCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CisgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYg
bWV0YWRhdGEpOworICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01h
cmtlcihSYW5nZSYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpOworICAg
IHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlJiwgY29uc3QgUmV0YWluUHRyPGlk
PiYgbWV0YWRhdGEpOwogI2VuZGlmCi0gICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihS
ZWZQdHI8UmFuZ2U+KTsKKyAgICB2b2lkIGFkZERyYWdnZWRDb250ZW50TWFya2VyKFJhbmdlJik7
CiAKLSAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2RlLCBpbnQgZGVsdGEpOworICAgIHZvaWQgY29w
eU1hcmtlcnMoTm9kZSYgc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgs
IE5vZGUmIGRzdE5vZGUsIGludCBkZWx0YSk7CiAgICAgYm9vbCBoYXNNYXJrZXJzKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFtX3Bvc3NpYmx5
RXhpc3RpbmdNYXJrZXJUeXBlcy5jb250YWlucyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2Vycygp
KSk7CkBAIC03MiwxNyArNzIsMTcgQEAgcHVibGljOgogICAgIC8vIHJlbW92ZSB0aGUgbWFya2Vy
LiBJZiB0aGUgYXJndW1lbnQgaXMgZmFsc2UsIHdlIHdpbGwgYWRqdXN0IHRoZSBzcGFuIG9mIHRo
ZSBtYXJrZXIgc28gdGhhdCBpdCByZXRhaW5zCiAgICAgLy8gdGhlIHBvcnRpb24gdGhhdCBpcyBv
dXRzaWRlIG9mIHRoZSByYW5nZS4KICAgICBlbnVtIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3QgeyBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyLCBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciB9OwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhS
YW5nZSosIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1h
cmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90
ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgdm9pZCByZW1v
dmVNYXJrZXJzKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCksICBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzKFJh
bmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFy
a2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qg
PSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICB2b2lkIHJlbW92
ZU1hcmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtl
cnMoKSwgIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVtb3ZlTWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9j
dW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUq
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6
OmFsbE1hcmtlcnMoKSk7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSk7CiAgICAgdm9pZCByZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7Ci0gICAgdm9pZCBzaGlm
dE1hcmtlcnMoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpOwotICAgIHZv
aWQgc2V0TWFya2Vyc0FjdGl2ZShSYW5nZSosIGJvb2wpOwotICAgIHZvaWQgc2V0TWFya2Vyc0Fj
dGl2ZShOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9v
bCk7CisgICAgdm9pZCBzaGlmdE1hcmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBp
bnQgZGVsdGEpOworICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYsIGJvb2wpOworICAg
IHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2ln
bmVkIGVuZE9mZnNldCwgYm9vbCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNGb3IoTm9kZSosIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNGb3Io
Tm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1h
cmtlcjo6YWxsTWFya2VycygpKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPik7CiAgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJz
SW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+KTsKIApAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKKyAgICB2
b2lkIGFkZE1hcmtlcihOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKIAogICAgIHR5cGVk
ZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxpc3Q7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+PiBNYXJr
ZXJNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNjg5NTRmNTJlYzNmZGY1Mjc3MjkwODJl
OGIyMTE0NDhiNTI2YzEyYS4uYTFlZDY3YWJkNTRhNzBlYWU1OWUyMDdlOTc5NTNkODMxOTc2ZmFi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIEVsZW1lbnQ6On5F
bGVtZW50KCkKICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW1lbnQoKTsKIAogICAg
IGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOwor
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVtZW50RnJv
bVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogICAgICAgICBBU1NFUlQoIWhhc1BlbmRpbmdSZXNv
dXJjZXMoKSk7CiAgICAgfQogfQpAQCAtNTM3LDI1ICs1MzcsMjUgQEAgYm9vbCBFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpIGNvbnN0CiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRJbkFj
dGl2ZUNoYWluKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsK
LSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0luQWN0aXZlQ2hh
aW4odGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNJ
bkFjdGl2ZUNoYWluKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25FbGVt
ZW50QWN0aXZlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsK
LSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0FjdGl2ZSh0aGlz
KTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0FjdGl2ZSgq
dGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxlbWVudEZvY3VzZWQoKSBj
b25zdAogewogICAgIEFTU0VSVChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAgIHJldHVybiBk
b2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzRm9jdXNlZCh0aGlzKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0ZvY3VzZWQoKnRoaXMpOwogfQog
CiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRIb3ZlcmVkKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51
c2VyQWN0aW9uRWxlbWVudHMoKS5pc0hvdmVyZWQodGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50
KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNIb3ZlcmVkKCp0aGlzKTsKIH0KIAogdm9pZCBFbGVt
ZW50OjpzZXRBY3RpdmUoYm9vbCBmbGFnLCBib29sIHBhdXNlKQpAQCAtNTYzLDcgKzU2Myw3IEBA
IHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZmxhZywgYm9vbCBwYXVzZSkKICAgICBpZiAo
ZmxhZyA9PSBhY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQoKS51c2Vy
QWN0aW9uRWxlbWVudHMoKS5zZXRBY3RpdmUodGhpcywgZmxhZyk7CisgICAgZG9jdW1lbnQoKS51
c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRBY3RpdmUoKnRoaXMsIGZsYWcpOwogCiAgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gdGhpcy0+cmVuZGVyU3R5bGUoKTsKICAgICBib29s
IHJlYWN0c1RvUHJlc3MgPSAocmVuZGVyU3R5bGUgJiYgcmVuZGVyU3R5bGUtPmFmZmVjdGVkQnlB
Y3RpdmUoKSkgfHwgc3R5bGVBZmZlY3RlZEJ5QWN0aXZlKCk7CkBAIC02MTIsNyArNjEyLDcgQEAg
dm9pZCBFbGVtZW50OjpzZXRGb2N1cyhib29sIGZsYWcpCiAgICAgaWYgKGZsYWcgPT0gZm9jdXNl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50
cygpLnNldEZvY3VzZWQodGhpcywgZmxhZyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxl
bWVudHMoKS5zZXRGb2N1c2VkKCp0aGlzLCBmbGFnKTsKICAgICBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCk7CiAKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBl
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudEluQ29tcG9zZWRUcmVlKCkpCkBAIC02MjQs
NyArNjI0LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wgZmxhZykKICAgICBpZiAo
ZmxhZyA9PSBob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50KCkudXNl
ckFjdGlvbkVsZW1lbnRzKCkuc2V0SG92ZXJlZCh0aGlzLCBmbGFnKTsKKyAgICBkb2N1bWVudCgp
LnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEhvdmVyZWQoKnRoaXMsIGZsYWcpOwogCiAgICAgaWYg
KCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFdoZW4gc2V0dGluZyBob3ZlciB0byBmYWxzZSwg
dGhlIHN0eWxlIG5lZWRzIHRvIGJlIHJlY2FsYydkIGV2ZW4gd2hlbgpAQCAtMTYwOSwxNiArMTYw
OSwxNiBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogICAgIHJldHVybiBl
bGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmxlbmd0aCgpOwogfQogCi1ib29sIEVsZW1l
bnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdAor
Ym9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50JiBvdGhl
cikgY29uc3QKIHsKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAgICBvdGhlci0+
c3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGVsZW1lbnREYXRhKCkgPT0gb3Ro
ZXItPmVsZW1lbnREYXRhKCkpCisgICAgb3RoZXIuc3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7
CisgICAgaWYgKGVsZW1lbnREYXRhKCkgPT0gb3RoZXIuZWxlbWVudERhdGEoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgaWYgKGVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVybiBlbGVt
ZW50RGF0YSgpLT5pc0VxdWl2YWxlbnQob3RoZXItPmVsZW1lbnREYXRhKCkpOwotICAgIGlmIChv
dGhlci0+ZWxlbWVudERhdGEoKSkKLSAgICAgICAgcmV0dXJuIG90aGVyLT5lbGVtZW50RGF0YSgp
LT5pc0VxdWl2YWxlbnQoZWxlbWVudERhdGEoKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50RGF0
YSgpLT5pc0VxdWl2YWxlbnQob3RoZXIuZWxlbWVudERhdGEoKSk7CisgICAgaWYgKG90aGVyLmVs
ZW1lbnREYXRhKCkpCisgICAgICAgIHJldHVybiBvdGhlci5lbGVtZW50RGF0YSgpLT5pc0VxdWl2
YWxlbnQoZWxlbWVudERhdGEoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3NzQsNyAr
MTc3NCw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0
aW9uUG9pbnQpCiAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQp
OwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRo
aXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVt
ZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogCiAKICNpZiBQTEFURk9STShNQUMpCkBA
IC0xODE3LDcgKzE4MTcsNyBAQCB2b2lkIEVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3QoUmVmPFNoYWRv
d1Jvb3Q+JiYgbmV3U2hhZG93Um9vdCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFB1c2hTaGFkb3dSb290KCp0aGlzLCBzaGFkb3dSb290KTsKIAogICAgIGlmIChzaGFkb3dSb290
Lm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICBkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KCZzaGFkb3dSb290KTsKKyAgICAgICAgZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChzaGFkb3dSb290KTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVTaGFkb3dSb290
KCkKQEAgLTM1MzAsMTAgKzM1MzAsMTAgQEAgdm9pZCBFbGVtZW50OjpjbGVhckhvdmVyQW5kQWN0
aXZlU3RhdHVzQmVmb3JlRGV0YWNoaW5nUmVuZGVyZXIoKQogICAgIGlmICghaXNVc2VyQWN0aW9u
RWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGhvdmVyZWQoKSkKLSAgICAgICAg
ZG9jdW1lbnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCh0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCgqdGhpcyk7CiAgICAgaWYgKGluQWN0aXZlQ2hh
aW4oKSkKLSAgICAgICAgZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaCh0
aGlzKTsKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmRpZERldGFjaCh0aGlz
KTsKKyAgICAgICAgZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaCgqdGhp
cyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWREZXRhY2goKnRoaXMp
OwogfQogCiB2b2lkIEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmgKaW5kZXggZjZkYmVhYzM0YTVmMzZlYThlMTMwOGI2YjBmYWMxNjIyYmQ3NzQz
My4uNjlmMDdjMDhkNDgzMmYxZjEwODIxYTkxOGQzNThhNmM0MjRkNGZmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCkBAIC0yNTksNyArMjU5LDcgQEAgcHVibGljOgogICAgIC8vIENsb25lcyBhbGwgYXR0
cmlidXRlLWRlcml2ZWQgZGF0YSwgaW5jbHVkaW5nIHN1YmNsYXNzIHNwZWNpZmljcyAodGhyb3Vn
aCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcy4pCiAgICAgdm9pZCBjbG9uZURhdGFGcm9tRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CiAKLSAgICBib29sIGhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVz
KGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdDsKKyAgICBib29sIGhhc0VxdWl2YWxlbnRBdHRy
aWJ1dGVzKGNvbnN0IEVsZW1lbnQmIG90aGVyKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBj
b3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmKSB7IH0K
IApAQCAtNTkzLDE0ICs1OTMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNVc2VyQWN0aW9uRWxl
bWVudEZvY3VzZWQoKSBjb25zdDsKICAgICBib29sIGlzVXNlckFjdGlvbkVsZW1lbnRIb3ZlcmVk
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBhbHdheXNDcmVhdGVVc2VyQWdl
bnRTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIG5lZWQgZm9yIEF0dHIgdG8gY2FsbCB3aWxsTW9kaWZ5QXR0cmlidXRlL2RpZE1v
ZGlmeUF0dHJpYnV0ZS4KLSAgICBmcmllbmQgY2xhc3MgQXR0cjsKLQotICAgIGVudW0gU3luY2hy
b25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIHsgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRy
aWJ1dGUgPSAwLCBJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB9OwotCiAgICAgdm9p
ZCBkaWRBZGRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwogICAgIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1
ZSk7CiAgICAgdm9pZCBkaWRNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUp
OwpAQCAtNjI4LDYgKzYyMyw3IEBAIHByaXZhdGU6CiAgICAgTm9kZVR5cGUgbm9kZVR5cGUoKSBj
b25zdCBmaW5hbDsKICAgICBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0IGZp
bmFsOwogCisgICAgZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgeyBOb3RJblN5
bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSwgSW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRy
aWJ1dGUgfTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZUludGVybmFsKHVuc2lnbmVkIGluZGV4LCBj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgU3luY2hyb25p
emF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB2b2lkIGFkZEF0dHJpYnV0ZUludGVybmFsKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBTeW5jaHJvbml6
YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwo
dW5zaWduZWQgaW5kZXgsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9OYW1lZE5vZGVNYXAuY3BwCmluZGV4IDViNzRhMmIzNTk4ODRkMjU2NTJmZGVlMjgwYWY4
ZjIyNjcwYjUyZDAuLjE3YmNlZTZlYTczODJjYjBjYjU4MzNmMTJhYjVkYzU0YjQ3ZDYwZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiTmFtZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjYsNyArNjUsNyBAQCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IE5hbWVkTm9kZU1hcDo6
cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIFZlY3RvcjxTdHJpbmc+
IE5hbWVkTm9kZU1hcDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiB7CiAgICAgVmVj
dG9yPFN0cmluZz4gbmFtZXMgPSBtX2VsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKLSAgICBp
ZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgaXM8SFRNTERvY3VtZW50PihtX2VsZW1l
bnQuZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYg
bV9lbGVtZW50LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBuYW1lcy5y
ZW1vdmVBbGxNYXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKICAgICAgICAgICAgIGZvciAoYXV0
byBjaGFyYWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4
IDViOTdjNjhlN2I3ZGE4MzZmM2M0ODYwMTM1ODE5MDI0YjJmMDlhYTAuLmI1MjNmOTI1ZmFjNDEy
YTU5MjA0MTRjNzc2NDk1ZDJkOTM1ZDIxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTU5OSw3ICs1
OTksNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgIHdoaWxlIChOb2RlKiBuZXh0
U2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChuZXh0U2li
bGluZy0+bm9kZVR5cGUoKSAhPSBURVhUX05PREUpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBSZWZQdHI8VGV4dD4gbmV4dFRleHQgPSBkb3duY2FzdDxUZXh0PihuZXh0U2li
bGluZyk7CisgICAgICAgICAgICBSZWY8VGV4dD4gbmV4dFRleHQgPSBkb3duY2FzdDxUZXh0Pigq
bmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4dCBub2Rlcy4K
ICAgICAgICAgICAgIGlmICghbmV4dFRleHQtPmxlbmd0aCgpKSB7CkBAIC02MTAsNyArNjEwLDcg
QEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAgICAgLy8gQm90aCBub24tZW1wdHkg
dGV4dCBub2Rlcy4gTWVyZ2UgdGhlbS4KICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHRl
eHQtPmxlbmd0aCgpOwogICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShuZXh0VGV4dC0+ZGF0
YSgpKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkudGV4dE5vZGVzTWVyZ2VkKG5leHRUZXh0Lmdl
dCgpLCBvZmZzZXQpOworICAgICAgICAgICAgZG9jdW1lbnQoKS50ZXh0Tm9kZXNNZXJnZWQobmV4
dFRleHQsIG9mZnNldCk7CiAgICAgICAgICAgICBuZXh0VGV4dC0+cmVtb3ZlKCk7CiAgICAgICAg
IH0KIApAQCAtMTMyMyw3ICsxMzIzLDcgQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9kZShOb2RlKiBv
dGhlcikgY29uc3QKICAgICAgICAgYXV0byYgb3RoZXJFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVu
dD4oKm90aGVyKTsKICAgICAgICAgaWYgKHRoaXNFbGVtZW50LnRhZ1FOYW1lKCkgIT0gb3RoZXJF
bGVtZW50LnRhZ1FOYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghdGhpc0VsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoJm90aGVyRWxlbWVudCkpCisg
ICAgICAgIGlmICghdGhpc0VsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMob3RoZXJFbGVt
ZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggNDVkODYwYmE4NmY0OTAzNjYx
OThiZmU4NDY0ZjFjMjY1MTJlOWI3OS4uZjZmMTAyMDY5YjllZmM0MWE0MjVjZjZkYTNjMjQ3N2Jl
ZWRhMTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKQEAgLTczLDcgKzczLDcg
QEAgaW5saW5lIE5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKE5vZGUmIHJvb3ROb2RlLCB1bnNp
Z25lZCB3aGF0VG9TaG93LCBSZWZQdHI8Tm8KICAgICA6IE5vZGVJdGVyYXRvckJhc2Uocm9vdE5v
ZGUsIHdoYXRUb1Nob3csIFdURk1vdmUoZmlsdGVyKSkKICAgICAsIG1fcmVmZXJlbmNlTm9kZShy
b290Tm9kZSwgdHJ1ZSkKIHsKLSAgICByb290KCkuZG9jdW1lbnQoKS5hdHRhY2hOb2RlSXRlcmF0
b3IodGhpcyk7CisgICAgcm9vdCgpLmRvY3VtZW50KCkuYXR0YWNoTm9kZUl0ZXJhdG9yKCp0aGlz
KTsKIH0KIAogUmVmPE5vZGVJdGVyYXRvcj4gTm9kZUl0ZXJhdG9yOjpjcmVhdGUoTm9kZSYgcm9v
dE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlB0cjxOb2RlRmlsdGVyPiYmIGZpbHRlcikK
QEAgLTgzLDcgKzgzLDcgQEAgUmVmPE5vZGVJdGVyYXRvcj4gTm9kZUl0ZXJhdG9yOjpjcmVhdGUo
Tm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlAKIAogTm9kZUl0ZXJhdG9y
Ojp+Tm9kZUl0ZXJhdG9yKCkKIHsKLSAgICByb290KCkuZG9jdW1lbnQoKS5kZXRhY2hOb2RlSXRl
cmF0b3IodGhpcyk7CisgICAgcm9vdCgpLmRvY3VtZW50KCkuZGV0YWNoTm9kZUl0ZXJhdG9yKCp0
aGlzKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBOb2RlSXRlcmF0b3I6Om5leHRO
b2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4IDRkMzM3
Mjc5YzBlY2JjOTUwZGY0OWVlYjFlNTQyNzQyNzMwZDU5N2QuLjQ1ODFhOTRiMTNlZmI2ZTM4YzM2
N2JhNzE4MjY0YWNlNWU3M2Q2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRp
b0J1dHRvbkdyb3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3Jv
dXBzLmNwcApAQCAtMzAsMzUgKzMwLDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJh
ZGlvQnV0dG9uR3JvdXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFJhZGlvQnV0dG9uR3JvdXAoKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX21lbWJlcnMuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBpc1JlcXVpcmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXF1aXJlZENvdW50OyB9CiAgICAgSFRNTElucHV0RWxlbWVudCogY2hlY2tlZEJ1
dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tlZEJ1dHRvbjsgfQotICAgIHZvaWQgYWRkKEhU
TUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRF
bGVtZW50Kik7Ci0gICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxl
bWVudCopOwotICAgIHZvaWQgcmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICBib29sIGNv
bnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdDsKKyAgICB2b2lkIGFkZChIVE1MSW5wdXRF
bGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCYp
OworICAgIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmKTsK
KyAgICB2b2lkIHJlbW92ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgYm9vbCBjb250YWlucyhI
VE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBt
ZW1iZXJzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxj
Rm9yQWxsQnV0dG9ucygpOwogICAgIHZvaWQgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VDaGVja2VkQnV0dG9u
KEhUTUxJbnB1dEVsZW1lbnQqKTsKICAgICB2b2lkIHNldENoZWNrZWRCdXR0b24oSFRNTElucHV0
RWxlbWVudCopOwogCiAgICAgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj4gbV9tZW1iZXJzOwot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fY2hlY2tlZEJ1dHRvbjsKLSAgICBzaXplX3QgbV9yZXF1
aXJlZENvdW50OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fY2hlY2tlZEJ1dHRvbiB7IG51bGxw
dHIgfTsKKyAgICBzaXplX3QgbV9yZXF1aXJlZENvdW50IHsgMCB9OwogfTsKIAotUmFkaW9CdXR0
b25Hcm91cDo6UmFkaW9CdXR0b25Hcm91cCgpCi0gICAgOiBtX2NoZWNrZWRCdXR0b24obnVsbHB0
cikKLSAgICAsIG1fcmVxdWlyZWRDb3VudCgwKQotewotfQotCiBpbmxpbmUgYm9vbCBSYWRpb0J1
dHRvbkdyb3VwOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gIWlzUmVxdWlyZWQoKSB8
fCBtX2NoZWNrZWRCdXR0b247CkBAIC04OCwxNiArODAsMTYgQEAgdm9pZCBSYWRpb0J1dHRvbkdy
b3VwOjpzZXRDaGVja2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKICAgICAgICAg
b2xkQ2hlY2tlZEJ1dHRvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0
b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9CdXR0b25H
cm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQoYnV0dG9u
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmICghbV9tZW1iZXJzLmFkZChidXR0b24pLmlzTmV3
RW50cnkpCisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmICghbV9t
ZW1iZXJzLmFkZCgmYnV0dG9uKS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47CiAgICAgYm9v
bCBncm91cFdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24tPmlzUmVxdWlyZWQo
KSkKKyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkKICAgICAgICAgKyttX3JlcXVpcmVkQ291
bnQ7Ci0gICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRDaGVja2VkQnV0dG9u
KGJ1dHRvbik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAgIHNldENoZWNrZWRC
dXR0b24oJmJ1dHRvbik7CiAKICAgICBib29sIGdyb3VwSXNWYWxpZCA9IGlzVmFsaWQoKTsKICAg
ICBpZiAoZ3JvdXBXYXNWYWxpZCAhPSBncm91cElzVmFsaWQpCkBAIC0xMDUsMzEgKzk3LDMxIEBA
IHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKICAg
ICBlbHNlIGlmICghZ3JvdXBJc1ZhbGlkKSB7CiAgICAgICAgIC8vIEEgcmFkaW8gYnV0dG9uIG5v
dCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0byBtYWtlIGl0CiAgICAgICAg
IC8vIGludmFsaWQgb25seSBpZiB0aGUgZ3JvdXAgaXMgaW52YWxpZC4KLSAgICAgICAgYnV0dG9u
LT51cGRhdGVWYWxpZGl0eSgpOworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRpdHkoKTsKICAg
ICB9CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJ
bnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRlQ2hlY2tl
ZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQoYnV0dG9uLT5p
c1JhZGlvQnV0dG9uKCkpOwotICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMoYnV0dG9uKSk7
CisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFTU0VSVChtX21lbWJl
cnMuY29udGFpbnMoJmJ1dHRvbikpOwogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1ZhbGlkKCk7Ci0g
ICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRDaGVja2VkQnV0dG9uKGJ1dHRv
bik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAgIHNldENoZWNrZWRCdXR0b24o
JmJ1dHRvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0gYnV0
dG9uKQorICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09ICZidXR0b24pCiAgICAgICAgICAg
ICBzZXRDaGVja2VkQnV0dG9uKG51bGxwdHIpOwogICAgIH0KICAgICBpZiAod2FzVmFsaWQgIT0g
aXNWYWxpZCgpKQogICAgICAgICB1cGRhdGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMoKTsKIH0KIAot
dm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0
RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0dHJpYnV0
ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKQogewotICAgIEFTU0VSVChidXR0b24t
PmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgQVNTRVJUKG1fbWVtYmVycy5jb250YWlucyhidXR0b24p
KTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0b24oKSk7CisgICAgQVNTRVJUKG1fbWVt
YmVycy5jb250YWlucygmYnV0dG9uKSk7CiAgICAgYm9vbCB3YXNWYWxpZCA9IGlzVmFsaWQoKTsK
LSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1dHRvbi5pc1JlcXVpcmVk
KCkpCiAgICAgICAgICsrbV9yZXF1aXJlZENvdW50OwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQobV9yZXF1aXJlZENvdW50KTsKQEAgLTEzOSwyMiArMTMxLDIyIEBAIHZvaWQgUmFkaW9CdXR0
b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRv
bikKICAgICAgICAgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7CiB9CiAKLXZvaWQgUmFk
aW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFk
aW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBB
U1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEhhc2hTZXQ8SFRNTElucHV0RWxl
bWVudCo+OjppdGVyYXRvciBpdCA9IG1fbWVtYmVycy5maW5kKGJ1dHRvbik7CisgICAgQVNTRVJU
KGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIGF1dG8gaXQgPSBtX21lbWJlcnMuZmluZCgm
YnV0dG9uKTsKICAgICBpZiAoaXQgPT0gbV9tZW1iZXJzLmVuZCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBib29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwogICAgIG1fbWVtYmVycy5yZW1vdmUo
aXQpOwotICAgIGlmIChidXR0b24tPmlzUmVxdWlyZWQoKSkgeworICAgIGlmIChidXR0b24uaXNS
ZXF1aXJlZCgpKSB7CiAgICAgICAgIEFTU0VSVChtX3JlcXVpcmVkQ291bnQpOwogICAgICAgICAt
LW1fcmVxdWlyZWRDb3VudDsKICAgICB9CiAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbikgewotICAg
ICAgICBidXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKLSAgICAgICAgaWYgKG1f
Y2hlY2tlZEJ1dHRvbiA9PSBidXR0b24pIHsKKyAgICAgICAgYnV0dG9uLmludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKTsKKyAgICAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSAmYnV0dG9uKSB7
CiAgICAgICAgICAgICBtX2NoZWNrZWRCdXR0b24gPSBudWxscHRyOwogICAgICAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMoKTsKICAgICAgICAgfQpAQCAtMTY4LDcgKzE2
MCw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqIGJ1
dHRvbikKICAgICBpZiAoIXdhc1ZhbGlkKSB7CiAgICAgICAgIC8vIEEgcmFkaW8gYnV0dG9uIG5v
dCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0byBtYWtlIGl0CiAgICAgICAg
IC8vIHZhbGlkIG9ubHkgaWYgdGhlIGdyb3VwIHdhcyBpbnZhbGlkLgotICAgICAgICBidXR0b24t
PnVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAgIGJ1dHRvbi51cGRhdGVWYWxpZGl0eSgpOwogICAg
IH0KIH0KIApAQCAtMTg4LDkgKzE4MCw5IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRl
VmFsaWRpdHlGb3JBbGxCdXR0b25zKCkKICAgICB9CiB9CiAKLWJvb2wgUmFkaW9CdXR0b25Hcm91
cDo6Y29udGFpbnMoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKSBjb25zdAorYm9vbCBSYWRpb0J1
dHRvbkdyb3VwOjpjb250YWlucyhIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fbWVtYmVycy5jb250YWlucyhidXR0b24pOworICAgIHJldHVybiBtX21lbWJl
cnMuY29udGFpbnMoJmJ1dHRvbik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNiwxNiArMTk4LDE2
IEBAIFJhZGlvQnV0dG9uR3JvdXBzOjp+UmFkaW9CdXR0b25Hcm91cHMoKQogewogfQogCi12b2lk
IFJhZGlvQnV0dG9uR3JvdXBzOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkK
K3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChl
bGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0
b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25hbWVUb0dyb3VwTWFw
ID0gc3RkOjptYWtlX3VuaXF1ZTxOYW1lVG9Hcm91cE1hcD4oKTsKIAotICAgIGF1dG8mIGdyb3Vw
ID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCksIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmFk
ZChlbGVtZW50Lm5hbWUoKS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBp
ZiAoIWdyb3VwKQogICAgICAgICBncm91cCA9IHN0ZDo6bWFrZV91bmlxdWU8UmFkaW9CdXR0b25H
cm91cD4oKTsKICAgICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQwLDMwICsyMzIsMjYgQEAg
VmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBSYWRpb0J1dHRvbkdyb3Vwczo6Z3JvdXBNZW1iZXJz
KGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQKICAgICByZXR1cm4gZ3JvdXAtPm1lbWJlcnMoKTsKIH0K
IAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjp1cGRhdGVDaGVja2VkU3Rh
dGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNS
YWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBB
U1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9uYW1lVG9Hcm91cE1hcCk7
CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm47Ci0gICAgUmFkaW9C
dXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC0+bmFtZSgp
LmltcGwoKSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKLSAgICBncm91cC0+dXBkYXRlQ2hlY2tlZFN0
YXRlKGVsZW1lbnQpOworICAgIG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50Lm5hbWUoKS5p
bXBsKCkpLT51cGRhdGVDaGVja2VkU3RhdGUoZWxlbWVudCk7CiB9CiAKLXZvaWQgUmFkaW9CdXR0
b25Hcm91cHM6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhU
TUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9C
dXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJU
KGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fbmFtZVRvR3JvdXBNYXApOwogICAg
IGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgcmV0dXJuOwotICAgIFJhZGlvQnV0dG9u
R3JvdXAqIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5hbWUoKS5pbXBs
KCkpOwotICAgIEFTU0VSVChncm91cCk7Ci0gICAgZ3JvdXAtPnJlcXVpcmVkQXR0cmlidXRlQ2hh
bmdlZChlbGVtZW50KTsKKyAgICBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVudC5uYW1lKCku
aW1wbCgpKS0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKGVsZW1lbnQpOwogfQogCiBIVE1MSW5w
dXRFbGVtZW50KiBSYWRpb0J1dHRvbkdyb3Vwczo6Y2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI3NSwzOCArMjYzLDM2IEBAIEhUTUxJbnB1
dEVsZW1lbnQqIFJhZGlvQnV0dG9uR3JvdXBzOjpjaGVja2VkQnV0dG9uRm9yR3JvdXAoY29uc3Qg
QXRvbWljU3RyaW5nJiBuCiAgICAgcmV0dXJuIGdyb3VwID8gZ3JvdXAtPmNoZWNrZWRCdXR0b24o
KSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgUmFkaW9CdXR0b25Hcm91cHM6Omhhc0NoZWNrZWRCdXR0
b24oY29uc3QgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgUmFkaW9CdXR0
b25Hcm91cHM6Omhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVu
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBlbGVtZW50LT5uYW1lKCk7CisgICAgQVNTRVJUKGVs
ZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBl
bGVtZW50Lm5hbWUoKTsKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgfHwgIW1fbmFtZVRvR3JvdXBN
YXApCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5jaGVja2VkKCk7Ci0KLSAgICBjb25zdCBSYWRp
b0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChuYW1lLmltcGwoKSk7
Ci0gICAgcmV0dXJuIGdyb3VwLT5jaGVja2VkQnV0dG9uKCk7CisgICAgICAgIHJldHVybiBlbGVt
ZW50LmNoZWNrZWQoKTsKKyAgICByZXR1cm4gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KG5hbWUuaW1w
bCgpKS0+Y2hlY2tlZEJ1dHRvbigpOwogfQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXBzOjppc0lu
UmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBSYWRp
b0J1dHRvbkdyb3Vwczo6aXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCYgZWxlbWVu
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBp
ZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlv
QnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdl
dChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKKyAgICBhdXRvKiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmdldChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpOwogICAgIHJldHVybiBncm91cCAmJiBn
cm91cC0+aXNSZXF1aXJlZCgpICYmIGdyb3VwLT5jb250YWlucyhlbGVtZW50KTsKIH0KIAotdm9p
ZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1l
bnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVu
dCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAg
ICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1Jh
ZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fbmFtZVRvR3JvdXBNYXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBOYW1lVG9Hcm91
cE1hcDo6aXRlcmF0b3IgaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQtPm5hbWUo
KS5pbXBsKCkpOworICAgIGF1dG8gaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQu
bmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCmluZGV4IDFlNWE1OGQ1N2RhNzY4NWUxYzAxOGZk
OTZhZmFmMjA3ZWYwMTMzNmEuLjUzMzEyZGRlOTcwNmNlOGQyNGEzZTIxNGFlYzRlY2Y1M2VhZWE4
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCkBAIC0zNCwxMyArMzQs
MTMgQEAgY2xhc3MgUmFkaW9CdXR0b25Hcm91cHMgewogcHVibGljOgogICAgIFJhZGlvQnV0dG9u
R3JvdXBzKCk7CiAgICAgflJhZGlvQnV0dG9uR3JvdXBzKCk7Ci0gICAgdm9pZCBhZGRCdXR0b24o
SFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1
dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRF
bGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCopOworICAg
IHZvaWQgYWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNr
ZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNo
YW5nZWQoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1
dEVsZW1lbnQmKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uRm9yR3JvdXAo
Y29uc3QgQXRvbWljU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0OwotICAgIGJvb2wgaGFzQ2hlY2tl
ZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7Ci0gICAgYm9vbCBpc0luUmVx
dWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBoYXNDaGVja2Vk
QnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKKyAgICBib29sIGlzSW5SZXF1
aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKICAgICBWZWN0b3I8SFRNTElucHV0
RWxlbWVudCo+IGdyb3VwTWVtYmVycyhjb25zdCBIVE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA1ZGFlMDYzNmJiMTk3M2EzNTk3MzgzOTdj
YjYxMzAxZjkwMmUzMGMzLi4zNjE5OTA0N2MzNGNhYjZmMjgxNjVlMGVmODM0YzIyOWE4NGQ3NDMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC03OSw3
ICs3OCw3IEBAIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAg
ICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBtX293bmVyRG9jdW1l
bnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2Uo
KnRoaXMpOwogfQogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9j
dW1lbnQpCkBAIC05Niw3ICs5NSw3IEBAIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93
bmVyRG9jdW1lbnQsIE5vZGUqIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzCiAgICAgcmFu
Z2VDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBtX293bmVyRG9jdW1lbnQtPmF0
dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMp
OwogCiAgICAgLy8gU2ltcGx5IHNldHRpbmcgdGhlIGNvbnRhaW5lcnMgYW5kIG9mZnNldHMgZGly
ZWN0bHkgd291bGQgbm90IGRvIGFueSBvZiB0aGUgY2hlY2tpbmcKICAgICAvLyB0aGF0IHNldFN0
YXJ0IGFuZCBzZXRFbmQgZG8sIHNvIHdlIGNhbGwgdGhvc2UgZnVuY3Rpb25zLgpAQCAtMTI1LDcg
KzEyNCw3IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVu
dCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlCiAKIFJhbmdlOjp+UmFuZ2UoKQogewot
ICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRvY3Vt
ZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgcmFuZ2VDb3Vu
dGVyLmRlY3JlbWVudCgpOwpAQCAtMTM1LDExICsxMzQsMTEgQEAgUmFuZ2U6On5SYW5nZSgpCiB2
b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJU
KG1fb3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOwotICAgIG1fb3duZXJEb2N1bWVu
dC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSgq
dGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgbV9zdGFydC5zZXRU
b1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3Vt
ZW50KTsKLSAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3du
ZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMpOwogfQogCiBOb2RlKiBSYW5nZTo6Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQikKQEAg
LTk3Nyw3ICs5NzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVudD4+IFJhbmdl
OjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJgogICAgICAgICBlbGVtZW50
ID0gJmRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGVsc2UKICAgICAgICAgZWxlbWVudCA9
IG5vZGUucGFyZW50RWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCB8fCAoaXM8SFRNTERvY3Vt
ZW50PihlbGVtZW50LT5kb2N1bWVudCgpKSAmJiBpczxIVE1MSHRtbEVsZW1lbnQ+KCplbGVtZW50
KSkpCisgICAgaWYgKCFlbGVtZW50IHx8IChlbGVtZW50LT5kb2N1bWVudCgpLmlzSFRNTERvY3Vt
ZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50PigqZWxlbWVudCkpKQogICAgICAgICBlbGVtZW50
ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAgICByZXR1cm4g
V2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJrdXAsIEFsbG93
U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0KQEAgLTE2Njks
OSArMTY2OCw5IEBAIHZvaWQgUmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAg
ICAgYm91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZChtX2VuZCwgbm9kZSk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5k
YXJ5LCBOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRp
YyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJv
dW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gdGV4dCkKKyAgICBpZiAoYm91bmRhcnku
Y29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib3Vu
ZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgIGlmIChvZmZzZXQgPj0gYm91bmRh
cnlPZmZzZXQpCkBAIC0xNjc5LDE3ICsxNjc4LDE2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3Vu
ZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0
CiAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KGJvdW5kYXJ5T2Zmc2V0ICsgbGVuZ3RoKTsKIH0KIAot
dm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQordm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBB
U1NFUlQoJnRleHQtPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJU
KCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CiAgICAgYm91bmRhcnlUZXh0
SW5zZXJ0ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJvdW5kYXJ5VGV4
dEluc2VydGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnks
IE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlu
bGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFy
eSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAg
aWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9IHRleHQpCisgICAgaWYgKGJvdW5kYXJ5LmNvbnRh
aW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlP
ZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zm
c2V0KQpAQCAtMTcwMCwxMCArMTY5OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRl
eHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUqIHRleHQsCiAgICAg
ICAgIGJvdW5kYXJ5LnNldE9mZnNldChib3VuZGFyeU9mZnNldCAtIGxlbmd0aCk7CiB9CiAKLXZv
aWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQordm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKHRleHQpOwotICAgIEFTU0VS
VCgmdGV4dC0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoJnRl
eHQuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKICAgICBib3VuZGFyeVRleHRSZW1v
dmVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRleHRSZW1v
dmVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CkBAIC0xNzI4LDE1ICsxNzI1LDE1
IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1
bnNpZ25lZCBvZmZzZXQpCiAgICAgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQobV9lbmQsIG9sZE5v
ZGUsIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1Nw
bGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sZE5vZGUpCitzdGF0aWMg
aW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJv
dW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewotICAgIGF1dG8qIHBhcmVudCA9IG9sZE5vZGUtPnBh
cmVudE5vZGUoKTsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xkTm9kZSkgewot
ICAgICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgpOworICAgIGF1
dG8qIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmIChib3VuZGFyeS5jb250
YWluZXIoKSA9PSAmb2xkTm9kZSkgeworICAgICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9s
ZE5vZGUubGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRh
cnkub2Zmc2V0KCk7CiAgICAgICAgIGlmIChib3VuZGFyeU9mZnNldCA+IHNwbGl0T2Zmc2V0KSB7
CiAgICAgICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldCgq
b2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBzcGxpdE9mZnNldCwgMCk7
CisgICAgICAgICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5leHRTaWJsaW5nKCksIGJv
dW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGJvdW5kYXJ5LnNldE9mZnNldChzcGxpdE9mZnNldCk7CiAgICAgICAgIH0KQEAg
LTE3NDQsMjAgKzE3NDEsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dE5vZGVz
U3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCogb2wKICAgICB9CiAgICAg
aWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVy
KCkgPT0gcGFyZW50ICYmIGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gb2xkTm9kZSkgewotICAg
ICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKGJv
dW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJlZm9yZSgpID09
ICZvbGROb2RlKSB7CisgICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS5uZXh0U2libGlu
ZygpOwogICAgICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgICAgICBib3VuZGFyeS5zZXRUb0Fm
dGVyQ2hpbGQoKm5ld0NoaWxkKTsKICAgICB9CiB9CiAKLXZvaWQgUmFuZ2U6OnRleHROb2RlU3Bs
aXQoVGV4dCogb2xkTm9kZSkKK3ZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9k
ZSkKIHsKLSAgICBBU1NFUlQob2xkTm9kZSk7Ci0gICAgQVNTRVJUKCZvbGROb2RlLT5kb2N1bWVu
dCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAgIEFTU0VSVChvbGROb2RlLT5pc1RleHROb2Rl
KCkpOwotICAgIEFTU0VSVCghb2xkTm9kZS0+cGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUtPm5leHRT
aWJsaW5nKCkpOwotICAgIEFTU0VSVCghb2xkTm9kZS0+cGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUt
Pm5leHRTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKCZvbGROb2RlLmRvY3Vt
ZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCFvbGROb2RlLnBhcmVudE5v
ZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5nKCkpOworICAgIEFTU0VSVCghb2xkTm9kZS5wYXJl
bnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2libGluZygpLT5pc1RleHROb2RlKCkpOwogICAgIGJv
dW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9zdGFydCwgb2xkTm9kZSk7CiAgICAgYm91bmRhcnlUZXh0
Tm9kZXNTcGxpdChtX2VuZCwgb2xkTm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDNmMWM1MGNi
NDRhYWJhMTg2NTQyZTc3NjliNDNkNGY3YmQzZmQ5YzUuLmYyZmM1NDI4ZGZjMmI5M2NjZTI1N2I0
MGE3ODY4ZWJhOTk1OTJlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xMzMsMTAgKzEzMywxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUm
KTsKICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKIAotICAgIHZvaWQgdGV4dElu
c2VydGVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9p
ZCB0ZXh0UmVtb3ZlZChOb2RlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRoSW5kZXgmIG9s
ZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQqIG9s
ZE5vZGUpOworICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAogICAgIC8v
IEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxvY2sgb3IgZG9j
dW1lbnQpIGJvdW5kYXJ5LgogICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmNwcAppbmRleCBhODMzZTI4MjI2ZGRkMWRjZDE0MmQ1Y2EyMmIzNTQ2MmUy
YjljMGVmLi40M2VhZjE0ZDRjZGNmOTRkMDBjYmE3OTEyZmYwNGE5ZjU4YjMxNjUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0yNTYsMTEgKzI1NiwxMSBAQCBib29sIFNj
cmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFy
dFBvc2l0aW9uLCBMZWdhYwogICAgIH0gZWxzZSBpZiAoKGlzQ2xhc3NpY0V4dGVybmFsU2NyaXB0
IHx8IHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6TW9kdWxlKSAmJiAhaGFzQXN5bmNBdHRyaWJ1
dGUoKSAmJiAhbV9mb3JjZUFzeW5jKSB7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJbk9yZGVyID0g
dHJ1ZTsKICAgICAgICAgQVNTRVJUKG1fbG9hZGFibGVTY3JpcHQpOwotICAgICAgICBkb2N1bWVu
dC5zY3JpcHRSdW5uZXIoKS0+cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oKnRoaXMsICptX2xvYWRh
YmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7CisgICAgICAgIGRv
Y3VtZW50LnNjcmlwdFJ1bm5lcigpLnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9s
b2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04pOwogICAgIH0g
ZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgfHwgc2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBl
OjpNb2R1bGUpIHsKICAgICAgICAgQVNTRVJUKG1fbG9hZGFibGVTY3JpcHQpOwogICAgICAgICBB
U1NFUlQoaGFzQXN5bmNBdHRyaWJ1dGUoKSB8fCBtX2ZvcmNlQXN5bmMpOwotICAgICAgICBkb2N1
bWVudC5zY3JpcHRSdW5uZXIoKS0+cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oKnRoaXMsICptX2xv
YWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7CisgICAgICAgIGRv
Y3VtZW50LnNjcmlwdFJ1bm5lcigpLnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9s
b2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOwogICAgIH0gZWxz
ZSBpZiAoIWhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQgJiYgIWRvY3Vt
ZW50LmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7CiAgICAgICAgIEFTU0VSVChzY3JpcHRUeXBl
ID09IFNjcmlwdFR5cGU6OkNsYXNzaWMpOwogICAgICAgICBtX3dpbGxCZVBhcnNlckV4ZWN1dGVk
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCBmZThjOWQ0NjBiMGZjMzE5NmMyNmFiNDI0NmU2
Zjg1Yzc1ODI0MDBiLi5mNjNmNDVlZTgxOGIzMWJlODY4MDY2Mjg2ZWNlZTRkOTgwOTM3ZTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1RleHQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxUZXh0Pj4g
VGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBpbnNl
cnRSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIGRvY3VtZW50KCkudGV4
dE5vZGVTcGxpdCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLnRleHROb2RlU3BsaXQoKnRoaXMpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnNldFRleHRXaXRoT2Zm
c2V0KGRhdGEoKSwgMCwgb2xkRGF0YS5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Vz
ZXJBY3Rpb25FbGVtZW50U2V0LmNwcAppbmRleCBhN2RiZTUxNDZhM2M4OGM0ZWZmY2E3ZmJiMmY3
ZDIxOTM3NzQyOWQ3Li43M2UzYTYyMWQ2ZjhmODE2YjViZDhlZDE2MDc1ZjJkZmVmYjc5Y2E3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5jcHAKQEAgLTMyLDkg
KzMyLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFVzZXJBY3Rpb25FbGVtZW50
U2V0OjpkaWREZXRhY2goRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgVXNlckFjdGlvbkVsZW1lbnRT
ZXQ6OmRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50LT5p
c1VzZXJBY3Rpb25FbGVtZW50KCkpOworICAgIEFTU0VSVChlbGVtZW50LmlzVXNlckFjdGlvbkVs
ZW1lbnQoKSk7CiAgICAgY2xlYXJGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcgfCBJbkFjdGl2
ZUNoYWluRmxhZyB8IElzSG92ZXJlZEZsYWcpOwogfQogCkBAIC00MywzMSArNDMsMjggQEAgdm9p
ZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZG9jdW1lbnREaWRSZW1vdmVMYXN0UmVmKCkKICAgICBt
X2VsZW1lbnRzLmNsZWFyKCk7CiB9CiAKLWJvb2wgVXNlckFjdGlvbkVsZW1lbnRTZXQ6Omhhc0Zs
YWdzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKSBjb25zdAorYm9vbCBV
c2VyQWN0aW9uRWxlbWVudFNldDo6aGFzRmxhZ3MoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgdW5z
aWduZWQgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNlckFjdGlvbkVs
ZW1lbnQoKSk7Ci0gICAgRWxlbWVudEZsYWdNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbV9l
bGVtZW50cy5maW5kKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpKTsKLSAgICBpZiAoZm91
bmQgPT0gbV9lbGVtZW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBmb3VuZC0+dmFsdWUgJiBmbGFnczsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJBY3Rpb25F
bGVtZW50KCkpOworICAgIHJldHVybiBtX2VsZW1lbnRzLmdldChjb25zdF9jYXN0PEVsZW1lbnQq
PigmZWxlbWVudCkpICYgZmxhZ3M7CiB9CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmNs
ZWFyRmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCit2b2lkIFVzZXJBY3Rp
b25FbGVtZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdz
KQogewotICAgIGlmICghZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKSB7Ci0gICAgICAg
IEFTU0VSVChtX2VsZW1lbnRzLmVuZCgpID09IG1fZWxlbWVudHMuZmluZChlbGVtZW50KSk7Cisg
ICAgaWYgKCFlbGVtZW50LmlzVXNlckFjdGlvbkVsZW1lbnQoKSkgeworICAgICAgICBBU1NFUlQo
IW1fZWxlbWVudHMuY29udGFpbnMoJmVsZW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEVsZW1lbnRGbGFnTWFwOjppdGVyYXRvciBmb3VuZCA9IG1fZWxlbWVudHMuZmluZChl
bGVtZW50KTsKKyAgICBhdXRvIGZvdW5kID0gbV9lbGVtZW50cy5maW5kKCZlbGVtZW50KTsKICAg
ICBpZiAoZm91bmQgPT0gbV9lbGVtZW50cy5lbmQoKSkgewotICAgICAgICBlbGVtZW50LT5zZXRV
c2VyQWN0aW9uRWxlbWVudChmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuc2V0VXNlckFjdGlvbkVs
ZW1lbnQoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdW5zaWduZWQgdXBk
YXRlZCA9IGZvdW5kLT52YWx1ZSAmIH5mbGFnczsKICAgICBpZiAoIXVwZGF0ZWQpIHsKLSAgICAg
ICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQoZmFsc2UpOworICAgICAgICBlbGVtZW50
LnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKICAgICAgICAgbV9lbGVtZW50cy5yZW1vdmUo
Zm91bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzUsMTcgKzcyLDE2IEBAIHZvaWQg
VXNlckFjdGlvbkVsZW1lbnRTZXQ6OmNsZWFyRmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWdu
ZWQgZmxhZ3MpCiAgICAgZm91bmQtPnZhbHVlID0gdXBkYXRlZDsKIH0KIAotdm9pZCBVc2VyQWN0
aW9uRWxlbWVudFNldDo6c2V0RmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgZmxhZ3Mp
Cit2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpzZXRGbGFncyhFbGVtZW50JiBlbGVtZW50LCB1
bnNpZ25lZCBmbGFncykKIHsKLSAgICBFbGVtZW50RmxhZ01hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9lbGVtZW50cy5maW5kKGVsZW1lbnQpOwotICAgIGlmIChyZXN1bHQgIT0gbV9lbGVtZW50cy5l
bmQoKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKTsK
LSAgICAgICAgcmVzdWx0LT52YWx1ZSB8PSBmbGFnczsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZWxl
bWVudHMuYWRkKCZlbGVtZW50LCBmbGFncyk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkg
eworICAgICAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGZsYWdzOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQodHJ1ZSk7Ci0gICAgbV9lbGVt
ZW50cy5hZGQoZWxlbWVudCwgZmxhZ3MpOworICAgIGVsZW1lbnQuc2V0VXNlckFjdGlvbkVsZW1l
bnQodHJ1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0
aW9uRWxlbWVudFNldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0
LmgKaW5kZXggY2U3NjRjM2ViODM3MTg3N2JmZThhMWI4OTE1OGE2OGI3MjVmODNlZi4uYTRjNTli
OTIwZmQ5ZDFmZGE0NTEwZjIxOGRjOTM4MzhkMjFiZWUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1VzZXJBY3Rpb25FbGVtZW50U2V0LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjcsOCArMjcsOCBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTYg
KzM2LDE3IEBAIGNsYXNzIEVsZW1lbnQ7CiAKIGNsYXNzIFVzZXJBY3Rpb25FbGVtZW50U2V0IHsK
IHB1YmxpYzoKLSAgICBib29sIGlzRm9jdXNlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KSB7IHJl
dHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0ZvY3VzZWRGbGFnKTsgfQotICAgIGJvb2wgaXNBY3Rp
dmUoY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSXNB
Y3RpdmVGbGFnKTsgfQotICAgIGJvb2wgaXNJbkFjdGl2ZUNoYWluKGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIEluQWN0aXZlQ2hhaW5GbGFnKTsgfQot
ICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0Zs
YWdzKGVsZW1lbnQsIElzSG92ZXJlZEZsYWcpOyB9Ci0gICAgdm9pZCBzZXRGb2N1c2VkKEVsZW1l
bnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJsZSwgSXNG
b2N1c2VkRmxhZyk7IH0KLSAgICB2b2lkIHNldEFjdGl2ZShFbGVtZW50KiBlbGVtZW50LCBib29s
IGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzQWN0aXZlRmxhZyk7IH0KLSAg
ICB2b2lkIHNldEluQWN0aXZlQ2hhaW4oRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsg
c2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0KLSAgICB2b2lk
IHNldEhvdmVyZWQoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0RmxhZ3MoZWxl
bWVudCwgZW5hYmxlLCBJc0hvdmVyZWRGbGFnKTsgfQorICAgIGJvb2wgaXNGb2N1c2VkKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzRm9j
dXNlZEZsYWcpOyB9CisgICAgYm9vbCBpc0FjdGl2ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KSBj
b25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcpOyB9CisgICAgYm9v
bCBpc0luQWN0aXZlQ2hhaW4oY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4g
aGFzRmxhZ3MoZWxlbWVudCwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9CisgICAgYm9vbCBpc0hvdmVy
ZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVu
dCwgSXNIb3ZlcmVkRmxhZyk7IH0KIAotICAgIHZvaWQgZGlkRGV0YWNoKEVsZW1lbnQqKTsKKyAg
ICB2b2lkIHNldEZvY3VzZWQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0Rmxh
Z3MoZWxlbWVudCwgZW5hYmxlLCBJc0ZvY3VzZWRGbGFnKTsgfQorICAgIHZvaWQgc2V0QWN0aXZl
KEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVuYWJs
ZSwgSXNBY3RpdmVGbGFnKTsgfQorICAgIHZvaWQgc2V0SW5BY3RpdmVDaGFpbihFbGVtZW50JiBl
bGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIEluQWN0aXZl
Q2hhaW5GbGFnKTsgfQorICAgIHZvaWQgc2V0SG92ZXJlZChFbGVtZW50JiBlbGVtZW50LCBib29s
IGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzSG92ZXJlZEZsYWcpOyB9CisK
KyAgICB2b2lkIGRpZERldGFjaChFbGVtZW50Jik7CiAgICAgdm9pZCBkb2N1bWVudERpZFJlbW92
ZUxhc3RSZWYoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDEzICs1NywxMyBAQCBwcml2YXRlOgogICAg
ICAgICBJc0ZvY3VzZWRGbGFnICAgICA9IDEgPDwgMwogICAgIH07CiAKLSAgICB2b2lkIHNldEZs
YWdzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlLCB1bnNpZ25lZCBmbGFncykgeyBlbmFi
bGUgPyBzZXRGbGFncyhlbGVtZW50LCBmbGFncykgOiBjbGVhckZsYWdzKGVsZW1lbnQsIGZsYWdz
KTsgfQotICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCosIHVuc2lnbmVkKTsKLSAgICB2b2lkIGNs
ZWFyRmxhZ3MoRWxlbWVudCosIHVuc2lnbmVkKTsKLSAgICBib29sIGhhc0ZsYWdzKGNvbnN0IEVs
ZW1lbnQqLCB1bnNpZ25lZCBmbGFncykgY29uc3Q7CisgICAgdm9pZCBzZXRGbGFncyhFbGVtZW50
JiBlbGVtZW50LCBib29sIGVuYWJsZSwgdW5zaWduZWQgZmxhZ3MpIHsgZW5hYmxlID8gc2V0Rmxh
Z3MoZWxlbWVudCwgZmxhZ3MpIDogY2xlYXJGbGFncyhlbGVtZW50LCBmbGFncyk7IH0KKyAgICB2
b2lkIHNldEZsYWdzKEVsZW1lbnQmLCB1bnNpZ25lZCk7CisgICAgdm9pZCBjbGVhckZsYWdzKEVs
ZW1lbnQmLCB1bnNpZ25lZCk7CisgICAgYm9vbCBoYXNGbGFncyhjb25zdCBFbGVtZW50JiwgdW5z
aWduZWQgZmxhZ3MpIGNvbnN0OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxFbGVtZW50
PiwgdW5zaWduZWQ+IEVsZW1lbnRGbGFnTWFwOwotICAgIEVsZW1lbnRGbGFnTWFwIG1fZWxlbWVu
dHM7CisgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5IHRoaXMgbmVlZHMgdG8gYmUgYSBSZWZQdHIu
IFNob3VsZCBjaGFuZ2UgdG8gYSBjb25zdCBFbGVtZW50Ki4KKyAgICBIYXNoTWFwPFJlZlB0cjxF
bGVtZW50PiwgdW5zaWduZWQ+IG1fZWxlbWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAppbmRleCBkMTQ3MjQyNzcyMzc0NjhkNGY2MWZmZTMzYzc1ZmU0NmE4MTkyM2Rj
Li4zYjhmOWQ3NDM2NThkY2E1YjlhNGY2NWU4ZjlkY2Q0ODE5NDJkZTI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAg
LTIwMCw3ICsyMDAsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0
ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgLy8gcmVsYXRpdmUg
dG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNl
IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCiAgICAgLy8gdG8gc3RvcmUgdGhpcyB2
YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNy
ZWF0ZSBhIHJhbmdlCiAgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdy
YXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4KLSAgICBS
ZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5z
dGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0
UG9zaXRpb24oKSk7CisgICAgYXV0byBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFz
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24t
PnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogCiAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7CiAgICAgaWYgKCFzdGFy
dFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCkpCkBAIC0yMTAs
NyArMjEwLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0
aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQg
d2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAg
aW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UuZ2V0KCkpOwor
ICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLnB0cigp
KTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1l
dGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCiAgICAgYXV0
byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKQEAgLTIzNCw3ICsy
MzQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVU
ZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKIAogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNU
b0FkZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwg
bWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFs
dGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigq
cmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVk
QWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwogfQogCiBib29s
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBp
bmdJZkFwcHJvcHJpYXRlKCkKQEAgLTI2NiwxMiArMjY2LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZp
c2libGVTCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAgICAgbV9mcmFtZS5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dl
cmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5k
b2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAK
LSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50
KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2UuZ2V0KCksIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIG1hcmtlcnMu
YWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAg
IG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVj
a2luZ0V4ZW1wdGlvbik7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
bWFya2VycygpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZSwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9j
dW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgbWFya2Vycy5hZGRNYXJrZXIo
cmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy5hZGRNYXJr
ZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAog
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKQEAgLTM1OSw3ICsz
NTksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZl
VGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdQogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0
aCgpKQogICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpyYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVzRm9yQXV0b2NvcnJlY3Rpb24o
KSk7CiAgICAgICAgIGVsc2UgaWYgKCFtX2lzRGlzbWlzc2VkQnlFZGl0aW5nKQotICAgICAgICAg
ICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkuYWRkTWFya2VyKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVq
ZWN0ZWRDb3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7CisgICAgICAgICAgICByYW5nZVdpdGhB
bHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0
aW9uLCBtX29yaWdpbmFsVGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRp
dmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVTcGVsbGlu
Z1N1Z2dlc3Rpb25zOgpAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
CiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJO
b2RlKCk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBub2RlLT5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzRm9yKG5vZGUpKSB7CisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBub2RlLT5kb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICBBU1NFUlQobWFy
a2VyKTsKICAgICAgICAgaWYgKHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKCptYXJrZXIsIHBv
c2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQxLDEyICs0NDEsMTAgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRD
b21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxpbmtDb21t
YW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigp
LnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwotICAgIGlmICgh
cmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1h
cmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLmFkZE1h
cmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJr
ZXJzLmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdF
eGVtcHRpb24pOworICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3Vt
ZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+c3Rh
cnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEFsdGVybmF0aXZlVGV4
dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50
KCkKQEAgLTQ3NCw4ICs0NzIsOCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
Y29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwbwogCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChSYW5nZSYgY2hhbmdlZFJhbmdl
KQogewotICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBp
bmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCku
bWFya2VycygpLmFkZE1hcmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxD
aGVja2luZ0V4ZW1wdGlvbik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcpCkBAIC00ODMsOSArNDgxLDkgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29u
c3QgU3RyaW4KICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNl
ZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChh
dXRvIG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpIHsKICAgICAg
ICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtl
clR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAgICAgICBtYXJr
ZXJzLmFkZE1hcmtlcigmcmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcp
OworICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgbWFya2VyVHlw
ZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXJrZXJzLmFk
ZE1hcmtlcigmcmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CisgICAgICAgICAgICBtYXJrZXJz
LmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBtYXJrZXJUeXBlKTsKICAgICB9CiB9CiAKQEAgLTUw
NSw3ICs1MDMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxs
Y2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKAogICAgICAgICAgICAgY2xpZW50
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkVk
aXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKICAgICB9CiAKLSAgICBtYXJrZXJzLnJlbW92
ZU1hcmtlcnMoJnJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3Rl
ZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1
bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCkBAIC01MjQsMTUgKzUy
MiwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0
ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9
PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPFJhbmdlPiBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJh
bWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9u
KTsKLSAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
LmdldCgpKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0
ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgZW5kT2ZT
ZWxlY3Rpb24pOworICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFj
dGVyUmFuZ2UucHRyKCkpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVk
SXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBo
YXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0
ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWlu
IGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4u
Ci0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0No
YXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9u
LCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgbV9m
cmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3Ry
aW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChj
b25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0
aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKQEAgLTU3MywyMSArNTcxLDE5
IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRP
ZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9y
KG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUs
IG1hcmtlci5lbmRPZmZzZXQoKSk7Ci0gICAgaWYgKCF3b3JkUmFuZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdl
dCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1l
bnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQo
KSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZS5wdHIoKSk7
CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIG1fb3JpZ2luYWxUZXh0ID0gY3VycmVudFdvcmQ7CiAgICAgc3dpdGNoIChtYXJrZXIudHlw
ZSgpKSB7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6Ci0gICAgICAgIG1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAgICAgIG1fZGV0YWlscyA9IGVtcHR5U3Ry
aW5nKCk7CiAgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRl
eHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9j
dW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgotICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZl
ID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gV1RGTW92ZSh3
b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBtYXJrZXIuZGVzY3JpcHRpb24oKTsKICAg
ICAgICAgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVSZXZl
cnNpb24pOwogICAgICAgICBicmVhazsKQEAgLTU5Nyw3ICs1OTMsNyBAQCBib29sIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3Vt
ZW50TWFya2VyJgogICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOwogICAgICAgICBpZiAoY3VycmVu
dFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAg
IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAgICAgIG1f
ZGV0YWlscyA9IG1hcmtlckRhdGEuY29udGV4dDsKICAgICAgICAgc3RhcnRBbHRlcm5hdGl2ZVRl
eHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
aW5kZXggZDZmZDczYzIzYWNiMzE3MzVkOGM2ZDNhZjU2YTNhYjdmYjgxOTI2OC4uMWUyMzVmNmI0
ZGM2M2ZmZmQyNWNiMzdlNmRhY2E0NjgzZjVhYTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTc2OCwxMyArNzY4LDEzIEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtl
cnMoVGV4dCYgbm9kZSwgdW5zaWduCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJr
ZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgYXV0byBtYXJrZXJzID0g
Y29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyBjb3VudCksIERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBv
ZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZz
ZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOworICAgIGF1dG8gbmV3UmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyByZXBs
YWNlbWVudFRleHQubGVuZ3RoKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgbWFya2VyIDogbWFy
a2VycykKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFy
a2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3JpcHRpb24oKSwg
bWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJrZXIubWV0YWRhdGEoKSk7CisgICAgICAgIG1hcmtl
ckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVz
Y3JpcHRpb24oKSwgbWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJrZXIubWV0YWRhdGEoKSk7CiAj
ZWxzZQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZS5nZXQoKSwg
bWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCkpOwotI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UsIG1hcmtl
ci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKKyNlbmRpZgogfQogCiBQb3NpdGlvbiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNw
cAppbmRleCAyODJiZGM5ZTMxNWI3MmMyNWFkNWJlODJjNmJmMDcxNGQ1YzE3YWI5Li43OTA2NjVm
ZDY3MmRmYjRkNmUyMTY4MTEyYzU3NGUxZTRhMTdjM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEaWN0YXRpb25NYXJrZXJTdXBwbGllcihhbHRlcm5h
dGl2ZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRleHQqIHRl
eHROb2RlLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0VG9C
ZUluc2VydGVkKSBvdmVycmlkZQorICAgIHZvaWQgYWRkTWFya2Vyc1RvVGV4dE5vZGUoVGV4dCYg
dGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJpbmcmIHRleHRU
b0JlSW5zZXJ0ZWQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvJiBtYXJrZXJDb250cm9s
bGVyID0gdGV4dE5vZGUtPmRvY3VtZW50KCkubWFya2VycygpOworICAgICAgICBhdXRvJiBtYXJr
ZXJDb250cm9sbGVyID0gdGV4dE5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgICAgIGZv
ciAoYXV0byYgYWx0ZXJuYXRpdmUgOiBtX2FsdGVybmF0aXZlcykgewogICAgICAgICAgICAgRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGEgZGF0YSB7IGFsdGVybmF0aXZlLmRpY3RhdGlvbkNv
bnRleHQsIHRleHRUb0JlSW5zZXJ0ZWQuc3Vic3RyaW5nKGFsdGVybmF0aXZlLnJhbmdlU3RhcnQs
IGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoKSB9OwogICAgICAgICAgICAgbWFya2VyQ29udHJvbGxl
ci5hZGRNYXJrZXJUb05vZGUodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZz
ZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25BbHRlcm5hdGl2ZXMsIFdURk1vdmUoZGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5jcHAKaW5kZXggZTc5YjY0NmUyMjg5NzIwMDVlNThmZTUwZmJjMjk1MzIwM2NiN2FlMy4u
YTJkODUzODJlYTg4ZjM1MDEzYzFjOTYzMjRiNWQzZWU2OWE4N2NiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCkBAIC0xMTY1LDcgKzExNjUsNyBAQCBib29sIGFyZUlkZW50aWNhbEVs
ZW1lbnRzKGNvbnN0IE5vZGUmIGZpcnN0LCBjb25zdCBOb2RlJiBzZWNvbmQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBhdXRvJiBmaXJzdEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihm
aXJzdCk7CiAgICAgYXV0byYgc2Vjb25kRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHNlY29u
ZCk7Ci0gICAgcmV0dXJuIGZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNlY29uZEVsZW1lbnQudGFn
UU5hbWUoKSkgJiYgZmlyc3RFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKCZzZWNvbmRF
bGVtZW50KTsKKyAgICByZXR1cm4gZmlyc3RFbGVtZW50Lmhhc1RhZ05hbWUoc2Vjb25kRWxlbWVu
dC50YWdRTmFtZSgpKSAmJiBmaXJzdEVsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoc2Vj
b25kRWxlbWVudCk7CiB9CiAKIGJvb2wgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGNv
bnN0IE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNjQyNTFjZjFk
YzdmNjlmNWNhYmFjYTcwOWRlYzVjN2U4NzY1OTVlMC4uOGFiMGExZTBjZWZlYmY1M2IxZDAxNTZi
NGIwNjlhOWJlMjU1ZjE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTkxOCw3
ICsxOTE4LDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICAgICAgCiAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQotICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFy
a2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJp
bmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKQEAg
LTE5MzQsNyArMTkzNCw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKIAogICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5n
IHRleHQgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NFUlQodGV4dC5sZW5ndGgoKSk7CkBAIC0y
MTAwLDEyICsyMTAwLDEyIEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwu
bG9jYXRpb24gIT0gLTEgJiYgZ3JhbW1hckRldGFpbC5sZW5ndGggPiAwKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRoIGRvdWJsZWQg
cHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAotICAgICAgICBSZWZQdHI8UmFu
Z2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmdyYW1tYXJTZWFy
Y2hSYW5nZSwgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwubG9jYXRpb24sIGdy
YW1tYXJEZXRhaWwubGVuZ3RoKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqYmFkR3JhbW1hclJhbmdlLCBTRUxfREVGQVVMVF9BRkZJ
TklUWSkpOworICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKmdyYW1tYXJTZWFyY2hSYW5nZSwgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJE
ZXRhaWwubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwubGVuZ3RoKTsKKyAgICAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFtbWFyUmFuZ2Us
IFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkucmV2
ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxp
bmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwot
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdl
dCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRp
b24pOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRp
b24pOwogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5
KCkpIHsKQEAgLTIxMTcsNyArMjExNyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlz
c3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLT51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKLSAgICAg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UucHRyKCks
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwog
ICAgIH0KIH0KIApAQCAtMjI1MCwxMyArMjI1MCwxMCBAQCBib29sIEVkaXRvcjo6c3BlbGxpbmdQ
YW5lbElzU2hvd2luZygpCiAgICAgcmV0dXJuIGNsaWVudCgpLT5zcGVsbGluZ1VJSXNTaG93aW5n
KCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpjbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aW9uKQordm9pZCBFZGl0b3I6OmNsZWFy
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtb3ZpbmdT
ZWxlY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbW92aW5nU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpIHsKLSAg
ICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdl
dCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpH
cmFtbWFyKTsKLSAgICB9CisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1vdmluZ1NlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywg
RG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIgfSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3Rp
b24pCkBAIC0yNTc4LDE0ICsyNTc1LDE0IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9yPFRlCiAgICAg
ICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0
TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAgICBpZiAoIW1fYWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxpbmdSYW5nZSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtaXNzcGVsbGluZ1Jhbmdl
LT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVs
bGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsK
KyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZywgcmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3VsZE1hcmtHcmFt
bWFyICYmIHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcGFyYWdyYXBo
LmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9uID49IDAp
OwogICAgICAgICAgICAgZm9yIChhdXRvJiBkZXRhaWwgOiByZXN1bHRzW2ldLmRldGFpbHMpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLmxlbmd0aCA+IDAgJiYgZGV0YWlsLmxvY2F0
aW9uID49IDApOwogICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZUNv
dmVycyhyZXN1bHRMb2NhdGlvbiArIGRldGFpbC5sb2NhdGlvbiwgZGV0YWlsLmxlbmd0aCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBwYXJhZ3JhcGguc3Vi
cmFuZ2UocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5ndGgpOwot
ICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5wdHIoKSwgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOworICAgICAgICAgICAg
ICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIs
IGRldGFpbC51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRFbmRMb2NhdGlvbiA8PSBzcGVsbGluZ1Jhbmdl
RW5kT2Zmc2V0ICYmIHJlc3VsdEVuZExvY2F0aW9uID49IHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0
KCkKQEAgLTI2OTksNyArMjY5Niw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNl
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIFRleHRDaGVja2luZ1Bh
cmFncmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb25JbnNlcnQpOwogICAg
IGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5n
ZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CisgICAgY2hh
bmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwog
ICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5n
ZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjgxNCw3ICsyODExLDcg
QEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJv
b2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAgICAgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsCiAjZW5kaWYKICAgICB9OwotICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMod29yZFJhbmdlLnB0cigpLCBtYXJrZXJUeXBlc1RvUmVtb3ZlLCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZSwgbWFya2VyVHlwZXNUb1JlbW92
ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CiAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vy
c0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKIH0KIApAQCAtMzI5OSw3ICszMjk2LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNo
ZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKIAog
ICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIGRvIHsKLSAgICAgICAgUmVmUHRyPFJh
bmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRp
b25zICYgfkJhY2t3YXJkcykpOworICAgICAgICBhdXRvIHJlc3VsdFJhbmdlKGZpbmRQbGFpblRl
eHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMgJiB+QmFja3dhcmRzKSk7CiAgICAgICAg
IGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTMzMTEsMTAgKzMzMDgsMTAgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1h
dGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQK
IAogICAgICAgICArK21hdGNoQ291bnQ7CiAgICAgICAgIGlmIChtYXRjaGVzKQotICAgICAgICAg
ICAgbWF0Y2hlcy0+YXBwZW5kKHJlc3VsdFJhbmdlKTsKKyAgICAgICAgICAgIG1hdGNoZXMtPmFw
cGVuZChyZXN1bHRSYW5nZS5wdHIoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya01hdGNo
ZXMpCi0gICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmVzdWx0UmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGV4
dE1hdGNoKTsKIAogICAgICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgd2UgaGl0IHRoZSBzcGVjaWZp
ZWQgbGltaXQuIEEgbGltaXQgb2YgMCBtZWFucyBubyBsaW1pdC4KICAgICAgICAgaWYgKGxpbWl0
ID4gMCAmJiBtYXRjaENvdW50ID49IGxpbWl0KQpAQCAtMzQ2MSwxMCArMzQ1OCwxMCBAQCB2b2lk
IEVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYgcmFuZ2UsIGNvbnN0
IFN0cmluZ1ZpZXcmIHN0cmluZwogICAgICAgICB1bnNpZ25lZCBzdWJyYW5nZU9mZnNldCA9IHNj
YW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbjsKICAgICAgICAgdW5zaWduZWQg
c3VicmFuZ2VMZW5ndGggPSByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFydFBvc2l0
aW9uICsgMTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IHN1YnJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpzdWJyYW5nZShyYW5nZSwgc3VicmFuZ2VPZmZzZXQsIHN1YnJhbmdlTGVuZ3RoKTsKKyAgICAg
ICAgYXV0byBzdWJyYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2UsIHN1YnJhbmdl
T2Zmc2V0LCBzdWJyYW5nZUxlbmd0aCk7CiAKLSAgICAgICAgbWFya2VkUmFuZ2VzLmFwcGVuZChz
dWJyYW5nZSk7Ci0gICAgICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKHN1YnJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKyAg
ICAgICAgbWFya2VkUmFuZ2VzLmFwcGVuZChzdWJyYW5nZS5wdHIoKSk7CisgICAgICAgIHJhbmdl
Lm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHN1YnJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6VGVsZXBob25lTnVtYmVyKTsKIAogICAgICAgICBzY2FubmVyUG9zaXRpb24gKz0gcmVs
YXRpdmVFbmRQb3NpdGlvbiArIDE7CiAgICAgfQpAQCAtMzUyOSwxMSArMzUyNiwxMSBAQCB2b2lk
IEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAoIXRleHRD
aGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VT
ZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSkgewogICAgICAgICAgICAgaWYgKFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5n
ZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
d29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICAgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKndvcmRSYW5nZSwgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRleHRDaGVja2Vy
KCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rp
b24oVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPFJh
bmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5n
ZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
c2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAgICAgICAg
ICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbnRlbmNlUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzU3NSw3
ICszNTcyLDcgQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGkKIAogICAgIHVuc2lnbmVkIGludCBz
dGFydE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSk7CiAgICAgdW5zaWdu
ZWQgaW50IGVuZE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSArIGxlbmd0
aCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1l
bnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpu
b2RlKTsKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1h
cmtlci0+c3RhcnRPZmZzZXQoKSA8PSBzdGFydE9mZnNldCAmJiBlbmRPZmZzZXQgPD0gbWFya2Vy
LT5lbmRPZmZzZXQoKSAmJiBtYXJrZXItPnR5cGUoKSA9PSBtYXJrZXJUeXBlKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNjkzLDcgKzM2OTAsNyBAQCB2b2lkIEVkaXRvcjo6aGFuZGxl
QWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQog
CiAgICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFuZ2VFeHBhbmRl
ZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwgRGlyZWN0aW9u
QmFja3dhcmQpOwogICAgIGlmIChpbnNlcnRlZENhbmRpZGF0ZVJhbmdlKQotICAgICAgICBpbnNl
cnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
QWNjZXB0ZWRDYW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKKyAgICAg
ICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpOwogCiAg
ICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZWZkODY1MDlhMTVlNmM1
OGRiYzlhNzBmMTk5MGJmNmY1OTAyZmRjMi4uZmJjZDJmZmZhZWVlZDQ1MjY5MDEzNTdjYTYzNThj
MjJhMWNhNDRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0Tm9kZSwgb2Zmc2V0LCBtX3RleHQp
OwogICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHROb2RlLmdldCgpLCBvZmZzZXQg
KyBtX3RleHQubGVuZ3RoKCkpOwogICAgICAgICBpZiAobV9tYXJrZXJTdXBwbGllcikKLSAgICAg
ICAgICAgIG1fbWFya2VyU3VwcGxpZXItPmFkZE1hcmtlcnNUb1RleHROb2RlKHRleHROb2RlLmdl
dCgpLCBvZmZzZXQsIG1fdGV4dCk7CisgICAgICAgICAgICBtX21hcmtlclN1cHBsaWVyLT5hZGRN
YXJrZXJzVG9UZXh0Tm9kZSgqdGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKIAogICAgICAgICBp
ZiAobV9yZWJhbGFuY2VUeXBlID09IFJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGluZ1doaXRlc3Bh
Y2VzKSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5zZXJ0aW9uIG1heSByZXF1aXJlIGFkanVzdGlu
ZyBhZGphY2VudCB3aGl0ZXNwYWNlLCBpZiBpdCBpcyBwcmVzZW50LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCmluZGV4IDliYzhiMzk5NTY3ZWQ3NTJhYWQxOTRi
NDZkODYxMzIyZDI2ZDc2MTAuLjEyZWE5ZDQ0NjA2NTE5NzY2YWZkYzA1NzJmYjU3ZjNkYTU2MjQz
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKQEAgLTM1
LDcgKzM1LDcgQEAgY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGll
ciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcj4gewogcHVi
bGljOgogICAgIHZpcnR1YWwgflRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiwgdW5zaWduZWQgb2Zmc2V0
T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dEluc2VydGVkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXRPZkluc2Vy
dGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0SW5zZXJ0ZWQpID0gMDsKIHByb3RlY3RlZDoKICAgICBU
ZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggYTI5NGJiMzAzN2E0ODFiNzQwNDJmYjdkNTFiZDYyNGY3
ZTlmOThiMi4uYWZjOTRjOTlmZTYyNWU2OGVhZTI1NjI2NTZjZTFlYWJjN2I3NTJiNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtMjIzLDcgKzIyMyw3IEBAIHZv
aWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0CiAgICAgICAgIGlmIChyZXF1ZXN0RGF0YS5tYXNrKCkgJiBU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAgICAgICAgICAgIG1hcmtlclR5cGVzIHw9IERvY3Vt
ZW50TWFya2VyOjpHcmFtbWFyOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92ZU1hcmtlcnMo
Jm1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlwZXMpOworICAg
ICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhtX3By
b2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsKICAgICB9CiAg
ICAgZGlkQ2hlY2soc2VxdWVuY2UsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5YWQwOTBmMDhmNzQ3MDljYWQx
MTc1OGE1NzQ2NGI5OGFlMDRhMGE1Li45Yjc3NjEwMmY5ZjE1YWM5NjY4OTkzODA5N2NiMjJlZWEy
ZmQwYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21t
YW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0Fw
cGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShw
cmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmNvcHlNYXJrZXJzKG1fdGV4dDIucHRyKCksIDAsIG1fb2Zmc2V0LCBtX3RleHQxLmdldCgp
LCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQyLCAwLCBt
X29mZnNldCwgKm1fdGV4dDEsIDApOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRUcmltVGV4dDIoKTsK
IH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5
KCkKIAogICAgIG1fdGV4dDItPmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7CiAKLSAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAwLCBwcmVmaXhUZXh0
Lmxlbmd0aCgpLCBtX3RleHQyLnB0cigpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5j
b3B5TWFya2VycygqbV90ZXh0MSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0MiwgMCk7
CiAgICAgbV90ZXh0MS0+cmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCBmNjU0MTA2NGJmZTM4OTViOTAyMjBlNGE1MzFj
OWVmZDFiMmY5MzZlLi44ZDk1ODI0MDM1NmRjNzcyYzVhNTcyYWNkMDI0MDBhMzg4ODljZjE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0y
NTIsMTcgKzI1MiwxNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNz
cGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvbwogCiAgICAgICAgIGlmICht
aXNzcGVsbGluZ0xvY2F0aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGggPiAwICYmIG1pc3Nw
ZWxsaW5nTG9jYXRpb24gPCB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHRleHRM
ZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHRleHRM
ZW5ndGgpIHsKICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3Jk
Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9j
YXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdS
YW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgY3VycmVudENodW5rT2Zmc2V0
ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogCiAgICAgICAgICAg
ICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNl
dC4KICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgewogICAgICAgICAgICAgICAg
IGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGlu
Z0xvY2F0aW9uOwogICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSB0ZXh0LnN1YnN0
cmluZyhtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCkudG9TdHJpbmcoKTsK
LSAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1Jhbmdl
OworICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFu
Z2UucHRyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBm
b3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgIG1pc3NwZWxs
aW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICAgICAg
ICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3BlbGxp
bmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KICAgICAgICAgICAgIGlmICghbWFya0FsbCkKQEAg
LTQyNiw4ICs0MjYsOCBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFy
RGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya0FsbCkgewotICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFu
Z2UsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5sb2Nh
dGlvbiwgZGV0YWlsLT5sZW5ndGgpOwotICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlv
bik7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBk
ZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBiYWRHcmFtbWFy
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJh
ZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2Ny
aXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBk
ZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBvdXIgY3VycmVudCBjYW5kaWRhdGUgKHRo
ZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQgb3JkZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmluZGV4IGMxOTMyZGVl
MWRhNGE4ZDJhYWJlMjY2MjAxZmYwMDQxMTk0NjI2ZTkuLmVlOTM5OWE3NmQyNTg1Zjg1NzFlOTMw
YmViMWVkM2QxZjFiZDAzY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgRGljdGF0aW9u
Q29tbWFuZElPUzo6ZG9BcHBseSgpCiAgICAgICAgIGlucHV0VGV4dChmaXJzdEludGVycHJldGF0
aW9uLCB0cnVlKTsKIAogICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpCi0g
ICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzTWFya2VyKGVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIGludGVycHJldGF0aW9ucyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5h
ZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKCplbmRpbmdTZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpLCBpbnRlcnByZXRhdGlvbnMpOwogCiAgICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVF
bmQoKSkpOwogICAgIH0KQEAgLTcxLDcgKzcxLDggQEAgdm9pZCBEaWN0YXRpb25Db21tYW5kSU9T
Ojpkb0FwcGx5KCkKIAogICAgIGlmIChzdGFydEluZGV4ID49IDApIHsKICAgICAgICAgUmVmUHRy
PFJhbmdlPiByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRM
ZW5ndGgoZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSwgc3RhcnRJbmRleCwgZW5kSW5kZXgs
IHRydWUpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1bHRN
YXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIG1fbWV0YWRhdGEpOworICAgICAgICBBU1NFUlQocmVz
dWx0UmFuZ2UpOyAvLyBGSVhNRTogV2hhdCBndWFyYW50ZWVzIHRoaXM/CisgICAgICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVzdWx0UmFuZ2UsIG1f
bWV0YWRhdGEpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9T
Lm1tCmluZGV4IGRjNmU3MTU1OTAwNjAxZmJhOTZmNDljMWUwMGJkYzA0ZjhmMDM5M2EuLmQ0NmE3
ODY1ZDBiYjkyMGNkYzAyYTM5ZTFiYWJmZTVkNWRmNjJlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTQ2NiwxMyArNDY2LDEzIEBAIHZvaWQgRWRpdG9yOjpz
ZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0
cmluZz4+JiBkCiAgICAgICAgIGludCBkaWN0YXRpb25QaHJhc2VFbmQgPSBwcmV2aW91c0RpY3Rh
dGlvblBocmFzZVN0YXJ0ICsgZGljdGF0aW9uUGhyYXNlTGVuZ3RoOwogICAgICAgICBpZiAoaW50
ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIGF1dG8gZGljdGF0aW9uUGhy
YXNlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZ0ZXh0Tm9kZSwgcHJldmlvdXNE
aWN0YXRpb25QaHJhc2VTdGFydCwgJnRleHROb2RlLCBkaWN0YXRpb25QaHJhc2VFbmQpOwotICAg
ICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlc01hcmtlcihkaWN0YXRpb25QaHJhc2VSYW5nZS5wdHIoKSwgaW50ZXJwcmV0YXRpb25z
KTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXNNYXJrZXIoZGljdGF0aW9uUGhyYXNlUmFuZ2UuZ2V0KCksIGludGVycHJl
dGF0aW9ucyk7CiAgICAgICAgIH0KICAgICAgICAgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFy
dCA9IGRpY3RhdGlvblBocmFzZUVuZDsKICAgICB9CiAKICAgICBhdXRvIHJlc3VsdFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUsIDAsICZ0ZXh0Tm9kZSwgdGV4dE5v
ZGUubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3Vs
dE1hcmtlcihyZXN1bHRSYW5nZS5wdHIoKSwgbWV0YWRhdGEpOworICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZS5nZXQoKSwgbWV0YWRh
dGEpOwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKaW5kZXggMzRiZjI3OTdkMTQzZDE5MzU3N2My
ZDhlNTk2YmMyMWMyZjYyYTY1Yy4uMGU4ZDk2Mjk5NDJkNTc5ZTM0NjhjMGY4OWFmNDg1YmMxNjhk
ODRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCkBAIC0xMzIsNyArMTMy
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRmlsZVJlYWRlcjo6cmVhZEludGVybmFsKEJsb2ImIGJs
b2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXAKICAgICBpZiAobV9zdGF0ZSA9PSBMT0FESU5H
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogCiAgICAgbV9ibG9iID0gJmJsb2I7CiAgICAgbV9yZWFkVHlwZSA9IHR5cGU7CkBAIC0xNjks
NyArMTY5LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjphYm9ydCgpCiAgICAgICAgIGZpcmVFdmVudChl
dmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIAogICAgICAgICAvLyBBbGwgcG9zc2libGUgZXZl
bnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4K
LSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQg
RmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMo
KS5sb2FkZW5kRXZlbnQpOwogICAgIAogICAgIC8vIEFsbCBwb3NzaWJsZSBldmVudHMgaGF2ZSBm
aXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5LgotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCkBAIC0yMjEsNyAr
MjIxLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCiAgICAgZmly
ZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogICAgIAogICAgIC8vIEFsbCBwb3Nz
aWJsZSBldmVudHMgaGF2ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFj
dGl2aXR5LgotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcAppbmRleCA4NWRiNDM4M2VmZmE2MWQ0MTExOTY4ZDcwNjUyNGJjZjE3ODI2Zjg0Li44MTRl
OTE2ZjliZmYxMWQ0ZDZmNWMyMGQzNjg4NGU5NTE0OWJkMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRP
YmplY3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmNwcAppbmRl
eCBjM2Y0OTg0NTBmZmE3ZjhlMTcwNmJmYzA4OGU1MGIzZmY5ZTk4NmE1Li40ODRiY2I3NmMxZTAw
MTIwNTViNzg3NDhjYzI5NWU1NjY1OTI0NzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RGV0YWlsc0VsZW1lbnQuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IEhUTUxEZXRhaWxzRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0
eWxlJiYKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PigqdGhpcywg
V1RGTW92ZShzdHlsZSkpOwogfQogCi12b2lkIEhUTUxEZXRhaWxzRWxlbWVudDo6ZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MRGV0YWlsc0VsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBh
dXRvIHN1bW1hcnlTbG90ID0gSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1l
bnQoKSk7CiAgICAgc3VtbWFyeVNsb3QtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24obmFtZUF0dHIsIHN1bW1hcnlTbG90TmFtZSgpKTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IEhUTUxEZXRhaWxzRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290
KiByb290KQogICAgIG1fZGVmYXVsdFN1bW1hcnkgPSBkZWZhdWx0U3VtbWFyeS5wdHIoKTsKIAog
ICAgIHN1bW1hcnlTbG90LT5hcHBlbmRDaGlsZChkZWZhdWx0U3VtbWFyeSk7Ci0gICAgcm9vdC0+
YXBwZW5kQ2hpbGQoc3VtbWFyeVNsb3QpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoc3VtbWFyeVNs
b3QpOwogCiAgICAgbV9kZWZhdWx0U2xvdCA9IEhUTUxTbG90RWxlbWVudDo6Y3JlYXRlKHNsb3RU
YWcsIGRvY3VtZW50KCkpOwogICAgIEFTU0VSVCghbV9pc09wZW4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERldGFpbHNFbGVtZW50LmgKaW5kZXggZjFjNDZmZjM1ZDc2NjI0YWZlZTNlY2ViNjQy
MDQyMzYyZjJkM2JmMC4uZTQ4MzY1NzE2MDM4NDY4MDJlODdhMmMxNzhlOTc3YjAxZDNhOGRmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRS
ZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBmaW5hbDsK
ICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9t
aWNTdHJpbmcmKSBmaW5hbDsKIAotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QmKSBmaW5hbDsKICAgICBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBib29sIG1faXNPcGVuIHsgZmFsc2UgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAppbmRleCBjYmRmZGQzZWZjYWFkYWY4ZmJmNDAw
YjZjMjU0ODBhNDNhZWQzMjAzLi44MWVmMTdlZmIxNGM5ZGZmZmJiODg5ZGE1OWU5MjM5N2VlNTg3
YTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCkBAIC04OCw2ICs4OCwxNiBA
QCBIVE1MRG9jdW1lbnQ6OkhUTUxEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJs
LCBEb2N1bWVudENsYXNzRmxhZ3MgZG9jdQogICAgIGNsZWFyWE1MVmVyc2lvbigpOwogfQogCitS
ZWY8SFRNTERvY3VtZW50PiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0
IFVSTCYgdXJsKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudChmcmFt
ZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcykpOworfQorCitSZWY8SFRNTERvY3VtZW50PiBIVE1M
RG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJhbWUmIGZyYW1lLCBjb25zdCBV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoJmZyYW1l
LCB1cmwsIEhUTUxEb2N1bWVudENsYXNzLCBTeW50aGVzaXplZCkpOworfQorCiBIVE1MRG9jdW1l
bnQ6On5IVE1MRG9jdW1lbnQoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKaW5k
ZXggMjNkZTRkYzFjNjg1YTI4YTJmNDBlOGFjZDVjZjBhNmQ4ZmMyN2M2Zi4uMWNkNWMxMTU0ZGE4
ZDY1NmRhODI1ZDI3MTAwMGYyN2NmYmI4NjA2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dC5oCkBAIC0yOCwxNiArMjgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxE
b2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxIVE1M
RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1cmwsIEhUTUxE
b2N1bWVudENsYXNzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNy
ZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudChmcmFtZSwgdXJs
LCBIVE1MRG9jdW1lbnRDbGFzcywgU3ludGhlc2l6ZWQpKTsKLSAgICB9Ci0KKyAgICBzdGF0aWMg
UmVmPEhUTUxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiwgY29uc3QgVVJMJik7CisgICAgc3RhdGlj
IFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJhbWUmLCBjb25z
dCBVUkwmKTsKICAgICB2aXJ0dWFsIH5IVE1MRG9jdW1lbnQoKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIGludCB3aWR0aCgpOwpAQCAtNjQsNyArNTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSFRNTERv
Y3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgRG9jdW1lbnRDbGFzc0ZsYWdzID0gMCwgdW5zaWdu
ZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGlzRnJhbWVT
ZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzRnJhbWVTZXQoKSBjb25zdCBmaW5hbDsK
ICAgICBSZWY8RG9jdW1lbnRQYXJzZXI+IGNyZWF0ZVBhcnNlcigpIG92ZXJyaWRlOwogICAgIFJl
ZjxEb2N1bWVudD4gY2xvbmVEb2N1bWVudFdpdGhvdXRDaGlsZHJlbigpIGNvbnN0IGZpbmFsOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggZTMyNTY3YTJlYTE0
YTk1ZjZlOTY4ZTg5ZDE0YTg0OTJiMDU0YzViYy4uZTFhZGQyNjAyMzRmYTNiMDM0NzI0MjkyMTQy
M2ZjYTk4NDEzYTg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApA
QCAtNzcsNyArNzcsNyBAQCBIVE1MRm9ybUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQoKQogewog
ICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS53aWxsRGVsZXRlRm9ybSh0aGlzKTsKICAg
ICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKQotICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50
KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAKICAg
ICBtX2RlZmF1bHRCdXR0b24gPSBudWxscHRyOwogICAgIGZvciAoYXV0byYgYXNzb2NpYXRlZEVs
ZW1lbnQgOiBtX2Fzc29jaWF0ZWRFbGVtZW50cykKQEAgLTQzMSw5ICs0MzEsOSBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaQogICAgICAgICBtX2F0dHJpYnV0ZXMuc2V0QWNjZXB0Q2hhcnNldCh2
YWx1ZSk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CiAgICAgICAg
IGlmICghc2hvdWxkQXV0b2NvbXBsZXRlKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkudW5yZWdp
c3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CkBAIC04
MDIsOCArODAyLDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1
c3BlbnNpb24oKQogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERv
Y3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewogICAgIGlmICgh
c2hvdWxkQXV0b2NvbXBsZXRlKCkpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS5y
ZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgb2xk
RG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7
CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBIVE1MRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1l
bnQob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZy
YW1lRWxlbWVudC5jcHAKaW5kZXggZDMwMzIyZGMwYzQ4ZmI4MjA2ZWFiYjY2Y2FlZjJiOGZlNjk3
YjY0Zi4uM2JiN2U0YTdlN2IwZDVjMjlkZGFkNjMzZmUzMjVjNzBjNWZkYjAyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCmluZGV4IGMwOGNmMzM3MGMyYTMxYWQzMDMzYjlmNjE4ZmE5NWQwMDIzMDZjYzEuLjY4YjFi
NGVmZmIyYTI0N2VlYzkxYWRhNjdjNDNmMGZjMDYwMTRkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTM5LDcgKzEzOSw3IEBAIEhUTUxJbWFnZUxvYWRl
ciYgSFRNTElucHV0RWxlbWVudDo6ZW5zdXJlSW1hZ2VMb2FkZXIoKQogICAgIHJldHVybiAqbV9p
bWFnZUxvYWRlcjsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QqKQordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKQogewogICAgIG1faW5wdXRUeXBlLT5jcmVhdGVT
aGFkb3dTdWJ0cmVlKCk7CiAgICAgdXBkYXRlSW5uZXJUZXh0RWxlbWVudEVkaXRhYmlsaXR5KCk7
CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKQogSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVs
ZW1lbnQoKQogewogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBk
b2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcygqdGhpcyk7CiAKICAgICAvLyBOZWVkIHRvIHJlbW92ZSBmb3JtIGFzc29jaWF0aW9uIHdo
aWxlIHRoaXMgaXMgc3RpbGwgYW4gSFRNTElucHV0RWxlbWVudAogICAgIC8vIHNvIHRoYXQgdmly
dHVhbCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuCkBAIC0xNTYsNyArMTU2LDcgQEAg
SFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgIC8vIHNldEZvcm0oMCkg
bWF5IHJlZ2lzdGVyIHRoaXMgdG8gYSBkb2N1bWVudC1sZXZlbCByYWRpbyBidXR0b24gZ3JvdXAu
CiAgICAgLy8gV2Ugc2hvdWxkIHVucmVnaXN0ZXIgaXQgdG8gYXZvaWQgYWNjZXNzaW5nIGEgZGVs
ZXRlZCBvYmplY3QuCiAgICAgaWYgKGlzUmFkaW9CdXR0b24oKSkKLSAgICAgICAgZG9jdW1lbnQo
KS5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKHRoaXMp
OworICAgICAgICBkb2N1bWVudCgpLmZvcm1Db250cm9sbGVyKCkucmFkaW9CdXR0b25Hcm91cHMo
KS5yZW1vdmVCdXR0b24oKnRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgaWYg
KG1faGFzVG91Y2hFdmVudEhhbmRsZXIpCiAgICAgICAgIGRvY3VtZW50KCkuZGlkUmVtb3ZlRXZl
bnRUYXJnZXROb2RlKCp0aGlzKTsKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBub3dDaGVja2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9y
IGV2ZW50QgogICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAgIGlmIChSYWRp
b0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAgICAgIGJ1
dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0aGlzKTsKKyAgICAgICAgYnV0dG9ucy0+dXBkYXRl
Q2hlY2tlZFN0YXRlKCp0aGlzKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5z
dHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS5zdGF0
ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0ZSk7CiAgICAg
dXBkYXRlVmFsaWRpdHkoKTsKQEAgLTE0MjUsMTMgKzE0MjUsMTMgQEAgYm9vbCBIVE1MSW5wdXRF
bGVtZW50OjpuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKQogewogICAgIGlmIChuZWVk
c1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1M
SW5wdXRFbGVtZW50Ojp1bnJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKQog
ewogICAgIGlmICghbmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKLSAgICAgICAgZG9jdW1lbnQo
KS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRo
aXMpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29udHJvbCgp
IGNvbnN0CkBAIC0xNTMwLDExICsxNTMwLDExIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlk
TW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3CiAK
ICAgICAvLyBBbHdheXMgdW5yZWdpc3RlciBmb3IgY2FjaGUgY2FsbGJhY2tzIHdoZW4gbGVhdmlu
ZyBhIGRvY3VtZW50LCBldmVuIGlmIHdlIHdvdWxkIG90aGVyd2lzZSBsaWtlIHRvIGJlIHJlZ2lz
dGVyZWQKICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkgewotICAgICAgICBvbGRE
b2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwot
ICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
cyh0aGlzKTsKKyAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcygqdGhpcyk7CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9CiAgICAgaWYgKGlzUmFkaW9C
dXR0b24oKSkKLSAgICAgICAgb2xkRG9jdW1lbnQuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRv
bkdyb3VwcygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgb2xkRG9jdW1lbnQuZm9ybUNv
bnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJlbW92ZUJ1dHRvbigqdGhpcyk7CiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNUb3VjaEV2ZW50SGFuZGxlcikgewog
ICAgICAgICBvbGREb2N1bWVudC5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMpOwpAQCAt
MTU2MSw3ICsxNTYxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZXF1aXJlZEF0dHJpYnV0
ZUNoYW5nZWQoKQogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZEF0
dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSBy
YWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICBidXR0b25zLT5yZXF1aXJlZEF0dHJpYnV0ZUNo
YW5nZWQodGhpcyk7CisgICAgICAgIGJ1dHRvbnMtPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgq
dGhpcyk7CiAgICAgbV9pbnB1dFR5cGUtPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgpOwogfQog
CkBAIC0xODM5LDcgKzE4MzksNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzSW5SZXF1aXJl
ZFJhZGlvQnV0dG9uR3JvdXAoKQogewogICAgIEFTU0VSVChpc1JhZGlvQnV0dG9uKCkpOwogICAg
IGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0g
ICAgICAgIHJldHVybiBidXR0b25zLT5pc0luUmVxdWlyZWRHcm91cCh0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGJ1dHRvbnMtPmlzSW5SZXF1aXJlZEdyb3VwKCp0aGlzKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTE4NzEsMTQgKzE4NzEsMTQgQEAgUmFkaW9CdXR0b25Hcm91cHMqIEhUTUxJ
bnB1dEVsZW1lbnQ6OnJhZGlvQnV0dG9uR3JvdXBzKCkgY29uc3QKIAogaW5saW5lIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6YWRkVG9SYWRpb0J1dHRvbkdyb3VwKCkKIHsKLSAgICBpZiAoUmFkaW9C
dXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICBidXR0
b25zLT5hZGRCdXR0b24odGhpcyk7CisgICAgaWYgKGF1dG8qIGJ1dHRvbnMgPSByYWRpb0J1dHRv
bkdyb3VwcygpKQorICAgICAgICBidXR0b25zLT5hZGRCdXR0b24oKnRoaXMpOwogfQogCiBpbmxp
bmUgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVGcm9tUmFkaW9CdXR0b25Hcm91cCgpCiB7
Ci0gICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMo
KSkKLSAgICAgICAgYnV0dG9ucy0+cmVtb3ZlQnV0dG9uKHRoaXMpOworICAgIGlmIChhdXRvKiBi
dXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgYnV0dG9ucy0+cmVtb3ZlQnV0
dG9uKCp0aGlzKTsKIH0KIAogdW5zaWduZWQgSFRNTElucHV0RWxlbWVudDo6aGVpZ2h0KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggZDI2MzI3ZmY4MWRh
NjM0OTZmMDM5ZDczZGMwYTcwMWE3NjdiMmJkOS4uYjgzYWFlMGJjZGI4OWFjN2U1NjE0M2UyYTcx
YWJmZjkwN2MwYmRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAg
LTM0MSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGVudW0gQXV0b0NvbXBs
ZXRlU2V0dGluZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKIAotICAgIHZvaWQgZGlkQWRk
VXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIHZvaWQgd2lsbENo
YW5nZUZvcm0oKSBmaW5hbDsKICAgICB2b2lkIGRpZENoYW5nZUZvcm0oKSBmaW5hbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDgxYTkwOGM4NTI5ZGQzMTk3
NWJhMGFkNmYwNTdjODUxM2FjOTAwYTUuLjk2ZDBhYjM5MGM3OWQyNTgzZTE5ZWU0M2EyNTRiMTZi
ZWJlNTY1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAt
NjYzLDMzICs2NjMsMzMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZWdpc3RlcldpdGhEb2N1
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9tZWRpYVNlc3Npb24tPnJlZ2lzdGVyV2l0
aERvY3VtZW50KGRvY3VtZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5T
dGFydCkKLSAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwor
ICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogCiAjaWYg
IVBMQVRGT1JNKElPUykKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJh
Y2tzKHRoaXMpOwotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVD
aGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yTWVkaWFWb2x1
bWVDYWxsYmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCi0gICAgZG9jdW1lbnQu
cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgIGRv
Y3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKG1fcmVxdWlyZUNhcHRpb25QcmVm
ZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQu
cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBpZiAobV9tZWRp
YUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAgIGRvY3VtZW50LnJlZ2lz
dGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsK
ICAgICBkb2N1bWVudC5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNh
bGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lv
bkNhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQWxs
b3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAK
LSAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIGRvY3VtZW50LmFkZEF1
ZGlvUHJvZHVjZXIoKnRoaXMpOwogICAgIGFkZEVsZW1lbnRUb0RvY3VtZW50TWFwKCp0aGlzLCBk
b2N1bWVudCk7CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpAQCAtNzAyLDMzICs3MDIsMzMg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKICAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhEb2N1bWVudChk
b2N1bWVudCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCi0gICAg
ICAgIGRvY3VtZW50LnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAogI2lmICFQTEFU
Rk9STShJT1MpCi0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tz
KHRoaXMpOwotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNo
YW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvck1lZGlhVm9s
dW1lQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yUHJpdmF0ZUJy
b3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCi0gICAgZG9jdW1l
bnQudW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7Cisg
ICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
KnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChtX3JlcXVpcmVDYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKQotICAgICAgICBkb2N1bWVudC51bnJlZ2lz
dGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQudW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mo
KnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAg
IGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKLSAgICAgICAgZG9j
dW1lbnQudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2Fs
bGJhY2tzKCp0aGlzKTsKICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbkNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQudW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogICAgIGRv
Y3VtZW50LnVucmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFu
Z2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAotICAgIGRvY3VtZW50LnJlbW92ZUF1ZGlvUHJvZHVjZXIo
dGhpcyk7CisgICAgZG9jdW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcigqdGhpcyk7CiAgICAgcmVt
b3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKQEAgLTEzMTksNyArMTMxOSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAgICAgICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9pc1dhaXRpbmdVbnRp
bE1lZGlhQ2FuU3RhcnQgPSB0cnVlOwotICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlz
dGVuZXIoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zOTAzLDcgKzM5MDMs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhSZWY8VGV4dFRyYWNrPiYm
IHRyYWNrKQogICAgIGlmICghbV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxi
YWNrcykgewogICAgICAgICBtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJh
Y2tzID0gdHJ1ZTsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQo
KTsKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2Vk
Q2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVm
ZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIG1fY2FwdGlvbkRpc3BsYXlNb2RlID0gcGFn
ZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRGlzcGxheU1vZGUoKTsKICAg
ICB9CkBAIC01MzU1LDcgKzUzNTUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVk
aWFQbGF5ZXIoRGVsYXllZEFjdGlvblR5cGUgZmxhZ3MpCiAKICAgICBpZiAobV9pc1dhaXRpbmdV
bnRpbE1lZGlhQ2FuU3RhcnQpIHsKICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQgPSBmYWxzZTsKLSAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAobV9wbGF5ZXIpIHsKQEAgLTU0ODksNyArNTQ4OSw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKICAgICBzZXRTaG91bGRCdWZmZXJE
YXRhKHRydWUpOwogCiAgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c1BsYXliYWNr
QWZ0ZXJSZXN1bWluZygqdGhpcykpCi0gICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFy
dExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lcigqdGhpcyk7CiAgICAgZWxzZQogICAgICAgICBzZXRQYXVzZWRJbnRlcm5hbChmYWxzZSk7
CiAKQEAgLTY5OTgsNyArNjk5OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0Q29udHJv
bGxlckpTUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0M6OkpTCiAgICAgY29u
dHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KGNvbnRyb2xsZXJPYmplY3QsIGV4ZWMs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBwcm9wZXJ0eU5hbWUpLCBwcm9wZXJ0
eVZhbHVlLCBwcm9wZXJ0eVNsb3QpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFk
ZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAg
IERFQlVHX0xPRyhUSElTKTsKIApAQCAtNzA5Nyw5ICs3MDk3LDkgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBl
bmRzT25QYWcKICAgICBtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvciA9IGRl
cGVuZHNPblBhZ2VTY2FsZTsKIAogICAgIGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VT
Y2FsZUZhY3RvcikKLSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICAgICBlbHNlCi0gICAgICAg
IGRvY3VtZW50KCkudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRDYWxsYmFja3MoKnRoaXMpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZU1lZGlhQ29udHJvbHNBZnRlclByZXNlbnRhdGlvbk1vZGVDaGFuZ2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCAxYjEwMTMwMjNjMzU1Y2ZhNzgxODJmOTEyNWFj
MGI2OTNhYTQzMDIwLi45YTM5Yzg0M2NmYjBmOGFjNTk0ZmRjZmM1MWFmNzZmYmQ3ODJhZDZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtODMwLDcgKzgzMCw3IEBA
IHByaXZhdGU6CiAgICAgU2xlZXBUeXBlIHNob3VsZERpc2FibGVTbGVlcCgpIGNvbnN0OwogCiAj
aWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQWRkVXNlckFn
ZW50U2hhZG93Um9vdChTaGFkb3dSb290Jikgb3ZlcnJpZGU7CiAgICAgRE9NV3JhcHBlcldvcmxk
JiBlbnN1cmVJc29sYXRlZFdvcmxkKCk7CiAgICAgYm9vbCBlbnN1cmVNZWRpYUNvbnRyb2xzSW5q
ZWN0ZWRTY3JpcHQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWV0ZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVu
dC5jcHAKaW5kZXggMDIzOWIzMzVjODFmZDlmODk1ZmMwNzhiZjAxOTEyMjFlNWExMzZlNC4uYTY3
OGEyMDBhODUzMDgwMmE1MTMyODVkNWU1N2M1ZTNhMWFhYzVkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCkBAIC0yMjMsNyArMjIzLDcgQEAgUmVuZGVyTWV0ZXIq
IEhUTUxNZXRlckVsZW1lbnQ6OnJlbmRlck1ldGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290
KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBBU1NFUlQoIW1fdmFsdWUpOwog
CkBAIC0yMzEsMTMgKzIzMSwxMyBAQCB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKIAogICAgIGF1dG8gc3R5bGUgPSBIVE1M
U3R5bGVFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjpzdHlsZVRhZywgZG9jdW1lbnQoKSwgZmFs
c2UpOwogICAgIHN0eWxlLT5zZXRUZXh0Q29udGVudChzaGFkb3dTdHlsZSk7Ci0gICAgcm9vdC0+
YXBwZW5kQ2hpbGQoc3R5bGUpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogCiAgICAg
Ly8gUHNldWRvcyBhcmUgc2V0IHRvIGFsbG93IGF1dGhvciBzdHlsaW5nLgogICAgIGF1dG8gaW5u
ZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGlubmVyLT5zZXRJ
ZEF0dHJpYnV0ZSgiaW5uZXIiKTsKICAgICBpbm5lci0+c2V0UHNldWRvKCItd2Via2l0LW1ldGVy
LWlubmVyLWVsZW1lbnQiKTsKLSAgICByb290LT5hcHBlbmRDaGlsZChpbm5lcik7CisgICAgcm9v
dC5hcHBlbmRDaGlsZChpbm5lcik7CiAKICAgICBhdXRvIGJhciA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgYmFyLT5zZXRJZEF0dHJpYnV0ZSgiYmFyIik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5oCmluZGV4IDYwNGE2NWE5ZTNhYjJmYzM4M2Y0
ZjYwYjFhMDNmMDE5MmY4YzFiZTIuLjQ4NjVhNmRiN2Q4YWMyMDA4YThlZTY4YWE3YmYxN2MyOWU2
ZDBkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5oCkBAIC03NSw3ICs3
NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKICAgICB2b2lkIGRpZEVsZW1lbnRT
dGF0ZUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dS
b290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QmKSBmaW5hbDsKIAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV92YWx1ZTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKaW5kZXggZDEwYzM3ZmIyMjg4
MWMxM2MzMGYwN2M3YjkzNGY5MzI3NTQ2ZjFlYS4uZTExOGJkZTFkZGMyMjNhOTNiNzE4NGJhNjA3
Nzg5MWNjYWEyYjc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNv
bGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcApAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxBcHBsZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJ
bkVsZW1lbnQuY3BwCmluZGV4IGUyZTMxYTE1NTM2MTA5NmE1NmFmZDg0M2MzMDAyZjA4NWY0OWUx
ZGEuLjlkYzVmZjFhYTkwZmMzYTZkNDI3NTQyMTJjNWZmYmQzZTJjNDk1ZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0yOTIsMTMgKzI5MiwxMyBAQCB2
b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXREaXNwbGF5U3RhdGUoRGlzcGxheVN0YXRlIHN0YXRl
KQogICAgICAgICBtX3N3YXBSZW5kZXJlclRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12
b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jv
b3QqIHJvb3QpCit2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dS
b290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7CiAgICAgaWYgKCFtX3BsdWdpblJlcGxhY2VtZW50IHx8
ICFkb2N1bWVudCgpLnBhZ2UoKSB8fCBkaXNwbGF5U3RhdGUoKSAhPSBQcmVwYXJpbmdQbHVnaW5S
ZXBsYWNlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHJvb3QtPnNldFJlc2V0U3R5
bGVJbmhlcml0YW5jZSh0cnVlKTsKLSAgICBpZiAobV9wbHVnaW5SZXBsYWNlbWVudC0+aW5zdGFs
bFJlcGxhY2VtZW50KCpyb290KSkgeworICAgIHJvb3Quc2V0UmVzZXRTdHlsZUluaGVyaXRhbmNl
KHRydWUpOworICAgIGlmIChtX3BsdWdpblJlcGxhY2VtZW50LT5pbnN0YWxsUmVwbGFjZW1lbnQo
cm9vdCkpIHsKICAgICAgICAgc2V0RGlzcGxheVN0YXRlKERpc3BsYXlpbmdQbHVnaW5SZXBsYWNl
bWVudCk7CiAgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZFJlbmRlcmVyc0ZvclN1YnRyZWUoKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKaW5kZXggNTJhMjky
YWJiMjk2YzQ5M2EyZTZiODM4YWQzMGMwYjFiMGYzMDRkMi4uMTFmZTYwMmNlMWUxZDA3NWY1ZGNl
MTViMWMzZDFiMDk4OGM5MTZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1l
bnQuaApAQCAtOTgsNyArOTgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVx
dWVzdE9iamVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcyk7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5k
ZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290Jikgb3ZlcnJp
ZGU7CiAKICAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCB1c2UgZ3VhcmRlZERpc3BhdGNoQmVmb3Jl
TG9hZEV2ZW50IGluc3RlYWQgb2YgY2FsbGluZyBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudCBkaXJl
Y3RseS4KICAgICBib29sIGd1YXJkZWREaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmNwcAppbmRleCA1ZDQxNWE2MmMxYTM0NzVjZDViMjhlMzc5YmJkYzljNzJmNmQ4Yjg3
Li4wYzU1Yjk5YTkxZWZjMTFmZWJkNWIxZmNkNjNkZWRhNjljMjY1ZjNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmZpbmlzaENyZWF0aW5nKCkKIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6On5IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCkKIHsKICAgICBpZiAo
bV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQoKS51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBk
b2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMp
OwogfQogCiB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZShEaXNw
bGF5U3RhdGUgc3RhdGUpCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJT
dHkKICAgICAvLyBpbmFjdGl2ZSBvciByZWFjdGl2YXRlcyBzbyBpdCBjYW4gY2xlYXIgdGhlIHJl
bmRlcmVyIGJlZm9yZSBnb2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLgogICAgIGlmICghbV9uZWVk
c0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcykgewogICAgICAgICBtX25lZWRzRG9jdW1lbnRB
Y3RpdmF0aW9uQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5y
ZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogCiAg
ICAgaWYgKGRpc3BsYXlTdGF0ZSgpID09IERpc3BsYXlpbmdTbmFwc2hvdCkgewpAQCAtMjg0LDgg
KzI4NCw4IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1l
bnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVuCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oJmRvY3VtZW50KCkgPT0gJm5ld0RvY3VtZW50KTsKICAgICBpZiAo
bV9uZWVkc0RvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcykgewotICAgICAgICBvbGREb2N1bWVu
dC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgICAg
ICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlz
KTsKKyAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNh
bGxiYWNrcygqdGhpcyk7CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRT
dXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAobV9pbWFnZUxvYWRl
cikKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgRE9NV3JhcHBlcldvcmxkJiBwbHVnSW5JbWFn
ZUVsZW1lbnRJc29sYXRlZFdvcmxkKCkKICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZDsKIH0KIAot
dm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNo
YWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBIVE1MUGx1Z0luRWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChyb290KTsKICAgICBpZiAoZGlzcGxheVN0YXRl
KCkgPj0gUHJlcGFyaW5nUGx1Z2luUmVwbGFjZW1lbnQpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9p
ZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRv
d1Jvb3QqIHJvb3QpCiAgICAgLy8gUmVzZXQgYW55IGF1dGhvciBzdHlsZXMgdGhhdCBtYXkgYXBw
bHkgYXMgd2Ugb25seSB3YW50IGV4cGxpY2l0CiAgICAgLy8gc3R5bGVzIGRlZmluZWQgaW4gdGhl
IGluamVjdGVkIHVzZXIgYWdlbnRzIHN0eWxlc2hlZXRzIHRvIHNwZWNpZnkKICAgICAvLyB0aGUg
bG9vay1hbmQtZmVlbCBvZiB0aGUgc25hcHNob3R0ZWQgcGx1Zy1pbiBvdmVybGF5LiAKLSAgICBy
b290LT5zZXRSZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1ZSk7CisgICAgcm9vdC5zZXRSZXNldFN0
eWxlSW5oZXJpdGFuY2UodHJ1ZSk7CiAgICAgCiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbG9hZGVk
TWltZVR5cGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuaAppbmRleCBlOTQxZjU3YWRmOGExOWE5ZWQxNGVkY2ViMDk3YmQzYWI0YTRmYTYyLi5lM2Yw
Mzk2NGZhMTc0NDUxZThlMjY2YWUzMjczNmE5ZWM5YmY5ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGFsbG93ZWRUb0xvYWRQbHVnaW5Db250ZW50KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKIAotICAgIHZvaWQgZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVu
ZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJl
bmRlcmVyKGNvbnN0IE5vZGUmKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IDhiNDBlMWRjMjU4YTliYTRmYWZjZjA4M2Iz
NWY5M2JjYjJjNDVlNGYuLjEyZDMxYzcyMjBkNmQ4MjI0MTBkOTk4ZjRkM2FlMWJiZmNiMmEyZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcApAQCAtMTM1
LDEyICsxMzUsMTIgQEAgdm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRFbGVtZW50U3RhdGVD
aGFuZ2UoKQogICAgIH0KIH0KIAotdm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRBZGRVc2Vy
QWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJvb3QpCit2b2lkIEhUTUxQcm9ncmVzc0VsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBB
U1NFUlQoIW1fdmFsdWUpOwogCiAgICAgYXV0byBpbm5lciA9IFByb2dyZXNzSW5uZXJFbGVtZW50
OjpjcmVhdGUoZG9jdW1lbnQoKSk7Ci0gICAgcm9vdC0+YXBwZW5kQ2hpbGQoaW5uZXIpOworICAg
IHJvb3QuYXBwZW5kQ2hpbGQoaW5uZXIpOwogCiAgICAgYXV0byBiYXIgPSBQcm9ncmVzc0JhckVs
ZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICBhdXRvIHZhbHVlID0gUHJvZ3Jlc3NWYWx1
ZUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJv
Z3Jlc3NFbGVtZW50LmgKaW5kZXggYmQzM2FhMTIyZWRmMjE1NGE2NzlmZTE2ZDY2NDBjYjEyZmI3
MGUzMC4uODI2NzM2ZGFiMmJiNjU3YWIzZTVjN2FjM2JhNDk0ZDNhZDgwY2VlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIGZpbmFsOwogCiAgICAgdm9pZCBk
aWRFbGVtZW50U3RhdGVDaGFuZ2UoKTsKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jv
b3QoU2hhZG93Um9vdCopIGZpbmFsOworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dChTaGFkb3dSb290JikgZmluYWw7CiAgICAgYm9vbCBpc0RldGVybWluYXRlKCkgY29uc3Q7CiAK
ICAgICBib29sIGNhbkNvbnRhaW5SYW5nZUVuZFBvaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKaW5kZXgg
YTQ5ZmYyMGMyYjM3OGE1NjI0NDE1ZDU0OTMxZTM0NDNiMzhiOGFlYS4uOTlmM2M2ZjhjNGMwYWY0
Zjg3YTQ2ZjNmNTE5YmY5ZDAyNmM3ZTA0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU291cmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291
cmNlRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQaWN0dXJlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1h
cnlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNw
cAppbmRleCA5OTEwYmQxYjQyZmEyNTYyZjJhMzA2YWIyMTIwNmE4ODQ0ZjI1NDliLi5kYTc0OWNk
OTQzZjM5MGRjYTEwNTRhZTc1NWEyZjhhZDNhMDM2OTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCkBAIC02NSwxMCArNjUsMTAgQEAgUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+IEhUTUxTdW1tYXJ5RWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJl
bmRlclN0eWxlJiYKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93Pigq
dGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi12b2lkIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGlk
QWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MU3VtbWFy
eUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsK
LSAgICByb290LT5hcHBlbmRDaGlsZChEZXRhaWxzTWFya2VyQ29udHJvbDo6Y3JlYXRlKGRvY3Vt
ZW50KCkpKTsKLSAgICByb290LT5hcHBlbmRDaGlsZChIVE1MU2xvdEVsZW1lbnQ6OmNyZWF0ZShz
bG90VGFnLCBkb2N1bWVudCgpKSk7CisgICAgcm9vdC5hcHBlbmRDaGlsZChEZXRhaWxzTWFya2Vy
Q29udHJvbDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKKyAgICByb290LmFwcGVuZENoaWxkKEhUTUxT
bG90RWxlbWVudDo6Y3JlYXRlKHNsb3RUYWcsIGRvY3VtZW50KCkpKTsKIH0KIAogSFRNTERldGFp
bHNFbGVtZW50KiBIVE1MU3VtbWFyeUVsZW1lbnQ6OmRldGFpbHNFbGVtZW50KCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5oCmluZGV4IDEyN2E1NDZkMmEwZGM0
MDI5ODQxMmFiYzVkNjlhZjA3ODU2M2I1MjAuLjZiNzQ1MDU0NDYwZGEwMjYyYWZjYzk5YzQ3ZTll
OWY2OGUyZTQ2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuaApA
QCAtMzksNyArMzksNyBAQCBwcml2YXRlOgogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBj
cmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0
aW9uJikgZmluYWw7CiAgICAgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JikgZmluYWw7
CiAKLSAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCopIGZpbmFs
OworICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JikgZmluYWw7
CiAKICAgICBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCmlu
ZGV4IDI0MmZjMWE1ODVmZjNkYjliMjRmMWYyMDI3YTFlMTdjY2E5MDJiNTguLjY5NmE2M2Y0MDNj
ZTE1OTEyNTBmZDE0YjAwZWYyMGE2ZDk5YmIxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGVtcGxhdGVFbGVtZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkhUTUxU
ZW1wbGF0ZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZy
YWdtZW50LmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGUzYTAyMTkwZWRhMjAyNmJhZjIyMmNkMjFjZjY4
YjQyOGM0Yjc2ZGYuLjY4OGUzY2MwNzQ2YzY2MTgwY2JiNTg5NzE2N2JkZDIzNjY1YTI3NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMTAwLDkg
KzEwMCw5IEBAIFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PiBIVE1MVGV4dEFyZWFFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtCiAgICAgcmV0dXJuIHRleHRBcmVhOwog
fQogCi12b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3Qo
U2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlkQWRkVXNlckFn
ZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewotICAgIHJvb3QtPmFwcGVuZENoaWxk
KFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKKyAgICBy
b290LmFwcGVuZENoaWxkKFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KCkpKTsKICAgICB1cGRhdGVJbm5lclRleHRFbGVtZW50RWRpdGFiaWxpdHkoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAppbmRleCBiOWEzMjI0Yzc1
MGU0ZDQwNmIyM2E2ZTU0YjA0NzUyMjUyOTlmODUwLi5jYmQwNjNlMzI4MWJlY2FkNTY5YjJiY2Qw
MjcwNjBmZDdmYmFkOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgZW51bSBXcmFwTWV0aG9kIHsg
Tm9XcmFwLCBTb2Z0V3JhcCwgSGFyZFdyYXAgfTsKIAotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50
U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRT
aGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIHZvaWQgbWF4TGVuZ3RoQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIG1pbkxl
bmd0aEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCmluZGV4IGRlYzE5YjJjMGI5ZTIyMjBmNjdh
YTVkZjQ4ZGNiMTNjOTg0ZWE0MmIuLjBiY2ZlMTU4OTE0YzRmZDM1MGMxNmQzN2U0MWU0NGI5OGQw
ZWU0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCkBAIC0xNzgsOSAr
MTc4LDkgQEAgYm9vbCBSYWRpb0lucHV0VHlwZTo6aXNSYWRpb0J1dHRvbigpIGNvbnN0CiAKIGJv
b2wgUmFkaW9JbnB1dFR5cGU6Om1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MoKSBjb25z
dAogewotICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50
KCk7Ci0gICAgaWYgKGNvbnN0IFJhZGlvQnV0dG9uR3JvdXBzKiByYWRpb0J1dHRvbkdyb3VwcyA9
IGVsZW1lbnQucmFkaW9CdXR0b25Hcm91cHMoKSkKLSAgICAgICAgcmV0dXJuICFyYWRpb0J1dHRv
bkdyb3Vwcy0+aGFzQ2hlY2tlZEJ1dHRvbigmZWxlbWVudCk7CisgICAgYXV0byYgZWxlbWVudCA9
IHRoaXMtPmVsZW1lbnQoKTsKKyAgICBpZiAoYXV0byogcmFkaW9CdXR0b25Hcm91cHMgPSBlbGVt
ZW50LnJhZGlvQnV0dG9uR3JvdXBzKCkpCisgICAgICAgIHJldHVybiAhcmFkaW9CdXR0b25Hcm91
cHMtPmhhc0NoZWNrZWRCdXR0b24oZWxlbWVudCk7CiAgICAgcmV0dXJuICFlbGVtZW50LmNoZWNr
ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3Jp
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKaW5kZXgg
MDA1YmU0ZDJkMmUxNzgwOGVmODJhM2I5M2QyOTNkODc4YTE5YTA5My4uNmZjNWMxNjE2YmVmMTk2
MjEzY2FlYWNhNjFjYzE0NWQ0YzUxM2IxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50V3JpdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRXcml0ZXIuY3BwCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBEb2N1bWVudFdyaXRlcjo6YmVn
aW4oY29uc3QgVVJMJiB1cmxSZWZlcmVuY2UsIGJvb2wgZGlzcGF0Y2gsIERvY3VtZW50KiBvd24K
IAogICAgIGJvb2wgc2hvdWxkUmV1c2VEZWZhdWx0VmlldyA9IG1fZnJhbWUtPmxvYWRlcigpLnN0
YXRlTWFjaGluZSgpLmlzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgJiYgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+aXNTZWN1cmVUcmFuc2l0aW9uVG8odXJsKTsKICAgICBpZiAoc2hvdWxk
UmV1c2VEZWZhdWx0VmlldykKLSAgICAgICAgZG9jdW1lbnQtPnRha2VET01XaW5kb3dGcm9tKG1f
ZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICBkb2N1bWVudC0+dGFrZURPTVdpbmRvd0Zyb20o
Km1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgZG9jdW1lbnQtPmNyZWF0
ZURPTVdpbmRvdygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggYjIzOWM4YWZl
NDkwMDgzOTkwYzNiNDA1YmE3NDdiOWQ5MTUxZWIwNy4uMzFkMGFmZGNkYTZmMzZhYTU5YWEzZGFh
NWM2ZjEzNjZlYWRkNGQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMTgxMyw5
ICsxODEzLDkgQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExpc3RlbmUKICAgICBlbHNlIGlmICgoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCB8fCBldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZlbnQpICYmIGRvY3VtZW50KCkpIHsKICAgICAg
ICAgaWYgKGlzU2FtZVNlY3VyaXR5T3JpZ2luQXNNYWluRnJhbWUoKSkgewogICAgICAgICAgICAg
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCkKLSAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS0+
YWRkRGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS5hZGREZXZpY2VFdmVudExpc3RlbmVyKHRo
aXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmRldmlj
ZU1vdGlvbkNvbnRyb2xsZXIoKS0+YWRkRGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAg
ICAgICAgICAgICBkb2N1bWVudCgpLT5kZXZpY2VNb3Rpb25Db250cm9sbGVyKCkuYWRkRGV2aWNl
RXZlbnRMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpKQogICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMs
IE1lc3NhZ2VMZXZlbDo6V2FybmluZywgQVNDSUlMaXRlcmFsKCJCbG9ja2VkIGF0dGVtcHQgYWRk
IGRldmljZSBtb3Rpb24gb3Igb3JpZW50YXRpb24gbGlzdGVuZXIgZnJvbSBjaGlsZCBmcmFtZSB0
aGF0IHdhc24ndCB0aGUgc2FtZSBzZWN1cml0eSBvcmlnaW4gYXMgdGhlIG1haW4gcGFnZS4iKSk7
CiAgICAgfQpAQCAtMTkwNyw5ICsxOTA3LDkgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKICNp
ZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2lmIFBMQVRGT1JNKElPUykKICAgICBlbHNl
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmRldmljZW1vdGlvbkV2ZW50ICYmIGRvY3Vt
ZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmRldmljZU1vdGlvbkNvbnRyb2xsZXIoKS0+cmVt
b3ZlRGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZGV2aWNl
TW90aW9uQ29udHJvbGxlcigpLnJlbW92ZURldmljZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAgICAg
ZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50
ICYmIGRvY3VtZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmRldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcigpLT5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudCgpLT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVEZXZpY2VFdmVudExp
c3RlbmVyKHRoaXMpOwogI2Vsc2UKICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLmRldmljZW1vdGlvbkV2ZW50KSB7CiAgICAgICAgIGlmIChEZXZpY2VNb3Rpb25Db250cm9s
bGVyKiBjb250cm9sbGVyID0gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6ZnJvbShwYWdlKCkpKQpA
QCAtMjAxNCw4ICsyMDE0LDggQEAgdm9pZCBET01XaW5kb3c6OnJlbW92ZUFsbEV2ZW50TGlzdGVu
ZXJzKCkKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKSkgewotICAgICAg
ICBkb2N1bWVudC0+ZGV2aWNlTW90aW9uQ29udHJvbGxlcigpLT5yZW1vdmVBbGxEZXZpY2VFdmVu
dExpc3RlbmVycyh0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQtPmRldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlcigpLT5yZW1vdmVBbGxEZXZpY2VFdmVudExpc3RlbmVycyh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQtPmRldmljZU1vdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVBbGxEZXZpY2VFdmVudExp
c3RlbmVycyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPmRldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlcigpLnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKHRoaXMpOwogICAgIH0KICNlbHNl
CiAgICAgaWYgKERldmljZU1vdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBEZXZpY2VNb3Rp
b25Db250cm9sbGVyOjpmcm9tKHBhZ2UoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggZTUzOGJhNmM1MzEyZDljODE5ZWI1YTc1NjY0MGFjNWFiYThjZDNhYi4uNmY5MDcy
NDE5NDRiNzdlNWIxNDQ1MzMxZTBlZTU3NWUzMjY2YmE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMzUxMyw3ICszNTEzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRp
ZFN0YXJ0RHJhZygpCiAgICAgfQogCiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBkcmFnU3RhdGUoKS5k
cmFnZ2VkQ29udGVudFJhbmdlKSB7Ci0gICAgICAgIHJhbmdlLT5vd25lckRvY3VtZW50KCkubWFy
a2VycygpLmFkZERyYWdnZWRDb250ZW50TWFya2VyKHJhbmdlLmdldCgpKTsKKyAgICAgICAgcmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoKnJh
bmdlKTsKICAgICAgICAgcmVwYWludENvbnRlbnRzT2ZSYW5nZShyYW5nZSk7CiAgICAgfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCmluZGV4IDA4MDE3Mjk2OWJlNGNiZGFi
OTc5MjMzNTVhMTYzNzllNDliYjM0NjQuLmU0NmZmOWQ5ZmFmNzJjMjQyMWIxNTJmZDBmYTU1Mzlj
OWRhYTI2NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCkBAIC03Myw3ICs3Myw3
IEBAIEV4Y2VwdGlvbk9yPFJlZjxFdmVudFNvdXJjZT4+IEV2ZW50U291cmNlOjpjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4CiAgICAgfQogCiAgICAgYXV0byBzb3VyY2UgPSBh
ZG9wdFJlZigqbmV3IEV2ZW50U291cmNlKGNvbnRleHQsIGZ1bGxVUkwsIGV2ZW50U291cmNlSW5p
dCkpOwotICAgIHNvdXJjZS0+c2V0UGVuZGluZ0FjdGl2aXR5KHNvdXJjZS5wdHIoKSk7CisgICAg
c291cmNlLT5zZXRQZW5kaW5nQWN0aXZpdHkoc291cmNlLmdldCgpKTsKICAgICBzb3VyY2UtPnNj
aGVkdWxlSW5pdGlhbENvbm5lY3QoKTsKICAgICBzb3VyY2UtPnN1c3BlbmRJZk5lZWRlZCgpOwog
ICAgIHJldHVybiBXVEZNb3ZlKHNvdXJjZSk7CkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBFdmVu
dFNvdXJjZTo6bmV0d29ya1JlcXVlc3RFbmRlZCgpCiAgICAgaWYgKG1fc3RhdGUgIT0gQ0xPU0VE
KQogICAgICAgICBzY2hlZHVsZVJlY29ubmVjdCgpOwogICAgIGVsc2UKLSAgICAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKIH0KIAogdm9pZCBFdmVudFNvdXJjZTo6c2NoZWR1bGVJbml0aWFsQ29ubmVjdCgpCkBAIC0x
NTYsNyArMTU2LDcgQEAgdm9pZCBFdmVudFNvdXJjZTo6Y2xvc2UoKQogICAgICAgICBtX2xvYWRl
ci0+Y2FuY2VsKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAg
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rp
dml0eSgqdGhpcyk7CiAgICAgfQogfQogCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBFdmVudFNv
dXJjZTo6YWJvcnRDb25uZWN0aW9uQXR0ZW1wdCgpCiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwo
KTsKICAgICBlbHNlIHsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKICAgICB9CiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBDTE9TRUQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAppbmRleCA3Zjc0ZTMyNWNlNzg1YmFkNTFiYjU3YTE1MmMxY2EyYTczMjk0NTZiLi40ODVm
ZDJlMzI1YzI4YTI1Zjc3MzM0YmM4OTc3YTIzMTM5NmM3M2M0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cApAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJI
VE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2Uu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkOGU3NjVmOTRlMTExZmQ1YjdmOTYz
OGJmZDU4NjRlMmE3ZTU2MGFlLi4wMDQzY2U1ZmU5MWY5NDc4NjJhYzY4NmU2MmY2YmFiYmJmMDg3
ZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSFRNTEJvZHlFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCmluZGV4IDRjZjVlMjlkMGI5Mzg2YWZmZTI3MjZj
NzNhYWVlMjIzOTM1MTUzYzMuLmI0N2Y1MmI0NWMwOWFlMjBhYjUyZmI0ZmIxYmMxY2IwZDI0YmI3
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgIC8vIElm
IHdlIGdldCBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uIHRoZW4gd2UgZm9y
Y2UgYSBuZXcgYW5pbWF0aW9uLCByZWdhcmRsZXNzIG9mIHN0YXRlLgogICAgIGlmIChpbnB1dCA9
PSBBbmltYXRpb25TdGF0ZUlucHV0OjpNYWtlTmV3KSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlv
blN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAg
ICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25z
V2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmlt
YXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKICAg
ICAgICAgbV9zdGFydFRpbWUgPSBzdGQ6Om51bGxvcHQ7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9p
ZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBp
bnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlJlc3RhcnRBbmltYXRpb24pIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9j
b21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoKnRoaXMpOwogICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0
YXJ0VGltZSA9IHN0ZDo6bnVsbG9wdDsKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIEFuaW1hdGlv
bkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3Vi
bGUgcGFyYW0pCiAKICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5p
bWF0aW9uKSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9u
Q29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsK
ICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICBlbmRBbmltYXRpb24oKTsK
QEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGlu
ZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAKICNpZiBFTkFCTEUo
Q1NTX0FOSU1BVElPTlNfTEVWRUxfMikKICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvbi0+dHJp
Z2dlcigpICYmIG1fYW5pbWF0aW9uLT50cmlnZ2VyKCktPmlzU2Nyb2xsQW5pbWF0aW9uVHJpZ2dl
cigpKQotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250
cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwodGhpcyk7CisgICAgICAg
ICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRU
b0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbCgqdGhpcyk7CiAjZW5kaWYKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcjoKQEAg
LTI0Myw3ICsyNDMsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAg
Ly8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5k
IHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCiAgICAgICAgICAgICAgICAg
TE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSksIHBhcmFtKTsKICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9u
U3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOwotICAgICAgICAgICAgICAgIG1fY29tcG9z
aXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKHRoaXMpOworICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlz
KTsKIAogICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0
IHRoZSBhbmltYXRpb24KICAgICAgICAgICAgICAgICBpZiAobV9vYmplY3QgJiYgbV9vYmplY3Qt
PmVsZW1lbnQoKSkKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0
ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lT2Zmc2V0ID0gLW1fYW5pbWF0aW9uLT5kZWxheSgp
OwogICAgICAgICAgICAgICAgICAgICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbih0aW1l
T2Zmc2V0KTsKIAotICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZSh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmlt
YXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwogICAgICAgICAgICAgICAgICAgICBtX2lz
QWNjZWxlcmF0ZWQgPSBzdGFydGVkOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7CkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0
ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0
YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFs
dWVfb3IoMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24t
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1l
UmVzcG9uc2UodGhpcywgc3RhcnRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCBiMTFkYTVjMzBiNTEwMjk2
N2U5MWQ5NjY5NjMxZDBmZmZmZmFlM2I2Li5kZmU0YzAzMjQ4YWQ2YmRkNWUxYTRiMTdkZDRjYmVh
NmZkYWY5YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtNTAzLDE3ICs1MDMsMTUgQEAgdW5zaWdu
ZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cyhEb2N1bWVudCogZG9jdW0KICAgICByZXR1cm4gY291bnQ7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmlt
YXRpb25CYXNlKiBhbmltYXRpb24pCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9u
KQogewotICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGFuaW1hdGlvbiBpcyBub3QgaW4gdGhlIHN0YXJ0
IHRpbWUgd2FpdGVycwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZS5yZW1vdmUoYW5pbWF0aW9uKTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5h
ZGQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UucmVtb3ZlKCZhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5h
ZGQoJmFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1h
dGlvblRvUmVtb3ZlKQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uVG9S
ZW1vdmUpCiB7Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLnJlbW92ZShhbmltYXRp
b25Ub1JlbW92ZSk7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLnJlbW92ZSgmYW5p
bWF0aW9uVG9SZW1vdmUpOwogfQogCiB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdHlsZUF2YWlsYWJsZSgpCkBAIC01MjUsNyArNTIzLDcgQEAgdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQogICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdHlsZS5jbGVhcigpOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9u
QmFzZSogYW5pbWF0aW9uLCBib29sIHdpbGxHZXRSZXNwb25zZSkKK3ZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShBbmltYXRpb25CYXNlJiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQogewog
ICAgIC8vIElmIHdpbGxHZXRSZXNwb25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlv
biBpcyBhY3R1YWxseSB3YWl0aW5nIGZvciBhIHJlc3BvbnNlCiAgICAgLy8gKHdoaWNoIHdpbGwg
Y29tZSBpbiBhcyBhIGNhbGwgdG8gbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KQEAgLTU0NCwx
NyArNTQyLDE2IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBCiAgICAgLy8gVGhpcyB3aWxsIHN5
bmNocm9uaXplIGFsbCBzb2Z0d2FyZSBhbmQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBzdGFydGVk
IGluIHRoZSBzYW1lIAogICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQgY3ljbGUuCiAgICAgLy8K
LSAgICAKKwogICAgIGlmICh3aWxsR2V0UmVzcG9uc2UpCiAgICAgICAgIG1fd2FpdGluZ0ZvckFz
eW5jU3RhcnROb3RpZmljYXRpb24gPSB0cnVlOwogCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlLmFkZChhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZS5hZGQoJmFuaW1hdGlvbik7CiB9CiAKLXZvaWQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQordm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uVG9SZW1vdmUpCiB7
Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZShhbmlt
YXRpb25Ub1JlbW92ZSk7Ci0gICAgCisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0aW9uVG9SZW1vdmUpOwogICAgIGlmIChtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuaXNFbXB0eSgpKQogICAgICAgICBtX3dhaXRp
bmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7CiB9CkBAIC01NzAsOSArNTY3LDkg
QEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRUaW1lUmVzcG9uc2Uo
ZG91YmxlIHRpbWUpCiAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZh
bHNlOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25X
aWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKK3ZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYg
YW5pbWF0aW9uKQogewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCBhbmltYXRpb24p
OworICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAg
YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9uKTsKIAogICAgIHJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7CiAgICAgcmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5pbWF0aW9uKTsKQEAg
LTU5MywxNCArNTkwLDE1IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFu
aW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSogYW5pbWF0CiB9CiAKICNpZiBFTkFC
TEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqIGFu
aW1hdGlvbikKKwordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9Bbmlt
YXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uKQogewotICAg
IG1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLmFkZChhbmltYXRpb24pOworICAgIG1fYW5p
bWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsLmFkZCgmYW5pbWF0aW9uKTsKIH0KIAotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRP
blNjcm9sbChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCit2b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1h
dGlvbkJhc2UmIGFuaW1hdGlvbikKIHsKLSAgICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9s
bC5yZW1vdmUoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5y
ZW1vdmUoJmFuaW1hdGlvbik7CiB9CiAKIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnNjcm9sbFdhc1VwZGF0ZWQoKQpAQCAtNjE3LDYgKzYxNSw3IEBAIHZvaWQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnNjcm9sbFdhc1VwZGF0ZWQoKQogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxNzAKICAgICB1cGRhdGVBbmltYXRp
b25zKENhbGxTZXRDaGFuZ2VkKTsKIH0KKwogI2VuZGlmCiAKIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgKaW5kZXggMTVhNGY3MmMxZTZkNDc2NDE0YzQ4OTg0NDUyNzNhY2UzNTg5NjNmNC4u
YzIzYmVhMmYzNjcxMjViMzBhYzNmOWNhMzUwMWExMzJiNGU4MzdkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oCkBAIC05MywxMyArOTMsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZW5kQW5p
bWF0aW9uVXBkYXRlKCk7CiAgICAgdm9pZCByZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKGRvdWJs
ZSk7CiAgICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0
aW9uQmFzZSopOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
QW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KEFuaW1hdGlvbkJhc2UmKTsKKyAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlKEFuaW1hdGlvbkJhc2UmKTsKIAotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UqLCBib29sIHdpbGxHZXRSZXNwb25z
ZSk7Ci0gICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShBbmltYXRpb25CYXNlKik7CisgICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsK
KyAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
KEFuaW1hdGlvbkJhc2UmKTsKIAotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmlt
YXRpb25CYXNlKik7CisgICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJh
c2UmKTsKIAogICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXJGb3JSZW5kZXJlcihSZW5kZXJF
bGVtZW50Jik7CiAKQEAgLTExMCw4ICsxMTAsOCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQ1NT
X0FOSU1BVElPTlNfTEVWRUxfMikKICAgICBib29sIHdhbnRzU2Nyb2xsVXBkYXRlcygpIGNvbnN0
IHsgcmV0dXJuICFtX2FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbC5pc0VtcHR5KCk7IH0KLSAg
ICB2b2lkIGFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqKTsK
LSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0aW9u
QmFzZSopOworICAgIHZvaWQgYWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwoQW5pbWF0
aW9uQmFzZSYpOworICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9s
bChBbmltYXRpb25CYXNlJik7CiAKICAgICB2b2lkIHNjcm9sbFdhc1VwZGF0ZWQoKTsKICAgICBm
bG9hdCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwCmluZGV4IGQ4ZTFiMmRiZGFkMjcwOTRiYzM3ZTE1NTkyYzE2NmVhZWU2YTJhNDcuLjZj
NThjZjNjOTA2ZTU0ZGMwZjY4OWVhNTI1NWJkOGI0M2ViYmVjYzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNjQs
MTQgKzY0LDE0IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAg
ICAgICAgLy8gQ2xlYXIgdGhlIHJlbmRlcmVycyBmcm9tIGFsbCBydW5uaW5nIGFuaW1hdGlvbnMs
IGluIGNhc2Ugd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKICAgICAgICAgLy8gYW4gYW5pbWF0aW9u
IGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MDUyKQogICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVl
cygpKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJl
UmVtb3ZlZCh0cmFuc2l0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRy
YW5zaXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVy
KCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChhbmltYXRpb24uZ2V0KCkpOworICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7
CiAgICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
NTMsNyArMTUzLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25z
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbXBsQW5pbS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2Rp
ZmllZEN1cnJlbnRTdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIElt
cGxpY2l0QW5pbWF0aW9uICVwIGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0
eU5hbWUocHJvcCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxl
cigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoaW1wbEFuaW0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmltcGxB
bmltKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3Ap
OwogICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyCiAgICAg
VmVjdG9yPGludD4gdG9CZVJlbW92ZWQ7CiAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90
cmFuc2l0aW9ucy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoIXRyYW5zaXRpb24tPmFjdGl2ZSgp
KSB7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVt
b3ZlZCh0cmFuc2l0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRvQmVS
ZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsKICAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgSW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSBy
ZW5kZXJlciAlcCBmb3IgcHJvcGVydHkgJXMiLCB0cmFuc2l0aW9uLmdldCgpLCByZW5kZXJlciwg
Z2V0UHJvcGVydHlOYW1lKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpKTsKICAgICAg
ICAgfQpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0CiAgICAgLy8g
TWFrZSBhIGxpc3Qgb2YgYW5pbWF0aW9ucyB0byBiZSByZW1vdmVkLgogICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKICAgICAgICAgaWYg
KCFuZXdBbmltYXRpb25zLmNvbnRhaW5zKGFuaW1hdGlvbi0+bmFtZSgpLmltcGwoKSkpIHsKLSAg
ICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFu
aW1hdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0
aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xl
YXIoKTsKICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmlt
YXRpb24gJXAgZnJvbSByZW5kZXJlciAlcCIsIGFuaW1hdGlvbi5nZXQoKSwgcmVuZGVyZXIpOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDQyYzhiMzFlZjZi
ZmZhNjgyODU3NTg0NGQ4OTEwNDRmYzY5OWU4YjMuLmE4YWFiMDFlZjRmOGVhYjEyYWUwOTc2Mjc0
MzNiYzBkYTU3NTE5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDE0ICs4MSwxNCBAQCB2b2lkIEZy
YW1lOjppbml0V2l0aFNpbXBsZUhUTUxEb2N1bWVudChjb25zdCBTdHJpbmcmIHN0eWxlLCBjb25z
dCBVUkwmIHVybCkKIHsKICAgICBtX2xvYWRlci0+aW5pdEZvclN5bnRoZXNpemVkRG9jdW1lbnQo
dXJsKTsKIAotICAgIFJlZlB0cjxIVE1MRG9jdW1lbnQ+IGRvY3VtZW50ID0gSFRNTERvY3VtZW50
OjpjcmVhdGVTeW50aGVzaXplZERvY3VtZW50KHRoaXMsIHVybCk7CisgICAgYXV0byBkb2N1bWVu
dCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudCgqdGhpcywgdXJsKTsK
ICAgICBkb2N1bWVudC0+c2V0Q29tcGF0aWJpbGl0eU1vZGUoRG9jdW1lbnRDb21wYXRpYmlsaXR5
TW9kZTo6TGltaXRlZFF1aXJrc01vZGUpOwogICAgIGRvY3VtZW50LT5jcmVhdGVET01XaW5kb3co
KTsKLSAgICBzZXREb2N1bWVudChkb2N1bWVudCk7CisgICAgc2V0RG9jdW1lbnQoZG9jdW1lbnQu
cHRyKCkpOwogCi0gICAgYXV0byByb290RWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRl
KCpkb2N1bWVudCk7CisgICAgYXV0byByb290RWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KTsKIAotICAgIGF1dG8gYm9keSA9IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRl
KCpkb2N1bWVudCk7CisgICAgYXV0byBib2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOwogICAgIGlmICghc3R5bGUuaXNFbXB0eSgpKQogICAgICAgICBib2R5LT5zZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0dHIsIHN0eWxlKTsKIApAQCAtNjUyLDcgKzY1Miw3IEBA
IE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAK
ICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZU9mUm9vdENvbnRlbnRzLT5wYXN0TGFzdE5v
ZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZU9mUm9vdENvbnRlbnRzLT5maXJzdE5v
ZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlKSkgewotICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMo
KS5tYXJrZXJzRm9yKG5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzKSkgeworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1h
cmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0aGF0
IHByZWNlZGUgdGhlIG1hcmtlci4KICAgICAgICAgICAgIGlmIChwcmVjZWRpbmdUZXh0U3RhcnRQ
b3NpdGlvbiAhPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFy
dE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nVGV4
dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0UG9z
aXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zm
c2V0KCkpKTsKQEAgLTc1NCw0ICs3NTQsNSBAQCB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0
aW9uUGVybWlzc2lvbigpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuY3BwCmluZGV4IGU1YmYwNGRiMjNkMmFjYjk3OTVhMzJlOWE0OGU4M2IyYjM4
NTJmOTMuLmE3MDNjMDkwNTM3OWRiM2Q2MWUxNjEyNTBjNTBhY2Q1NDc5NmU4MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApAQCAt
MTA1LDcgKzEwNSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IEZpbHRlckVmZmVjdFJlbmRlcmVy
OjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByCiAgICAgICAgIC8vIEFsdGhv
dWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0
IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5v
bnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+CiAgICAg
ICAgIGlmIChhdXRvKiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAg
ZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVy
T3BlcmF0aW9uLmZyYWdtZW50KCksIGVsZW1lbnQpOworICAgICAgICAgICAgZG9jdW1lbnQtPmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZy
YWdtZW50KCksICplbGVtZW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggNTc1ZmEwNmFk
ZTYwYzUwMTNhZWU0NTFiN2U0M2E5MWQzMGYyZmQ1Yi4uNGUxZTIwMjk3NmJhMTlmMTFmMGZkN2U5
ZGRiYTY5MGU2NTA5YjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcApAQCAtODk1LDcgKzg5NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1
bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAg
aWYgKCFyZW5kZXJlcigpLnRleHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3Rv
cjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5tYXJrZXJzKCkubWFya2Vyc0ZvcihyZW5kZXJlcigpLnRleHROb2RlKCkpOworICAgIFZlY3Rv
cjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5tYXJrZXJzKCkubWFya2Vyc0ZvcigqcmVuZGVyZXIoKS50ZXh0Tm9kZSgpKTsKIAogICAgIC8v
IEdpdmUgYW55IGRvY3VtZW50IG1hcmtlcnMgdGhhdCB0b3VjaCB0aGlzIHJ1biBhIGNoYW5jZSB0
byBkcmF3IGJlZm9yZSB0aGUgdGV4dCBoYXMgYmVlbiBkcmF3bi4KICAgICAvLyBOb3RlIGVuZCgp
IHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3Qgb25lIHBhc3QgaXQgbGlrZSBlbmRPZmZzZXQg
YW5kIHJhbmdlcyBkby4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCmluZGV4IDAyNjA2NWE0NjZiOTgzMWIxZDk1OGMzYjNlNGU1ZGNkZWUzMTBjNDIuLmQ3YjU2
NzM4Mzc0ODg5NmJmZTRiMTlhYjk5Y2U5NjgyMWUyMjYxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgUmVu
ZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlZEdyYXBo
aWNzQ29udGV4dChwYWludEluZm8uY29udGV4dCgpLCBmYWxzZSk7CiAgICAgaWYgKGVsZW1lbnQo
KSAmJiBlbGVtZW50KCktPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewogICAgICAgICBh
dXRvKiBwYXJlbnRDb250YWluZXIgPSBlbGVtZW50KCktPnBhcmVudE9yU2hhZG93SG9zdEVsZW1l
bnQoKTsKLSAgICAgICAgaWYgKGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQo
ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcihwYXJlbnRDb250YWluZXIsIERvY3VtZW50
TWFya2VyOjpEcmFnZ2VkQ29udGVudCksICplbGVtZW50KCkpKSB7CisgICAgICAgIGlmIChkcmFn
Z2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVtZW50KGRvY3VtZW50KCkubWFya2VycygpLm1h
cmtlcnNGb3IoKnBhcmVudENvbnRhaW5lciwgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50
KSwgKmVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIHNhdmVkR3JhcGhpY3NDb250ZXh0LnNhdmUo
KTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0QWxwaGEoMC4yNSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA5MmFmMGQ3
Y2ZhYjgzOGJjYTI4NmM2N2FmMjEyYWYwNGVjYmVjOTkzLi4wYjYyZGMxMTFkMDEyNjAxOWQxMWUz
ZDU1NDY4N2RjN2Q4ZDc0ZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRDb250ZW50UmFuZ2VzQmV0d2Vlbk9mZgogICAgIGlm
ICghdGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gbWFya2VycyA9
IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IodGV4dE5vZGUoKSwgRG9jdW1lbnRNYXJr
ZXI6OkRyYWdnZWRDb250ZW50KTsKKyAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtl
cnMoKS5tYXJrZXJzRm9yKCp0ZXh0Tm9kZSgpLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRl
bnQpOwogICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNw
cAppbmRleCBiNjU2ZmQ2ZDA4M2ExNjhiOGExZjM5MzE0Yzc2MWRlZjZkNThkMGVlLi40NzVlMTVm
MGQzODUwMDBmMmNiMDU2NTg3MWVkZWRiZjZhODc0OTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcApAQCAtMTY1LDkgKzE2NSw5
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVGcm9tQ2FjaGVBbmRJbnZhbGlkYXRlRGVwZW5k
ZW5jaWVzKFJlbmRlckVsZW1lbnQmIHJlbmRlCiAgICAgICAgICAgICBjbGlwcGVyLT5yZW1vdmVD
bGllbnRGcm9tQ2FjaGUocmVuZGVyZXIpOwogICAgIH0KIAotICAgIGlmICghcmVuZGVyZXIuZWxl
bWVudCgpIHx8ICFyZW5kZXJlci5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgIGlmICgh
aXM8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuOwotICAg
IEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSByZW5kZXJlci5kb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoZG93
bmNhc3Q8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSk7CisgICAgYXV0byogZGVwZW5k
ZW5jaWVzID0gcmVuZGVyZXIuZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZF
bGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpyZW5kZXJlci5l
bGVtZW50KCkpKTsKICAgICBpZiAoIWRlcGVuZGVuY2llcykKICAgICAgICAgcmV0dXJuOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwCmluZGV4IDE4MTg2MDM4NTA4YzgzMDI4ODc5M2VjOGE2ZTMxMDY5
YzhlNzJjMzMuLjJkYmVhZjA2ZmM1MDdiYjAwNmRkYTBhMjQwMTZmOWY2OTMwY2Y0MmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuY3BwCkBAIC0xNzAsMTkgKzE3MCwxOSBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyOjpyZWdpc3RlclJlc291cmNlKCkKIHsKICAgICBTVkdEb2N1bWVudEV4
dGVuc2lvbnMmIGV4dGVuc2lvbnMgPSBzdmdFeHRlbnNpb25zRnJvbUVsZW1lbnQoZWxlbWVudCgp
KTsKICAgICBpZiAoIWV4dGVuc2lvbnMuaXNJZE9mUGVuZGluZ1Jlc291cmNlKG1faWQpKSB7Ci0g
ICAgICAgIGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgdGhpcyk7CisgICAgICAgIGV4dGVu
c2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6UGVuZGluZ0VsZW1l
bnRzPiBjbGllbnRzID0gZXh0ZW5zaW9ucy5yZW1vdmVQZW5kaW5nUmVzb3VyY2UobV9pZCk7CiAK
ICAgICAvLyBDYWNoZSB1cyB3aXRoIHRoZSBuZXcgaWQuCi0gICAgZXh0ZW5zaW9ucy5hZGRSZXNv
dXJjZShtX2lkLCB0aGlzKTsKKyAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsICp0aGlz
KTsKIAogICAgIC8vIFVwZGF0ZSBjYWNoZWQgcmVzb3VyY2VzIG9mIHBlbmRpbmcgY2xpZW50cy4K
ICAgICBmb3IgKGF1dG8qIGNsaWVudCA6ICpjbGllbnRzKSB7CiAgICAgICAgIEFTU0VSVChjbGll
bnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7Ci0gICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQ
ZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShjbGllbnQpOworICAgICAgICBleHRlbnNpb25zLmNs
ZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKmNsaWVudCk7CiAgICAgICAgIGF1dG8q
IHJlbmRlcmVyID0gY2xpZW50LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jlc291cmNlcy5jcHAKaW5kZXggZWE5YjQ1MjExNTczMzEzMjNjYTJiMjBjZmY3YmY5ZDI5ZDM5
MGVmZi4uNDEzYmJjMjZjOTY1ODYwNTA3ZTRmNGQ3OGQwOGU5MmJkZWU2NjMzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcApAQCAtMTc1LDcgKzE3
NSw3IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHBhaW50aW5n
UmVzb3VyY2VGcm9tU1ZHUGFpbnQoRG9jdW1lbnQmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdp
c3RlclBlbmRpbmdSZXNvdXJjZShTVkdEb2N1bWVudEV4dGVuc2lvbnMmIGV4dGVuc2lvbnMsIGNv
bnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgZXh0ZW5z
aW9ucy5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICZlbGVtZW50KTsKKyAgICBleHRlbnNpb25zLmFk
ZFBlbmRpbmdSZXNvdXJjZShpZCwgZWxlbWVudCk7CiB9CiAKIGJvb2wgU1ZHUmVzb3VyY2VzOjpi
dWlsZENhY2hlZFJlc291cmNlcyhjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1Jlc291cmNlc0NhY2hlLmNwcAppbmRleCA4M2Q5MTJlZWJlOGZlNDI4Mzg2OGQyZDEzYWRj
NDM5MjhkYTI1OTY3Li42OTQzM2FhMjdiMzFmZmQzYjViOGU4ZjI2MTc3N2I0N2UxYjZkYzFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hl
LmNwcApAQCAtMTY5LDggKzE2OSw4IEBAIHZvaWQgU1ZHUmVzb3VyY2VzQ2FjaGU6OnJlc291cmNl
RGVzdHJveWVkKFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJiByZXNvdXJjZSkKIAogICAgICAg
ICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMgcGVuZGluZyByZXNvbHV0
aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgogICAgICAgICBFbGVtZW50
JiByZXNvdXJjZUVsZW1lbnQgPSByZXNvdXJjZS5lbGVtZW50KCk7Ci0gICAgICAgIEVsZW1lbnQq
IGNsaWVudEVsZW1lbnQgPSBpdC5rZXktPmVsZW1lbnQoKTsKLSAgICAgICAgY2xpZW50RWxlbWVu
dC0+ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHJl
c291cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLCBjbGllbnRFbGVtZW50KTsKKyAgICAgICAg
RWxlbWVudCYgY2xpZW50RWxlbWVudCA9ICppdC5rZXktPmVsZW1lbnQoKTsKKyAgICAgICAgY2xp
ZW50RWxlbWVudC5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVz
b3VyY2UocmVzb3VyY2VFbGVtZW50LmdldElkQXR0cmlidXRlKCksIGNsaWVudEVsZW1lbnQpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAppbmRleCAxNzY5MGNjZDY3
Nzc5YzIzYjkzNzc2MzA4NDQ1NDYyZDdhYTkyMmRkLi5lNmYwNzE0YTQzN2E1NDhmNWExNDFkMjU3
OTc4ZTU3ZThkYTY0NTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNj
b3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcApAQCAtMzA3
LDcgKzMwNyw3IEBAIHZvaWQgU2NvcGU6OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQogICAgICAgICAgICAgaWYgKHBpLmlzWFNMKCkg
JiYgIW1fZG9jdW1lbnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNo
ZWQuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnBhcnNpbmcoKSkKLSAgICAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybSgmcGkpOworICAgICAgICAg
ICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggZWI4MTU0Y2Y1YzJlZTNmOTBlYWViNDM5
MTIzMGU5YzA1M2IyYTNiNy4uY2U0MmMyMTcxNGY2MmU0MGMyMjM3ZjA2MzY5ODJlYWYxZWMzYTQ1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAg
LTUxLDI3ICs1MSwyNSBAQCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6On5TVkdEb2N1bWVudEV4dGVu
c2lvbnMoKQogewogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkVGltZUNvbnRh
aW5lcihTVkdTVkdFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3RpbWVD
b250YWluZXJzLmFkZChlbGVtZW50KTsKKyAgICBtX3RpbWVDb250YWluZXJzLmFkZCgmZWxlbWVu
dCk7CiAgICAgaWYgKG1fYXJlQW5pbWF0aW9uc1BhdXNlZCkKLSAgICAgICAgZWxlbWVudC0+cGF1
c2VBbmltYXRpb25zKCk7CisgICAgICAgIGVsZW1lbnQucGF1c2VBbmltYXRpb25zKCk7CiB9CiAK
LXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0Vs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlVGltZUNv
bnRhaW5lcihTVkdTVkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fdGltZUNvbnRhaW5lcnMu
cmVtb3ZlKGVsZW1lbnQpOworICAgIG1fdGltZUNvbnRhaW5lcnMucmVtb3ZlKCZlbGVtZW50KTsK
IH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFJlc291cmNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKiByZXNvdXJjZSkKK3ZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYgcmVzb3VyY2UpCiB7Ci0gICAgQVNTRVJUKHJl
c291cmNlKTsKLQogICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIFJlcGxhY2VzIHJlc291cmNlIGlmIGFscmVhZHkgcHJlc2VudCwgdG8gaGFuZGxlIHBvdGVu
dGlhbCBpZCBjaGFuZ2VzCi0gICAgbV9yZXNvdXJjZXMuc2V0KGlkLCByZXNvdXJjZSk7CisgICAg
bV9yZXNvdXJjZXMuc2V0KGlkLCAmcmVzb3VyY2UpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6cmVtb3ZlUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKQEAgLTk3LDcg
Kzk1LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnN0YXJ0QW5pbWF0aW9ucygpCiAg
ICAgLy8gRklYTUU6IFdlIGhvbGQgYSByZWYgcG9pbnRlcnMgdG8gcHJldmVudCBhIHNoYWRvdyB0
cmVlIGZyb20gZ2V0dGluZyByZW1vdmVkIG91dCBmcm9tIHVuZGVybmVhdGggdXMuCiAgICAgLy8g
SW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgcmVmYWN0b3IgdGhlIHVzZS1lbGVtZW50IHRvIGF2b2lk
IHRoaXMuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi81MzcwNAogICAgIFZlY3RvcjxSZWZQdHI8
U1ZHU1ZHRWxlbWVudD4+IHRpbWVDb250YWluZXJzOwotICAgIHRpbWVDb250YWluZXJzLmFwcGVu
ZFJhbmdlKG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKSwgbV90aW1lQ29udGFpbmVycy5lbmQoKSk7
CisgICAgY29weVRvVmVjdG9yKG1fdGltZUNvbnRhaW5lcnMsIHRpbWVDb250YWluZXJzKTsKICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB0aW1lQ29udGFpbmVycykKICAgICAgICAgZWxlbWVudC0+
dGltZUNvbnRhaW5lcigpLmJlZ2luKCk7CiB9CkBAIC0xNDQsMTkgKzE0MiwxNyBAQCB2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ICAgIHJlcG9ydE1lc3NhZ2UobV9kb2N1bWVudCwgTWVzc2FnZUxldmVsOjpFcnJvciwgIkVycm9y
OiAiICsgbWVzc2FnZSk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5k
aW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCkKK3Zv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCwgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0K
ICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJlc3Vs
dCA9IG1fcGVuZGluZ1Jlc291cmNlcy5hZGQoaWQsIG51bGxwdHIpOwogICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91
bmlxdWU8UGVuZGluZ0VsZW1lbnRzPigpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFk
ZChlbGVtZW50KTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQoJmVsZW1lbnQpOwog
Ci0gICAgZWxlbWVudC0+c2V0SGFzUGVuZGluZ1Jlc291cmNlcygpOworICAgIGVsZW1lbnQuc2V0
SGFzUGVuZGluZ1Jlc291cmNlcygpOwogfQogCiBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
aXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CkBAIC0x
NjcsNDkgKzE2Myw0MyBAQCBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNJZE9mUGVuZGlu
Z1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGVu
ZGluZ1Jlc291cmNlcy5jb250YWlucyhpZCk7CiB9CiAKLWJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjppc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBlbGVtZW50KSBjb25z
dAorYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3Vy
Y2VzKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBhbGdvcml0aG0gdGFr
ZXMgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlc291cmNlcyBh
bmQgbmVlZCBub3QuCiAgICAgLy8gSWYgcGVyZm9ybWFuY2UgYmVjb21lcyBhbiBpc3N1ZSB3ZSBj
YW4ga2VlcCBhIGNvdW50ZWQgc2V0IG9mIGVsZW1lbnRzIGFuZCBhbnN3ZXIgdGhlIHF1ZXN0aW9u
IGVmZmljaWVudGx5LgotICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBmb3IgKGF1dG8mIGVsZW1l
bnRzIDogbV9wZW5kaW5nUmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIEFTU0VSVChlbGVt
ZW50cyk7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKKyAgICAg
ICAgaWYgKGVsZW1lbnRzLT5jb250YWlucygmZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6aXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCkgY29uc3QKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc1BlbmRpbmdS
ZXNvdXJjZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAog
ewotICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIGlmICghaXNJZE9mUGVuZGluZ1Jlc291cmNl
KGlkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291
cmNlcy5nZXQoaWQpLT5jb250YWlucyhlbGVtZW50KTsKKyAgICByZXR1cm4gbV9wZW5kaW5nUmVz
b3VyY2VzLmdldChpZCktPmNvbnRhaW5zKCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpjbGVhckhhc1BlbmRpbmdSZXNv
dXJjZXNJZlBvc3NpYmxlKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFpc0VsZW1lbnRX
aXRoUGVuZGluZ1Jlc291cmNlcyhlbGVtZW50KSkKLSAgICAgICAgZWxlbWVudC0+Y2xlYXJIYXNQ
ZW5kaW5nUmVzb3VyY2VzKCk7CisgICAgICAgIGVsZW1lbnQuY2xlYXJIYXNQZW5kaW5nUmVzb3Vy
Y2VzKCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJv
bVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICAvLyBSZW1vdmUgdGhlIGVsZW1lbnQg
ZnJvbSBwZW5kaW5nIHJlc291cmNlcy4KLSAgICBpZiAoIW1fcGVuZGluZ1Jlc291cmNlcy5pc0Vt
cHR5KCkgJiYgZWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CisgICAgaWYgKCFtX3Bl
bmRpbmdSZXNvdXJjZXMuaXNFbXB0eSgpICYmIGVsZW1lbnQuaGFzUGVuZGluZ1Jlc291cmNlcygp
KSB7CiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwogICAgICAgICBm
b3IgKGF1dG8mIHJlc291cmNlIDogbV9wZW5kaW5nUmVzb3VyY2VzKSB7CiAgICAgICAgICAgICBQ
ZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gcmVzb3VyY2UudmFsdWUuZ2V0KCk7CiAgICAgICAg
ICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+aXNF
bXB0eSgpKTsKIAotICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKKyAgICAg
ICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1l
bnRzLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlc291
cmNlLmtleSk7CiAgICAgICAgIH0KQEAgLTIyOSw3ICsyMTksNyBAQCB2b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJU
KCFlbGVtZW50cy0+aXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShl
bGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoJmVsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdG9CZVJlbW92
ZWQuYXBwZW5kKHJlc291cmNlLmtleSk7CiAgICAgICAgIH0KQEAgLTI4NCw0MCArMjc0LDI5IEBA
IEVsZW1lbnQqIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5n
UmVzb3VyY2VzRm9yUmVtb3ZhbE1hcChjCiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKLUhhc2hT
ZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZl
cmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkgY29uc3QKK0hhc2hT
ZXQ8U1ZHRWxlbWVudCo+KiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldE9mRWxlbWVudHNSZWZl
cmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGNvbnN0IGF1dG8gaXQgPSBtX2VsZW1l
bnREZXBlbmRlbmNpZXMuZmluZChyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGl0LT52YWx1ZS5nZXQoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdldCgm
cmVmZXJlbmNlZEVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRk
RWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCwg
U1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6YWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxl
bWVudCwgU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKHJlZmVy
ZW5jaW5nRWxlbWVudCk7Ci0gICAgQVNTRVJUKHJlZmVyZW5jZWRFbGVtZW50KTsKLQotICAgIGlm
IChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZWxlbWVudHMgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMu
Z2V0KHJlZmVyZW5jZWRFbGVtZW50KSkgewotICAgICAgICBlbGVtZW50cy0+YWRkKHJlZmVyZW5j
aW5nRWxlbWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGVsZW1lbnRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0PFNWR0VsZW1lbnQqPj4oKTsKLSAgICBlbGVtZW50
cy0+YWRkKHJlZmVyZW5jaW5nRWxlbWVudCk7Ci0gICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnNl
dChyZWZlcmVuY2VkRWxlbWVudCwgV1RGTW92ZShlbGVtZW50cykpOworICAgIGF1dG8gcmVzdWx0
ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuc3VyZSgmcmVmZXJlbmNlZEVsZW1lbnQsIFsmcmVm
ZXJlbmNpbmdFbGVtZW50XSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+PihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8U1ZHRWxlbWVudCo+IHsgJnJl
ZmVyZW5jaW5nRWxlbWVudCB9KTsKKyAgICB9KTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQoJnJlZmVyZW5jaW5nRWxlbWVu
dCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRSZWZl
cmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQpCit2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQo
U1ZHRWxlbWVudCYgcmVmZXJlbmNpbmdFbGVtZW50KQogewogICAgIFZlY3RvcjxTVkdFbGVtZW50
Kj4gdG9CZVJlbW92ZWQ7CiAKICAgICBmb3IgKGF1dG8mIGRlcGVuZGVuY3kgOiBtX2VsZW1lbnRE
ZXBlbmRlbmNpZXMpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBk
ZXBlbmRlbmN5LmtleTsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4mIHJlZmVyZW5jaW5n
RWxlbWVudHMgPSAqZGVwZW5kZW5jeS52YWx1ZTsKLSAgICAgICAgcmVmZXJlbmNpbmdFbGVtZW50
cy5yZW1vdmUocmVmZXJlbmNpbmdFbGVtZW50KTsKKyAgICAgICAgYXV0byYgcmVmZXJlbmNpbmdF
bGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOworICAgICAgICByZWZlcmVuY2luZ0VsZW1lbnRz
LnJlbW92ZSgmcmVmZXJlbmNpbmdFbGVtZW50KTsKICAgICAgICAgaWYgKHJlZmVyZW5jaW5nRWxl
bWVudHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlZmVyZW5j
ZWRFbGVtZW50KTsKKyAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChkZXBlbmRlbmN5Lmtl
eSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9CZVJlbW92ZWQpCkBAIC0z
MzMsMTEgKzMxMiw5IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkRWxlbWVu
dHMoKQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJUYXJnZXREZXBlbmRlbmNp
ZXMoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgYXV0byBpdCA9IG1fZWxl
bWVudERlcGVuZGVuY2llcy5maW5kKCZyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgaWYgKGl0ID09
IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbmQoKSkKKyAgICBhdXRvKiByZWZlcmVuY2luZ0VsZW1l
bnRzID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdldCgmcmVmZXJlbmNlZEVsZW1lbnQpOworICAg
IGlmICghcmVmZXJlbmNpbmdFbGVtZW50cykKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChp
dC0+a2V5ID09ICZyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4q
IHJlZmVyZW5jaW5nRWxlbWVudHMgPSBpdC0+dmFsdWUuZ2V0KCk7CiAgICAgZm9yIChhdXRvKiBl
bGVtZW50IDogKnJlZmVyZW5jaW5nRWxlbWVudHMpIHsKICAgICAgICAgbV9yZWJ1aWxkRWxlbWVu
dHMuYXBwZW5kKGVsZW1lbnQpOwogICAgICAgICBlbGVtZW50LT5jYWxsQ2xlYXJUYXJnZXQoKTsK
QEAgLTM2MSwyMyArMzM4LDI1IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxk
QWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYgcmVmCiAgICAgICAgIGVs
ZW1lbnQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogfQogCi12
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JU
YXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoU1ZHRWxlbWVudCYg
cmVmZXJlbmNlZEVsZW1lbnQpCiB7Ci0gICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJlbW92ZShy
ZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgbV9yZWJ1aWxkRWxlbWVudHMucmVtb3ZlRmlyc3QocmVm
ZXJlbmNlZEVsZW1lbnQpOworICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5yZW1vdmUoJnJlZmVy
ZW5jZWRFbGVtZW50KTsKKyAgICBtX3JlYnVpbGRFbGVtZW50cy5yZW1vdmVGaXJzdCgmcmVmZXJl
bmNlZEVsZW1lbnQpOwogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLXZvaWQgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjpyZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1l
bnQqIGVsZW1lbnQpCisKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWdpc3RlclNWR0Zv
bnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9zdmdG
b250RmFjZUVsZW1lbnRzLmFkZChlbGVtZW50KTsKKyAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudHMu
YWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucmVnaXN0
ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVtZW50KQordm9pZCBT
VkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZHRm9u
dEZhY2VFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChtX3N2Z0ZvbnRGYWNlRWxlbWVu
dHMuY29udGFpbnMoZWxlbWVudCkpOwotICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5yZW1vdmUo
ZWxlbWVudCk7CisgICAgQVNTRVJUKG1fc3ZnRm9udEZhY2VFbGVtZW50cy5jb250YWlucygmZWxl
bWVudCkpOworICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQor
CiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5o
CmluZGV4IDZhNTI3NzA0OWM1YjI1NTAyNWY5OWE3MmUxOWYyY2UwODFiZDFkZWIuLjVjMjFlNTUy
MGZkNzQzMDY4MGU4N2FjNGU1MDY0NmI2ZGI0YTc2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKQEAgLTQzLDEwICs0MywxMCBAQCBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKERvY3VtZW50Jik7CiAgICAgflNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucygpOwogICAgIAotICAgIHZvaWQgYWRkVGltZUNvbnRhaW5lcihTVkdTVkdF
bGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqKTsK
KyAgICB2b2lkIGFkZFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCYpOworICAgIHZvaWQgcmVt
b3ZlVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50Jik7CiAKLSAgICB2b2lkIGFkZFJlc291cmNl
KGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyKik7Cisg
ICAgdm9pZCBhZGRSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZW5kZXJTVkdSZXNv
dXJjZUNvbnRhaW5lciYpOwogICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlQnlJZChj
b25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKIApAQCAtNjEsMTkgKzYxLDE5IEBAIHB1Ymxp
YzoKIAogICAgIFNWR1Jlc291cmNlc0NhY2hlJiByZXNvdXJjZXNDYWNoZSgpIHsgcmV0dXJuICpt
X3Jlc291cmNlc0NhY2hlOyB9CiAKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZFbGVt
ZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KSBjb25z
dDsKLSAgICB2b2lkIGFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZl
cmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICB2b2lk
IHJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqKTsKKyAgICBI
YXNoU2V0PFNWR0VsZW1lbnQqPiogc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0Vs
ZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KSBjb25zdDsKKyAgICB2b2lkIGFkZEVsZW1lbnRSZWZl
cmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2luZ0VsZW1lbnQsIFNWR0VsZW1lbnQm
IHJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICB2b2lkIHJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNG
b3JFbGVtZW50KFNWR0VsZW1lbnQmKTsKICAgICB2b2lkIHJlYnVpbGRBbGxFbGVtZW50UmVmZXJl
bmNlc0ZvclRhcmdldChTVkdFbGVtZW50Jik7Ci0gICAgdm9pZCByZW1vdmVBbGxFbGVtZW50UmVm
ZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVBbGxFbGVtZW50
UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50Jik7CiAKICAgICB2b2lkIGNsZWFyVGFyZ2V0
RGVwZW5kZW5jaWVzKFNWR0VsZW1lbnQmKTsKICAgICB2b2lkIHJlYnVpbGRFbGVtZW50cygpOwog
CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxl
bWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFj
ZUVsZW1lbnRzOyB9Ci0gICAgdm9pZCByZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250
RmFjZUVsZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoU1ZH
Rm9udEZhY2VFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChT
VkdGb250RmFjZUVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1l
bnQoU1ZHRm9udEZhY2VFbGVtZW50Jik7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTk1LDExICs5
NSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBIYXNoTWFwIGNvbnRhaW5zIGEgbGlzdCBvZiBw
ZW5kaW5nIHJlc291cmNlcy4gUGVuZGluZyByZXNvdXJjZXMsIGFyZSBzdWNoCiAgICAgLy8gd2hp
Y2ggYXJlIHJlZmVyZW5jZWQgYnkgYW55IG9iamVjdCBpbiB0aGUgU1ZHIGRvY3VtZW50LCBidXQg
ZG8gTk9UIGV4aXN0IHlldC4KICAgICAvLyBGb3IgaW5zdGFuY2UsIGR5bmFtaWNhbGx5IGJ1aWxk
IGdyYWRpZW50cyAvIHBhdHRlcm5zIC8gY2xpcHBlcnMuLi4KLSAgICB2b2lkIGFkZFBlbmRpbmdS
ZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGRQ
ZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCYpOwogICAgIGJv
b2wgaXNJZE9mUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0Owot
ICAgIGJvb2wgaXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYg
aWQpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShF
bGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxl
bWVudCopOworICAgIGJvb2wgaXNQZW5kaW5nUmVzb3VyY2UoRWxlbWVudCYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQpIGNvbnN0OworICAgIHZvaWQgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQ
b3NzaWJsZShFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNv
dXJjZXMoRWxlbWVudCYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRWxlbWVudHM+IHJl
bW92ZVBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKTsKIAogICAgIC8vIFRo
ZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3Igc2NoZWR1bGluZyBhIHBlbmRp
bmcgcmVzb3VyY2UgdG8gYmUgcmVtb3ZlZC4KQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAg
ICAgRWxlbWVudCogcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3ZhbE1h
cChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGlzRWxlbWVudFdp
dGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGlzRWxlbWVudFdp
dGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UGVuZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFsKGNvbnN0IEF0
b21pY1N0cmluZyYpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDcwMTg5
ODFiOTJiOTZkZmJiMDVhYmE1NWQxMWU2YmMxZWYxNzE4YTguLmRlMDFhMjJkZDhhODgyMDAyMWI2
OWQwZGQ3YWUwZGJlNTlkOWZmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTI5
NCw3ICsyOTQsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIG1fc3ZnUmFy
ZURhdGEgPSBudWxscHRyOwogICAgIH0KICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZWJ1aWxkQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwotICAgIGRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2Vz
Rm9yVGFyZ2V0KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJl
bW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0aGlzKTsKIH0KIAogaW50IFNWR0Vs
ZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFNWR0VsZW1l
bnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiAKICAgICBpZiAod2Fz
SW5Eb2N1bWVudCkgewogICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5j
bGVhclRhcmdldERlcGVuZGVuY2llcygqdGhpcyk7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMp
OworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVt
ZW50UmVmZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7CiAgICAgfQogICAgIGludmFsaWRhdGVJbnN0
YW5jZXMoKTsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6YnVpbGRQ
ZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKQogICAgICAgICBBU1NFUlQoY2xpZW50RWxlbWVudC0+
aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgaWYgKGNsaWVudEVsZW1lbnQtPmhhc1Bl
bmRpbmdSZXNvdXJjZXMoKSkgewogICAgICAgICAgICAgY2xpZW50RWxlbWVudC0+YnVpbGRQZW5k
aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVz
b3VyY2VzSWZQb3NzaWJsZShjbGllbnRFbGVtZW50KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMu
Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgqY2xpZW50RWxlbWVudCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApp
bmRleCBlYzc0YThkMGU1YWI2YjVhZDk4YTg4ZTc4ZTEyYzRiYTYyNWQ2YWU3Li5iMmMzMjM3Y2E5
ZjNkNmQ0YTM2NWViY2Q5MGRjODlhMGQ3Mzg4OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUltYWdlRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVu
dDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogICAgICAgICBtX2NhY2hlZEltYWdlID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1v
dmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgq
dGhpcyk7CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnJlcXVlc3RJbWFnZVJlc291cmNl
KCkKQEAgLTEwNywxMyArMTA3LDEzIEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCkKICAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
cXVlc3RJbWFnZVJlc291cmNlKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdS
ZXNvdXJjZShpZCwgKnRoaXMpOwogICAgICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJj
ZXMoKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhcmdldC0+aXNTVkdFbGVtZW50KCkp
IHsKKyAgICB9IGVsc2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCp0YXJnZXQpKSB7CiAgICAgICAgIC8v
IFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55
IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0
L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5n
VGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQo
KnRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9CiAKICAgICBpbnZh
bGlkYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4
IGI4YmE5YjA3ZmUyYTY0MDkzNjlmMWFjODQ1MmI1YTVhZThhYzY4ZWMuLjQ2Mzg4MDYxNDlkNWY1
M2NhYjhmOGMzM2I3MzNmZDY0ZjQ4YWVmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RmFjZUVsZW1lbnQuY3BwCkBAIC0yNzgsNyArMjc4LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJO
b2QKICAgICAgICAgQVNTRVJUKCFtX2ZvbnRFbGVtZW50KTsKICAgICAgICAgcmV0dXJuIEluc2Vy
dGlvbkRvbmU7CiAgICAgfQotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJl
Z2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KCp0aGlzKTsKIAogICAgIHJl
YnVpbGRGb250RmFjZSgpOwogICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwpAQCAtMjkwLDcgKzI5
MCw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2Rl
JiByb290UGFyZW50KQogCiAgICAgaWYgKHJvb3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgewogICAg
ICAgICBtX2ZvbnRFbGVtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkudW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudCh0aGlzKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkudW5yZWdpc3RlclNWR0ZvbnRGYWNl
RWxlbWVudCgqdGhpcyk7CiAgICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGll
cygpLmNsZWFyKCk7CiAKICAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdl
U3R5bGVTaGVldEVudmlyb25tZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTVBhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQu
Y3BwCmluZGV4IGZmN2Q0ODcyZDY5NDU2N2U3NTJjM2ZjZmE3MDkwZjdjZmNkYTQ3MTguLmRmMjUy
YmYwMmI2OGI0OGQ2Njk5OTk4YmU4ZDVmMDJhNWQyNTFkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdNUGF0aEVsZW1lbnQuY3BwCkBAIC02NSwxNyArNjUsMTcgQEAgdm9pZCBTVkdNUGF0aEVsZW1l
bnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKICAgICBFbGVtZW50KiB0YXJnZXQgPSBTVkdVUklS
ZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwg
JmlkKTsKICAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAvLyBEbyBub3QgcmVnaXN0ZXIgYXMg
cGVuZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMgcmVzb3VyY2UuCi0gICAgICAg
IGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSh0
aGlzLCBpZCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5p
c1BlbmRpbmdSZXNvdXJjZSgqdGhpcywgaWQpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAq
dGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5pc1NWR0VsZW1lbnQoKSkgeworICAgIH0gZWxz
ZSBpZiAoaXM8U1ZHRWxlbWVudD4oKnRhcmdldCkpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMg
d2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhy
ZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBu
b3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAgICBkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywg
ZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgZG93bmNh
c3Q8U1ZHRWxlbWVudD4oKnRhcmdldCkpOwogICAgIH0KIAogICAgIHRhcmdldFBhdGhDaGFuZ2Vk
KCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdS
ZXNvdXJjZSgpCiAKIHZvaWQgU1ZHTVBhdGhFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNl
cygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFy
Z2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwog
fQogCiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR01QYXRoRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhFbGVtZW50LmNwcAppbmRleCBlMjIzMGY0MTJkZDgxMzViZjI1NzYxNWJlYjhlZTQ4NDc3
ZmRlMDRlLi5mNzE2NDcwYzJiMzk1MGRiMjI1ODEwYmMzMGVjNGExODgyNzBlNzMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFNW
R1BhdGhFbGVtZW50OjppbnZhbGlkYXRlTVBhdGhEZXBlbmRlbmNpZXMoKQogewogICAgIC8vIDxt
cGF0aD4gY2FuIG9ubHkgcmVmZXJlbmNlIDxwYXRoPiBidXQgdGhpcyBkZXBlbmRlbmN5IGlzIG5v
dCBoYW5kbGVkIGluCiAgICAgLy8gbWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxp
ZGF0aW9uIHNvIHdlIHVwZGF0ZSBhbnkgbXBhdGggZGVwZW5kZW5jaWVzIG1hbnVhbGx5LgotICAg
IGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5kZW5jaWVzID0gZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KHRoaXMpKSB7
CisgICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNpZXMgPSBkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoKnRo
aXMpKSB7CiAgICAgICAgIGZvciAoYXV0byogZWxlbWVudCA6ICpkZXBlbmRlbmNpZXMpIHsKICAg
ICAgICAgICAgIGlmIChpczxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KSkKICAgICAgICAgICAg
ICAgICBkb3duY2FzdDxTVkdNUGF0aEVsZW1lbnQ+KCplbGVtZW50KS50YXJnZXRQYXRoQ2hhbmdl
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmluZGV4IGJmYTkxNzJlODkxY2M2
NDMwOGYzNDYyNGU3NGU1ZWU5YjNhN2EzMjguLjk0MDUwZGI5M2FhZWZlZmMyOTRjNDc0YjYxZGVi
NGQxZjZhM2VkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKQEAgLTc5LDcg
Kzc5LDcgQEAgaW5saW5lIFNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3UKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFt
ZShTVkdOYW1lczo6c3ZnVGFnKSk7CiAgICAgcmVnaXN0ZXJBbmltYXRlZFByb3BlcnRpZXNGb3JT
VkdTVkdFbGVtZW50KCk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3Bl
bnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiBSZWY8U1ZHU1ZHRWxlbWVudD4gU1ZHU1ZHRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1
bWVudCkKQEAgLTk2LDE0ICs5NiwxNCBAQCBTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxlbWVudCgp
CiB7CiAgICAgaWYgKG1fdmlld1NwZWMpCiAgICAgICAgIG1fdmlld1NwZWMtPnJlc2V0Q29udGV4
dEVsZW1lbnQoKTsKLSAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNp
b25DYWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCku
cmVtb3ZlVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWluZXIoKnRoaXMpOwogfQogCiB2b2lkIFNW
R1NWR0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwg
RG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewotICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBvbGREb2N1bWVudC51
bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1
bWVudCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAg
ICBTVkdHcmFwaGljc0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBu
ZXdEb2N1bWVudCk7CiB9CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxl
bWVudD4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYg
c3R5bAogTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdTVkdFbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKIHsKICAgICBpZiAocm9vdFBh
cmVudC5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFRpbWVDb250YWluZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLmFkZFRpbWVDb250YWluZXIoKnRoaXMpOwogICAgICAgICBpZiAoIWRv
Y3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFyZUFuaW1hdGlvbnNQYXVzZWQoKSkKICAg
ICAgICAgICAgIHVucGF1c2VBbmltYXRpb25zKCk7CiAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBOb2Rl
OjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlJiBybwogdm9pZCBTVkdTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWluZXJOb2RlJiByb290UGFyZW50KQogewogICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVk
KCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGlt
ZUNvbnRhaW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVtb3ZlVGltZUNvbnRhaW5lcigqdGhpcyk7CiAgICAgICAgIHBhdXNlQW5pbWF0aW9ucygp
OwogICAgIH0KICAgICBTVkdHcmFwaGljc0VsZW1lbnQ6OnJlbW92ZWRGcm9tKHJvb3RQYXJlbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKaW5kZXggYjA4MzczNjE1MTM3MDY4
MzAxYWUwZmRlYjdlOWM5YTk5MDlmMmE0MS4uNmY5ZDZlM2ZjMWYxMjNmZGZmNzFkZWE1ZGY4YmVh
NDJmMWFiMTJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCkBAIC0xNzIs
NyArMTcyLDcgQEAgdm9pZCBTVkdUUmVmRWxlbWVudDo6ZGV0YWNoVGFyZ2V0KCkKICAgICBTdHJp
bmcgaWQ7CiAgICAgU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyho
cmVmKCksIGRvY3VtZW50KCksICZpZCk7CiAgICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwg
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRp
bmdSZXNvdXJjZShpZCwgKnRoaXMpOwogfQogCiB2b2lkIFNWR1RSZWZFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmJ1aWxkUGVuZGlu
Z1Jlc291cmNlKCkKICAgICAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5n
UmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgQVNTRVJUKGhhc1Bl
bmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCmluZGV4IDc1MTdlOGI4YTYwMTBlNmFhNmQ3ZTQ0
Mzc4OWQ4OWZmODQ2OGRiNDEuLjgwNmFlODc2NTg5ZjM3ZmQ5M2MzMTNjOWUyOGIwYzY2OTc1MjMw
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuY3BwCkBAIC0yNSw2
ICsyNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dFBhdGguaCIKICNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNW
R1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIFNWR1RleHRQYXRoRWxlbWVudDo6
flNWR1RleHRQYXRoRWxlbWVudCgpCiAKIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpjbGVhclJl
c291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVs
ZW1lbnQoKnRoaXMpOwogfQogCiBib29sIFNWR1RleHRQYXRoRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xNTksMTcgKzE2MCwx
NyBAQCB2b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAg
IEVsZW1lbnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklT
dHJpbmcoaHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIGlmICghdGFyZ2V0KSB7CiAgICAg
ICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRp
bmcgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAgICAgaWYgKGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0aGlzLCBpZCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJj
ZShpZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQ
ZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0YXJnZXQtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnBhdGhUYWcpKSB7CiAgICAgICAgIC8vIFJlZ2lzdGVyIHVzIHdp
dGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBvZiBocmVm
RWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRpbmcgbm93
IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRoaXMsIGRv
d25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldCkpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoKnRoaXMsIGRvd25jYXN0
PFNWR1BhdGhFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAKaW5kZXggNWU3MzIzODBjNWQ4MDgzODhmMzhiYThjMzAxYTJlZTljZTk5
ODMzYS4uZGRmNjU2YzI1MWU4ZTNkMjBiZmQ0OTVjNGJjM2YxMTA5MDcwYWE2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgU1ZHVXNl
RWxlbWVudDo6dXBkYXRlU2hhZG93VHJlZSgpCiAgICAgU3RyaW5nIHRhcmdldElEOwogICAgIGF1
dG8qIHRhcmdldCA9IGZpbmRUYXJnZXQoJnRhcmdldElEKTsKICAgICBpZiAoIXRhcmdldCkgewot
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3Vy
Y2UodGFyZ2V0SUQsIHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UodGFyZ2V0SUQsICp0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVt
ZW50LmNwcAppbmRleCA4NjJkNjhhYjRkNTI3MDM4YTQ3YzM1MjE3OTUzYTg5YTg1M2E3OGY0Li42
ZTg1ODNiYmE0Y2JjM2IzMGZjYzg2MTNkY2QyMzVkN2IyNTUyNjRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMTU3LDcgKzE1Nyw3
IEBAIFNWR1NNSUxFbGVtZW50Ojp+U1ZHU01JTEVsZW1lbnQoKQogCiB2b2lkIFNWR1NNSUxFbGVt
ZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7
CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVm
ZXJlbmNlc0ZvckVsZW1lbnQoKnRoaXMpOwogfQogCiB2b2lkIFNWR1NNSUxFbGVtZW50OjpjbGVh
clRhcmdldCgpCkBAIC0xOTIsMTcgKzE5MiwxNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpidWls
ZFBlbmRpbmdSZXNvdXJjZSgpCiAKICAgICBpZiAoIXN2Z1RhcmdldCkgewogICAgICAgICAvLyBE
byBub3QgcmVnaXN0ZXIgYXMgcGVuZGluZyBpZiB3ZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHRoaXMg
cmVzb3VyY2UuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5p
c1BlbmRpbmdSZXNvdXJjZSh0aGlzLCBpZCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5pc1BlbmRpbmdSZXNvdXJjZSgqdGhpcywgaWQpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHRo
aXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVu
ZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jl
c291cmNlcygpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJlZ2lzdGVy
IHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55IGNoYW5nZSBv
ZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0L3JlcGFpbnRp
bmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KHRo
aXMsIHN2Z1RhcmdldCk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgKnN2Z1RhcmdldCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggOWY4YzI0YTIyOTI5ZTFj
YzkxYWQzZmIzYThlNjI4ZWQzMTgzNmJmZS4uYzUwMTM0NjFkNGIxMzIwMTg0ODJlZDc1YzRiYzkx
OWFmYjA0MDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTM3MCw3
ICsxMzcwLDcgQEAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IEludGVybmFsczo6bWFya2VyQ291bnRG
b3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWEKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRp
dG9yKCkudXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpOwotICAgIHJldHVybiBub2RlLmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoJm5vZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7
CisgICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBt
YXJrZXJUeXBlcykuc2l6ZSgpOwogfQogCiBFeGNlcHRpb25PcjxSZW5kZXJlZERvY3VtZW50TWFy
a2VyKj4gSW50ZXJuYWxzOjptYXJrZXJBdChOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmtl
clR5cGUsIHVuc2lnbmVkIGluZGV4KQpAQCAtMTM4Myw3ICsxMzgzLDcgQEAgRXhjZXB0aW9uT3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IEludGVybmFsczo6bWFya2VyQXQoTm9kZSYgbm9kZSwg
Y29uc3QgU3RyaW4KIAogICAgIG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRh
dGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Io
Jm5vZGUsIG1hcmtlclR5cGVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSBub2RlLmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSwgbWFy
a2VyVHlwZXMpOwogICAgIGlmIChtYXJrZXJzLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIG1hcmtlcnNbaW5kZXhdOwpAQCAtMTQzOSw3ICsxNDM5
LDcgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6OmR1bXBNYXJrZXJSZWN0cyhjb25z
dCBTdHJpbmcmIG1hcmtlclR5cGVTdHJpbmcpCiB2b2lkIEludGVybmFsczo6YWRkVGV4dE1hdGNo
TWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKIHsKICAgICByYW5nZS5v
d25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0g
ICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIoJnJh
bmdlLCBpc0FjdGl2ZSk7CisgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRU
ZXh0TWF0Y2hNYXJrZXIocmFuZ2UsIGlzQWN0aXZlKTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxzOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykK
QEAgLTI2MTUsNDIgKzI2MTUsNiBAQCB2b2lkIEludGVybmFsczo6c2V0VG9wQ29udGVudEluc2V0
KGZsb2F0IGNvbnRlbnRJbnNldCkKICAgICBkb2N1bWVudC0+cGFnZSgpLT5zZXRUb3BDb250ZW50
SW5zZXQoY29udGVudEluc2V0KTsKIH0KIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLQot
dm9pZCBJbnRlcm5hbHM6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53
ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0KLXZvaWQg
SW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0g
ICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXRE
aWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKLX0KLQotdm9pZCBJbnRlcm5h
bHM6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkK
LXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAo
IWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndlYmtpdFdpbGxFeGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi12b2lkIEludGVybmFsczo6d2Vi
a2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoJmVsZW1lbnQpOwotfQotCi0jZW5kaWYKLQogdm9pZCBJbnRlcm5hbHM6OnNl
dEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiB7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaAppbmRleCAyYjgxNDYwNGRjNWVlYzdiMzhlNzk0NjMzMDAzMjg3NWJk
YWVkZjAyLi5kYTI3NzRlMGRlNjczM2I2ZjAxZjhiNGRhMmExYjZkMGQ0NzFkOGQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTM1NiwxMyArMzU2LDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOwogCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCYpOwotICAgIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVt
ZW50Jik7Ci0gICAgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1l
bnQmKTsKLSAgICB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50
Jik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfVEVTVFNVUFBPUlRfRVhQT1JUIHZvaWQgc2V0QXBw
bGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyk7CiAKICAgICB2b2lk
IHJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3Qg
U3RyaW5nJiBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGU4
N2E3NGM1OGFjNWMyYzZmMWY5OGIxZWM4YmVmYWU0MTExOTEyMWQuLmM4MzAwOTAyM2NhY2FhNTE5
YTFmNDAxMWI4OTA5OTJhNmZhMmI3MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKQEAgLTMzMCwxMSArMzMwLDYgQEAgZW51bSBFdmVudFRocm90dGxpbmdCZWhhdmlvciB7CiAK
ICAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldCh1bnJlc3RyaWN0ZWQgZmxvYXQgY29udGVudElu
c2V0KTsKIAotICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXRXaWxs
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwotICAgIFtDb25kaXRp
b25hbD1GVUxMU0NSRUVOX0FQSV0gdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2
b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsK
LSAgICBbQ29uZGl0aW9uYWw9RlVMTFNDUkVFTl9BUEldIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7Ci0KICAgICB2b2lkIHNldEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwogCiAgICAgdm9p
ZCByZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KERPTVN0
cmluZyBzY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmluZGV4IDgyOTAzMTQwNWRi
YjdmN2ViNDEzOWE0N2YyMDViZTZkNjdjNGRhMGEuLmJiNGExODVmZDMwNzQzMDE0YzVjODk5NDhk
YjNlMDRjNDY0YjRhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTkxLDcgKzkx
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFdvcmtlcj4+IFdvcmtlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIEpTQzo6UnUKICAgICB3b3JrZXItPm1fc2hvdWxkQnlwYXNz
TWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5ID0gc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29u
dGVudFNlY3VyaXR5UG9saWN5OwogCiAgICAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90
IGV4aXN0IHdoaWxlIGxvYWRpbmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBv
YmplY3QgaXMgbm90IGNvbGxlY3RlZCwgbm9yIGFyZSBpdHMgZXZlbnQgbGlzdGVuZXJzLgotICAg
IHdvcmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5wdHIoKSk7CisgICAgd29ya2VyLT5z
ZXRQZW5kaW5nQWN0aXZpdHkod29ya2VyLmdldCgpKTsKIAogICAgIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dvcmtlcnMuaHRtbCNvZmZpY2lhbC1tb21lbnQtb2Yt
Y3JlYXRpb24KICAgICB3b3JrZXItPm1fd29ya2VyQ3JlYXRpb25UaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVk
KCkKICAgICB9CiAgICAgbV9zY3JpcHRMb2FkZXIgPSBudWxscHRyOwogCi0gICAgdW5zZXRQZW5k
aW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAppbmRleCA5YTRmZGI3ZDMxMzRmMGFhMTcyZGE1MDYwZjU5ZmVmZDQ0OGJmMzU0Li5hZDI3NWI2
OGE1NDUyZWJkMDA4MzcxMzg0ZmE5Yzk0ZjJkYTE0YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKQEAgLTE5MCw5ICsxOTAsOSBAQCBFeGNlcHRpb25PcjxEb2N1bWVudCo+
IFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCgpCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9j
dW1lbnQgPSBudWxscHRyOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSFRN
TCkKLSAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNy
ZWF0ZSgwLCBtX3VybCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gSFRN
TERvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwgbV91cmwpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50OjpjcmVhdGUoMCwg
bV91cmwpOworICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50
OjpjcmVhdGUobnVsbHB0ciwgbV91cmwpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNldCBMYXN0
LU1vZGlmaWVkLgogICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50LT5zZXRDb250ZW50KG1f
cmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAg
IG1fcmVzcG9uc2VEb2N1bWVudC0+c2V0Q29udGV4dERvY3VtZW50KGRvd25jYXN0PERvY3VtZW50
Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSk7CkBAIC00OTAsNyArNDkwLDcgQEAgc3RkOjpv
cHRpb25hbDxFeGNlcHRpb25Pcjx2b2lkPj4gWE1MSHR0cFJlcXVlc3Q6OnByZXBhcmVUb1NlbmQo
KQogICAgIGlmICghY29udGV4dC5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQ
b2xpY3koKSAmJiAhY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0
VG9Tb3VyY2UobV91cmwpKSB7CiAgICAgICAgIGlmICghbV9hc3luYykKICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb25Pcjx2b2lkPiB7IEV4Y2VwdGlvbiB7IE5ldHdvcmtFcnJvciB9IH07Ci0g
ICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKICAgICAgICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOwogICAgICAgICBtX25l
dHdvcmtFcnJvclRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uT3I8dm9pZD4geyB9OwpAQCAtNzU5LDcgKzc1OSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFhN
TEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KCkKICAgICAgICAgLy8gYSByZXF1ZXN0IGlzIGlu
IHByb2dyZXNzIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0ZW5lcnMgYWxpdmUsCiAg
ICAgICAgIC8vIGFuZCB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBKYXZhU2NyaXB0IHdyYXBw
ZXIuCiAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICAgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgcmVxdWVzdC5zZXREb21haW5Gb3JDYWNoZVBhcnRpdGlvbihzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnRvcE9yaWdpbigpLmRvbWFpbkZvckNhY2hlUGFydGl0aW9uKCkp
OwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMb2FkWEhSU3luY2hyb25v
dXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwpAQCAtODkzLDcgKzg5Myw3IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTk1CiAgICAgdm0uaGVhcC5kZXByZWNhdGVkUmVw
b3J0RXh0cmFNZW1vcnkobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKIAotICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlz
KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTWltZVR5
cGUoY29uc3QgU3RyaW5nJiBvdmVycmlkZSkKQEAgLTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgLy8g
SW4gY2FzZSBkaWRGYWlsIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IG9uIGFuIGFzeW5jaHJvbm91
cyBYSFIgY2FsbCwgbGV0J3MgZGlzcGF0Y2ggbmV0d29yayBlcnJvciBhc3luY2hyb25vdXNseQog
ICAgIGlmIChtX2FzeW5jICYmIG1fc2VuZEZsYWcgJiYgIW1fbG9hZGVyKSB7CiAgICAgICAgIG1f
c2VuZEZsYWcgPSBmYWxzZTsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAg
ICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5z
dG9wKCk7CiAgICAgICAgIG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKaW5kZXggOGM5MjdiZmYzZWVi
NjkwODFmMDQ3YmYwZjI2ZTZkOGVlZTkyYzVjZC4uZmNkYzAyYzUyMTRkMzk1MGJmYmQ0Y2NmZjcz
ZDE4NWIyNjY1NTUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKQEAgLTMwLDcgKzMwLDYg
QEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlhNTE5TTmFtZXMuaCIKQEAgLTIwMSw3ICsyMDAsNyBA
QCBpbmxpbmUgYm9vbCBub2RlTWF0Y2hlc0Jhc2ljVGVzdChOb2RlJiBub2RlLCBTdGVwOjpBeGlz
IGF4aXMsIGNvbnN0IFN0ZXA6Ok5vZGVUZQogICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3RhckF0
b20oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSB8fCBu
YW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKTsKIAotICAgICAgICAgICAgaWYgKGlz
PEhUTUxEb2N1bWVudD4obm9kZS5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYgKG5vZGUu
ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhU
TUxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBQYXRocyB3aXRob3V0
IG5hbWVzcGFjZXMgc2hvdWxkIG1hdGNoIEhUTUwgZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMg
ZGVzcGl0ZSB0aG9zZSBoYXZpbmcgYW4gWEhUTUwgbmFtZXNwYWNlLiBOYW1lcyBhcmUgY29tcGFy
ZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSkubG9jYWxOYW1lKCks
IG5hbWUpICYmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUu
bmFtZXNwYWNlVVJJKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCmluZGV4IGE5
MGI5NjUwMDRjNDhmYjQ5MDRlYjdmYzJiZTFiYzYzM2E3MjA2YTUuLmVhMGFjNDAyNTg0NGNiMjE0
YjRlY2VkMjA5ZWFjOTM2YjgyNzAwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
U0xUUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5j
cHAKQEAgLTIxLDExICsyMSwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJYU0xUUHJvY2Vzc29yLmgiCiAKICNpZiBFTkFCTEUoWFNMVCkKIAotI2luY2x1ZGUgIlhT
TFRQcm9jZXNzb3IuaCIKLQogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKQEAgLTMzLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpblBvbGljeS5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTg3LDcgKzg1LDcgQEAgUmVmPERv
Y3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3Ry
aW5nJiBzb3VyY2VTdHJpbmcKIAogICAgICAgICBpZiAoRG9jdW1lbnQqIG9sZERvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0VHJhbnNmb3JtU291
cmNlRG9jdW1lbnQob2xkRG9jdW1lbnQpOwotICAgICAgICAgICAgcmVzdWx0LT50YWtlRE9NV2lu
ZG93RnJvbShvbGREb2N1bWVudCk7CisgICAgICAgICAgICByZXN1bHQtPnRha2VET01XaW5kb3dG
cm9tKCpvbGREb2N1bWVudCk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFNlY3VyaXR5T3JpZ2lu
UG9saWN5KG9sZERvY3VtZW50LT5zZWN1cml0eU9yaWdpblBvbGljeSgpKTsKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0Q29va2llVVJMKG9sZERvY3VtZW50LT5jb29raWVVUkwoKSk7CiAgICAgICAg
ICAgICByZXN1bHQtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKG9sZERvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9G
dWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcAppbmRleCAzNjY5YzJkYTk4
NjBiM2FlYTYwMmM4ZGJmN2QwZmJjOTg3Nzk4Y2RjLi41YWIyNjIwYTc4MTExNzQ3NzBkNzFiNjM1
N2Q4ZDJkOTM5MWE5ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVs
bFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwCkBAIC0xMDgsNyArMTA4
LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQpCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3
aWxsRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9l
bGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVy
RnVsbFNjcmVlbigqbV9lbGVtZW50KTsKICAgICBtX3BhZ2UtPmhpZGVQYWdlQmFubmVycygpOwog
ICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKICAgICBtX3BhZ2UtPmZv
cmNlUmVwYWludFdpdGhvdXRDYWxsYmFjaygpOwpAQCAtMTE5LDE0ICsxMTksMTQgQEAgdm9pZCBX
ZWJGdWxsU2NyZWVuTWFuYWdlcjo6d2lsbEVudGVyRnVsbFNjcmVlbigpCiB2b2lkIFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1l
bnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5G
b3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndl
YmtpdERpZEVudGVyRnVsbFNjcmVlbigpOwogfQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
Ojp3aWxsRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIG1f
ZmluYWxGcmFtZSA9IHNjcmVlblJlY3RPZkNvbnRlbnRzKG1fZWxlbWVudC5nZXQoKSk7Ci0gICAg
bV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
bV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4
aXRGdWxsU2NyZWVuKCk7CiAgICAgbV9wYWdlLT5zaG93UGFnZUJhbm5lcnMoKTsKICAgICBtX3Bh
Z2UtPmluamVjdGVkQnVuZGxlRnVsbFNjcmVlbkNsaWVudCgpLmJlZ2FuRXhpdEZ1bGxTY3JlZW4o
bV9wYWdlLmdldCgpLCBtX2ZpbmFsRnJhbWUsIG1faW5pdGlhbEZyYW1lKTsKIH0KQEAgLTEzNCw3
ICsxMzQsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRXhpdEZ1bGxTY3JlZW4o
KQogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxTY3JlZW4oKQogewogICAg
IEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRF
eGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2VsZW1lbnQt
PmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJGdWxs
U2NyZWVuTWFuYWdlcjo6c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihib29sIGFuaW1hdGluZykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01l
ZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKaW5kZXggZTlm
ZjI0ZjgyZGM1ZDE5ZTU4Y2E5NmRjMTU0NmRkZGIzN2E0M2ZhMy4uOTQ1MDEzZDY4ODczOTdlMmVi
ZjcxYjE5OWE5NWQ1MjljMzUwNTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI6OnN0YXJ0VXNlck1lZGlhUmVxdWVzdChVc2VyTWVkaWFSZXF1
ZXN0JgogCiAgICAgYXV0byYgcGVuZGluZ1JlcXVlc3RzID0gbV9ibG9ja2VkUmVxdWVzdHMuYWRk
KGRvY3VtZW50LCBWZWN0b3I8UmVmUHRyPFVzZXJNZWRpYVJlcXVlc3Q+PigpKS5pdGVyYXRvci0+
dmFsdWU7CiAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3Vt
ZW50LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LT5h
ZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIHBlbmRpbmdSZXF1ZXN0cy5hcHBl
bmQoJnJlcXVlc3QpOwogfQogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI6Om1lZGlhQ2FuU3RhcnQoRG9jdW1lbnQmIGRvY3VtZW50KQog
ICAgIHdoaWxlICghcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIWRv
Y3VtZW50LnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgpKSB7CiAgICAgICAgICAgICBtX2Jsb2NrZWRS
ZXF1ZXN0cy5hZGQoJmRvY3VtZW50LCBwZW5kaW5nUmVxdWVzdHMpOwotICAgICAgICAgICAgZG9j
dW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1l
bnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlTWVkaWFSZXF1ZXN0RnJvbU1hcHMoVXNlck1lZGlhUmVxdQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXF1ZXN0LmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIHJlcXVlc3QuZG9jdW1lbnQoKS0+cmVtb3Zl
TWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV9ibG9ja2VkUmVxdWVzdHMuYWRkKHJlcXVlc3QuZG9jdW1lbnQoKSwgcGVuZGluZ1JlcXVlc3Rz
KTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCmluZGV4IGVlYTM4ZjA5ODJjN2VkNTExMjU4MzI3OWEyNjg5MDk2MGNk
N2UyN2IuLjhjZGVjMjIxN2ZkYTU4Y2I2YzM4NjQ1ZGRkYmQ1ZWJkN2Q4Y2YyN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0zMTcs
OSArMzE3LDkgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogICAgIEFTU0VSVCghbV9pc0Jl
aW5nRGVzdHJveWVkKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkK
LSAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92ZU1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcih0aGlzKTsKKyAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLnJlbW92
ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAKLSAgICBtX3BsdWdpbkVsZW1lbnQtPmRv
Y3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICBtX3BsdWdpbkVsZW1lbnQt
PmRvY3VtZW50KCkucmVtb3ZlQXVkaW9Qcm9kdWNlcigqdGhpcyk7CiAKICAgICBkZXN0cm95UGx1
Z2luQW5kUmVzZXQoKTsKIApAQCAtNTkwLDEzICs1OTAsMTMgQEAgdm9pZCBQbHVnaW5WaWV3Ojpp
bml0aWFsaXplUGx1Z2luKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkuYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVu
dC0+ZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIG1f
cGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIG1f
cGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKIAogI2lm
IEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCiAgICAgSFRNTFBs
dWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJ
bkltYWdlRWxlbWVudD4oKm1fcGx1Z2luRWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVu
TGlzdGVuZXIubW0KaW5kZXggYWY1YWMyZjI4OWJjMWIxMjA0NjZjNTljMDI3OTA2ZWMxNDgxNjVl
Ny4uNTM3Y2M2NjgwNWQ0OWJlMGVkMGZiNDFmNjA5MDYzNWU2Yjk5NWFmYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVlbkxp
c3RlbmVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YktpdEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQpAQCAtNDUsMjUgKzQ1LDI1IEBAIC0gKGlkKWluaXRX
aXRoRWxlbWVudDooRWxlbWVudCopZWxlbWVudAogLSAodm9pZCl3ZWJraXRXaWxsRW50ZXJGdWxs
U2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQo
KS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Cisg
ICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKl9l
bGVtZW50KTsKIH0KIAogLSAodm9pZCl3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4KIHsKICAgICBp
ZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVy
RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+
ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogLSAodm9pZCl3ZWJr
aXRXaWxsRXhpdEZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAgIF9lbGVt
ZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1l
bnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1
bGxTY3JlZW4oKTsKIH0KIAogLSAodm9pZCl3ZWJraXREaWRFeGl0RnVsbFNjcmVlbgogewogICAg
IGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhp
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQt
PmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXIubW0KaW5kZXggM2YxMDk5NmZjMjZmODY3NjFkODc5MmMwMGE3ZmJmMTJmOGU4ZDdh
OC4uYTIxNmIwYThjZmVhYWYzNTI3ODYzZGM3YmJlODNkZWVhOTFlMWNmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250
cm9sbGVyLm1tCkBAIC0yMzYsNyArMjM2LDcgQEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW46KE5T
U2NyZWVuICopc2NyZWVuCiAKICAgICBfc2F2ZWRTY2FsZSA9IFtfd2ViVmlldyBfdmlld1NjYWxl
RmFjdG9yXTsKICAgICBbX3dlYlZpZXcgX3NjYWxlV2ViVmlldzoxIGF0T3JpZ2luOk5TTWFrZVBv
aW50KDAsIDApXTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbigqX2VsZW1lbnQpOwogICAgIFtzZWxmIF9kb2N1bWVudF0t
PnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CiAgICAgW3NlbGYgX2RvY3VtZW50XS0+dXBk
YXRlTGF5b3V0KCk7CiAKQEAgLTI2OSw3ICsyNjksNyBAQCAtICh2b2lkKWZpbmlzaGVkRW50ZXJG
dWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBsZXRlZAogICAgICAgICAvLyBTY3JlZW4gdXBk
YXRlcyB0byBiZSByZS1lbmFibGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBibG9jawogICAgICAgICBO
U0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAgICAgICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFu
aW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgICAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJr
aXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAg
W3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiAgICAgICAgIAog
ICAgICAgICBOU1JlY3Qgd2luZG93Qm91bmRzID0gW1tzZWxmIHdpbmRvd10gZnJhbWVdOwogICAg
ICAgICB3aW5kb3dCb3VuZHMub3JpZ2luID0gTlNaZXJvUG9pbnQ7CkBAIC0zMTMsNyArMzEzLDcg
QEAgLSAodm9pZClleGl0RnVsbFNjcmVlbgogCiAgICAgX2ZpbmFsRnJhbWUgPSBzY3JlZW5SZWN0
T2ZDb250ZW50cyhfZWxlbWVudC5nZXQoKSk7CiAKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJr
aXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2Vs
ZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBbc2VsZiBfZG9j
dW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogCiAgICAgaWYgKF9pc0VudGVy
aW5nRnVsbFNjcmVlbikKQEAgLTM1Myw3ICszNTMsNyBAQCAtICh2b2lkKWZpbmlzaGVkRXhpdEZ1
bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCiAgICAgTlNEaXNhYmxlU2NyZWVuVXBk
YXRlcygpOwogCiAgICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihm
YWxzZSk7Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRF
eGl0RnVsbFNjcmVlbigpOwogICAgIFtfd2ViVmlldyBfc2NhbGVXZWJWaWV3Ol9zYXZlZFNjYWxl
IGF0T3JpZ2luOk5TTWFrZVBvaW50KDAsIDApXTsKIAogICAgIE5TUmVzcG9uZGVyICpmaXJzdFJl
c3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDQ2MGU3OGU2ZTFmNzg0
ODYwZmE3ZGVlNDVmYzEyMDU1ZmE2YTFhOTEuLjg1ZjcyMDEzZWRkNzg0MzFkMWQxNTg1MWMwMDZk
OTFhNWRjYTFjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnRPckFk
ZFRvVW5zdGFydGVkTGlzdCgpCiAgICAgLy8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2Fk
ZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRhIGJlZm9yZSB3ZSd2ZQogICAgIC8vIHN0YXJ0ZWQg
dGhlIHBsdWctaW4uCiAgICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+
cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBtX3BhcmVudEZy
YW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAg
ICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CkBAIC0yOTEsNyArMjkxLDcgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogICAgICAgICBp
bnN0YW5jZU1hcCgpLnJlbW92ZShtX2luc3RhbmNlKTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1Rv
U3RhcnQpCi0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+
cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAogICAgIHN0b3AoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0YWFhMDkyOGM4MmIyNTlmNDEzNWM5MmZl
MWY3MTBmOTVjMTJiOWMyLi5iZWU2NDA5ZjE2MDlmN2NhMmEyMjhjMmVhZjNiOTkyNTYwMDRhNjA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNzUwNiwxMyArNzUwNiwxMyBA
QCB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRTZXRQYXJlbnRXaW5kb3coSFdORCBob3N0
V2luZG93KQogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEVudGVyRnVsbFNjcmVl
bigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQo
bV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9j
dW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKCptX2Z1bGxTY3JlZW5FbGVtZW50KTsK
IH0KIAogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRW50ZXJGdWxsU2NyZWVuKCkK
IHsKICAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuRWxl
bWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZnVs
bFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50
KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6ZnVsbFNj
cmVlbkNsaWVudFdpbGxFeGl0RnVsbFNjcmVlbigpCkBAIC03NTI0LDcgKzc1MjQsNyBAQCB2b2lk
IFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3JlZW4oKQogdm9pZCBXZWJW
aWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVCht
X2Z1bGxTY3JlZW5FbGVtZW50KTsKLSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50Lmdl
dCgpKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEV4aXRG
dWxsU2NyZWVuKCk7CiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IG51bGxwdHI7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320401</attachid>
            <date>2017-09-10 13:29:01 -0700</date>
            <delta_ts>2019-01-19 14:05:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20170910132859.patch</filename>
            <type>text/plain</type>
            <size>274700</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZjZTViZjE2ZDE5Yzlk
MDgxM2FkODE0YTc4MjRhZmVmZmFlZGUyMS4uZjUyY2I1YmE5MTBlNmU5MWQyMTY5NTgyMWYxZTk4
NWUyYTg4YmM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDE3LTA5LTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAxNy0wOS0wNyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGRvdWJsZSByZXNv
bHZlIGFzc2VydGlvbiBpbiBGb250RmFjZVNldCBzZWVuIHdoaWxlIHJ1bm5pbmcgdGVzdHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTcyODJiODkyMGEwZDdlNDlkYTg5OGYzMmZjNjBjMjQ2ZTk4MWJiOS4uZDcyOGJj
NzdkYmE1ZGI3ODEzMmQwNTE5OTI4MzcwM2MzNmQ2N2NlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MCBAQAorMjAxNy0wOS0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgVXNlIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gcG9pbnRlcnMgZm9yIHJlZ2lzdGVyL3VucmVn
aXN0ZXIgZnVuY3Rpb25zLCBhbmQgbW9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MDI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKIDIwMTctMDktMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBXS1dlYnNpdGVEYXRh
U3RvcmUgdW50aWwgaXRzIGFjdHVhbGx5IG5lZWRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwppbmRleCA0NjQ5MjRiMjQ2YTZiZDY1YTJkNTIxMWQ2MjE5NmRjMjQxMWJjNmI1Li5iNTVjZWFl
YmUxODJjOTEwZGI2MDZkNDVkMjY2Y2YxYjE4YzA5OTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMTctMDktMDMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50ZXJz
IGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDE3LTA5LTA5ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY29tcHV0YXRpb25zIG9m
IEV4ZWNTdGF0ZTo6dm0oKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGVwYXkvQXBwbGVQYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvQXBwbGVQYXlTZXNzaW9uLmNwcAppbmRleCAzODVkOTRkOWI5MjQ5NzI4NTU1MmI5ZWU3ZTY2
NGQ4MTY2MjFjZWI4Li43MjU3MTNkNTQzZWJmNTNmYTAzN2VkZWYwNTgwZWQyYTllYzFkM2Y2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Np
b24uY3BwCkBAIC02OTksNyArNjk5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNz
aW9uOjpiZWdpbigpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAotICAgIHNldFBl
bmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBB
cHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRBdXRob3JpemF0
aW9uUgogICAgIH0KIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMTk2LDcgKzExOTYsNyBAQCBib29sIEFwcGxlUGF5
U2Vzc2lvbjo6aXNGaW5hbFN0YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNzaW9uOjpkaWRS
ZWFjaEZpbmFsU3RhdGUoKQogewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7Ci0gICAgdW5z
ZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hl
U3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hlU3RvcmFnZS5j
cHAKaW5kZXggNDE1MzUxOGM3MmU4YTQ2ZmQ4MjY3MWY4MTJlOWU3Y2E4MDU2MjExYS4uZTNkYWRk
MTBkMTExMTY3YzE1NTNkNWI4YWY2NmU4NWIyNGI5NGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQg
Q2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZvLCBDYWNoZVF1
ZXJ5T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0
eSgqdGhpcyk7CiAgICAgICAgIHN0YXJ0U2VxdWVudGlhbE1hdGNoKGNvcHlDYWNoZXMobV9jYWNo
ZXMpLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgcHJvbWlzZSA9IFdU
Rk1vdmUocHJvbWlzZSldKEV4Y2VwdGlvbk9yPEZldGNoUmVzcG9uc2UqPiYmIHJlc3VsdCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgQ2Fj
aGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZvLCBDYWNoZVF1ZXJ5
T3B0aW9ucyYmIG9wdGlvCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxGZXRjaFJlc3BvbnNlPj4oKnJlc3VsdC5y
ZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIENhY2hlU3Rv
cmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8RXhj
ZXB0aW9uPiYmKQogICAgIGlmIChvcmlnaW4uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRo
aXMpOwogICAgIG1fY29ubmVjdGlvbi0+cmV0cmlldmVDYWNoZXMob3JpZ2luLCBtX3VwZGF0ZUNv
dW50ZXIsIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShDYWNoZUluZm9zT3JF
cnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9pc1N0b3BwZWQpIHsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKQEAgLTE2MSw3ICsxNjEsNyBAQCB2
b2lkIENhY2hlU3RvcmFnZTo6cmV0cmlldmVDYWNoZXMoV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6
b3B0aW9uYWw8RXhjZXB0aW9uPiYmKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FsbGJh
Y2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0pOwog
fQogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDYWNoZVN0b3JhZ2U6Om9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBET01Qcm9taXNlRGVmZXJyZWQ8SURMSW50ZXJmYWNlPERPTUMKICAgICAgICAg
U3RyaW5nIG9yaWdpbiA9IHRoaXMtPm9yaWdpbigpOwogICAgICAgICBBU1NFUlQoIW9yaWdpbi5p
c051bGwoKSk7CiAKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICBz
ZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX2Nvbm5lY3Rpb24tPm9wZW4ob3Jp
Z2luLCBuYW1lLCBbdGhpcywgbmFtZSwgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGNvbnN0
IENhY2hlSWRlbnRpZmllck9yRXJyb3ImIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBp
ZiAoIW1faXNTdG9wcGVkKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUo
KSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6b3Blbihjb25zdCBTdHJp
bmcmIG5hbWUsIERPTVByb21pc2VEZWZlcnJlZDxJRExJbnRlcmZhY2U8RE9NQwogICAgICAgICAg
ICAgICAgICAgICBtX2NhY2hlcy5hcHBlbmQoV1RGTW92ZShjYWNoZSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICB9
KTsKICAgICB9KTsKIH0KQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIENhY2hlU3RvcmFnZTo6cmVt
b3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYg
cAogICAgICAgICBTdHJpbmcgb3JpZ2luID0gdGhpcy0+b3JpZ2luKCk7CiAgICAgICAgIEFTU0VS
VCghb3JpZ2luLmlzTnVsbCgpKTsKIAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIG1fY29ubmVjdGlv
bi0+cmVtb3ZlKG1fY2FjaGVzW3Bvc2l0aW9uXS0+aWRlbnRpZmllcigpLCBbdGhpcywgbmFtZSwg
cHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGNvbnN0IENhY2hlSWRlbnRpZmllck9yRXJyb3Im
IHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKQEAgLTIzOCw3ICsyMzgsNyBAQCB2
b2lkIENhY2hlU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgRE9NUHJvbWlzZURl
ZmVycmVkPElETEJvb2xlYW4+JiYgcAogICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29s
dmUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAg
dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBlbmRpbmdBY3Rp
dml0eSgqdGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICBtX2NhY2hlcy5yZW1vdmUocG9zaXRp
b24pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9E
T01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApp
bmRleCA1YTA4NGUyNTIwNTVjYzJmZTcxY2NlNDc4ZTA4NDEwZDE0ZDk2ZTFhLi5kMTQwNDNjMWM5
NTFjNDFiMDkwZDI3NTgwZTEyY2E4Y2RkYmQzYzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtMzM1LDE5ICszMzUsMTkgQEAgdm9pZCBET01DYWNoZTo6
cHV0KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERP
TVByb21pc2UKICAgICB9CiAKICAgICBpZiAocmVzcG9uc2UtPmhhc1JlYWRhYmxlU3RyZWFtQm9k
eSgpKSB7Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAgICAgcmVzcG9uc2UtPmNvbnN1bWVCb2R5RnJvbVJl
YWRhYmxlU3RyZWFtKFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcmVxdWVzdCA9IFdURk1v
dmUocmVxdWVzdCksIHJlc3BvbnNlID0gV1RGTW92ZShyZXNwb25zZSksIHRoaXNdKEV4Y2VwdGlv
bk9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICBwdXRXaXRoUmVzcG9uc2VEYXRhKFdURk1vdmUocHJvbWlzZSksIFdURk1vdmUocmVxdWVzdCks
IFdURk1vdmUocmVzcG9uc2UpLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgICAgICAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgq
dGhpcyk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHJl
c3BvbnNlLT5pc0xvYWRpbmcoKSkgewotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHJlc3BvbnNlLT5j
b25zdW1lQm9keVdoZW5Mb2FkZWQoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCByZXF1ZXN0
ID0gV1RGTW92ZShyZXF1ZXN0KSwgcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKSwgdGhpc10o
RXhjZXB0aW9uT3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4+JiYgcmVzdWx0KSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIHB1dFdpdGhSZXNwb25zZURhdGEoV1RGTW92ZShwcm9taXNlKSwgV1RGTW92ZShy
ZXF1ZXN0KSwgV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgICAgICAg
ICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00
MjAsNyArNDIwLDcgQEAgdm9pZCBET01DYWNoZTo6a2V5cyhzdGQ6Om9wdGlvbmFsPFJlcXVlc3RJ
bmZvPiYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW8KIAogdm9pZCBET01DYWNoZTo6
cmV0cmlldmVSZWNvcmRzKGNvbnN0IFVSTCYgdXJsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoc3RkOjpv
cHRpb25hbDxFeGNlcHRpb24+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIHNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgVVJMIHJl
dHJpZXZlVVJMID0gdXJsOwogICAgIGlmIChyZXRyaWV2ZVVSTC5oYXNRdWVyeSgpKQpAQCAtNDM4
LDcgKzQzOCw3IEBAIHZvaWQgRE9NQ2FjaGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVy
bCwgV1RGOjpGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8CiAgICAgICAgICAgICAgICAgdXBk
YXRlUmVjb3JkcyhXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSk7CiAgICAgICAgICAgICBjYWxsYmFj
ayhzdGQ6Om51bGxvcHQpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfSk7CiB9
CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQCBWZWN0b3I8Q2FjaGVTdG9yYWdlUmVjb3JkPiBET01DYWNo
ZTo6cXVlcnlDYWNoZVdpdGhUYXJnZXRTdG9yYWdlKGNvbnN0IEZldGNoUmVxdQogCiB2b2lkIERP
TUNhY2hlOjpiYXRjaERlbGV0ZU9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3Qs
IENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4Y2VwdGlv
bk9yPGJvb2w+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvbi0+YmF0
Y2hEZWxldGVPcGVyYXRpb24obV9pZGVudGlmaWVyLCByZXF1ZXN0LmludGVybmFsUmVxdWVzdCgp
LCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
UmVjb3JkSWRlbnRpZmllcnNPckVycm9yJiYgcmVzdWx0KSB7CiAgICAgICAgIGlmICghbV9pc1N0
b3BwZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpCkBAIC00ODMsNyAr
NDgzLDcgQEAgdm9pZCBET01DYWNoZTo6YmF0Y2hEZWxldGVPcGVyYXRpb24oY29uc3QgRmV0Y2hS
ZXF1ZXN0JiByZXF1ZXN0LCBDYWNoZVF1ZXJ5T3B0aW8KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBjYWxsYmFjayghcmVzdWx0LnZhbHVlKCkuaXNFbXB0eSgpKTsKICAgICAgICAg
fQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5k
aW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0pOwogfQogCkBAIC01MTYsNyArNTE2LDcgQEAgdm9p
ZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0
LCBGZXRjaFJlc3BvbnNlJiByZXMKIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24o
VmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhjZXB0aW9uT3I8
dm9pZD4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwor
ICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uLT5iYXRjaFB1
dE9wZXJhdGlvbihtX2lkZW50aWZpZXIsIFdURk1vdmUocmVjb3JkcyksIFt0aGlzLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShSZWNvcmRJZGVudGlmaWVyc09yRXJyb3ImJiByZXN1bHQp
IHsKICAgICAgICAgaWYgKCFtX2lzU3RvcHBlZCkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzVmFsdWUoKSkKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9w
ZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFdURjo6RnVuY3Rpb248dm9pZChFeAog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxiYWNrKHsgfSk7CiAgICAgICAg
IH0KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcAppbmRleCA4YmViNWM1ZThjMDU4ZjllYjky
MTE0ZjY2NmZmNjkwNzE4YjM2NjgzLi5lNDljZWJkMTliZTY4MjJiYmM5ZDZmNzk1ZTkwNmI3ZTZi
MDgwZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9k
eU93bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93
bmVyLmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmxvYWRCbG9i
KGNvbnN0IEJsb2ImIGJsb2IsIEZldGNoQm9keUNvbnN1bWVyKiBjb25zdW1lcikKICAgICAgICAg
bV9ibG9iTG9hZGVyID0gc3RkOjpudWxsb3B0OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogfQogCiB2b2lkIEZldGNoQm9keU93bmVyOjpmaW5pc2hCbG9iTG9hZGluZygpCkBAIC0yMjMs
NyArMjIzLDcgQEAgdm9pZCBGZXRjaEJvZHlPd25lcjo6ZmluaXNoQmxvYkxvYWRpbmcoKQogICAg
IEFTU0VSVChtX2Jsb2JMb2FkZXIpOwogCiAgICAgbV9ibG9iTG9hZGVyID0gc3RkOjpudWxsb3B0
OwotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlPd25lcjo6YmxvYkxvYWRpbmdTdWNjZWVk
ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlTb3VyY2Uu
Y3BwCmluZGV4IDIzN2E0NjA5N2Y2OWZiN2I3ZGM1ZDM2ODA5MjEwYjIyMjBlYzA5OGEuLmRjNDdi
MWU3YzRmMjFmYTRlODYzNTllNzY1NDFkOTc2OWI1MzI5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKQEAgLTQwLDEyICs0MCwxMiBA
QCBGZXRjaEJvZHlTb3VyY2U6OkZldGNoQm9keVNvdXJjZShGZXRjaEJvZHlPd25lciYgYm9keU93
bmVyKQogCiB2b2lkIEZldGNoQm9keVNvdXJjZTo6c2V0QWN0aXZlKCkKIHsKLSAgICBtX2JvZHlP
d25lci5zZXRQZW5kaW5nQWN0aXZpdHkoJm1fYm9keU93bmVyKTsKKyAgICBtX2JvZHlPd25lci5z
ZXRQZW5kaW5nQWN0aXZpdHkobV9ib2R5T3duZXIpOwogfQogCiB2b2lkIEZldGNoQm9keVNvdXJj
ZTo6c2V0SW5hY3RpdmUoKQogewotICAgIG1fYm9keU93bmVyLnVuc2V0UGVuZGluZ0FjdGl2aXR5
KCZtX2JvZHlPd25lcik7CisgICAgbV9ib2R5T3duZXIudW5zZXRQZW5kaW5nQWN0aXZpdHkobV9i
b2R5T3duZXIpOwogfQogCiB2b2lkIEZldGNoQm9keVNvdXJjZTo6ZG9TdGFydCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAppbmRleCBmNjVjZDJm
MDViYzcwYWFkOGFlOTE1ZmU0MWI0MDZkYzNkZDcwMmIxLi4xYWQzZjJiOTE0YmI0MmJiMTQyNGY2
Mjg2MWU5OTIzZDYxMDQ1ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKQEAgLTIyOSwxMiArMjI5LDEyIEBAIEZldGNoUmVzcG9uc2U6OkJv
ZHlMb2FkZXI6OkJvZHlMb2FkZXIoRmV0Y2hSZXNwb25zZSYgcmVzcG9uc2UsIE5vdGlmaWNhdGlv
bkNhbGxiCiAgICAgOiBtX3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9yZXNwb25zZUNhbGxi
YWNrKFdURk1vdmUocmVzcG9uc2VDYWxsYmFjaykpCiB7Ci0gICAgbV9yZXNwb25zZS5zZXRQZW5k
aW5nQWN0aXZpdHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2
aXR5KG1fcmVzcG9uc2UpOwogfQogCiBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjp+Qm9keUxv
YWRlcigpCiB7Ci0gICAgbV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9yZXNwb25z
ZSk7CisgICAgbV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0K
IAogdm9pZCBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzb3VyY2VSZXNwb25zZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggYzJjZWZjNjli
MDhhZTgwY2E0YjU3M2M5ZjlmM2UxNWRkMjk1MTMzNi4uYjJkZmNkODQ1NTA0N2NhN2UyMmFiZWUz
NjYyNmRjZjUxOGVhNTNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHZvaWQgTWVkaWFT
b3VyY2U6OnNldFByaXZhdGVBbmRPcGVuKFJlZjxNZWRpYVNvdXJjZVByaXZhdGU+JiYgbWVkaWFT
b3VyY2VQcml2YXRlCiAKIHZvaWQgTWVkaWFTb3VyY2U6OmFkZGVkVG9SZWdpc3RyeSgpCiB7Ci0g
ICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogewotICAg
IHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0
aGlzKTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhU291cmNlOjpkdXJhdGlvbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmlu
ZGV4IDc0M2VjZGI1OTUwZTczOWEwNzVkZWEyNTM4ZDcyNTQxZmIwZTEwOGIuLmM4NjRhMDQ3MWQy
NjhjNmVkZTNkNzdmN2QyY2U1ZDY1MzkxNTY3N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAg
TWVkaWFTdHJlYW06On5NZWRpYVN0cmVhbSgpCiAgICAgICAgIHRyYWNrLT5yZW1vdmVPYnNlcnZl
cigqdGhpcyk7CiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkp
IHsKICAgICAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICAg
ICAgZG9jdW1lbnQtPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIH0K
IH0KIApAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgTWVkaWFTdHJlYW06OnN0YXJ0UHJvZHVjaW5n
RGF0YSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1l
ZGlhQ2FuU3RhcnQgPSB0cnVlOwotICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKaW5kZXggMTY4
ODRlMzgyNjY4NGNlNzc4N2Q1ODZhODRmODhmZGM3OTFjMjc4OS4uOGIyNDUyNDliOTM2NmYzODVh
Mzg1OTk4MDkzMWIwNzAwZTAyNjA0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCkBAIC02MSw3ICs2MSw3IEBA
IE1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgUmVmPE1lZGlhU3RyCiAgICAgbV9wcml2YXRlLT5hZGRPYnNlcnZlcigqdGhp
cyk7CiAKICAgICBpZiAoYXV0byBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCi0gICAgICAg
IGRvY3VtZW50LT5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+YWRk
QXVkaW9Qcm9kdWNlcigqdGhpcyk7CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2s6On5NZWRpYVN0cmVh
bVRyYWNrKCkKQEAgLTY5LDcgKzY5LDcgQEAgTWVkaWFTdHJlYW1UcmFjazo6fk1lZGlhU3RyZWFt
VHJhY2soKQogICAgIG1fcHJpdmF0ZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwogCiAgICAgaWYg
KGF1dG8gZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+cmVt
b3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUF1ZGlvUHJv
ZHVjZXIoKnRoaXMpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2s6
OmtpbmQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAppbmRleCBjYzBlOWI1NGQxMDUwODhiZmI0NjEzOTJiMTBm
Mzk2NmQ3ZDMyNjlkLi43NDk1MDlkMmIyMjJhMDMxY2JjNjZiMTkxMjBiZGNmZGNmMzE2ZjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFu
bmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFD
aGFubmVsLmNwcApAQCAtNTgsNyArNTgsNyBAQCBSZWY8UlRDRGF0YUNoYW5uZWw+IFJUQ0RhdGFD
aGFubmVsOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgc3RkOgogICAg
IGF1dG8gY2hhbm5lbCA9IGFkb3B0UmVmKCpuZXcgUlRDRGF0YUNoYW5uZWwoY29udGV4dCwgV1RG
TW92ZShoYW5kbGVyKSwgV1RGTW92ZShsYWJlbCksIFdURk1vdmUob3B0aW9ucykpKTsKICAgICBj
aGFubmVsLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICBjaGFubmVsLT5tX2hhbmRsZXItPnNldENs
aWVudChjaGFubmVsLmdldCgpKTsKLSAgICBjaGFubmVsLT5zZXRQZW5kaW5nQWN0aXZpdHkoY2hh
bm5lbC5wdHIoKSk7CisgICAgY2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5KGNoYW5uZWwuZ2V0
KCkpOwogICAgIHJldHVybiBjaGFubmVsOwogfQogCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBS
VENEYXRhQ2hhbm5lbDo6Y2xvc2UoKQogCiAgICAgbV9oYW5kbGVyLT5jbG9zZSgpOwogICAgIG1f
aGFuZGxlciA9IG51bGxwdHI7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAg
dW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpk
aWRDaGFuZ2VSZWFkeVN0YXRlKFJUQ0RhdGFDaGFubmVsU3RhdGUgbmV3U3RhdGUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCmluZGV4IDkwYjIxZWE2MjNjMTQ3ZTQ1OTEyYjU5ODE1YmRjYTFkN2RkNzBkODkuLjZl
MmZhODczNjM3NmQ1ODFjNDA5ZjI4MzlmNjI4MzgxMDI0MGNhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3Bw
CkBAIC02MiwxMiArNjIsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFBlZXJDb25uZWN0aW9uOwogCiBS
ZWY8UlRDUGVlckNvbm5lY3Rpb24+IFJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBSZWY8UlRDUGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uID0gYWRvcHRSZWYoKm5ldyBSVENQZWVyQ29ubmVjdGlvbihjb250ZXh0KSk7
CisgICAgYXV0byBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpuZXcgUlRDUGVlckNvbm5lY3Rp
b24oY29udGV4dCkpOwogICAgIHBlZXJDb25uZWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAg
ICAvLyBSVENQZWVyQ29ubmVjdGlvbiBtYXkgc2VuZCBldmVudHMgYXQgYWJvdXQgYW55IHRpbWUg
ZHVyaW5nIGl0cyBsaWZldGltZS4KICAgICAvLyBMZXQncyBtYWtlIGl0IHVuY29sbGVjdGFibGUg
dW50aWwgdGhlIHBjIGlzIGNsb3NlZCBieSBKUyBvciB0aGUgcGFnZSBzdG9wcyBpdC4KICAgICBp
ZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9u
LT5zZXRQZW5kaW5nQWN0aXZpdHkocGVlckNvbm5lY3Rpb24ucHRyKCkpOworICAgICAgICBwZWVy
Q29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KHBlZXJDb25uZWN0aW9uLmdldCgpKTsKIAog
ICAgICAgICAvLyBJQ0UgY2FuZGlkYXRlIGZpbHRlcmluZyBjYW4gb25seSBiZSBkaXNhYmxlZCBm
b3IgY29ubmVjdGlvbnMgZnJvbSBkb2N1bWVudHMgdGhhdCBoYXZlIHRoZSBzYW1lIG9yaWdpbiBh
cyB0aGUgdG9wIGRvY3VtZW50LAogICAgICAgICAvLyBvciBpZiB0aGUgcGFnZSB3YXMgc2V0IHRv
IGRpc2FibGUgaXQuCkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6
ZG9TdG9wKCkKIAogICAgIG1fYmFja2VuZC0+c3RvcCgpOwogCi0gICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lk
IFJUQ1BlZXJDb25uZWN0aW9uOjpyZWdpc3RlclRvQ29udHJvbGxlcihSVENDb250cm9sbGVyJiBj
b250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uLmNwcAppbmRleCBmNDM5NDMxOGViMWZkN2NmMDg3ZDliM2NiMDhjNzFi
OWY5YmQ3OTExLi43MmFkM2FiY2MwNjY2NTQzMjQ2Y2E4NWEzNTNlNDAyNjU2MDU5MWY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0
aW9uLmNwcApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIE5vdGlmaWNhdGlvbjo6c2hvdygpCiAgICAg
fQogICAgIGlmIChjbGllbnQuc2hvdyh0aGlzKSkgewogICAgICAgICBtX3N0YXRlID0gU2hvd2lu
ZzsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICBzZXRQZW5kaW5n
QWN0aXZpdHkoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgTm90
aWZpY2F0aW9uOjpmaW5hbGl6ZSgpCiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9zdGF0ZSA9IENsb3NlZDsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgTm90
aWZpY2F0aW9uOjpkaXNwYXRjaFNob3dFdmVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCmluZGV4
IDI3ZTU2YzRjNmI5NDdhZWI4MjQ1OWVkMTNmMzNiNTgxYTNkM2EwYTQuLjA1NWJmZjVmMWViYWEx
YjJiZTVhN2M0NDBlZTA5ZjNiMTc4YjljMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwCkBAIC05
OSw3ICs5OSw3IEBAIHZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0ZVB1bGxTdGF0
dXMoKQogICAgICAgICAvLyBXaGVuIGFuIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIGlzIGNvbm5l
Y3RlZCB0byBhIGRvd25zdHJlYW0gbm9kZSwgaXQgd2lsbCBnZXQgcHVsbGVkIGJ5IHRoZQogICAg
ICAgICAvLyBkb3duc3RyZWFtIG5vZGUsIHRodXMgcmVtb3ZlIGl0IGZyb20gdGhlIGNvbnRleHQn
cyBhdXRvbWF0aWMgcHVsbCBsaXN0LgogICAgICAgICBpZiAobV9uZWVkQXV0b21hdGljUHVsbCkg
ewotICAgICAgICAgICAgY29udGV4dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOwor
ICAgICAgICAgICAgY29udGV4dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKCp0aGlzKTsKICAg
ICAgICAgICAgIG1fbmVlZEF1dG9tYXRpY1B1bGwgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CkBAIC0xMDcsMTEgKzEwNywxMSBAQCB2b2lkIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
Ojp1cGRhdGVQdWxsU3RhdHVzKCkKICAgICAgICAgaWYgKG51bWJlck9mSW5wdXRDb25uZWN0aW9u
cyAmJiAhbV9uZWVkQXV0b21hdGljUHVsbCkgewogICAgICAgICAgICAgLy8gV2hlbiBhbiBBdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBkb3duc3RyZWFtIG5v
ZGUgd2hpbGUgc3RpbGwgY29ubmVjdGVkIGZyb20KICAgICAgICAgICAgIC8vIHVwc3RyZWFtIG5v
ZGUocyksIGFkZCBpdCB0byB0aGUgY29udGV4dCdzIGF1dG9tYXRpYyBwdWxsIGxpc3QuCi0gICAg
ICAgICAgICBjb250ZXh0KCkuYWRkQXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAgICAg
ICBjb250ZXh0KCkuYWRkQXV0b21hdGljUHVsbE5vZGUoKnRoaXMpOwogICAgICAgICAgICAgbV9u
ZWVkQXV0b21hdGljUHVsbCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mSW5w
dXRDb25uZWN0aW9ucyAmJiBtX25lZWRBdXRvbWF0aWNQdWxsKSB7CiAgICAgICAgICAgICAvLyBU
aGUgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29ubmVjdGVkIHRvIG5vdGhpbmcsIHJlbW92
ZSBpdCBmcm9tIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KLSAgICAgICAgICAg
IGNvbnRleHQoKS5yZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNv
bnRleHQoKS5yZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25l
ZWRBdXRvbWF0aWNQdWxsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggZDk1MDQ3Yzkw
MzA1MWMwYmMzZDVlNjM4YjI3YjQ1ODU0MjRiMDUzMi4uMDEyYWU4ZmY2NDQzOGRjNjNjN2I0Yjcz
MGQ5YmEyN2MyMzQ2MDliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgQXVkaW9Db250ZXh0
Ojpjb25zdHJ1Y3RDb21tb24oKQogewogICAgIC8vIEFjY29yZGluZyB0byBzcGVjIEF1ZGlvQ29u
dGV4dCBtdXN0IGRpZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdhdGUuCiAgICAgLy8gTGV0cyBtYXJr
IGl0IGFzIEFjdGl2ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcgYWN0aXZpdHkgYW5kIHVubWFyayBp
dCBpbiBjbGVhciBtZXRob2QuCi0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAKICNpZiBVU0UoR1NUUkVBTUVSKQogICAgIGluaXRp
YWxpemVHU3RyZWFtZXIoKTsKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6
bGF6eUluaXRpYWxpemUoKQogICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6ZSgp
OwogCiAgICAgICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBkb2N1
bWVudCgpLT5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+
cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9kdWNlcigqdGhpcyk7CisgICAgICAgICAgICBk
b2N1bWVudCgpLT5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRo
aXMpOwogCiAgICAgICAgICAgICAvLyBUaGlzIHN0YXJ0cyB0aGUgYXVkaW8gdGhyZWFkLiBUaGUg
ZGVzdGluYXRpb24gbm9kZSdzIHByb3ZpZGVJbnB1dCgpIG1ldGhvZCB3aWxsIG5vdyBiZSBjYWxs
ZWQgcmVwZWF0ZWRseSB0byByZW5kZXIgYXVkaW8uCiAgICAgICAgICAgICAvLyBFYWNoIHRpbWUg
cHJvdmlkZUlucHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24gb2YgdGhlIGF1ZGlvIHN0cmVhbSBp
cyByZW5kZXJlZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVyaW9kIGEgInJlbmRlciBxdWFudHVt
Ii4KQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6Y2xlYXIoKQogICAgIH0g
d2hpbGUgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOwogCiAgICAgLy8gSXQgd2FzIHNldCBpbiBj
b25zdHJ1Y3RDb21tb24uCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5z
ZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0
aWFsaXplKCkKQEAgLTI2Myw4ICsyNjMsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6dW5pbml0aWFs
aXplKCkKICAgICBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCA9IHRydWU7CiAKICAgICBpZiAoIWlz
T2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVBdWRpb1Byb2R1
Y2VyKHRoaXMpOwotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0
YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVk
aW9Qcm9kdWNlcigqdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICBBU1NFUlQoc19o
YXJkd2FyZUNvbnRleHRDb3VudCk7CiAgICAgICAgIC0tc19oYXJkd2FyZUNvbnRleHRDb3VudDsK
QEAgLTgyNCwxNCArODI0LDE0IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJlZEZp
bmlzaERlcmVmcygpCiAgICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5jbGVhcigpOwogfQog
Ci12b2lkIEF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSogbm9kZSkKK3Zv
aWQgQXVkaW9Db250ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlJiBub2RlKQogewogICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CiAKICAgICBpZiAoaXNBdWRpb1RocmVhZEZpbmlzaGVk
KCkpCi0gICAgICAgIG1fbm9kZXNUb0RlbGV0ZS5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9k
ZXNUb0RlbGV0ZS5hcHBlbmQoJm5vZGUpOwogICAgIGVsc2UKLSAgICAgICAgbV9ub2Rlc01hcmtl
ZEZvckRlbGV0aW9uLmFwcGVuZChub2RlKTsKKyAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0
aW9uLmFwcGVuZCgmbm9kZSk7CiAKICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRp
bWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxpc3QsCiAg
ICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFw
aCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKQEAgLTkyOCwxOSArOTI4
LDE5IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKQog
ICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQXVkaW9Db250
ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29u
dGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJiBub2RlKQogewogICAgIEFTU0VS
VChpc0dyYXBoT3duZXIoKSk7CiAKLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMuYWRkKG5v
ZGUpLmlzTmV3RW50cnkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZCgmbm9kZSku
aXNOZXdFbnRyeSkKICAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSB0
cnVlOwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVk
aW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2Rl
KEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogCi0gICAg
aWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZShub2RlKSkKKyAgICBpZiAobV9hdXRvbWF0
aWNQdWxsTm9kZXMucmVtb3ZlKCZub2RlKSkKICAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNO
ZWVkVXBkYXRpbmcgPSB0cnVlOwogfQogCkBAIC05OTcsNyArOTk3LDcgQEAgYm9vbCBBdWRpb0Nv
bnRleHQ6OndpbGxCZWdpblBsYXliYWNrKCkKICAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZv
ckF1ZGlvU3RhcnQoKSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgp
OwogICAgICAgICBpZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24oQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVz
dHJpY3Rpb24pOwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxQ
YXVzZVBsYXliYWNrKCkKICAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQo
KSkgewogICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgICAgICBp
ZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVu
dCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVk
aW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXgg
NTc3MzE3ZDJlODJkZWQ5ZmEwNzg1OWRiMGUwNjBhMWFhODk1ZjNhZS4uNjM0OTdkYWJlMTEzMmI3
ZWMzZmIxMjNjMWE2MzA3NDdjYWU3YzYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC0xNTMsMTMgKzE1MywxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKIAogICAgIC8vIFdlIHNjaGVkdWxl
IGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1l
IHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSopOwor
ICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYpOwogICAgIHZvaWQgZGVsZXRlTWFy
a2VkTm9kZXMoKTsKIAogICAgIC8vIEF1ZGlvQ29udGV4dCBjYW4gcHVsbCBub2RlKHMpIGF0IHRo
ZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5l
Y3RlZCB0byBhbnkgZG93bnN0cmVhbSBub2Rlcy4KICAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBh
cmUgY2FsbGVkIGJ5IHRoZSBub2RlcyB3aG8gd2FudCB0byBhZGQvcmVtb3ZlIHRoZW1zZWx2ZXMg
aW50by9mcm9tIHRoZSBhdXRvbWF0aWMgcHVsbCBsaXN0cy4KLSAgICB2b2lkIGFkZEF1dG9tYXRp
Y1B1bGxOb2RlKEF1ZGlvTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUo
QXVkaW9Ob2RlKik7CisgICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKTsK
KyAgICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYpOwogCiAgICAgLy8g
Q2FsbGVkIHJpZ2h0IGJlZm9yZSBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSB0byBoYW5kbGUgbm9k
ZXMgd2hpY2ggbmVlZCB0byBiZSBwdWxsZWQgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0
ZWQgdG8gYW55dGhpbmcuCiAgICAgdm9pZCBwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb05vZGUuY3BwCmluZGV4IGYyMDBiMDUwZTcyNjEyN2NjMWQ2ZjZiNWE2MzVmNjdhZjJiNGU3
NzYuLjFhYzc3YWEzN2MyNjUzN2IzZTJmZjIyMzYxYWE3MjUyZDUwMzU1YzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKQEAgLTQ3Nyw3ICs0Nzcs
NyBAQCB2b2lkIEF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQtPmRpc2Nvbm5lY3RBbGwoKTsgLy8gVGhpcyB3aWxsIGRlcmVm
KCkgbm9kZXMgd2UncmUgY29ubmVjdGVkIHRvLgogCiAgICAgICAgICAgICAgICAgLy8gTWFyayBm
b3IgZGVsZXRpb24gYXQgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0gb3Igd2hlbiBjb250ZXh0
IHNodXRzIGRvd24uCi0gICAgICAgICAgICAgICAgY29udGV4dCgpLm1hcmtGb3JEZWxldGlvbih0
aGlzKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0KCkubWFya0ZvckRlbGV0aW9uKCp0aGlzKTsK
ICAgICAgICAgICAgICAgICBtX2lzTWFya2VkRm9yRGVsZXRpb24gPSB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgaWYgKHJlZlR5cGUgPT0gUmVmVHlwZUNvbm5lY3Rpb24pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4
IDcyM2EwYjZjOGUxZThmYzgyZGRkZDYwZGM2ODJjMDRkODQxYjA5ZTkuLjNiNTcwZmQyOWQ3NjBl
ZTM5ZTdmNDQ1YWI4MWI3YmQzYjQ2ZDBhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yODMsOCArMjgzLDggQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcHIKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KGNvbnRleHQpOwogICAgICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9jdW1lbnQu
ZnJhbWUoKTsKICAgICAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigpLm1peGVkQ29u
dGVudENoZWNrZXIoKS5jYW5SdW5JbnNlY3VyZUNvbnRlbnQoZG9jdW1lbnQuc2VjdXJpdHlPcmln
aW4oKSwgbV91cmwpKSB7Ci0gICAgICAgICAgICAvLyBCYWxhbmNlZCBieSB0aGUgY2FsbCB0byBB
Y3RpdmVET01PYmplY3Q6OnVuc2V0UGVuZGluZ0FjdGl2aXR5KCkgaW4gV2ViU29ja2V0OjpzdG9w
KCkuCi0gICAgICAgICAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICAgICAgICAgIC8vIEJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCkgaW4gV2ViU29ja2V0OjpzdG9wKCkuCisgICAgICAgICAgICBzZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogCiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJsb2NrIHRoaXMgY29ubmVj
dGlvbi4gSW5zdGVhZCBvZiB0aHJvd2luZyBhbiBleGNlcHRpb24sIHdlIGluZGljYXRlIHRoaXMK
ICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSBlcnJvciBldmVudC4gQnV0IHNpbmNlIHRoaXMgY29k
ZSBleGVjdXRlcyBhcyBwYXJ0IG9mIHRoZSBXZWJTb2NrZXQncwpAQCAtMzE1LDcgKzMxNSw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAgICAgIHByb3RvY29sU3RyaW5nID0gam9pblN0
cmluZ3MocHJvdG9jb2xzLCBzdWJwcm90b2NvbFNlcGFyYXRvcigpKTsKIAogICAgIG1fY2hhbm5l
bC0+Y29ubmVjdChtX3VybCwgcHJvdG9jb2xTdHJpbmcpOwotICAgIEFjdGl2ZURPTU9iamVjdDo6
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7
CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTQ0LDcgKzU0NCw3IEBAIHZvaWQgV2ViU29ja2V0
OjpzdG9wKCkKICAgICBtX3BlbmRpbmdFdmVudHMuY2xlYXIoKTsKICAgICBBY3RpdmVET01PYmpl
Y3Q6OnN0b3AoKTsKICAgICBpZiAocGVuZGluZykKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0Ojp1
bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
KnRoaXMpOwogfQogCiBjb25zdCBjaGFyKiBXZWJTb2NrZXQ6OmFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdApAQCAtNjI4LDcgKzYyOCw3IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRDbG9zZSh1bnNp
Z25lZCB1bmhhbmRsZWRCdWZmZXJlZEFtb3VudCwgQ2xvc2luZ0hhbmRzaGFrZUNvbXBsCiAgICAg
ICAgIG1fY2hhbm5lbCA9IG51bGxwdHI7CiAgICAgfQogICAgIGlmIChoYXNQZW5kaW5nQWN0aXZp
dHkoKSkKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0Ojp1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFdlYlNv
Y2tldDo6ZGlkVXBncmFkZVVSTCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcAppbmRleCA2YWU1ODcxYzZmYmIyZGE5OGZjNWVhMjVmZDhjMWNmNGU4
ZTkxZDg0Li4xZjdhZGM3NzYzNjE5MjRkYzE5ZTc1Njk1Y2E0ZTA1YmY2NjkyNzU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTM2OCw3
ICszNjgsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVs
ZUxvYWRlclJlc29sdmUoSlNDOjpKU0dsb2JhbE9iamVjdAogewogICAgIEpTRE9NV2luZG93QmFz
ZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIo
KS0+cmVzb2x2ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwg
aW1wb3J0ZXJNb2R1bGVLZXksIHNjcmlwdEZldGNoZXIpOworICAgICAgICByZXR1cm4gZG9jdW1l
bnQtPm1vZHVsZUxvYWRlcigpLnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2Fk
ZXIsIG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKICAgICBK
U0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4g
ZGVmZXJyZWQtPnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTM3Nyw3ICszNzcs
NyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRl
ckZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqCiB7CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlz
T2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5k
b2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLT5mZXRj
aChnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBzY3JpcHRGZXRj
aGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5mZXRjaChnbG9i
YWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsK
ICAgICBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBy
ZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTM4Niw3
ICszODYsNyBAQCBKU0M6OkpTVmFsdWUgSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJFdmFs
dWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEpTRE9NV2luZG93QmFz
ZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIo
KS0+ZXZhbHVhdGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwg
bW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5t
b2R1bGVMb2FkZXIoKS5ldmFsdWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwg
bW9kdWxlS2V5LCBtb2R1bGVSZWNvcmQsIHNjcmlwdEZldGNoZXIpOwogICAgIHJldHVybiBKU0M6
OmpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTM5NCw3ICszOTQsNyBAQCBKU0M6OkpTSW50ZXJuYWxQ
cm9taXNlKiBKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6OkpT
R2xvYmFsTwogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0
PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0cjxEb2N1bWVu
dD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+aW1wb3J0TW9kdWxlKGdsb2JhbE9iamVj
dCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBzb3VyY2VPcmlnaW4pOworICAgICAg
ICByZXR1cm4gZG9jdW1lbnQtPm1vZHVsZUxvYWRlcigpLmltcG9ydE1vZHVsZShnbG9iYWxPYmpl
Y3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlTmFtZSwgc291cmNlT3JpZ2luKTsKICAgICBK
U0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNDOjpKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4g
ZGVmZXJyZWQtPnJlamVjdChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9B
Y3RpdmVET01PYmplY3QuaAppbmRleCBlMjcwNTNmYTVkZmZhMmNmYzlmMWQ5MzRjZjNjNzUyMDY1
ZWQ1NGJlLi5mOTVhMDZkYmZkZTkzYjI4ZTBhNTRkMTViODJjMmNlNWNhYzYzNjZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCkBAIC03MCwxOCArNzAsMTggQEAgcHVibGljOgog
ICAgIC8vIEl0IGNhbiwgaG93ZXZlciwgaGF2ZSBhIHNpZGUgZWZmZWN0IG9mIGRlbGV0aW5nIGFu
IEFjdGl2ZURPTU9iamVjdC4KICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgVD4gdm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoVCogdGhpc09iamVjdCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNldFBlbmRpbmdBY3Rpdml0eShUJiB0aGlzT2JqZWN0
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QgPT0gdGhpcyk7Ci0gICAgICAgIHRo
aXNPYmplY3QtPnJlZigpOworICAgICAgICBBU1NFUlQoJnRoaXNPYmplY3QgPT0gdGhpcyk7Cisg
ICAgICAgIHRoaXNPYmplY3QucmVmKCk7CiAgICAgICAgICsrbV9wZW5kaW5nQWN0aXZpdHlDb3Vu
dDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIHVuc2V0UGVuZGluZ0FjdGl2
aXR5KFQqIHRoaXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB1bnNldFBl
bmRpbmdBY3Rpdml0eShUJiB0aGlzT2JqZWN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcGVu
ZGluZ0FjdGl2aXR5Q291bnQgPiAwKTsKICAgICAgICAgLS1tX3BlbmRpbmdBY3Rpdml0eUNvdW50
OwotICAgICAgICB0aGlzT2JqZWN0LT5kZXJlZigpOworICAgICAgICB0aGlzT2JqZWN0LmRlcmVm
KCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0
ZXJEYXRhLmNwcAppbmRleCBhZTU2ZDY5ZDBlZDRjMmU2OGJlOWQ5NWYwMWI0YzcwNGM1ZjE1MWMz
Li4yMjg4ZTMxYmFkOTBkMmYyNGJjYzAyMWNmOTRmYjFiNTRkNjFmMDliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0
YTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
bGVuZ3RoKCk7CiAKICAgICBpZiAobV9kYXRhID09IG5vbk51bGxEYXRhICYmIGNhblVzZVNldERh
dGFPcHRpbWl6YXRpb24oKnRoaXMpKSB7Ci0gICAgICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQo
dGhpcywgMCwgb2xkTGVuZ3RoKTsKKyAgICAgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgqdGhp
cywgMCwgb2xkTGVuZ3RoKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAg
ICAgICAgIGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkudGV4dFdhc1JlcGxhY2VkKHRo
aXMsIDAsIG9sZExlbmd0aCwgb2xkTGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjEsNyAr
NjEsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhKQog
ICAgIFJlZjxDaGFyYWN0ZXJEYXRhPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAogICAgIHNldERh
dGFBbmRVcGRhdGUobm9uTnVsbERhdGEsIDAsIG9sZExlbmd0aCwgbm9uTnVsbERhdGEubGVuZ3Ro
KCkpOwotICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQodGhpcywgMCwgb2xkTGVuZ3RoKTsKKyAg
ICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKCp0aGlzLCAwLCBvbGRMZW5ndGgpOwogfQogCiBFeGNl
cHRpb25PcjxTdHJpbmc+IENoYXJhY3RlckRhdGE6OnN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBjb3VudCkKQEAgLTEyOCw3ICsxMjgsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5n
JiBkYXRhKQogCiAgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgMCwgZGF0YS5s
ZW5ndGgoKSk7CiAKLSAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRh
dGEubGVuZ3RoKCkpOworICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQs
IGRhdGEubGVuZ3RoKCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBDaGFyYWN0ZXJEYXRhOjpkZWxldGVEYXRhKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgY291bnQpCiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zm
c2V0LCBjb3VudCwgMCk7CiAKLSAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIG9mZnNl
dCwgY291bnQpOworICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291
bnQpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTE2NCw4ICsxNjQsOCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBDaGFyYWN0ZXJEYXRhOjpyZXBsYWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50LCBjbwogICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLCBvZmZzZXQsIGNvdW50
LCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIC8vIHVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGwg
Y2hlY2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKLSAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVk
KHRoaXMsIG9mZnNldCwgY291bnQpOwotICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKHRoaXMs
IG9mZnNldCwgZGF0YS5sZW5ndGgoKSk7CisgICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCgqdGhp
cywgb2Zmc2V0LCBjb3VudCk7CisgICAgZG9jdW1lbnQoKS50ZXh0SW5zZXJ0ZWQoKnRoaXMsIG9m
ZnNldCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggZGUyZjNiYTZlYzZjN2YzZjE2YzM5NGQ0OTRkZTBjMTMwY2Y0NmE2ZC4u
YWM2YzljMjFkMzY3YmQyODI3NzhiZWJhZjA1NTBkZTEyMzNhOGRkYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC02ODEsMjIgKzY4MSwyMCBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0RWxl
bWVudEJ5QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5KQogICAgIGlmIChrZXkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1fYWNjZXNzS2V5TWFwVmFsaWQp
IHsKLSAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAodGhpcyk7CisgICAgICAgIGJ1aWxkQWNjZXNz
S2V5TWFwKCp0aGlzKTsKICAgICAgICAgbV9hY2Nlc3NLZXlNYXBWYWxpZCA9IHRydWU7CiAgICAg
fQogICAgIHJldHVybiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtleS5pbXBsKCkpOwogfQog
Ci12b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHNjb3BlKQordm9p
ZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiBzY29wZSkKIHsKLSAgICBB
U1NFUlQoc2NvcGUpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBl
PEVsZW1lbnQ+KHNjb3BlLT5yb290Tm9kZSgpKSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGFjY2Vzc0tleSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihh
Y2Nlc3NrZXlBdHRyKTsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlw
ZTxFbGVtZW50PihzY29wZS5yb290Tm9kZSgpKSkgeworICAgICAgICBhdXRvJiBhY2Nlc3NLZXkg
PSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7
CiAgICAgICAgIGlmICghYWNjZXNzS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZWxlbWVu
dHNCeUFjY2Vzc0tleS5zZXQoYWNjZXNzS2V5LmltcGwoKSwgJmVsZW1lbnQpOwotCi0gICAgICAg
IGlmIChTaGFkb3dSb290KiByb290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCi0gICAgICAgICAg
ICBidWlsZEFjY2Vzc0tleU1hcChyb290KTsKKyAgICAgICAgaWYgKGF1dG8qIHJvb3QgPSBlbGVt
ZW50LnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKCpyb290KTsK
ICAgICB9CiB9CiAKQEAgLTE2MjcsMTQgKzE2MjUsMTQgQEAgdm9pZCBEb2N1bWVudDo6dGl0bGVF
bGVtZW50VGV4dENoYW5nZWQoRWxlbWVudCYgdGl0bGVFbGVtZW50KQogICAgIHVwZGF0ZVRpdGxl
RnJvbVRpdGxlRWxlbWVudCgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclZpc2li
aWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCogY2xpZW50
KQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJh
Y2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQmIGNsaWVudCkKIHsKLSAgICBtX3Zpc2liaWxpdHlT
dGF0ZUNhbGxiYWNrQ2xpZW50cy5hZGQoY2xpZW50KTsKKyAgICBtX3Zpc2liaWxpdHlTdGF0ZUNh
bGxiYWNrQ2xpZW50cy5hZGQoJmNsaWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0
ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGll
bnQqIGNsaWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVD
aGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQmIGNsaWVudCkKIHsKLSAgICBt
X3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrQ2xpZW50cy5yZW1vdmUoY2xpZW50KTsKKyAgICBtX3Zp
c2liaWxpdHlTdGF0ZUNhbGxiYWNrQ2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKIHZvaWQg
RG9jdW1lbnQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKQpAQCAtMzY0NywxNSArMzY0NSwxNSBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpemUoKQogICAgIH0KIH0K
IAotdm9pZCBEb2N1bWVudDo6YWRkQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyKiBhdWRpb1By
b2R1Y2VyKQordm9pZCBEb2N1bWVudDo6YWRkQXVkaW9Qcm9kdWNlcihNZWRpYVByb2R1Y2VyJiBh
dWRpb1Byb2R1Y2VyKQogewotICAgIG1fYXVkaW9Qcm9kdWNlcnMuYWRkKGF1ZGlvUHJvZHVjZXIp
OworICAgIG1fYXVkaW9Qcm9kdWNlcnMuYWRkKCZhdWRpb1Byb2R1Y2VyKTsKICAgICB1cGRhdGVJ
c1BsYXlpbmdNZWRpYSgpOwogfQogCi12b2lkIERvY3VtZW50OjpyZW1vdmVBdWRpb1Byb2R1Y2Vy
KE1lZGlhUHJvZHVjZXIqIGF1ZGlvUHJvZHVjZXIpCit2b2lkIERvY3VtZW50OjpyZW1vdmVBdWRp
b1Byb2R1Y2VyKE1lZGlhUHJvZHVjZXImIGF1ZGlvUHJvZHVjZXIpCiB7Ci0gICAgbV9hdWRpb1By
b2R1Y2Vycy5yZW1vdmUoYXVkaW9Qcm9kdWNlcik7CisgICAgbV9hdWRpb1Byb2R1Y2Vycy5yZW1v
dmUoJmF1ZGlvUHJvZHVjZXIpOwogICAgIHVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiB9CiAKQEAg
LTM3NDcsMjQgKzM3NDUsMjQgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUoTm9kZSYgbm9kZSwgYm9vbCBhbW9uZ0NoaWxkcmVuT25seSkKICAgICB9CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OmhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIERvY3VtZW50Ojpob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGlmICghbV9ob3ZlcmVkRWxlbWVudCB8fCBlbGVtZW50ICE9IG1faG92ZXJlZEVsZW1l
bnQpCisgICAgaWYgKCFtX2hvdmVyZWRFbGVtZW50IHx8ICZlbGVtZW50ICE9IG1faG92ZXJlZEVs
ZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faG92ZXJlZEVsZW1lbnQgPSBlbGVtZW50
LT5wYXJlbnRFbGVtZW50KCk7CisgICAgbV9ob3ZlcmVkRWxlbWVudCA9IGVsZW1lbnQucGFyZW50
RWxlbWVudCgpOwogICAgIHdoaWxlIChtX2hvdmVyZWRFbGVtZW50ICYmICFtX2hvdmVyZWRFbGVt
ZW50LT5yZW5kZXJlcigpKQogICAgICAgICBtX2hvdmVyZWRFbGVtZW50ID0gbV9ob3ZlcmVkRWxl
bWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgIGlmIChmcmFtZSgpKQogICAgICAgICBmcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS5zY2hlZHVsZUhvdmVyU3RhdGVVcGRhdGUoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6ZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goRWxlbWVudCogZWxlbWVudCkK
K3ZvaWQgRG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2FjdGl2ZUVsZW1lbnQgfHwgZWxlbWVudCAhPSBtX2FjdGl2
ZUVsZW1lbnQpCisgICAgaWYgKCFtX2FjdGl2ZUVsZW1lbnQgfHwgJmVsZW1lbnQgIT0gbV9hY3Rp
dmVFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2FjdGl2ZUVsZW1lbnQgPSBlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgbV9hY3RpdmVFbGVtZW50ID0gZWxlbWVudC5wYXJl
bnRFbGVtZW50KCk7CiAgICAgd2hpbGUgKG1fYWN0aXZlRWxlbWVudCAmJiAhbV9hY3RpdmVFbGVt
ZW50LT5yZW5kZXJlcigpKQogICAgICAgICBtX2FjdGl2ZUVsZW1lbnQgPSBtX2FjdGl2ZUVsZW1l
bnQtPnBhcmVudEVsZW1lbnQoKTsKIH0KQEAgLTQwNDIsMjYgKzQwNDAsMjYgQEAgdm9pZCBEb2N1
bWVudDo6Y29sbGVjdGlvbldpbGxDbGVhcklkTmFtZU1hcChjb25zdCBIVE1MQ29sbGVjdGlvbiYg
Y29sbGVjdGlvbikKICAgICBtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50c1tJbnZhbGlkYXRl
T25JZE5hbWVBdHRyQ2hhbmdlXS0tOwogfQogCi12b2lkIERvY3VtZW50OjphdHRhY2hOb2RlSXRl
cmF0b3IoTm9kZUl0ZXJhdG9yKiBuaSkKK3ZvaWQgRG9jdW1lbnQ6OmF0dGFjaE5vZGVJdGVyYXRv
cihOb2RlSXRlcmF0b3ImIGl0ZXJhdG9yKQogewotICAgIG1fbm9kZUl0ZXJhdG9ycy5hZGQobmkp
OworICAgIG1fbm9kZUl0ZXJhdG9ycy5hZGQoJml0ZXJhdG9yKTsKIH0KIAotdm9pZCBEb2N1bWVu
dDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciogbmkpCit2b2lkIERvY3VtZW50Ojpk
ZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yJiBpdGVyYXRvcikKIHsKICAgICAvLyBUaGUg
bm9kZSBpdGVyYXRvciBjYW4gYmUgZGV0YWNoZWQgd2l0aG91dCBoYXZpbmcgYmVlbiBhdHRhY2hl
ZCBpZiBpdHMgcm9vdCBub2RlIGRpZG4ndCBoYXZlIGEgZG9jdW1lbnQKICAgICAvLyB3aGVuIHRo
ZSBpdGVyYXRvciB3YXMgY3JlYXRlZCwgYnV0IGhhcyBpdCBub3cuCi0gICAgbV9ub2RlSXRlcmF0
b3JzLnJlbW92ZShuaSk7CisgICAgbV9ub2RlSXRlcmF0b3JzLnJlbW92ZSgmaXRlcmF0b3IpOwog
fQogCiB2b2lkIERvY3VtZW50Ojptb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQoTm9kZSYg
bm9kZSwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewogICAgIFZlY3RvcjxOb2RlSXRlcmF0b3Iq
PiBub2RlSXRlcmF0b3JzOwogICAgIGNvcHlUb1ZlY3RvcihtX25vZGVJdGVyYXRvcnMsIG5vZGVJ
dGVyYXRvcnMpOwotICAgIGZvciAoYXV0byogaXQgOiBub2RlSXRlcmF0b3JzKSB7Ci0gICAgICAg
IGlmICgmaXQtPnJvb3QoKSA9PSAmbm9kZSkgewotICAgICAgICAgICAgZGV0YWNoTm9kZUl0ZXJh
dG9yKGl0KTsKLSAgICAgICAgICAgIG5ld0RvY3VtZW50LmF0dGFjaE5vZGVJdGVyYXRvcihpdCk7
CisgICAgZm9yIChhdXRvKiBpdGVyYXRvciA6IG5vZGVJdGVyYXRvcnMpIHsKKyAgICAgICAgaWYg
KCZpdGVyYXRvci0+cm9vdCgpID09ICZub2RlKSB7CisgICAgICAgICAgICBkZXRhY2hOb2RlSXRl
cmF0b3IoKml0ZXJhdG9yKTsKKyAgICAgICAgICAgIG5ld0RvY3VtZW50LmF0dGFjaE5vZGVJdGVy
YXRvcigqaXRlcmF0b3IpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDEwMSw3ICs0MDk5LDcg
QEAgdm9pZCBEb2N1bWVudDo6bm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2Rl
JiBjb250YWluZXIpCiAKICAgICBpZiAobV9tYXJrZXJzLT5oYXNNYXJrZXJzKCkpIHsKICAgICAg
ICAgZm9yIChUZXh0KiB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpmaXJzdENoaWxkKGNv
bnRhaW5lcik7IHRleHROb2RlOyB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpuZXh0U2li
bGluZygqdGV4dE5vZGUpKQotICAgICAgICAgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRl
eHROb2RlKTsKKyAgICAgICAgICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2VycygqdGV4dE5vZGUp
OwogICAgIH0KIH0KIApAQCAtNDEyOSw3ICs0MTI3LDcgQEAgdm9pZCBEb2N1bWVudDo6bm9kZVdp
bGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBpZiAoaXM8VGV4dD4obm9kZSkp
Ci0gICAgICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycygmbm9kZSk7CisgICAgICAgIG1fbWFy
a2Vycy0+cmVtb3ZlTWFya2Vycyhub2RlKTsKIH0KIAogc3RhdGljIE5vZGUqIGZhbGxiYWNrRm9j
dXNOYXZpZ2F0aW9uU3RhcnRpbmdOb2RlQWZ0ZXJSZW1vdmFsKE5vZGUmIG5vZGUpCkBAIC00MTQ4
LDcgKzQxNDYsNyBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVGb2N1c05hdmlnYXRpb25Ob2RlT2ZT
dWJ0cmVlKE5vZGUmIG5vZGUsIGJvb2wgYW1vbmdDaGlsZHJlbgogICAgIH0KIH0KIAotdm9pZCBE
b2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQordm9pZCBEb2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbV9yYW5nZXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKQEAgLTQxNTksNyAr
NDE1Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2RlKiB0ZXh0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICBtX21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0
ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHRSZW1vdmVkKE5v
ZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBEb2N1bWVu
dDo6dGV4dFJlbW92ZWQoTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRv
KiByYW5nZSA6IG1fcmFuZ2VzKQpAQCAtNDE3MSwxMCArNDE2OSwxMCBAQCB2b2lkIERvY3VtZW50
Ojp0ZXh0UmVtb3ZlZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKICAgICBtX21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0ZXh0LCBvZmZzZXQgKyBsZW5ndGgsIDAg
LSBsZW5ndGgpOwogfQogCi12b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQoVGV4dCogb2xk
Tm9kZSwgdW5zaWduZWQgb2Zmc2V0KQordm9pZCBEb2N1bWVudDo6dGV4dE5vZGVzTWVyZ2VkKFRl
eHQmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1w
dHkoKSkgewotICAgICAgICBOb2RlV2l0aEluZGV4IG9sZE5vZGVXaXRoSW5kZXgob2xkTm9kZSk7
CisgICAgICAgIE5vZGVXaXRoSW5kZXggb2xkTm9kZVdpdGhJbmRleCgmb2xkTm9kZSk7CiAgICAg
ICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3JhbmdlcykKICAgICAgICAgICAgIHJhbmdlLT50ZXh0
Tm9kZXNNZXJnZWQob2xkTm9kZVdpdGhJbmRleCwgb2Zmc2V0KTsKICAgICB9CkBAIC00MTgyLDcg
KzQxODAsNyBAQCB2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQoVGV4dCogb2xkTm9kZSwg
dW5zaWduZWQgb2Zmc2V0KQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1cGRhdGUgbWFya2Vy
cyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcuCiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OnRleHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSkKK3ZvaWQgRG9jdW1lbnQ6OnRleHROb2RlU3Bs
aXQoVGV4dCYgb2xkTm9kZSkKIHsKICAgICBmb3IgKGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCiAg
ICAgICAgIHJhbmdlLT50ZXh0Tm9kZVNwbGl0KG9sZE5vZGUpOwpAQCAtNDIwMSwxNSArNDE5OSwx
NSBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVET01XaW5kb3coKQogICAgIEFTU0VSVChtX2RvbVdp
bmRvdy0+ZnJhbWUoKSA9PSBtX2ZyYW1lKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dGFrZURPTVdp
bmRvd0Zyb20oRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBEb2N1bWVudDo6dGFrZURPTVdpbmRv
d0Zyb20oRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBB
U1NFUlQoIW1fZG9tV2luZG93KTsKLSAgICBBU1NFUlQoZG9jdW1lbnQtPm1fZG9tV2luZG93KTsK
KyAgICBBU1NFUlQoZG9jdW1lbnQubV9kb21XaW5kb3cpOwogICAgIC8vIEEgdmFsaWQgRE9NV2lu
ZG93IGlzIG5lZWRlZCBieSBDYWNoZWRGcmFtZSBmb3IgaXRzIGRvY3VtZW50cy4KICAgICBBU1NF
UlQocGFnZUNhY2hlU3RhdGUoKSA9PSBOb3RJblBhZ2VDYWNoZSk7CiAKLSAgICBtX2RvbVdpbmRv
dyA9IFdURk1vdmUoZG9jdW1lbnQtPm1fZG9tV2luZG93KTsKKyAgICBtX2RvbVdpbmRvdyA9IFdU
Rk1vdmUoZG9jdW1lbnQubV9kb21XaW5kb3cpOwogICAgIG1fZG9tV2luZG93LT5kaWRTZWN1cmVU
cmFuc2l0aW9uVG8oKnRoaXMpOwogCiAgICAgQVNTRVJUKG1fZG9tV2luZG93LT5kb2N1bWVudCgp
ID09IHRoaXMpOwpAQCAtNDg1OSwxNCArNDg1NywxNCBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWUo
QWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKICAgICBtX2lzU3Vz
cGVuZGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yRG9jdW1lbnRT
dXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1f
ZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cy5hZGQoZSk7CisgICAgbV9kb2N1bWVu
dFN1c3BlbnNpb25DYWxsYmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCog
ZSkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
RWxlbWVudHMucmVtb3ZlKGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVt
ZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50OjptZWRpYVZvbHVtZURp
ZENoYW5nZSgpIApAQCAtNDg3NSwxNCArNDg3MywxNCBAQCB2b2lkIERvY3VtZW50OjptZWRpYVZv
bHVtZURpZENoYW5nZSgpCiAgICAgICAgIGVsZW1lbnQtPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxl
bWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3Mo
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5h
ZGQoZSk7CisgICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKCZlbGVtZW50KTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVs
ZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFj
a3MoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50
cy5yZW1vdmUoZSk7CisgICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZl
bGVtZW50KTsKIH0KIAogYm9vbCBEb2N1bWVudDo6YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdl
c3R1cmUoKSBjb25zdApAQCAtNDkyNCwyOSArNDkyMiwyOSBAQCB2b2lkIERvY3VtZW50Ojpwcml2
YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpCiAgICAgICAgIGVsZW1lbnQtPnByaXZhdGVCcm93
c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yUHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3Vt
ZW50OjpyZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVu
dHMuYWRkKGUpOworICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMuYWRk
KCZlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvclByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6dW5y
ZWdpc3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50JiBl
bGVtZW50KQogewotICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMucmVt
b3ZlKGUpOworICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkRWxlbWVudHMucmVtb3Zl
KCZlbGVtZW50KTsKIH0KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAotdm9pZCBEb2N1bWVu
dDo6cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQq
IGUpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRD
YWxsYmFja3MoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAocGFnZSgpKQogICAgICAgICBw
YWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuc2V0SW50ZXJlc3RlZEluQ2FwdGlv
blByZWZlcmVuY2VDaGFuZ2VzKCk7CiAKLSAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRF
bGVtZW50cy5hZGQoZSk7CisgICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMu
YWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvckNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQgRG9jdW1lbnQ6OnVu
cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMucmVtb3Zl
KGUpOworICAgIG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxl
bWVudCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQpA
QCAtNDk1OSwxNCArNDk1NywxNCBAQCB2b2lkIERvY3VtZW50OjpjYXB0aW9uUHJlZmVyZW5jZXND
aGFuZ2VkKCkKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAKLXZvaWQgRG9j
dW1lbnQ6OnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVk
aWFFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
bV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkRWxlbWVudHMuYWRkKGVsZW1lbnQpOworICAgIG1fcGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxN
ZWRpYUVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTsKKyAg
ICBtX3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cy5yZW1vdmUoJmVsZW1lbnQpOwogfQog
CiB2b2lkIERvY3VtZW50OjpwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCkKQEAgLTUw
NjEsMTAgKzUwNTksMTAgQEAgdm9pZCBEb2N1bWVudDo6cG9wQ3VycmVudFNjcmlwdCgpCiAKICNp
ZiBFTkFCTEUoWFNMVCkKIAotdm9pZCBEb2N1bWVudDo6YXBwbHlYU0xUcmFuc2Zvcm0oUHJvY2Vz
c2luZ0luc3RydWN0aW9uKiBwaSkKK3ZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNMVHJhbnNmb3JtKFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiYgaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgUmVmUHRyPFhTTFRQcm9j
ZXNzb3I+IHByb2Nlc3NvciA9IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZSgpOwotICAgIHByb2Nlc3Nv
ci0+c2V0WFNMU3R5bGVTaGVldChkb3duY2FzdDxYU0xTdHlsZVNoZWV0PihwaS0+c2hlZXQoKSkp
OworICAgIGF1dG8gcHJvY2Vzc29yID0gWFNMVFByb2Nlc3Nvcjo6Y3JlYXRlKCk7CisgICAgcHJv
Y2Vzc29yLT5zZXRYU0xTdHlsZVNoZWV0KGRvd25jYXN0PFhTTFN0eWxlU2hlZXQ+KGluc3RydWN0
aW9uLnNoZWV0KCkpKTsKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5nIG5l
d1NvdXJjZTsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7CkBAIC01NTM2LDE3ICs1NTM0LDE3
IEBAIHZvaWQgRG9jdW1lbnQ6OnN0YXRlUG9wcGVkKFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
JiYgc3RhdGVPYmplY3QpCiAgICAgICAgIG1fcGVuZGluZ1N0YXRlT2JqZWN0ID0gV1RGTW92ZShz
dGF0ZU9iamVjdCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlKiByYW5n
ZSkKK3ZvaWQgRG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlJiByYW5nZSkKIHsKLSAgICBBU1NF
UlQoIW1fcmFuZ2VzLmNvbnRhaW5zKHJhbmdlKSk7Ci0gICAgbV9yYW5nZXMuYWRkKHJhbmdlKTsK
KyAgICBBU1NFUlQoIW1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkpOworICAgIG1fcmFuZ2VzLmFk
ZCgmcmFuZ2UpOwogfQogCi12b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSogcmFuZ2Up
Cit2b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgLy8gV2Ug
ZG9uJ3QgQVNTRVJUIG1fcmFuZ2VzLmNvbnRhaW5zKHJhbmdlKSB0byBhbGxvdyB1cyB0byBjYWxs
IHRoaXMKKyAgICAvLyBXZSBkb24ndCBBU1NFUlQgbV9yYW5nZXMuY29udGFpbnMoJnJhbmdlKSB0
byBhbGxvdyB1cyB0byBjYWxsIHRoaXMKICAgICAvLyB1bmNvbmRpdGlvbmFsbHkgdG8gZml4OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNDQKLSAgICBtX3Jhbmdl
cy5yZW1vdmUocmFuZ2UpOworICAgIG1fcmFuZ2VzLnJlbW92ZSgmcmFuZ2UpOwogfQogCiBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCkBAIC01Njg2LDcgKzU2ODQsNyBAQCB2b2lkIERvY3VtZW50OjpzdXNwZW5kU2NoZWR1
bGVkVGFza3MoQWN0aXZlRE9NT2JqZWN0OjpSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbgogCiAg
ICAgc3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIHN1
c3BlbmRBY3RpdmVET01PYmplY3RzKHJlYXNvbik7Ci0gICAgc2NyaXB0UnVubmVyKCktPnN1c3Bl
bmQoKTsKKyAgICBzY3JpcHRSdW5uZXIoKS5zdXNwZW5kKCk7CiAgICAgbV9wZW5kaW5nVGFza3NU
aW1lci5zdG9wKCk7CiAKICAgICAvLyBEZWZlcnJpbmcgbG9hZGluZyBhbmQgc3VzcGVuZGluZyBw
YXJzZXIgaXMgbmVjZXNzYXJ5IHdoZW4gd2UgbmVlZCB0byBwcmV2ZW50IHJlLWVudHJhbnQgSmF2
YVNjcmlwdCBleGVjdXRpb24KQEAgLTU3MTAsNyArNTcwOCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
c3VtZVNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbiBy
ZWFzb24pCiAgICAgICAgIG1fcGFyc2VyLT5yZXN1bWVTY2hlZHVsZWRUYXNrcygpOwogICAgIGlm
ICghbV9wZW5kaW5nVGFza3MuaXNFbXB0eSgpKQogICAgICAgICBtX3BlbmRpbmdUYXNrc1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwotICAgIHNjcmlwdFJ1bm5lcigpLT5yZXN1bWUoKTsKKyAgICBz
Y3JpcHRSdW5uZXIoKS5yZXN1bWUoKTsKICAgICByZXN1bWVBY3RpdmVET01PYmplY3RzKHJlYXNv
bik7CiAgICAgcmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CiAg
ICAgCkBAIC01NzYzLDE2ICs1NzYxLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoUG9wc3Rh
dGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIHN0YXRlT2JqZWN0CiAgICAg
ZGlzcGF0Y2hXaW5kb3dFdmVudChQb3BTdGF0ZUV2ZW50OjpjcmVhdGUoV1RGTW92ZShzdGF0ZU9i
amVjdCksIG1fZG9tV2luZG93ID8gbV9kb21XaW5kb3ctPmhpc3RvcnkoKSA6IG51bGxwdHIpKTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lciogbGlzdGVuZXIpCit2b2lkIERvY3VtZW50OjphZGRNZWRpYUNhblN0YXJ0TGlz
dGVuZXIoTWVkaWFDYW5TdGFydExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKLSAgICBBU1NFUlQoIW1f
bWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVkaWFD
YW5TdGFydExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworICAgIEFTU0VSVCghbV9tZWRpYUNhblN0
YXJ0TGlzdGVuZXJzLmNvbnRhaW5zKCZsaXN0ZW5lcikpOworICAgIG1fbWVkaWFDYW5TdGFydExp
c3RlbmVycy5hZGQoJmxpc3RlbmVyKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIpCit2b2lkIERv
Y3VtZW50OjpyZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVkaWFDYW5TdGFydExpc3RlbmVy
JiBsaXN0ZW5lcikKIHsKLSAgICBBU1NFUlQobV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLmNvbnRh
aW5zKGxpc3RlbmVyKSk7Ci0gICAgbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLnJlbW92ZShsaXN0
ZW5lcik7CisgICAgQVNTRVJUKG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlz
dGVuZXIpKTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMucmVtb3ZlKCZsaXN0ZW5lcik7
CiB9CiAKIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogRG9jdW1lbnQ6OnRha2VBbnlNZWRpYUNhblN0
YXJ0TGlzdGVuZXIoKQpAQCAtNTc4MiwyNCArNTc4MCwyMyBAQCBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIqIERvY3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKIAogI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pICYmIFBMQVRGT1JNKElPUykKIAotRGV2aWNlTW90aW9uQ29u
dHJvbGxlciogRG9jdW1lbnQ6OmRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25zdAorRGV2aWNl
TW90aW9uQ29udHJvbGxlciYgRG9jdW1lbnQ6OmRldmljZU1vdGlvbkNvbnRyb2xsZXIoKSBjb25z
dAogewotICAgIHJldHVybiBtX2RldmljZU1vdGlvbkNvbnRyb2xsZXIuZ2V0KCk7CisgICAgcmV0
dXJuICptX2RldmljZU1vdGlvbkNvbnRyb2xsZXI7CiB9CiAKLURldmljZU9yaWVudGF0aW9uQ29u
dHJvbGxlciogRG9jdW1lbnQ6OmRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpIGNvbnN0CitE
ZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXImIERvY3VtZW50OjpkZXZpY2VPcmllbnRhdGlvbkNv
bnRyb2xsZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2RldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlci5nZXQoKTsKKyAgICByZXR1cm4gKm1fZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOwog
fQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKIAotYm9vbCBEb2N1bWVu
dDo6ZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K2Jvb2wgRG9jdW1lbnQ6OmZ1bGxTY3JlZW5Jc0FsbG93ZWQoRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGlzQXR0cmlidXRlT25BbGxP
d25lcnMoYWxsb3dmdWxsc2NyZWVuQXR0ciwgd2Via2l0YWxsb3dmdWxsc2NyZWVuQXR0ciwgZWxl
bWVudC0+ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGlzQXR0cmlidXRl
T25BbGxPd25lcnMoYWxsb3dmdWxsc2NyZWVuQXR0ciwgd2Via2l0YWxsb3dmdWxsc2NyZWVuQXR0
ciwgZWxlbWVudC5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKTsKIH0KIAogdm9pZCBEb2N1bWVu
dDo6cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxTY3Jl
ZW5DaGVja1R5cGUgY2hlY2tUeXBlKQpAQCAtNTgxOCw3ICs1ODE1LDcgQEAgdm9pZCBEb2N1bWVu
dDo6cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxTY3Jl
ZW5DaGVja1R5cGUKIAogICAgICAgICAvLyBUaGUgY29udGV4dCBvYmplY3QncyBub2RlIGRvY3Vt
ZW50LCBvciBhbiBhbmNlc3RvciBicm93c2luZyBjb250ZXh0J3MgZG9jdW1lbnQgZG9lcyBub3Qg
aGF2ZQogICAgICAgICAvLyB0aGUgZnVsbHNjcmVlbiBlbmFibGVkIGZsYWcgc2V0LgotICAgICAg
ICBpZiAoY2hlY2tUeXBlID09IEVuZm9yY2VJRnJhbWVBbGxvd0Z1bGxTY3JlZW5SZXF1aXJlbWVu
dCAmJiAhZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIGlm
IChjaGVja1R5cGUgPT0gRW5mb3JjZUlGcmFtZUFsbG93RnVsbFNjcmVlblJlcXVpcmVtZW50ICYm
ICFmdWxsU2NyZWVuSXNBbGxvd2VkKCplbGVtZW50KSkKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIC8vIFRoZSBjb250ZXh0IG9iamVjdCdzIG5vZGUgZG9jdW1lbnQgZnVsbHNjcmVlbiBl
bGVtZW50IHN0YWNrIGlzIG5vdCBlbXB0eSBhbmQgaXRzIHRvcCBlbGVtZW50CkBAIC01ODkxLDgg
KzU4ODgsOCBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAgLy8gc3RhY2ss
IGFuZCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdl
IHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlCiAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBv
biB0aGUgZG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAoIWZvbGxvd2luZ0RvYykgewotICAgICAg
ICAgICAgICAgIGN1cnJlbnREb2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKGVsZW1lbnQp
OwotICAgICAgICAgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1
ZShjdXJyZW50RG9jKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVl
bkVsZW1lbnRTdGFjaygqZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1
bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKCpjdXJyZW50RG9jKTsKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtNTkwMyw4ICs1OTAwLDggQEAgdm9pZCBEb2N1
bWVudDo6cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEZ1bGxT
Y3JlZW5DaGVja1R5cGUKICAgICAgICAgICAgICAgICAvLyAuLi5wdXNoIGZvbGxvd2luZyBkb2N1
bWVudCdzIGJyb3dzaW5nIGNvbnRleHQgY29udGFpbmVyIG9uIGRvY3VtZW50J3MgZnVsbHNjcmVl
biBlbGVtZW50CiAgICAgICAgICAgICAgICAgLy8gc3RhY2ssIGFuZCBxdWV1ZSBhIHRhc2sgdG8g
ZmlyZSBhbiBldmVudCBuYW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0
cmlidXRlCiAgICAgICAgICAgICAgICAgLy8gc2V0IHRvIHRydWUgb24gZG9jdW1lbnQuCi0gICAg
ICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soZm9sbG93
aW5nRG9jLT5vd25lckVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1
bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAgICAgIGN1
cnJlbnREb2MtPnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCpmb2xsb3dpbmdEb2MtPm93bmVy
RWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5n
ZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogCkBAIC01OTY3LDcgKzU5NjQsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRF
eGl0RnVsbHNjcmVlbigpCiAgICAgLy8gdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxz
Y3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUgb24gZGVz
Y2VuZGFudC4KICAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogZGVzY2VuZGFudHMpIHsKICAgICAg
ICAgZG9jdW1lbnQtPmNsZWFyRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygpOwotICAgICAgICBhZGRE
b2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoZG9jdW1lbnQuZ2V0KCkpOworICAg
ICAgICBhZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmRvY3VtZW50KTsK
ICAgICB9CiAKICAgICAvLyA1LiBXaGlsZSBkb2MgaXMgbm90IG51bGwsIHJ1biB0aGVzZSBzdWJz
dGVwczoKQEAgLTU5ODQsNyArNTk4MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdEV4aXRGdWxs
c2NyZWVuKCkKIAogICAgICAgICAvLyAyLiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCBu
YW1lZCBmdWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0
cnVlCiAgICAgICAgIC8vIG9uIGRvYy4KLSAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICBhZGREb2N1bWVudFRvRnVsbFNj
cmVlbkNoYW5nZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwogCiAgICAgICAgIC8vIDMuIElmIGRv
YydzIGZ1bGxzY3JlZW4gZWxlbWVudCBzdGFjayBpcyBlbXB0eSBhbmQgZG9jJ3MgYnJvd3Npbmcg
Y29udGV4dCBoYXMgYSBicm93c2luZyBjb250ZXh0CiAgICAgICAgIC8vIGNvbnRhaW5lciwgc2V0
IGRvYyB0byB0aGF0IGJyb3dzaW5nIGNvbnRleHQgY29udGFpbmVyJ3Mgbm9kZSBkb2N1bWVudC4K
QEAgLTYwMzQsMTMgKzYwMzEsMTEgQEAgc3RhdGljIHZvaWQgdW53cmFwRnVsbFNjcmVlblJlbmRl
cmVyKFJlbmRlckZ1bGxTY3JlZW4qIGZ1bGxTY3JlZW5SZW5kZXJlciwgRWxlbWUKICAgICAgICAg
ZnVsbFNjcmVlbkVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKS0+aW52YWxpZGF0ZVN0eWxlQW5kUmVu
ZGVyZXJzRm9yU3VidHJlZSgpOwogfQogCi12b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6d2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbihFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghaGFz
TGl2aW5nUmVuZGVyVHJlZSgpIHx8IHBhZ2VDYWNoZVN0YXRlKCkgIT0gTm90SW5QYWdlQ2FjaGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIC8vIFByb3Rl
Y3QgYWdhaW5zdCBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIHJlbW92
ZWQgZnJvbSB0aGUgcGFnZS4KICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NjA0OSwxMyArNjA0NCwxMiBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogCiAgICAgdW53cmFwRnVsbFNjcmVlblJl
bmRlcmVyKG1fZnVsbFNjcmVlblJlbmRlcmVyLCBtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsK
IAotICAgIGlmIChlbGVtZW50KQotICAgICAgICBlbGVtZW50LT53aWxsQmVjb21lRnVsbHNjcmVl
bkVsZW1lbnQoKTsKKyAgICBlbGVtZW50LndpbGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOwog
ICAgIAotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBlbGVtZW50OworICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQgPSAmZWxlbWVudDsKIAogI2lmIFVTRShOQVRJVkVfRlVMTFNDUkVFTl9WSURFTykK
LSAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc01lZGlhRWxlbWVudCgpKQorICAgIGlmIChl
bGVtZW50LmlzTWVkaWFFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCkBAIC02
MDc4LDcgKzYwNzIsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIHJlc29sdmVTdHlsZShSZXNvbHZlU3R5
bGVUeXBlOjpSZWJ1aWxkKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6d2Via2l0RGlkRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEVudGVy
RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX2Z1bGxTY3JlZW5FbGVtZW50KQogICAgICAgICBy
ZXR1cm47CkBAIC02MDkxLDcgKzYwODUsNyBAQCB2b2lkIERvY3VtZW50Ojp3ZWJraXREaWRFbnRl
ckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQogICAgIG1fZnVsbFNjcmVlbkNoYW5nZURl
bGF5VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndlYmtpdFdp
bGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3ZWJr
aXRXaWxsRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIGlmICghbV9mdWxsU2NyZWVuRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNjEwMiw3ICs2MDk2LDcgQEAgdm9pZCBEb2N1bWVudDo6d2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKICAgICBtX2Z1bGxTY3Jl
ZW5FbGVtZW50LT53aWxsU3RvcEJlaW5nRnVsbHNjcmVlbkVsZW1lbnQoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQordm9p
ZCBEb2N1bWVudDo6d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKQogewogICAgIGlmICghbV9mdWxs
U2NyZWVuRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjI0MCwxOSArNjIzNCwxOCBAQCB2
b2lkIERvY3VtZW50Ojpwb3BGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCkKICAgICBtX2Z1bGxTY3Jl
ZW5FbGVtZW50U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi12b2lkIERvY3VtZW50OjpwdXNoRnVs
bHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6cHVz
aEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX2Z1bGxT
Y3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKGVsZW1lbnQpOworICAgIG1fZnVsbFNjcmVlbkVsZW1l
bnRTdGFjay5hcHBlbmQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50OjphZGREb2N1bWVu
dFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoRG9jdW1lbnQqIGRvYykKK3ZvaWQgRG9jdW1l
bnQ6OmFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCYgZG9j
dW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRvYyk7Ci0gICAgTm9kZSogdGFyZ2V0ID0gZG9jLT53ZWJr
aXRGdWxsc2NyZWVuRWxlbWVudCgpOworICAgIE5vZGUqIHRhcmdldCA9IGRvY3VtZW50LndlYmtp
dEZ1bGxzY3JlZW5FbGVtZW50KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHRhcmdldCA9
IGRvYy0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCk7CisgICAgICAgIHRhcmdldCA9
IGRvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOwogICAgIGlmICghdGFy
Z2V0KQotICAgICAgICB0YXJnZXQgPSBkb2M7CisgICAgICAgIHRhcmdldCA9ICZkb2N1bWVudDsK
ICAgICBtX2Z1bGxTY3JlZW5DaGFuZ2VFdmVudFRhcmdldFF1ZXVlLmFwcGVuZCh0YXJnZXQpOwog
fQogCkBAIC02NzEwLDcgKzY3MDMsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2
ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBFbGVtZW50KiBpbgogICAgICAg
ICAvLyBXZSBhcmUgY2xlYXJpbmcgdGhlIDphY3RpdmUgY2hhaW4gYmVjYXVzZSB0aGUgbW91c2Ug
aGFzIGJlZW4gcmVsZWFzZWQuCiAgICAgICAgIGZvciAoRWxlbWVudCogY3VycmVudEVsZW1lbnQg
PSBvbGRBY3RpdmVFbGVtZW50OyBjdXJyZW50RWxlbWVudDsgY3VycmVudEVsZW1lbnQgPSBjdXJy
ZW50RWxlbWVudC0+cGFyZW50RWxlbWVudEluQ29tcG9zZWRUcmVlKCkpIHsKICAgICAgICAgICAg
IGN1cnJlbnRFbGVtZW50LT5zZXRBY3RpdmUoZmFsc2UpOwotICAgICAgICAgICAgbV91c2VyQWN0
aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbihjdXJyZW50RWxlbWVudCwgZmFsc2UpOworICAg
ICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbigqY3VycmVudEVs
ZW1lbnQsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBtX2FjdGl2ZUVsZW1lbnQgPSBudWxs
cHRyOwogICAgIH0gZWxzZSB7CkBAIC02NzIyLDcgKzY3MTUsNyBAQCB2b2lkIERvY3VtZW50Ojp1
cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBFbGVt
ZW50KiBpbgogICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBjdXJyLT5lbGVtZW50
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGN1cnItPmlzVGV4dE9yTGluZUJy
ZWFrKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG1f
dXNlckFjdGlvbkVsZW1lbnRzLnNldEluQWN0aXZlQ2hhaW4oZWxlbWVudCwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgbV91c2VyQWN0aW9uRWxlbWVudHMuc2V0SW5BY3RpdmVDaGFpbigqZWxlbWVu
dCwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fYWN0aXZlRWxlbWVudCA9
IG5ld0FjdGl2ZUVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDZiYWYzZGJiZjk3M2Zl
ODFhYTA3MGJkNTRmMjk0NWU5ZTU2MTJhZGQuLjgzN2E2NTdhZjc1MjNjMGRmNzQyNjdhY2JmNjkx
MDA0MjU1M2I5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03MjYsOCArNzI2LDggQEAgcHVi
bGljOgogICAgIEVsZW1lbnQqIGZvY3VzTmF2aWdhdGlvblN0YXJ0aW5nTm9kZShGb2N1c0RpcmVj
dGlvbikgY29uc3Q7CiAKICAgICB2b2lkIHJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKE5vZGUm
LCBib29sIGFtb25nQ2hpbGRyZW5Pbmx5ID0gZmFsc2UpOwotICAgIHZvaWQgaG92ZXJlZEVsZW1l
bnREaWREZXRhY2goRWxlbWVudCopOwotICAgIHZvaWQgZWxlbWVudEluQWN0aXZlQ2hhaW5EaWRE
ZXRhY2goRWxlbWVudCopOworICAgIHZvaWQgaG92ZXJlZEVsZW1lbnREaWREZXRhY2goRWxlbWVu
dCYpOworICAgIHZvaWQgZWxlbWVudEluQWN0aXZlQ2hhaW5EaWREZXRhY2goRWxlbWVudCYpOwog
CiAgICAgdm9pZCB1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
RWxlbWVudCopOwogCkBAIC03NTQsMTIgKzc1NCwxMiBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEludmFsaWRhdGlvbkZ1bmN0aW9uPgogICAgIHZvaWQgaW52YWxpZGF0ZU5vZGVM
aXN0QW5kQ29sbGVjdGlvbkNhY2hlcyhJbnZhbGlkYXRpb25GdW5jdGlvbik7CiAKLSAgICB2b2lk
IGF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqKTsKLSAgICB2b2lkIGRldGFjaE5vZGVJ
dGVyYXRvcihOb2RlSXRlcmF0b3IqKTsKKyAgICB2b2lkIGF0dGFjaE5vZGVJdGVyYXRvcihOb2Rl
SXRlcmF0b3ImKTsKKyAgICB2b2lkIGRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3ImKTsK
ICAgICB2b2lkIG1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudChOb2RlJiwgRG9jdW1lbnQm
KTsKIAotICAgIHZvaWQgYXR0YWNoUmFuZ2UoUmFuZ2UqKTsKLSAgICB2b2lkIGRldGFjaFJhbmdl
KFJhbmdlKik7CisgICAgdm9pZCBhdHRhY2hSYW5nZShSYW5nZSYpOworICAgIHZvaWQgZGV0YWNo
UmFuZ2UoUmFuZ2UmKTsKIAogICAgIHZvaWQgdXBkYXRlUmFuZ2VzQWZ0ZXJDaGlsZHJlbkNoYW5n
ZWQoQ29udGFpbmVyTm9kZSYpOwogICAgIC8vIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQgaXMg
dXNlZCB3aGVuIHJlbW92aW5nIGFsbCBub2RlIGNoaWxkcmVuIGF0IG9uY2UuCkBAIC03NzAsMTMg
Kzc3MCwxMyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBBY2NlcHRDaGlsZE9wZXJhdGlvbiB7
IFJlcGxhY2UsIEluc2VydE9yQWRkIH07CiAgICAgYm9vbCBjYW5BY2NlcHRDaGlsZChjb25zdCBO
b2RlJiBuZXdDaGlsZCwgY29uc3QgTm9kZSogcmVmQ2hpbGQsIEFjY2VwdENoaWxkT3BlcmF0aW9u
KSBjb25zdDsKIAotICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlKiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKFRleHQq
IG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQq
IG9sZE5vZGUpOworICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlJiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKFRleHQm
IG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgdm9pZCB0ZXh0Tm9kZVNwbGl0KFRleHQm
IG9sZE5vZGUpOwogCiAgICAgdm9pZCBjcmVhdGVET01XaW5kb3coKTsKLSAgICB2b2lkIHRha2VE
T01XaW5kb3dGcm9tKERvY3VtZW50Kik7CisgICAgdm9pZCB0YWtlRE9NV2luZG93RnJvbShEb2N1
bWVudCYpOwogCiAgICAgRE9NV2luZG93KiBkb21XaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2Rv
bVdpbmRvdy5nZXQoKTsgfQogICAgIC8vIEluIERPTSBMZXZlbCAyLCB0aGUgRG9jdW1lbnQncyBE
T01XaW5kb3cgaXMgY2FsbGVkIHRoZSBkZWZhdWx0Vmlldy4KQEAgLTg0Nyw3ICs4NDcsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwcm9jZXNzUmVmZXJyZXJQb2xpY3koY29uc3QgU3RyaW5nJiBwb2xp
Y3kpOwogCiAgICAgLy8gUmV0dXJucyB0aGUgb3duaW5nIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBk
b2N1bWVudC4KLSAgICAvLyBSZXR1cm5zIDAgaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsIGRvY3Vt
ZW50LgorICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWwgZG9j
dW1lbnQuCiAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQoKSBjb25zdDsK
IAogICAgIC8vIFVzZWQgYnkgRE9NIGJpbmRpbmdzOyBubyBkaXJlY3Rpb24ga25vd24uCkBAIC05
NDEsMTcgKzk0MSwxNyBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnQqIHBhcmVudERvY3VtZW50KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQmIHRvcERvY3VtZW50KCkgY29uc3Q7
CiAgICAgCi0gICAgU2NyaXB0UnVubmVyKiBzY3JpcHRSdW5uZXIoKSB7IHJldHVybiBtX3Njcmlw
dFJ1bm5lci5nZXQoKTsgfQotICAgIFNjcmlwdE1vZHVsZUxvYWRlciogbW9kdWxlTG9hZGVyKCkg
eyByZXR1cm4gbV9tb2R1bGVMb2FkZXIuZ2V0KCk7IH0KKyAgICBTY3JpcHRSdW5uZXImIHNjcmlw
dFJ1bm5lcigpIHsgcmV0dXJuICptX3NjcmlwdFJ1bm5lcjsgfQorICAgIFNjcmlwdE1vZHVsZUxv
YWRlciYgbW9kdWxlTG9hZGVyKCkgeyByZXR1cm4gKm1fbW9kdWxlTG9hZGVyOyB9CiAKICAgICBI
VE1MU2NyaXB0RWxlbWVudCogY3VycmVudFNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuICFtX2N1cnJl
bnRTY3JpcHRTdGFjay5pc0VtcHR5KCkgPyBtX2N1cnJlbnRTY3JpcHRTdGFjay5sYXN0KCkuZ2V0
KCkgOiBudWxscHRyOyB9CiAgICAgdm9pZCBwdXNoQ3VycmVudFNjcmlwdChIVE1MU2NyaXB0RWxl
bWVudCopOwogICAgIHZvaWQgcG9wQ3VycmVudFNjcmlwdCgpOwogCiAjaWYgRU5BQkxFKFhTTFQp
Ci0gICAgdm9pZCBhcHBseVhTTFRyYW5zZm9ybShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHBpKTsK
KyAgICB2b2lkIGFwcGx5WFNMVHJhbnNmb3JtKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYpOwogICAg
IFJlZlB0cjxEb2N1bWVudD4gdHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSB7IHJldHVybiBtX3Ry
YW5zZm9ybVNvdXJjZURvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1
bWVudChEb2N1bWVudCogZG9jKSB7IG1fdHJhbnNmb3JtU291cmNlRG9jdW1lbnQgPSBkb2M7IH0K
KyAgICB2b2lkIHNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkg
eyBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50ID0gZG9jdW1lbnQ7IH0KIAogICAgIHZvaWQgc2V0
VHJhbnNmb3JtU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxUcmFuc2Zvcm1Tb3VyY2U+KTsKICAgICBU
cmFuc2Zvcm1Tb3VyY2UqIHRyYW5zZm9ybVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNm
b3JtU291cmNlLmdldCgpOyB9CkBAIC05OTIsMTcgKzk5MiwxNSBAQCBwdWJsaWM6CiAgICAgUGFn
ZUNhY2hlU3RhdGUgcGFnZUNhY2hlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDYWNoZVN0
YXRlOyB9CiAgICAgdm9pZCBzZXRQYWdlQ2FjaGVTdGF0ZShQYWdlQ2FjaGVTdGF0ZSk7CiAKLSAg
ICAvLyBFbGVtZW50cyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyBmb3IgdGhlICJzdXNwZW5kKCki
IGFuZAotICAgIC8vICJyZXN1bWUoKSIgY2FsbGJhY2tzCi0gICAgdm9pZCByZWdpc3RlckZvckRv
Y3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmKTsKKyAgICB2b2lkIHVu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYpOwogCiAgICAg
dm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOwogICAgIHZvaWQgc3VzcGVuZChBY3Rp
dmVET01PYmplY3Q6OlJlYXNvbkZvclN1c3BlbnNpb24pOwogICAgIHZvaWQgcmVzdW1lKEFjdGl2
ZURPTU9iamVjdDo6UmVhc29uRm9yU3VzcGVuc2lvbik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9y
TWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvck1l
ZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yTWVkaWFW
b2x1bWVDYWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvck1lZGlhVm9s
dW1lQ2FsbGJhY2tzKEVsZW1lbnQmKTsKICAgICB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7
CiAKICAgICBib29sIGF1ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgY29uc3Q7CkBA
IC0xMDEyLDI4ICsxMDEwLDI4IEBAIHB1YmxpYzoKICAgICBNZWRpYVNlc3Npb24mIGRlZmF1bHRN
ZWRpYVNlc3Npb24oKTsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3RlckZvclByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2
b2lkIHJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1l
bnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRD
YWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVEaWRDaGFu
Z2UoKTsKICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCi0gICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNl
c0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRp
b25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0
ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1l
bnQmKTsKICAgICB2b2lkIGNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKLSAgICB2b2lkIHJlZ2lzdGVyRm9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Kik7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFF
bGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxs
YmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgcGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwogICAgIHZvaWQgcmVnaXN0ZXJGb3JVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50
Jik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyRm9yVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNo
YW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYpOwogICAgIHZvaWQgdXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbkNoYW5nZWQoKTsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3RlckZv
clZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCop
OwotICAgIHZvaWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
VmlzaWJpbGl0eUNoYW5nZUNsaWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JWaXNpYmlsaXR5
U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQmKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlD
aGFuZ2VDbGllbnQmKTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHJlZ2lzdGVyRm9y
QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVk
aWFFbGVtZW50Jik7CkBAIC0xMDg0LDggKzEwODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNw
YXRjaFBvcHN0YXRlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBzdGF0ZU9i
amVjdCk7CiAgICAgRG9jdW1lbnRFdmVudFF1ZXVlJiBldmVudFF1ZXVlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9ldmVudFF1ZXVlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXIqKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlz
dGVuZXIqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cihNZWRpYUNhblN0YXJ0TGlzdGVuZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92
ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcihNZWRpYUNhblN0YXJ0TGlzdGVuZXImKTsKICAgICBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIqIHRha2VBbnlNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKTsKIAogI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKQEAgLTExMDIsMTcgKzExMDAsMTcgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqLCBGdWxsU2NyZWVu
Q2hlY2tUeXBlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdENhbmNlbEZ1bGxTY3Jl
ZW4oKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtp
dERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
RWxlbWVudCopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNj
cmVlbihFbGVtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXREaWRFbnRlckZ1
bGxTY3JlZW4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNj
cmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4o
KTsKICAgICAKICAgICB2b2lkIHNldEZ1bGxTY3JlZW5SZW5kZXJlcihSZW5kZXJGdWxsU2NyZWVu
Kik7CiAgICAgUmVuZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9mdWxsU2NyZWVuUmVuZGVyZXI7IH0KICAgICB2b2lkIGZ1bGxTY3JlZW5SZW5kZXJl
ckRlc3Ryb3llZCgpOwogICAgIAogICAgIHZvaWQgZnVsbFNjcmVlbkNoYW5nZURlbGF5VGltZXJG
aXJlZCgpOwotICAgIGJvb2wgZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoRWxlbWVudCop
IGNvbnN0OworICAgIGJvb2wgZnVsbFNjcmVlbklzQWxsb3dlZChFbGVtZW50JikgY29uc3Q7CiAg
ICAgdm9pZCBmdWxsU2NyZWVuRWxlbWVudFJlbW92ZWQoKTsKICAgICB2b2lkIHJlbW92ZUZ1bGxT
Y3JlZW5FbGVtZW50T2ZTdWJ0cmVlKE5vZGUmLCBib29sIGFtb25nQ2hpbGRyZW5Pbmx5ID0gZmFs
c2UpOwogICAgIGJvb2wgaXNBbmltYXRpbmdGdWxsU2NyZWVuKCkgY29uc3Q7CkBAIC0xMTM5LDgg
KzExMzcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJ
T04pICYmIFBMQVRGT1JNKElPUykKLSAgICBEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBkZXZpY2VN
b3Rpb25Db250cm9sbGVyKCkgY29uc3Q7Ci0gICAgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVy
KiBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsKKyAgICBEZXZpY2VNb3Rpb25D
b250cm9sbGVyJiBkZXZpY2VNb3Rpb25Db250cm9sbGVyKCkgY29uc3Q7CisgICAgRGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyJiBkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdDsK
ICNlbmRpZgogCiAgICAgY29uc3QgRG9jdW1lbnRUaW1pbmcmIHRpbWluZygpIGNvbnN0IHsgcmV0
dXJuIG1fZG9jdW1lbnRUaW1pbmc7IH0KQEAgLTEyNzEsOCArMTI2OSw4IEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc1N0eWxlV2l0aFZpZXdwb3J0VW5pdHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1N0
eWxlV2l0aFZpZXdwb3J0VW5pdHM7IH0KICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0VW5pdHNPblJl
c2l6ZSgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1Byb2R1Y2VyKE1lZGlh
UHJvZHVjZXIqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1ZGlvUHJvZHVjZXIo
TWVkaWFQcm9kdWNlciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQXVkaW9Qcm9kdWNl
cihNZWRpYVByb2R1Y2VyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBdWRpb1By
b2R1Y2VyKE1lZGlhUHJvZHVjZXImKTsKICAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxh
Z3MgbWVkaWFTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFTdGF0ZTsgfQogICAgIHZvaWQg
bm90ZVVzZXJJbnRlcmFjdGlvbldpdGhNZWRpYUVsZW1lbnQoKTsKICAgICBib29sIGlzQ2FwdHVy
aW5nKCkgY29uc3QgeyByZXR1cm4gTWVkaWFQcm9kdWNlcjo6aXNDYXB0dXJpbmcobV9tZWRpYVN0
YXRlKTsgfQpAQCAtMTQxNyw3ICsxNDE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRp
dGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mKTsKICAgICB2b2lkIHVwZGF0ZUJhc2VVUkwo
KTsKIAotICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlKiByb290KTsKKyAgICB2
b2lkIGJ1aWxkQWNjZXNzS2V5TWFwKFRyZWVTY29wZSYgcm9vdCk7CiAKICAgICB2b2lkIGxvYWRF
dmVudERlbGF5VGltZXJGaXJlZCgpOwogCkBAIC0xNDMwLDggKzE0MjgsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlzcGF0Y2hGdWxsU2NyZWVuQ2hhbmdlT3JFcnJvckV2ZW50KERlcXVlPFJlZlB0
cjxOb2RlPj4mLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgYm9vbCBzaG91bGROb3Rp
ZnlNZWRpYUVsZW1lbnQpOwogICAgIHZvaWQgY2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7
CiAgICAgdm9pZCBwb3BGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7Ci0gICAgdm9pZCBwdXNoRnVs
bHNjcmVlbkVsZW1lbnRTdGFjayhFbGVtZW50Kik7Ci0gICAgdm9pZCBhZGREb2N1bWVudFRvRnVs
bFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoRG9jdW1lbnQqKTsKKyAgICB2b2lkIHB1c2hGdWxsc2Ny
ZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQmKTsKKyAgICB2b2lkIGFkZERvY3VtZW50VG9GdWxsU2Ny
ZWVuQ2hhbmdlRXZlbnRRdWV1ZShEb2N1bWVudCYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVEVM
RVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDkxNGM0NWJlOTM0NzU1NTlmZTZmN2M1OTkzZThl
NzBjMTVjZjA4YjkuLmQ0ZDZkNDM5NTg5NTYyZTc3ZDFhODRkOWFmYjEzMDBlMzRlMDkwZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBA
IC02Miw5OSArNjIsOTkgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmRldGFjaCgp
CiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMgPSB7IH07CiB9CiAKLXZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQordm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCiB7Ci0g
ICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
ewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsK
LSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50
TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZz
ZXQoKSwgZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRD
b250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgp
LCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbikpOwogICAgIH0KIH0KIAotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyKFJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlw
ZSkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRl
eHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRv
ciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2
YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5y
YW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2Ut
PmVuZE9mZnNldCgpKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFp
bmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4
dFBpZWNlLT5lbmRPZmZzZXQoKSkpOwogICAgIH0KIAogfQogCi12b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCit2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUmIG5vZGUs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUpCiB7CiAgICAgYWRkTWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5
cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIGxlbmd0aCkpOwogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9j
dW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQogewogICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgsIFdURk1vdmUo
ZGF0YSkpKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRj
aE1hcmtlcihjb25zdCBSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5n
ZSwgYm9vbCBhY3RpdmVNYXRjaCkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0
KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAg
ICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBp
ZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
dGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0
YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFj
dGl2ZU1hdGNoKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIERvY3VtZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZU1hdGNoKSk7
CiAgICAgfQogfQogCiAjaWYgUExBVEZPUk0oSU9TKQogCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCit2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFJhbmdlJiByYW5nZSwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0
YWRhdGEpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJr
ZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRl
cmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0
LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRl
eHQucmFuZ2UoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBp
ZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVycHJldGF0aW9ucywgbWV0YWRhdGEp
KTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1l
bnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9m
ZnNldCgpLCBkZXNjcmlwdGlvbiwgaW50ZXJwcmV0YXRpb25zLCBtZXRhZGF0YSkpOwogICAgIH0K
IH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW50ZXJwcmV0YXRpb25zKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zKQogewogICAgIEFTU0VSVChpbnRlcnByZXRhdGlv
bnMuc2l6ZSgpID4gMSk7CiAgICAgaWYgKGludGVycHJldGF0aW9ucy5zaXplKCkgPD0gMSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IG51bWJlck9mQWx0ZXJuYXRpdmVzID0gaW50ZXJw
cmV0YXRpb25zLnNpemUoKSAtIDE7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChy
YW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAg
Zm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgp
OyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVj
ZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyKERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCB0ZXh0UGllY2Ut
PnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGVtcHR5U3RyaW5nKCksIFZl
Y3RvcjxTdHJpbmc+KG51bWJlck9mQWx0ZXJuYXRpdmVzKSwgUmV0YWluUHRyPGlkPigpKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkFsdGVybmF0aXZlczsgKytpKQog
ICAgICAgICAgICAgbWFya2VyLnNldEFsdGVybmF0aXZlKGludGVycHJldGF0aW9uc1tpICsgMV0s
IGkpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgbWFy
a2VyKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgbWFy
a2VyKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0
YXRpb25SZXN1bHRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRh
ZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25SZXN1bHRN
YXJrZXIoUmFuZ2UmIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKIHsKLSAg
ICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQo
KTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRU
ZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7
CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwot
ICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRN
YXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCwgdGV4dFBpZWNlLT5zdGFydE9m
ZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4o
KSwgbWV0YWRhdGEpKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWlu
ZXIoKSwgRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCwgdGV4
dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBTdHJpbmcoKSwg
VmVjdG9yPFN0cmluZz4oKSwgbWV0YWRhdGEpKTsKICAgICB9CiB9CiAKICNlbmRpZgogCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmVmUHRy
PFJhbmdlPiByYW5nZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2Vk
Q29udGVudE1hcmtlcihSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFy
a2VkVGV4dChyYW5nZS5nZXQoKSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2
YW5jZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5y
YW5nZSgpOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtl
ZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICAgICAgYXV0byB0ZXh0
UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIERvY3VtZW50TWFya2VyOjpEcmFn
Z2VkQ29udGVudERhdGEgZHJhZ2dlZENvbnRlbnREYXRhIHsgbWFya2VkVGV4dC5ub2RlKCkgfTsK
LSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1l
bnRNYXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQ
aWVjZS0+ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRhKSB9KTsKKyAgICAg
ICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBEb2N1bWVudE1hcmtl
cjo6RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5l
bmRPZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOwogICAgIH0KIH0KIAot
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFuZ2UqIHJhbmdl
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3Vs
ZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQogewotICAgIGZvciAoVGV4dEl0ZXJh
dG9yIG1hcmtlZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFk
dmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1h
cmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKCFw
b3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgICAgIFJlZlB0cjxSYW5n
ZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOworICAgICAgICBhdXRvIHRleHRQaWVj
ZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0
ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHRl
eHRQaWVjZS0+ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIHJlbW92ZU1hcmtlcnMoJnRleHRQaWVjZS0+
c3RhcnRDb250YWluZXIoKSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBt
YXJrZXJUeXBlcywgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAg
ICAgICByZW1vdmVNYXJrZXJzKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBlcywgc2hvdWxkUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwogICAgIH0KIH0KIApAQCAtMzE5LDEzICszMTksMTMg
QEAgc3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihjb25zdCBEb2N1bWVu
dE1hcmtlciYgbmV3TWFya2VyKQogLy8gTWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyIHNvcnRl
ZCBieSB0aGVpciBzdGFydCBvZmZzZXQuCiAvLyBNYXJrZXJzIG9mIHRoZSBzYW1lIHR5cGUgZG8g
bm90IG92ZXJsYXAgZWFjaCBvdGhlci4KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKSAK
K3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSYgbm9kZSwgY29u
c3QgRG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikKIHsKICAgICBBU1NFUlQobmV3TWFya2VyLmVu
ZE9mZnNldCgpID49IG5ld01hcmtlci5zdGFydE9mZnNldCgpKTsKICAgICBpZiAobmV3TWFya2Vy
LmVuZE9mZnNldCgpID09IG5ld01hcmtlci5zdGFydE9mZnNldCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKSB7CisgICAgaWYg
KGF1dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBG
YWN0b3IgdGhlIG1hcmtlciBwYWludGluZyBjb2RlIG91dCBvZiBJbmxpbmVUZXh0Qm94IGFuZCB0
ZWFjaCBzaW1wbGUgbGluZSBsYXlvdXQgdG8gdXNlIGl0LgogICAgICAgICBpZiAoaXM8UmVuZGVy
VGV4dD4oKnJlbmRlcmVyKSkKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5k
ZXJlcikuZW5zdXJlTGluZUJveGVzKCk7CkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlKiBub2RlLCBjb25zdCBEb2N1bWVudE1h
cmtlciYgbmV3TWEKIAogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzIHw9IG5ld01h
cmtlci50eXBlKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBt
X21hcmtlcnMuYWRkKG5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKICAgICAgICAgbGlzdCA9IHN0
ZDo6bWFrZV91bmlxdWU8TWFya2VyTGlzdD4oKTsKQEAgLTM5MCwxNSArMzkwLDE1IEBAIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9j
dW1lbnRNYXJrZXImIG5ld01hCiAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKHRvSW5zZXJ0KSk7CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkp
Ci0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAobm9kZS5yZW5k
ZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIAotICAgIGludmFs
aWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgIGludmFsaWRhdGVSZWN0c0Zv
ck1hcmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKIC8vIGNvcGllcyBtYXJrZXJzIGZyb20gc3JjTm9k
ZSB0byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBj
b3BpZXMuICBUaGUgc2hpZnQgaXMKIC8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMg
Y3JlYXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNy
Y05vZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSog
c3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUs
IGludCBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhO
b2RlJiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0
Tm9kZSwgaW50IGRlbHRhKQogewogICAgIGlmIChsZW5ndGggPD0gMCkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5
TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0
KiBsaXN0ID0gbV9tYXJrZXJzLmdldChzcmNOb2RlKTsKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
bV9tYXJrZXJzLmdldCgmc3JjTm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47
CiAKQEAgLTQzMywxMSArNDMzLDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpj
b3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAgICAgICAg
YWRkTWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYm
IGRzdE5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIGRzdE5vZGUtPnJlbmRlcmVyKCktPnJlcGFp
bnQoKTsKKyAgICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS5yZW5kZXJlcigpKQorICAgICAgICBk
c3ROb2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2Vy
VHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxl
bmd0aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywg
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcikKIHsKICAgICBpZiAobGVuZ3RoIDw9IDApCiAgICAgICAgIHJl
dHVybjsKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKCEobV9tYXJrZXJzLmlzRW1wdHkoKSkpOwogCi0gICAgTWFy
a2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2VyTGlzdCogbGlz
dCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC00OTMsMTMgKzQ5MywxMyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgIH0K
IAogICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9tYXJrZXJzLnJlbW92ZShu
b2RlKTsKKyAgICAgICAgbV9tYXJrZXJzLnJlbW92ZSgmbm9kZSk7CiAgICAgICAgIGlmIChtX21h
cmtlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlw
ZXMgPSB7IH07CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUtPnJlbmRlcmVyKCkp
Ci0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAoZG9jRGlydHkg
JiYgbm9kZS5yZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
IH0KIAogRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29u
dGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTUyMywxMyArNTIzLDEzIEBAIERvY3VtZW50TWFya2Vy
KiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBM
YXlvdXRQb2luCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3RvcjxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUqIG5v
ZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitW
ZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2Vyc0ZvcihOb2RlJiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IG1hcmtlclR5cGVzKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5
cGVzKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4gcmVzdWx0OwotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5v
ZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBp
ZiAoIWxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTU1Myw3ICs1NTMsNyBAQCBW
ZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2Vyc0luUmFuZ2UoUmFuZ2UmCiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5w
YXN0TGFzdE5vZGUoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsg
bm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkg
ewotICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKKyAgICAg
ICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICAgICAg
aWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYg
bWFya2VyLT5lbmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydE9mZnNldCgpKQpAQCAtNTY2LDEzICs1
NjYsMTMgQEAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlJgogICAgIHJldHVybiBmb3VuZE1hcmtlcnM7
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUq
IG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMp
Cit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2Rl
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQogewog
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAgICAgCi0gICAgTWFya2VyTWFw
OjppdGVyYXRvciBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOworICAgIE1hcmtlck1h
cDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX21hcmtlcnMuZmluZCgmbm9kZSk7CiAgICAgaWYgKGl0
ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0
KGl0ZXJhdG9yLCBtYXJrZXJUeXBlcyk7CiB9CkBAIC02NjMsMTMgKzY2MywxMyBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeQogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRl
bHRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBu
b2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKQogewogICAgIGlmICghcG9zc2li
bHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3Qq
IGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21h
cmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NjgwLDcgKzY4MCw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtl
cnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgICAgICBpbnQgdGFyZ2V0U3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKSAr
IGRlbHRhOwogICAgICAgICBpbnQgdGFyZ2V0RW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgp
ICsgZGVsdGE7Ci0gICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLT5tYXhDaGFy
YWN0ZXJPZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkgeworICAgICAgICBpZiAodGFy
Z2V0U3RhcnRPZmZzZXQgPj0gbm9kZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSB8fCB0YXJnZXRFbmRP
ZmZzZXQgPD0gMCkgewogICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KQEAgLTY5OSw3ICs2OTksNyBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbgogICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZz
ZXQodGFyZ2V0RW5kT2Zmc2V0IDwgbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgPyB0YXJnZXRF
bmRPZmZzZXQgOiBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSk7CisgICAgICAgICAgICBtYXJr
ZXIuc2V0RW5kT2Zmc2V0KHRhcmdldEVuZE9mZnNldCA8IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0
KCkgPyB0YXJnZXRFbmRPZmZzZXQgOiBub2RlLm1heENoYXJhY3Rlck9mZnNldCgpKTsKICAgICAg
ICAgICAgIGRpZFNoaWZ0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC03MDcs
MzQgKzcwNywzNCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJz
KE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgIH0KIAogICAgIGlmIChk
aWRTaGlmdE1hcmtlcikgewotICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2Rl
KCpub2RlKTsKKyAgICAgICAgaW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShub2RlKTsK
IAotICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIG5vZGUtPnJlbmRl
cmVyKCktPnJlcGFpbnQoKTsKKyAgICAgICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAg
ICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFj
dGl2ZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJh
bmdlJiByYW5nZSwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSBy
YW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+
ZW5kQ29udGFpbmVyKCk7CisgICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENv
bnRhaW5lcigpOworICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigp
OwogCi0gICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOworICAg
IE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwogCi0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIgPyByYW5nZS0+c3RhcnRPZmZzZXQoKSA6
IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lciA/
IHJhbmdlLT5lbmRPZmZzZXQoKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKLSAgICAgICAgc2V0TWFya2Vyc0FjdGl2ZShub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LCBhY3RpdmUpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRDb250YWluZXIgPyBy
YW5nZS5zdGFydE9mZnNldCgpIDogMDsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9k
ZSA9PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0KCkgOiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgIHNldE1hcmtlcnNBY3RpdmUoKm5vZGUsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZSkKK3ZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUmIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgYWN0aXZlKQogewotICAgIE1h
cmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNzUyLDggKzc1Miw4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpz
ZXRNYXJrZXJzQWN0aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0CiAgICAgICAg
IGRpZEFjdGl2YXRlTWFya2VyID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZGlkQWN0aXZhdGVN
YXJrZXIgJiYgbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVw
YWludCgpOworICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtlciAmJiBub2RlLnJlbmRlcmVyKCkpCisg
ICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCiBib29sIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6aGFzTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCkBAIC03NjcsNyArNzY3LDcgQEAgYm9v
bCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRp
b25TZXQ8RG9jdW1lbnRNYXJrZXIKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBh
c3RMYXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBu
b2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7
Ci0gICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgeworICAgICAg
ICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUpKSB7CiAgICAgICAgICAgICBp
ZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5lciAmJiBt
YXJrZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5zdGFydE9m
ZnNldCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aAppbmRleCA5MDA3YTE4NzNhZDU5YzFkY2NjYTUyNzZlODk0NmViNGVlNWE5MTBhLi5hZmVhNzZh
MWFhYzA5MGQxODZkZjU4ZTc2N2Q2ZjY2YTk4NjY0OTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDgsMTkgKzQ4LDE5IEBAIHB1YmxpYzoK
ICAgICB+RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKCk7CiAKICAgICB2b2lkIGRldGFjaCgpOwot
ICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwot
ICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUq
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSosIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBE
b2N1bWVudE1hcmtlcjo6RGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRN
YXRjaE1hcmtlcihjb25zdCBSYW5nZSosIGJvb2wgYWN0aXZlTWF0Y2gpOworICAgIHZvaWQgYWRk
TWFya2VyKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRk
TWFya2VyKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYg
ZGVzY3JpcHRpb24pOworICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUmLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7
CisgICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtl
cjo6RGF0YSYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihj
b25zdCBSYW5nZSYsIGJvb2wgYWN0aXZlTWF0Y2gpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICB2
b2lkIGFkZE1hcmtlcihSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25z
LCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGludGVycHJldGF0aW9ucyk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoUmFu
Z2UqLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7CisgICAgdm9pZCBhZGRNYXJrZXIo
UmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlw
dGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWlu
UHRyPGlkPiYgbWV0YWRhdGEpOworICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlc01hcmtlcihSYW5nZSYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlv
bnMpOworICAgIHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlJiwgY29uc3QgUmV0
YWluUHRyPGlkPiYgbWV0YWRhdGEpOwogI2VuZGlmCi0gICAgdm9pZCBhZGREcmFnZ2VkQ29udGVu
dE1hcmtlcihSZWZQdHI8UmFuZ2U+KTsKKyAgICB2b2lkIGFkZERyYWdnZWRDb250ZW50TWFya2Vy
KFJhbmdlJik7CiAKLSAgICB2b2lkIGNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlKiBkc3ROb2RlLCBpbnQgZGVsdGEpOworICAg
IHZvaWQgY29weU1hcmtlcnMoTm9kZSYgc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGlu
dCBsZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGludCBkZWx0YSk7CiAgICAgYm9vbCBoYXNNYXJrZXJz
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFt
X3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5jb250YWlucyhEb2N1bWVudE1hcmtlcjo6YWxs
TWFya2VycygpKSk7CkBAIC03MiwxNyArNzIsMTcgQEAgcHVibGljOgogICAgIC8vIHJlbW92ZSB0
aGUgbWFya2VyLiBJZiB0aGUgYXJndW1lbnQgaXMgZmFsc2UsIHdlIHdpbGwgYWRqdXN0IHRoZSBz
cGFuIG9mIHRoZSBtYXJrZXIgc28gdGhhdCBpdCByZXRhaW5zCiAgICAgLy8gdGhlIHBvcnRpb24g
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZS4KICAgICBlbnVtIFJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyT3JOb3QgeyBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlciB9OwotICAgIHZvaWQgcmVtb3Zl
TWFya2VycyhSYW5nZSosIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAg
dm9pZCByZW1vdmVNYXJrZXJzKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0
aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2Vy
OjphbGxNYXJrZXJzKCksICBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0g
RG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgdm9pZCByZW1vdmVN
YXJrZXJzKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERv
Y3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICB2
b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3Ro
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6
OmFsbE1hcmtlcnMoKSwgIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBE
b05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlTWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7Ci0gICAgdm9pZCByZW1vdmVNYXJr
ZXJzKE5vZGUqLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1l
bnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSk7CiAgICAgdm9pZCByZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7Ci0gICAg
dm9pZCBzaGlmdE1hcmtlcnMoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEp
OwotICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShSYW5nZSosIGJvb2wpOwotICAgIHZvaWQgc2V0
TWFya2Vyc0FjdGl2ZShOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgYm9vbCk7CisgICAgdm9pZCBzaGlmdE1hcmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpbnQgZGVsdGEpOworICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYsIGJv
b2wpOworICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNGb3IoTm9kZSosIE9wdGlvblNldDxE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2Vycygp
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1h
cmtlcnNGb3IoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CiAgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+KTsKIApAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKLSAgICB2b2lkIGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXIm
KTsKKyAgICB2b2lkIGFkZE1hcmtlcihOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKIAog
ICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxpc3Q7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxp
c3Q+PiBNYXJrZXJNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggNjg5NTRmNTJlYzNmZGY1
Mjc3MjkwODJlOGIyMTE0NDhiNTI2YzEyYS4uYTFlZDY3YWJkNTRhNzBlYWU1OWUyMDdlOTc5NTNk
ODMxOTc2ZmFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIEVs
ZW1lbnQ6On5FbGVtZW50KCkKICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW1lbnQo
KTsKIAogICAgIGlmIChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKLSAgICAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2Vz
KHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVF
bGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogICAgICAgICBBU1NFUlQoIWhhc1Bl
bmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgfQogfQpAQCAtNTM3LDI1ICs1MzcsMjUgQEAgYm9vbCBF
bGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVs
ZW1lbnRJbkFjdGl2ZUNoYWluKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxl
bWVudCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0lu
QWN0aXZlQ2hhaW4odGhpcyk7CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1l
bnRzKCkuaXNJbkFjdGl2ZUNoYWluKCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1VzZXJB
Y3Rpb25FbGVtZW50QWN0aXZlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxl
bWVudCgpKTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0Fj
dGl2ZSh0aGlzKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5p
c0FjdGl2ZSgqdGhpcyk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aXNVc2VyQWN0aW9uRWxlbWVudEZv
Y3VzZWQoKSBjb25zdAogewogICAgIEFTU0VSVChpc1VzZXJBY3Rpb25FbGVtZW50KCkpOwotICAg
IHJldHVybiBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmlzRm9jdXNlZCh0aGlzKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0ZvY3VzZWQoKnRo
aXMpOwogfQogCiBib29sIEVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRIb3ZlcmVkKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoaXNVc2VyQWN0aW9uRWxlbWVudCgpKTsKLSAgICByZXR1cm4gZG9j
dW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5pc0hvdmVyZWQodGhpcyk7CisgICAgcmV0dXJu
IGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNIb3ZlcmVkKCp0aGlzKTsKIH0KIAog
dm9pZCBFbGVtZW50OjpzZXRBY3RpdmUoYm9vbCBmbGFnLCBib29sIHBhdXNlKQpAQCAtNTYzLDcg
KzU2Myw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZmxhZywgYm9vbCBwYXVzZSkK
ICAgICBpZiAoZmxhZyA9PSBhY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1l
bnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRBY3RpdmUodGhpcywgZmxhZyk7CisgICAgZG9j
dW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5zZXRBY3RpdmUoKnRoaXMsIGZsYWcpOwogCiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gdGhpcy0+cmVuZGVyU3R5bGUoKTsK
ICAgICBib29sIHJlYWN0c1RvUHJlc3MgPSAocmVuZGVyU3R5bGUgJiYgcmVuZGVyU3R5bGUtPmFm
ZmVjdGVkQnlBY3RpdmUoKSkgfHwgc3R5bGVBZmZlY3RlZEJ5QWN0aXZlKCk7CkBAIC02MTIsNyAr
NjEyLDcgQEAgdm9pZCBFbGVtZW50OjpzZXRGb2N1cyhib29sIGZsYWcpCiAgICAgaWYgKGZsYWcg
PT0gZm9jdXNlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rp
b25FbGVtZW50cygpLnNldEZvY3VzZWQodGhpcywgZmxhZyk7CisgICAgZG9jdW1lbnQoKS51c2Vy
QWN0aW9uRWxlbWVudHMoKS5zZXRGb2N1c2VkKCp0aGlzLCBmbGFnKTsKICAgICBpbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CiAKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBl
bGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudEluQ29tcG9zZWRUcmVlKCkp
CkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wgZmxhZykK
ICAgICBpZiAoZmxhZyA9PSBob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3Vt
ZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuc2V0SG92ZXJlZCh0aGlzLCBmbGFnKTsKKyAgICBk
b2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLnNldEhvdmVyZWQoKnRoaXMsIGZsYWcpOwog
CiAgICAgaWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFdoZW4gc2V0dGluZyBob3ZlciB0
byBmYWxzZSwgdGhlIHN0eWxlIG5lZWRzIHRvIGJlIHJlY2FsYydkIGV2ZW4gd2hlbgpAQCAtMTYw
OSwxNiArMTYwOSwxNiBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogICAg
IHJldHVybiBlbGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmxlbmd0aCgpOwogfQogCi1i
b29sIEVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVy
KSBjb25zdAorYm9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVt
ZW50JiBvdGhlcikgY29uc3QKIHsKICAgICBzeW5jaHJvbml6ZUFsbEF0dHJpYnV0ZXMoKTsKLSAg
ICBvdGhlci0+c3luY2hyb25pemVBbGxBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGVsZW1lbnREYXRh
KCkgPT0gb3RoZXItPmVsZW1lbnREYXRhKCkpCisgICAgb3RoZXIuc3luY2hyb25pemVBbGxBdHRy
aWJ1dGVzKCk7CisgICAgaWYgKGVsZW1lbnREYXRhKCkgPT0gb3RoZXIuZWxlbWVudERhdGEoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJl
dHVybiBlbGVtZW50RGF0YSgpLT5pc0VxdWl2YWxlbnQob3RoZXItPmVsZW1lbnREYXRhKCkpOwot
ICAgIGlmIChvdGhlci0+ZWxlbWVudERhdGEoKSkKLSAgICAgICAgcmV0dXJuIG90aGVyLT5lbGVt
ZW50RGF0YSgpLT5pc0VxdWl2YWxlbnQoZWxlbWVudERhdGEoKSk7CisgICAgICAgIHJldHVybiBl
bGVtZW50RGF0YSgpLT5pc0VxdWl2YWxlbnQob3RoZXIuZWxlbWVudERhdGEoKSk7CisgICAgaWYg
KG90aGVyLmVsZW1lbnREYXRhKCkpCisgICAgICAgIHJldHVybiBvdGhlci5lbGVtZW50RGF0YSgp
LT5pc0VxdWl2YWxlbnQoZWxlbWVudERhdGEoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTE3NzQsNyArMTc3NCw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQpCiAgICAgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb20oaW5zZXJ0
aW9uUG9pbnQpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5y
ZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogCiAKICNpZiBQTEFURk9S
TShNQUMpCkBAIC0xODE3LDcgKzE4MTcsNyBAQCB2b2lkIEVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3Qo
UmVmPFNoYWRvd1Jvb3Q+JiYgbmV3U2hhZG93Um9vdCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFB1c2hTaGFkb3dSb290KCp0aGlzLCBzaGFkb3dSb290KTsKIAogICAgIGlmIChz
aGFkb3dSb290Lm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICBk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KCZzaGFkb3dSb290KTsKKyAgICAgICAgZGlkQWRkVXNl
ckFnZW50U2hhZG93Um9vdChzaGFkb3dSb290KTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVT
aGFkb3dSb290KCkKQEAgLTM1MzAsMTAgKzM1MzAsMTAgQEAgdm9pZCBFbGVtZW50OjpjbGVhckhv
dmVyQW5kQWN0aXZlU3RhdHVzQmVmb3JlRGV0YWNoaW5nUmVuZGVyZXIoKQogICAgIGlmICghaXNV
c2VyQWN0aW9uRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGhvdmVyZWQoKSkK
LSAgICAgICAgZG9jdW1lbnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCh0aGlzKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCgqdGhpcyk7CiAgICAgaWYgKGlu
QWN0aXZlQ2hhaW4oKSkKLSAgICAgICAgZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRp
ZERldGFjaCh0aGlzKTsKLSAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmRpZERl
dGFjaCh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRpZERl
dGFjaCgqdGhpcyk7CisgICAgZG9jdW1lbnQoKS51c2VyQWN0aW9uRWxlbWVudHMoKS5kaWREZXRh
Y2goKnRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZTo6Q2hh
bmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZjZkYmVhYzM0YTVmMzZlYThlMTMwOGI2YjBmYWMx
NjIyYmQ3NzQzMy4uNjlmMDdjMDhkNDgzMmYxZjEwODIxYTkxOGQzNThhNmM0MjRkNGZmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCkBAIC0yNTksNyArMjU5LDcgQEAgcHVibGljOgogICAgIC8vIENsb25l
cyBhbGwgYXR0cmlidXRlLWRlcml2ZWQgZGF0YSwgaW5jbHVkaW5nIHN1YmNsYXNzIHNwZWNpZmlj
cyAodGhyb3VnaCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcy4pCiAgICAgdm9pZCBjbG9uZURh
dGFGcm9tRWxlbWVudChjb25zdCBFbGVtZW50Jik7CiAKLSAgICBib29sIGhhc0VxdWl2YWxlbnRB
dHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdDsKKyAgICBib29sIGhhc0VxdWl2
YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQmIG90aGVyKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1l
bnQmKSB7IH0KIApAQCAtNTkzLDE0ICs1OTMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNVc2Vy
QWN0aW9uRWxlbWVudEZvY3VzZWQoKSBjb25zdDsKICAgICBib29sIGlzVXNlckFjdGlvbkVsZW1l
bnRIb3ZlcmVkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290KikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBhbHdheXNDcmVh
dGVVc2VyQWdlbnRTaGFkb3dSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEF0dHIgdG8gY2FsbCB3aWxsTW9kaWZ5QXR0cmli
dXRlL2RpZE1vZGlmeUF0dHJpYnV0ZS4KLSAgICBmcmllbmQgY2xhc3MgQXR0cjsKLQotICAgIGVu
dW0gU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIHsgTm90SW5TeW5jaHJvbml6YXRpb25P
ZkxhenlBdHRyaWJ1dGUgPSAwLCBJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB9Owot
CiAgICAgdm9pZCBkaWRBZGRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYpOwogICAgIHZvaWQgd2lsbE1vZGlmeUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuZXdWYWx1ZSk7CiAgICAgdm9pZCBkaWRNb2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
bmV3VmFsdWUpOwpAQCAtNjI4LDYgKzYyMyw3IEBAIHByaXZhdGU6CiAgICAgTm9kZVR5cGUgbm9k
ZVR5cGUoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUp
IGNvbnN0IGZpbmFsOwogCisgICAgZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUg
eyBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSwgSW5TeW5jaHJvbml6YXRpb25P
ZkxhenlBdHRyaWJ1dGUgfTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZUludGVybmFsKHVuc2lnbmVk
IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
U3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKICAgICB2b2lkIGFkZEF0dHJpYnV0ZUlu
dGVybmFsKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBT
eW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRl
SW50ZXJuYWwodW5zaWduZWQgaW5kZXgsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCmluZGV4IDViNzRhMmIzNTk4ODRkMjU2NTJm
ZGVlMjgwYWY4ZjIyNjcwYjUyZDAuLjE3YmNlZTZlYTczODJjYjBjYjU4MzNmMTJhYjVkYzU0YjQ3
ZDYwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC0yNiw3ICsyNiw2IEBA
CiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNjYsNyArNjUsNyBAQCBFeGNlcHRpb25PcjxSZWY8QXR0cj4+IE5hbWVk
Tm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIFZlY3Rv
cjxTdHJpbmc+IE5hbWVkTm9kZU1hcDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gbmFtZXMgPSBtX2VsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMo
KTsKLSAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgaXM8SFRNTERvY3VtZW50
PihtX2VsZW1lbnQuZG9jdW1lbnQoKSkpIHsKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG1fZWxl
bWVudCkgJiYgbV9lbGVtZW50LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAg
ICBuYW1lcy5yZW1vdmVBbGxNYXRjaGluZyhbXShTdHJpbmcmIG5hbWUpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byBjaGFyYWN0ZXIgOiBTdHJpbmdWaWV3IHsgbmFtZSB9LmNvZGVVbml0cygpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IDViOTdjNjhlN2I3ZGE4MzZmM2M0ODYwMTM1ODE5MDI0YjJmMDlhYTAuLmI1MjNm
OTI1ZmFjNDEyYTU5MjA0MTRjNzc2NDk1ZDJkOTM1ZDIxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAg
LTU5OSw3ICs1OTksNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgIHdoaWxlIChO
b2RlKiBuZXh0U2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlm
IChuZXh0U2libGluZy0+bm9kZVR5cGUoKSAhPSBURVhUX05PREUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBSZWZQdHI8VGV4dD4gbmV4dFRleHQgPSBkb3duY2FzdDxUZXh0
PihuZXh0U2libGluZyk7CisgICAgICAgICAgICBSZWY8VGV4dD4gbmV4dFRleHQgPSBkb3duY2Fz
dDxUZXh0PigqbmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4
dCBub2Rlcy4KICAgICAgICAgICAgIGlmICghbmV4dFRleHQtPmxlbmd0aCgpKSB7CkBAIC02MTAs
NyArNjEwLDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAgICAgLy8gQm90aCBu
b24tZW1wdHkgdGV4dCBub2Rlcy4gTWVyZ2UgdGhlbS4KICAgICAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHRleHQtPmxlbmd0aCgpOwogICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShuZXh0
VGV4dC0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkudGV4dE5vZGVzTWVyZ2VkKG5l
eHRUZXh0LmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgZG9jdW1lbnQoKS50ZXh0Tm9kZXNN
ZXJnZWQobmV4dFRleHQsIG9mZnNldCk7CiAgICAgICAgICAgICBuZXh0VGV4dC0+cmVtb3ZlKCk7
CiAgICAgICAgIH0KIApAQCAtMTMyMyw3ICsxMzIzLDcgQEAgYm9vbCBOb2RlOjppc0VxdWFsTm9k
ZShOb2RlKiBvdGhlcikgY29uc3QKICAgICAgICAgYXV0byYgb3RoZXJFbGVtZW50ID0gZG93bmNh
c3Q8RWxlbWVudD4oKm90aGVyKTsKICAgICAgICAgaWYgKHRoaXNFbGVtZW50LnRhZ1FOYW1lKCkg
IT0gb3RoZXJFbGVtZW50LnRhZ1FOYW1lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmICghdGhpc0VsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoJm90aGVyRWxl
bWVudCkpCisgICAgICAgIGlmICghdGhpc0VsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMo
b3RoZXJFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggNDVkODYwYmE4
NmY0OTAzNjYxOThiZmU4NDY0ZjFjMjY1MTJlOWI3OS4uZjZmMTAyMDY5YjllZmM0MWE0MjVjZjZk
YTNjMjQ3N2JlZWRhMTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVy
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKQEAgLTcz
LDcgKzczLDcgQEAgaW5saW5lIE5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKE5vZGUmIHJvb3RO
b2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBSZWZQdHI8Tm8KICAgICA6IE5vZGVJdGVyYXRvckJh
c2Uocm9vdE5vZGUsIHdoYXRUb1Nob3csIFdURk1vdmUoZmlsdGVyKSkKICAgICAsIG1fcmVmZXJl
bmNlTm9kZShyb290Tm9kZSwgdHJ1ZSkKIHsKLSAgICByb290KCkuZG9jdW1lbnQoKS5hdHRhY2hO
b2RlSXRlcmF0b3IodGhpcyk7CisgICAgcm9vdCgpLmRvY3VtZW50KCkuYXR0YWNoTm9kZUl0ZXJh
dG9yKCp0aGlzKTsKIH0KIAogUmVmPE5vZGVJdGVyYXRvcj4gTm9kZUl0ZXJhdG9yOjpjcmVhdGUo
Tm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlB0cjxOb2RlRmlsdGVyPiYm
IGZpbHRlcikKQEAgLTgzLDcgKzgzLDcgQEAgUmVmPE5vZGVJdGVyYXRvcj4gTm9kZUl0ZXJhdG9y
OjpjcmVhdGUoTm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlAKIAogTm9k
ZUl0ZXJhdG9yOjp+Tm9kZUl0ZXJhdG9yKCkKIHsKLSAgICByb290KCkuZG9jdW1lbnQoKS5kZXRh
Y2hOb2RlSXRlcmF0b3IodGhpcyk7CisgICAgcm9vdCgpLmRvY3VtZW50KCkuZGV0YWNoTm9kZUl0
ZXJhdG9yKCp0aGlzKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPE5vZGU+PiBOb2RlSXRlcmF0
b3I6Om5leHROb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRv
bkdyb3Vwcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmlu
ZGV4IDRkMzM3Mjc5YzBlY2JjOTUwZGY0OWVlYjFlNTQyNzQyNzMwZDU5N2QuLjQ1ODFhOTRiMTNl
ZmI2ZTM4YzM2N2JhNzE4MjY0YWNlNWU3M2Q2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcApAQCAtMzAsMzUgKzMwLDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIFJhZGlvQnV0dG9uR3JvdXAgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIFJhZGlvQnV0dG9uR3JvdXAoKTsKICAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX21lbWJlcnMuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBpc1JlcXVpcmVkKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXF1aXJlZENvdW50OyB9CiAgICAgSFRNTElucHV0RWxlbWVudCog
Y2hlY2tlZEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tlZEJ1dHRvbjsgfQotICAgIHZv
aWQgYWRkKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShI
VE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoSFRN
TElucHV0RWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAg
ICBib29sIGNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdDsKKyAgICB2b2lkIGFkZChI
VE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElucHV0
RWxlbWVudCYpOworICAgIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVs
ZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgYm9vbCBj
b250YWlucyhIVE1MSW5wdXRFbGVtZW50JikgY29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVs
ZW1lbnQqPiBtZW1iZXJzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc1N0
eWxlUmVjYWxjRm9yQWxsQnV0dG9ucygpOwogICAgIHZvaWQgdXBkYXRlVmFsaWRpdHlGb3JBbGxC
dXR0b25zKCk7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VDaGVj
a2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKTsKICAgICB2b2lkIHNldENoZWNrZWRCdXR0b24o
SFRNTElucHV0RWxlbWVudCopOwogCiAgICAgSGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj4gbV9t
ZW1iZXJzOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fY2hlY2tlZEJ1dHRvbjsKLSAgICBzaXpl
X3QgbV9yZXF1aXJlZENvdW50OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIG1fY2hlY2tlZEJ1dHRv
biB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9yZXF1aXJlZENvdW50IHsgMCB9OwogfTsKIAot
UmFkaW9CdXR0b25Hcm91cDo6UmFkaW9CdXR0b25Hcm91cCgpCi0gICAgOiBtX2NoZWNrZWRCdXR0
b24obnVsbHB0cikKLSAgICAsIG1fcmVxdWlyZWRDb3VudCgwKQotewotfQotCiBpbmxpbmUgYm9v
bCBSYWRpb0J1dHRvbkdyb3VwOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gIWlzUmVx
dWlyZWQoKSB8fCBtX2NoZWNrZWRCdXR0b247CkBAIC04OCwxNiArODAsMTYgQEAgdm9pZCBSYWRp
b0J1dHRvbkdyb3VwOjpzZXRDaGVja2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikK
ICAgICAgICAgb2xkQ2hlY2tlZEJ1dHRvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CiB9CiAKLXZvaWQg
UmFkaW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFk
aW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NF
UlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmICghbV9tZW1iZXJzLmFkZChidXR0
b24pLmlzTmV3RW50cnkpCisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAg
IGlmICghbV9tZW1iZXJzLmFkZCgmYnV0dG9uKS5pc05ld0VudHJ5KQogICAgICAgICByZXR1cm47
CiAgICAgYm9vbCBncm91cFdhc1ZhbGlkID0gaXNWYWxpZCgpOwotICAgIGlmIChidXR0b24tPmlz
UmVxdWlyZWQoKSkKKyAgICBpZiAoYnV0dG9uLmlzUmVxdWlyZWQoKSkKICAgICAgICAgKyttX3Jl
cXVpcmVkQ291bnQ7Ci0gICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRDaGVj
a2VkQnV0dG9uKGJ1dHRvbik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAgIHNl
dENoZWNrZWRCdXR0b24oJmJ1dHRvbik7CiAKICAgICBib29sIGdyb3VwSXNWYWxpZCA9IGlzVmFs
aWQoKTsKICAgICBpZiAoZ3JvdXBXYXNWYWxpZCAhPSBncm91cElzVmFsaWQpCkBAIC0xMDUsMzEg
Kzk3LDMxIEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVsZW1lbnQqIGJ1
dHRvbikKICAgICBlbHNlIGlmICghZ3JvdXBJc1ZhbGlkKSB7CiAgICAgICAgIC8vIEEgcmFkaW8g
YnV0dG9uIG5vdCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0byBtYWtlIGl0
CiAgICAgICAgIC8vIGludmFsaWQgb25seSBpZiB0aGUgZ3JvdXAgaXMgaW52YWxpZC4KLSAgICAg
ICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRp
dHkoKTsKICAgICB9CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRlQ2hlY2tlZFN0
YXRlKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBk
YXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAgICBBU1NFUlQo
YnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMo
YnV0dG9uKSk7CisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIEFTU0VS
VChtX21lbWJlcnMuY29udGFpbnMoJmJ1dHRvbikpOwogICAgIGJvb2wgd2FzVmFsaWQgPSBpc1Zh
bGlkKCk7Ci0gICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRDaGVja2VkQnV0
dG9uKGJ1dHRvbik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAgIHNldENoZWNr
ZWRCdXR0b24oJmJ1dHRvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NoZWNrZWRCdXR0
b24gPT0gYnV0dG9uKQorICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09ICZidXR0b24pCiAg
ICAgICAgICAgICBzZXRDaGVja2VkQnV0dG9uKG51bGxwdHIpOwogICAgIH0KICAgICBpZiAod2Fz
VmFsaWQgIT0gaXNWYWxpZCgpKQogICAgICAgICB1cGRhdGVWYWxpZGl0eUZvckFsbEJ1dHRvbnMo
KTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQo
SFRNTElucHV0RWxlbWVudCogYnV0dG9uKQordm9pZCBSYWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKQogewotICAgIEFTU0VS
VChidXR0b24tPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgQVNTRVJUKG1fbWVtYmVycy5jb250YWlu
cyhidXR0b24pKTsKKyAgICBBU1NFUlQoYnV0dG9uLmlzUmFkaW9CdXR0b24oKSk7CisgICAgQVNT
RVJUKG1fbWVtYmVycy5jb250YWlucygmYnV0dG9uKSk7CiAgICAgYm9vbCB3YXNWYWxpZCA9IGlz
VmFsaWQoKTsKLSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1dHRvbi5p
c1JlcXVpcmVkKCkpCiAgICAgICAgICsrbV9yZXF1aXJlZENvdW50OwogICAgIGVsc2UgewogICAg
ICAgICBBU1NFUlQobV9yZXF1aXJlZENvdW50KTsKQEAgLTEzOSwyMiArMTMxLDIyIEBAIHZvaWQg
UmFkaW9CdXR0b25Hcm91cDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKEhUTUxJbnB1dEVsZW1l
bnQqIGJ1dHRvbikKICAgICAgICAgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7CiB9CiAK
LXZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikK
K3ZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikK
IHsKLSAgICBBU1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEhhc2hTZXQ8SFRN
TElucHV0RWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fbWVtYmVycy5maW5kKGJ1dHRvbik7Cisg
ICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOworICAgIGF1dG8gaXQgPSBtX21lbWJl
cnMuZmluZCgmYnV0dG9uKTsKICAgICBpZiAoaXQgPT0gbV9tZW1iZXJzLmVuZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBib29sIHdhc1ZhbGlkID0gaXNWYWxpZCgpOwogICAgIG1fbWVtYmVy
cy5yZW1vdmUoaXQpOwotICAgIGlmIChidXR0b24tPmlzUmVxdWlyZWQoKSkgeworICAgIGlmIChi
dXR0b24uaXNSZXF1aXJlZCgpKSB7CiAgICAgICAgIEFTU0VSVChtX3JlcXVpcmVkQ291bnQpOwog
ICAgICAgICAtLW1fcmVxdWlyZWRDb3VudDsKICAgICB9CiAgICAgaWYgKG1fY2hlY2tlZEJ1dHRv
bikgewotICAgICAgICBidXR0b24tPmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKLSAgICAg
ICAgaWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSBidXR0b24pIHsKKyAgICAgICAgYnV0dG9uLmludmFs
aWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKKyAgICAgICAgaWYgKG1fY2hlY2tlZEJ1dHRvbiA9PSAm
YnV0dG9uKSB7CiAgICAgICAgICAgICBtX2NoZWNrZWRCdXR0b24gPSBudWxscHRyOwogICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsY0ZvckFsbEJ1dHRvbnMoKTsKICAgICAgICAgfQpAQCAt
MTY4LDcgKzE2MCw3IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKEhUTUxJbnB1dEVs
ZW1lbnQqIGJ1dHRvbikKICAgICBpZiAoIXdhc1ZhbGlkKSB7CiAgICAgICAgIC8vIEEgcmFkaW8g
YnV0dG9uIG5vdCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0byBtYWtlIGl0
CiAgICAgICAgIC8vIHZhbGlkIG9ubHkgaWYgdGhlIGdyb3VwIHdhcyBpbnZhbGlkLgotICAgICAg
ICBidXR0b24tPnVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAgIGJ1dHRvbi51cGRhdGVWYWxpZGl0
eSgpOwogICAgIH0KIH0KIApAQCAtMTg4LDkgKzE4MCw5IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91
cDo6dXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCkKICAgICB9CiB9CiAKLWJvb2wgUmFkaW9C
dXR0b25Hcm91cDo6Y29udGFpbnMoSFRNTElucHV0RWxlbWVudCogYnV0dG9uKSBjb25zdAorYm9v
bCBSYWRpb0J1dHRvbkdyb3VwOjpjb250YWlucyhIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVtYmVycy5jb250YWlucyhidXR0b24pOworICAgIHJldHVy
biBtX21lbWJlcnMuY29udGFpbnMoJmJ1dHRvbik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNiwx
NiArMTk4LDE2IEBAIFJhZGlvQnV0dG9uR3JvdXBzOjp+UmFkaW9CdXR0b25Hcm91cHMoKQogewog
fQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjphZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50LT5pc1JhZGlvQnV0dG9uKCkpOwot
ICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIEFTU0VSVChlbGVtZW50Lmlz
UmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFtZSgpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICBtX25hbWVU
b0dyb3VwTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxOYW1lVG9Hcm91cE1hcD4oKTsKIAotICAgIGF1
dG8mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+YWRkKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCks
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmFkZChlbGVtZW50Lm5hbWUoKS5pbXBsKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAoIWdyb3VwKQogICAgICAgICBncm91cCA9IHN0ZDo6bWFrZV91bmlxdWU8UmFk
aW9CdXR0b25Hcm91cD4oKTsKICAgICBncm91cC0+YWRkKGVsZW1lbnQpOwpAQCAtMjQwLDMwICsy
MzIsMjYgQEAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBSYWRpb0J1dHRvbkdyb3Vwczo6Z3Jv
dXBNZW1iZXJzKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQKICAgICByZXR1cm4gZ3JvdXAtPm1lbWJl
cnMoKTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhU
TUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjp1cGRhdGVD
aGVja2VkU3RhdGUoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxl
bWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHko
KSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50
Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9uYW1lVG9H
cm91cE1hcCk7CiAgICAgaWYgKCFtX25hbWVUb0dyb3VwTWFwKQogICAgICAgICByZXR1cm47Ci0g
ICAgUmFkaW9CdXR0b25Hcm91cCogZ3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVu
dC0+bmFtZSgpLmltcGwoKSk7Ci0gICAgQVNTRVJUKGdyb3VwKTsKLSAgICBncm91cC0+dXBkYXRl
Q2hlY2tlZFN0YXRlKGVsZW1lbnQpOworICAgIG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50
Lm5hbWUoKS5pbXBsKCkpLT51cGRhdGVDaGVja2VkU3RhdGUoZWxlbWVudCk7CiB9CiAKLXZvaWQg
UmFkaW9CdXR0b25Hcm91cHM6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVt
ZW50KiBlbGVtZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVxdWlyZWRBdHRyaWJ1dGVD
aGFuZ2VkKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQt
PmlzUmFkaW9CdXR0b24oKSk7Ci0gICAgaWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisg
ICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1l
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1fbmFtZVRvR3JvdXBN
YXApOwogICAgIGlmICghbV9uYW1lVG9Hcm91cE1hcCkKICAgICAgICAgcmV0dXJuOwotICAgIFJh
ZGlvQnV0dG9uR3JvdXAqIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQtPm5h
bWUoKS5pbXBsKCkpOwotICAgIEFTU0VSVChncm91cCk7Ci0gICAgZ3JvdXAtPnJlcXVpcmVkQXR0
cmlidXRlQ2hhbmdlZChlbGVtZW50KTsKKyAgICBtX25hbWVUb0dyb3VwTWFwLT5nZXQoZWxlbWVu
dC5uYW1lKCkuaW1wbCgpKS0+cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKGVsZW1lbnQpOwogfQog
CiBIVE1MSW5wdXRFbGVtZW50KiBSYWRpb0J1dHRvbkdyb3Vwczo6Y2hlY2tlZEJ1dHRvbkZvckdy
b3VwKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI3NSwzOCArMjYzLDM2IEBA
IEhUTUxJbnB1dEVsZW1lbnQqIFJhZGlvQnV0dG9uR3JvdXBzOjpjaGVja2VkQnV0dG9uRm9yR3Jv
dXAoY29uc3QgQXRvbWljU3RyaW5nJiBuCiAgICAgcmV0dXJuIGdyb3VwID8gZ3JvdXAtPmNoZWNr
ZWRCdXR0b24oKSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgUmFkaW9CdXR0b25Hcm91cHM6Omhhc0No
ZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wg
UmFkaW9CdXR0b25Hcm91cHM6Omhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigp
KTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBlbGVtZW50LT5uYW1lKCk7CisgICAg
QVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUgPSBlbGVtZW50Lm5hbWUoKTsKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgfHwgIW1fbmFt
ZVRvR3JvdXBNYXApCi0gICAgICAgIHJldHVybiBlbGVtZW50LT5jaGVja2VkKCk7Ci0KLSAgICBj
b25zdCBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChuYW1l
LmltcGwoKSk7Ci0gICAgcmV0dXJuIGdyb3VwLT5jaGVja2VkQnV0dG9uKCk7CisgICAgICAgIHJl
dHVybiBlbGVtZW50LmNoZWNrZWQoKTsKKyAgICByZXR1cm4gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0
KG5hbWUuaW1wbCgpKS0+Y2hlY2tlZEJ1dHRvbigpOwogfQogCi1ib29sIFJhZGlvQnV0dG9uR3Jv
dXBzOjppc0luUmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
Ym9vbCBSYWRpb0J1dHRvbkdyb3Vwczo6aXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigp
KTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVu
dC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3Jv
dXBNYXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1wbCgpKTsKKyAgICBhdXRvKiBncm91cCA9IG1f
bmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50Lm5hbWUoKS5pbXBsKCkpOwogICAgIHJldHVybiBn
cm91cCAmJiBncm91cC0+aXNSZXF1aXJlZCgpICYmIGdyb3VwLT5jb250YWlucyhlbGVtZW50KTsK
IH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1l
bnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjpyZW1vdmVCdXR0b24oSFRNTElu
cHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRv
bigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxl
bWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fbmFtZVRvR3JvdXBNYXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBO
YW1lVG9Hcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1l
bnQtPm5hbWUoKS5pbXBsKCkpOworICAgIGF1dG8gaXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5k
KGVsZW1lbnQubmFtZSgpLmltcGwoKSk7CiAgICAgaWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAt
PmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAgaXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCmluZGV4IDFlNWE1OGQ1N2RhNzY4
NWUxYzAxOGZkOTZhZmFmMjA3ZWYwMTMzNmEuLjUzMzEyZGRlOTcwNmNlOGQyNGEzZTIxNGFlYzRl
Y2Y1M2VhZWE4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdy
b3Vwcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCkBAIC0z
NCwxMyArMzQsMTMgQEAgY2xhc3MgUmFkaW9CdXR0b25Hcm91cHMgewogcHVibGljOgogICAgIFJh
ZGlvQnV0dG9uR3JvdXBzKCk7CiAgICAgflJhZGlvQnV0dG9uR3JvdXBzKCk7Ci0gICAgdm9pZCBh
ZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCopOwotICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRl
KEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZChI
VE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVu
dCopOworICAgIHZvaWQgYWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmKTsKKyAgICB2b2lkIHVw
ZGF0ZUNoZWNrZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCByZXF1aXJlZEF0
dHJpYnV0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlQnV0dG9u
KEhUTUxJbnB1dEVsZW1lbnQmKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9u
Rm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBncm91cE5hbWUpIGNvbnN0OwotICAgIGJvb2wg
aGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7Ci0gICAgYm9v
bCBpc0luUmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBo
YXNDaGVja2VkQnV0dG9uKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKKyAgICBib29s
IGlzSW5SZXF1aXJlZEdyb3VwKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKICAgICBWZWN0b3I8
SFRNTElucHV0RWxlbWVudCo+IGdyb3VwTWVtYmVycyhjb25zdCBIVE1MSW5wdXRFbGVtZW50Jikg
Y29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA1ZGFlMDYzNmJiMTk3M2Ez
NTk3MzgzOTdjYjYxMzAxZjkwMmUzMGMzLi4zNjE5OTA0N2MzNGNhYjZmMjgxNjVlMGVmODM0YzIy
OWE4NGQ3NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CkBAIC03OSw3ICs3OCw3IEBAIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQmIG93bmVyRG9j
dW1lbnQpCiAgICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBtX293
bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0
YWNoUmFuZ2UoKnRoaXMpOwogfQogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQm
IG93bmVyRG9jdW1lbnQpCkBAIC05Niw3ICs5NSw3IEBAIGlubGluZSBSYW5nZTo6UmFuZ2UoRG9j
dW1lbnQmIG93bmVyRG9jdW1lbnQsIE5vZGUqIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZz
CiAgICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwogI2VuZGlmCiAKLSAgICBtX293bmVyRG9j
dW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFu
Z2UoKnRoaXMpOwogCiAgICAgLy8gU2ltcGx5IHNldHRpbmcgdGhlIGNvbnRhaW5lcnMgYW5kIG9m
ZnNldHMgZGlyZWN0bHkgd291bGQgbm90IGRvIGFueSBvZiB0aGUgY2hlY2tpbmcKICAgICAvLyB0
aGF0IHNldFN0YXJ0IGFuZCBzZXRFbmQgZG8sIHNvIHdlIGNhbGwgdGhvc2UgZnVuY3Rpb25zLgpA
QCAtMTI1LDcgKzEyNCw3IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3du
ZXJEb2N1bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlCiAKIFJhbmdlOjp+UmFu
Z2UoKQogewotICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9v
d25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
cmFuZ2VDb3VudGVyLmRlY3JlbWVudCgpOwpAQCAtMTM1LDExICsxMzQsMTEgQEAgUmFuZ2U6On5S
YW5nZSgpCiB2b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAg
ICAgQVNTRVJUKG1fb3duZXJEb2N1bWVudC5wdHIoKSAhPSAmZG9jdW1lbnQpOwotICAgIG1fb3du
ZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UodGhpcyk7CisgICAgbV9vd25lckRvY3VtZW50LT5kZXRh
Y2hSYW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgbV9z
dGFydC5zZXRUb1N0YXJ0T2ZOb2RlKGRvY3VtZW50KTsKICAgICBtX2VuZC5zZXRUb1N0YXJ0T2ZO
b2RlKGRvY3VtZW50KTsKLSAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKHRoaXMpOwor
ICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRoaXMpOwogfQogCiBOb2RlKiBSYW5n
ZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIoTm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFp
bmVyQikKQEAgLTk3Nyw3ICs5NzYsNyBAQCBFeGNlcHRpb25PcjxSZWY8RG9jdW1lbnRGcmFnbWVu
dD4+IFJhbmdlOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJgogICAgICAg
ICBlbGVtZW50ID0gJmRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGVsc2UKICAgICAgICAg
ZWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudCgpOwotICAgIGlmICghZWxlbWVudCB8fCAoaXM8
SFRNTERvY3VtZW50PihlbGVtZW50LT5kb2N1bWVudCgpKSAmJiBpczxIVE1MSHRtbEVsZW1lbnQ+
KCplbGVtZW50KSkpCisgICAgaWYgKCFlbGVtZW50IHx8IChlbGVtZW50LT5kb2N1bWVudCgpLmlz
SFRNTERvY3VtZW50KCkgJiYgaXM8SFRNTEh0bWxFbGVtZW50PigqZWxlbWVudCkpKQogICAgICAg
ICBlbGVtZW50ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKICAg
ICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVtZW50LCBtYXJr
dXAsIEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkKTsKIH0K
QEAgLTE2NjksOSArMTY2OCw5IEBAIHZvaWQgUmFuZ2U6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUm
IG5vZGUpCiAgICAgYm91bmRhcnlOb2RlV2lsbEJlUmVtb3ZlZChtX2VuZCwgbm9kZSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9p
bnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXJ5LCBOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgIT0gdGV4dCkKKyAgICBpZiAo
Ym91bmRhcnkuY29udGFpbmVyKCkgIT0gJnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNp
Z25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgIGlmIChvZmZzZXQg
Pj0gYm91bmRhcnlPZmZzZXQpCkBAIC0xNjc5LDE3ICsxNjc4LDE2IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBib3VuZGFyeVRleHRJbnNlcnRlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBO
b2RlKiB0ZXh0CiAgICAgYm91bmRhcnkuc2V0T2Zmc2V0KGJvdW5kYXJ5T2Zmc2V0ICsgbGVuZ3Ro
KTsKIH0KIAotdm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBSYW5nZTo6dGV4dEluc2VydGVkKE5vZGUmIHRl
eHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFTU0VSVCh0ZXh0
KTsKLSAgICBBU1NFUlQoJnRleHQtPmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7Cisg
ICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CiAgICAgYm91
bmRhcnlUZXh0SW5zZXJ0ZWQobV9zdGFydCwgdGV4dCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIGJv
dW5kYXJ5VGV4dEluc2VydGVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYg
Ym91bmRhcnksIE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQor
c3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4dFJlbW92ZWQoUmFuZ2VCb3VuZGFyeVBvaW50
JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9IHRleHQpCisgICAgaWYgKGJvdW5k
YXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQg
Ym91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5vZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJv
dW5kYXJ5T2Zmc2V0KQpAQCAtMTcwMCwxMCArMTY5OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3VuZGFyeVRleHRSZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUqIHRl
eHQsCiAgICAgICAgIGJvdW5kYXJ5LnNldE9mZnNldChib3VuZGFyeU9mZnNldCAtIGxlbmd0aCk7
CiB9CiAKLXZvaWQgUmFuZ2U6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBSYW5nZTo6dGV4dFJlbW92ZWQoTm9kZSYgdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKHRleHQpOwot
ICAgIEFTU0VSVCgmdGV4dC0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKKyAgICBB
U1NFUlQoJnRleHQuZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgpKTsKICAgICBib3VuZGFy
eVRleHRSZW1vdmVkKG1fc3RhcnQsIHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFy
eVRleHRSZW1vdmVkKG1fZW5kLCB0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CiB9CkBAIC0xNzI4LDE1
ICsxNzI1LDE1IEBAIHZvaWQgUmFuZ2U6OnRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBv
bGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgYm91bmRhcnlUZXh0Tm9kZXNNZXJnZWQobV9l
bmQsIG9sZE5vZGUsIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRl
eHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIFRleHQqIG9sZE5vZGUp
CitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXJ5LCBUZXh0JiBvbGROb2RlKQogewotICAgIGF1dG8qIHBhcmVudCA9IG9s
ZE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gb2xk
Tm9kZSkgewotICAgICAgICB1bnNpZ25lZCBzcGxpdE9mZnNldCA9IG9sZE5vZGUtPmxlbmd0aCgp
OworICAgIGF1dG8qIHBhcmVudCA9IG9sZE5vZGUucGFyZW50Tm9kZSgpOworICAgIGlmIChib3Vu
ZGFyeS5jb250YWluZXIoKSA9PSAmb2xkTm9kZSkgeworICAgICAgICB1bnNpZ25lZCBzcGxpdE9m
ZnNldCA9IG9sZE5vZGUubGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0
ID0gYm91bmRhcnkub2Zmc2V0KCk7CiAgICAgICAgIGlmIChib3VuZGFyeU9mZnNldCA+IHNwbGl0
T2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICAgICAgIGJvdW5k
YXJ5LnNldCgqb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgYm91bmRhcnlPZmZzZXQgLSBzcGxpdE9m
ZnNldCwgMCk7CisgICAgICAgICAgICAgICAgYm91bmRhcnkuc2V0KCpvbGROb2RlLm5leHRTaWJs
aW5nKCksIGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGJvdW5kYXJ5LnNldE9mZnNldChzcGxpdE9mZnNldCk7CiAgICAg
ICAgIH0KQEAgLTE3NDQsMjAgKzE3NDEsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5
VGV4dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCogb2wKICAg
ICB9CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoYm91bmRhcnku
Y29udGFpbmVyKCkgPT0gcGFyZW50ICYmIGJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkgPT0gb2xkTm9k
ZSkgewotICAgICAgICBhdXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFyeS5jaGlsZEJl
Zm9yZSgpID09ICZvbGROb2RlKSB7CisgICAgICAgIGF1dG8qIG5ld0NoaWxkID0gb2xkTm9kZS5u
ZXh0U2libGluZygpOwogICAgICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgICAgICBib3VuZGFy
eS5zZXRUb0FmdGVyQ2hpbGQoKm5ld0NoaWxkKTsKICAgICB9CiB9CiAKLXZvaWQgUmFuZ2U6OnRl
eHROb2RlU3BsaXQoVGV4dCogb2xkTm9kZSkKK3ZvaWQgUmFuZ2U6OnRleHROb2RlU3BsaXQoVGV4
dCYgb2xkTm9kZSkKIHsKLSAgICBBU1NFUlQob2xkTm9kZSk7Ci0gICAgQVNTRVJUKCZvbGROb2Rl
LT5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50KCkpOwotICAgIEFTU0VSVChvbGROb2RlLT5p
c1RleHROb2RlKCkpOwotICAgIEFTU0VSVCghb2xkTm9kZS0+cGFyZW50Tm9kZSgpIHx8IG9sZE5v
ZGUtPm5leHRTaWJsaW5nKCkpOwotICAgIEFTU0VSVCghb2xkTm9kZS0+cGFyZW50Tm9kZSgpIHx8
IG9sZE5vZGUtPm5leHRTaWJsaW5nKCktPmlzVGV4dE5vZGUoKSk7CisgICAgQVNTRVJUKCZvbGRO
b2RlLmRvY3VtZW50KCkgPT0gJm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCFvbGROb2Rl
LnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLm5leHRTaWJsaW5nKCkpOworICAgIEFTU0VSVCghb2xk
Tm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2libGluZygpLT5pc1RleHROb2RlKCkp
OwogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9zdGFydCwgb2xkTm9kZSk7CiAgICAgYm91
bmRhcnlUZXh0Tm9kZXNTcGxpdChtX2VuZCwgb2xkTm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4
IDNmMWM1MGNiNDRhYWJhMTg2NTQyZTc3NjliNDNkNGY3YmQzZmQ5YzUuLmYyZmM1NDI4ZGZjMmI5
M2NjZTI1N2I0MGE3ODY4ZWJhOTk1OTJlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xMzMsMTAgKzEz
MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRh
aW5lck5vZGUmKTsKICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKIAotICAgIHZv
aWQgdGV4dEluc2VydGVkKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgdGV4dEluc2VydGVkKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgdm9pZCB0ZXh0UmVtb3ZlZChOb2RlJiwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHZvaWQgdGV4dE5vZGVzTWVyZ2VkKE5vZGVXaXRo
SW5kZXgmIG9sZE5vZGUsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB0ZXh0Tm9kZVNwbGl0
KFRleHQqIG9sZE5vZGUpOworICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0JiBvbGROb2RlKTsK
IAogICAgIC8vIEV4cGFuZCByYW5nZSB0byBhIHVuaXQgKHdvcmQgb3Igc2VudGVuY2Ugb3IgYmxv
Y2sgb3IgZG9jdW1lbnQpIGJvdW5kYXJ5LgogICAgIC8vIFBsZWFzZSByZWZlciB0byBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc2MzIgY29tbWVudCAjNSAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAppbmRleCBhODMzZTI4MjI2ZGRkMWRjZDE0MmQ1Y2Ey
MmIzNTQ2MmUyYjljMGVmLi40M2VhZjE0ZDRjZGNmOTRkMDBjYmE3OTEyZmYwNGE5ZjU4YjMxNjUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCkBAIC0yNTYsMTEgKzI1NiwxMSBA
QCBib29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhYwogICAgIH0gZWxzZSBpZiAoKGlzQ2xhc3NpY0V4dGVy
bmFsU2NyaXB0IHx8IHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6TW9kdWxlKSAmJiAhaGFzQXN5
bmNBdHRyaWJ1dGUoKSAmJiAhbV9mb3JjZUFzeW5jKSB7CiAgICAgICAgIG1fd2lsbEV4ZWN1dGVJ
bk9yZGVyID0gdHJ1ZTsKICAgICAgICAgQVNTRVJUKG1fbG9hZGFibGVTY3JpcHQpOwotICAgICAg
ICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS0+cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oKnRoaXMs
ICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OklOX09SREVSX0VYRUNVVElPTik7Cisg
ICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0
aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpJTl9PUkRFUl9FWEVDVVRJT04p
OwogICAgIH0gZWxzZSBpZiAoaGFzU291cmNlQXR0cmlidXRlKCkgfHwgc2NyaXB0VHlwZSA9PSBT
Y3JpcHRUeXBlOjpNb2R1bGUpIHsKICAgICAgICAgQVNTRVJUKG1fbG9hZGFibGVTY3JpcHQpOwog
ICAgICAgICBBU1NFUlQoaGFzQXN5bmNBdHRyaWJ1dGUoKSB8fCBtX2ZvcmNlQXN5bmMpOwotICAg
ICAgICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS0+cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oKnRo
aXMsICptX2xvYWRhYmxlU2NyaXB0LCBTY3JpcHRSdW5uZXI6OkFTWU5DX0VYRUNVVElPTik7Cisg
ICAgICAgIGRvY3VtZW50LnNjcmlwdFJ1bm5lcigpLnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0
aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVyOjpBU1lOQ19FWEVDVVRJT04pOwog
ICAgIH0gZWxzZSBpZiAoIWhhc1NvdXJjZUF0dHJpYnV0ZSgpICYmIG1fcGFyc2VySW5zZXJ0ZWQg
JiYgIWRvY3VtZW50LmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7CiAgICAgICAgIEFTU0VSVChz
Y3JpcHRUeXBlID09IFNjcmlwdFR5cGU6OkNsYXNzaWMpOwogICAgICAgICBtX3dpbGxCZVBhcnNl
ckV4ZWN1dGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCBmZThjOWQ0NjBiMGZjMzE5NmMy
NmFiNDI0NmU2Zjg1Yzc1ODI0MDBiLi5mNjNmNDVlZTgxOGIzMWJlODY4MDY2Mjg2ZWNlZTRkOTgw
OTM3ZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxUZXh0Pj4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgICAgIHJl
dHVybiBpbnNlcnRSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIGRvY3Vt
ZW50KCkudGV4dE5vZGVTcGxpdCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLnRleHROb2RlU3BsaXQo
KnRoaXMpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnNldFRl
eHRXaXRoT2Zmc2V0KGRhdGEoKSwgMCwgb2xkRGF0YS5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmNwcAppbmRleCBhN2RiZTUxNDZhM2M4OGM0ZWZm
Y2E3ZmJiMmY3ZDIxOTM3NzQyOWQ3Li43M2UzYTYyMWQ2ZjhmODE2YjViZDhlZDE2MDc1ZjJkZmVm
Yjc5Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRT
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5jcHAK
QEAgLTMyLDkgKzMyLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFVzZXJBY3Rp
b25FbGVtZW50U2V0OjpkaWREZXRhY2goRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgVXNlckFjdGlv
bkVsZW1lbnRTZXQ6OmRpZERldGFjaChFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChl
bGVtZW50LT5pc1VzZXJBY3Rpb25FbGVtZW50KCkpOworICAgIEFTU0VSVChlbGVtZW50LmlzVXNl
ckFjdGlvbkVsZW1lbnQoKSk7CiAgICAgY2xlYXJGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcg
fCBJbkFjdGl2ZUNoYWluRmxhZyB8IElzSG92ZXJlZEZsYWcpOwogfQogCkBAIC00MywzMSArNDMs
MjggQEAgdm9pZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6ZG9jdW1lbnREaWRSZW1vdmVMYXN0UmVm
KCkKICAgICBtX2VsZW1lbnRzLmNsZWFyKCk7CiB9CiAKLWJvb2wgVXNlckFjdGlvbkVsZW1lbnRT
ZXQ6Omhhc0ZsYWdzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIGZsYWdzKSBjb25z
dAorYm9vbCBVc2VyQWN0aW9uRWxlbWVudFNldDo6aGFzRmxhZ3MoY29uc3QgRWxlbWVudCYgZWxl
bWVudCwgdW5zaWduZWQgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzVXNl
ckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgRWxlbWVudEZsYWdNYXA6OmNvbnN0X2l0ZXJhdG9yIGZv
dW5kID0gbV9lbGVtZW50cy5maW5kKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpKTsKLSAg
ICBpZiAoZm91bmQgPT0gbV9lbGVtZW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBmb3VuZC0+dmFsdWUgJiBmbGFnczsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1Vz
ZXJBY3Rpb25FbGVtZW50KCkpOworICAgIHJldHVybiBtX2VsZW1lbnRzLmdldChjb25zdF9jYXN0
PEVsZW1lbnQqPigmZWxlbWVudCkpICYgZmxhZ3M7CiB9CiAKLXZvaWQgVXNlckFjdGlvbkVsZW1l
bnRTZXQ6OmNsZWFyRmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgZmxhZ3MpCit2b2lk
IFVzZXJBY3Rpb25FbGVtZW50U2V0OjpjbGVhckZsYWdzKEVsZW1lbnQmIGVsZW1lbnQsIHVuc2ln
bmVkIGZsYWdzKQogewotICAgIGlmICghZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxlbWVudCgpKSB7
Ci0gICAgICAgIEFTU0VSVChtX2VsZW1lbnRzLmVuZCgpID09IG1fZWxlbWVudHMuZmluZChlbGVt
ZW50KSk7CisgICAgaWYgKCFlbGVtZW50LmlzVXNlckFjdGlvbkVsZW1lbnQoKSkgeworICAgICAg
ICBBU1NFUlQoIW1fZWxlbWVudHMuY29udGFpbnMoJmVsZW1lbnQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEVsZW1lbnRGbGFnTWFwOjppdGVyYXRvciBmb3VuZCA9IG1fZWxlbWVu
dHMuZmluZChlbGVtZW50KTsKKyAgICBhdXRvIGZvdW5kID0gbV9lbGVtZW50cy5maW5kKCZlbGVt
ZW50KTsKICAgICBpZiAoZm91bmQgPT0gbV9lbGVtZW50cy5lbmQoKSkgewotICAgICAgICBlbGVt
ZW50LT5zZXRVc2VyQWN0aW9uRWxlbWVudChmYWxzZSk7CisgICAgICAgIGVsZW1lbnQuc2V0VXNl
ckFjdGlvbkVsZW1lbnQoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdW5z
aWduZWQgdXBkYXRlZCA9IGZvdW5kLT52YWx1ZSAmIH5mbGFnczsKICAgICBpZiAoIXVwZGF0ZWQp
IHsKLSAgICAgICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQoZmFsc2UpOworICAgICAg
ICBlbGVtZW50LnNldFVzZXJBY3Rpb25FbGVtZW50KGZhbHNlKTsKICAgICAgICAgbV9lbGVtZW50
cy5yZW1vdmUoZm91bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzUsMTcgKzcyLDE2
IEBAIHZvaWQgVXNlckFjdGlvbkVsZW1lbnRTZXQ6OmNsZWFyRmxhZ3MoRWxlbWVudCogZWxlbWVu
dCwgdW5zaWduZWQgZmxhZ3MpCiAgICAgZm91bmQtPnZhbHVlID0gdXBkYXRlZDsKIH0KIAotdm9p
ZCBVc2VyQWN0aW9uRWxlbWVudFNldDo6c2V0RmxhZ3MoRWxlbWVudCogZWxlbWVudCwgdW5zaWdu
ZWQgZmxhZ3MpCit2b2lkIFVzZXJBY3Rpb25FbGVtZW50U2V0OjpzZXRGbGFncyhFbGVtZW50JiBl
bGVtZW50LCB1bnNpZ25lZCBmbGFncykKIHsKLSAgICBFbGVtZW50RmxhZ01hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9lbGVtZW50cy5maW5kKGVsZW1lbnQpOwotICAgIGlmIChyZXN1bHQgIT0gbV9l
bGVtZW50cy5lbmQoKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudC0+aXNVc2VyQWN0aW9uRWxl
bWVudCgpKTsKLSAgICAgICAgcmVzdWx0LT52YWx1ZSB8PSBmbGFnczsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fZWxlbWVudHMuYWRkKCZlbGVtZW50LCBmbGFncyk7CisgICAgaWYgKCFyZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudC5pc1VzZXJBY3Rpb25FbGVtZW50KCkp
OworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlIHw9IGZsYWdzOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZWxlbWVudC0+c2V0VXNlckFjdGlvbkVsZW1lbnQodHJ1ZSk7Ci0g
ICAgbV9lbGVtZW50cy5hZGQoZWxlbWVudCwgZmxhZ3MpOworICAgIGVsZW1lbnQuc2V0VXNlckFj
dGlvbkVsZW1lbnQodHJ1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Vc2VyQWN0aW9uRWxlbWVudFNldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25F
bGVtZW50U2V0LmgKaW5kZXggY2U3NjRjM2ViODM3MTg3N2JmZThhMWI4OTE1OGE2OGI3MjVmODNl
Zi4uYTRjNTliOTIwZmQ5ZDFmZGE0NTEwZjIxOGRjOTM4MzhkMjFiZWUxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVtZW50U2V0LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjcsOCArMjcsOCBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzYsMTYgKzM2LDE3IEBAIGNsYXNzIEVsZW1lbnQ7CiAKIGNsYXNzIFVzZXJBY3Rpb25FbGVt
ZW50U2V0IHsKIHB1YmxpYzoKLSAgICBib29sIGlzRm9jdXNlZChjb25zdCBFbGVtZW50KiBlbGVt
ZW50KSB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0ZvY3VzZWRGbGFnKTsgfQotICAgIGJv
b2wgaXNBY3RpdmUoY29uc3QgRWxlbWVudCogZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZ3MoZWxl
bWVudCwgSXNBY3RpdmVGbGFnKTsgfQotICAgIGJvb2wgaXNJbkFjdGl2ZUNoYWluKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIEluQWN0aXZlQ2hhaW5G
bGFnKTsgfQotICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIHsgcmV0
dXJuIGhhc0ZsYWdzKGVsZW1lbnQsIElzSG92ZXJlZEZsYWcpOyB9Ci0gICAgdm9pZCBzZXRGb2N1
c2VkKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1lbnQsIGVu
YWJsZSwgSXNGb2N1c2VkRmxhZyk7IH0KLSAgICB2b2lkIHNldEFjdGl2ZShFbGVtZW50KiBlbGVt
ZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzQWN0aXZlRmxh
Zyk7IH0KLSAgICB2b2lkIHNldEluQWN0aXZlQ2hhaW4oRWxlbWVudCogZWxlbWVudCwgYm9vbCBl
bmFibGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJbkFjdGl2ZUNoYWluRmxhZyk7IH0K
LSAgICB2b2lkIHNldEhvdmVyZWQoRWxlbWVudCogZWxlbWVudCwgYm9vbCBlbmFibGUpIHsgc2V0
RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0hvdmVyZWRGbGFnKTsgfQorICAgIGJvb2wgaXNGb2N1
c2VkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGhhc0ZsYWdzKGVsZW1l
bnQsIElzRm9jdXNlZEZsYWcpOyB9CisgICAgYm9vbCBpc0FjdGl2ZShjb25zdCBFbGVtZW50JiBl
bGVtZW50KSBjb25zdCB7IHJldHVybiBoYXNGbGFncyhlbGVtZW50LCBJc0FjdGl2ZUZsYWcpOyB9
CisgICAgYm9vbCBpc0luQWN0aXZlQ2hhaW4oY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3Qg
eyByZXR1cm4gaGFzRmxhZ3MoZWxlbWVudCwgSW5BY3RpdmVDaGFpbkZsYWcpOyB9CisgICAgYm9v
bCBpc0hvdmVyZWQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4gaGFzRmxh
Z3MoZWxlbWVudCwgSXNIb3ZlcmVkRmxhZyk7IH0KIAotICAgIHZvaWQgZGlkRGV0YWNoKEVsZW1l
bnQqKTsKKyAgICB2b2lkIHNldEZvY3VzZWQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUp
IHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBJc0ZvY3VzZWRGbGFnKTsgfQorICAgIHZvaWQg
c2V0QWN0aXZlKEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgZW5hYmxlKSB7IHNldEZsYWdzKGVsZW1l
bnQsIGVuYWJsZSwgSXNBY3RpdmVGbGFnKTsgfQorICAgIHZvaWQgc2V0SW5BY3RpdmVDaGFpbihF
bGVtZW50JiBlbGVtZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUs
IEluQWN0aXZlQ2hhaW5GbGFnKTsgfQorICAgIHZvaWQgc2V0SG92ZXJlZChFbGVtZW50JiBlbGVt
ZW50LCBib29sIGVuYWJsZSkgeyBzZXRGbGFncyhlbGVtZW50LCBlbmFibGUsIElzSG92ZXJlZEZs
YWcpOyB9CisKKyAgICB2b2lkIGRpZERldGFjaChFbGVtZW50Jik7CiAgICAgdm9pZCBkb2N1bWVu
dERpZFJlbW92ZUxhc3RSZWYoKTsKIAogcHJpdmF0ZToKQEAgLTU2LDEzICs1NywxMyBAQCBwcml2
YXRlOgogICAgICAgICBJc0ZvY3VzZWRGbGFnICAgICA9IDEgPDwgMwogICAgIH07CiAKLSAgICB2
b2lkIHNldEZsYWdzKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgZW5hYmxlLCB1bnNpZ25lZCBmbGFn
cykgeyBlbmFibGUgPyBzZXRGbGFncyhlbGVtZW50LCBmbGFncykgOiBjbGVhckZsYWdzKGVsZW1l
bnQsIGZsYWdzKTsgfQotICAgIHZvaWQgc2V0RmxhZ3MoRWxlbWVudCosIHVuc2lnbmVkKTsKLSAg
ICB2b2lkIGNsZWFyRmxhZ3MoRWxlbWVudCosIHVuc2lnbmVkKTsKLSAgICBib29sIGhhc0ZsYWdz
KGNvbnN0IEVsZW1lbnQqLCB1bnNpZ25lZCBmbGFncykgY29uc3Q7CisgICAgdm9pZCBzZXRGbGFn
cyhFbGVtZW50JiBlbGVtZW50LCBib29sIGVuYWJsZSwgdW5zaWduZWQgZmxhZ3MpIHsgZW5hYmxl
ID8gc2V0RmxhZ3MoZWxlbWVudCwgZmxhZ3MpIDogY2xlYXJGbGFncyhlbGVtZW50LCBmbGFncyk7
IH0KKyAgICB2b2lkIHNldEZsYWdzKEVsZW1lbnQmLCB1bnNpZ25lZCk7CisgICAgdm9pZCBjbGVh
ckZsYWdzKEVsZW1lbnQmLCB1bnNpZ25lZCk7CisgICAgYm9vbCBoYXNGbGFncyhjb25zdCBFbGVt
ZW50JiwgdW5zaWduZWQgZmxhZ3MpIGNvbnN0OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxFbGVtZW50PiwgdW5zaWduZWQ+IEVsZW1lbnRGbGFnTWFwOwotICAgIEVsZW1lbnRGbGFnTWFw
IG1fZWxlbWVudHM7CisgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5IHRoaXMgbmVlZHMgdG8gYmUg
YSBSZWZQdHIuIFNob3VsZCBjaGFuZ2UgdG8gYSBjb25zdCBFbGVtZW50Ki4KKyAgICBIYXNoTWFw
PFJlZlB0cjxFbGVtZW50PiwgdW5zaWduZWQ+IG1fZWxlbWVudHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBkMTQ3MjQyNzcyMzc0NjhkNGY2MWZmZTMzYzc1ZmU0
NmE4MTkyM2RjLi4zYjhmOWQ3NDM2NThkY2E1YjlhNGY2NWU4ZjlkY2Q0ODE5NDJkZTI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgLy8g
cmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFw
aC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCiAgICAgLy8gdG8gc3Rv
cmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRv
IGZpcnN0IGNyZWF0ZSBhIHJhbmdlCiAgICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQg
b2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2
ZS4KLSAgICBSZWZQdHI8UmFuZ2U+IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNS
YW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24tPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0byBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBh
cmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogCiAgICAgUG9zaXRpb24gc3RhcnRQb3Np
dGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7CiAgICAg
aWYgKCFzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCkp
CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLAogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9u
IHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxh
Y2UuCi0gICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2Uu
Z2V0KCkpOworICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jh
bmdlLnB0cigpKTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBv
ZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQu
CiAgICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKQEAg
LTIzNCw3ICsyMzQsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0
ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKIAogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDogbWFy
a2VyVHlwZXNUb0FkZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRp
dmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBtYXJrZXJzLmFk
ZE1hcmtlcigqcmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25G
b3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwog
fQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25C
ZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKQEAgLTI2NiwxMiArMjY2LDEyIEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9u
KGNvbnN0IFZpc2libGVTCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAgICAg
bV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRl
ZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0
aW9uVHJpZ2dlcmVkKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
bV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOworICAgIGF1dG8gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5l
bmQoKSk7CiAKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMocmFuZ2Uu
Z2V0KCksIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAg
IG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVs
bGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgbWFya2Vycy5h
ZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vy
cy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKQEAg
LTM1OSw3ICszNTksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFs
dGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdQogICAgICAgICBpZiAocmVz
dWx0Lmxlbmd0aCgpKQogICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpy
YW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX3R5cGUsIG1hcmtlclR5cGVzRm9yQXV0b2Nv
cnJlY3Rpb24oKSk7CiAgICAgICAgIGVsc2UgaWYgKCFtX2lzRGlzbWlzc2VkQnlFZGl0aW5nKQot
ICAgICAgICAgICAgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1h
cmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7CisgICAgICAgICAgICBy
YW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGRNYXJrZXIoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0
ZWRDb3JyZWN0aW9uLCBtX29yaWdpbmFsVGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjoKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5
cGVTcGVsbGluZ1N1Z2dlc3Rpb25zOgpAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBub2RlLT5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzRm9yKG5vZGUpKSB7CisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBu
b2RlLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlKSkgewogICAgICAgICBB
U1NFUlQobWFya2VyKTsKICAgICAgICAgaWYgKHJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKCpt
YXJrZXIsIHBvc2l0aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQxLDEyICs0NDEsMTAg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0
aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBpZiAoIWNvbW1hbmQtPndhc0NyZWF0
ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5kLT5zdGFydGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXImIG1hcmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJr
ZXJzLmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsK
LSAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2Zy
YW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29t
bWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0byYgbWFya2VycyA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEFsdGVy
bmF0aXZlVGV4dENsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVU
ZXh0Q2xpZW50KCkKQEAgLTQ3NCw4ICs0NzIsOCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwbwog
CiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtSZXZlcnNlZChSYW5nZSYgY2hh
bmdlZFJhbmdlKQogewotICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2Us
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCkBAIC00ODMsOSArNDgxLDkgQEAgdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRS
YW5nZSwgY29uc3QgU3RyaW4KICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMg
PSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAg
ICAgZm9yIChhdXRvIG1hcmtlclR5cGUgOiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkp
IHsKICAgICAgICAgaWYgKG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAg
ICAgICBtYXJrZXJzLmFkZE1hcmtlcigmcmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFj
ZWRTdHJpbmcpOworICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwg
bWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXJrZXJzLmFkZE1hcmtlcigmcmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CisgICAgICAgICAg
ICBtYXJrZXJzLmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLCBtYXJrZXJUeXBlKTsKICAgICB9CiB9
CiAKQEAgLTUwNSw3ICs1MDMsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
Y29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKAogICAgICAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OkVkaXRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKICAgICB9CiAKLSAgICBtYXJr
ZXJzLnJlbW92ZU1hcmtlcnMoJnJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0
b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0
aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiB9CiAKIHZvaWQgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCkBAIC01
MjQsMTUgKzUyMiwxNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNl
bGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFJhbmdlPiBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9m
U2VsZWN0aW9uKTsKLSAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJh
Y3RlclJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biwgZW5kT2ZTZWxlY3Rpb24pOworICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UucHRyKCkpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFk
ZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0p
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRp
Y2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAg
ICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3
b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3Qg
aXQgYWdhaW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHBy
ZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9j
b3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7
CisgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0No
YXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29y
aWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRC
eVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0
aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKQEAgLTU3Mywy
MSArNTcxLDE5IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFy
a2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFy
dFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0
KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7Ci0gICAgaWYgKCF3b3JkUmFuZ2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQod29y
ZFJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJh
bWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci5l
bmRPZmZzZXQoKSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5n
ZS5wdHIoKSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gY3VycmVudFdvcmQ7CiAgICAgc3dpdGNoICht
YXJrZXIudHlwZSgpKSB7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6Ci0gICAg
ICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CisgICAgICAgIG1fcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAgICAgICAgIG1fZGV0YWlscyA9
IGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRl
cm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9ucyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50OgotICAgICAgICBtX3JhbmdlV2l0aEFs
dGVybmF0aXZlID0gd29yZFJhbmdlOworICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0g
V1RGTW92ZSh3b3JkUmFuZ2UpOwogICAgICAgICBtX2RldGFpbHMgPSBtYXJrZXIuZGVzY3JpcHRp
b24oKTsKICAgICAgICAgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4
dFR5cGVSZXZlcnNpb24pOwogICAgICAgICBicmVhazsKQEAgLTU5Nyw3ICs1OTMsNyBAQCBib29s
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNv
bnN0IERvY3VtZW50TWFya2VyJgogICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOwogICAgICAgICBp
ZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7
CisgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSBXVEZNb3ZlKHdvcmRSYW5nZSk7CiAg
ICAgICAgIG1fZGV0YWlscyA9IG1hcmtlckRhdGEuY29udGV4dDsKICAgICAgICAgc3RhcnRBbHRl
cm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVEaWN0YXRpb25BbHRlcm5hdGl2
ZXMpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAKaW5kZXggZDZmZDczYzIzYWNiMzE3MzVkOGM2ZDNhZjU2YTNhYjdmYjgxOTI2OC4u
MWUyMzVmNmI0ZGM2M2ZmZmQyNWNiMzdlNmRhY2E0NjgzZjVhYTNiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTc2OCwxMyArNzY4
LDEzIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vy
dmluZ01hcmtlcnMoVGV4dCYgbm9kZSwgdW5zaWduCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyJiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgYXV0byBt
YXJrZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyBjb3Vu
dCksIERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9k
ZShub2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIFJlZlB0cjxSYW5n
ZT4gbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZu
b2RlLCBvZmZzZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOworICAgIGF1dG8gbmV3UmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZz
ZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgbWFy
a2VyIDogbWFya2VycykKICNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIG1hcmtlckNvbnRyb2xs
ZXIuYWRkTWFya2VyKG5ld1JhbmdlLmdldCgpLCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGVzY3Jp
cHRpb24oKSwgbWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJrZXIubWV0YWRhdGEoKSk7CisgICAg
ICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyKG5ld1JhbmdlLCBtYXJrZXIudHlwZSgpLCBt
YXJrZXIuZGVzY3JpcHRpb24oKSwgbWFya2VyLmFsdGVybmF0aXZlcygpLCBtYXJrZXIubWV0YWRh
dGEoKSk7CiAjZWxzZQotICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5n
ZS5nZXQoKSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCkpOwotI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKKyAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFu
Z2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKKyNlbmRpZgogfQogCiBQ
b3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RpY3RhdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25D
b21tYW5kLmNwcAppbmRleCAyODJiZGM5ZTMxNWI3MmMyNWFkNWJlODJjNmJmMDcxNGQ1YzE3YWI5
Li43OTA2NjVmZDY3MmRmYjRkNmUyMTY4MTEyYzU3NGUxZTRhMTdjM2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEaWN0YXRpb25NYXJrZXJTdXBwbGll
cihhbHRlcm5hdGl2ZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2Rl
KFRleHQqIHRleHROb2RlLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5n
JiB0ZXh0VG9CZUluc2VydGVkKSBvdmVycmlkZQorICAgIHZvaWQgYWRkTWFya2Vyc1RvVGV4dE5v
ZGUoVGV4dCYgdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJp
bmcmIHRleHRUb0JlSW5zZXJ0ZWQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvJiBtYXJr
ZXJDb250cm9sbGVyID0gdGV4dE5vZGUtPmRvY3VtZW50KCkubWFya2VycygpOworICAgICAgICBh
dXRvJiBtYXJrZXJDb250cm9sbGVyID0gdGV4dE5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAg
ICAgICAgIGZvciAoYXV0byYgYWx0ZXJuYXRpdmUgOiBtX2FsdGVybmF0aXZlcykgewogICAgICAg
ICAgICAgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGEgZGF0YSB7IGFsdGVybmF0aXZlLmRp
Y3RhdGlvbkNvbnRleHQsIHRleHRUb0JlSW5zZXJ0ZWQuc3Vic3RyaW5nKGFsdGVybmF0aXZlLnJh
bmdlU3RhcnQsIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoKSB9OwogICAgICAgICAgICAgbWFya2Vy
Q29udHJvbGxlci5hZGRNYXJrZXJUb05vZGUodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3Rh
cnQgKyBvZmZzZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIFdURk1vdmUoZGF0YSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZTc5YjY0NmUyMjg5NzIwMDVlNThmZTUwZmJjMjk1MzIw
M2NiN2FlMy4uYTJkODUzODJlYTg4ZjM1MDEzYzFjOTYzMjRiNWQzZWU2OWE4N2NiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMTY1LDcgKzExNjUsNyBAQCBib29sIGFyZUlk
ZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUmIGZpcnN0LCBjb25zdCBOb2RlJiBzZWNvbmQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBmaXJzdEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihmaXJzdCk7CiAgICAgYXV0byYgc2Vjb25kRWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KHNlY29uZCk7Ci0gICAgcmV0dXJuIGZpcnN0RWxlbWVudC5oYXNUYWdOYW1lKHNlY29uZEVs
ZW1lbnQudGFnUU5hbWUoKSkgJiYgZmlyc3RFbGVtZW50Lmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVz
KCZzZWNvbmRFbGVtZW50KTsKKyAgICByZXR1cm4gZmlyc3RFbGVtZW50Lmhhc1RhZ05hbWUoc2Vj
b25kRWxlbWVudC50YWdRTmFtZSgpKSAmJiBmaXJzdEVsZW1lbnQuaGFzRXF1aXZhbGVudEF0dHJp
YnV0ZXMoc2Vjb25kRWxlbWVudCk7CiB9CiAKIGJvb2wgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tF
bGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
NjQyNTFjZjFkYzdmNjlmNWNhYmFjYTcwOWRlYzVjN2U4NzY1OTVlMC4uOGFiMGExZTBjZWZlYmY1
M2IxZDAxNTZiNGIwNjlhOWJlMjU1ZjE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApA
QCAtMTkxOCw3ICsxOTE4LDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICAg
ICAgCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQotICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAK
ICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0
aCgpKTsKQEAgLTE5MzQsNyArMTkzNCw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkK
IAogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAg
ICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NFUlQodGV4dC5sZW5ndGgo
KSk7CkBAIC0yMTAwLDEyICsyMTAwLDEyIEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlz
c3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgQVNTRVJUKGdyYW1t
YXJEZXRhaWwubG9jYXRpb24gIT0gLTEgJiYgZ3JhbW1hckRldGFpbC5sZW5ndGggPiAwKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FIDQ4NTkxOTA6IFRoaXMgZ2V0cyBjb25mdXNlZCB3aXRo
IGRvdWJsZWQgcHVuY3R1YXRpb24gYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaAotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmdy
YW1tYXJTZWFyY2hSYW5nZSwgZ3JhbW1hclBocmFzZU9mZnNldCArIGdyYW1tYXJEZXRhaWwubG9j
YXRpb24sIGdyYW1tYXJEZXRhaWwubGVuZ3RoKTsKLSAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqYmFkR3JhbW1hclJhbmdlLCBTRUxfREVG
QVVMVF9BRkZJTklUWSkpOworICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVy
YXRvcjo6c3VicmFuZ2UoKmdyYW1tYXJTZWFyY2hSYW5nZSwgZ3JhbW1hclBocmFzZU9mZnNldCAr
IGdyYW1tYXJEZXRhaWwubG9jYXRpb24sIGdyYW1tYXJEZXRhaWwubGVuZ3RoKTsKKyAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYWRHcmFt
bWFyUmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkucmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS0+dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJE
ZXRhaWwpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1h
clJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2Vy
RGVzY3JpcHRpb24pOworICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFk
R3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZ3JhbW1hckRldGFpbC51c2Vy
RGVzY3JpcHRpb24pOwogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgaWYgKCFtaXNzcGVsbGVkV29y
ZC5pc0VtcHR5KCkpIHsKQEAgLTIxMTcsNyArMjExNyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNs
aWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3Jk
KTsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFu
Z2UucHRyKCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOwogICAgIH0KIH0KIApAQCAtMjI1MCwxMyArMjI1MCwxMCBAQCBib29sIEVkaXRvcjo6
c3BlbGxpbmdQYW5lbElzU2hvd2luZygpCiAgICAgcmV0dXJuIGNsaWVudCgpLT5zcGVsbGluZ1VJ
SXNTaG93aW5nKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpjbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aW9uKQordm9pZCBFZGl0
b3I6OmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBtb3ZpbmdTZWxlY3Rpb24pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0g
bW92aW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFu
Z2UpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhzZWxlY3Rl
ZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpHcmFtbWFyKTsKLSAgICB9CisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1v
dmluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCB7IERvY3VtZW50TWFya2VyOjpT
cGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIgfSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3Zp
bmdTZWxlY3Rpb24pCkBAIC0yNTc4LDE0ICsyNTc1LDE0IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAgICAgICAgICAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFu
Z2UocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CiAgICAgICAgICAgICBpZiAoIW1fYWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+aXNTcGVsbGluZ01hcmtlckFsbG93ZWQobWlzc3BlbGxp
bmdSYW5nZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtaXNzcGVs
bGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihtaXNzcGVsbGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIHJlcGxh
Y2VtZW50KTsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOwogICAgICAgICB9IGVsc2UgaWYgKHNob3Vs
ZE1hcmtHcmFtbWFyICYmIHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYg
cGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0
aCkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0
aW9uID49IDApOwogICAgICAgICAgICAgZm9yIChhdXRvJiBkZXRhaWwgOiByZXN1bHRzW2ldLmRl
dGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLmxlbmd0aCA+IDAgJiYgZGV0
YWlsLmxvY2F0aW9uID49IDApOwogICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguY2hlY2tp
bmdSYW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiArIGRldGFpbC5sb2NhdGlvbiwgZGV0YWlsLmxl
bmd0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBwYXJh
Z3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5s
ZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5wdHIo
KSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOworICAg
ICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRFbmRMb2NhdGlvbiA8PSBzcGVs
bGluZ1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdEVuZExvY2F0aW9uID49IHBhcmFncmFwaC5jaGVj
a2luZ1N0YXJ0KCkKQEAgLTI2OTksNyArMjY5Niw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNr
VG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIFRleHRD
aGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb25JbnNl
cnQpOwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFw
aC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBjaGFuZ2Vk
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNo
YW5nZWRSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7
CisgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3Ry
aW5nKCkpOwogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2VkKGNo
YW5nZWRSYW5nZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjgxNCw3
ICsyODExLDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlF
ZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAgICAgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsCiAjZW5kaWYKICAgICB9OwotICAgIGRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMod29yZFJhbmdlLnB0cigpLCBtYXJrZXJUeXBlc1RvUmVtb3ZlLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAg
ICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZSwgbWFya2VyVHlw
ZXNUb1JlbW92ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7CiAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xlYXJEZXNjcmlwdGlv
bk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50KTsKIH0KIApAQCAtMzI5OSw3ICszMjk2LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpj
b3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZp
bmRPcHQKIAogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIGRvIHsKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFy
Z2V0LCBvcHRpb25zICYgfkJhY2t3YXJkcykpOworICAgICAgICBhdXRvIHJlc3VsdFJhbmdlKGZp
bmRQbGFpblRleHQoKnNlYXJjaFJhbmdlLCB0YXJnZXQsIG9wdGlvbnMgJiB+QmFja3dhcmRzKSk7
CiAgICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgICAgIGlm
ICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNJblNoYWRvd1RyZWUoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTMzMTEsMTAgKzMzMDgsMTAgQEAgdW5zaWduZWQgRWRpdG9y
Ojpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2Us
IEZpbmRPcHQKIAogICAgICAgICArK21hdGNoQ291bnQ7CiAgICAgICAgIGlmIChtYXRjaGVzKQot
ICAgICAgICAgICAgbWF0Y2hlcy0+YXBwZW5kKHJlc3VsdFJhbmdlKTsKKyAgICAgICAgICAgIG1h
dGNoZXMtPmFwcGVuZChyZXN1bHRSYW5nZS5wdHIoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
bWFya01hdGNoZXMpCi0gICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIo
cmVzdWx0UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6VGV4dE1hdGNoKTsKIAogICAgICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgd2UgaGl0IHRo
ZSBzcGVjaWZpZWQgbGltaXQuIEEgbGltaXQgb2YgMCBtZWFucyBubyBsaW1pdC4KICAgICAgICAg
aWYgKGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49IGxpbWl0KQpAQCAtMzQ2MSwxMCArMzQ1OCwx
MCBAQCB2b2lkIEVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYgcmFu
Z2UsIGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZwogICAgICAgICB1bnNpZ25lZCBzdWJyYW5nZU9m
ZnNldCA9IHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbjsKICAgICAgICAg
dW5zaWduZWQgc3VicmFuZ2VMZW5ndGggPSByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVT
dGFydFBvc2l0aW9uICsgMTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IHN1YnJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShyYW5nZSwgc3VicmFuZ2VPZmZzZXQsIHN1YnJhbmdlTGVuZ3Ro
KTsKKyAgICAgICAgYXV0byBzdWJyYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocmFuZ2Us
IHN1YnJhbmdlT2Zmc2V0LCBzdWJyYW5nZUxlbmd0aCk7CiAKLSAgICAgICAgbWFya2VkUmFuZ2Vz
LmFwcGVuZChzdWJyYW5nZSk7Ci0gICAgICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKHN1YnJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVt
YmVyKTsKKyAgICAgICAgbWFya2VkUmFuZ2VzLmFwcGVuZChzdWJyYW5nZS5wdHIoKSk7CisgICAg
ICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHN1YnJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKIAogICAgICAgICBzY2FubmVyUG9zaXRp
b24gKz0gcmVsYXRpdmVFbmRQb3NpdGlvbiArIDE7CiAgICAgfQpAQCAtMzUyOSwxMSArMzUyNiwx
MSBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKIAogICAgICAgICBp
ZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0
ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSkgewogICAgICAgICAg
ICAgaWYgKFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAg
ICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKndvcmRSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRl
eHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFu
Z2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAo
UmVmUHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1h
bGl6ZWRSYW5nZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoc2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwor
ICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbnRl
bmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMzU3NSw3ICszNTcyLDcgQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzTWFya2Vy
Rm9yKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUsIGkKIAogICAgIHVuc2ln
bmVkIGludCBzdGFydE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJvbSk7CiAg
ICAgdW5zaWduZWQgaW50IGVuZE9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZnJv
bSArIGxlbmd0aCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
ID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlKTsKKyAgICBWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJr
ZXJzRm9yKCpub2RlKTsKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAg
ICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBzdGFydE9mZnNldCAmJiBlbmRPZmZzZXQg
PD0gbWFya2VyLT5lbmRPZmZzZXQoKSAmJiBtYXJrZXItPnR5cGUoKSA9PSBtYXJrZXJUeXBlKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjkzLDcgKzM2OTAsNyBAQCB2b2lkIEVkaXRv
cjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2Fu
ZGlkYXRlKQogCiAgICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlID0gcmFu
Z2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudC5sZW5ndGgoKSwg
RGlyZWN0aW9uQmFja3dhcmQpOwogICAgIGlmIChpbnNlcnRlZENhbmRpZGF0ZVJhbmdlKQotICAg
ICAgICBpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCku
bWFya2VycygpLmFkZE1hcmtlcihpbnNlcnRlZENhbmRpZGF0ZVJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50
KTsKKyAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmluc2VydGVkQ2FuZGlkYXRlUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSwgYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1l
bnQpOwogCiAgICAgbV9pc0hhbmRsaW5nQWNjZXB0ZWRDYW5kaWRhdGUgPSBmYWxzZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggZWZkODY1
MDlhMTVlNmM1OGRiYzlhNzBmMTk5MGJmNmY1OTAyZmRjMi4uZmJjZDJmZmZhZWVlZDQ1MjY5MDEz
NTdjYTYzNThjMjJhMWNhNDRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0Tm9kZSwgb2Zmc2V0
LCBtX3RleHQpOwogICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHROb2RlLmdldCgp
LCBvZmZzZXQgKyBtX3RleHQubGVuZ3RoKCkpOwogICAgICAgICBpZiAobV9tYXJrZXJTdXBwbGll
cikKLSAgICAgICAgICAgIG1fbWFya2VyU3VwcGxpZXItPmFkZE1hcmtlcnNUb1RleHROb2RlKHRl
eHROb2RlLmdldCgpLCBvZmZzZXQsIG1fdGV4dCk7CisgICAgICAgICAgICBtX21hcmtlclN1cHBs
aWVyLT5hZGRNYXJrZXJzVG9UZXh0Tm9kZSgqdGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKIAog
ICAgICAgICBpZiAobV9yZWJhbGFuY2VUeXBlID09IFJlYmFsYW5jZUxlYWRpbmdBbmRUcmFpbGlu
Z1doaXRlc3BhY2VzKSB7CiAgICAgICAgICAgICAvLyBUaGUgaW5zZXJ0aW9uIG1heSByZXF1aXJl
IGFkanVzdGluZyBhZGphY2VudCB3aGl0ZXNwYWNlLCBpZiBpdCBpcyBwcmVzZW50LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCmluZGV4IDliYzhiMzk5NTY3ZWQ3
NTJhYWQxOTRiNDZkODYxMzIyZDI2ZDc2MTAuLjEyZWE5ZDQ0NjA2NTE5NzY2YWZkYzA1NzJmYjU3
ZjNkYTU2MjQzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4
dENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgVGV4dDsKIGNsYXNzIFRleHRJbnNlcnRpb25NYXJr
ZXJTdXBwbGllciA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGll
cj4gewogcHVibGljOgogICAgIHZpcnR1YWwgflRleHRJbnNlcnRpb25NYXJrZXJTdXBwbGllcigp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGRNYXJrZXJzVG9UZXh0Tm9kZShUZXh0KiwgdW5zaWdu
ZWQgb2Zmc2V0T2ZJbnNlcnRpb24sIGNvbnN0IFN0cmluZyYgdGV4dEluc2VydGVkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFkZE1hcmtlcnNUb1RleHROb2RlKFRleHQmLCB1bnNpZ25lZCBvZmZz
ZXRPZkluc2VydGlvbiwgY29uc3QgU3RyaW5nJiB0ZXh0SW5zZXJ0ZWQpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICBUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIoKSB7IH0KIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggYTI5NGJiMzAzN2E0ODFiNzQwNDJmYjdk
NTFiZDYyNGY3ZTlmOThiMi4uYWZjOTRjOTlmZTYyNWU2OGVhZTI1NjI2NTZjZTFlYWJjN2I3NTJi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtMjIzLDcgKzIy
Myw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoaW50IHNlcXVlbmNlLCBj
b25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0CiAgICAgICAgIGlmIChyZXF1ZXN0RGF0YS5t
YXNrKCkgJiBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAgICAgICAgICAgIG1hcmtlclR5cGVz
IHw9IERvY3VtZW50TWFya2VyOjpHcmFtbWFyOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92
ZU1hcmtlcnMoJm1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2VyVHlw
ZXMpOworICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3ZlTWFy
a2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVzKTsK
ICAgICB9CiAgICAgZGlkQ2hlY2soc2VxdWVuY2UsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5YWQwOTBmMDhm
NzQ3MDljYWQxMTc1OGE1NzQ2NGI5OGFlMDRhMGE1Li45Yjc3NjEwMmY5ZjE1YWM5NjY4OTkzODA5
N2NiMjJlZWEyZmQwYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb21tYW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21t
YW5kOjpkb0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwg
V1RGTW92ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIGRvY3VtZW50
KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIucHRyKCksIDAsIG1fb2Zmc2V0LCBtX3Rl
eHQxLmdldCgpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3Rl
eHQyLCAwLCBtX29mZnNldCwgKm1fdGV4dDEsIDApOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRUcmlt
VGV4dDIoKTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6
ZG9VbmFwcGx5KCkKIAogICAgIG1fdGV4dDItPmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7CiAK
LSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAwLCBw
cmVmaXhUZXh0Lmxlbmd0aCgpLCBtX3RleHQyLnB0cigpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5jb3B5TWFya2VycygqbV90ZXh0MSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90
ZXh0MiwgMCk7CiAgICAgbV90ZXh0MS0+cmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCBmNjU0MTA2NGJmZTM4OTViOTAy
MjBlNGE1MzFjOWVmZDFiMmY5MzZlLi44ZDk1ODI0MDM1NmRjNzcyYzVhNTcyYWNkMDI0MDBhMzg4
ODljZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCkBAIC0yNTIsMTcgKzI1MiwxNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvbwogCiAgICAg
ICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGggPiAw
ICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gPCB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTGVuZ3Ro
IDw9IHRleHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3Ro
IDw9IHRleHRMZW5ndGgpIHsKICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3Bl
bGxlZCB3b3JkCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBU
ZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRDaHVua09mZnNldCArIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gbWlz
c3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogCiAg
ICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBhbmQg
aXRzIG9mZnNldC4KICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgewogICAgICAg
ICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBt
aXNzcGVsbGluZ0xvY2F0aW9uOwogICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSB0
ZXh0LnN1YnN0cmluZyhtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCkudG9T
dHJpbmcoKTsKLSAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVs
bGluZ1JhbmdlOworICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3Nw
ZWxsaW5nUmFuZ2UucHRyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFN0b3Jl
IG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAg
IG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAK
ICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3Qg
bWlzc3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KICAgICAgICAgICAgIGlmICghbWFy
a0FsbCkKQEAgLTQyNiw4ICs0MjYsOCBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya0FsbCkgewotICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKG1fcmFuZ2UsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0
YWlsLT5sb2NhdGlvbiwgZGV0YWlsLT5sZW5ndGgpOwotICAgICAgICAgICAgYmFkR3JhbW1hclJh
bmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRH
cmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVy
YXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRP
ZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBi
YWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+
dXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmVtZW1i
ZXIgdGhpcyBkZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBvdXIgY3VycmVudCBjYW5k
aWRhdGUgKHRoZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQgb3JkZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmluZGV4
IGMxOTMyZGVlMWRhNGE4ZDJhYWJlMjY2MjAxZmYwMDQxMTk0NjI2ZTkuLmVlOTM5OWE3NmQyNTg1
Zjg1NzFlOTMwYmViMWVkM2QxZjFiZDAzY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQg
RGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAgICAgICAgIGlucHV0VGV4dChmaXJzdElu
dGVycHJldGF0aW9uLCB0cnVlKTsKIAogICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUo
KSA+IDEpCi0gICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKGVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIGludGVycHJldGF0aW9ucyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKCplbmRpbmdT
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBpbnRlcnByZXRhdGlvbnMpOwogCiAgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigp
LnZpc2libGVFbmQoKSkpOwogICAgIH0KQEAgLTcxLDcgKzcxLDggQEAgdm9pZCBEaWN0YXRpb25D
b21tYW5kSU9TOjpkb0FwcGx5KCkKIAogICAgIGlmIChzdGFydEluZGV4ID49IDApIHsKICAgICAg
ICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9j
YXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSwgc3RhcnRJbmRleCwg
ZW5kSW5kZXgsIHRydWUpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRp
b25SZXN1bHRNYXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIG1fbWV0YWRhdGEpOworICAgICAgICBB
U1NFUlQocmVzdWx0UmFuZ2UpOyAvLyBGSVhNRTogV2hhdCBndWFyYW50ZWVzIHRoaXM/CisgICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVzdWx0
UmFuZ2UsIG1fbWV0YWRhdGEpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
RWRpdG9ySU9TLm1tCmluZGV4IGRjNmU3MTU1OTAwNjAxZmJhOTZmNDljMWUwMGJkYzA0ZjhmMDM5
M2EuLmQ0NmE3ODY1ZDBiYjkyMGNkYzAyYTM5ZTFiYWJmZTVkNWRmNjJlZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTQ2NiwxMyArNDY2LDEzIEBAIHZvaWQg
RWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgICAgIGludCBkaWN0YXRpb25QaHJhc2VFbmQgPSBwcmV2
aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ICsgZGljdGF0aW9uUGhyYXNlTGVuZ3RoOwogICAgICAg
ICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIGF1dG8gZGlj
dGF0aW9uUGhyYXNlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZ0ZXh0Tm9kZSwg
cHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwgJnRleHROb2RlLCBkaWN0YXRpb25QaHJhc2VF
bmQpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlc01hcmtlcihkaWN0YXRpb25QaHJhc2VSYW5nZS5wdHIoKSwgaW50ZXJw
cmV0YXRpb25zKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlv
blBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoZGljdGF0aW9uUGhyYXNlUmFuZ2UuZ2V0KCks
IGludGVycHJldGF0aW9ucyk7CiAgICAgICAgIH0KICAgICAgICAgcHJldmlvdXNEaWN0YXRpb25Q
aHJhc2VTdGFydCA9IGRpY3RhdGlvblBocmFzZUVuZDsKICAgICB9CiAKICAgICBhdXRvIHJlc3Vs
dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUsIDAsICZ0ZXh0Tm9k
ZSwgdGV4dE5vZGUubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3Rh
dGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZS5wdHIoKSwgbWV0YWRhdGEpOworICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZS5nZXQo
KSwgbWV0YWRhdGEpOwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKaW5kZXggMzRiZjI3OTdkMTQz
ZDE5MzU3N2MyZDhlNTk2YmMyMWMyZjYyYTY1Yy4uMGU4ZDk2Mjk5NDJkNTc5ZTM0NjhjMGY4OWFm
NDg1YmMxNjhkODRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCkBAIC0x
MzIsNyArMTMyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRmlsZVJlYWRlcjo6cmVhZEludGVybmFs
KEJsb2ImIGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXAKICAgICBpZiAobV9zdGF0ZSA9
PSBMT0FESU5HKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZp
dHkoKnRoaXMpOwogCiAgICAgbV9ibG9iID0gJmJsb2I7CiAgICAgbV9yZWFkVHlwZSA9IHR5cGU7
CkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjphYm9ydCgpCiAgICAgICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIAogICAgICAgICAvLyBBbGwgcG9z
c2libGUgZXZlbnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBh
Y3Rpdml0eS4KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtMjA0LDcgKzIwNCw3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCiAgICAgZmlyZUV2ZW50KGV2
ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogICAgIAogICAgIC8vIEFsbCBwb3NzaWJsZSBldmVu
dHMgaGF2ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5Lgot
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCkBA
IC0yMjEsNyArMjIxLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUp
CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogICAgIAogICAgIC8v
IEFsbCBwb3NzaWJsZSBldmVudHMgaGF2ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBw
ZW5kaW5nIGFjdGl2aXR5LgotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVu
c2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcAppbmRleCA4NWRiNDM4M2VmZmE2MWQ0MTExOTY4ZDcwNjUyNGJjZjE3ODI2
Zjg0Li44MTRlOTE2ZjliZmYxMWQ0ZDZmNWMyMGQzNjg4NGU5NTE0OWJkMTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2lu
Y2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
RW1iZWRkZWRPYmplY3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERl
dGFpbHNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50
LmNwcAppbmRleCBjM2Y0OTg0NTBmZmE3ZjhlMTcwNmJmYzA4OGU1MGIzZmY5ZTk4NmE1Li40ODRi
Y2I3NmMxZTAwMTIwNTViNzg3NDhjYzI5NWU1NjY1OTI0NzgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgUmVuZGVyUHRy
PFJlbmRlckVsZW1lbnQ+IEhUTUxEZXRhaWxzRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93
PigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi12b2lkIEhUTUxEZXRhaWxzRWxlbWVudDo6
ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MRGV0
YWlsc0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkK
IHsKICAgICBhdXRvIHN1bW1hcnlTbG90ID0gSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRh
ZywgZG9jdW1lbnQoKSk7CiAgICAgc3VtbWFyeVNsb3QtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24obmFtZUF0dHIsIHN1bW1hcnlTbG90TmFtZSgpKTsKQEAgLTExNSw3ICsxMTUs
NyBAQCB2b2lkIEhUTUxEZXRhaWxzRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290KiByb290KQogICAgIG1fZGVmYXVsdFN1bW1hcnkgPSBkZWZhdWx0U3VtbWFyeS5w
dHIoKTsKIAogICAgIHN1bW1hcnlTbG90LT5hcHBlbmRDaGlsZChkZWZhdWx0U3VtbWFyeSk7Ci0g
ICAgcm9vdC0+YXBwZW5kQ2hpbGQoc3VtbWFyeVNsb3QpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQo
c3VtbWFyeVNsb3QpOwogCiAgICAgbV9kZWZhdWx0U2xvdCA9IEhUTUxTbG90RWxlbWVudDo6Y3Jl
YXRlKHNsb3RUYWcsIGRvY3VtZW50KCkpOwogICAgIEFTU0VSVCghbV9pc09wZW4pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERldGFpbHNFbGVtZW50LmgKaW5kZXggZjFjNDZmZjM1ZDc2NjI0YWZl
ZTNlY2ViNjQyMDQyMzYyZjJkM2JmMC4uZTQ4MzY1NzE2MDM4NDY4MDJlODdhMmMxNzhlOTc3YjAx
ZDNhOGRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRGV0YWlsc0VsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEZXRhaWxzRWxlbWVudC5oCkBAIC00
Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0
ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24m
KSBmaW5hbDsKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKIAotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hh
ZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFk
b3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKICAgICBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBib29sIG1faXNPcGVuIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAppbmRleCBjYmRmZGQzZWZjYWFk
YWY4ZmJmNDAwYjZjMjU0ODBhNDNhZWQzMjAzLi44MWVmMTdlZmIxNGM5ZGZmZmJiODg5ZGE1OWU5
MjM5N2VlNTg3YTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCkBAIC04OCw2
ICs4OCwxNiBAQCBIVE1MRG9jdW1lbnQ6OkhUTUxEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0
IFVSTCYgdXJsLCBEb2N1bWVudENsYXNzRmxhZ3MgZG9jdQogICAgIGNsZWFyWE1MVmVyc2lvbigp
OwogfQogCitSZWY8SFRNTERvY3VtZW50PiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZShGcmFtZSogZnJh
bWUsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1
bWVudChmcmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcykpOworfQorCitSZWY8SFRNTERvY3Vt
ZW50PiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJhbWUmIGZyYW1l
LCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1l
bnQoJmZyYW1lLCB1cmwsIEhUTUxEb2N1bWVudENsYXNzLCBTeW50aGVzaXplZCkpOworfQorCiBI
VE1MRG9jdW1lbnQ6On5IVE1MRG9jdW1lbnQoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50LmgKaW5kZXggMjNkZTRkYzFjNjg1YTI4YTJmNDBlOGFjZDVjZjBhNmQ4ZmMyN2M2Zi4uMWNk
NWMxMTU0ZGE4ZDY1NmRhODI1ZDI3MTAwMGYyN2NmYmI4NjA2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5oCkBAIC0yOCwxNiArMjgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEhUTUxEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERvY3VtZW50KGZyYW1lLCB1
cmwsIEhUTUxEb2N1bWVudENsYXNzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxIVE1MRG9j
dW1lbnQ+IGNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwm
IHVybCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudChm
cmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcywgU3ludGhlc2l6ZWQpKTsKLSAgICB9Ci0KKyAg
ICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiwgY29uc3QgVVJMJik7Cisg
ICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJh
bWUmLCBjb25zdCBVUkwmKTsKICAgICB2aXJ0dWFsIH5IVE1MRG9jdW1lbnQoKTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIGludCB3aWR0aCgpOwpAQCAtNjQsNyArNTYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgSFRNTERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgRG9jdW1lbnRDbGFzc0ZsYWdzID0g
MCwgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKIAogcHJpdmF0ZToKLSAgICBib29s
IGlzRnJhbWVTZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzRnJhbWVTZXQoKSBjb25z
dCBmaW5hbDsKICAgICBSZWY8RG9jdW1lbnRQYXJzZXI+IGNyZWF0ZVBhcnNlcigpIG92ZXJyaWRl
OwogICAgIFJlZjxEb2N1bWVudD4gY2xvbmVEb2N1bWVudFdpdGhvdXRDaGlsZHJlbigpIGNvbnN0
IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggZTMy
NTY3YTJlYTE0YTk1ZjZlOTY4ZTg5ZDE0YTg0OTJiMDU0YzViYy4uZTFhZGQyNjAyMzRmYTNiMDM0
NzI0MjkyMTQyM2ZjYTk4NDEzYTg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcApAQCAtNzcsNyArNzcsNyBAQCBIVE1MRm9ybUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1l
bnQoKQogewogICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS53aWxsRGVsZXRlRm9ybSh0
aGlzKTsKICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKQotICAgICAgICBkb2N1bWVudCgp
LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAg
IGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhp
cyk7CiAKICAgICBtX2RlZmF1bHRCdXR0b24gPSBudWxscHRyOwogICAgIGZvciAoYXV0byYgYXNz
b2NpYXRlZEVsZW1lbnQgOiBtX2Fzc29jaWF0ZWRFbGVtZW50cykKQEAgLTQzMSw5ICs0MzEsOSBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgICAgICBtX2F0dHJpYnV0ZXMuc2V0QWNjZXB0
Q2hhcnNldCh2YWx1ZSk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBhdXRvY29tcGxldGVBdHRyKSB7
CiAgICAgICAgIGlmICghc2hvdWxkQXV0b2NvbXBsZXRlKCkpCi0gICAgICAgICAgICBkb2N1bWVu
dCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAg
ICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygq
dGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZv
ckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50
KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7
CiB9CkBAIC04MDIsOCArODAyLDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc3VtZUZyb21E
b2N1bWVudFN1c3BlbnNpb24oKQogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRpZE1vdmVUb05ld0Rv
Y3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KQogewog
ICAgIGlmICghc2hvdWxkQXV0b2NvbXBsZXRlKCkpIHsKLSAgICAgICAgb2xkRG9jdW1lbnQudW5y
ZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgZG9j
dW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNr
cygqdGhpcyk7CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBIVE1MRWxlbWVudDo6ZGlkTW92ZVRv
TmV3RG9jdW1lbnQob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKaW5kZXggZDMwMzIyZGMwYzQ4ZmI4MjA2ZWFiYjY2Y2Fl
ZjJiOGZlNjk3YjY0Zi4uM2JiN2U0YTdlN2IwZDVjMjlkZGFkNjMzZmUzMjVjNzBjNWZkYjAyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRE9NVG9rZW5M
aXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRl
ICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCmluZGV4IDM4YjEyNTQ5MTVmYWRjYjI5ZTRkNTNlNGQyYjJiNjI5N2Q5NGFj
NmEuLjgyOWEzMDcyMzkzZTcyMTViZWEwMmJjNjJlZTk0OTcxYjgzN2JiOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTM5LDcgKzEzOSw3IEBAIEhUTUxJ
bWFnZUxvYWRlciYgSFRNTElucHV0RWxlbWVudDo6ZW5zdXJlSW1hZ2VMb2FkZXIoKQogICAgIHJl
dHVybiAqbV9pbWFnZUxvYWRlcjsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKQordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpk
aWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKQogewogICAgIG1faW5wdXRUeXBl
LT5jcmVhdGVTaGFkb3dTdWJ0cmVlKCk7CiAgICAgdXBkYXRlSW5uZXJUZXh0RWxlbWVudEVkaXRh
YmlsaXR5KCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKQogSFRNTElucHV0RWxlbWVudDo6fkhU
TUxJbnB1dEVsZW1lbnQoKQogewogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQot
ICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcygqdGhpcyk7CiAKICAgICAvLyBOZWVkIHRvIHJlbW92ZSBmb3JtIGFzc29j
aWF0aW9uIHdoaWxlIHRoaXMgaXMgc3RpbGwgYW4gSFRNTElucHV0RWxlbWVudAogICAgIC8vIHNv
IHRoYXQgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuCkBAIC0xNTYsNyAr
MTU2LDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogICAgIC8vIHNl
dEZvcm0oMCkgbWF5IHJlZ2lzdGVyIHRoaXMgdG8gYSBkb2N1bWVudC1sZXZlbCByYWRpbyBidXR0
b24gZ3JvdXAuCiAgICAgLy8gV2Ugc2hvdWxkIHVucmVnaXN0ZXIgaXQgdG8gYXZvaWQgYWNjZXNz
aW5nIGEgZGVsZXRlZCBvYmplY3QuCiAgICAgaWYgKGlzUmFkaW9CdXR0b24oKSkKLSAgICAgICAg
ZG9jdW1lbnQoKS5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0
dG9uKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmZvcm1Db250cm9sbGVyKCkucmFkaW9CdXR0
b25Hcm91cHMoKS5yZW1vdmVCdXR0b24oKnRoaXMpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAgICAgaWYgKG1faGFzVG91Y2hFdmVudEhhbmRsZXIpCiAgICAgICAgIGRvY3VtZW50KCkuZGlk
UmVtb3ZlRXZlbnRUYXJnZXROb2RlKCp0aGlzKTsKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBub3dDaGVja2VkLCBUZXh0RmllbGRFdmVu
dEJlaGF2aW9yIGV2ZW50QgogICAgIGludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKIAogICAg
IGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkpCi0g
ICAgICAgIGJ1dHRvbnMtPnVwZGF0ZUNoZWNrZWRTdGF0ZSh0aGlzKTsKKyAgICAgICAgYnV0dG9u
cy0+dXBkYXRlQ2hlY2tlZFN0YXRlKCp0aGlzKTsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5k
ZXJlcigpLT5zdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dGhl
bWUoKS5zdGF0ZUNoYW5nZWQoKnJlbmRlcmVyKCksIENvbnRyb2xTdGF0ZXM6OkNoZWNrZWRTdGF0
ZSk7CiAgICAgdXBkYXRlVmFsaWRpdHkoKTsKQEAgLTE0MjUsMTMgKzE0MjUsMTMgQEAgYm9vbCBI
VE1MSW5wdXRFbGVtZW50OjpuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZOZWVkZWQoKQogewogICAg
IGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVu
dCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAog
dm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1bnJlZ2lzdGVyRm9yU3VzcGVuc2lvbkNhbGxiYWNrSWZO
ZWVkZWQoKQogewogICAgIGlmICghbmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkKLSAgICAgICAg
ZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMp
OworICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja3MoKnRoaXMpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3Jt
Q29udHJvbCgpIGNvbnN0CkBAIC0xNTMwLDExICsxNTMwLDExIEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVu
dCYgbmV3CiAKICAgICAvLyBBbHdheXMgdW5yZWdpc3RlciBmb3IgY2FjaGUgY2FsbGJhY2tzIHdo
ZW4gbGVhdmluZyBhIGRvY3VtZW50LCBldmVuIGlmIHdlIHdvdWxkIG90aGVyd2lzZSBsaWtlIHRv
IGJlIHJlZ2lzdGVyZWQKICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2soKSkgewotICAg
ICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KHRoaXMpOwotICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lv
bkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgb2xkRG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lz
dGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKICAgICB9CiAgICAgaWYg
KGlzUmFkaW9CdXR0b24oKSkKLSAgICAgICAgb2xkRG9jdW1lbnQuZm9ybUNvbnRyb2xsZXIoKS5y
YWRpb0J1dHRvbkdyb3VwcygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgb2xkRG9jdW1l
bnQuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJlbW92ZUJ1dHRvbigqdGhp
cyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNUb3VjaEV2ZW50SGFu
ZGxlcikgewogICAgICAgICBvbGREb2N1bWVudC5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRo
aXMpOwpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZXF1aXJl
ZEF0dHJpYnV0ZUNoYW5nZWQoKQogewogICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpy
ZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBpZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1
dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICBidXR0b25zLT5yZXF1aXJlZEF0
dHJpYnV0ZUNoYW5nZWQodGhpcyk7CisgICAgICAgIGJ1dHRvbnMtPnJlcXVpcmVkQXR0cmlidXRl
Q2hhbmdlZCgqdGhpcyk7CiAgICAgbV9pbnB1dFR5cGUtPnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdl
ZCgpOwogfQogCkBAIC0xODM5LDcgKzE4MzksNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6Omlz
SW5SZXF1aXJlZFJhZGlvQnV0dG9uR3JvdXAoKQogewogICAgIEFTU0VSVChpc1JhZGlvQnV0dG9u
KCkpOwogICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3Jv
dXBzKCkpCi0gICAgICAgIHJldHVybiBidXR0b25zLT5pc0luUmVxdWlyZWRHcm91cCh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIGJ1dHRvbnMtPmlzSW5SZXF1aXJlZEdyb3VwKCp0aGlzKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4NzEsMTQgKzE4NzEsMTQgQEAgUmFkaW9CdXR0b25Hcm91
cHMqIEhUTUxJbnB1dEVsZW1lbnQ6OnJhZGlvQnV0dG9uR3JvdXBzKCkgY29uc3QKIAogaW5saW5l
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWRkVG9SYWRpb0J1dHRvbkdyb3VwKCkKIHsKLSAgICBp
ZiAoUmFkaW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAg
ICAgICBidXR0b25zLT5hZGRCdXR0b24odGhpcyk7CisgICAgaWYgKGF1dG8qIGJ1dHRvbnMgPSBy
YWRpb0J1dHRvbkdyb3VwcygpKQorICAgICAgICBidXR0b25zLT5hZGRCdXR0b24oKnRoaXMpOwog
fQogCiBpbmxpbmUgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVGcm9tUmFkaW9CdXR0b25H
cm91cCgpCiB7Ci0gICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0
b25Hcm91cHMoKSkKLSAgICAgICAgYnV0dG9ucy0+cmVtb3ZlQnV0dG9uKHRoaXMpOworICAgIGlm
IChhdXRvKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgYnV0dG9ucy0+
cmVtb3ZlQnV0dG9uKCp0aGlzKTsKIH0KIAogdW5zaWduZWQgSFRNTElucHV0RWxlbWVudDo6aGVp
Z2h0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggZDI2
MzI3ZmY4MWRhNjM0OTZmMDM5ZDczZGMwYTcwMWE3NjdiMmJkOS4uYjgzYWFlMGJjZGI4OWFjN2U1
NjE0M2UyYTcxYWJmZjkwN2MwYmRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgKQEAgLTM0MSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGVudW0g
QXV0b0NvbXBsZXRlU2V0dGluZyB7IFVuaW5pdGlhbGl6ZWQsIE9uLCBPZmYgfTsKIAotICAgIHZv
aWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9p
ZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIHZv
aWQgd2lsbENoYW5nZUZvcm0oKSBmaW5hbDsKICAgICB2b2lkIGRpZENoYW5nZUZvcm0oKSBmaW5h
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGRjZjA3ZTlh
ZDE2MzFhMGY4MmI5ZTQ4YWU3ZjNhZThjYmJkYjcyYzEuLmNhMDQ0ZjRhNzZlMDJjNWVkNzg1YmNl
YjllZTg1MGMzNDAzNzY4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcApAQCAtNjcyLDMzICs2NzIsMzMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZWdpc3Rl
cldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9tZWRpYVNlc3Npb24tPnJl
Z2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGls
TWVkaWFDYW5TdGFydCkKLSAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KHRoaXMpOworICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMp
OwogCiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvck1lZGlhVm9s
dW1lQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9y
TWVkaWFWb2x1bWVDYWxsYmFja3MoKnRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCi0gICAg
ZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMp
OworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNr
cygqdGhpcyk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKG1fcmVxdWlyZUNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpCi0gICAgICAgIGRvY3VtZW50LnJlZ2lz
dGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKCp0
aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKICAgICBp
ZiAobV9tZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IpCi0gICAgICAgIGRvY3Vt
ZW50LnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAg
ICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tz
KCp0aGlzKTsKICAgICBkb2N1bWVudC5yZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogICAgIGRvY3VtZW50LnJlZ2lz
dGVyRm9yQWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hhbmdlZENhbGxiYWNrcygq
dGhpcyk7CiAKLSAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgIGRvY3Vt
ZW50LmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogICAgIGFkZEVsZW1lbnRUb0RvY3VtZW50TWFw
KCp0aGlzLCBkb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpAQCAtNzExLDMz
ICs3MTEsMzMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aERvY3VtZW50
KERvY3VtZW50JiBkb2N1bWVudCkKICAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhE
b2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3Rh
cnQpCi0gICAgICAgIGRvY3VtZW50LnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsK
KyAgICAgICAgZG9jdW1lbnQucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAog
I2lmICFQTEFURk9STShJT1MpCi0gICAgZG9jdW1lbnQudW5yZWdpc3RlckZvck1lZGlhVm9sdW1l
Q2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQudW5yZWdpc3RlckZv
ck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9y
UHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICNlbmRpZgogCi0g
ICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
dGhpcyk7CisgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChtX3Jl
cXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKQotICAgICAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsK
KyAgICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NS
SVBUKQogICAgIGlmIChtX21lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3RvcikKLSAg
ICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFj
a3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yVXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGRvY3VtZW50LnVucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQu
dW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYK
IAogICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxh
eWJhY2tDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAotICAgIGRvY3VtZW50LnJlbW92ZUF1ZGlv
UHJvZHVjZXIodGhpcyk7CisgICAgZG9jdW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcigqdGhpcyk7
CiAgICAgcmVtb3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwogCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTEzMjgsNyArMTMyOCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAgICAgICAgIGlmIChtX2lzV2FpdGlu
Z1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9pc1dh
aXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQgPSB0cnVlOwotICAgICAgICBkb2N1bWVudCgpLmFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNh
blN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zOTEy
LDcgKzM5MTIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhSZWY8VGV4
dFRyYWNrPiYmIHRyYWNrKQogICAgIGlmICghbV9yZXF1aXJlQ2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZENhbGxiYWNrcykgewogICAgICAgICBtX3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFu
Z2VkQ2FsbGJhY2tzID0gdHJ1ZTsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZvckNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIG1fY2FwdGlvbkRpc3BsYXlN
b2RlID0gcGFnZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRGlzcGxheU1v
ZGUoKTsKICAgICB9CkBAIC01MzY5LDcgKzUzNjksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmNsZWFyTWVkaWFQbGF5ZXIoRGVsYXllZEFjdGlvblR5cGUgZmxhZ3MpCiAKICAgICBpZiAobV9p
c1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpIHsKICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1l
ZGlhQ2FuU3RhcnQgPSBmYWxzZTsKLSAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0
YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFy
dExpc3RlbmVyKCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAobV9wbGF5ZXIpIHsKQEAgLTU1MDMs
NyArNTUwMyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKICAgICBzZXRTaG91
bGRCdWZmZXJEYXRhKHRydWUpOwogCiAgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93
c1BsYXliYWNrQWZ0ZXJSZXN1bWluZygqdGhpcykpCi0gICAgICAgIGRvY3VtZW50KCkuYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgZWxzZQogICAgICAgICBzZXRQYXVzZWRJbnRlcm5h
bChmYWxzZSk7CiAKQEAgLTcwMTMsNyArNzAxMyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
c2V0Q29udHJvbGxlckpTUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU0M6OkpT
CiAgICAgY29udHJvbGxlck9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wdXQoY29udHJvbGxlck9i
amVjdCwgZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIHByb3BlcnR5VmFsdWUsIHByb3BlcnR5U2xvdCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJv
b3QpCiB7CiAgICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIpOwogCkBAIC03MTEyLDkgKzcxMTIs
OSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VT
Y2FsZUZhY3Rvcihib29sIGRlcGVuZHNPblBhZwogICAgIG1fbWVkaWFDb250cm9sc0RlcGVuZE9u
UGFnZVNjYWxlRmFjdG9yID0gZGVwZW5kc09uUGFnZVNjYWxlOwogCiAgICAgaWYgKG1fbWVkaWFD
b250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVudCgpLnJlZ2lz
dGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQoKS5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMp
OwogICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVy
Rm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiB9CiAKIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0aW9uTW9kZUNo
YW5nZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGYwNzAyN2Rk
MzVmYjVmOTI5MDUyNDNjMmYyYWNjNTgzM2ZlZjA3NGIuLjcwNTc5MzYyZTI5NGNmYjA2ZDU4MTVj
NGFjNzIzMGZhZGMzNjkxMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
CkBAIC04MzAsNyArODMwLDcgQEAgcHJpdmF0ZToKICAgICBTbGVlcFR5cGUgc2hvdWxkRGlzYWJs
ZVNsZWVwKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAg
IHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290Kikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBvdmVycmlkZTsK
ICAgICBET01XcmFwcGVyV29ybGQmIGVuc3VyZUlzb2xhdGVkV29ybGQoKTsKICAgICBib29sIGVu
c3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAppbmRleCAwMjM5YjMzNWM4MWZkOWY4OTVmYzA3OGJm
MDE5MTIyMWU1YTEzNmU0Li5hNjc4YTIwMGE4NTMwODAyYTUxMzI4NWQ1ZTU3YzVlM2ExYWFjNWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKQEAgLTIyMyw3ICsy
MjMsNyBAQCBSZW5kZXJNZXRlciogSFRNTE1ldGVyRWxlbWVudDo6cmVuZGVyTWV0ZXIoKSBjb25z
dAogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEhUTUxNZXRlckVsZW1lbnQ6OmRpZEFk
ZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTE1ldGVyRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewogICAg
IEFTU0VSVCghbV92YWx1ZSk7CiAKQEAgLTIzMSwxMyArMjMxLDEzIEBAIHZvaWQgSFRNTE1ldGVy
RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQogCiAg
ICAgYXV0byBzdHlsZSA9IEhUTUxTdHlsZUVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OnN0eWxl
VGFnLCBkb2N1bWVudCgpLCBmYWxzZSk7CiAgICAgc3R5bGUtPnNldFRleHRDb250ZW50KHNoYWRv
d1N0eWxlKTsKLSAgICByb290LT5hcHBlbmRDaGlsZChzdHlsZSk7CisgICAgcm9vdC5hcHBlbmRD
aGlsZChzdHlsZSk7CiAKICAgICAvLyBQc2V1ZG9zIGFyZSBzZXQgdG8gYWxsb3cgYXV0aG9yIHN0
eWxpbmcuCiAgICAgYXV0byBpbm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQo
KSk7CiAgICAgaW5uZXItPnNldElkQXR0cmlidXRlKCJpbm5lciIpOwogICAgIGlubmVyLT5zZXRQ
c2V1ZG8oIi13ZWJraXQtbWV0ZXItaW5uZXItZWxlbWVudCIpOwotICAgIHJvb3QtPmFwcGVuZENo
aWxkKGlubmVyKTsKKyAgICByb290LmFwcGVuZENoaWxkKGlubmVyKTsKIAogICAgIGF1dG8gYmFy
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICBiYXItPnNldElkQXR0
cmlidXRlKCJiYXIiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVy
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmgKaW5kZXgg
NjA0YTY1YTllM2FiMmZjMzgzZjRmNjBiMWEwM2YwMTkyZjhjMWJlMi4uNDg2NWE2ZGI3ZDhhYzIw
MDhhOGVlNjhhYTdiZjE3YzI5ZTZkMGQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWV0ZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJF
bGVtZW50LmgKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKIAog
ICAgIHZvaWQgZGlkRWxlbWVudFN0YXRlQ2hhbmdlKCk7Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdl
bnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2b2lkIGRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAgUmVmUHRyPEhUTUxFbGVtZW50
PiBtX3ZhbHVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVD
b2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNw
cAppbmRleCBkMTBjMzdmYjIyODgxYzEzYzMwZjA3YzdiOTM0ZjkzMjc1NDZmMWVhLi5lMTE4YmRl
MWRkYzIyM2E5M2I3MTg0YmE2MDc3ODkxY2NhYTJiNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKaW5kZXggZTJlMzFhMTU1MzYxMDk2YTU2
YWZkODQzYzMwMDJmMDg1ZjQ5ZTFkYS4uOWRjNWZmMWFhOTBmYzNhNmQ0Mjc1NDIxMmM1ZmZiZDNl
MmM0OTVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKQEAg
LTI5MiwxMyArMjkyLDEzIEBAIHZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldERpc3BsYXlTdGF0
ZShEaXNwbGF5U3RhdGUgc3RhdGUpCiAgICAgICAgIG1fc3dhcFJlbmRlcmVyVGltZXIuc3RhcnRP
bmVTaG90KDBfcyk7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2Vu
dFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRp
ZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYgcm9vdCkKIHsKICAgICBpZiAoIW1f
cGx1Z2luUmVwbGFjZW1lbnQgfHwgIWRvY3VtZW50KCkucGFnZSgpIHx8IGRpc3BsYXlTdGF0ZSgp
ICE9IFByZXBhcmluZ1BsdWdpblJlcGxhY2VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgcm9vdC0+c2V0UmVzZXRTdHlsZUluaGVyaXRhbmNlKHRydWUpOwotICAgIGlmIChtX3BsdWdp
blJlcGxhY2VtZW50LT5pbnN0YWxsUmVwbGFjZW1lbnQoKnJvb3QpKSB7CisgICAgcm9vdC5zZXRS
ZXNldFN0eWxlSW5oZXJpdGFuY2UodHJ1ZSk7CisgICAgaWYgKG1fcGx1Z2luUmVwbGFjZW1lbnQt
Pmluc3RhbGxSZXBsYWNlbWVudChyb290KSkgewogICAgICAgICBzZXREaXNwbGF5U3RhdGUoRGlz
cGxheWluZ1BsdWdpblJlcGxhY2VtZW50KTsKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVu
ZGVyZXJzRm9yU3VidHJlZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBsdWdJbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuaAppbmRleCA1MmEyOTJhYmIyOTZjNDkzYTJlNmI4MzhhZDMwYzBiMWIwZjMwNGQyLi4x
MWZlNjAyY2UxZTFkMDc1ZjVkY2UxNWIxYzNkMWIwOTg4YzkxNmJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCkBAIC05OCw3ICs5OCw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0T2JqZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVu
dD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQ
b3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290
KFNoYWRvd1Jvb3QmKSBvdmVycmlkZTsKIAogICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSBn
dWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQgaW5zdGVhZCBvZiBjYWxsaW5nIGRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50IGRpcmVjdGx5LgogICAgIGJvb2wgZ3VhcmRlZERpc3BhdGNoQmVmb3Jl
TG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCmluZGV4IDY4ZTFkYTcyNmI3YzAzNTBjMWFi
OWQ2MzE3YzExZDkyY2M2ZTk5ZDEuLjE1N2EwZGNhMGIzMzkyMzFhMmQwZjFhZDNjZGYxNjdkYTVi
NTVlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Zmlu
aXNoQ3JlYXRpbmcoKQogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6fkhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQoKQogewogICAgIGlmIChtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKQot
ICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
c2V0RGlzcGxheVN0YXRlKERpc3BsYXlTdGF0ZSBzdGF0ZSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxl
bWVudFJlbmRlcmVyKFJlbmRlclN0eQogICAgIC8vIGluYWN0aXZlIG9yIHJlYWN0aXZhdGVzIHNv
IGl0IGNhbiBjbGVhciB0aGUgcmVuZGVyZXIgYmVmb3JlIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUuCiAgICAgaWYgKCFtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7CiAgICAg
ICAgIG1fbmVlZHNEb2N1bWVudEFjdGl2YXRpb25DYWxsYmFja3MgPSB0cnVlOwotICAgICAgICBk
b2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwor
ICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAoZGlzcGxheVN0YXRlKCkgPT0gRGlzcGxheWluZ1Nu
YXBzaG90KSB7CkBAIC0yODQsOCArMjg0LDggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW4KIHsK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigmZG9jdW1lbnQoKSA9PSAmbmV3
RG9jdW1lbnQpOwogICAgIGlmIChtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJhY2tzKSB7
Ci0gICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja3ModGhpcyk7Ci0gICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQu
cmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KIAog
ICAgIGlmIChtX2ltYWdlTG9hZGVyKQpAQCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyBET01XcmFw
cGVyV29ybGQmIHBsdWdJbkltYWdlRWxlbWVudElzb2xhdGVkV29ybGQoKQogICAgIHJldHVybiBp
c29sYXRlZFdvcmxkOwogfQogCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVz
ZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3ZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290JiByb290KQogewog
ICAgIEhUTUxQbHVnSW5FbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KHJvb3QpOwog
ICAgIGlmIChkaXNwbGF5U3RhdGUoKSA+PSBQcmVwYXJpbmdQbHVnaW5SZXBsYWNlbWVudCkKQEAg
LTM1NCw3ICszNTQsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJB
Z2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKICAgICAvLyBSZXNldCBhbnkgYXV0aG9y
IHN0eWxlcyB0aGF0IG1heSBhcHBseSBhcyB3ZSBvbmx5IHdhbnQgZXhwbGljaXQKICAgICAvLyBz
dHlsZXMgZGVmaW5lZCBpbiB0aGUgaW5qZWN0ZWQgdXNlciBhZ2VudHMgc3R5bGVzaGVldHMgdG8g
c3BlY2lmeQogICAgIC8vIHRoZSBsb29rLWFuZC1mZWVsIG9mIHRoZSBzbmFwc2hvdHRlZCBwbHVn
LWluIG92ZXJsYXkuIAotICAgIHJvb3QtPnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsK
KyAgICByb290LnNldFJlc2V0U3R5bGVJbmhlcml0YW5jZSh0cnVlKTsKICAgICAKICAgICBTdHJp
bmcgbWltZVR5cGUgPSBsb2FkZWRNaW1lVHlwZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCmluZGV4IGU5NDFmNTdhZGY4YTE5YTllZDE0ZWRjZWIw
OTdiZDNhYjRhNGZhNjIuLmUzZjAzOTY0ZmExNzQ0NTFlOGUyNjZhZTMyNzM2YTllYzliZjk4NTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCkBAIC0x
MDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgYWxsb3dlZFRvTG9hZFBsdWdpbkNv
bnRlbnQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Owog
Ci0gICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwog
CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5k
ZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKICAgICBib29s
IGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKaW5kZXggOGI0MGUx
ZGMyNThhOWJhNGZhZmNmMDgzYjM1ZjkzYmNiMmM0NWU0Zi4uMTJkMzFjNzIyMGQ2ZDgyMjQxMGQ5
OThmNGQzYWUxYmJmY2IyYTJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCkBAIC0xMzUsMTIgKzEzNSwxMiBAQCB2b2lkIEhUTUxQcm9ncmVzc0VsZW1l
bnQ6OmRpZEVsZW1lbnRTdGF0ZUNoYW5nZSgpCiAgICAgfQogfQogCi12b2lkIEhUTUxQcm9ncmVz
c0VsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCogcm9vdCkKK3Zv
aWQgSFRNTFByb2dyZXNzRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dS
b290JiByb290KQogewogICAgIEFTU0VSVCghbV92YWx1ZSk7CiAKICAgICBhdXRvIGlubmVyID0g
UHJvZ3Jlc3NJbm5lckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKLSAgICByb290LT5hcHBl
bmRDaGlsZChpbm5lcik7CisgICAgcm9vdC5hcHBlbmRDaGlsZChpbm5lcik7CiAKICAgICBhdXRv
IGJhciA9IFByb2dyZXNzQmFyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGF1dG8g
dmFsdWUgPSBQcm9ncmVzc1ZhbHVlRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaAppbmRleCBiZDMzYWExMjJlZGYyMTU0
YTY3OWZlMTZkNjY0MGNiMTJmYjcwZTMwLi44MjY3MzZkYWIyYmI2NTdhYjNlNWM3YWMzYmE0OTRk
M2FkODBjZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0Vs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuaApA
QCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJzKCkg
ZmluYWw7CiAKICAgICB2b2lkIGRpZEVsZW1lbnRTdGF0ZUNoYW5nZSgpOwotICAgIHZvaWQgZGlk
QWRkVXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRB
ZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmKSBmaW5hbDsKICAgICBib29sIGlzRGV0
ZXJtaW5hdGUoKSBjb25zdDsKIAogICAgIGJvb2wgY2FuQ29udGFpblJhbmdlRW5kUG9pbnQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3Vy
Y2VFbGVtZW50LmNwcAppbmRleCBhNDlmZjIwYzJiMzc4YTU2MjQ0MTVkNTQ5MzFlMzQ0M2IzOGI4
YWVhLi45OWYzYzZmOGM0YzBhZjRmODdhNDZmM2Y1MTliZjlkMDI2YzdlMDQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAj
aW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBpY3R1
cmVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3VtbWFyeUVsZW1lbnQuY3BwCmluZGV4IDk5MTBiZDFiNDJmYTI1NjJmMmEzMDZhYjIxMjA2
YTg4NDRmMjU0OWIuLmRhNzQ5Y2Q5NDNmMzkwZGNhMTA1NGFlNzU1YTJmOGFkM2EwMzY5MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxlbWVudC5jcHAKQEAgLTY1LDEwICs2
NSwxMCBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gSFRNTFN1bW1hcnlFbGVtZW50OjpjcmVh
dGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLXZvaWQgSFRN
TFN1bW1hcnlFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqIHJv
b3QpCit2b2lkIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdChT
aGFkb3dSb290JiByb290KQogewotICAgIHJvb3QtPmFwcGVuZENoaWxkKERldGFpbHNNYXJrZXJD
b250cm9sOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwotICAgIHJvb3QtPmFwcGVuZENoaWxkKEhUTUxT
bG90RWxlbWVudDo6Y3JlYXRlKHNsb3RUYWcsIGRvY3VtZW50KCkpKTsKKyAgICByb290LmFwcGVu
ZENoaWxkKERldGFpbHNNYXJrZXJDb250cm9sOjpjcmVhdGUoZG9jdW1lbnQoKSkpOworICAgIHJv
b3QuYXBwZW5kQ2hpbGQoSFRNTFNsb3RFbGVtZW50OjpjcmVhdGUoc2xvdFRhZywgZG9jdW1lbnQo
KSkpOwogfQogCiBIVE1MRGV0YWlsc0VsZW1lbnQqIEhUTUxTdW1tYXJ5RWxlbWVudDo6ZGV0YWls
c0VsZW1lbnQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3Vt
bWFyeUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmgK
aW5kZXggMTI3YTU0NmQyYTBkYzQwMjk4NDEyYWJjNWQ2OWFmMDc4NTYzYjUyMC4uNmI3NDUwNTQ0
NjBkYTAyNjJhZmNjOTljNDdlOWU5ZjY4ZTJlNDY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdW1tYXJ5RWxlbWVudC5oCkBAIC0zOSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAgUmVuZGVy
UHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBj
b25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBmaW5hbDsKICAgICB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQmKSBmaW5hbDsKIAotICAgIHZvaWQgZGlkQWRkVXNlckFnZW50U2hhZG93Um9v
dChTaGFkb3dSb290KikgZmluYWw7CisgICAgdm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290
KFNoYWRvd1Jvb3QmKSBmaW5hbDsKIAogICAgIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYygpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
bXBsYXRlRWxlbWVudC5jcHAKaW5kZXggMjQyZmMxYTU4NWZmM2RiOWIyNGYxZjIwMjdhMWUxN2Nj
YTkwMmI1OC4uNjk2YTYzZjQwM2NlMTU5MTI1MGZkMTRiMDBlZjIwYTZkOTliYjFlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiSFRNTFRlbXBsYXRlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlRlbXBs
YXRlQ29udGVudERvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZTNhMDIxOTBl
ZGEyMDI2YmFmMjIyY2QyMWNmNjhiNDI4YzRiNzZkZi4uNjg4ZTNjYzA3NDZjNjYxODBjYmI1ODk3
MTY3YmRkMjM2NjVhMjc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCkBAIC0xMDAsOSArMTAwLDkgQEAgUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IEhU
TUxUZXh0QXJlYUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW0KICAg
ICByZXR1cm4gdGV4dEFyZWE7CiB9CiAKLXZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGlkQWRk
VXNlckFnZW50U2hhZG93Um9vdChTaGFkb3dSb290KiByb290KQordm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0g
ICAgcm9vdC0+YXBwZW5kQ2hpbGQoVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUo
ZG9jdW1lbnQoKSkpOworICAgIHJvb3QuYXBwZW5kQ2hpbGQoVGV4dENvbnRyb2xJbm5lclRleHRF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogICAgIHVwZGF0ZUlubmVyVGV4dEVsZW1lbnRF
ZGl0YWJpbGl0eSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oCmluZGV4IGI5YTMyMjRjNzUwZTRkNDA2YjIzYTZlNTRiMDQ3NTIyNTI5OWY4NTAuLmNiZDA2
M2UzMjgxYmVjYWQ1NjliMmJjZDAyNzA2MGZkN2ZiYWQ5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAg
ICBlbnVtIFdyYXBNZXRob2QgeyBOb1dyYXAsIFNvZnRXcmFwLCBIYXJkV3JhcCB9OwogCi0gICAg
dm9pZCBkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KFNoYWRvd1Jvb3QqKSBmaW5hbDsKKyAgICB2
b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93Um9vdCYpIGZpbmFsOwogCiAgICAg
dm9pZCBtYXhMZW5ndGhBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFs
dWUpOwogICAgIHZvaWQgbWluTGVuZ3RoQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJp
bmcmIG5ld1ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1
dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXgg
ZGVjMTliMmMwYjllMjIyMGY2N2FhNWRmNDhkY2IxM2M5ODRlYTQyYi4uMGJjZmUxNTg5MTRjNGZk
MzUwYzE2ZDM3ZTQxZTQ0Yjk4ZDBlZTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9SYWRpb0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0
VHlwZS5jcHAKQEAgLTE3OCw5ICsxNzgsOSBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc1JhZGlv
QnV0dG9uKCkgY29uc3QKIAogYm9vbCBSYWRpb0lucHV0VHlwZTo6bWF0Y2hlc0luZGV0ZXJtaW5h
dGVQc2V1ZG9DbGFzcygpIGNvbnN0CiB7Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxl
bWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKLSAgICBpZiAoY29uc3QgUmFkaW9CdXR0b25Hcm91cHMq
IHJhZGlvQnV0dG9uR3JvdXBzID0gZWxlbWVudC5yYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAg
ICByZXR1cm4gIXJhZGlvQnV0dG9uR3JvdXBzLT5oYXNDaGVja2VkQnV0dG9uKCZlbGVtZW50KTsK
KyAgICBhdXRvJiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOworICAgIGlmIChhdXRvKiByYWRp
b0J1dHRvbkdyb3VwcyA9IGVsZW1lbnQucmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgcmV0
dXJuICFyYWRpb0J1dHRvbkdyb3Vwcy0+aGFzQ2hlY2tlZEJ1dHRvbihlbGVtZW50KTsKICAgICBy
ZXR1cm4gIWVsZW1lbnQuY2hlY2tlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50V3JpdGVyLmNwcAppbmRleCAwMDViZTRkMmQyZTE3ODA4ZWY4MmEzYjkzZDI5M2Q4NzhhMTlh
MDkzLi42ZmM1YzE2MTZiZWYxOTYyMTNjYWVhY2E2MWNjMTQ1ZDRjNTEzYjFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lk
IERvY3VtZW50V3JpdGVyOjpiZWdpbihjb25zdCBVUkwmIHVybFJlZmVyZW5jZSwgYm9vbCBkaXNw
YXRjaCwgRG9jdW1lbnQqIG93bgogCiAgICAgYm9vbCBzaG91bGRSZXVzZURlZmF1bHRWaWV3ID0g
bV9mcmFtZS0+bG9hZGVyKCkuc3RhdGVNYWNoaW5lKCkuaXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5
RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1
cmwpOwogICAgIGlmIChzaG91bGRSZXVzZURlZmF1bHRWaWV3KQotICAgICAgICBkb2N1bWVudC0+
dGFrZURPTVdpbmRvd0Zyb20obV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGRvY3VtZW50
LT50YWtlRE9NV2luZG93RnJvbSgqbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAg
ICAgICBkb2N1bWVudC0+Y3JlYXRlRE9NV2luZG93KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAppbmRleCBjYjE2Mzk4NmM4MzZiNTVkMDhlNWQzODhhZGE4OTliMDMxYTkzZTNiLi45NzA2
MmZjMmI1MTk3OWJiNjU2NDY5ZjgwYTAwMDA3MzIyMjU3ZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCkBAIC0xODEzLDkgKzE4MTMsOSBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZQog
ICAgIGVsc2UgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmRldmljZW1vdGlvbkV2ZW50
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCkgJiYg
ZG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoaXNTYW1lU2VjdXJpdHlPcmlnaW5Bc01haW5GcmFt
ZSgpKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2Vv
cmllbnRhdGlvbkV2ZW50KQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmRldmljZU9yaWVu
dGF0aW9uQ29udHJvbGxlcigpLT5hZGREZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPmRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpLmFkZERl
dmljZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+ZGV2aWNlTW90aW9uQ29udHJvbGxlcigpLT5hZGREZXZpY2VFdmVudExp
c3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmRldmljZU1vdGlvbkNv
bnRyb2xsZXIoKS5hZGREZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOwogICAgICAgICB9IGVsc2Ug
aWYgKGRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBBU0NJSUxpdGVyYWwo
IkJsb2NrZWQgYXR0ZW1wdCBhZGQgZGV2aWNlIG1vdGlvbiBvciBvcmllbnRhdGlvbiBsaXN0ZW5l
ciBmcm9tIGNoaWxkIGZyYW1lIHRoYXQgd2Fzbid0IHRoZSBzYW1lIHNlY3VyaXR5IG9yaWdpbiBh
cyB0aGUgbWFpbiBwYWdlLiIpKTsKICAgICB9CkBAIC0xOTA3LDkgKzE5MDcsOSBAQCBib29sIERP
TVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lcgogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAjaWYgUExB
VEZPUk0oSU9TKQogICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNl
bW90aW9uRXZlbnQgJiYgZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+ZGV2aWNlTW90
aW9uQ29udHJvbGxlcigpLT5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLT5kZXZpY2VNb3Rpb25Db250cm9sbGVyKCkucmVtb3ZlRGV2aWNlRXZlbnRM
aXN0ZW5lcih0aGlzKTsKICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmRl
dmljZW9yaWVudGF0aW9uRXZlbnQgJiYgZG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+
ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCktPnJlbW92ZURldmljZUV2ZW50TGlzdGVuZXIo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPmRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigp
LnJlbW92ZURldmljZUV2ZW50TGlzdGVuZXIodGhpcyk7CiAjZWxzZQogICAgIGVsc2UgaWYgKGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlbW90aW9uRXZlbnQpIHsKICAgICAgICAgaWYg
KERldmljZU1vdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBEZXZpY2VNb3Rpb25Db250cm9s
bGVyOjpmcm9tKHBhZ2UoKSkpCkBAIC0yMDE0LDggKzIwMTQsOCBAQCB2b2lkIERPTVdpbmRvdzo6
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04p
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5k
b2N1bWVudCgpKSB7Ci0gICAgICAgIGRvY3VtZW50LT5kZXZpY2VNb3Rpb25Db250cm9sbGVyKCkt
PnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKHRoaXMpOwotICAgICAgICBkb2N1bWVudC0+
ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCktPnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVu
ZXJzKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+ZGV2aWNlTW90aW9uQ29udHJvbGxlcigpLnJl
bW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+ZGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCkucmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMo
dGhpcyk7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoRGV2aWNlTW90aW9uQ29udHJvbGxlciogY29u
dHJvbGxlciA9IERldmljZU1vdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSgpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBlNTM4YmE2YzUzMTJkOWM4MTllYjVhNzU2NjQw
YWM1YWJhOGNkM2FiLi42ZjkwNzI0MTk0NGI3N2U1YjE0NDUzMzFlMGVlNTc1ZTMyNjZiYTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zNTEzLDcgKzM1MTMsNyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6ZGlkU3RhcnREcmFnKCkKICAgICB9CiAKICAgICBpZiAoYXV0byBy
YW5nZSA9IGRyYWdTdGF0ZSgpLmRyYWdnZWRDb250ZW50UmFuZ2UpIHsKLSAgICAgICAgcmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIocmFuZ2Uu
Z2V0KCkpOworICAgICAgICByYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREcmFn
Z2VkQ29udGVudE1hcmtlcigqcmFuZ2UpOwogICAgICAgICByZXBhaW50Q29udGVudHNPZlJhbmdl
KHJhbmdlKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKaW5k
ZXggMDgwMTcyOTY5YmU0Y2JkYWI5NzkyMzM1NWExNjM3OWU0OWJiMzQ2NC4uZTQ2ZmY5ZDlmYWY3
MmMyNDIxYjE1MmZkMGZhNTUzOWM5ZGFhMjY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgRXhjZXB0aW9uT3I8UmVmPEV2ZW50U291cmNlPj4gRXZl
bnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXgKICAgICB9CiAK
ICAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgRXZlbnRTb3VyY2UoY29udGV4dCwgZnVs
bFVSTCwgZXZlbnRTb3VyY2VJbml0KSk7Ci0gICAgc291cmNlLT5zZXRQZW5kaW5nQWN0aXZpdHko
c291cmNlLnB0cigpKTsKKyAgICBzb3VyY2UtPnNldFBlbmRpbmdBY3Rpdml0eShzb3VyY2UuZ2V0
KCkpOwogICAgIHNvdXJjZS0+c2NoZWR1bGVJbml0aWFsQ29ubmVjdCgpOwogICAgIHNvdXJjZS0+
c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIFdURk1vdmUoc291cmNlKTsKQEAgLTEyMyw3
ICsxMjMsNyBAQCB2b2lkIEV2ZW50U291cmNlOjpuZXR3b3JrUmVxdWVzdEVuZGVkKCkKICAgICBp
ZiAobV9zdGF0ZSAhPSBDTE9TRUQpCiAgICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7CiAgICAg
ZWxzZQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIEV2ZW50U291cmNlOjpzY2hlZHVsZUlu
aXRpYWxDb25uZWN0KCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEV2ZW50U291cmNlOjpjbG9z
ZSgpCiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKICAgICBlbHNlIHsKICAgICAgICAgbV9z
dGF0ZSA9IENMT1NFRDsKLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAg
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI2MSw3ICsy
NjEsNyBAQCB2b2lkIEV2ZW50U291cmNlOjphYm9ydENvbm5lY3Rpb25BdHRlbXB0KCkKICAgICAg
ICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAgIGVsc2UgewogICAgICAgICBtX3N0YXRlID0gQ0xP
U0VEOwotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3N0YXRlID09IENM
T1NFRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDdmNzRlMzI1Y2U3ODViYWQ1MWJiNTdhMTUy
YzFjYTJhNzMyOTQ1NmIuLjQ4NWZkMmUzMjVjMjhhMjVmNzczMzRiYzg5NzdhMjMxMzk2YzczYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVFbGVtZW50QmFzZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGZh
YTE0NTNiYWQyNDNlODE4MGJlZjEyZWZkODM3YjEyMjQ1NzY1NjcuLjY2MzU4ZTJjZTkxNDUxMjE0
MDIwNjQ1MjllNDljZTc1MjczNWM4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAg
LTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKaW5kZXggNGNm
NWUyOWQwYjkzODZhZmZlMjcyNmM3M2FhZWUyMjM5MzUxNTNjMy4uYjQ3ZjUyYjQ1YzA5YWUyMGFi
NTJmYjRmYjFiYzFjYjBkMjRiYjc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIEFuaW1hdGlv
bkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3Vi
bGUgcGFyYW0pCiAgICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRB
bmltYXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3Rh
dGUuCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKICAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0
eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsK
KyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCku
cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0YXJ0VGltZSA9IHN0ZDo6bnVsbG9wdDsKQEAg
LTE3Myw3ICsxNzMsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAKICAgICBpZiAoaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1hdGlvbikgewogICAgICAgICBpZiAo
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFi
bGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAgICAg
ICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9t
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7CiAgICAgICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5p
bWF0aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1lID0gc3RkOjpudWxsb3B0OwpAQCAtMTg5LDcgKzE4
OSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRp
b25TdGF0ZUlucHV0OjpFbmRBbmltYXRpb24pIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAg
ICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9t
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRl
QW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0
aW5nRm9yU3R5bGUoKnRoaXMpOwogICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlv
blN0YXRlICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwogICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7CiAgICAg
ICAgIGVuZEFuaW1hdGlvbigpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgQW5pbWF0aW9uQmFz
ZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBw
YXJhbSkKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQogICAgICAgICAgICAg
aWYgKG1fYW5pbWF0aW9uLT50cmlnZ2VyKCkgJiYgbV9hbmltYXRpb24tPnRyaWdnZXIoKS0+aXNT
Y3JvbGxBbmltYXRpb25UcmlnZ2VyKCkpCi0gICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmlt
YXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNj
cm9sbCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKCp0aGlzKTsK
ICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6
OlN0YXJ0V2FpdFRpbWVyOgpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6
dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJh
bSkKICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFu
aW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRp
bWUKICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwogICAgICAgICAgICAgICAgIG1fYW5pbWF0
aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAg
ICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
ZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAgICAgICAgbV9j
b21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNX
YWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogCiAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJl
bmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgIGlmICht
X29iamVjdCAmJiBtX29iamVjdC0+ZWxlbWVudCgpKQpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQg
QW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5w
dXQsIGRvdWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVPZmZzZXQgPSAt
bV9hbmltYXRpb24tPmRlbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9
IHN0YXJ0QW5pbWF0aW9uKHRpbWVPZmZzZXQpOwogCi0gICAgICAgICAgICAgICAgICAgIG1fY29t
cG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOworICAgICAgICAgICAgICAg
ICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7CiAgICAg
ICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEFuaW1h
dGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBk
b3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1l
KCkgLSBtX3N0YXJ0VGltZS52YWx1ZV9vcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCku
YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFydGVk
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGIxMWRhNWMzMGI1MTAyOTY3ZTkxZDk2Njk2MzFkMGZmZmZmYWUzYjYuLmRmZTRjMDMyNDhh
ZDZiZGQ1ZTFhNGIxN2RkNGNiZWE2ZmRhZjlhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC01MDMs
MTcgKzUwMywxNSBAQCB1bnNpZ25lZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bQogICAgIHJldHVybiBjb3VudDsK
IH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25z
V2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKK3ZvaWQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmlt
YXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoaXMgYW5pbWF0aW9u
IGlzIG5vdCBpbiB0aGUgc3RhcnQgdGltZSB3YWl0ZXJzCi0gICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZShhbmltYXRpb24pOwotCi0gICAgbV9hbmltYXRp
b25zV2FpdGluZ0ZvclN0eWxlLmFkZChhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvbik7CisgICAgbV9hbmltYXRp
b25zV2FpdGluZ0ZvclN0eWxlLmFkZCgmYW5pbWF0aW9uKTsKIH0KIAotdm9pZCBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
QW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uVG9SZW1vdmUpCit2b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRp
b25CYXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUucmVtb3ZlKCZhbmltYXRpb25Ub1JlbW92ZSk7CiB9CiAKIHZvaWQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxlKCkKQEAgLTUyNSw3ICs1MjMsNyBA
QCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSgpCiAg
ICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRp
bWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNl
KQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbiwgYm9vbCB3
aWxsR2V0UmVzcG9uc2UpCiB7CiAgICAgLy8gSWYgd2lsbEdldFJlc3BvbnNlIGlzIHRydWUsIGl0
IG1lYW5zIHRoaXMgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UK
ICAgICAvLyAod2hpY2ggd2lsbCBjb21lIGluIGFzIGEgY2FsbCB0byBub3RpZnlBbmltYXRpb25T
dGFydGVkKCkpLgpAQCAtNTQ0LDE3ICs1NDIsMTYgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEEK
ICAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxsIHNvZnR3YXJlIGFuZCBhY2NlbGVyYXRl
ZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUgCiAgICAgLy8gdXBkYXRlU3R5bGVJZk5l
ZWRlZCBjeWNsZS4KICAgICAvLwotICAgIAorCiAgICAgaWYgKHdpbGxHZXRSZXNwb25zZSkKICAg
ICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IHRydWU7CiAKLSAgICBt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuYWRkKGFuaW1hdGlvbik7Cisg
ICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmFkZCgmYW5pbWF0aW9u
KTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFu
aW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSogYW5pbWF0
aW9uVG9SZW1vdmUpCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVG
cm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiBh
bmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1l
UmVzcG9uc2UucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICAKKyAgICBtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3ZlKCZhbmltYXRpb25Ub1JlbW92ZSk7
CiAgICAgaWYgKG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5pc0VtcHR5
KCkpCiAgICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsK
IH0KQEAgLTU3MCw5ICs1NjcsOSBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdGltZSkKICAgICBtX3dhaXRpbmdGb3JBc3luY1N0
YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9u
KQordm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVt
b3ZlZChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVSZW1vdmVkOiAl
cCIsIHRoaXMsIGFuaW1hdGlvbik7CisgICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVSZW1vdmVkOiAlcCIsIHRoaXMsICZh
bmltYXRpb24pOwogCiAgICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoYW5p
bWF0aW9uKTsKICAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShhbmltYXRpb24pOwpAQCAtNTkzLDE0ICs1OTAsMTUgQEAgdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlKiBh
bmltYXQKIH0KIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3Jv
bGwoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQorCit2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNl
JiBhbmltYXRpb24pCiB7Ci0gICAgbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwuYWRkKGFu
aW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zRGVwZW5kZW50T25TY3JvbGwuYWRkKCZhbmltYXRp
b24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9t
QW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKK3Zv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zRGVw
ZW5kZW50T25TY3JvbGwoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uKQogewotICAgIG1fYW5pbWF0
aW9uc0RlcGVuZGVudE9uU2Nyb2xsLnJlbW92ZShhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9u
c0RlcGVuZGVudE9uU2Nyb2xsLnJlbW92ZSgmYW5pbWF0aW9uKTsKIH0KIAogdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2Nyb2xsV2FzVXBkYXRlZCgpCkBAIC02MTcsNiArNjE1
LDcgQEAgdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2Nyb2xsV2FzVXBkYXRl
ZCgpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDE3
MAogICAgIHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldENoYW5nZWQpOwogfQorCiAjZW5kaWYKIAog
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcihGcmFtZSYgZnJh
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAppbmRleCAxNWE0ZjcyYzFlNmQ0NzY0MTRjNDg5
ODQ0NTI3M2FjZTM1ODk2M2Y0Li5jMjNiZWEyZjM2NzEyNWIzMGFjM2Y5Y2EzNTAxYTEzMmI0ZTgz
N2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKQEAgLTkzLDEzICs5MywxMyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBlbmRBbmltYXRpb25VcGRhdGUoKTsKICAgICB2b2lkIHJlY2VpdmVkU3Rh
cnRUaW1lUmVzcG9uc2UoZG91YmxlKTsKICAgICAKLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7Ci0gICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7CisgICAgdm9pZCBhZGRUb0FuaW1h
dGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYpOworICAgIHZvaWQgcmVtb3ZlRnJv
bUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYpOwogCi0gICAgdm9pZCBh
ZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSos
IGJvb2wgd2lsbEdldFJlc3BvbnNlKTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIGFkZFRv
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiwgYm9v
bCB3aWxsR2V0UmVzcG9uc2UpOworICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYpOwogCi0gICAgdm9pZCBhbmltYXRp
b25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqKTsKKyAgICB2b2lkIGFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYpOwogCiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1l
ckZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKIApAQCAtMTEwLDggKzExMCw4IEBAIHB1Ymxp
YzoKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQogICAgIGJvb2wgd2FudHNT
Y3JvbGxVcGRhdGVzKCkgY29uc3QgeyByZXR1cm4gIW1fYW5pbWF0aW9uc0RlcGVuZGVudE9uU2Ny
b2xsLmlzRW1wdHkoKTsgfQotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3Jv
bGwoQW5pbWF0aW9uQmFzZSopOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNEZXBlbmRl
bnRPblNjcm9sbChBbmltYXRpb25CYXNlKik7CisgICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNEZXBl
bmRlbnRPblNjcm9sbChBbmltYXRpb25CYXNlJik7CisgICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0
aW9uc0RlcGVuZGVudE9uU2Nyb2xsKEFuaW1hdGlvbkJhc2UmKTsKIAogICAgIHZvaWQgc2Nyb2xs
V2FzVXBkYXRlZCgpOwogICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxQb3NpdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXggZDhlMWIyZGJkYWQyNzA5NGJjMzdlMTU1
OTJjMTY2ZWFlZTZhMmE0Ny4uNmM1OGNmM2M5MDZlNTRkYzBmNjg5ZWE1MjU1YmQ4YjQzZWJiZWNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVB
bmltYXRpb24uY3BwCkBAIC02NCwxNCArNjQsMTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICAvLyBDbGVhciB0aGUgcmVuZGVyZXJzIGZyb20gYWxs
IHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZgogICAg
ICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6
IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24uZ2V0KCkpOworICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5zaXRp
b24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW1hdGlvbi5n
ZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJl
UmVtb3ZlZCgqYW5pbWF0aW9uKTsKICAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxBbmltLT5ibGVuZFByb3BlcnR5VmFs
dWVJblN0eWxlKHByb3AsIG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
UmVtb3ZpbmcgZXhpc3RpbmcgSW1wbGljaXRBbmltYXRpb24gJXAgZm9yIHByb3BlcnR5ICVzIiwg
aW1wbEFuaW0sIGdldFByb3BlcnR5TmFtZShwcm9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChpbXBsQW5pbSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9u
V2lsbEJlUmVtb3ZlZCgqaW1wbEFuaW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFu
c2l0aW9ucy5yZW1vdmUocHJvcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVy
LCBjb25zdCBSZW5kZXIKICAgICBWZWN0b3I8aW50PiB0b0JlUmVtb3ZlZDsKICAgICBmb3IgKGF1
dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7CiAgICAgICAgIGlmICgh
dHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24uZ2V0KCkpOworICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5zaXRpb24p
OwogICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRyYW5zaXRpb24tPmFuaW1hdGluZ1By
b3BlcnR5KCkpOwogICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBJbXBsaWNp
dEFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIGZvciBwcm9wZXJ0eSAlcyIsIHRyYW5zaXRp
b24uZ2V0KCksIHJlbmRlcmVyLCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+YW5pbWF0aW5n
UHJvcGVydHkoKSkpOwogICAgICAgICB9CkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciwgY29uc3QKICAgICAvLyBNYWtlIGEgbGlzdCBvZiBhbmltYXRpb25zIHRvIGJlIHJlbW92
ZWQuCiAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1
ZXMoKSkgewogICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMuY29udGFpbnMoYW5pbWF0aW9uLT5u
YW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1h
dGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwogICAgICAg
ICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwogICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJS
ZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIHJlbmRlcmVyICVwIiwgYW5pbWF0aW9u
LmdldCgpLCByZW5kZXJlcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1Mu
bW0KaW5kZXggNDJjOGIzMWVmNmJmZmE2ODI4NTc1ODQ0ZDg5MTA0NGZjNjk5ZThiMy4uYThhYWIw
MWVmNGY4ZWFiMTJhZTA5NzYyNzQzM2JjMGRhNTc1MTkxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3Mv
RnJhbWVJT1MubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEs
MTQgKzgxLDE0IEBAIHZvaWQgRnJhbWU6OmluaXRXaXRoU2ltcGxlSFRNTERvY3VtZW50KGNvbnN0
IFN0cmluZyYgc3R5bGUsIGNvbnN0IFVSTCYgdXJsKQogewogICAgIG1fbG9hZGVyLT5pbml0Rm9y
U3ludGhlc2l6ZWREb2N1bWVudCh1cmwpOwogCi0gICAgUmVmUHRyPEhUTUxEb2N1bWVudD4gZG9j
dW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQodGhpcywgdXJs
KTsKKyAgICBhdXRvIGRvY3VtZW50ID0gSFRNTERvY3VtZW50OjpjcmVhdGVTeW50aGVzaXplZERv
Y3VtZW50KCp0aGlzLCB1cmwpOwogICAgIGRvY3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZShE
b2N1bWVudENvbXBhdGliaWxpdHlNb2RlOjpMaW1pdGVkUXVpcmtzTW9kZSk7CiAgICAgZG9jdW1l
bnQtPmNyZWF0ZURPTVdpbmRvdygpOwotICAgIHNldERvY3VtZW50KGRvY3VtZW50KTsKKyAgICBz
ZXREb2N1bWVudChkb2N1bWVudC5wdHIoKSk7CiAKLSAgICBhdXRvIHJvb3RFbGVtZW50ID0gSFRN
TEh0bWxFbGVtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKKyAgICBhdXRvIHJvb3RFbGVtZW50ID0g
SFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogCi0gICAgYXV0byBib2R5ID0gSFRN
TEJvZHlFbGVtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKKyAgICBhdXRvIGJvZHkgPSBIVE1MQm9k
eUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgaWYgKCFzdHlsZS5pc0VtcHR5KCkpCiAg
ICAgICAgIGJvZHktPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgc3R5bGUpOwog
CkBAIC02NTIsNyArNjUyLDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1
cnJlbnRSb290KCkgY29uc3QKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlT2ZSb290
Q29udGVudHMtPnBhc3RMYXN0Tm9kZSgpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlT2ZS
b290Q29udGVudHMtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGZvciAoYXV0byogbWFya2VyIDog
ZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CisgICAgICAgIGZvciAoYXV0byogbWFy
a2VyIDogZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKSkgewogICAgICAgICAgICAgLy8g
Rmlyc3QsIGFkZCB0ZXh0IHRoYXQgcHJlY2VkZSB0aGUgbWFya2VyLgogICAgICAgICAgICAgaWYg
KHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uICE9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBw
cmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5v
ZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSkpOwpAQCAtNzU0LDQgKzc1NCw1IEBAIHZvaWQgRnJh
bWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCkKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5kZXggZTViZjA0ZGIyM2QyYWNi
OTc5NWEzMmU5YTQ4ZTgzYjJiMzg1MmY5My4uYTcwM2MwOTA1Mzc5ZGIzZDYxZTE2MTI1MGM1MGFj
ZDU0Nzk2ZTgwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
RmlsdGVyRWZmZWN0UmVuZGVyZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQm
IHIKICAgICAgICAgLy8gQWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZp
bHRlciwgaXQgbWlnaHQgZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICAvLyBG
SVhNRTogVGhpcyBza2lwcyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzEzMTA4NT4KICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSByZW5kZXJlci5lbGVt
ZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBl
bmRpbmdSZXNvdXJjZShmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgZWxlbWVudCk7CisgICAg
ICAgICAgICBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJj
ZShmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAppbmRleCA1NzVmYTA2YWRlNjBjNTAxM2FlZTQ1MWI3ZTQzYTkxZDMwZjJmZDViLi40ZTFl
MjAyOTc2YmExOWYxMWYwZmQ3ZTlkZGJhNjkwZTY1MDliMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC04OTUsNyArODk1LDcgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG8KICAgICBpZiAoIXJlbmRlcmVyKCkudGV4dE5vZGUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0g
cmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHJlbmRlcmVyKCkudGV4
dE5vZGUoKSk7CisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0g
cmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpyZW5kZXJlcigpLnRl
eHROb2RlKCkpOwogCiAgICAgLy8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0IHRvdWNo
IHRoaXMgcnVuIGEgY2hhbmNlIHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVuIGRyYXdu
LgogICAgIC8vIE5vdGUgZW5kKCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBvbmUgcGFz
dCBpdCBsaWtlIGVuZE9mZnNldCBhbmQgcmFuZ2VzIGRvLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggMDI2MDY1YTQ2NmI5ODMxYjFkOTU4YzNiM2U0
ZTVkY2RlZTMxMGM0Mi4uZDdiNTY3MzgzNzQ4ODk2YmZlNGIxOWFiOTljZTk2ODIxZTIyNjEzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC0xNjIs
NyArMTYyLDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHNhdmVkR3JhcGhpY3NDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KCksIGZhbHNl
KTsKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cGFyZW50T3JTaGFkb3dIb3N0RWxl
bWVudCgpKSB7CiAgICAgICAgIGF1dG8qIHBhcmVudENvbnRhaW5lciA9IGVsZW1lbnQoKS0+cGFy
ZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpOwotICAgICAgICBpZiAoZHJhZ2dlZENvbnRlbnRDb250
YWluc1JlcGxhY2VkRWxlbWVudChkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9yKHBhcmVu
dENvbnRhaW5lciwgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KSwgKmVsZW1lbnQoKSkp
IHsKKyAgICAgICAgaWYgKGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQoZG9j
dW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0ZvcigqcGFyZW50Q29udGFpbmVyLCBEb2N1bWVudE1h
cmtlcjo6RHJhZ2dlZENvbnRlbnQpLCAqZWxlbWVudCgpKSkgewogICAgICAgICAgICAgc2F2ZWRH
cmFwaGljc0NvbnRleHQuc2F2ZSgpOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5z
ZXRBbHBoYSgwLjI1KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCmluZGV4IDkyYWYwZDdjZmFiODM4YmNhMjg2YzY3YWYyMTJhZjA0ZWNiZWM5OTMuLjBi
NjJkYzExMWQwMTI2MDE5ZDExZTNkNTU0Njg3ZGM3ZDhkNzRkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTEwNzEsNyArMTA3MSw3IEBAIFZlY3RvcjxzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPj4gUmVuZGVyVGV4dDo6ZHJhZ2dlZENvbnRlbnRSYW5n
ZXNCZXR3ZWVuT2ZmCiAgICAgaWYgKCF0ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgYXV0byBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcih0ZXh0
Tm9kZSgpLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpOworICAgIGF1dG8gbWFya2Vy
cyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKnRleHROb2RlKCksIERvY3VtZW50
TWFya2VyOjpEcmFnZ2VkQ29udGVudCk7CiAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4geyB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2UuY3BwCmluZGV4IGI2NTZmZDZkMDgzYTE2OGI4YTFmMzkzMTRjNzYx
ZGVmNmQ1OGQwZWUuLjQ3NWUxNWYwZDM4NTAwMGYyY2IwNTY1ODcxZWRlZGJmNmE4NzQ5MTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2Uu
Y3BwCkBAIC0xNjUsOSArMTY1LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUZyb21DYWNo
ZUFuZEludmFsaWRhdGVEZXBlbmRlbmNpZXMoUmVuZGVyRWxlbWVudCYgcmVuZGUKICAgICAgICAg
ICAgIGNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShyZW5kZXJlcik7CiAgICAgfQogCi0g
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIXJlbmRlcmVyLmVsZW1lbnQoKS0+aXNTVkdF
bGVtZW50KCkpCisgICAgaWYgKCFpczxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQog
ICAgICAgICByZXR1cm47Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2llcyA9
IHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNS
ZWZlcmVuY2luZ1RhcmdldChkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkp
KTsKKyAgICBhdXRvKiBkZXBlbmRlbmNpZXMgPSByZW5kZXJlci5kb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoZG93bmNhc3Q8U1ZH
RWxlbWVudD4oKnJlbmRlcmVyLmVsZW1lbnQoKSkpOwogICAgIGlmICghZGVwZW5kZW5jaWVzKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5kZXggMTgxODYwMzg1MDhj
ODMwMjg4NzkzZWM4YTZlMzEwNjljOGU3MmMzMy4uMmRiZWFmMDZmYzUwN2JiMDA2ZGRhMGEyNDAx
NmY5ZjY5MzBjZjQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAgLTE3MCwxOSArMTcwLDE5
IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lzdGVyUmVzb3VyY2UoKQog
ewogICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyYgZXh0ZW5zaW9ucyA9IHN2Z0V4dGVuc2lvbnNG
cm9tRWxlbWVudChlbGVtZW50KCkpOwogICAgIGlmICghZXh0ZW5zaW9ucy5pc0lkT2ZQZW5kaW5n
UmVzb3VyY2UobV9pZCkpIHsKLSAgICAgICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJjZShtX2lkLCB0
aGlzKTsKKyAgICAgICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJjZShtX2lkLCAqdGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpQZW5kaW5nRWxlbWVudHM+IGNsaWVudHMgPSBleHRlbnNpb25zLnJlbW92ZVBlbmRp
bmdSZXNvdXJjZShtX2lkKTsKIAogICAgIC8vIENhY2hlIHVzIHdpdGggdGhlIG5ldyBpZC4KLSAg
ICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsIHRoaXMpOworICAgIGV4dGVuc2lvbnMuYWRk
UmVzb3VyY2UobV9pZCwgKnRoaXMpOwogCiAgICAgLy8gVXBkYXRlIGNhY2hlZCByZXNvdXJjZXMg
b2YgcGVuZGluZyBjbGllbnRzLgogICAgIGZvciAoYXV0byogY2xpZW50IDogKmNsaWVudHMpIHsK
ICAgICAgICAgQVNTRVJUKGNsaWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKTsKLSAgICAgICAg
ZXh0ZW5zaW9ucy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKGNsaWVudCk7Cisg
ICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZSgqY2xp
ZW50KTsKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSBjbGllbnQtPnJlbmRlcmVyKCk7CiAgICAg
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAppbmRleCBlYTliNDUyMTE1NzMzMTMy
M2NhMmIyMGNmZjdiZjlkMjlkMzkwZWZmLi40MTNiYmMyNmM5NjU4NjA1MDdlNGY0ZDc4ZDA4ZTky
YmRlZTY2MzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
c291cmNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZXNvdXJj
ZXMuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIGlubGluZSBSZW5kZXJTVkdSZXNvdXJj
ZUNvbnRhaW5lciogcGFpbnRpbmdSZXNvdXJjZUZyb21TVkdQYWludChEb2N1bWVudCYKIAogc3Rh
dGljIGlubGluZSB2b2lkIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKFNWR0RvY3VtZW50RXh0ZW5z
aW9ucyYgZXh0ZW5zaW9ucywgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgU1ZHRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBleHRlbnNpb25zLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgJmVsZW1lbnQp
OworICAgIGV4dGVuc2lvbnMuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCBlbGVtZW50KTsKIH0KIAog
Ym9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNvbnN0IFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCmluZGV4IDgzZDkxMmVl
YmU4ZmU0MjgzODY4ZDJkMTNhZGM0MzkyOGRhMjU5NjcuLjY5NDMzYWEyN2IzMWZmZDNiNWI4ZThm
MjYxNzc3YjQ3ZTFiNmRjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCkBAIC0xNjksOCArMTY5LDggQEAgdm9pZCBTVkdSZXNv
dXJjZXNDYWNoZTo6cmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIm
IHJlc291cmNlKQogCiAgICAgICAgIC8vIE1hcmsgdXNlcnMgb2YgZGVzdHJveWVkIHJlc291cmNl
cyBhcyBwZW5kaW5nIHJlc29sdXRpb24gYmFzZWQgb24gdGhlIGlkIG9mIHRoZSBvbGQgcmVzb3Vy
Y2UuCiAgICAgICAgIEVsZW1lbnQmIHJlc291cmNlRWxlbWVudCA9IHJlc291cmNlLmVsZW1lbnQo
KTsKLSAgICAgICAgRWxlbWVudCogY2xpZW50RWxlbWVudCA9IGl0LmtleS0+ZWxlbWVudCgpOwot
ICAgICAgICBjbGllbnRFbGVtZW50LT5kb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2VFbGVtZW50LmdldElkQXR0cmlidXRlKCksIGNsaWVu
dEVsZW1lbnQpOworICAgICAgICBFbGVtZW50JiBjbGllbnRFbGVtZW50ID0gKml0LmtleS0+ZWxl
bWVudCgpOworICAgICAgICBjbGllbnRFbGVtZW50LmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZUVsZW1lbnQuZ2V0SWRBdHRyaWJ1dGUo
KSwgY2xpZW50RWxlbWVudCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUu
Y3BwCmluZGV4IDE3NjkwY2NkNjc3NzljMjNiOTM3NzYzMDg0NDU0NjJkN2FhOTIyZGQuLmU2ZjA3
MTRhNDM3YTU0OGY1YTE0MWQyNTc5NzhlNTdlOGRhNjQ1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGUuY3BwCkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBTY29wZTo6Y29sbGVjdEFjdGl2
ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCiAgICAgICAg
ICAgICBpZiAocGkuaXNYU0woKSAmJiAhbV9kb2N1bWVudC50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVu
dCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgWFNMIHRyYW5zZm9ybXMgdW50
aWwgbG9hZGluZyBpcyBmaW5pc2hlZC4KICAgICAgICAgICAgICAgICBpZiAoIW1fZG9jdW1lbnQu
cGFyc2luZygpKQotICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFwcGx5WFNMVHJhbnNm
b3JtKCZwaSk7CisgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFuc2Zv
cm0ocGkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAppbmRleCBlYjgx
NTRjZjVjMmVlM2Y5MGVhZWI0MzkxMjMwZTljMDUzYjJhM2I3Li5jZTQyYzIxNzE0ZjYyZTQwYzIy
MzdmMDYzNjk4MmVhZjFlYzNhNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmNwcApAQCAtNTEsMjcgKzUxLDI1IEBAIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6flNWR0RvY3VtZW50RXh0ZW5zaW9ucygpCiB7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjphZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIG1fdGltZUNvbnRhaW5lcnMuYWRkKGVsZW1lbnQpOworICAgIG1fdGltZUNv
bnRhaW5lcnMuYWRkKCZlbGVtZW50KTsKICAgICBpZiAobV9hcmVBbmltYXRpb25zUGF1c2VkKQot
ICAgICAgICBlbGVtZW50LT5wYXVzZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgZWxlbWVudC5wYXVz
ZUFuaW1hdGlvbnMoKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVRp
bWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV90aW1lQ29udGFpbmVycy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV90aW1lQ29udGFpbmVy
cy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRk
UmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIqIHJlc291cmNlKQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFJlc291cmNlKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJiByZXNvdXJj
ZSkKIHsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotCiAgICAgaWYgKGlkLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmVwbGFjZXMgcmVzb3VyY2UgaWYgYWxyZWFkeSBwcmVz
ZW50LCB0byBoYW5kbGUgcG90ZW50aWFsIGlkIGNoYW5nZXMKLSAgICBtX3Jlc291cmNlcy5zZXQo
aWQsIHJlc291cmNlKTsKKyAgICBtX3Jlc291cmNlcy5zZXQoaWQsICZyZXNvdXJjZSk7CiB9CiAK
IHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVSZXNvdXJjZShjb25zdCBBdG9taWNT
dHJpbmcmIGlkKQpAQCAtOTcsNyArOTUsNyBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
c3RhcnRBbmltYXRpb25zKCkKICAgICAvLyBGSVhNRTogV2UgaG9sZCBhIHJlZiBwb2ludGVycyB0
byBwcmV2ZW50IGEgc2hhZG93IHRyZWUgZnJvbSBnZXR0aW5nIHJlbW92ZWQgb3V0IGZyb20gdW5k
ZXJuZWF0aCB1cy4KICAgICAvLyBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCByZWZhY3RvciB0aGUg
dXNlLWVsZW1lbnQgdG8gYXZvaWQgdGhpcy4gU2VlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzUzNzA0
CiAgICAgVmVjdG9yPFJlZlB0cjxTVkdTVkdFbGVtZW50Pj4gdGltZUNvbnRhaW5lcnM7Ci0gICAg
dGltZUNvbnRhaW5lcnMuYXBwZW5kUmFuZ2UobV90aW1lQ29udGFpbmVycy5iZWdpbigpLCBtX3Rp
bWVDb250YWluZXJzLmVuZCgpKTsKKyAgICBjb3B5VG9WZWN0b3IobV90aW1lQ29udGFpbmVycywg
dGltZUNvbnRhaW5lcnMpOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRpbWVDb250YWluZXJz
KQogICAgICAgICBlbGVtZW50LT50aW1lQ29udGFpbmVyKCkuYmVnaW4oKTsKIH0KQEAgLTE0NCwx
OSArMTQyLDE3IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZXBvcnRFcnJvcihjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgcmVwb3J0TWVzc2FnZShtX2RvY3VtZW50LCBNZXNzYWdl
TGV2ZWw6OkVycm9yLCAiRXJyb3I6ICIgKyBtZXNzYWdlKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBF
bGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdS
ZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50JiBlbGVtZW50KQogewotICAg
IEFTU0VSVChlbGVtZW50KTsKLQogICAgIGlmIChpZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5kaW5nUmVzb3VyY2VzLmFkZChpZCwgbnVsbHB0
cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nRWxlbWVudHM+KCk7Ci0gICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKGVsZW1lbnQpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUtPmFkZCgmZWxlbWVudCk7CiAKLSAgICBlbGVtZW50LT5zZXRIYXNQZW5kaW5nUmVzb3VyY2Vz
KCk7CisgICAgZWxlbWVudC5zZXRIYXNQZW5kaW5nUmVzb3VyY2VzKCk7CiB9CiAKIGJvb2wgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjppc0lkT2ZQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCkgY29uc3QKQEAgLTE2Nyw0OSArMTYzLDQzIEBAIGJvb2wgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjppc0lkT2ZQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29u
c3QKICAgICByZXR1cm4gbV9wZW5kaW5nUmVzb3VyY2VzLmNvbnRhaW5zKGlkKTsKIH0KIAotYm9v
bCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNFbGVt
ZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICAv
LyBUaGlzIGFsZ29yaXRobSB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9m
IHBlbmRpbmcgcmVzb3VyY2VzIGFuZCBuZWVkIG5vdC4KICAgICAvLyBJZiBwZXJmb3JtYW5jZSBi
ZWNvbWVzIGFuIGlzc3VlIHdlIGNhbiBrZWVwIGEgY291bnRlZCBzZXQgb2YgZWxlbWVudHMgYW5k
IGFuc3dlciB0aGUgcXVlc3Rpb24gZWZmaWNpZW50bHkuCi0gICAgQVNTRVJUKGVsZW1lbnQpOwog
ICAgIGZvciAoYXV0byYgZWxlbWVudHMgOiBtX3BlbmRpbmdSZXNvdXJjZXMudmFsdWVzKCkpIHsK
ICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKLQotICAgICAgICBpZiAoZWxlbWVudHMtPmNvbnRh
aW5zKGVsZW1lbnQpKQorICAgICAgICBpZiAoZWxlbWVudHMtPmNvbnRhaW5zKCZlbGVtZW50KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAorYm9vbCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OmlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgaWYgKCFp
c0lkT2ZQZW5kaW5nUmVzb3VyY2UoaWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nUmVzb3VyY2VzLmdldChpZCktPmNvbnRhaW5zKGVsZW1lbnQpOworICAg
IHJldHVybiBtX3BlbmRpbmdSZXNvdXJjZXMuZ2V0KGlkKS0+Y29udGFpbnMoJmVsZW1lbnQpOwog
fQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2Vz
SWZQb3NzaWJsZShFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoRWxlbWVudCYgZWxlbWVudCkKIHsK
ICAgICBpZiAoIWlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzKGVsZW1lbnQpKQotICAgICAg
ICBlbGVtZW50LT5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxlbWVudC5j
bGVhckhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lv
bnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291
cmNlcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KTsKLQogICAgIC8v
IFJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHBlbmRpbmcgcmVzb3VyY2VzLgotICAgIGlmICghbV9w
ZW5kaW5nUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiBlbGVtZW50LT5oYXNQZW5kaW5nUmVzb3VyY2Vz
KCkpIHsKKyAgICBpZiAoIW1fcGVuZGluZ1Jlc291cmNlcy5pc0VtcHR5KCkgJiYgZWxlbWVudC5o
YXNQZW5kaW5nUmVzb3VyY2VzKCkpIHsKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gdG9C
ZVJlbW92ZWQ7CiAgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX3BlbmRpbmdSZXNvdXJj
ZXMpIHsKICAgICAgICAgICAgIFBlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSByZXNvdXJjZS52
YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAgICBB
U1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBlbGVtZW50cy0+cmVt
b3ZlKGVsZW1lbnQpOworICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZSgmZWxlbWVudCk7CiAg
ICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICB0b0Jl
UmVtb3ZlZC5hcHBlbmQocmVzb3VyY2Uua2V5KTsKICAgICAgICAgfQpAQCAtMjI5LDcgKzIxOSw3
IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdS
ZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCi0gICAgICAgICAg
ICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOworICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92
ZSgmZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQocmVzb3VyY2Uua2V5KTsKICAgICAgICAgfQpA
QCAtMjg0LDQwICsyNzQsMjkgQEAgRWxlbWVudCogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1v
dmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsTWFwKGMKICAgICByZXR1cm4g
ZWxlbWVudDsKIH0KIAotSGFzaFNldDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRF
bGVtZW50KSBjb25zdAorSGFzaFNldDxTVkdFbGVtZW50Kj4qIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6c2V0T2ZFbGVtZW50c1JlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRF
bGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChyZWZlcmVuY2VkRWxlbWVudCk7Ci0gICAgY29u
c3QgYXV0byBpdCA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5maW5kKHJlZmVyZW5jZWRFbGVtZW50
KTsKLSAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOworICAgIHJldHVybiBtX2VsZW1l
bnREZXBlbmRlbmNpZXMuZ2V0KCZyZWZlcmVuY2VkRWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zOjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCog
cmVmZXJlbmNpbmdFbGVtZW50LCBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkKK3ZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxl
bWVudCYgcmVmZXJlbmNpbmdFbGVtZW50LCBTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkK
IHsKLSAgICBBU1NFUlQocmVmZXJlbmNpbmdFbGVtZW50KTsKLSAgICBBU1NFUlQocmVmZXJlbmNl
ZEVsZW1lbnQpOwotCi0gICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBlbGVtZW50cyA9IG1f
ZWxlbWVudERlcGVuZGVuY2llcy5nZXQocmVmZXJlbmNlZEVsZW1lbnQpKSB7Ci0gICAgICAgIGVs
ZW1lbnRzLT5hZGQocmVmZXJlbmNpbmdFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gZWxlbWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEhhc2hTZXQ8U1ZHRWxlbWVu
dCo+PigpOwotICAgIGVsZW1lbnRzLT5hZGQocmVmZXJlbmNpbmdFbGVtZW50KTsKLSAgICBtX2Vs
ZW1lbnREZXBlbmRlbmNpZXMuc2V0KHJlZmVyZW5jZWRFbGVtZW50LCBXVEZNb3ZlKGVsZW1lbnRz
KSk7CisgICAgYXV0byByZXN1bHQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5zdXJlKCZyZWZl
cmVuY2VkRWxlbWVudCwgWyZyZWZlcmVuY2luZ0VsZW1lbnRdIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxTVkdFbGVtZW50Kj4+KHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxTVkdFbGVtZW50Kj4geyAmcmVmZXJlbmNpbmdFbGVtZW50IH0pOworICAgIH0pOworICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmFk
ZCgmcmVmZXJlbmNpbmdFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0VsZW1lbnQqIHJlZmVyZW5j
aW5nRWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxUYXJnZXRS
ZWZlcmVuY2VzRm9yRWxlbWVudChTVkdFbGVtZW50JiByZWZlcmVuY2luZ0VsZW1lbnQpCiB7CiAg
ICAgVmVjdG9yPFNWR0VsZW1lbnQqPiB0b0JlUmVtb3ZlZDsKIAogICAgIGZvciAoYXV0byYgZGVw
ZW5kZW5jeSA6IG1fZWxlbWVudERlcGVuZGVuY2llcykgewotICAgICAgICBTVkdFbGVtZW50KiBy
ZWZlcmVuY2VkRWxlbWVudCA9IGRlcGVuZGVuY3kua2V5OwotICAgICAgICBIYXNoU2V0PFNWR0Vs
ZW1lbnQqPiYgcmVmZXJlbmNpbmdFbGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOwotICAgICAg
ICByZWZlcmVuY2luZ0VsZW1lbnRzLnJlbW92ZShyZWZlcmVuY2luZ0VsZW1lbnQpOworICAgICAg
ICBhdXRvJiByZWZlcmVuY2luZ0VsZW1lbnRzID0gKmRlcGVuZGVuY3kudmFsdWU7CisgICAgICAg
IHJlZmVyZW5jaW5nRWxlbWVudHMucmVtb3ZlKCZyZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAg
ICBpZiAocmVmZXJlbmNpbmdFbGVtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0b0JlUmVt
b3ZlZC5hcHBlbmQocmVmZXJlbmNlZEVsZW1lbnQpOworICAgICAgICAgICAgdG9CZVJlbW92ZWQu
YXBwZW5kKGRlcGVuZGVuY3kua2V5KTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiB0b0JlUmVtb3ZlZCkKQEAgLTMzMywxMSArMzEyLDkgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OnJlYnVpbGRFbGVtZW50cygpCiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpj
bGVhclRhcmdldERlcGVuZGVuY2llcyhTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkKIHsK
LSAgICBhdXRvIGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmZpbmQoJnJlZmVyZW5jZWRFbGVt
ZW50KTsKLSAgICBpZiAoaXQgPT0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmVuZCgpKQorICAgIGF1
dG8qIHJlZmVyZW5jaW5nRWxlbWVudHMgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZ2V0KCZyZWZl
cmVuY2VkRWxlbWVudCk7CisgICAgaWYgKCFyZWZlcmVuY2luZ0VsZW1lbnRzKQogICAgICAgICBy
ZXR1cm47Ci0gICAgQVNTRVJUKGl0LT5rZXkgPT0gJnJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBI
YXNoU2V0PFNWR0VsZW1lbnQqPiogcmVmZXJlbmNpbmdFbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiAqcmVmZXJlbmNpbmdFbGVtZW50cykgewogICAg
ICAgICBtX3JlYnVpbGRFbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIGVsZW1lbnQt
PmNhbGxDbGVhclRhcmdldCgpOwpAQCAtMzYxLDIzICszMzgsMjUgQEAgdm9pZCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OnJlYnVpbGRBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVt
ZW50JiByZWYKICAgICAgICAgZWxlbWVudC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChYTGlua05hbWVz
OjpocmVmQXR0cik7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxF
bGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkK
K3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0Zv
clRhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2VkRWxlbWVudCkKIHsKLSAgICBtX2VsZW1lbnRE
ZXBlbmRlbmNpZXMucmVtb3ZlKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBtX3JlYnVpbGRFbGVt
ZW50cy5yZW1vdmVGaXJzdChyZWZlcmVuY2VkRWxlbWVudCk7CisgICAgbV9lbGVtZW50RGVwZW5k
ZW5jaWVzLnJlbW92ZSgmcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIG1fcmVidWlsZEVsZW1lbnRz
LnJlbW92ZUZpcnN0KCZyZWZlcmVuY2VkRWxlbWVudCk7CiB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVt
ZW50KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVudCkKKwordm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBtX3N2Z0ZvbnRGYWNlRWxlbWVudHMuYWRkKGVsZW1lbnQpOworICAgIG1f
c3ZnRm9udEZhY2VFbGVtZW50cy5hZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6dW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1l
bnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6dW5yZWdpc3RlclNWR0Zv
bnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
KG1fc3ZnRm9udEZhY2VFbGVtZW50cy5jb250YWlucyhlbGVtZW50KSk7Ci0gICAgbV9zdmdGb250
RmFjZUVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTsKKyAgICBBU1NFUlQobV9zdmdGb250RmFjZUVs
ZW1lbnRzLmNvbnRhaW5zKCZlbGVtZW50KSk7CisgICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLnJl
bW92ZSgmZWxlbWVudCk7CiB9CisKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgKaW5kZXggNmE1Mjc3MDQ5YzViMjU1MDI1Zjk5YTcyZTE5ZjJj
ZTA4MWJkMWRlYi4uNWMyMWU1NTIwZmQ3NDMwNjgwZTg3YWM0ZTUwNjQ2YjZkYjRhNzZmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaApAQCAtNDMsMTAgKzQz
LDEwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMoRG9jdW1l
bnQmKTsKICAgICB+U1ZHRG9jdW1lbnRFeHRlbnNpb25zKCk7CiAgICAgCi0gICAgdm9pZCBhZGRU
aW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZVRpbWVDb250YWlu
ZXIoU1ZHU1ZHRWxlbWVudCopOworICAgIHZvaWQgYWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVt
ZW50Jik7CisgICAgdm9pZCByZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmKTsKIAot
ICAgIHZvaWQgYWRkUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIqKTsKKyAgICB2b2lkIGFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyJik7CiAgICAgdm9pZCByZW1vdmVSZXNv
dXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lciogcmVzb3VyY2VCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwogCkBAIC02
MSwxOSArNjEsMTkgQEAgcHVibGljOgogCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGUmIHJlc291cmNl
c0NhY2hlKCkgeyByZXR1cm4gKm1fcmVzb3VyY2VzQ2FjaGU7IH0KIAotICAgIEhhc2hTZXQ8U1ZH
RWxlbWVudCo+KiBzZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVm
ZXJlbmNlZEVsZW1lbnQpIGNvbnN0OwotICAgIHZvaWQgYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFy
Z2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNl
ZEVsZW1lbnQpOwotICAgIHZvaWQgcmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQo
U1ZHRWxlbWVudCopOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBzZXRPZkVsZW1lbnRzUmVm
ZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpIGNvbnN0OworICAg
IHZvaWQgYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5n
RWxlbWVudCwgU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpOworICAgIHZvaWQgcmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCYpOwogICAgIHZvaWQgcmVi
dWlsZEFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmKTsKLSAgICB2b2lk
IHJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqKTsKKyAgICB2
b2lkIHJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmKTsKIAog
ICAgIHZvaWQgY2xlYXJUYXJnZXREZXBlbmRlbmNpZXMoU1ZHRWxlbWVudCYpOwogICAgIHZvaWQg
cmVidWlsZEVsZW1lbnRzKCk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGNvbnN0IEhh
c2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMoKSBjb25zdCB7
IHJldHVybiBtX3N2Z0ZvbnRGYWNlRWxlbWVudHM7IH0KLSAgICB2b2lkIHJlZ2lzdGVyU1ZHRm9u
dEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlclNW
R0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVy
U1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdp
c3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQmKTsKICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtOTUsMTEgKzk1LDExIEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIEhhc2hNYXAg
Y29udGFpbnMgYSBsaXN0IG9mIHBlbmRpbmcgcmVzb3VyY2VzLiBQZW5kaW5nIHJlc291cmNlcywg
YXJlIHN1Y2gKICAgICAvLyB3aGljaCBhcmUgcmVmZXJlbmNlZCBieSBhbnkgb2JqZWN0IGluIHRo
ZSBTVkcgZG9jdW1lbnQsIGJ1dCBkbyBOT1QgZXhpc3QgeWV0LgogICAgIC8vIEZvciBpbnN0YW5j
ZSwgZHluYW1pY2FsbHkgYnVpbGQgZ3JhZGllbnRzIC8gcGF0dGVybnMgLyBjbGlwcGVycy4uLgot
ICAgIHZvaWQgYWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1l
bnQqKTsKKyAgICB2b2lkIGFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBFbGVtZW50Jik7CiAgICAgYm9vbCBpc0lkT2ZQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50Kiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhckhhc1BlbmRpbmdS
ZXNvdXJjZXNJZlBvc3NpYmxlKEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9t
UGVuZGluZ1Jlc291cmNlcyhFbGVtZW50Kik7CisgICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShF
bGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckhh
c1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUVs
ZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50Jik7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFBlbmRpbmdFbGVtZW50cz4gcmVtb3ZlUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIGZv
ciBzY2hlZHVsaW5nIGEgcGVuZGluZyByZXNvdXJjZSB0byBiZSByZW1vdmVkLgpAQCAtMTA3LDcg
KzEwNyw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiByZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdS
ZXNvdXJjZXNGb3JSZW1vdmFsTWFwKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiBwcml2YXRlOgot
ICAgIGJvb2wgaXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCopIGNvbnN0Owor
ICAgIGJvb2wgaXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCYpIGNvbnN0Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRWxlbWVudHM+IHJlbW92ZVBlbmRpbmdSZXNvdXJj
ZUZvclJlbW92YWwoY29uc3QgQXRvbWljU3RyaW5nJik7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAKaW5kZXggNzAxODk4MWI5MmI5NmRmYmIwNWFiYTU1ZDExZTZiYzFlZjE3MThhOC4u
ZGUwMWEyMmRkOGE4ODIwMDIxYjY5ZDBkZDdhZTBkYmU1OWQ5ZmZmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcApAQCAtMjk0LDcgKzI5NCw3IEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50
KCkKICAgICAgICAgbV9zdmdSYXJlRGF0YSA9IG51bGxwdHI7CiAgICAgfQogICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlYnVpbGRBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRh
cmdldCgqdGhpcyk7Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3Zl
QWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRo
aXMpOwogfQogCiBpbnQgU1ZHRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdApAQCAtMzc1LDcgKzM3
NSw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBh
cmVudCkKIAogICAgIGlmICh3YXNJbkRvY3VtZW50KSB7CiAgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmNsZWFyVGFyZ2V0RGVwZW5kZW5jaWVzKCp0aGlzKTsKLSAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsRWxlbWVudFJlZmVy
ZW5jZXNGb3JUYXJnZXQodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0aGlzKTsKICAgICB9
CiAgICAgaW52YWxpZGF0ZUluc3RhbmNlcygpOwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9p
ZCBTVkdFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZXNJZk5lZWRlZCgpCiAgICAgICAgIEFT
U0VSVChjbGllbnRFbGVtZW50LT5oYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICBpZiAo
Y2xpZW50RWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CiAgICAgICAgICAgICBjbGll
bnRFbGVtZW50LT5idWlsZFBlbmRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAgZXh0ZW5zaW9u
cy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKGNsaWVudEVsZW1lbnQpOworICAg
ICAgICAgICAgZXh0ZW5zaW9ucy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKCpj
bGllbnRFbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGVjNzRhOGQwZTVhYjZiNWFkOThhODhlNzhlMTJjNGJh
NjI1ZDZhZTcuLmIyYzMyMzdjYTlmM2Q2ZDRhMzY1ZWJjZDkwZGM4OWEwZDczODg5M2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtNzksNyArNzksNyBAQCB2
b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiAgICAgICAg
IG1fY2FjaGVkSW1hZ2UgPSBudWxscHRyOwogICAgIH0KIAotICAgIGRvY3VtZW50KCkuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMp
OworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJl
ZmVyZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6
cmVxdWVzdEltYWdlUmVzb3VyY2UoKQpAQCAtMTA3LDEzICsxMDcsMTMgQEAgdm9pZCBTVkdGRUlt
YWdlRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgICAgICBpZiAoaWQuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5n
UmVzb3VyY2UoaWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiAgICAgICAgICAgICBBU1NF
UlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGFy
Z2V0LT5pc1NWR0VsZW1lbnQoKSkgeworICAgIH0gZWxzZSBpZiAoaXM8U1ZHRWxlbWVudD4oKnRh
cmdldCkpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBk
ZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRo
YXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2Fu
IHJlYWN0IHRvIGl0LgotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFy
Z2V0KSk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1l
bnRSZWZlcmVuY2luZ1RhcmdldCgqdGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnRhcmdldCkp
OwogICAgIH0KIAogICAgIGludmFsaWRhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRG
YWNlRWxlbWVudC5jcHAKaW5kZXggYjhiYTliMDdmZTJhNjQwOTM2OWYxYWM4NDUyYjVhNWFlOGFj
NjhlYy4uNDYzODgwNjE0OWQ1ZjUzY2FiOGY4YzMzYjczM2ZkNjRmNDhhZWZhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKQEAgLTI3OCw3ICsyNzgsNyBAQCBO
b2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKENvbnRhaW5lck5vZAogICAgICAgICBBU1NFUlQoIW1fZm9udEVsZW1lbnQpOwog
ICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKICAgICB9Ci0gICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CisgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1l
bnQoKnRoaXMpOwogCiAgICAgcmVidWlsZEZvbnRGYWNlKCk7CiAgICAgcmV0dXJuIEluc2VydGlv
bkRvbmU7CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiAKICAgICBpZiAocm9vdFBhcmVudC5p
c0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgIG1fZm9udEVsZW1lbnQgPSBudWxscHRyOwotICAgICAg
ICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51bnJlZ2lzdGVyU1ZHRm9udEZhY2VF
bGVtZW50KHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51
bnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KCp0aGlzKTsKICAgICAgICAgbV9mb250RmFjZVJ1
bGUtPm11dGFibGVQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKIAogICAgICAgICBkb2N1bWVudCgpLnN0
eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKaW5kZXggZmY3ZDQ4NzJkNjk0NTY3ZTc1MmMzZmNmYTcw
OTBmN2NmY2RhNDcxOC4uZGYyNTJiZjAyYjY4YjQ4ZDY2OTk5OThiZThkNWYwMmE1ZDI1MWQ1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKQEAgLTY1LDE3ICs2NSwxNyBA
QCB2b2lkIFNWR01QYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgIEVsZW1l
bnQqIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmco
aHJlZigpLCBkb2N1bWVudCgpLCAmaWQpOwogICAgIGlmICghdGFyZ2V0KSB7CiAgICAgICAgIC8v
IERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhp
cyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0aGlzLCBpZCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwg
dGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQ
ZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5n
UmVzb3VyY2VzKCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQtPmlzU1ZHRWxl
bWVudCgpKSB7CisgICAgfSBlbHNlIGlmIChpczxTVkdFbGVtZW50PigqdGFyZ2V0KSkgewogICAg
ICAgICAvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSB0YXJnZXQgaW4gdGhlIGRlcGVuZGVuY2llcyBt
YXAuIEFueSBjaGFuZ2Ugb2YgaHJlZkVsZW1lbnQKICAgICAgICAgLy8gdGhhdCBsZWFkcyB0byBy
ZWxheW91dC9yZXBhaW50aW5nIG5vdyBpbmZvcm1zIHVzLCBzbyB3ZSBjYW4gcmVhY3QgdG8gaXQu
Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZl
cmVuY2luZ1RhcmdldCh0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQpKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5n
VGFyZ2V0KCp0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0KSk7CiAgICAgfQogCiAg
ICAgdGFyZ2V0UGF0aENoYW5nZWQoKTsKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBTVkdNUGF0aEVs
ZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKIAogdm9pZCBTVkdNUGF0aEVsZW1lbnQ6OmNs
ZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsKLSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2Vz
Rm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgU1ZHTVBhdGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCmluZGV4IGUyMjMwZjQxMmRkODEz
NWJmMjU3NjE1YmViOGVlNDg0NzdmZGUwNGUuLmY3MTY0NzBjMmIzOTUwZGIyMjU4MTBiYzMwZWM0
YTE4ODI3MGU3MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcApAQCAtMjcy
LDcgKzI3Miw3IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERlcGVuZGVu
Y2llcygpCiB7CiAgICAgLy8gPG1wYXRoPiBjYW4gb25seSByZWZlcmVuY2UgPHBhdGg+IGJ1dCB0
aGlzIGRlcGVuZGVuY3kgaXMgbm90IGhhbmRsZWQgaW4KICAgICAvLyBtYXJrRm9yTGF5b3V0QW5k
UGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24gc28gd2UgdXBkYXRlIGFueSBtcGF0aCBkZXBlbmRl
bmNpZXMgbWFudWFsbHkuCi0gICAgaWYgKEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBkZXBlbmRlbmNp
ZXMgPSBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJl
bmNpbmdUYXJnZXQodGhpcykpIHsKKyAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVu
ZGVuY2llcyA9IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNS
ZWZlcmVuY2luZ1RhcmdldCgqdGhpcykpIHsKICAgICAgICAgZm9yIChhdXRvKiBlbGVtZW50IDog
KmRlcGVuZGVuY2llcykgewogICAgICAgICAgICAgaWYgKGlzPFNWR01QYXRoRWxlbWVudD4oKmVs
ZW1lbnQpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0PFNWR01QYXRoRWxlbWVudD4oKmVsZW1l
bnQpLnRhcmdldFBhdGhDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAK
aW5kZXggYmZhOTE3MmU4OTFjYzY0MzA4ZjM0NjI0ZTc0ZTVlZTliM2E3YTMyOC4uOTQwNTBkYjkz
YWFlZmVmYzI5NGM0NzRiNjFkZWI0ZDFmNmEzZWRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcApAQCAtNzksNyArNzksNyBAQCBpbmxpbmUgU1ZHU1ZHRWxlbWVudDo6U1ZHU1ZH
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdQogewog
ICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKTsKICAgICByZWdpc3RlckFu
aW1hdGVkUHJvcGVydGllc0ZvclNWR1NWR0VsZW1lbnQoKTsKLSAgICBkb2N1bWVudC5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdp
c3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiB9CiAKIFJlZjxTVkdT
VkdFbGVtZW50PiBTVkdTVkdFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAtOTYsMTQgKzk2LDE0IEBAIFNWR1NWR0VsZW1l
bnQ6On5TVkdTVkdFbGVtZW50KCkKIHsKICAgICBpZiAobV92aWV3U3BlYykKICAgICAgICAgbV92
aWV3U3BlYy0+cmVzZXRDb250ZXh0RWxlbWVudCgpOwotICAgIGRvY3VtZW50KCkudW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVudCgpLmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKHRoaXMpOworICAgIGRvY3Vt
ZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7Cisg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlVGltZUNvbnRhaW5lcigq
dGhpcyk7CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9j
dW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpCiB7Ci0gICAgb2xkRG9j
dW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKLSAg
ICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMp
OworICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoKnRoaXMpOworICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3MoKnRoaXMpOwogICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9j
dW1lbnQob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBA
IFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdTVkdFbGVtZW50OjpjcmVhdGVFbGVtZW50UmVu
ZGVyZXIoUmVuZGVyU3R5bGUmJiBzdHlsCiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IFNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50
KQogewogICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkVGltZUNvbnRhaW5lcih0aGlzKTsKKyAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkVGltZUNvbnRhaW5lcigqdGhp
cyk7CiAgICAgICAgIGlmICghZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYXJlQW5p
bWF0aW9uc1BhdXNlZCgpKQogICAgICAgICAgICAgdW5wYXVzZUFuaW1hdGlvbnMoKTsKIApAQCAt
NDg2LDcgKzQ4Niw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU1ZH
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIHJvCiB2b2lkIFNWR1NWR0VsZW1l
bnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCiB7CiAgICAgaWYgKHJv
b3RQYXJlbnQuaXNDb25uZWN0ZWQoKSkgewotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKCp0aGlzKTsKICAgICAg
ICAgcGF1c2VBbmltYXRpb25zKCk7CiAgICAgfQogICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6cmVt
b3ZlZEZyb20ocm9vdFBhcmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VFJlZkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcApp
bmRleCBiMDgzNzM2MTUxMzcwNjgzMDFhZTBmZGViN2U5YzlhOTkwOWYyYTQxLi42ZjlkNmUzZmMx
ZjEyM2ZkZmY3MWRlYTVkZjhiZWE0MmYxYWIxMmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVm
RWxlbWVudC5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50OjpkZXRh
Y2hUYXJnZXQoKQogICAgIFN0cmluZyBpZDsKICAgICBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVs
ZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgZG9jdW1lbnQoKSwgJmlkKTsKICAgICBpZiAoIWlk
LmlzRW1wdHkoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRk
UGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdF
eHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCAqdGhpcyk7CiB9CiAKIHZvaWQgU1ZH
VFJlZkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBTVkdUUmVm
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgICAgICBpZiAoaWQuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwog
ICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5jcHAKaW5kZXggNzUx
N2U4YjhhNjAxMGU2YWE2ZDdlNDQzNzg5ZDg5ZmY4NDY4ZGI0MS4uODA2YWU4NzY1ODlmMzdmZDkz
YzMxM2M5ZTI4YjBjNjY5NzUyMzAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRo
RWxlbWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0
aC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRlICJYTGlua05hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTY2LDcgKzY3LDcgQEAg
U1ZHVGV4dFBhdGhFbGVtZW50Ojp+U1ZHVGV4dFBhdGhFbGVtZW50KCkKIAogdm9pZCBTVkdUZXh0
UGF0aEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsKLSAgICBkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVu
dCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxU
YXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIGJvb2wgU1ZHVGV4dFBhdGhF
bGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKQEAgLTE1OSwxNyArMTYwLDE3IEBAIHZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpidWlsZFBl
bmRpbmdSZXNvdXJjZSgpCiAgICAgRWxlbWVudCogdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0
YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIGRvY3VtZW50KCksICZpZCk7CiAgICAg
aWYgKCF0YXJnZXQpIHsKICAgICAgICAgLy8gRG8gbm90IHJlZ2lzdGVyIGFzIHBlbmRpbmcgaWYg
d2UgYXJlIGFscmVhZHkgcGVuZGluZyB0aGlzIHJlc291cmNlLgotICAgICAgICBpZiAoZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5kaW5nUmVzb3VyY2UodGhpcywgaWQpKQor
ICAgICAgICBpZiAoZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuaXNQZW5kaW5nUmVz
b3VyY2UoKnRoaXMsIGlkKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoIWlk
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25z
KCkuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShpZCwgKnRoaXMpOwogICAg
ICAgICAgICAgQVNTRVJUKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKHRhcmdldC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cGF0aFRhZykpIHsKICAgICAg
ICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFw
LiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVs
YXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0Lgot
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJl
bmNpbmdUYXJnZXQodGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7CisgICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZlcmVuY2luZ1Rh
cmdldCgqdGhpcywgZG93bmNhc3Q8U1ZHUGF0aEVsZW1lbnQ+KCp0YXJnZXQpKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCA1ZTczMjM4MGM1ZDgwODM4
OGYzOGJhOGMzMDFhMmVlOWNlOTk4MzNhLi5kZGY2NTZjMjUxZThlM2QyMGJmZDQ5NWM0YmMzZjEx
MDkwNzBhYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC0yMzYsNyAr
MjM2LDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojp1cGRhdGVTaGFkb3dUcmVlKCkKICAgICBTdHJp
bmcgdGFyZ2V0SUQ7CiAgICAgYXV0byogdGFyZ2V0ID0gZmluZFRhcmdldCgmdGFyZ2V0SUQpOwog
ICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJnZXRJRCwgdGhpcyk7CisgICAgICAgIGRvY3VtZW50
KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJnZXRJRCwgKnRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCmluZGV4IDg2MmQ2OGFiNGQ1MjcwMzhhNDdjMzUy
MTc5NTNhODlhODUzYTc4ZjQuLjZlODU4M2JiYTRjYmMzYjMwZmNjODYxM2RjZDIzNWQ3YjI1NTI2
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQu
Y3BwCkBAIC0xNTcsNyArMTU3LDcgQEAgU1ZHU01JTEVsZW1lbnQ6On5TVkdTTUlMRWxlbWVudCgp
CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsKLSAg
ICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVu
Y2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIHZvaWQg
U1ZHU01JTEVsZW1lbnQ6OmNsZWFyVGFyZ2V0KCkKQEAgLTE5MiwxNyArMTkyLDE3IEBAIHZvaWQg
U1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKIAogICAgIGlmICghc3ZnVGFy
Z2V0KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBh
bHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAgICAg
aWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0
aGlzLCBpZCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBl
bmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAgICAg
IEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNp
ZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMg
dG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRv
IGl0LgotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50
UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgc3ZnVGFyZ2V0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KCp0aGlzLCAq
c3ZnVGFyZ2V0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApp
bmRleCA5ZTI5ZjlhMmMzZDljMjdmZTJmNDgyYjg3ZTY0YWQwOGZmNjkyZDY2Li4zNGZmZGYwYTFi
NGY3MjZhOGNlMTYwODBmYmVlYzBlMTdhZjk2Y2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gSW50
ZXJuYWxzOjptYXJrZXJDb3VudEZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIG5vZGUuZG9j
dW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS51cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCk7
Ci0gICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0Zvcigmbm9kZSwg
bWFya2VyVHlwZXMpLnNpemUoKTsKKyAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzRm9yKG5vZGUsIG1hcmtlclR5cGVzKS5zaXplKCk7CiB9CiAKIEV4Y2VwdGlvbk9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBJbnRlcm5hbHM6Om1hcmtlckF0KE5vZGUmIG5vZGUs
IGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgpCkBAIC0xMzgzLDcgKzEz
ODMsNyBAQCBFeGNlcHRpb25PcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gSW50ZXJuYWxzOjpt
YXJrZXJBdChOb2RlJiBub2RlLCBjb25zdCBTdHJpbgogCiAgICAgbm9kZS5kb2N1bWVudCgpLmZy
YW1lKCktPmVkaXRvcigpLnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQoKTsKIAotICAgIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUuZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0Zvcigmbm9kZSwgbWFya2VyVHlwZXMpOworICAgIFZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG5vZGUuZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0Zvcihub2RlLCBtYXJrZXJUeXBlcyk7CiAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpIDw9
IGluZGV4KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gbWFya2Vyc1tpbmRl
eF07CkBAIC0xNDM5LDcgKzE0MzksNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6
ZHVtcE1hcmtlclJlY3RzKGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZVN0cmluZykKIHZvaWQgSW50
ZXJuYWxzOjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIGlzQWN0
aXZlKQogewogICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLSAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFk
ZFRleHRNYXRjaE1hcmtlcigmcmFuZ2UsIGlzQWN0aXZlKTsKKyAgICByYW5nZS5vd25lckRvY3Vt
ZW50KCkubWFya2VycygpLmFkZFRleHRNYXRjaE1hcmtlcihyYW5nZSwgaXNBY3RpdmUpOwogfQog
CiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGln
aGxpZ2h0ZWQoYm9vbCBmbGFnKQpAQCAtMjYyNiw0MiArMjYyNiw2IEBAIHZvaWQgSW50ZXJuYWxz
OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQogICAgIGRvY3VtZW50LT5w
YWdlKCktPnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQpOwogfQogCi0jaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQotCi12b2lkIEludGVybmFsczo6d2Via2l0V2lsbEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1
cm47Ci0gICAgZG9jdW1lbnQtPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZl
bGVtZW50KTsKLX0KLQotdm9pZCBJbnRlcm5hbHM6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBj
b250ZXh0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0g
ICAgZG9jdW1lbnQtPndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQp
OwotfQotCi12b2lkIEludGVybmFsczo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1
bWVudC0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0K
LXZvaWQgSW50ZXJuYWxzOjp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndl
YmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7Ci19Ci0KLSNlbmRpZgot
CiB2b2lkIEludGVybmFsczo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVk
IGxvbmcgbG9uZyBxdW90YSkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9j
dW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGRhZDFmNGE5YjFmMTNh
YzA4MjkxNmY3Njk3NDBhNzk3OThmYjQ1YmIuLjBhMDlkMGYxNTgxMjU0OThmMDFmYTc5ZTMyMzQ0
ZjkxYzM0NmE1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMzU2LDEzICsz
NTYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRvcENvbnRlbnRJbnNldChmbG9hdCk7CiAK
LSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgdm9pZCB3ZWJraXRXaWxsRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50Jik7Ci0gICAgdm9pZCB3ZWJraXREaWRFbnRlckZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIHdlYmtpdFdpbGxFeGl0RnVsbFNj
cmVlbkZvckVsZW1lbnQoRWxlbWVudCYpOwotICAgIHZvaWQgd2Via2l0RGlkRXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KEVsZW1lbnQmKTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9URVNUU1VQUE9S
VF9FWFBPUlQgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRT
ZWN1cml0eVBvbGljeShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKaW5kZXggM2JmMDJiNzNjN2JiMWRkMWY1Y2FkNzAwOTVjZjBiYTY0MDQ5MTg4
ZC4uNTRhYjFjM2ZjOTI4MGJmNzAxZjhiNTE0M2NlMzVmNTgxNDczYzlkZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMzMwLDExICszMzAsNiBAQCBlbnVtIEV2ZW50VGhy
b3R0bGluZ0JlaGF2aW9yIHsKIAogICAgIHZvaWQgc2V0VG9wQ29udGVudEluc2V0KHVucmVzdHJp
Y3RlZCBmbG9hdCBjb250ZW50SW5zZXQpOwogCi0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5f
QVBJXSB2b2lkIHdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQgZWxl
bWVudCk7Ci0gICAgW0NvbmRpdGlvbmFsPUZVTExTQ1JFRU5fQVBJXSB2b2lkIHdlYmtpdERpZEVu
dGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLSAgICBbQ29uZGl0aW9u
YWw9RlVMTFNDUkVFTl9BUEldIHZvaWQgd2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50IGVsZW1lbnQpOwotICAgIFtDb25kaXRpb25hbD1GVUxMU0NSRUVOX0FQSV0gdm9p
ZCB3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKLQog
ICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdW90YSk7CiAKICAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50
U2VjdXJpdHlQb2xpY3koRE9NU3RyaW5nIHNjaGVtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5j
cHAKaW5kZXggODI5MDMxNDA1ZGJiN2Y3ZWI0MTM5YTQ3ZjIwNWJlNmQ2N2M0ZGEwYS4uYmI0YTE4
NWZkMzA3NDMwMTRjNWM4OTk0OGRiM2UwNGM0NjRiNGFkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyLmNwcApAQCAtOTEsNyArOTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8V29ya2VyPj4gV29ya2Vy
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSlNDOjpSdQogICAgIHdv
cmtlci0+bV9zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBzaG91
bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3k7CiAKICAgICAvLyBUaGUgd29y
a2VyIGNvbnRleHQgZG9lcyBub3QgZXhpc3Qgd2hpbGUgbG9hZGluZywgc28gd2UgbXVzdCBlbnN1
cmUgdGhhdCB0aGUgd29ya2VyIG9iamVjdCBpcyBub3QgY29sbGVjdGVkLCBub3IgYXJlIGl0cyBl
dmVudCBsaXN0ZW5lcnMuCi0gICAgd29ya2VyLT5zZXRQZW5kaW5nQWN0aXZpdHkod29ya2VyLnB0
cigpKTsKKyAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIuZ2V0KCkpOwogCiAg
ICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd29ya2Vycy5odG1s
I29mZmljaWFsLW1vbWVudC1vZi1jcmVhdGlvbgogICAgIHdvcmtlci0+bV93b3JrZXJDcmVhdGlv
blRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFdv
cmtlcjo6bm90aWZ5RmluaXNoZWQoKQogICAgIH0KICAgICBtX3NjcmlwdExvYWRlciA9IG51bGxw
dHI7CiAKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDlhNGZkYjdkMzEzNGYwYWExNzJkYTUwNjBmNTlm
ZWZkNDQ4YmYzNTQuLmFkMjc1YjY4YTU0NTJlYmQwMDgzNzEzODRmYTljOTRmMmRhMTRjNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTkwLDkgKzE5MCw5IEBAIEV4
Y2VwdGlvbk9yPERvY3VtZW50Kj4gWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKCkKICAgICAg
ICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoaXNIVE1MKQotICAgICAgICAgICAgICAgIG1fcmVzcG9uc2VEb2N1bWVu
dCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlKDAsIG1fdXJsKTsKKyAgICAgICAgICAgICAgICBtX3Jl
c3BvbnNlRG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZShudWxscHRyLCBtX3VybCk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gWE1M
RG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZURv
Y3VtZW50ID0gWE1MRG9jdW1lbnQ6OmNyZWF0ZShudWxscHRyLCBtX3VybCk7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQuCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9j
dW1lbnQtPnNldENvbnRlbnQobV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFj
aXR5KCkpOwogICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50LT5zZXRDb250ZXh0RG9jdW1l
bnQoZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKTsKQEAgLTQ5
MCw3ICs0OTAsNyBAQCBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbk9yPHZvaWQ+PiBYTUxIdHRwUmVx
dWVzdDo6cHJlcGFyZVRvU2VuZCgpCiAgICAgaWYgKCFjb250ZXh0LnNob3VsZEJ5cGFzc01haW5X
b3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpICYmICFjb250ZXh0LmNvbnRlbnRTZWN1cml0eVBv
bGljeSgpLT5hbGxvd0Nvbm5lY3RUb1NvdXJjZShtX3VybCkpIHsKICAgICAgICAgaWYgKCFtX2Fz
eW5jKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsg
TmV0d29ya0Vycm9yIH0gfTsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAg
ICAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5z
dG9wKCk7CiAgICAgICAgIG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb25Pcjx2b2lkPiB7IH07CkBAIC03NTksNyArNzU5LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoKQogICAgICAg
ICAvLyBhIHJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3MgYmVjYXVzZSB3ZSBuZWVkIHRvIGtlZXAgdGhl
IGxpc3RlbmVycyBhbGl2ZSwKICAgICAgICAgLy8gYW5kIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkg
dGhlIEphdmFTY3JpcHQgd3JhcHBlci4KICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAg
ICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KCp0aGlzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNh
Y2hlUGFydGl0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dG9wT3JpZ2luKCkuZG9tYWlu
Rm9yQ2FjaGVQYXJ0aXRpb24oKSk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbExvYWRYSFJTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CkBAIC04
OTMsNyArODkzLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTUKICAgICB2
bS5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShtX3Jlc3BvbnNlQnVpbGRlci5sZW5n
dGgoKSAqIDIpOwogCi0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBYTUxIdHRwUmVx
dWVzdDo6b3ZlcnJpZGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG92ZXJyaWRlKQpAQCAtMTAzMSw3
ICsxMDMxLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKICAgICAvLyBJbiBjYXNlIGRpZEZhaWwgaXMgY2FsbGVkIHN5bmNocm9ub3Vz
bHkgb24gYW4gYXN5bmNocm9ub3VzIFhIUiBjYWxsLCBsZXQncyBkaXNwYXRjaCBuZXR3b3JrIGVy
cm9yIGFzeW5jaHJvbm91c2x5CiAgICAgaWYgKG1fYXN5bmMgJiYgbV9zZW5kRmxhZyAmJiAhbV9s
b2FkZXIpIHsKICAgICAgICAgbV9zZW5kRmxhZyA9IGZhbHNlOwotICAgICAgICBzZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAg
ICAgIG1fdGltZW91dFRpbWVyLnN0b3AoKTsKICAgICAgICAgbV9uZXR3b3JrRXJyb3JUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoU3RlcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNw
cAppbmRleCA4YzkyN2JmZjNlZWI2OTA4MWYwNDdiZjBmMjZlNmQ4ZWVlOTJjNWNkLi5mY2RjMDJj
NTIxNGQzOTUwYmZiZDRjY2ZmNzNkMTg1YjI2NjU1NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFBhdGhTdGVwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVw
LmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5o
IgpAQCAtMjAxLDcgKzIwMCw3IEBAIGlubGluZSBib29sIG5vZGVNYXRjaGVzQmFzaWNUZXN0KE5v
ZGUmIG5vZGUsIFN0ZXA6OkF4aXMgYXhpcywgY29uc3QgU3RlcDo6Tm9kZVRlCiAgICAgICAgICAg
ICBpZiAobmFtZSA9PSBzdGFyQXRvbSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuYW1lc3Bh
Y2VVUkkuaXNFbXB0eSgpIHx8IG5hbWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpOwog
Ci0gICAgICAgICAgICBpZiAoaXM8SFRNTERvY3VtZW50Pihub2RlLmRvY3VtZW50KCkpKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFBhdGhzIHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91bGQgbWF0Y2ggSFRNTCBlbGVtZW50
cyBpbiBIVE1MIGRvY3VtZW50cyBkZXNwaXRlIHRob3NlIGhhdmluZyBhbiBYSFRNTCBuYW1lc3Bh
Y2UuIE5hbWVzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZlbHkuCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGRvd25jYXN0PEhUTUxFbGVtZW50
Pihub2RlKS5sb2NhbE5hbWUoKSwgbmFtZSkgJiYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBu
YW1lc3BhY2VVUkkgPT0gbm9kZS5uYW1lc3BhY2VVUkkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFBy
b2Nlc3Nvci5jcHAKaW5kZXggYTkwYjk2NTAwNGM0OGZiNDkwNGViN2ZjMmJlMWJjNjMzYTcyMDZh
NS4uZWEwYWM0MDI1ODQ0Y2IyMTRiNGVjZWQyMDllYWM5MzZiODI3MDAzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUUHJvY2Vzc29yLmNwcApAQCAtMjEsMTEgKzIxLDEwIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKIAogI2lmIEVOQUJMRShY
U0xUKQogCi0jaW5jbHVkZSAiWFNMVFByb2Nlc3Nvci5oIgotCiAjaW5jbHVkZSAiRE9NSW1wbGVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUg
IkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgpAQCAtMzMsNyArMzIsNiBAQAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
LSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luUG9saWN5LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAt
ODcsNyArODUsNyBAQCBSZWY8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50
RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZwogCiAgICAgICAgIGlmIChEb2N1
bWVudCogb2xkRG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgewogICAgICAgICAgICAgcmVz
dWx0LT5zZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChvbGREb2N1bWVudCk7Ci0gICAgICAgICAg
ICByZXN1bHQtPnRha2VET01XaW5kb3dGcm9tKG9sZERvY3VtZW50KTsKKyAgICAgICAgICAgIHJl
c3VsdC0+dGFrZURPTVdpbmRvd0Zyb20oKm9sZERvY3VtZW50KTsKICAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U2VjdXJpdHlPcmlnaW5Qb2xpY3kob2xkRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luUG9s
aWN5KCkpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRDb29raWVVUkwob2xkRG9jdW1lbnQtPmNv
b2tpZVVSTCgpKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
b2xkRG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIu
Y3BwCmluZGV4IDM2NjljMmRhOTg2MGIzYWVhNjAyYzhkYmY3ZDBmYmM5ODc3OThjZGMuLjVhYjI2
MjBhNzgxMTE3NDc3MGQ3MWI2MzU3ZDhkMmQ5MzkxYTllMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdl
ci5jcHAKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpleGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCkKIHZvaWQgV2Vi
RnVsbFNjcmVlbk1hbmFnZXI6OndpbGxFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVCht
X2VsZW1lbnQpOwotICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKCptX2VsZW1lbnQpOwogICAgIG1fcGFnZS0+
aGlkZVBhZ2VCYW5uZXJzKCk7CiAgICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91
dCgpOwogICAgIG1fcGFnZS0+Zm9yY2VSZXBhaW50V2l0aG91dENhbGxiYWNrKCk7CkBAIC0xMTks
MTQgKzExOSwxNCBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRW50ZXJGdWxsU2Ny
ZWVuKCkKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbFNjcmVlbigpCiB7
CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtp
dERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgpKTsKKyAgICBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7CiB9CiAKIHZvaWQg
V2ViRnVsbFNjcmVlbk1hbmFnZXI6OndpbGxFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJU
KG1fZWxlbWVudCk7CiAgICAgbV9maW5hbEZyYW1lID0gc2NyZWVuUmVjdE9mQ29udGVudHMobV9l
bGVtZW50LmdldCgpKTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAgIG1fZWxlbWVudC0+ZG9j
dW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBtX3BhZ2UtPnNob3dQYWdl
QmFubmVycygpOwogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVGdWxsU2NyZWVuQ2xpZW50KCku
YmVnYW5FeGl0RnVsbFNjcmVlbihtX3BhZ2UuZ2V0KCksIG1fZmluYWxGcmFtZSwgbV9pbml0aWFs
RnJhbWUpOwogfQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXI6
OndpbGxFeGl0RnVsbFNjcmVlbigpCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpkaWRFeGl0
RnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50LT5k
b2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0
KCkpOworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigp
OwogfQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpzZXRBbmltYXRpbmdGdWxsU2NyZWVu
KGJvb2wgYW5pbWF0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01l
ZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyLmNwcAppbmRleCBlOWZmMjRmODJkYzVkMTllNThjYTk2ZGMxNTQ2ZGRkYjM3YTQzZmEz
Li45NDUwMTNkNjg4NzM5N2UyZWJmNzFiMTk5YTk1ZDUyOWMzNTA1MTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJl
YW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtNzQsNyArNzQsNyBA
QCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6c3RhcnRVc2VyTWVkaWFS
ZXF1ZXN0KFVzZXJNZWRpYVJlcXVlc3QmCiAKICAgICBhdXRvJiBwZW5kaW5nUmVxdWVzdHMgPSBt
X2Jsb2NrZWRSZXF1ZXN0cy5hZGQoZG9jdW1lbnQsIFZlY3RvcjxSZWZQdHI8VXNlck1lZGlhUmVx
dWVzdD4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAocGVuZGluZ1JlcXVlc3RzLmlzRW1w
dHkoKSkKLSAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsK
KyAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAg
cGVuZGluZ1JlcXVlc3RzLmFwcGVuZCgmcmVxdWVzdCk7CiB9CiAKQEAgLTExNyw3ICsxMTcsNyBA
QCB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6bWVkaWFDYW5TdGFydChE
b2N1bWVudCYgZG9jdW1lbnQpCiAgICAgd2hpbGUgKCFwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGlmICghZG9jdW1lbnQucGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKICAg
ICAgICAgICAgIG1fYmxvY2tlZFJlcXVlc3RzLmFkZCgmZG9jdW1lbnQsIHBlbmRpbmdSZXF1ZXN0
cyk7Ci0gICAgICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7
CisgICAgICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQg
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmVNZWRpYVJlcXVlc3RGcm9t
TWFwcyhVc2VyTWVkaWFSZXF1CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAo
cGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlcXVlc3QuZG9jdW1lbnQo
KS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgcmVxdWVz
dC5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBtX2Jsb2NrZWRSZXF1ZXN0cy5hZGQocmVxdWVzdC5kb2N1bWVu
dCgpLCBwZW5kaW5nUmVxdWVzdHMpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYTY0OGY3ZWFiZmViZWVk
MGE2ZTc1ZTg2YzYyZTBiNGEyYzFjY2Q1My4uNTE4Nzg4YjZkYmE4NDAyZDdjOGM4YTI1YTgwZTZi
ZDViNzMxYTU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKQEAgLTMxNyw5ICszMTcsOSBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygp
CiAgICAgQVNTRVJUKCFtX2lzQmVpbmdEZXN0cm95ZWQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5n
VW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCku
cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBtX3BsdWdpbkVsZW1l
bnQtPmRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKIAotICAg
IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVBdWRpb1Byb2R1Y2VyKHRoaXMpOwor
ICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVBdWRpb1Byb2R1Y2VyKCp0aGlz
KTsKIAogICAgIGRlc3Ryb3lQbHVnaW5BbmRSZXNldCgpOwogCkBAIC01OTAsMTMgKzU5MCwxMyBA
QCB2b2lkIFBsdWdpblZpZXc6OmluaXRpYWxpemVQbHVnaW4oKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pc1dhaXRpbmdV
bnRpbE1lZGlhQ2FuU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fcGx1Z2luRWxlbWVu
dC0+ZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAg
ICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
cigqdGhpcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLmFkZEF1ZGlvUHJv
ZHVjZXIodGhpcyk7CisgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLmFkZEF1ZGlvUHJv
ZHVjZXIoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hF
VVJJU1RJQykKICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqbV9wbHVnaW5FbGVtZW50KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktpdEZ1
bGxTY3JlZW5MaXN0ZW5lci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQppbmRleCBhZjVhYzJmMjg5YmMxYjEyMDQ2
NmM1OWMwMjc5MDZlYzE0ODE2NWU3Li41MzdjYzY2ODA1ZDQ5YmUwZWQwZmI0MWY2MDkwNjM1ZTZi
OTk1YWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLm1tCkBAIC00NSwyNSAr
NDUsMjUgQEAgLSAoaWQpaW5pdFdpdGhFbGVtZW50OihFbGVtZW50KillbGVtZW50CiAtICh2b2lk
KXdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2VsZW1lbnQpCi0gICAgICAg
IF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50
KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2ls
bEVudGVyRnVsbFNjcmVlbigqX2VsZW1lbnQpOwogfQogCiAtICh2b2lkKXdlYmtpdERpZEVudGVy
RnVsbFNjcmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3Vt
ZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7
CisgICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNjcmVlbigp
OwogfQogCiAtICh2b2lkKXdlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbgogewogICAgIGlmIChfZWxl
bWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgICAgIF9lbGVtZW50LT5kb2N1bWVu
dCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpOwogfQogCiAtICh2b2lkKXdlYmtpdERpZEV4
aXRGdWxsU2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAgICAgICBfZWxlbWVudC0+ZG9j
dW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkp
OworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigp
OwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQppbmRleCAzZjEwOTk2ZmMyNmY4Njc2MWQ4
NzkyYzAwYTdmYmYxMmY4ZThkN2E4Li5hMjE2YjBhOGNmZWFhZjM1Mjc4NjNkYzdiYmU4M2RlZWE5
MWUxY2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KQEAgLTIzNiw3ICsyMzYsNyBAQCAtICh2b2lk
KWVudGVyRnVsbFNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KIAogICAgIF9zYXZlZFNjYWxlID0g
W193ZWJWaWV3IF92aWV3U2NhbGVGYWN0b3JdOwogICAgIFtfd2ViVmlldyBfc2NhbGVXZWJWaWV3
OjEgYXRPcmlnaW46TlNNYWtlUG9pbnQoMCwgMCldOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPndl
YmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICBb
c2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKCpfZWxlbWVudCk7CiAg
ICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVlKTsKICAgICBb
c2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQoKTsKIApAQCAtMjY5LDcgKzI2OSw3IEBAIC0g
KHZvaWQpZmluaXNoZWRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCiAg
ICAgICAgIC8vIFNjcmVlbiB1cGRhdGVzIHRvIGJlIHJlLWVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0
aGlzIGJsb2NrCiAgICAgICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKICAgICAgICAgW3Nl
bGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgICAgIFtz
ZWxmIF9kb2N1bWVudF0tPndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1l
bnQuZ2V0KCkpOworICAgICAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxT
Y3JlZW4oKTsKICAgICAgICAgCiAgICAgICAgIE5TUmVjdCB3aW5kb3dCb3VuZHMgPSBbW3NlbGYg
d2luZG93XSBmcmFtZV07CiAgICAgICAgIHdpbmRvd0JvdW5kcy5vcmlnaW4gPSBOU1plcm9Qb2lu
dDsKQEAgLTMxMyw3ICszMTMsNyBAQCAtICh2b2lkKWV4aXRGdWxsU2NyZWVuCiAKICAgICBfZmlu
YWxGcmFtZSA9IHNjcmVlblJlY3RPZkNvbnRlbnRzKF9lbGVtZW50LmdldCgpKTsKIAotICAgIFtz
ZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1l
bnQuZ2V0KCkpOworICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVl
bigpOwogICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7
CiAKICAgICBpZiAoX2lzRW50ZXJpbmdGdWxsU2NyZWVuKQpAQCAtMzUzLDcgKzM1Myw3IEBAIC0g
KHZvaWQpZmluaXNoZWRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQKICAg
ICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CiAKICAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRB
bmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxmIF9k
b2N1bWVudF0tPndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgW193ZWJWaWV3IF9zY2Fs
ZVdlYlZpZXc6X3NhdmVkU2NhbGUgYXRPcmlnaW46TlNNYWtlUG9pbnQoMCwgMCldOwogCiAgICAg
TlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25k
ZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
aW5kZXggNDYwZTc4ZTZlMWY3ODQ4NjBmYTdkZWU0NWZjMTIwNTVmYTZhMWE5MS4uODVmNzIwMTNl
ZGQ3ODQzMWQxZDE1ODUxYzAwNmQ5MWE1ZGNhMWMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBQ
bHVnaW5WaWV3OjpzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCkKICAgICAvLyBvdXJzZWx2ZXMu
IE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0byBkZWxpdmVyIGRhdGEgYmVmb3JlIHdl
J3ZlCiAgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4KICAgICBpZiAoIW1fbG9hZE1hbnVhbGx5
ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICBt
X3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7
CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lcigqdGhpcyk7CiAgICAgICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IHRydWU7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI5MSw3ICsyOTEsNyBAQCBQbHVnaW5WaWV3Ojp+UGx1
Z2luVmlldygpCiAgICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5zdGFuY2UpOwogCiAg
ICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwog
CiAgICAgc3RvcCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IDc2MWVh
ZTA3ODVmODJhNjhkNDcwOWU5MTA1MGI4MGZhMDc3MzUxYWYuLjdjYmVlYzkxYjczZjJiYjAwZDg4
N2Q2ZGY4ZGRhODFlZjNjMTQyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBA
IC03NTE2LDEzICs3NTE2LDEzIEBAIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFNldFBh
cmVudFdpbmRvdyhIV05EIGhvc3RXaW5kb3cpCiB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGll
bnRXaWxsRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVu
dCk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKKyAgICBtX2Z1
bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4oKm1f
ZnVsbFNjcmVlbkVsZW1lbnQpOwogfQogCiB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRE
aWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50KTsK
LSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERpZEVudGVyRnVsbFNj
cmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2Ny
ZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAog
dm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEV4aXRGdWxsU2NyZWVuKCkKQEAgLTc1
MzQsNyArNzUzNCw3IEBAIHZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxFeGl0RnVs
bFNjcmVlbigpCiB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnREaWRFeGl0RnVsbFNjcmVl
bigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOwotICAgIG1fZnVsbFNjcmVl
bkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1f
ZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3Vt
ZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50
ID0gbnVsbHB0cjsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359623</attachid>
            <date>2019-01-19 14:05:08 -0800</date>
            <delta_ts>2019-01-21 10:58:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175028-20190119140507.patch</filename>
            <type>text/plain</type>
            <size>286007</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBlZmFlNjY5YTIwNzFm
MmMxZmUyZDFmMDUyMTc3NmUyOGRlMTA3OC4uNTAzYmE5YmU4NDEyNDQ2YTExZmViMTVjZjg3MDYw
NzNlNTRiOGZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0NyBAQAorMjAxOS0wMS0xNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgcmF0
aGVyIHRoYW4gcG9pbnRlcnMgZm9yIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZnVuY3Rpb25zLCBhbmQg
bW9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1
MDI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBN
b2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsZVBheVNlc3Npb246OmJlZ2luKTogUGFzcyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVQYXltZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsZVBheVNlc3Npb246OmRpZFJlYWNoRmluYWxTdGF0ZSk6IERpdHRvLgorICAg
ICAgICAqIE1vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9N
Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2Fj
aGU6OmJhdGNoRGVsZXRlT3BlcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01D
YWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZVN0b3JhZ2U6
Om1hdGNoKTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6bG9hZEJsb2IpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keU93bmVyOjpmaW5pc2hCbG9iTG9hZGluZyk6IERp
dHRvLgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZldGNoQm9keVNvdXJjZTo6c2V0QWN0aXZlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpGZXRjaEJvZHlTb3VyY2U6OnNldEluYWN0aXZlKTogRGl0dG8uCisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoUmVzcG9uc2U6OkJvZHlMb2FkZXI6OkJvZHlMb2FkZXIpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkZldGNoUmVzcG9uc2U6OkJvZHlMb2FkZXI6On5Cb2R5TG9hZGVyKTogRGl0dG8uCisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNvdXJjZTo6YWRkZWRUb1JlZ2lzdHJ5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNvdXJjZTo6cmVtb3ZlZEZyb21SZWdpc3RyeSk6IERpdHRvLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW06On5NZWRpYVN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW06OnN0YXJ0UHJvZHVjaW5nRGF0YSk6IERpdHRvLgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVRyYWNrOjpNZWRpYVN0cmVhbVRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbVRyYWNrOjp+TWVkaWFTdHJlYW1UcmFjayk6IERpdHRvLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UlRDRGF0YUNoYW5uZWw6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OmNsb3NlKTogRGl0dG8uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29u
bmVjdGlvbjo6Y3JlYXRlKTogVXNlIGF1dG8uCisgICAgICAgICogTW9kdWxlcy9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb246OnNo
b3cpOiBQYXNzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uOjpm
aW5hbGl6ZSk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0lu
c3BlY3Rvck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGU6OnVwZGF0ZVB1bGxTdGF0dXMpOiBEaXR0by4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y29u
c3RydWN0Q29tbW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Omxh
enlJbml0aWFsaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNs
ZWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjptYXJrRm9yRGVsZXRp
b24pOiBUYWtlIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojph
ZGRBdXRvbWF0aWNQdWxsTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250
ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxsTm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjayk6IFBhc3MgYSByZWZlcmVuY2UuCisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OndpbGxQYXVzZVBsYXliYWNrKTogRGl0dG8uCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDogVXBkYXRlIGFib3ZlIGZ1
bmN0aW9ucyB0byB0YWtlCisgICAgICAgIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gcG9pbnRlcnMu
CisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKTogUGFzcyBhIHJlZmVyZW5jZS4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldDo6Y29ubmVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpzdG9wKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZENsb3NlKTog
RGl0dG8uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFs
bG93ZWQgWGNvZGUgdG8gdXBkYXRlIHRoaXMgZmlsZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6
Om1vZHVsZUxvYWRlclJlc29sdmUpOiBVcGRhdGUgc2luY2UKKyAgICAgICAgbW9kdWxlTG9hZGVy
IGlzIG5vdyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6
bW9kdWxlTG9hZGVyRmV0Y2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6bW9kdWxlTG9hZGVyRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQ
cm9wZXJ0aWVzKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vQWN0aXZlRE9NT2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSk6IFRh
a2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OnVuc2V0
UGVuZGluZ0FjdGl2aXR5KTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhKTogUGFzcyBhIHJl
ZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6Omluc2VydERhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKTogRGl0dG8u
CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleSk6IFBhc3MgYSByZWZlcmVuY2UuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXApOiBUYWtlIGEgcmVmZXJlbmNlLgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVn
aXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6YWRkQXVkaW9Qcm9kdWNlcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZUF1ZGlvUHJvZHVjZXIpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojpob3ZlcmVkRWxlbWVudERpZERldGFjaCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVsZW1lbnRJbkFjdGl2ZUNoYWluRGlkRGV0YWNoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoTm9kZUl0ZXJhdG9yKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bW92ZU5vZGVJdGVyYXRvcnNUb05l
d0RvY3VtZW50U2xvd0Nhc2UpOiBQYXNzCisgICAgICAgIGEgcmVmZXJlbmNlLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6Om5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2lsbEJlUmVtb3ZlZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRJbnNlcnRlZCk6IFRha2UgYSByZWZlcmVuY2Uu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGV4dFJlbW92ZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJnZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0Tm9kZVNwbGl0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6dGFrZURPTVdpbmRvd0Zyb20pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1
c3BlbnNpb25DYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0
ZUNoYW5nZWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkQ2FsbGJhY2tzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNo
YW5nZWRDYWxsYmFja3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJl
Z2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmlzaGVkUGFyc2luZyk6IFVzZSBhIHJlZmVyZW5jZS4K
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdHRhY2hSYW5nZSk6IFRha2UgYSByZWZlcmVu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoUmFuZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzdXNwZW5kU2NoZWR1bGVkVGFza3MpOiBVc2UgYSBy
ZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzdW1lU2NoZWR1bGVkVGFz
a3MpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRNZWRpYUNhblN0YXJ0
TGlzdGVuZXIpOiBUYWtlIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmRldmljZU1vdGlvbkNvbnRyb2xsZXIgY29uc3QpOiBSZXR1cm4gYSByZWZlcmVu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV2aWNlT3JpZW50YXRpb25Db250cm9s
bGVyIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2ltdWxhdGVE
ZXZpY2VPcmllbnRhdGlvbkNoYW5nZSk6IFVzZSBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpmdWxsU2NyZWVuSXNBbGxvd2VkRm9yRWxlbWVudCBjb25zdCk6IFRha2Ug
YSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVxdWVzdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KTogUGFzcyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4pOiBSZW5hbWVkIHRvIHJlbW92ZSB0aGUK
KyAgICAgICAgIkZvckVsZW1lbnQiIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUuIFRha2UgYSByZWZl
cmVuY2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbik6IFJlbmFtZWQgdG8gcmVtb3ZlIHRoZQorICAgICAg
ICAiRm9yRWxlbWVudCIgZnJvbSB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgcmVtb3ZlZCB0aGUgdW51
c2VkIGVsZW1lbnQgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0
V2lsbEV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpwdXNoRnVsbHNjcmVlbkVsZW1lbnRTdGFjayk6IFRha2UgYSByZWZlcmVuY2UuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVu
dFF1ZXVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFBhcnNlcllpZWxkVG9r
ZW46OkRvY3VtZW50UGFyc2VyWWllbGRUb2tlbik6IFVzZSBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50UGFyc2VyWWllbGRUb2tlbjo6fkRvY3VtZW50UGFyc2VyWWllbGRU
b2tlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUhvdmVyQWN0
aXZlU3RhdGUpOiBVcGRhdGVkIG5hbWUgb2YgaXNJbkFjdGl2ZUNoYWluLgorCisgICAgICAgICog
ZG9tL0RvY3VtZW50Lmg6IFVwZGF0ZWQgYXJndW1lbnQgdHlwZXMgYXMgZGVzY3JpYmVkIGFib3Zl
LiBDaGFuZ2VkIGEgY291cGxlCisgICAgICAgIG9mIGlubGluZSBmdW5jdGlvbnMgdG8gcmV0dXJu
IHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2Vy
KTogVGFrZSBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzTWFya2VyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29udGVu
dE1hcmtlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZW1vdmVNYXJrZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2Vycyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKTogREl0
dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOiBVcGRhdGVkIGFy
Z3VtZW50IHR5cGVzIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6On5FbGVtZW50KTogUGFzcyBhIHJlZmVy
ZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzVXNlckFjdGlvbkVsZW1lbnRJbkFj
dGl2ZUNoYWluIGNvbnN0KTogVXBkYXRlZCBuYW1lIG9mCisgICAgICAgIGlzSW5BY3RpdmVDaGFp
bi4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzIGNv
bnN0KTogVGFrZSBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92
ZWRGcm9tQW5jZXN0b3IpOiBQYXNzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6Y2xlYXJIb3ZlckFuZEFjdGl2ZVN0YXR1c0JlZm9yZURldGFjaGluZ1JlbmRlcmVyKToK
KyAgICAgICAgUGFzcyBhIHJlZmVyZW5jZSBhbmQgdXBkYXRlZCBuYW1lIG9mIGlzSW5BY3RpdmVD
aGFpbi4KKworICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IFJlbmFtZWQgaW5BY3RpdmVDaGFpbiB0
byBpc0luQWN0aXZlQ2hhaW4sIHVwZGF0ZWQgYXJndW1lbnQKKyAgICAgICAgdHlwZXMgdG8gYmUg
cmVmZXJlbmNlcywgYW5kIHJlbW92ZWQgdW5uZWVkZWQgZnJpZW5kIGRlY2xhcmF0aW9uIGFuZCBt
YWRlCisgICAgICAgIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSBwcml2YXRlLgorCisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm9ybWFsaXpl
KTogUGFzcyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRXF1YWxOb2Rl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6Ok5vZGVJdGVyYXRvcik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjp+Tm9kZUl0ZXJhdG9yKTogRGl0dG8uCisKKyAgICAgICAg
KiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9CdXR0
b25Hcm91cDo6YWRkKTogVGFrZSBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlv
QnV0dG9uR3JvdXA6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9CdXR0b25Hcm91cDo6cmVtb3ZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
YWRpb0J1dHRvbkdyb3VwOjpjb250YWlucyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9CdXR0b25Hcm91cHM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cHM6Omhhc0NoZWNrZWRCdXR0b24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvQnV0dG9uR3JvdXBzOjppc0luUmVxdWlyZWRH
cm91cCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cHM6
OnJlbW92ZUJ1dHRvbik6IERpdHRvLgorICAgICAgICAqIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5o
OiBVcGRhdGVkIGFyZ3VtZW50IHR5cGVzLgorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjpSYW5nZSk6IFBhc3MgYSByZWZlcmVuY2UuCisgICAgICAg
IChXZWJDb3JlOjpSYW5nZTo6flJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6c2V0RG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGVD
b250ZXh0dWFsRnJhZ21lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kYXJ5VGV4
dEluc2VydGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dGV4dEluc2VydGVk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZGFyeVRleHRSZW1vdmVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dGV4dFJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjp0ZXh0Tm9kZVNwbGl0KTogRGl0dG8uCisgICAgICAgICogZG9tL1JhbmdlLmg6
IFRha2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorCisgICAgICAgICogZG9tL1Nj
cmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cHJlcGFy
ZVNjcmlwdCk6IFVzZSByZWZlcmVuY2UuCisKKyAgICAgICAgKiBkb20vVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0OjpzcGxpdFRleHQpOiBQYXNzIHJlZmVyZW5jZS4KKworICAgICAg
ICAqIGRvbS9Vc2VyQWN0aW9uRWxlbWVudFNldC5oOiBSZW5hbWVkIGluQWN0aXZlQ2hhaW4gdG8g
aXNJbkFjdGl2ZUNoYWluIHRvCisgICAgICAgIG1hdGNoIHRoZSBuYW1pbmcgc2NoZW1lIG9mIHRo
ZSBvdGhlciBzaW1pbGFyIGZ1bmN0aW9ucywgbGlrZSBpc0FjdGl2ZS4KKworICAgICAgICAqIGVk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgor
ICAgICAgICBQYXNzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRl
cm5hdGl2ZVRleHRVSVJlc3VsdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkRWRpdGluZyk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1JldmVyc2VkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJr
Q29ycmVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1h
cmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5k
KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQ
cmVzZXJ2aW5nTWFya2Vycyk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29t
bWFuZC5jcHA6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphcmVJZGVudGljYWxFbGVtZW50cyk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aWdub3JlU3BlbGxpbmcp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5TcGVsbGluZyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvV29yZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrQW5kUmVwbGFjZUZvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFu
Z2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKTog
RGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KTogUGFzcyBhIHJlZmVyZW5j
ZS4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmg6IFRha2UgYSByZWZlcmVu
Y2UuCisKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrZXI6OmRpZENoZWNrU3VjY2VlZCk6IFBhc3MgYSByZWZlcmVuY2UuCisg
ICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSk6IERpdHRvLgorICAgICAgICAq
IGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
aGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcpOiBQYXNzIGEgcmVmZXJlbmNlLgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0
YWlsIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5
KTogRGl0dG8uCisgICAgICAgIEFsc28gYWRkZWQgYSBjb21tZW50IGFib3V0IGEgcG9zc2libGUg
bWlzc2luZyBudWxsIGNoZWNrOyBiZWhhdmlvciBzaG91bGQKKyAgICAgICAgYmUgbm8gZGlmZmVy
ZW50IHRoYW4gYmVmb3JlLCBidXQgdXNpbmcgYSByZWZlcmVuY2UgaGVscHMgbWFrZSBjbGVhciB0
aGVyZQorICAgICAgICB3YXMgbmV2ZXIgYW55IG51bGwgY2hlY2suCisgICAgICAgICogZWRpdGlu
Zy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudCk6IERpdHRvLgorICAgICAgICAqIGZpbGVhcGkvRmls
ZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmFib3J0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpkaWRGYWlsKTogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlIG9m
IEhUTUxEb2N1bWVudC5oLgorICAgICAgICBUaGVyZSdzIHZlcnkgbGl0dGxlIGxlZnQgdGhhdCBp
cyB0cnVseSBzcGVjaWZpYyB0byBIVE1MRG9jdW1lbnQgdnMuIERvY3VtZW50LgorCisgICAgICAg
ICogaHRtbC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6
Y3JlYXRlKTogVGFrZSBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudCk6IERpdHRvLgorCisgICAgICAgICogaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp+
SFRNTEZvcm1FbGVtZW50KTogUGFzcyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOiBEaXR0by4KKworICAgICAg
ICAqIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUg
b2YgSFRNTERvY3VtZW50LmguCisKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQp
OiBQYXNzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0Q2hlY2tlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
cmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dW5yZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFj
a0lmTmVlZGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpk
aWRNb3ZlVG9OZXdEb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6aXNJblJlcXVpcmVkUmFkaW9CdXR0b25Hcm91cCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWRkVG9SYWRpb0J1dHRvbkdyb3VwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVGcm9tUmFkaW9CdXR0
b25Hcm91cCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZWdpc3RlcldpdGhEb2N1bWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3Rlcldp
dGhEb2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2VsZWN0TWVkaWFSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6YWRkVGV4dFRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpyZXN1bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcik6IERp
dHRvLgorCisgICAgICAgICogaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwOiBSZW1vdmVkIHVu
bmVlZGVkIGluY2x1ZGUgb2YgSFRNTERvY3VtZW50LmguCisKKyAgICAgICAgKiBodG1sL0hUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6fkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQpOiBQYXNzIGEgcmVmZXJlbmNlLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRl
cmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpk
aWRNb3ZlVG9OZXdEb2N1bWVudCk6IERpdHRvLgorCisgICAgICAgICogaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBIVE1MRG9jdW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOiBEaXR0by4KKworICAgICAg
ICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1
dFR5cGU6Om1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MgY29uc3QpOgorICAgICAgICBQ
YXNzIGEgcmVmZXJlbmNlLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6YmVnaW4pOiBEaXR0by4KKyAgICAgICAg
KiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2
ZW50TGlzdGVuZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZW1v
dmVBbGxFdmVudExpc3RlbmVycyk6IERpdHRvLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaWRTdGFydERyYWcpOiBV
c2UgYSByZWZlcmVuY2UuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpjcmVhdGUpOiBQYXNzIHJlZmVyZW5jZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpuZXR3b3JrUmVxdWVzdEVuZGVkKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6Y2xvc2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjphYm9ydENvbm5lY3Rpb25BdHRlbXB0KTogRGl0dG8uCisKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlIG9mIEhUTUxE
b2N1bWVudC5oLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnF1YWxpZmllc0FzVmlzdWFsbHlOb25FbXB0eSBjb25zdCk6
IFVzZSByZWZlcmVuY2UuCisKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGlu
ZSk6IFBhc3MgcmVmZXJlbmNlLgorCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0
aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKTogVGFrZSByZWZlcmVu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWVSZXNwb25zZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQpOiBEaXR0by4KKyAgICAgICAg
KiBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOiBEaXR0by4K
KworICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVudCk6IFBhc3MgcmVm
ZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL2lvcy9GcmFt
ZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbml0V2l0aFNpbXBsZUhUTUxEb2N1
bWVudCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxh
dGZvcm1DQUxheWVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpsYXllckNvbnRlbnRzRm9y
bWF0KTogQWRkIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOL0VORCBzbworICAg
ICAgICBJIGNhbiBjb250aW51ZSB0byBjb21waWxlIHdpdGggbGF0ZXN0IGhlYWRlcnMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBQYXNzIHJlZmVyZW5jZSwgc21hbGwgY29kaW5n
IHN0eWxlCisgICAgICAgIHR3ZWFrcyBhcyB3ZWxsLgorCisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVGcm9tQ2Fj
aGVBbmRJbnZhbGlkYXRlRGVwZW5kZW5jaWVzKTogUGFzcyByZWZlcmVuY2UuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjo6cmVnaXN0ZXJSZXNvdXJjZSk6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZXNvdXJjZXNDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
ZXNvdXJjZXNDYWNoZTo6cmVzb3VyY2VEZXN0cm95ZWQpOiBEaXR0by4KKworICAgICAgICAqIHN2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjphZGRUaW1lQ29udGFpbmVyKTogVGFrZSByZWZlcmVuY2UuCisgICAgICAg
IChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZVRpbWVDb250YWluZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUmVzb3Vy
Y2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRk
UGVuZGluZ1Jlc291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2VzIGNvbnN0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzUGVuZGluZ1Jlc291cmNl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVz
b3VyY2VzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxs
VGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJUYXJnZXREZXBlbmRlbmNpZXMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsRWxlbWVudFJl
ZmVyZW5jZXNGb3JUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6dW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaDogRGl0
dG8uCisKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6IFBhc3MgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rvcik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQpOiBEaXR0by4K
KyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVJbWFnZUVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UpOiBE
aXR0by4KKyAgICAgICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rv
cik6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHTVBhdGhFbGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNl
cyk6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6aW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKTogRGl0
dG8uCisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6U1ZHU1ZHRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTVkdTVkdFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rvcik6IERpdHRv
LgorICAgICAgICAqIHN2Zy9TVkdUUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUUmVmRWxlbWVudDo6ZGV0YWNoVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
VkdUUmVmRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKiBz
dmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRo
RWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRQYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UpOiBEaXR0by4KKyAg
ICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VF
bGVtZW50Ojp1cGRhdGVTaGFkb3dUcmVlKTogRGl0dG8uCisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6
Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJjZSk6IERpdHRvLgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6YWRkVGV4dE1h
dGNoTWFya2VyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp3ZWJraXREaWRFeGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyOjpub3RpZnlGaW5pc2hlZCk6IERpdHRvLgorICAgICAgICAqIHdvcmtl
cnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlcnZpY2VXb3JrZXJDb250YWluZXI6OnNjaGVkdWxlSm9iKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTZXJ2aWNlV29ya2VyQ29udGFpbmVyOjpqb2JEaWRGaW5pc2gpOiBEaXR0by4KKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnByZXBhcmVUb1NlbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6aW50ZXJuYWxBYm9ydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1M
SHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvclRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyk6IERpdHRvLgorCisgICAgICAgICog
eG1sL1hQYXRoU3RlcC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBIVE1MRG9jdW1l
bnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpub2RlTWF0Y2hlc0Jhc2ljVGVzdCk6IENo
YW5nZWQgY29kZSB0byBjYWxsIGlzSFRNTERvY3VtZW50CisgICAgICAgIHJhdGhlciB0aGFuIGlz
PEhUTUxEb2N1bWVudD4gc2luY2UgdGhpcyBpcyBub3QgYSB0eXBlIGNoZWNrIGZvciBhIGRvd25j
YXN0LAorICAgICAgICBidXQgcmF0aGVyIGEgYmVoYXZpb3JhbCBkaWZmZXJlbmNlIHRoYXQgZG9l
cyBub3QgZGVwZW5kIG9uIGFueSBvZiB0aGUgZGF0YQorICAgICAgICBzdG9yZWQgaW4gYW4gSFRN
TERvY3VtZW50IG9yIHRoZSB1c2Ugb2YgYSBkaXN0aW5jdCBDKysgY2xhc3MgZm9yIGl0LgorCisg
ICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMVFBy
b2Nlc3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKTogUGFzcyBhIHJlZmVyZW5jZS4KKwog
MjAxOS0wMS0xOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhIFBPSU5URVJfRVZFTlRTIGZlYXR1cmUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzNDA0ZGIxM2Vk
OWQxNmYxNWRlZTAxODBjN2Y3OWRhYTMwY2QwNDJkLi5iNDAwOWIwOTU5ZGJkNmMyNTI4NDYyZjQ0
MzUxNjBiYmM0Y2ExZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE5LTAxLTE1ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyBy
YXRoZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFu
ZCBtb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzUwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyOjp3aWxsRW50ZXJGdWxsU2NyZWVuKTogVXBk
YXRlIGZvciBjaGFuZ2UgdG8gdGhlCisgICAgICAgIGZ1bmN0aW9ucyBpbiBEb2N1bWVudDsgcGFz
cyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXI6OmRp
ZEVudGVyRnVsbFNjcmVlbik6IERpdHRvLCBkb24ndCBwYXNzIHRoZSBlbGVtZW50LgorICAgICAg
ICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlcjo6d2lsbEV4aXRGdWxsU2NyZWVuKTogRGl0
dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbFNj
cmVlbik6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnN0YXJ0VXNlck1lZGlhUmVxdWVzdCk6IFBhc3Mg
YSByZWZlcmVuY2UuCisgICAgICAgIChXZWJLaXQ6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlcjo6bWVkaWFDYW5TdGFydCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZU1lZGlhUmVxdWVzdEZyb21NYXBzKTog
RGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpQbHVnaW5WaWV3Ojppbml0aWFsaXplUGx1Z2luKTogRGl0dG8uCisKIDIwMTktMDEt
MTkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3ct
dXA6IGlPUzogVXBkYXRpbmcgaW5wdXQgbW9kZSBzaG91bGQgdXBkYXRlIHRoZSBzb2Z0d2FyZSBr
ZXlib2FyZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCAxYjRiYmY3NTg2M2MzNjA3YTAyMzRlOGU0
ZmVjMGZhMTFjOTRhY2VkLi4yZTI3MWM5YWI0YmVjNTdkZjYzYWI0MDJiMDJmZmY1ZTMxN2I0YmZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE5LTAxLTE1ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgcmVmZXJlbmNlcyByYXRo
ZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBt
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUw
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBMZXQgWGNvZGUgdXBkYXRlIHRo
aXMgcHJvamVjdC4KKwogMjAxOS0wMS0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZlcnQgcjIzODgxNSwgaXQgYnJva2UgV0sxIHZpZGVvIGZ1
bGxzY3JlZW4gb24gTWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNjFhOWQzNjkz
ZWNjOTMyMzVhNWRhMzhlNmZmYTNmYTI1MGM1MjQzOC4uOWExZTUzMzI5MDVmOTY2NzZjMzE1ZjU1
NmZiMTA1NjRhZDY2YTUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI0IEBACisyMDE5LTAxLTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBVc2UgcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBwb2ludGVycyBmb3IgcmVnaXN0ZXIvdW5y
ZWdpc3RlciBmdW5jdGlvbnMsIGFuZCBtb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0
ZW5lci5tbToKKyAgICAgICAgKC1bV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyIHdlYmtpdFdpbGxF
bnRlckZ1bGxTY3JlZW5dKTogVXBkYXRlIGZvciBjaGFuZ2UgdG8gdGhlCisgICAgICAgIGZ1bmN0
aW9ucyBpbiBEb2N1bWVudDsgcGFzcyBhIHJlZmVyZW5jZS4KKyAgICAgICAgKC1bV2ViS2l0RnVs
bFNjcmVlbkxpc3RlbmVyIHdlYmtpdERpZEVudGVyRnVsbFNjcmVlbl0pOiBEaXR0bywgZG9uJ3Qg
cGFzcyB0aGUgZWxlbWVudC4KKyAgICAgICAgKC1bV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyIHdl
YmtpdFdpbGxFeGl0RnVsbFNjcmVlbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViS2l0RnVsbFNj
cmVlbkxpc3RlbmVyIHdlYmtpdERpZEV4aXRGdWxsU2NyZWVuXSk6IERpdHRvLgorICAgICAgICAq
IFdlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyIGVudGVyRnVsbFNjcmVlbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyIGZpbmlzaGVkRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgZXhpdEZ1bGxTY3Jl
ZW5dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGZpbmlzaGVk
RXhpdEZ1bGxTY3JlZW5BbmltYXRpb246XSk6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NvbW1vbkluaXRp
YWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6XSk6IFBhc3MgYSByZWZlcmVuY2UuCisK
IDIwMTktMDEtMTkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgYSBQT0lOVEVSX0VWRU5UUyBmZWF0dXJlIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZwppbmRleCAzYWNiNjdmNWMzNjVkZWQzMDIzM2RjYzNjYmRlNDZiYmFkMGI4MmExLi5kNDU0
YjUyOTcwNTFjYWNkMDgyMzQwMDQwZTIwYzdlMGQ2OGEwOWM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMDEtMTUgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50
ZXJzIGZvciByZWdpc3Rlci91bnJlZ2lzdGVyIGZ1bmN0aW9ucywgYW5kIG1vcmUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTAyOAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0T3JBZGRUb1Vuc3Rh
cnRlZExpc3QpOiBQYXNzIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6flBsdWdpblZpZXcpOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAg
KFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRW50ZXJGdWxsU2NyZWVuKTogRGl0dG8uCisg
ICAgICAgIChXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRW50ZXJGdWxsU2NyZWVuKTogRGl0
dG8uCisgICAgICAgIChXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRXhpdEZ1bGxTY3JlZW4p
OiBEaXR0by4KKwogMjAxOS0wMS0xNyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dpbl1bSGlnaERQSV0gUmVwYWludCBnbGl0Y2hlcyB3aGVuIHNjcm9s
bGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQ
YXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvQXBwbGVQYXlT
ZXNzaW9uLmNwcAppbmRleCA3NGY2N2NjZmJiNGJhMDM3MWRlZDQ5MTM2OTBmYjE5NjlmNTUxMGRm
Li4wNmMwZmFlNjdmMzBlNjg3NjYwOGIxZjczZGFiYzk0YmM0ZTY2YTMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L0FwcGxlUGF5U2Vzc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9BcHBsZVBheVNlc3Npb24uY3BwCkBAIC01
NDUsNyArNTQ1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlTZXNzaW9uOjpiZWdpbigp
CiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2ZTsKIAotICAgIHNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTY1Miw3ICs2NTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlUGF5bWVudChBcHBsZVBheVBheW1lbnRBdXRob3JpemF0aW9uUgogICAgIH0K
IAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOwotICAgIHVuc2V0UGVuZGluZ0FjdGl2
aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgIHJldHVy
biB7IH07CiB9CkBAIC0xMDQ3LDcgKzEwNDcsNyBAQCBib29sIEFwcGxlUGF5U2Vzc2lvbjo6aXNG
aW5hbFN0YXRlKCkgY29uc3QKIHZvaWQgQXBwbGVQYXlTZXNzaW9uOjpkaWRSZWFjaEZpbmFsU3Rh
dGUoKQogewogICAgIEFTU0VSVChpc0ZpbmFsU3RhdGUoKSk7Ci0gICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkodGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDE5YmExOTQ4YmVk
YmE0YTgzNTgxNzRkZjFjODQ4ZmFjMGVlMGU2ZmQuLjQxZmQ2MmQ2N2NlN2NlMzMzMDY3MDE5YzQ5
ZWZiZDBmMDYxYWE3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUv
RE9NQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUu
Y3BwCkBAIC00MzEsNyArNDMxLDcgQEAgdm9pZCBET01DYWNoZTo6a2V5cyhPcHRpb25hbDxSZXF1
ZXN0SW5mbz4mJiBpbmZvLCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIEsKIAogdm9pZCBE
T01DYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNvbnN0IFVSTCYgdXJsLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoT3B0aW9uYWw8RXhjZXB0aW9uPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICBzZXRQZW5kaW5n
QWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAgIFVS
TCByZXRyaWV2ZVVSTCA9IHVybDsKICAgICByZXRyaWV2ZVVSTC5yZW1vdmVRdWVyeUFuZEZyYWdt
ZW50SWRlbnRpZmllcigpOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgRE9NQ2FjaGU6OnJldHJp
ZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVybCwgV1RGOjpGdW5jdGlvbjx2b2lkKE9wdGlvbmFsPEV4
Y2VwCiAgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3JkcyhXVEZNb3ZlKHJlc3VsdC52YWx1ZSgp
KSk7CiAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOwogICAgICAgICB9Ci0gICAg
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rp
dml0eSgqdGhpcyk7CiAgICAgfSk7CiB9CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQCBWZWN0b3I8Q2Fj
aGVTdG9yYWdlUmVjb3JkPiBET01DYWNoZTo6cXVlcnlDYWNoZVdpdGhUYXJnZXRTdG9yYWdlKGNv
bnN0IEZldGNoUmVxdQogCiB2b2lkIERPTUNhY2hlOjpiYXRjaERlbGV0ZU9wZXJhdGlvbihjb25z
dCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgV1RG
OjpGdW5jdGlvbjx2b2lkKEV4Y2VwdGlvbk9yPGJvb2w+JiYpPiYmIGNhbGxiYWNrKQogewotICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogICAgIG1fY29ubmVjdGlvbi0+YmF0Y2hEZWxldGVPcGVyYXRpb24obV9pZGVudGlmaWVyLCBy
ZXF1ZXN0LmludGVybmFsUmVxdWVzdCgpLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhpcywgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oUmVjb3JkSWRlbnRpZmllcnNPckVycm9yJiYgcmVzdWx0
KSB7CiAgICAgICAgIGlmICghbV9pc1N0b3BwZWQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0
Lmhhc192YWx1ZSgpKQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoRGVs
ZXRlT3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVRdWVyeU9wdGlv
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2FsbGJhY2soIXJlc3VsdC52YWx1
ZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIH0KLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0K
IApAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKGNv
bnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYgcmVzCiAKIHZvaWQgRE9N
Q2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgV1RGOjpG
dW5jdGlvbjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIHNl
dFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwog
ICAgIG1fY29ubmVjdGlvbi0+YmF0Y2hQdXRPcGVyYXRpb24obV9pZGVudGlmaWVyLCBXVEZNb3Zl
KHJlY29yZHMpLCBbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oUmVjb3JkSWRl
bnRpZmllcnNPckVycm9yJiYgcmVzdWx0KSB7CiAgICAgICAgIGlmICghbV9pc1N0b3BwZWQpIHsK
ICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc192YWx1ZSgpKQpAQCAtNTM1LDcgKzUzNSw3IEBA
IHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3Jk
cywgV1RGOjpGdW5jdGlvbjx2b2lkKEV4CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soeyB9KTsKICAgICAgICAgfQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0pOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3Rv
cmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlU3RvcmFnZS5j
cHAKaW5kZXggODcwNjJkMTJiNzExMWJiNjc4NzM0ZmJhMjQwMWQyZjVkNjcyYjMwMS4uMzU5OTE4
ZDNkMTBkZjJhZjk2OWYwMTVkMTFhNzllYWFkOGZkY2Q1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVTdG9yYWdlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBA
IHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8mJiBpbmZv
LCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiAgICAgICAgIHN0YXJ0U2VxdWVudGlhbE1hdGNoKFdURjo6bWFwKG1f
Y2FjaGVzLCBjb3B5Q2FjaGUpLCBXVEZNb3ZlKGluZm8pLCBXVEZNb3ZlKG9wdGlvbnMpLCBbdGhp
cywgcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKEV4Y2VwdGlvbk9yPEZldGNoUmVzcG9uc2Uq
PiYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoIW1faXNTdG9wcGVkKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpAQCAtMTEzLDcgKzEx
Myw3IEBAIHZvaWQgRE9NQ2FjaGVTdG9yYWdlOjptYXRjaChET01DYWNoZTo6UmVxdWVzdEluZm8m
JiBpbmZvLCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wCiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxGZXRjaFJlc3Bv
bnNlPj4oKnJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgdW5zZXRQZW5kaW5nQWN0
aXZpdHkoKnRoaXMpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKaW5kZXggMDE3YTRmNTE5Yjg1MjI2
MTQ0YTJkNTBiMmJlNDVlOGZjNGQ2MjA0NC4uZTkzMjYzNjNkNzA1MTUyMTFiMzRiMmRjMTlkMjY5
NzM3N2IyZDkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEJvZHlPd25lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHlPd25lci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEZldGNoQm9keU93bmVyOjpsb2Fk
QmxvYihjb25zdCBCbG9iJiBibG9iLCBGZXRjaEJvZHlDb25zdW1lciogY29uc3VtZXIpCiAgICAg
ICAgIG1fYmxvYkxvYWRlciA9IFdURjo6bnVsbG9wdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0
aGlzKTsKIH0KIAogdm9pZCBGZXRjaEJvZHlPd25lcjo6ZmluaXNoQmxvYkxvYWRpbmcoKQpAQCAt
MjU2LDcgKzI1Niw3IEBAIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmZpbmlzaEJsb2JMb2FkaW5nKCkK
ICAgICBBU1NFUlQobV9ibG9iTG9hZGVyKTsKIAogICAgIG1fYmxvYkxvYWRlciA9IFdURjo6bnVs
bG9wdDsKLSAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRmV0Y2hCb2R5T3duZXI6OmJsb2JMb2FkaW5nU3Vj
Y2VlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5U291
cmNlLmNwcAppbmRleCA2Njk5ZWY0ZTQ0NTI4NTQ4ZWJmYTBjYTQ0MTZmOGNkNTk1OGMyMjk1Li5h
OGEyYTQxN2ExMjc1YWE4MWExNTRlYjg1NzM3NWNhNTM5NmYyMmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlTb3VyY2UuY3BwCkBAIC00MiwxNCArNDIs
MTQgQEAgdm9pZCBGZXRjaEJvZHlTb3VyY2U6OnNldEFjdGl2ZSgpCiB7CiAgICAgQVNTRVJUKG1f
Ym9keU93bmVyKTsKICAgICBpZiAobV9ib2R5T3duZXIpCi0gICAgICAgIG1fYm9keU93bmVyLT5z
ZXRQZW5kaW5nQWN0aXZpdHkobV9ib2R5T3duZXIpOworICAgICAgICBtX2JvZHlPd25lci0+c2V0
UGVuZGluZ0FjdGl2aXR5KCptX2JvZHlPd25lcik7CiB9CiAKIHZvaWQgRmV0Y2hCb2R5U291cmNl
OjpzZXRJbmFjdGl2ZSgpCiB7CiAgICAgQVNTRVJUKG1fYm9keU93bmVyKTsKICAgICBpZiAobV9i
b2R5T3duZXIpCi0gICAgICAgIG1fYm9keU93bmVyLT51bnNldFBlbmRpbmdBY3Rpdml0eShtX2Jv
ZHlPd25lcik7CisgICAgICAgIG1fYm9keU93bmVyLT51bnNldFBlbmRpbmdBY3Rpdml0eSgqbV9i
b2R5T3duZXIpOwogfQogCiB2b2lkIEZldGNoQm9keVNvdXJjZTo6ZG9TdGFydCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmNwcAppbmRleCAzM2Q5YTM0
MGUzNTgwYjE2MzY2YmU5YmNmYzJlZDU3ZTZmMTE2MWYzLi5lMmE0NWE0ZTMzNDdiMjc5ZTUxNTY2
NzdkY2YyODY3ZDRjNmRlNGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoUmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hSZXNwb25zZS5jcHAKQEAgLTMxNCwxMiArMzE0LDEyIEBAIEZldGNoUmVzcG9uc2U6OkJv
ZHlMb2FkZXI6OkJvZHlMb2FkZXIoRmV0Y2hSZXNwb25zZSYgcmVzcG9uc2UsIE5vdGlmaWNhdGlv
bkNhbGxiCiAgICAgOiBtX3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV9yZXNwb25zZUNhbGxi
YWNrKFdURk1vdmUocmVzcG9uc2VDYWxsYmFjaykpCiB7Ci0gICAgbV9yZXNwb25zZS5zZXRQZW5k
aW5nQWN0aXZpdHkoJm1fcmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2Uuc2V0UGVuZGluZ0FjdGl2
aXR5KG1fcmVzcG9uc2UpOwogfQogCiBGZXRjaFJlc3BvbnNlOjpCb2R5TG9hZGVyOjp+Qm9keUxv
YWRlcigpCiB7Ci0gICAgbV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eSgmbV9yZXNwb25z
ZSk7CisgICAgbV9yZXNwb25zZS51bnNldFBlbmRpbmdBY3Rpdml0eShtX3Jlc3BvbnNlKTsKIH0K
IAogc3RhdGljIHVpbnQ2NF90IG5leHRPcGFxdWVMb2FkSWRlbnRpZmllciB7IDAgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5k
ZXggNTUzOTk0NjM3MTRmMTM5N2U1YmI5NDZjZjJkNDI0MmE0ZTZiOTY4OC4uMzk4NjE5ODk5MmFl
M2VkNTAxMTk3MmUxMDkxNWEyZjVjODI4NWYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTEzMywxMiArMTMzLDEyIEBA
IHZvaWQgTWVkaWFTb3VyY2U6OnNldFByaXZhdGVBbmRPcGVuKFJlZjxNZWRpYVNvdXJjZVByaXZh
dGU+JiYgbWVkaWFTb3VyY2VQcml2YXRlCiAKIHZvaWQgTWVkaWFTb3VyY2U6OmFkZGVkVG9SZWdp
c3RyeSgpCiB7Ci0gICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0
cnkoKQogewotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhU291cmNlOjpkdXJhdGlvbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uY3BwCmluZGV4IDhhYzE0NTc5NTBhNzkxODlkM2FjZDJkMDcwNTY2YTIxODdiY2ZhZTEu
LjE4ZjI1ODdlNmJiZGU0ZWI2YWM3YWUzN2IxMGM3MDQ1OTAwZmUyMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCkBAIC0xMjMs
NyArMTIzLDcgQEAgTWVkaWFTdHJlYW06On5NZWRpYVN0cmVhbSgpCiAgICAgICAgIHRyYWNrLT5y
ZW1vdmVPYnNlcnZlcigqdGhpcyk7CiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMt
PmRvY3VtZW50KCkpIHsKICAgICAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0
KQotICAgICAgICAgICAgZG9jdW1lbnQtPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlz
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRo
aXMpOwogICAgIH0KIH0KIApAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgTWVkaWFTdHJlYW06OnN0
YXJ0UHJvZHVjaW5nRGF0YSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9pc1dh
aXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQgPSB0cnVlOwotICAgICAgICBkb2N1bWVudC0+YWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5T
dGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5j
cHAKaW5kZXggZDgzYzViNzRlMTAyMWRhZjEwZGNhNDQ2MDU3M2ZjMThjYTRkMWVhNC4uNTA2YzE0
NTk2MzgwM2EyY2VlYjhhZjgyYmMyYTE3NWQzYmI1NDI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCkBAIC02
MSw3ICs2MSw3IEBAIE1lZGlhU3RyZWFtVHJhY2s6Ok1lZGlhU3RyZWFtVHJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgUmVmPE1lZGlhU3RyCiAgICAgbV9wcml2YXRlLT5hZGRP
YnNlcnZlcigqdGhpcyk7CiAKICAgICBpZiAoYXV0byBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50
KCkpCi0gICAgICAgIGRvY3VtZW50LT5hZGRBdWRpb1Byb2R1Y2VyKHRoaXMpOworICAgICAgICBk
b2N1bWVudC0+YWRkQXVkaW9Qcm9kdWNlcigqdGhpcyk7CiB9CiAKIE1lZGlhU3RyZWFtVHJhY2s6
On5NZWRpYVN0cmVhbVRyYWNrKCkKQEAgLTY5LDcgKzY5LDcgQEAgTWVkaWFTdHJlYW1UcmFjazo6
fk1lZGlhU3RyZWFtVHJhY2soKQogICAgIG1fcHJpdmF0ZS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMp
OwogCiAgICAgaWYgKGF1dG8gZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICBk
b2N1bWVudC0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQtPnJl
bW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlh
U3RyZWFtVHJhY2s6OmtpbmQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAppbmRleCA5MGQxYzhhYzFiMzg0ZTdl
YmI4MDkxZWE0NTc3OWVhZTAyNDJiYjBjLi5lMDI3YmI1OTMxOTlhZDkwYWI0YmYzMmExZTg5Njhm
NGM0NTRhNTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RhdGFDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcApAQCAtNTgsNyArNTgsNyBAQCBSZWY8UlRDRGF0YUNoYW5u
ZWw+IFJUQ0RhdGFDaGFubmVsOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgc3RkOgogICAgIGF1dG8gY2hhbm5lbCA9IGFkb3B0UmVmKCpuZXcgUlRDRGF0YUNoYW5uZWwo
Y29udGV4dCwgV1RGTW92ZShoYW5kbGVyKSwgV1RGTW92ZShsYWJlbCksIFdURk1vdmUob3B0aW9u
cykpKTsKICAgICBjaGFubmVsLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICBjaGFubmVsLT5tX2hh
bmRsZXItPnNldENsaWVudChjaGFubmVsLmdldCgpKTsKLSAgICBjaGFubmVsLT5zZXRQZW5kaW5n
QWN0aXZpdHkoY2hhbm5lbC5wdHIoKSk7CisgICAgY2hhbm5lbC0+c2V0UGVuZGluZ0FjdGl2aXR5
KGNoYW5uZWwuZ2V0KCkpOwogICAgIHJldHVybiBjaGFubmVsOwogfQogCkBAIC0xNTksNyArMTU5
LDcgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6Y2xvc2UoKQogCiAgICAgbV9oYW5kbGVyLT5jbG9z
ZSgpOwogICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogfQogCiB2b2lkIFJUQ0Rh
dGFDaGFubmVsOjpkaWRDaGFuZ2VSZWFkeVN0YXRlKFJUQ0RhdGFDaGFubmVsU3RhdGUgbmV3U3Rh
dGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDRlNGYwNmM4MTQyMmExMjlhNGYyZDM3ODhhNWE5Nzc1
NzgwMDU0ODYuLjMzOGRjMWE5YTQwZDgxMjRkYTY4YmQ0MGVhZDRlOTAzOWE0ZTcyM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwCkBAIC02NCw3ICs2NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBQZWVyQ29ubmVj
dGlvbjsKIAogUmVmPFJUQ1BlZXJDb25uZWN0aW9uPiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgUmVmPFJUQ1BlZXJDb25u
ZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IGFkb3B0UmVmKCpuZXcgUlRDUGVlckNvbm5lY3Rpb24o
Y29udGV4dCkpOworICAgIGF1dG8gcGVlckNvbm5lY3Rpb24gPSBhZG9wdFJlZigqbmV3IFJUQ1Bl
ZXJDb25uZWN0aW9uKGNvbnRleHQpKTsKICAgICBwZWVyQ29ubmVjdGlvbi0+c3VzcGVuZElmTmVl
ZGVkKCk7CiAgICAgLy8gUlRDUGVlckNvbm5lY3Rpb24gbWF5IHNlbmQgZXZlbnRzIGF0IGFib3V0
IGFueSB0aW1lIGR1cmluZyBpdHMgbGlmZXRpbWUuCiAgICAgLy8gTGV0J3MgbWFrZSBpdCB1bmNv
bGxlY3RhYmxlIHVudGlsIHRoZSBwYyBpcyBjbG9zZWQgYnkgSlMgb3IgdGhlIHBhZ2Ugc3RvcHMg
aXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3Rp
ZmljYXRpb24uY3BwCmluZGV4IDE5NThkYjIxY2JmOWIxZTg2ZTIyMTYzNzJlOWFiNDBiNzZmM2Zm
NTMuLmNjNmFhZTI5ZTk4YzgyZDVjM2Q1MzVlZTUxNjliMjU3OGJkYTE4OTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3Bw
CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgTm90aWZpY2F0aW9uOjpzaG93KCkKICAgICB9CiAgICAg
aWYgKGNsaWVudC5zaG93KHRoaXMpKSB7CiAgICAgICAgIG1fc3RhdGUgPSBTaG93aW5nOwotICAg
ICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0
eSgqdGhpcyk7CiAgICAgfQogfQogCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBOb3RpZmljYXRp
b246OmZpbmFsaXplKCkKICAgICBpZiAobV9zdGF0ZSA9PSBDbG9zZWQpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX3N0YXRlID0gQ2xvc2VkOwotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMp
OworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBOb3RpZmljYXRp
b246OmRpc3BhdGNoU2hvd0V2ZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAKaW5kZXggMjdlNTZj
NGM2Yjk0N2FlYjgyNDU5ZWQxM2YzM2I1ODFhM2QzYTBhNC4uMDU1YmZmNWYxZWJhYTFiMmJlNWE3
YzQ0MGVlMDlmM2IxNzhiOWMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5jcHAKQEAgLTk5LDcgKzk5
LDcgQEAgdm9pZCBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6dXBkYXRlUHVsbFN0YXR1cygpCiAg
ICAgICAgIC8vIFdoZW4gYW4gQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUgaXMgY29ubmVjdGVkIHRv
IGEgZG93bnN0cmVhbSBub2RlLCBpdCB3aWxsIGdldCBwdWxsZWQgYnkgdGhlCiAgICAgICAgIC8v
IGRvd25zdHJlYW0gbm9kZSwgdGh1cyByZW1vdmUgaXQgZnJvbSB0aGUgY29udGV4dCdzIGF1dG9t
YXRpYyBwdWxsIGxpc3QuCiAgICAgICAgIGlmIChtX25lZWRBdXRvbWF0aWNQdWxsKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVsbE5vZGUodGhpcyk7CisgICAgICAg
ICAgICBjb250ZXh0KCkucmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoKnRoaXMpOwogICAgICAgICAg
ICAgbV9uZWVkQXV0b21hdGljUHVsbCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
QEAgLTEwNywxMSArMTA3LDExIEBAIHZvaWQgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGU6OnVwZGF0
ZVB1bGxTdGF0dXMoKQogICAgICAgICBpZiAobnVtYmVyT2ZJbnB1dENvbm5lY3Rpb25zICYmICFt
X25lZWRBdXRvbWF0aWNQdWxsKSB7CiAgICAgICAgICAgICAvLyBXaGVuIGFuIEF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJlYW0gbm9kZSB3aGls
ZSBzdGlsbCBjb25uZWN0ZWQgZnJvbQogICAgICAgICAgICAgLy8gdXBzdHJlYW0gbm9kZShzKSwg
YWRkIGl0IHRvIHRoZSBjb250ZXh0J3MgYXV0b21hdGljIHB1bGwgbGlzdC4KLSAgICAgICAgICAg
IGNvbnRleHQoKS5hZGRBdXRvbWF0aWNQdWxsTm9kZSh0aGlzKTsKKyAgICAgICAgICAgIGNvbnRl
eHQoKS5hZGRBdXRvbWF0aWNQdWxsTm9kZSgqdGhpcyk7CiAgICAgICAgICAgICBtX25lZWRBdXRv
bWF0aWNQdWxsID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICghbnVtYmVyT2ZJbnB1dENvbm5l
Y3Rpb25zICYmIG1fbmVlZEF1dG9tYXRpY1B1bGwpIHsKICAgICAgICAgICAgIC8vIFRoZSBBdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZSBpcyBjb25uZWN0ZWQgdG8gbm90aGluZywgcmVtb3ZlIGl0IGZy
b20gdGhlIGNvbnRleHQncyBhdXRvbWF0aWMgcHVsbCBsaXN0LgotICAgICAgICAgICAgY29udGV4
dCgpLnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKHRoaXMpOworICAgICAgICAgICAgY29udGV4dCgp
LnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKCp0aGlzKTsKICAgICAgICAgICAgIG1fbmVlZEF1dG9t
YXRpY1B1bGwgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCBkOTQwZGMwZjdiNTlhMTE4
NDFlMTE1MzA2ODYwZWNiZDgzMjAxN2IwLi5kOGRmM2Y1MGE5MTg2NTQ4YWVhNjdjYTBhN2U4M2Jk
NTlkMjIzODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwCkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmNvbnN0
cnVjdENvbW1vbigpCiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMgQXVkaW9Db250ZXh0IG11
c3QgZGllIG9ubHkgYWZ0ZXIgcGFnZSBuYXZpZ2F0ZS4KICAgICAvLyBMZXRzIG1hcmsgaXQgYXMg
QWN0aXZlRE9NT2JqZWN0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbmQgdW5tYXJrIGl0IGluIGNs
ZWFyIG1ldGhvZC4KLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKIAogICAgIEZGVEZyYW1lOjppbml0aWFsaXplKCk7CiAgICAgCkBA
IC0yMDcsOCArMjA3LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKICAg
ICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICBpZiAoIWlz
T2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkQXVkaW9Qcm9k
dWNlcih0aGlzKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yVmlzaWJpbGl0
eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFk
ZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJG
b3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAgICAgICAgICAg
Ly8gVGhpcyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBw
cm92aWRlSW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVu
ZGVyIGF1ZGlvLgogICAgICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNh
bGxlZCwgYSBwb3J0aW9uIG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNh
bGwgdGhpcyB0aW1lIHBlcmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCkBAIC0yMzUsNyArMjM1LDcg
QEAgdm9pZCBBdWRpb0NvbnRleHQ6OmNsZWFyKCkKICAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxl
dGUuc2l6ZSgpKTsKIAogICAgIC8vIEl0IHdhcyBzZXQgaW4gY29uc3RydWN0Q29tbW9uLgotICAg
IHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0
aGlzKTsKIH0KIAogdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCkBAIC0yNTIsOCAr
MjUyLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlv
VGhyZWFkRmluaXNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsK
LSAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKLSAgICAgICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3Mo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUF1ZGlvUHJvZHVjZXIoKnRoaXMpOwor
ICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENh
bGxiYWNrcygqdGhpcyk7CiAKICAgICAgICAgQVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQp
OwogICAgICAgICAtLXNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CkBAIC04MTYsMTQgKzgxNiwxNCBA
QCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogICAgIG1f
ZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6
Om1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqIG5vZGUpCit2b2lkIEF1ZGlvQ29udGV4dDo6bWFy
a0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVy
KCkpOwogCiAgICAgaWYgKGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKQotICAgICAgICBtX25vZGVz
VG9EZWxldGUuYXBwZW5kKG5vZGUpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZu
b2RlKTsKICAgICBlbHNlCi0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQo
bm9kZSk7CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOwog
CiAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUg
dGhlIG5vZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAogICAgIC8vIHNpbmNlIGFsbCBjb25u
ZWN0aW9ucyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhh
bmRsZVBvc3RSZW5kZXJUYXNrcygpCkBAIC05MjAsMTkgKzkyMCwxOSBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6aGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCkKICAgICBtX2RpcnR5QXVkaW9Ob2Rl
T3V0cHV0cy5jbGVhcigpOwogfQogCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVs
bE5vZGUoQXVkaW9Ob2RlKiBub2RlKQordm9pZCBBdWRpb0NvbnRleHQ6OmFkZEF1dG9tYXRpY1B1
bGxOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwog
Ci0gICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLmFkZChub2RlKS5pc05ld0VudHJ5KQorICAg
IGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCiAgICAgICAg
IG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKIH0KIAotdm9pZCBBdWRp
b0NvbnRleHQ6OnJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSogbm9kZSkKK3ZvaWQg
QXVkaW9Db250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCiB7
CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKIAotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxO
b2Rlcy5yZW1vdmUobm9kZSkpCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgm
bm9kZSkpCiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsK
IH0KIApAQCAtOTg5LDcgKzk4OSw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsQmVnaW5QbGF5
YmFjaygpCiAgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAg
ICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2Ug
JiYgIXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRk
TWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRk
TWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4
dDo6UmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKQEAgLTEwMDks
NyArMTAwOSw3IEBAIGJvb2wgQXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFjaygpCiAgICAg
aWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKICAgICAgICAgUGFnZSog
cGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPmNh
blN0YXJ0TWVkaWEoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFy
dExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFy
dExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBh
Z2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDRlZjBiNGRkZTAxNzU0ZmQ3YmQ2
ODkyMmE0NTVkOTM2N2VjYjg2ZDIuLjQ5ZDM1NjYxMTg4YTJkNGNmYjM1MDVlYjhkYmMxY2ZlZDI1
OTI2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaApAQCAtMTU2LDEzICsxNTYsMTMgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWZGaW5pc2hl
ZFNvdXJjZU5vZGVzKCk7CiAKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxldGlvbiBvZiBhbGwgbWFy
a2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5kZXIgcXVhbnR1bS4KLSAg
ICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUqKTsKKyAgICB2b2lkIG1hcmtGb3JEZWxl
dGlvbihBdWRpb05vZGUmKTsKICAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCk7CiAKICAgICAv
LyBBdWRpb0NvbnRleHQgY2FuIHB1bGwgbm9kZShzKSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVy
IHF1YW50dW0gZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYW55IGRvd25zdHJl
YW0gbm9kZXMuCiAgICAgLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIGNhbGxlZCBieSB0aGUgbm9k
ZXMgd2hvIHdhbnQgdG8gYWRkL3JlbW92ZSB0aGVtc2VsdmVzIGludG8vZnJvbSB0aGUgYXV0b21h
dGljIHB1bGwgbGlzdHMuCi0gICAgdm9pZCBhZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUq
KTsKLSAgICB2b2lkIHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSopOworICAgIHZv
aWQgYWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJik7CisgICAgdm9pZCByZW1vdmVBdXRv
bWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKTsKIAogICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUg
aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUg
cHVsbGVkIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgogICAg
IHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcAppbmRleCBh
ZDEzNTFmNDRhZWVmMzQ3YzNlZGIwZDVkYTViZTE3MTEzZTc5N2ZhLi42MTM5ZmRkODViMTY3YTM3
MDJhMTYxZTBmZjI0MGY2YzJhMDFkODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGUuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBBdWRpb05vZGU6
OmZpbmlzaERlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5l
Y3RlZCB0by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBv
ZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgotICAgICAg
ICAgICAgICAgIGNvbnRleHQoKS5tYXJrRm9yRGVsZXRpb24odGhpcyk7CisgICAgICAgICAgICAg
ICAgY29udGV4dCgpLm1hcmtGb3JEZWxldGlvbigqdGhpcyk7CiAgICAgICAgICAgICAgICAgbV9p
c01hcmtlZEZvckRlbGV0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChyZWZUeXBlID09IFJlZlR5cGVDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCAyNmQzOGZmMWI2ZDIzMTI2Yzhk
ZDc2ZWI3ZDU2YWE1NTQ0MWY4ZTMwLi41MDI3ZGI2ZjM1MzBmNzFhYmM2Mzg2OTEzNzc5ZTE4ODI2
Y2JjMWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcApAQCAtMjg3LDggKzI4Nyw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6
Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByCiAgICAg
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKICAg
ICAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKS5taXhlZENvbnRlbnRDaGVja2VyKCkuY2FuUnVu
SW5zZWN1cmVDb250ZW50KGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIG1fdXJsKSkgewotICAg
ICAgICAgICAgLy8gQmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gQWN0aXZlRE9NT2JqZWN0Ojp1bnNl
dFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tldDo6c3RvcCgpLgotICAgICAgICAgICAgQWN0
aXZlRE9NT2JqZWN0OjpzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgICAgICAvLyBC
YWxhbmNlZCBieSB0aGUgY2FsbCB0byB1bnNldFBlbmRpbmdBY3Rpdml0eSgpIGluIFdlYlNvY2tl
dDo6c3RvcCgpLgorICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIAogICAg
ICAgICAgICAgLy8gV2UgbXVzdCBibG9jayB0aGlzIGNvbm5lY3Rpb24uIEluc3RlYWQgb2YgdGhy
b3dpbmcgYW4gZXhjZXB0aW9uLCB3ZSBpbmRpY2F0ZSB0aGlzCiAgICAgICAgICAgICAvLyB1c2lu
ZyB0aGUgZXJyb3IgZXZlbnQuIEJ1dCBzaW5jZSB0aGlzIGNvZGUgZXhlY3V0ZXMgYXMgcGFydCBv
ZiB0aGUgV2ViU29ja2V0J3MKQEAgLTMxOCw3ICszMTgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwcgogICAgICAgICBwcm90b2NvbFN0cmluZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3Vi
cHJvdG9jb2xTZXBhcmF0b3IoKSk7CiAKICAgICBtX2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHBy
b3RvY29sU3RyaW5nKTsKLSAgICBBY3RpdmVET01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsK
IH0KQEAgLTU0Nyw3ICs1NDcsNyBAQCB2b2lkIFdlYlNvY2tldDo6c3RvcCgpCiAgICAgbV9wZW5k
aW5nRXZlbnRzLmNsZWFyKCk7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CiAgICAgaWYg
KHBlbmRpbmcpCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogY29uc3Qg
Y2hhciogV2ViU29ja2V0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTYzMSw3ICs2
MzEsNyBAQCB2b2lkIFdlYlNvY2tldDo6ZGlkQ2xvc2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVy
ZWRBbW91bnQsIENsb3NpbmdIYW5kc2hha2VDb21wbAogICAgICAgICBtX2NoYW5uZWwgPSBudWxs
cHRyOwogICAgIH0KICAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2
ZURPTU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVu
ZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBXZWJTb2NrZXQ6OmRpZFVwZ3JhZGVVUkwo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDZmZWRjMjIyNGY4YjE1ZjI1ZDAxMzM4NzEwYTA2OTYxZjYzNTY0ZDguLjI1ZjdkZGI1
OGM1MzVjMmNkYmYxODNkZTQ0ZmI0ZDgwNzY0YzNhZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2OTUyLDEyICsxNjk1Miwx
MiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBNTg0RkUyNTE4
NjM3REFCMDA4NDNCMTAgLyogQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuaCAqLywKKwkJCQk5
MTc1Q0U1OTIxRTI4MUVDMDBERjJDMjggLyogSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcCAqLywKKwkJCQk5MTc1Q0U1QTIxRTI4MUVEMDBERjJDMjggLyogSW5zcGVjdG9yQXVk
aXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmggKi8sCisJCQkJOTE3NUNFNTcyMUUyODFFQjAwREYyQzI4
IC8qIEluc3BlY3RvckF1ZGl0RE9NT2JqZWN0LmNwcCAqLywKKwkJCQk5MTc1Q0U1ODIxRTI4MUVD
MDBERjJDMjggLyogSW5zcGVjdG9yQXVkaXRET01PYmplY3QuaCAqLywKIAkJCQlBNTg0RkUzOTE4
NjRFMkQ4MDA4NDNCMTAgLyogSlNDb21tYW5kTGluZUFQSUhvc3QuY3BwICovLAogCQkJCUE1ODRG
RTNBMTg2NEUyRDgwMDg0M0IxMCAvKiBKU0NvbW1hbmRMaW5lQVBJSG9zdC5oICovLAotCQkJCTkx
NzVDRTU5MjFFMjgxRUMwMERGMkMyOCAvKiBKU0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAgKi8sCi0JCQkJOTE3NUNFNUEyMUUyODFFRDAwREYyQzI4IC8qIEpTSW5zcGVjdG9y
QXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmggKi8sCi0JCQkJOTE3NUNFNTcyMUUyODFFQjAwREYy
QzI4IC8qIEpTSW5zcGVjdG9yQXVkaXRET01PYmplY3QuY3BwICovLAotCQkJCTkxNzVDRTU4MjFF
MjgxRUMwMERGMkMyOCAvKiBKU0luc3BlY3RvckF1ZGl0RE9NT2JqZWN0LmggKi8sCiAJCQkJN0Ew
RTc3MUMxMEMwMERCMTAwQTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywK
IAkJCQk3QTBFNzcxRDEwQzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aCAqLywKIAkJCSk7CkBAIC0yOTU3OSw3ICsyOTU3OSw5IEBACiAJCQkJOTMzMDlERjIwOTlFNjQ5
MjAwNTZFNTgxIC8qIEluc2VydFRleHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUI4
MUNBNzFGQUE0NDYyMDAzN0QxRTYgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MTc1Q0U1RTIxRTI4MUVEMDBERjJDMjcgLyogSW5zcGVjdG9y
QXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5MTc1Q0U1RTIx
RTI4MUVEMDBERjJDMjggLyogSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MTc1Q0U1QzIxRTI4MUVEMDBERjJDMjcgLyogSW5zcGVjdG9yQXVk
aXRET01PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTkxNzVDRTVDMjFFMjgxRUQwMERGMkMy
OCAvKiBJbnNwZWN0b3JBdWRpdERPTU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkEyMkU4
NzAxRjEwNDE4NjAwRjU0NkMzIC8qIEluc3BlY3RvckNhbnZhcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVCODFDQTgxRkFBNDQ2MjAwMzdEMUU2IC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQzgxQjk1QzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDEyLDggKzMwMDE0LDYgQEAKIAkJCQlBNzc5Nzky
OTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
MTkzQzAxMUY1RTExMDUwMDg4RjNFNiAvKiBKU0ltYWdlU21vb3RoaW5nUXVhbGl0eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg2NjI5RDMwOURBMkI0ODAwOTYzM0E2IC8qIEpTSW5wdXRFdmVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTE3NUNFNUUyMUUyODFFRDAwREYyQzI4IC8qIEpTSW5zcGVj
dG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5MTc1Q0U1
QzIxRTI4MUVEMDBERjJDMjggLyogSlNJbnNwZWN0b3JBdWRpdERPTU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0EwRTc3MUYxMEMwMERCMTAwQTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ3MTBFNjFEQjcwMEM3MDAyRENFQzMgLyog
SlNJbnRlcnNlY3Rpb25PYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4QjQ1NzYxREM0
MURCQTAwNDQzQzNGIC8qIEpTSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMjQ0NSw2ICszMjQ0NSw3IEBACiAJCQkJU3BhbmlzaCwKIAkJCQlEdXRjaCwK
IAkJCQlJdGFsaWFuLAorCQkJCWVuLAogCQkJKTsKIAkJCW1haW5Hcm91cCA9IDA4NjdENjkxRkU4
NDAyOEZDMDJBQUMwNyAvKiBXZWJDb3JlICovOwogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4
REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggYzc0MzM0ZThhNzQ2MzJmZjdlNjY1
N2RkMmRhOWY0MTA2NTg2YjVlMy4uZjQ4MjM0YTcyYzUyZWMxYWRiNzRlMzczNjRlN2VjOWU2MDQy
ZDFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCkBAIC0zMDYsNyArMzA2LDcgQEAgSlNDOjpJZGVudGlmaWVyIEpTRE9NV2luZG93QmFzZTo6
bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKIHsKICAgICBK
U0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2Uq
PihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+
bW9kdWxlTG9hZGVyKCktPnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIs
IG1vZHVsZU5hbWUsIGltcG9ydGVyTW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKKyAgICAgICAg
cmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5yZXNvbHZlKGdsb2JhbE9iamVjdCwgZXhl
YywgbW9kdWxlTG9hZGVyLCBtb2R1bGVOYW1lLCBpbXBvcnRlck1vZHVsZUtleSwgc2NyaXB0RmV0
Y2hlcik7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzE2LDcgKzMxNiw3IEBAIEpTQzo6SlNJ
bnRlcm5hbFByb21pc2UqIEpTRE9NV2luZG93QmFzZTo6bW9kdWxlTG9hZGVyRmV0Y2goSlNDOjpK
U0dsb2JhbE9iamVjdCoKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01XaW5k
b3dCYXNlKj4oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoUmVmUHRyPERvY3VtZW50PiBkb2N1bWVu
dCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5kb2N1bWVudCgpKQotICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZmV0Y2goZ2xvYmFsT2Jq
ZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgcGFyYW1ldGVycywgc2NyaXB0RmV0
Y2hlcikpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRvY3VtZW50LT5tb2R1
bGVMb2FkZXIoKS5mZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxl
S2V5LCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKSk7CiAgICAgSlNDOjpKU0ludGVybmFsUHJv
bWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6
dHJ5Q3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBkZWZlcnJlZC0+
cmVqZWN0KGV4ZWMsIGpzVW5kZWZpbmVkKCkpKTsKQEAgLTMyNiw3ICszMjYsNyBAQCBKU0M6OkpT
VmFsdWUgSlNET01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJFdmFsdWF0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYgogewogICAgIEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IEpT
Qzo6anNDYXN0PEpTRE9NV2luZG93QmFzZSo+KGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKFJlZlB0
cjxEb2N1bWVudD4gZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS0+ZXZhbHVhdGUoZ2xvYmFs
T2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBzY3Jp
cHRGZXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5ldmFs
dWF0ZShnbG9iYWxPYmplY3QsIGV4ZWMsIG1vZHVsZUxvYWRlciwgbW9kdWxlS2V5LCBtb2R1bGVS
ZWNvcmQsIHNjcmlwdEZldGNoZXIpOwogICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiB9
CiAKQEAgLTMzNiw3ICszMzYsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBKU0RPTVdpbmRv
d0Jhc2U6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0M6OkpTR2xvYmFsTwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRo
aXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwog
ICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
LmRvY3VtZW50KCkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZG9jdW1lbnQt
Pm1vZHVsZUxvYWRlcigpLT5pbXBvcnRNb2R1bGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVM
b2FkZXIsIG1vZHVsZU5hbWUsIHBhcmFtZXRlcnMsIHNvdXJjZU9yaWdpbikpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGRvY3VtZW50LT5tb2R1bGVMb2FkZXIoKS5pbXBvcnRN
b2R1bGUoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVMb2FkZXIsIG1vZHVsZU5hbWUsIHBhcmFt
ZXRlcnMsIHNvdXJjZU9yaWdpbikpOwogICAgIEpTQzo6SlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZCogZGVmZXJyZWQgPSBKU0M6OkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgZGVmZXJyZWQtPnJlamVjdChleGVj
LCBqc1VuZGVmaW5lZCgpKSk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgSlNDOjpKU09iamVjdCogSlNE
T01XaW5kb3dCYXNlOjptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0M6
OkpTR2wKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxK
U0RPTVdpbmRvd0Jhc2UqPihnbG9iYWxPYmplY3QpOwogICAgIGlmIChSZWZQdHI8RG9jdW1lbnQ+
IGRvY3VtZW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCi0gICAgICAgIHJl
dHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVyKCktPmNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVz
KGdsb2JhbE9iamVjdCwgZXhlYywgbW9kdWxlTG9hZGVyLCBtb2R1bGVLZXksIG1vZHVsZVJlY29y
ZCwgc2NyaXB0RmV0Y2hlcik7CisgICAgICAgIHJldHVybiBkb2N1bWVudC0+bW9kdWxlTG9hZGVy
KCkuY3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoZ2xvYmFsT2JqZWN0LCBleGVjLCBtb2R1bGVM
b2FkZXIsIG1vZHVsZUtleSwgbW9kdWxlUmVjb3JkLCBzY3JpcHRGZXRjaGVyKTsKICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBl
T2JqZWN0U3RydWN0dXJlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
QWN0aXZlRE9NT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmgK
aW5kZXggMzYwYWQyMTQ4OWFkYmQ1ZmVjYmI4MTc2ODBkZjRiOWU4Zjc4OWU3NC4uZWJkZjU4NjE0
MGQyOGU0YTg2Nzg4NTljYTlhMDA3MmM5ZGIwZTEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0FjdGl2ZURPTU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVE
T01PYmplY3QuaApAQCAtNzEsMTggKzcxLDE4IEBAIHB1YmxpYzoKICAgICAvLyBJdCBjYW4sIGhv
d2V2ZXIsIGhhdmUgYSBzaWRlIGVmZmVjdCBvZiBkZWxldGluZyBhbiBBY3RpdmVET01PYmplY3Qu
CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQg
c2V0UGVuZGluZ0FjdGl2aXR5KFQqIHRoaXNPYmplY3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBzZXRQZW5kaW5nQWN0aXZpdHkoVCYgdGhpc09iamVjdCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCh0aGlzT2JqZWN0ID09IHRoaXMpOwotICAgICAgICB0aGlzT2JqZWN0LT5yZWYoKTsK
KyAgICAgICAgQVNTRVJUKCZ0aGlzT2JqZWN0ID09IHRoaXMpOworICAgICAgICB0aGlzT2JqZWN0
LnJlZigpOwogICAgICAgICArK21fcGVuZGluZ0FjdGl2aXR5Q291bnQ7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCB1bnNldFBlbmRpbmdBY3Rpdml0eShUKiB0aGlzT2JqZWN0
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdW5zZXRQZW5kaW5nQWN0aXZpdHkoVCYg
dGhpc09iamVjdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdBY3Rpdml0eUNvdW50
ID4gMCk7CiAgICAgICAgIC0tbV9wZW5kaW5nQWN0aXZpdHlDb3VudDsKLSAgICAgICAgdGhpc09i
amVjdC0+ZGVyZWYoKTsKKyAgICAgICAgdGhpc09iamVjdC5kZXJlZigpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFj
dGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXgg
YmY0ZDIyNzdkNmIwYzJhNWNlNjBkNGU1MDM2YjA5OWJlNzE4NzcyMy4uZGZmMmJhOGZkNjI5MGE2
NWRmZmFkYTc3OWJhMDE5MjYzOThmNGNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3Qg
U3RyaW5nJiBkYXRhKQogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCiAgICAg
aWYgKG1fZGF0YSA9PSBub25OdWxsRGF0YSAmJiBjYW5Vc2VTZXREYXRhT3B0aW1pemF0aW9uKCp0
aGlzKSkgewotICAgICAgICBkb2N1bWVudCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0
aCk7CisgICAgICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7
CiAgICAgICAgIGlmIChkb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgp
LmZyYW1lKCktPnNlbGVjdGlvbigpLnRleHRXYXNSZXBsYWNlZCh0aGlzLCAwLCBvbGRMZW5ndGgs
IG9sZExlbmd0aCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBDaGFy
YWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBSZWY8Q2hhcmFjdGVy
RGF0YT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5vbk51
bGxEYXRhLCAwLCBvbGRMZW5ndGgsIG5vbk51bGxEYXRhLmxlbmd0aCgpKTsKLSAgICBkb2N1bWVu
dCgpLnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CisgICAgZG9jdW1lbnQoKS50ZXh0
UmVtb3ZlZCgqdGhpcywgMCwgb2xkTGVuZ3RoKTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBD
aGFyYWN0ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291
bnQpCkBAIC0xMzUsNyArMTM1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0YTo6
aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkKIAogICAgIHNl
dERhdGFBbmRVcGRhdGUobmV3U3RyLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCi0gICAg
ZG9jdW1lbnQoKS50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAg
ICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsK
IAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNTIsNyArMTUyLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNv
dW50KQogCiAgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwog
Ci0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNvdW50KTsKKyAgICBk
b2N1bWVudCgpLnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKIAogICAgIHJldHVy
biB7IH07CiB9CkBAIC0xNzEsOCArMTcxLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVy
RGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY28KICAg
ICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7
CiAKICAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFt
bWFyIGNoZWNraW5nCi0gICAgZG9jdW1lbnQoKS50ZXh0UmVtb3ZlZCh0aGlzLCBvZmZzZXQsIGNv
dW50KTsKLSAgICBkb2N1bWVudCgpLnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVu
Z3RoKCkpOworICAgIGRvY3VtZW50KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldCwgY291bnQp
OworICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVkKCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3Ro
KCkpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9EZXZpY2VNb3Rpb25DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25D
bGllbnQuaAppbmRleCA1OGQyM2VkMzc5Y2E3OTU1YTZhN2Y1YjA2Njg5MzcxMjNhMDY1YjQ5Li5i
Mjk5OWFmYjczMWZlM2MxOGYwZGQzMzYyMzkyMjEyNWVjNmNmZDU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RldmljZU1vdGlvbkNsaWVudC5oCkBAIC00NSw2ICs0NSw0IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGV2aWNlTW90aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpID0gMDsKIH07CiAK
LXZvaWQgcHJvdmlkZURldmljZU1vdGlvblRvKFBhZ2UqLCBEZXZpY2VNb3Rpb25DbGllbnQqKTsK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1v
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGZmNjgyYWM0YmExYzAxNzkzNDZiNGYwOGUwYjVlNmNl
NWUwNTYyZTEuLjM1NjA4NGE3N2Y4NjRmZWM5Y2YzNzFlZDhiMTQ2MzU3Mjk3YzU1ODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKQEAgLTM1LDI3
ICszNSwyOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURldmljZU1vdGlvbkNvbnRyb2xs
ZXI6OkRldmljZU1vdGlvbkNvbnRyb2xsZXIoRGV2aWNlTW90aW9uQ2xpZW50KiBjbGllbnQpCitE
ZXZpY2VNb3Rpb25Db250cm9sbGVyOjpEZXZpY2VNb3Rpb25Db250cm9sbGVyKERldmljZU1vdGlv
bkNsaWVudCYgY2xpZW50KQogICAgIDogRGV2aWNlQ29udHJvbGxlcihjbGllbnQpCiB7Ci0gICAg
QVNTRVJUKG1fY2xpZW50KTsKLSAgICBkZXZpY2VNb3Rpb25DbGllbnQoKS0+c2V0Q29udHJvbGxl
cih0aGlzKTsKKyAgICBkZXZpY2VNb3Rpb25DbGllbnQoKS5zZXRDb250cm9sbGVyKHRoaXMpOwog
fQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLS8vIEZJWE1FOiBXZSBzaG91bGQgbG9vayB0
byByZWNvbmNpbGUgdGhlIGlPUyBhbmQgT3BlblNvdXJjZSBkaWZmZXJlbmNlcyB3aXRoIHRoaXMg
Y2xhc3MKLS8vIHNvIHRoYXQgd2UgY2FuIGVpdGhlciByZW1vdmUgdGhlc2UgbWV0aG9kcyBvciBy
ZW1vdmUgdGhlIFBMQVRGT1JNKElPU19GQU1JTFkpLWd1YXJkLgorCisvLyBGSVhNRTogV2Ugc2hv
dWxkIGxvb2sgdG8gcmVjb25jaWxlIHRoZSBpT1MgdnMuIG5vbi1pT1MgZGlmZmVyZW5jZXMgd2l0
aCB0aGlzIGNsYXNzCisvLyBzbyB0aGF0IHdlIGNhbiBlaXRoZXIgcmVtb3ZlIHRoZXNlIGZ1bmN0
aW9ucyBvciB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSktZ3VhcmQuCisKIHZvaWQgRGV2aWNlTW90
aW9uQ29udHJvbGxlcjo6c3VzcGVuZFVwZGF0ZXMoKQogewotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPnN0b3BVcGRhdGluZygpOworICAgIG1fY2xpZW50LnN0b3BVcGRhdGlu
ZygpOwogfQogCiB2b2lkIERldmljZU1vdGlvbkNvbnRyb2xsZXI6OnJlc3VtZVVwZGF0ZXMoKQog
ewotICAgIGlmIChtX2NsaWVudCAmJiAhbV9saXN0ZW5lcnMuaXNFbXB0eSgpKQotICAgICAgICBt
X2NsaWVudC0+c3RhcnRVcGRhdGluZygpOworICAgIGlmICghbV9saXN0ZW5lcnMuaXNFbXB0eSgp
KQorICAgICAgICBtX2NsaWVudC5zdGFydFVwZGF0aW5nKCk7CiB9CisKICNlbmRpZgogICAgIAog
dm9pZCBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpkaWRDaGFuZ2VEZXZpY2VNb3Rpb24oRGV2aWNl
TW90aW9uRGF0YSogZGV2aWNlTW90aW9uRGF0YSkKQEAgLTYzLDE5ICs2NCwxOSBAQCB2b2lkIERl
dmljZU1vdGlvbkNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZU1vdGlvbihEZXZpY2VNb3Rpb25E
YXRhKiBkZXZpY2VNb3RpbwogICAgIGRpc3BhdGNoRGV2aWNlRXZlbnQoRGV2aWNlTW90aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlvbkRh
dGEpKTsKIH0KIAotRGV2aWNlTW90aW9uQ2xpZW50KiBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpk
ZXZpY2VNb3Rpb25DbGllbnQoKQorRGV2aWNlTW90aW9uQ2xpZW50JiBEZXZpY2VNb3Rpb25Db250
cm9sbGVyOjpkZXZpY2VNb3Rpb25DbGllbnQoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
ZXZpY2VNb3Rpb25DbGllbnQqPihtX2NsaWVudCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERl
dmljZU1vdGlvbkNsaWVudCY+KG1fY2xpZW50KTsKIH0KIAogYm9vbCBEZXZpY2VNb3Rpb25Db250
cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiB7Ci0gICAgcmV0dXJuIGRldmljZU1vdGlvbkNsaWVudCgp
LT5sYXN0TW90aW9uKCk7CisgICAgcmV0dXJuIGRldmljZU1vdGlvbkNsaWVudCgpLmxhc3RNb3Rp
b24oKTsKIH0KIAogUmVmUHRyPEV2ZW50PiBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpnZXRMYXN0
RXZlbnQoKQogewotICAgIHJldHVybiBEZXZpY2VNb3Rpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCwgZGV2aWNlTW90aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24o
KSk7CisgICAgcmV0dXJuIERldmljZU1vdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRl
dmljZW1vdGlvbkV2ZW50LCBkZXZpY2VNb3Rpb25DbGllbnQoKS5sYXN0TW90aW9uKCkpOwogfQog
CiBjb25zdCBjaGFyKiBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCkBA
IC05NSw5ICs5Niw0IEBAIGJvb2wgRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChQ
YWdlKiBwYWdlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBwcm92aWRlRGV2aWNlTW90
aW9uVG8oUGFnZSogcGFnZSwgRGV2aWNlTW90aW9uQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgRGV2
aWNlTW90aW9uQ29udHJvbGxlcjo6cHJvdmlkZVRvKHBhZ2UsIERldmljZU1vdGlvbkNvbnRyb2xs
ZXI6OnN1cHBsZW1lbnROYW1lKCksIHN0ZDo6bWFrZV91bmlxdWU8RGV2aWNlTW90aW9uQ29udHJv
bGxlcj4oY2xpZW50KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCmluZGV4IGZmODA1YzY2NjBlMzVjMTRm
MDRiODA3ZDNmNmY3MzY4MzBhNTQ0YTguLjNmNjI1YWE2N2MxNmQyOThlNjcwODIyMzRjYWJlYmMw
N2Y4ZDFkODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIu
aApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBEZXZpY2VNb3Rpb25EYXRhOwogY2xhc3MgRGV2aWNl
TW90aW9uQ29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBEZXZpY2VDb250cm9sbGVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEZXZpY2VNb3Rpb25Db250cm9sbGVyKTsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBEZXZpY2VNb3Rpb25Db250cm9sbGVyKERldmljZU1vdGlvbkNsaWVudCopOwor
ICAgIGV4cGxpY2l0IERldmljZU1vdGlvbkNvbnRyb2xsZXIoRGV2aWNlTW90aW9uQ2xpZW50Jik7
CiAgICAgdmlydHVhbCB+RGV2aWNlTW90aW9uQ29udHJvbGxlcigpID0gZGVmYXVsdDsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAgICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VNb3Rpb24oRGV2aWNlTW90aW9uRGF0YSopOwotICAg
IERldmljZU1vdGlvbkNsaWVudCogZGV2aWNlTW90aW9uQ2xpZW50KCk7CisgICAgRGV2aWNlTW90
aW9uQ2xpZW50JiBkZXZpY2VNb3Rpb25DbGllbnQoKTsKIAogICAgIGJvb2wgaGFzTGFzdERhdGEo
KSBvdmVycmlkZTsKICAgICBSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaAppbmRleCA1Y2E3
MDEzNzI5NDhlNTEyMzk5MDM1ZDI3NTNhM2JiMzVjNGIzNGY0Li42N2VlNGM5NzRlYTE4Yjg3YzY3
YTc2MGI3ZjBmNjUzZWQxYWJiODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQuaApAQCAtNDUsNiArNDUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpID0gMDsKIH07CiAKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgcHJvdmlkZURldmljZU9yaWVudGF0aW9uVG8oUGFnZSosIERldmlj
ZU9yaWVudGF0aW9uQ2xpZW50Kik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHByb3ZpZGVEZXZpY2VP
cmllbnRhdGlvblRvKFBhZ2UmLCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCYpOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDE0MjU0MTY1NmEzNjcxOGJlMzhjZjcyNjE2YzY2OTIy
Yzc4MDVjNmIuLjMzNjIyMzEwODFiMTNmNzJkYzE4ZGFjNWYzOTA3YTVlN2MxN2IwYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3Bw
CkBAIC0zNSwxOSArMzUsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXI6OkRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcihEZXZpY2VPcmll
bnRhdGlvbkNsaWVudCogY2xpZW50KQorRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpEZXZp
Y2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoRGV2aWNlT3JpZW50YXRpb25DbGllbnQmIGNsaWVudCkK
ICAgICA6IERldmljZUNvbnRyb2xsZXIoY2xpZW50KQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgLy8gRklYTUU6IFRlbXBvcmFyaWx5IGF2b2lkIGFzc2VydGluZyB3aGlsZSBPcGVu
U291cmNlIGlzIHVzaW5nIGEgZGlmZmVyZW50IGRlc2lnbi4KLSAgICAvLyBXZSBzaG91bGQgcmVj
b25jaWxlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIE9wZW5Tb3VyY2UgYW5kIGlPUyBzbyB0aGF0
IHdlIGNhbgotICAgIC8vIHJlbW92ZSB0aGlzIGNvZGUgcGF0aC4KLSAgICBpZiAobV9jbGllbnQp
Ci0gICAgICAgIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPnNldENvbnRyb2xsZXIodGhpcyk7
Ci0jZWxzZQotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgZGV2aWNlT3JpZW50YXRpb25DbGll
bnQoKS0+c2V0Q29udHJvbGxlcih0aGlzKTsKLSNlbmRpZgorICAgIGRldmljZU9yaWVudGF0aW9u
Q2xpZW50KCkuc2V0Q29udHJvbGxlcih0aGlzKTsKIH0KIAogdm9pZCBEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZU9yaWVudGF0aW9uKERldmljZU9yaWVudGF0aW9u
RGF0YSogb3JpZW50YXRpb24pCkBAIC01NSwzNSArNDYsMzkgQEAgdm9pZCBEZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXI6OmRpZENoYW5nZURldmljZU9yaWVudGF0aW9uKERldmljZU9yaWVudGF0
aW9uRGEKICAgICBkaXNwYXRjaERldmljZUV2ZW50KERldmljZU9yaWVudGF0aW9uRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCwgb3JpZW50YXRpb24pKTsK
IH0KIAotRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
cjo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQorRGV2aWNlT3JpZW50YXRpb25DbGllbnQmIERl
dmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKQogewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXZpY2VPcmllbnRhdGlvbkNsaWVudCo+KG1fY2xpZW50
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGV2aWNlT3JpZW50YXRpb25DbGllbnQmPihtX2Ns
aWVudCk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotLy8gRklYTUU6IFdlIHNob3Vs
ZCBsb29rIHRvIHJlY29uY2lsZSB0aGUgaU9TIGFuZCBPcGVuU291cmNlIGRpZmZlcmVuY2VzIHdp
dGggdGhpcyBjbGFzcwotLy8gc28gdGhhdCB3ZSBjYW4gZWl0aGVyIHJlbW92ZSB0aGVzZSBtZXRo
b2RzIG9yIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSktZ3VhcmQuCisKKy8vIEZJWE1F
OiBXZSBzaG91bGQgbG9vayB0byByZWNvbmNpbGUgdGhlIGlPUyBhbmQgbm9uLWlPUyBkaWZmZXJl
bmNlcyB3aXRoIHRoaXMgY2xhc3MKKy8vIHNvIHRoYXQgd2UgY2FuIGVpdGhlciByZW1vdmUgdGhl
c2UgZnVuY3Rpb25zIG9yIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSktZ3VhcmQuCisK
IHZvaWQgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpzdXNwZW5kVXBkYXRlcygpCiB7Ci0g
ICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7CisgICAg
bV9jbGllbnQuc3RvcFVwZGF0aW5nKCk7CiB9CiAKIHZvaWQgRGV2aWNlT3JpZW50YXRpb25Db250
cm9sbGVyOjpyZXN1bWVVcGRhdGVzKCkKIHsKLSAgICBpZiAobV9jbGllbnQgJiYgIW1fbGlzdGVu
ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsKKyAgICBp
ZiAoIW1fbGlzdGVuZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQuc3RhcnRVcGRhdGlu
ZygpOwogfQorCiAjZWxzZQorCiBib29sIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6aGFz
TGFzdERhdGEoKQogewotICAgIHJldHVybiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpLT5sYXN0
T3JpZW50YXRpb24oKTsKKyAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKS5sYXN0
T3JpZW50YXRpb24oKTsKIH0KIAogUmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRy
b2xsZXI6OmdldExhc3RFdmVudCgpCiB7Ci0gICAgcmV0dXJuIERldmljZU9yaWVudGF0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVudCwgZGV2aWNlT3Jp
ZW50YXRpb25DbGllbnQoKS0+bGFzdE9yaWVudGF0aW9uKCkpOworICAgIHJldHVybiBEZXZpY2VP
cmllbnRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZl
bnQsIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkubGFzdE9yaWVudGF0aW9uKCkpOwogfQorCiAj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogY29uc3QgY2hhciogRGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyOjpzdXBwbGVtZW50TmFtZSgpCkBAIC0xMDMsOSArOTgsOSBAQCBib29s
IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChQYWdlKiBwYWdlKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBwcm92aWRlRGV2aWNlT3JpZW50YXRpb25UbyhQYWdl
KiBwYWdlLCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogY2xpZW50KQordm9pZCBwcm92aWRlRGV2
aWNlT3JpZW50YXRpb25UbyhQYWdlJiBwYWdlLCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCYgY2xp
ZW50KQogewotICAgIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6cHJvdmlkZVRvKHBhZ2Us
IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6c3VwcGxlbWVudE5hbWUoKSwgc3RkOjptYWtl
X3VuaXF1ZTxEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI+KGNsaWVudCkpOworICAgIERldmlj
ZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6cHJvdmlkZVRvKCZwYWdlLCBEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXI6OnN1cHBsZW1lbnROYW1lKCksIHN0ZDo6bWFrZV91bmlxdWU8RGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyPihjbGllbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5o
CmluZGV4IDU2ZGNiODVmNDU1NDFjMTNiNzhkOWI3OTdkOTE5ZGQ4MGY4NDFkYTEuLmY1MmQ3MWUw
OGE4MjE3ZWYyOTM1YTkwMTc1MDUyN2NiN2I5NTBmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgKQEAgLTM4LDExICszOCwxMSBAQCBj
bGFzcyBQYWdlOwogY2xhc3MgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyIGZpbmFsIDogcHVi
bGljIERldmljZUNvbnRyb2xsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyKERldmljZU9yaWVudGF0aW9uQ2xpZW50Kik7CisgICAgZXhwbGljaXQg
RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKERldmljZU9yaWVudGF0aW9uQ2xpZW50Jik7CiAg
ICAgdmlydHVhbCB+RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwogCiAg
ICAgdm9pZCBkaWRDaGFuZ2VEZXZpY2VPcmllbnRhdGlvbihEZXZpY2VPcmllbnRhdGlvbkRhdGEq
KTsKLSAgICBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogZGV2aWNlT3JpZW50YXRpb25DbGllbnQo
KTsKKyAgICBEZXZpY2VPcmllbnRhdGlvbkNsaWVudCYgZGV2aWNlT3JpZW50YXRpb25DbGllbnQo
KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBs
b29rIHRvIHJlY29uY2lsZSB0aGUgaU9TIGFuZCBPcGVuU291cmNlIGRpZmZlcmVuY2VzIHdpdGgg
dGhpcyBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNjdlYjFhMTlhZmY3OTFlNjJk
NjQ1ZDY5M2FkOTIzNzc5YjEyMWJkZi4uNzZlZjRiNzJiYjUzZTA0NmU3Y2RjNTgwZTA1ZjdiMDc3
NWFiMDcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01MTksMTMgKzUxOSwxMSBAQCBE
b2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgdW5zaWduZWQg
ZG9jdW1lbnRDbGFzc2VzLCB1bnNpZwogICAgICwgbV9pbnRlcnNlY3Rpb25PYnNlcnZlcnNOb3Rp
ZnlUaW1lcigqdGhpcywgJkRvY3VtZW50Ojpub3RpZnlJbnRlcnNlY3Rpb25PYnNlcnZlcnNUaW1l
ckZpcmVkKQogI2VuZGlmCiAgICAgLCBtX2xvYWRFdmVudERlbGF5VGltZXIoKnRoaXMsICZEb2N1
bWVudDo6bG9hZEV2ZW50RGVsYXlUaW1lckZpcmVkKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0jaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgICwgbV9kZXZpY2VNb3Rpb25DbGll
bnQoc3RkOjptYWtlX3VuaXF1ZTxEZXZpY2VNb3Rpb25DbGllbnRJT1M+KCkpCi0gICAgLCBtX2Rl
dmljZU1vdGlvbkNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxEZXZpY2VNb3Rpb25Db250cm9s
bGVyPihtX2RldmljZU1vdGlvbkNsaWVudC5nZXQoKSkpCisgICAgLCBtX2RldmljZU1vdGlvbkNv
bnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxEZXZpY2VNb3Rpb25Db250cm9sbGVyPigqbV9kZXZp
Y2VNb3Rpb25DbGllbnQpKQogICAgICwgbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudChzdGQ6Om1h
a2VfdW5pcXVlPERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TPigpKQotICAgICwgbV9kZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxEZXZpY2VPcmllbnRhdGlvbkNv
bnRyb2xsZXI+KG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnQuZ2V0KCkpKQotI2VuZGlmCisgICAg
LCBtX2RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPERldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcj4oKm1fZGV2aWNlT3JpZW50YXRpb25DbGllbnQpKQogI2VuZGlm
CiAgICAgLCBtX3BlbmRpbmdUYXNrc1RpbWVyKCp0aGlzLCAmRG9jdW1lbnQ6OnBlbmRpbmdUYXNr
c1RpbWVyRmlyZWQpCiAgICAgLCBtX3Zpc3VhbFVwZGF0ZXNTdXBwcmVzc2lvblRpbWVyKCp0aGlz
LCAmRG9jdW1lbnQ6OnZpc3VhbFVwZGF0ZXNTdXBwcmVzc2lvblRpbWVyRmlyZWQpCkBAIC03NDAs
MjIgKzczOCwyMCBAQCBFbGVtZW50KiBEb2N1bWVudDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNv
bnN0IFN0cmluZyYga2V5KQogICAgIGlmIChrZXkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoIW1fYWNjZXNzS2V5TWFwVmFsaWQpIHsKLSAgICAgICAgYnVpbGRB
Y2Nlc3NLZXlNYXAodGhpcyk7CisgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKCp0aGlzKTsKICAg
ICAgICAgbV9hY2Nlc3NLZXlNYXBWYWxpZCA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiBtX2Vs
ZW1lbnRzQnlBY2Nlc3NLZXkuZ2V0KGtleS5pbXBsKCkpOwogfQogCi12b2lkIERvY3VtZW50Ojpi
dWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHNjb3BlKQordm9pZCBEb2N1bWVudDo6YnVpbGRB
Y2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiBzY29wZSkKIHsKLSAgICBBU1NFUlQoc2NvcGUpOwotICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KHNjb3BlLT5y
b290Tm9kZSgpKSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSA9IGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhY2Nlc3NrZXlBdHRyKTsKKyAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS5y
b290Tm9kZSgpKSkgeworICAgICAgICBhdXRvJiBhY2Nlc3NLZXkgPSBlbGVtZW50LmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5QXR0cik7CiAgICAgICAgIGlmICghYWNj
ZXNzS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5zZXQo
YWNjZXNzS2V5LmltcGwoKSwgJmVsZW1lbnQpOwotCi0gICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpCi0gICAgICAgICAgICBidWlsZEFjY2Vzc0tleU1h
cChyb290KTsKKyAgICAgICAgaWYgKGF1dG8qIHJvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKSkK
KyAgICAgICAgICAgIGJ1aWxkQWNjZXNzS2V5TWFwKCpyb290KTsKICAgICB9CiB9CiAKQEAgLTE2
NzAsMTQgKzE2NjYsMTQgQEAgdm9pZCBEb2N1bWVudDo6dGl0bGVFbGVtZW50VGV4dENoYW5nZWQo
RWxlbWVudCYgdGl0bGVFbGVtZW50KQogICAgIHVwZGF0ZVRpdGxlRnJvbVRpdGxlRWxlbWVudCgp
OwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRD
YWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCogY2xpZW50KQordm9pZCBEb2N1bWVudDo6
cmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFu
Z2VDbGllbnQmIGNsaWVudCkKIHsKLSAgICBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrQ2xpZW50
cy5hZGQoY2xpZW50KTsKKyAgICBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxiYWNrQ2xpZW50cy5hZGQo
JmNsaWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3Rh
dGVDaGFuZ2VkQ2FsbGJhY2tzKFZpc2liaWxpdHlDaGFuZ2VDbGllbnQqIGNsaWVudCkKK3ZvaWQg
RG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKFZp
c2liaWxpdHlDaGFuZ2VDbGllbnQmIGNsaWVudCkKIHsKLSAgICBtX3Zpc2liaWxpdHlTdGF0ZUNh
bGxiYWNrQ2xpZW50cy5yZW1vdmUoY2xpZW50KTsKKyAgICBtX3Zpc2liaWxpdHlTdGF0ZUNhbGxi
YWNrQ2xpZW50cy5yZW1vdmUoJmNsaWVudCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnZpc2liaWxp
dHlTdGF0ZUNoYW5nZWQoKQpAQCAtMzU2OSw3ICszNTY1LDcgQEAgdm9pZCBEb2N1bWVudDo6cHJv
Y2Vzc0h0dHBFcXVpdihjb25zdCBTdHJpbmcmIGVxdWl2LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wKICAgICB9CiAKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpTZXRDb29raWU6Ci0gICAg
ICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgaWYgKGlzSFRNTERvY3Vt
ZW50KCkpCiAgICAgICAgICAgICBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1
cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgIlRoZSBTZXQtQ29va2llIG1ldGEgdGFnIGlzIG9i
c29sZXRlIGFuZCB3YXMgaWdub3JlZC4gVXNlIHRoZSBIVFRQIGhlYWRlciBTZXQtQ29va2llIG9y
IGRvY3VtZW50LmNvb2tpZSBpbnN0ZWFkLiJfcyk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zOTc5
LDE1ICszOTc1LDE1IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVZpZXdwb3J0VW5pdHNPblJlc2l6
ZSgpCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKE1lZGlhUHJv
ZHVjZXIqIGF1ZGlvUHJvZHVjZXIpCit2b2lkIERvY3VtZW50OjphZGRBdWRpb1Byb2R1Y2VyKE1l
ZGlhUHJvZHVjZXImIGF1ZGlvUHJvZHVjZXIpCiB7Ci0gICAgbV9hdWRpb1Byb2R1Y2Vycy5hZGQo
YXVkaW9Qcm9kdWNlcik7CisgICAgbV9hdWRpb1Byb2R1Y2Vycy5hZGQoJmF1ZGlvUHJvZHVjZXIp
OwogICAgIHVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlbW92
ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciogYXVkaW9Qcm9kdWNlcikKK3ZvaWQgRG9jdW1l
bnQ6OnJlbW92ZUF1ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYgYXVkaW9Qcm9kdWNlcikKIHsK
LSAgICBtX2F1ZGlvUHJvZHVjZXJzLnJlbW92ZShhdWRpb1Byb2R1Y2VyKTsKKyAgICBtX2F1ZGlv
UHJvZHVjZXJzLnJlbW92ZSgmYXVkaW9Qcm9kdWNlcik7CiAgICAgdXBkYXRlSXNQbGF5aW5nTWVk
aWEoKTsKIH0KIApAQCAtNDA4MiwyNCArNDA3OCwyNCBAQCB2b2lkIERvY3VtZW50OjphZGp1c3RG
b2N1c2VkTm9kZU9uTm9kZVJlbW92YWwoTm9kZSYgbm9kZSwgTm9kZVJlbW92YWwgbm9kZVJlbW92
YQogICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudDo6aG92ZXJlZEVsZW1lbnREaWREZXRhY2goRWxl
bWVudCogZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OmhvdmVyZWRFbGVtZW50RGlkRGV0YWNoKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2hvdmVyZWRFbGVtZW50IHx8IGVsZW1lbnQg
IT0gbV9ob3ZlcmVkRWxlbWVudCkKKyAgICBpZiAoIW1faG92ZXJlZEVsZW1lbnQgfHwgJmVsZW1l
bnQgIT0gbV9ob3ZlcmVkRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9ob3ZlcmVk
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBtX2hvdmVyZWRFbGVtZW50
ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KCk7CiAgICAgd2hpbGUgKG1faG92ZXJlZEVsZW1lbnQg
JiYgIW1faG92ZXJlZEVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIG1faG92ZXJlZEVsZW1l
bnQgPSBtX2hvdmVyZWRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgaWYgKGZyYW1lKCkp
CiAgICAgICAgIGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLnNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0
ZSgpOwogfQogCi12b2lkIERvY3VtZW50OjplbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChF
bGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudDo6ZWxlbWVudEluQWN0aXZlQ2hhaW5EaWRE
ZXRhY2goRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIW1fYWN0aXZlRWxlbWVudCB8fCBl
bGVtZW50ICE9IG1fYWN0aXZlRWxlbWVudCkKKyAgICBpZiAoIW1fYWN0aXZlRWxlbWVudCB8fCAm
ZWxlbWVudCAhPSBtX2FjdGl2ZUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYWN0
aXZlRWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBtX2FjdGl2ZUVsZW1l
bnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobV9hY3RpdmVFbGVtZW50
ICYmICFtX2FjdGl2ZUVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIG1fYWN0aXZlRWxlbWVu
dCA9IG1fYWN0aXZlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogfQpAQCAtNDQ0NSwyNSArNDQ0
MSwyNSBAQCB2b2lkIERvY3VtZW50Ojpjb2xsZWN0aW9uV2lsbENsZWFySWROYW1lTWFwKGNvbnN0
IEhUTUxDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKQogICAgIG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q291bnRzW0ludmFsaWRhdGVPbklkTmFtZUF0dHJDaGFuZ2VdLS07CiB9CiAKLXZvaWQgRG9jdW1l
bnQ6OmF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5pKQordm9pZCBEb2N1bWVudDo6
YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYgaXRlcmF0b3IpCiB7Ci0gICAgbV9ub2Rl
SXRlcmF0b3JzLmFkZChuaSk7CisgICAgbV9ub2RlSXRlcmF0b3JzLmFkZCgmaXRlcmF0b3IpOwog
fQogCi12b2lkIERvY3VtZW50OjpkZXRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKiBuaSkK
K3ZvaWQgRG9jdW1lbnQ6OmRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3ImIGl0ZXJhdG9y
KQogewogICAgIC8vIFRoZSBub2RlIGl0ZXJhdG9yIGNhbiBiZSBkZXRhY2hlZCB3aXRob3V0IGhh
dmluZyBiZWVuIGF0dGFjaGVkIGlmIGl0cyByb290IG5vZGUgZGlkbid0IGhhdmUgYSBkb2N1bWVu
dAogICAgIC8vIHdoZW4gdGhlIGl0ZXJhdG9yIHdhcyBjcmVhdGVkLCBidXQgaGFzIGl0IG5vdy4K
LSAgICBtX25vZGVJdGVyYXRvcnMucmVtb3ZlKG5pKTsKKyAgICBtX25vZGVJdGVyYXRvcnMucmVt
b3ZlKCZpdGVyYXRvcik7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6Om1vdmVOb2RlSXRlcmF0b3JzVG9O
ZXdEb2N1bWVudFNsb3dDYXNlKE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoIW1fbm9kZUl0ZXJhdG9ycy5pc0VtcHR5KCkpOwotICAgIGZvciAoYXV0byog
aXQgOiBjb3B5VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzKSkgewotICAgICAgICBpZiAoJml0LT5y
b290KCkgPT0gJm5vZGUpIHsKLSAgICAgICAgICAgIGRldGFjaE5vZGVJdGVyYXRvcihpdCk7Ci0g
ICAgICAgICAgICBuZXdEb2N1bWVudC5hdHRhY2hOb2RlSXRlcmF0b3IoaXQpOworICAgIGZvciAo
YXV0byogaXRlcmF0b3IgOiBjb3B5VG9WZWN0b3IobV9ub2RlSXRlcmF0b3JzKSkgeworICAgICAg
ICBpZiAoJml0ZXJhdG9yLT5yb290KCkgPT0gJm5vZGUpIHsKKyAgICAgICAgICAgIGRldGFjaE5v
ZGVJdGVyYXRvcigqaXRlcmF0b3IpOworICAgICAgICAgICAgbmV3RG9jdW1lbnQuYXR0YWNoTm9k
ZUl0ZXJhdG9yKCppdGVyYXRvcik7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NTAzLDcgKzQ0
OTksNyBAQCB2b2lkIERvY3VtZW50Ojpub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5l
ck5vZGUmIGNvbnRhaW5lcikKIAogICAgIGlmIChtX21hcmtlcnMtPmhhc01hcmtlcnMoKSkgewog
ICAgICAgICBmb3IgKFRleHQqIHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6OmZpcnN0Q2hp
bGQoY29udGFpbmVyKTsgdGV4dE5vZGU7IHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKCp0ZXh0Tm9kZSkpCi0gICAgICAgICAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtl
cnModGV4dE5vZGUpOworICAgICAgICAgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKCp0ZXh0
Tm9kZSk7CiAgICAgfQogfQogCkBAIC00NTMxLDcgKzQ1MjcsNyBAQCB2b2lkIERvY3VtZW50Ojpu
b2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGlmIChpczxUZXh0Pihu
b2RlKSkKLSAgICAgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKCZub2RlKTsKKyAgICAgICAg
bV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKG5vZGUpOwogfQogCiBzdGF0aWMgTm9kZSogZmFsbGJh
Y2tGb2N1c05hdmlnYXRpb25TdGFydGluZ05vZGVBZnRlclJlbW92YWwoTm9kZSYgbm9kZSkKQEAg
LTQ1NTEsNyArNDU0Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFkanVzdEZvY3VzTmF2aWdhdGlvbk5v
ZGVPbk5vZGVSZW1vdmFsKE5vZGUmIG5vZGUsIE5vZGVSZW1vdmFsIG5vCiAgICAgfQogfQogCi12
b2lkIERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit2b2lkIERvY3VtZW50Ojp0ZXh0SW5zZXJ0ZWQoTm9kZSYgdGV4dCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX3Jhbmdlcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQpAQCAtNDU2
Miw3ICs0NTU4LDcgQEAgdm9pZCBEb2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUqIHRleHQsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIG1fbWFya2Vycy0+c2hpZnRNYXJr
ZXJzKHRleHQsIG9mZnNldCwgbGVuZ3RoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dGV4dFJlbW92
ZWQoTm9kZSogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERv
Y3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBpZiAoIW1fcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBmb3Ig
KGF1dG8qIHJhbmdlIDogbV9yYW5nZXMpCkBAIC00NTc0LDEwICs0NTcwLDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OnRleHRSZW1vdmVkKE5vZGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQogICAgIG1fbWFya2Vycy0+c2hpZnRNYXJrZXJzKHRleHQsIG9mZnNldCArIGxlbmd0
aCwgMCAtIGxlbmd0aCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0
KiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpCit2b2lkIERvY3VtZW50Ojp0ZXh0Tm9kZXNNZXJn
ZWQoVGV4dCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewogICAgIGlmICghbV9yYW5nZXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIE5vZGVXaXRoSW5kZXggb2xkTm9kZVdpdGhJbmRleChvbGRO
b2RlKTsKKyAgICAgICAgTm9kZVdpdGhJbmRleCBvbGROb2RlV2l0aEluZGV4KCZvbGROb2RlKTsK
ICAgICAgICAgZm9yIChhdXRvKiByYW5nZSA6IG1fcmFuZ2VzKQogICAgICAgICAgICAgcmFuZ2Ut
PnRleHROb2Rlc01lcmdlZChvbGROb2RlV2l0aEluZGV4LCBvZmZzZXQpOwogICAgIH0KQEAgLTQ1
ODUsNyArNDU4MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRleHROb2Rlc01lcmdlZChUZXh0KiBvbGRO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBt
YXJrZXJzIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciBjaGVja2luZy4KIH0KIAotdm9pZCBEb2N1
bWVudDo6dGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKQordm9pZCBEb2N1bWVudDo6dGV4dE5v
ZGVTcGxpdChUZXh0JiBvbGROb2RlKQogewogICAgIGZvciAoYXV0byogcmFuZ2UgOiBtX3Jhbmdl
cykKICAgICAgICAgcmFuZ2UtPnRleHROb2RlU3BsaXQob2xkTm9kZSk7CkBAIC00NjA2LDE1ICs0
NjAyLDE1IEBAIHZvaWQgRG9jdW1lbnQ6OmNyZWF0ZURPTVdpbmRvdygpCiAgICAgbV9mcmFtZS0+
bG9hZGVyKCkuY2xpZW50KCkuZGlkQ3JlYXRlV2luZG93KCptX2RvbVdpbmRvdyk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQg
RG9jdW1lbnQ6OnRha2VET01XaW5kb3dGcm9tKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBB
U1NFUlQobV9mcmFtZSk7CiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvdyk7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50LT5tX2RvbVdpbmRvdyk7CisgICAgQVNTRVJUKGRvY3VtZW50Lm1fZG9tV2luZG93KTsK
ICAgICAvLyBBIHZhbGlkIERPTVdpbmRvdyBpcyBuZWVkZWQgYnkgQ2FjaGVkRnJhbWUgZm9yIGl0
cyBkb2N1bWVudHMuCiAgICAgQVNTRVJUKHBhZ2VDYWNoZVN0YXRlKCkgPT0gTm90SW5QYWdlQ2Fj
aGUpOwogCi0gICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50LT5tX2RvbVdpbmRvdyk7
CisgICAgbV9kb21XaW5kb3cgPSBXVEZNb3ZlKGRvY3VtZW50Lm1fZG9tV2luZG93KTsKICAgICBt
X2RvbVdpbmRvdy0+ZGlkU2VjdXJlVHJhbnNpdGlvblRvKCp0aGlzKTsKIAogICAgIEFTU0VSVCht
X2RvbVdpbmRvdy0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKQEAgLTUzMTQsMTQgKzUzMTAsMTQgQEAg
dm9pZCBEb2N1bWVudDo6cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogI2VuZGlm
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fZG9jdW1lbnRTdXNwZW5z
aW9uQ2FsbGJhY2tFbGVtZW50cy5hZGQoZSk7CisgICAgbV9kb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja0VsZW1lbnRzLmFkZCgmZWxlbWVudCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQgRG9jdW1l
bnQ6OnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBtX2RvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrRWxlbWVudHMucmVtb3Zl
KGUpOworICAgIG1fZG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tFbGVtZW50cy5yZW1vdmUoJmVs
ZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSgpIApAQCAt
NTMzMCwxNCArNTMyNiwxNCBAQCB2b2lkIERvY3VtZW50OjptZWRpYVZvbHVtZURpZENoYW5nZSgp
CiAgICAgICAgIGVsZW1lbnQtPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQg
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5hZGQoZSk7CisgICAgbV9t
ZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6dW5yZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lk
IERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBtX21lZGlhVm9sdW1lQ2FsbGJhY2tFbGVtZW50cy5yZW1vdmUoZSk7Cisg
ICAgbV9tZWRpYVZvbHVtZUNhbGxiYWNrRWxlbWVudHMucmVtb3ZlKCZlbGVtZW50KTsKIH0KIAog
Ym9vbCBEb2N1bWVudDo6YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSBjb25zdApA
QCAtNTM4NSwyOSArNTM4MSwyOSBAQCB2b2lkIERvY3VtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0
ZURpZENoYW5nZSgpCiAjZW5kaWYKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JQcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxlbWVudCogZSkKK3ZvaWQgRG9jdW1l
bnQ6OnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50
cy5hZGQoZSk7CisgICAgbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cy5hZGQo
JmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yUHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqIGUpCit2b2lkIERvY3VtZW50Ojp1bnJl
Z2lzdGVyRm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cy5yZW1v
dmUoZSk7CisgICAgbV9wcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRFbGVtZW50cy5yZW1vdmUo
JmVsZW1lbnQpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCi12b2lkIERvY3VtZW50
OjpyZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCog
ZSkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENh
bGxiYWNrcyhFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChwYWdlKCkpCiAgICAgICAgIHBh
Z2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5zZXRJbnRlcmVzdGVkSW5DYXB0aW9u
UHJlZmVyZW5jZUNoYW5nZXMoKTsKIAotICAgIG1fY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZEVs
ZW1lbnRzLmFkZChlKTsKKyAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5h
ZGQoJmVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9yQ2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50KiBlKQordm9pZCBEb2N1bWVudDo6dW5y
ZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxlbWVudCYgZWxl
bWVudCkKIHsKLSAgICBtX2NhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRFbGVtZW50cy5yZW1vdmUo
ZSk7CisgICAgbV9jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKCZlbGVt
ZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCkBA
IC01NDIwLDE0ICs1NDE2LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OmNhcHRpb25QcmVmZXJlbmNlc0No
YW5nZWQoKQogCiAjaWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAotdm9pZCBEb2N1
bWVudDo6cmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRp
YUVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvclBhZ2VTY2FsZUZh
Y3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBt
X3BhZ2VTY2FsZUZhY3RvckNoYW5nZWRFbGVtZW50cy5hZGQoZWxlbWVudCk7CisgICAgbV9wYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkRWxlbWVudHMuYWRkKCZlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6dW5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoSFRNTE1l
ZGlhRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgbV9wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkRWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpOworICAg
IG1fcGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CiAK
IHZvaWQgRG9jdW1lbnQ6OnBhZ2VTY2FsZUZhY3RvckNoYW5nZWRBbmRTdGFibGUoKQpAQCAtNTc2
MSw3ICs1NzU3LDcgQEAgdm9pZCBEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKIAogICAgIFJl
ZjxEb2N1bWVudD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKLSAgICBzY3JpcHRSdW5uZXIoKS0+
ZG9jdW1lbnRGaW5pc2hlZFBhcnNpbmcoKTsKKyAgICBzY3JpcHRSdW5uZXIoKS5kb2N1bWVudEZp
bmlzaGVkUGFyc2luZygpOwogCiAgICAgaWYgKCFtX2RvY3VtZW50VGltaW5nLmRvbUNvbnRlbnRM
b2FkZWRFdmVudFN0YXJ0KQogICAgICAgICBtX2RvY3VtZW50VGltaW5nLmRvbUNvbnRlbnRMb2Fk
ZWRFdmVudFN0YXJ0ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC02MDU5LDE3ICs2MDU1LDE3
IEBAIHZvaWQgRG9jdW1lbnQ6OnN0YXRlUG9wcGVkKFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
JiYgc3RhdGVPYmplY3QpCiAgICAgICAgIG1fcGVuZGluZ1N0YXRlT2JqZWN0ID0gV1RGTW92ZShz
dGF0ZU9iamVjdCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlKiByYW5n
ZSkKK3ZvaWQgRG9jdW1lbnQ6OmF0dGFjaFJhbmdlKFJhbmdlJiByYW5nZSkKIHsKLSAgICBBU1NF
UlQoIW1fcmFuZ2VzLmNvbnRhaW5zKHJhbmdlKSk7Ci0gICAgbV9yYW5nZXMuYWRkKHJhbmdlKTsK
KyAgICBBU1NFUlQoIW1fcmFuZ2VzLmNvbnRhaW5zKCZyYW5nZSkpOworICAgIG1fcmFuZ2VzLmFk
ZCgmcmFuZ2UpOwogfQogCi12b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSogcmFuZ2Up
Cit2b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgLy8gV2Ug
ZG9uJ3QgQVNTRVJUIG1fcmFuZ2VzLmNvbnRhaW5zKHJhbmdlKSB0byBhbGxvdyB1cyB0byBjYWxs
IHRoaXMKKyAgICAvLyBXZSBkb24ndCBBU1NFUlQgbV9yYW5nZXMuY29udGFpbnMoJnJhbmdlKSB0
byBhbGxvdyB1cyB0byBjYWxsIHRoaXMKICAgICAvLyB1bmNvbmRpdGlvbmFsbHkgdG8gZml4OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjYwNDQKLSAgICBtX3Jhbmdl
cy5yZW1vdmUocmFuZ2UpOworICAgIG1fcmFuZ2VzLnJlbW92ZSgmcmFuZ2UpOwogfQogCiBPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0PiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQpAQCAtNjIyNiw3ICs2MjIyLDcgQEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZFNjaGVkdWxlZFRh
c2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgc3VzcGVuZFNjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlckNhbGxiYWNrcygpOwogICAgIHN1c3BlbmRBY3RpdmVET01PYmplY3Rz
KHJlYXNvbik7Ci0gICAgc2NyaXB0UnVubmVyKCktPnN1c3BlbmQoKTsKKyAgICBzY3JpcHRSdW5u
ZXIoKS5zdXNwZW5kKCk7CiAgICAgbV9wZW5kaW5nVGFza3NUaW1lci5zdG9wKCk7CiAKICNpZiBF
TkFCTEUoWFNMVCkKQEAgLTYyNjAsNyArNjI1Niw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZVNj
aGVkdWxlZFRhc2tzKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgaWYgKCFtX3Bl
bmRpbmdUYXNrcy5pc0VtcHR5KCkpCiAgICAgICAgIG1fcGVuZGluZ1Rhc2tzVGltZXIuc3RhcnRP
bmVTaG90KDBfcyk7Ci0gICAgc2NyaXB0UnVubmVyKCktPnJlc3VtZSgpOworICAgIHNjcmlwdFJ1
bm5lcigpLnJlc3VtZSgpOwogICAgIHJlc3VtZUFjdGl2ZURPTU9iamVjdHMocmVhc29uKTsKICAg
ICByZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICAKQEAg
LTYzMjAsMTYgKzYzMTYsMTYgQEAgdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hQb3BzdGF0ZUV2ZW50
KFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgc3RhdGVPYmplY3QKICAgICBkaXNwYXRj
aFdpbmRvd0V2ZW50KFBvcFN0YXRlRXZlbnQ6OmNyZWF0ZShXVEZNb3ZlKHN0YXRlT2JqZWN0KSwg
bV9kb21XaW5kb3cgPyAmbV9kb21XaW5kb3ctPmhpc3RvcnkoKSA6IG51bGxwdHIpKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lciogbGlzdGVuZXIpCit2b2lkIERvY3VtZW50OjphZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIo
TWVkaWFDYW5TdGFydExpc3RlbmVyJiBsaXN0ZW5lcikKIHsKLSAgICBBU1NFUlQoIW1fbWVkaWFD
YW5TdGFydExpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpOwotICAgIG1fbWVkaWFDYW5TdGFy
dExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworICAgIEFTU0VSVCghbV9tZWRpYUNhblN0YXJ0TGlz
dGVuZXJzLmNvbnRhaW5zKCZsaXN0ZW5lcikpOworICAgIG1fbWVkaWFDYW5TdGFydExpc3RlbmVy
cy5hZGQoJmxpc3RlbmVyKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlTWVkaWFDYW5TdGFy
dExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIpCit2b2lkIERvY3VtZW50
OjpyZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoTWVkaWFDYW5TdGFydExpc3RlbmVyJiBsaXN0
ZW5lcikKIHsKLSAgICBBU1NFUlQobV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLmNvbnRhaW5zKGxp
c3RlbmVyKSk7Ci0gICAgbV9tZWRpYUNhblN0YXJ0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7
CisgICAgQVNTRVJUKG1fbWVkaWFDYW5TdGFydExpc3RlbmVycy5jb250YWlucygmbGlzdGVuZXIp
KTsKKyAgICBtX21lZGlhQ2FuU3RhcnRMaXN0ZW5lcnMucmVtb3ZlKCZsaXN0ZW5lcik7CiB9CiAK
IE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogRG9jdW1lbnQ6OnRha2VBbnlNZWRpYUNhblN0YXJ0TGlz
dGVuZXIoKQpAQCAtNjMzOSwzMCArNjMzNSwyOSBAQCBNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIERv
Y3VtZW50Ojp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkKIAogI2lmIEVOQUJMRShERVZJ
Q0VfT1JJRU5UQVRJT04pICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLURldmljZU1vdGlvbkNv
bnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VNb3Rpb25Db250cm9sbGVyKCkgY29uc3QKK0Rldmlj
ZU1vdGlvbkNvbnRyb2xsZXImIERvY3VtZW50OjpkZXZpY2VNb3Rpb25Db250cm9sbGVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kZXZpY2VNb3Rpb25Db250cm9sbGVyLmdldCgpOworICAgIHJl
dHVybiAqbV9kZXZpY2VNb3Rpb25Db250cm9sbGVyOwogfQogCi1EZXZpY2VPcmllbnRhdGlvbkNv
bnRyb2xsZXIqIERvY3VtZW50OjpkZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKSBjb25zdAor
RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyJiBEb2N1bWVudDo6ZGV2aWNlT3JpZW50YXRpb25D
b250cm9sbGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNvbnRy
b2xsZXIuZ2V0KCk7CisgICAgcmV0dXJuICptX2RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjsK
IH0KIAogdm9pZCBEb2N1bWVudDo6c2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShkb3Vi
bGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEpCiB7CiAgICAgYXV0byBvcmllbnRh
dGlvbiA9IERldmljZU9yaWVudGF0aW9uRGF0YTo6Y3JlYXRlKGFscGhhLCBiZXRhLCBnYW1tYSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgIGRldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlcigpLT5kaWRDaGFuZ2VEZXZpY2VPcmllbnRhdGlvbihvcmllbnRhdGlvbi5wdHIoKSk7Cisg
ICAgZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNlT3JpZW50YXRp
b24ob3JpZW50YXRpb24ucHRyKCkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKIAotYm9vbCBEb2N1bWVudDo6ZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgRG9jdW1lbnQ6OmZ1bGxTY3JlZW5Jc0FsbG93
ZWRGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGVsZW1l
bnQpOwotICAgIHJldHVybiBpc0F0dHJpYnV0ZU9uQWxsT3duZXJzKGFsbG93ZnVsbHNjcmVlbkF0
dHIsIHdlYmtpdGFsbG93ZnVsbHNjcmVlbkF0dHIsIGVsZW1lbnQtPmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCkpOworICAgIHJldHVybiBpc0F0dHJpYnV0ZU9uQWxsT3duZXJzKGFsbG93ZnVsbHNj
cmVlbkF0dHIsIHdlYmtpdGFsbG93ZnVsbHNjcmVlbkF0dHIsIGVsZW1lbnQuZG9jdW1lbnQoKS5v
d25lckVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlIGNoZWNrVHlwZSkK
QEAgLTY0MzEsNyArNjQyNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAKICAgICAgICAg
Ly8gVGhlIGNvbnRleHQgb2JqZWN0J3Mgbm9kZSBkb2N1bWVudCwgb3IgYW4gYW5jZXN0b3IgYnJv
d3NpbmcgY29udGV4dCdzIGRvY3VtZW50IGRvZXMgbm90IGhhdmUKICAgICAgICAgLy8gdGhlIGZ1
bGxzY3JlZW4gZW5hYmxlZCBmbGFnIHNldC4KLSAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBFbmZv
cmNlSUZyYW1lQWxsb3dGdWxsU2NyZWVuUmVxdWlyZW1lbnQgJiYgIWZ1bGxTY3JlZW5Jc0FsbG93
ZWRGb3JFbGVtZW50KGVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgIGlmIChjaGVja1R5cGUgPT0g
RW5mb3JjZUlGcmFtZUFsbG93RnVsbFNjcmVlblJlcXVpcmVtZW50ICYmICFmdWxsU2NyZWVuSXNB
bGxvd2VkRm9yRWxlbWVudCgqZWxlbWVudCkpIHsKICAgICAgICAgICAgIGZhaWxlZFByZWZsaWdo
dHMoV1RGTW92ZShlbGVtZW50KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTY0ODIsOCArNjQ3Nyw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlcXVlc3RGdWxsU2NyZWVuRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50LCBGdWxsU2NyZWVuQ2hlY2tUeXBlCiAgICAgICAgICAgICAv
LyBzdGFjaywgYW5kIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3Jl
ZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgIC8vIHNldCB0
byB0cnVlIG9uIHRoZSBkb2N1bWVudC4KICAgICAgICAgICAgIGlmICghZm9sbG93aW5nRG9jKSB7
Ci0gICAgICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2so
ZWxlbWVudC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5D
aGFuZ2VFdmVudFF1ZXVlKGN1cnJlbnREb2MpOworICAgICAgICAgICAgICAgIGN1cnJlbnREb2Mt
PnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCplbGVtZW50KTsKKyAgICAgICAgICAgICAgICBh
ZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoKmN1cnJlbnREb2MpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC02NDk0LDggKzY0ODks
OCBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgRnVsbFNjcmVlbkNoZWNrVHlwZQogICAgICAgICAgICAgICAgIC8vIC4uLnB1c2gg
Zm9sbG93aW5nIGRvY3VtZW50J3MgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIgb24gZG9jdW1l
bnQncyBmdWxsc2NyZWVuIGVsZW1lbnQKICAgICAgICAgICAgICAgICAvLyBzdGFjaywgYW5kIHF1
ZXVlIGEgdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBp
dHMgYnViYmxlcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdHJ1ZSBvbiBk
b2N1bWVudC4KLSAgICAgICAgICAgICAgICBjdXJyZW50RG9jLT5wdXNoRnVsbHNjcmVlbkVsZW1l
bnRTdGFjayhmb2xsb3dpbmdEb2MtPm93bmVyRWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgICBh
ZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAg
ICAgICAgICAgICAgY3VycmVudERvYy0+cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKmZvbGxv
d2luZ0RvYy0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIGFkZERvY3VtZW50VG9G
dWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTY1NTcsNyArNjU1Miw3IEBAIHZvaWQgRG9j
dW1lbnQ6OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAvLyB0YXNrIHRvIGZpcmUgYW4gZXZl
bnQgbmFtZWQgZnVsbHNjcmVlbmNoYW5nZSB3aXRoIGl0cyBidWJibGVzIGF0dHJpYnV0ZSBzZXQg
dG8gdHJ1ZSBvbiBkZXNjZW5kYW50LgogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBkZXNjZW5k
YW50cykgewogICAgICAgICBkb2N1bWVudC0+Y2xlYXJGdWxsc2NyZWVuRWxlbWVudFN0YWNrKCk7
Ci0gICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZShkb2N1bWVu
dC5nZXQoKSk7CisgICAgICAgIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1
ZSgqZG9jdW1lbnQpOwogICAgIH0KIAogICAgIC8vIDUuIFdoaWxlIGRvYyBpcyBub3QgbnVsbCwg
cnVuIHRoZXNlIHN1YnN0ZXBzOgpAQCAtNjU3NCw3ICs2NTY5LDcgQEAgdm9pZCBEb2N1bWVudDo6
d2Via2l0RXhpdEZ1bGxzY3JlZW4oKQogCiAgICAgICAgIC8vIDIuIFF1ZXVlIGEgdGFzayB0byBm
aXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxzY3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRy
aWJ1dGUgc2V0IHRvIHRydWUKICAgICAgICAgLy8gb24gZG9jLgotICAgICAgICBhZGREb2N1bWVu
dFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVldWUoY3VycmVudERvYyk7CisgICAgICAgIGFkZERv
Y3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1ZSgqY3VycmVudERvYyk7CiAKICAgICAg
ICAgLy8gMy4gSWYgZG9jJ3MgZnVsbHNjcmVlbiBlbGVtZW50IHN0YWNrIGlzIGVtcHR5IGFuZCBk
b2MncyBicm93c2luZyBjb250ZXh0IGhhcyBhIGJyb3dzaW5nIGNvbnRleHQKICAgICAgICAgLy8g
Y29udGFpbmVyLCBzZXQgZG9jIHRvIHRoYXQgYnJvd3NpbmcgY29udGV4dCBjb250YWluZXIncyBu
b2RlIGRvY3VtZW50LgpAQCAtNjYyNiwxMyArNjYyMSwxMSBAQCBzdGF0aWMgdm9pZCB1bndyYXBG
dWxsU2NyZWVuUmVuZGVyZXIoUmVuZGVyRnVsbFNjcmVlbiogZnVsbFNjcmVlblJlbmRlcmVyLCBF
bGVtZQogICAgICAgICBmdWxsU2NyZWVuRWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pbnZhbGlk
YXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6Ondl
YmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lk
IERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmIGVsZW1lbnQpCiB7
CiAgICAgaWYgKCFoYXNMaXZpbmdSZW5kZXJUcmVlKCkgfHwgcGFnZUNhY2hlU3RhdGUoKSAhPSBO
b3RJblBhZ2VDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGVsZW1lbnQpOwot
CiAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBhZnRlciB0aGUgZG9jdW1lbnQg
aGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYWdlLgogICAgIGlmICghcGFnZSgpKQogICAgICAg
ICByZXR1cm47CkBAIC02NjQxLDEzICs2NjM0LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICB1bndy
YXBGdWxsU2NyZWVuUmVuZGVyZXIobV9mdWxsU2NyZWVuUmVuZGVyZXIuZ2V0KCksIG1fZnVsbFNj
cmVlbkVsZW1lbnQuZ2V0KCkpOwogCi0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIGVsZW1lbnQt
PndpbGxCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOworICAgIGVsZW1lbnQud2lsbEJlY29tZUZ1
bGxzY3JlZW5FbGVtZW50KCk7CiAgICAgCi0gICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IGVsZW1l
bnQ7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9ICZlbGVtZW50OwogCiAjaWYgVVNFKE5BVElW
RV9GVUxMU0NSRUVOX1ZJREVPKQotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzTWVkaWFF
bGVtZW50KCkpCisgICAgaWYgKGVsZW1lbnQuaXNNZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuOwogI2VuZGlmCiAKQEAgLTY2NzEsNyArNjY2Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtp
dFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgZGlz
cGF0Y2hGdWxsU2NyZWVuQ2hhbmdlRXZlbnRzKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndlYmtp
dERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopCit2b2lkIERvY3VtZW50Ojp3
ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIGlmICghbV9mdWxsU2NyZWVuRWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjY4Miw3ICs2Njc0LDcgQEAgdm9pZCBEb2N1bWVudDo6
d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KikKICAgICBtX2Z1bGxT
Y3JlZW5FbGVtZW50LT5kaWRCZWNvbWVGdWxsc2NyZWVuRWxlbWVudCgpOwogfQogCi12b2lkIERv
Y3VtZW50Ojp3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQqKQordm9p
ZCBEb2N1bWVudDo6d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fZnVs
bFNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTY2OTMsNyArNjY4NSw3IEBAIHZv
aWQgRG9jdW1lbnQ6OndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCop
CiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+d2lsbFN0b3BCZWluZ0Z1bGxzY3JlZW5FbGVtZW50
KCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVu
dChFbGVtZW50KikKK3ZvaWQgRG9jdW1lbnQ6OndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCkKIHsK
ICAgICBpZiAoIW1fZnVsbFNjcmVlbkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTY4NDUs
MTkgKzY4MzcsMTggQEAgdm9pZCBEb2N1bWVudDo6cG9wRnVsbHNjcmVlbkVsZW1lbnRTdGFjaygp
CiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotdm9pZCBE
b2N1bWVudDo6cHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVudCogZWxlbWVudCkKK3Zv
aWQgRG9jdW1lbnQ6OnB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVsZW1lbnQmIGVsZW1lbnQp
CiB7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZChlbGVtZW50KTsKKyAgICBt
X2Z1bGxTY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKCZlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6YWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERvY3VtZW50KiBk
b2MpCit2b2lkIERvY3VtZW50OjphZGREb2N1bWVudFRvRnVsbFNjcmVlbkNoYW5nZUV2ZW50UXVl
dWUoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIEFTU0VSVChkb2MpOwotICAgIE5vZGUqIHRh
cmdldCA9IGRvYy0+d2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsKKyAgICBOb2RlKiB0YXJnZXQg
PSBkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpOwogICAgIGlmICghdGFyZ2V0KQot
ICAgICAgICB0YXJnZXQgPSBkb2MtPndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpOwor
ICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQo
KTsKICAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gZG9jOworICAgICAgICB0YXJn
ZXQgPSAmZG9jdW1lbnQ7CiAgICAgbV9mdWxsU2NyZWVuQ2hhbmdlRXZlbnRUYXJnZXRRdWV1ZS5h
cHBlbmQodGFyZ2V0KTsKIH0KIApAQCAtNzIwOSw3ICs3MjAwLDcgQEAgRWxlbWVudCogZXZlbnRU
YXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBkb2N1bWVudC0+Zm9jdXNlZEVsZW1lbnQoKTsKICAgICBpZiAoIWVsZW1lbnQg
JiYgaXM8UGx1Z2luRG9jdW1lbnQ+KCpkb2N1bWVudCkpCiAgICAgICAgIGVsZW1lbnQgPSBkb3du
Y2FzdDxQbHVnaW5Eb2N1bWVudD4oKmRvY3VtZW50KS5wbHVnaW5FbGVtZW50KCk7Ci0gICAgaWYg
KCFlbGVtZW50ICYmIGlzPEhUTUxEb2N1bWVudD4oKmRvY3VtZW50KSkKKyAgICBpZiAoIWVsZW1l
bnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIGVsZW1lbnQgPSBkb2N1
bWVudC0+Ym9keU9yRnJhbWVzZXQoKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIGVsZW1l
bnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CkBAIC03MjgzLDcgKzcyNzQsNyBAQCBE
b2N1bWVudFBhcnNlcllpZWxkVG9rZW46OkRvY3VtZW50UGFyc2VyWWllbGRUb2tlbihEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgaWYgKCsrZG9jdW1lbnQubV9wYXJzZXJZaWVsZFRva2VuQ291bnQg
IT0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPmRp
ZEJlZ2luWWllbGRpbmdQYXJzZXIoKTsKKyAgICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS5kaWRC
ZWdpbllpZWxkaW5nUGFyc2VyKCk7CiAgICAgaWYgKGF1dG8qIHBhcnNlciA9IGRvY3VtZW50LnBh
cnNlcigpKQogICAgICAgICBwYXJzZXItPmRpZEJlZ2luWWllbGRpbmdQYXJzZXIoKTsKIH0KQEAg
LTcyOTcsNyArNzI4OCw3IEBAIERvY3VtZW50UGFyc2VyWWllbGRUb2tlbjo6fkRvY3VtZW50UGFy
c2VyWWllbGRUb2tlbigpCiAgICAgaWYgKC0tbV9kb2N1bWVudC0+bV9wYXJzZXJZaWVsZFRva2Vu
Q291bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZG9jdW1lbnQtPnNjcmlwdFJ1bm5lcigp
LT5kaWRFbmRZaWVsZGluZ1BhcnNlcigpOworICAgIG1fZG9jdW1lbnQtPnNjcmlwdFJ1bm5lcigp
LmRpZEVuZFlpZWxkaW5nUGFyc2VyKCk7CiAgICAgaWYgKGF1dG8qIHBhcnNlciA9IG1fZG9jdW1l
bnQtPnBhcnNlcigpKQogICAgICAgICBwYXJzZXItPmRpZEVuZFlpZWxkaW5nUGFyc2VyKCk7CiB9
CkBAIC03Mzg3LDcgKzczNzgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0
YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBFbGVtZW50KiBpbgogICAgICAgICBm
b3IgKGF1dG8qIGVsZW1lbnQgPSBvbGRIb3ZlcmVkRWxlbWVudC5nZXQoKTsgZWxlbWVudDsgZWxl
bWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnRJbkNvbXBvc2VkVHJlZSgpKSB7CiAgICAgICAg
ICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25BbmNlc3RvcikKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBlbGVtZW50LT5pbkFj
dGl2ZUNoYWluKCkpCisgICAgICAgICAgICBpZiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgZWxl
bWVudC0+aXNJbkFjdGl2ZUNoYWluKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92
ZUZyb21DaGFpbi5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gVW5zZXQg
aG92ZXJlZCBub2RlcyBpbiBzdWIgZnJhbWUgZG9jdW1lbnRzIGlmIHRoZSBvbGQgaG92ZXJlZCBu
b2RlIHdhcyBhIGZyYW1lIG93bmVyLgpAQCAtNzM5OCw3ICs3Mzg5LDcgQEAgdm9pZCBEb2N1bWVu
dDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
RWxlbWVudCogaW4KICAgICB9CiAKICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgPSBuZXdIb3ZlcmVk
RWxlbWVudDsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnRJbkNvbXBv
c2VkVHJlZSgpKSB7Ci0gICAgICAgIGlmICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBlbGVtZW50
LT5pbkFjdGl2ZUNoYWluKCkpCisgICAgICAgIGlmICghbXVzdEJlSW5BY3RpdmVDaGFpbiB8fCBl
bGVtZW50LT5pc0luQWN0aXZlQ2hhaW4oKSkKICAgICAgICAgICAgIGVsZW1lbnRzVG9BZGRUb0No
YWluLmFwcGVuZChlbGVtZW50KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzA4
OTI5ZTQ3ZjY4M2ZjODY4Zjc4MGY3NmExODQ1ZDY3OGYwNWJmYy4uOWM4YzA3OGZmNWRiMjNiNzU2
ZGQ4NjYxYWIzMWRhY2Y4NGVmODgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTc3Myw4ICs3
NzMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGp1c3RGb2N1c2VkTm9kZU9uTm9kZVJlbW92YWwo
Tm9kZSYsIE5vZGVSZW1vdmFsID0gTm9kZVJlbW92YWw6Ok5vZGUpOwogICAgIHZvaWQgYWRqdXN0
Rm9jdXNOYXZpZ2F0aW9uTm9kZU9uTm9kZVJlbW92YWwoTm9kZSYsIE5vZGVSZW1vdmFsID0gTm9k
ZVJlbW92YWw6Ok5vZGUpOwogCi0gICAgdm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVt
ZW50Kik7Ci0gICAgdm9pZCBlbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Kik7
CisgICAgdm9pZCBob3ZlcmVkRWxlbWVudERpZERldGFjaChFbGVtZW50Jik7CisgICAgdm9pZCBl
bGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaChFbGVtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0
ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBFbGVtZW50Kik7CiAKQEAg
LTgwMSwxNiArODAxLDE2IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW52YWxp
ZGF0aW9uRnVuY3Rpb24+CiAgICAgdm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q2FjaGVzKEludmFsaWRhdGlvbkZ1bmN0aW9uKTsKIAotICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJh
dG9yKE5vZGVJdGVyYXRvciopOwotICAgIHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVy
YXRvciopOworICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOworICAg
IHZvaWQgZGV0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciYpOwogICAgIHZvaWQgbW92ZU5v
ZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50KE5vZGUmIG5vZGUsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKICAgICB7CiAgICAgICAgIGlmICghbV9ub2RlSXRlcmF0b3JzLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIG1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1bWVudFNsb3dDYXNlKG5vZGUsIG5ld0Rv
Y3VtZW50KTsKICAgICB9CiAKLSAgICB2b2lkIGF0dGFjaFJhbmdlKFJhbmdlKik7Ci0gICAgdm9p
ZCBkZXRhY2hSYW5nZShSYW5nZSopOworICAgIHZvaWQgYXR0YWNoUmFuZ2UoUmFuZ2UmKTsKKyAg
ICB2b2lkIGRldGFjaFJhbmdlKFJhbmdlJik7CiAKICAgICB2b2lkIHVwZGF0ZVJhbmdlc0FmdGVy
Q2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmKTsKICAgICAvLyBub2RlQ2hpbGRyZW5XaWxs
QmVSZW1vdmVkIGlzIHVzZWQgd2hlbiByZW1vdmluZyBhbGwgbm9kZSBjaGlsZHJlbiBhdCBvbmNl
LgpAQCAtODIxLDEzICs4MjEsMTMgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgQWNjZXB0Q2hp
bGRPcGVyYXRpb24geyBSZXBsYWNlLCBJbnNlcnRPckFkZCB9OwogICAgIGJvb2wgY2FuQWNjZXB0
Q2hpbGQoY29uc3QgTm9kZSYgbmV3Q2hpbGQsIGNvbnN0IE5vZGUqIHJlZkNoaWxkLCBBY2NlcHRD
aGlsZE9wZXJhdGlvbikgY29uc3Q7CiAKLSAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlKiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9k
ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB2b2lkIHRleHROb2Rl
c01lcmdlZChUZXh0KiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIHZvaWQgdGV4dE5v
ZGVTcGxpdChUZXh0KiBvbGROb2RlKTsKKyAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlJiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9k
ZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHROb2Rl
c01lcmdlZChUZXh0JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIHZvaWQgdGV4dE5v
ZGVTcGxpdChUZXh0JiBvbGROb2RlKTsKIAogICAgIHZvaWQgY3JlYXRlRE9NV2luZG93KCk7Ci0g
ICAgdm9pZCB0YWtlRE9NV2luZG93RnJvbShEb2N1bWVudCopOworICAgIHZvaWQgdGFrZURPTVdp
bmRvd0Zyb20oRG9jdW1lbnQmKTsKIAogICAgIERPTVdpbmRvdyogZG9tV2luZG93KCkgY29uc3Qg
eyByZXR1cm4gbV9kb21XaW5kb3cuZ2V0KCk7IH0KICAgICAvLyBJbiBET00gTGV2ZWwgMiwgdGhl
IERvY3VtZW50J3MgRE9NV2luZG93IGlzIGNhbGxlZCB0aGUgZGVmYXVsdFZpZXcuCkBAIC05MDYs
NyArOTA2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBSZXR1cm5zIHRoZSBvd25pbmcg
ZWxlbWVudCBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgIC8vIFJldHVybnMgMCBpZiB0aGlz
IGlzIHRoZSB0b3AgbGV2ZWwgZG9jdW1lbnQuCisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRo
aXMgaXMgdGhlIHRvcCBsZXZlbCBkb2N1bWVudC4KICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyRWxlbWVudCgpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBET00gYmluZGluZ3M7IG5v
IGRpcmVjdGlvbiBrbm93bi4KQEAgLTEwMTgsOCArMTAxOCw4IEBAIHB1YmxpYzoKICAgICBEb2N1
bWVudCogcGFyZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVu
dCYgdG9wRG9jdW1lbnQoKSBjb25zdDsKICAgICAKLSAgICBTY3JpcHRSdW5uZXIqIHNjcmlwdFJ1
bm5lcigpIHsgcmV0dXJuIG1fc2NyaXB0UnVubmVyLmdldCgpOyB9Ci0gICAgU2NyaXB0TW9kdWxl
TG9hZGVyKiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiBtX21vZHVsZUxvYWRlci5nZXQoKTsgfQor
ICAgIFNjcmlwdFJ1bm5lciYgc2NyaXB0UnVubmVyKCkgeyByZXR1cm4gKm1fc2NyaXB0UnVubmVy
OyB9CisgICAgU2NyaXB0TW9kdWxlTG9hZGVyJiBtb2R1bGVMb2FkZXIoKSB7IHJldHVybiAqbV9t
b2R1bGVMb2FkZXI7IH0KIAogICAgIEhUTUxTY3JpcHRFbGVtZW50KiBjdXJyZW50U2NyaXB0KCkg
Y29uc3QgeyByZXR1cm4gIW1fY3VycmVudFNjcmlwdFN0YWNrLmlzRW1wdHkoKSA/IG1fY3VycmVu
dFNjcmlwdFN0YWNrLmxhc3QoKS5nZXQoKSA6IG51bGxwdHI7IH0KICAgICB2b2lkIHB1c2hDdXJy
ZW50U2NyaXB0KEhUTUxTY3JpcHRFbGVtZW50Kik7CkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzY2hlZHVsZVRvQXBwbHlYU0xUcmFuc2Zvcm1zKCk7CiAgICAgdm9pZCBh
cHBseVBlbmRpbmdYU0xUcmFuc2Zvcm1zTm93SWZTY2hlZHVsZWQoKTsKICAgICBSZWZQdHI8RG9j
dW1lbnQ+IHRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkgeyByZXR1cm4gbV90cmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudDsgfQotICAgIHZvaWQgc2V0VHJhbnNmb3JtU291cmNlRG9jdW1lbnQoRG9jdW1l
bnQqIGRvYykgeyBtX3RyYW5zZm9ybVNvdXJjZURvY3VtZW50ID0gZG9jOyB9CisgICAgdm9pZCBz
ZXRUcmFuc2Zvcm1Tb3VyY2VEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpIHsgbV90cmFuc2Zv
cm1Tb3VyY2VEb2N1bWVudCA9IGRvY3VtZW50OyB9CiAKICAgICB2b2lkIHNldFRyYW5zZm9ybVNv
dXJjZShzdGQ6OnVuaXF1ZV9wdHI8VHJhbnNmb3JtU291cmNlPik7CiAgICAgVHJhbnNmb3JtU291
cmNlKiB0cmFuc2Zvcm1Tb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybVNvdXJjZS5n
ZXQoKTsgfQpAQCAtMTA3NSwxNyArMTA3NSwxNSBAQCBwdWJsaWM6CiAgICAgUGFnZUNhY2hlU3Rh
dGUgcGFnZUNhY2hlU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VDYWNoZVN0YXRlOyB9CiAg
ICAgdm9pZCBzZXRQYWdlQ2FjaGVTdGF0ZShQYWdlQ2FjaGVTdGF0ZSk7CiAKLSAgICAvLyBFbGVt
ZW50cyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyBmb3IgdGhlICJzdXNwZW5kKCkiIGFuZAotICAg
IC8vICJyZXN1bWUoKSIgY2FsbGJhY2tzCi0gICAgdm9pZCByZWdpc3RlckZvckRvY3VtZW50U3Vz
cGVuc2lvbkNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKEVsZW1lbnQmKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoRWxlbWVudCYpOwogCiAgICAgdm9pZCBkb2N1
bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOwogICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNw
ZW5zaW9uKTsKICAgICB2b2lkIHJlc3VtZShSZWFzb25Gb3JTdXNwZW5zaW9uKTsKIAotICAgIHZv
aWQgcmVnaXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCopOworICAgIHZvaWQgcmVn
aXN0ZXJGb3JNZWRpYVZvbHVtZUNhbGxiYWNrcyhFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lz
dGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgbWVkaWFWb2x1
bWVEaWRDaGFuZ2UoKTsKIAogICAgIGJvb2wgYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSBjb25zdDsKQEAgLTEwOTUsMjggKzEwOTMsMjggQEAgcHVibGljOgogICAgIE1lZGlhU2Vz
c2lvbiYgZGVmYXVsdE1lZGlhU2Vzc2lvbigpOwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVy
Rm9yUHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKEVsZW1lbnQqKTsKLSAgICB2
b2lkIHVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoRWxl
bWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRD
YWxsYmFja3MoRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclByaXZhdGVCcm93c2lu
Z1N0YXRlQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Jik7CiAgICAgdm9pZCBzdG9yYWdlQmxvY2tp
bmdTdGF0ZURpZENoYW5nZSgpOwogICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFu
Z2UoKTsKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIHJlZ2lzdGVyRm9yQ2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcyhFbGVtZW50Kik7Cisg
ICAgdm9pZCByZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MoRWxl
bWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRD
YWxsYmFja3MoRWxlbWVudCYpOwogICAgIHZvaWQgY2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQotICAgIHZvaWQg
cmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKEhUTUxNZWRpYUVsZW1l
bnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJh
Y2tzKEhUTUxNZWRpYUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CisgICAgdm9pZCB1bnJlZ2lz
dGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7
CiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgdm9pZCBy
ZWdpc3RlckZvclVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkQ2FsbGJhY2tzKEhU
TUxNZWRpYUVsZW1lbnQmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcyhIVE1MTWVkaWFFbGVtZW50Jik7CiAgICAgdm9p
ZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwogI2VuZGlmCiAKLSAgICB2
b2lkIHJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5
Q2hhbmdlQ2xpZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZENhbGxiYWNrcyhWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Kik7CisgICAgdm9pZCByZWdpc3Rl
ckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVu
dCYpOworICAgIHZvaWQgdW5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFj
a3MoVmlzaWJpbGl0eUNoYW5nZUNsaWVudCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZv
aWQgcmVnaXN0ZXJGb3JBbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkQ2Fs
bGJhY2tzKEhUTUxNZWRpYUVsZW1lbnQmKTsKQEAgLTExNzcsOCArMTE3NSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpc3BhdGNoUG9wc3RhdGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiYmIHN0YXRlT2JqZWN0KTsKICAgICBEb2N1bWVudEV2ZW50UXVldWUmIGV2ZW50UXVldWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2V2ZW50UXVldWU7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciop
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lciopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciYpOwogICAgIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogdGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0
ZW5lcigpOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpAQCAtMTE5NSwxNiArMTE5Mywx
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVu
dCosIEZ1bGxTY3JlZW5DaGVja1R5cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0
Q2FuY2VsRnVsbFNjcmVlbigpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0
V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCopOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgd2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50Kik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KEVsZW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdlYmtpdERpZEV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXRX
aWxsRW50ZXJGdWxsU2NyZWVuKEVsZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHdl
YmtpdERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgd2Via2l0
V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3ZWJraXREaWRF
eGl0RnVsbFNjcmVlbigpOwogICAgIAogICAgIHZvaWQgc2V0RnVsbFNjcmVlblJlbmRlcmVyKFJl
bmRlclRyZWVCdWlsZGVyJiwgUmVuZGVyRnVsbFNjcmVlbiYpOwogICAgIFJlbmRlckZ1bGxTY3Jl
ZW4qIGZ1bGxTY3JlZW5SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNjcmVlblJlbmRl
cmVyLmdldCgpOyB9CiAKICAgICB2b2lkIGRpc3BhdGNoRnVsbFNjcmVlbkNoYW5nZUV2ZW50cygp
OwotICAgIGJvb2wgZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoRWxlbWVudCopIGNvbnN0
OworICAgIGJvb2wgZnVsbFNjcmVlbklzQWxsb3dlZEZvckVsZW1lbnQoRWxlbWVudCYpIGNvbnN0
OwogICAgIHZvaWQgZnVsbFNjcmVlbkVsZW1lbnRSZW1vdmVkKCk7CiAgICAgdm9pZCBhZGp1c3RG
dWxsU2NyZWVuRWxlbWVudE9uTm9kZVJlbW92YWwoTm9kZSYsIE5vZGVSZW1vdmFsID0gTm9kZVJl
bW92YWw6Ok5vZGUpOwogCkBAIC0xMjM1LDggKzEyMzMsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZGV2aWNlTW90aW9uQ29udHJvbGxlcigpIGNvbnN0
OwotICAgIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogZGV2aWNlT3JpZW50YXRpb25Db250
cm9sbGVyKCkgY29uc3Q7CisgICAgRGV2aWNlTW90aW9uQ29udHJvbGxlciYgZGV2aWNlTW90aW9u
Q29udHJvbGxlcigpIGNvbnN0OworICAgIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciYgZGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJl
dGEsIGRvdWJsZSBnYW1tYSk7CiAjZW5kaWYKIApAQCAtMTM4MCw4ICsxMzc4LDggQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzU3R5bGVXaXRoVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzU3R5bGVXaXRoVmlld3BvcnRVbml0czsgfQogICAgIHZvaWQgdXBkYXRlVmlld3BvcnRVbml0
c09uUmVzaXplKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEF1ZGlvUHJvZHVjZXIo
TWVkaWFQcm9kdWNlciopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQXVkaW9Qcm9k
dWNlcihNZWRpYVByb2R1Y2VyKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRBdWRpb1By
b2R1Y2VyKE1lZGlhUHJvZHVjZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUF1
ZGlvUHJvZHVjZXIoTWVkaWFQcm9kdWNlciYpOwogICAgIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3Rh
dGVGbGFncyBtZWRpYVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlOyB9CiAgICAg
dm9pZCBub3RlVXNlckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwogICAgIGJvb2wgaXND
YXB0dXJpbmcoKSBjb25zdCB7IHJldHVybiBNZWRpYVByb2R1Y2VyOjppc0NhcHR1cmluZyhtX21l
ZGlhU3RhdGUpOyB9CkBAIC0xNTk5LDcgKzE1OTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlQmFz
ZVVSTCgpOwogCi0gICAgdm9pZCBidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHJvb3QpOwor
ICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjb3BlJiByb290KTsKIAogICAgIHZvaWQg
bW92ZU5vZGVJdGVyYXRvcnNUb05ld0RvY3VtZW50U2xvd0Nhc2UoTm9kZSYsIERvY3VtZW50Jik7
CiAKQEAgLTE2MTYsOCArMTYxNCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaEZ1bGxT
Y3JlZW5DaGFuZ2VPckVycm9yRXZlbnQoRGVxdWU8UmVmUHRyPE5vZGU+PiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnROYW1lLCBib29sIHNob3VsZE5vdGlmeU1lZGlhRWxlbWVudCk7CiAgICAg
dm9pZCBjbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKICAgICB2b2lkIHBvcEZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2soKTsKLSAgICB2b2lkIHB1c2hGdWxsc2NyZWVuRWxlbWVudFN0YWNrKEVs
ZW1lbnQqKTsKLSAgICB2b2lkIGFkZERvY3VtZW50VG9GdWxsU2NyZWVuQ2hhbmdlRXZlbnRRdWV1
ZShEb2N1bWVudCopOworICAgIHZvaWQgcHVzaEZ1bGxzY3JlZW5FbGVtZW50U3RhY2soRWxlbWVu
dCYpOworICAgIHZvaWQgYWRkRG9jdW1lbnRUb0Z1bGxTY3JlZW5DaGFuZ2VFdmVudFF1ZXVlKERv
Y3VtZW50Jik7CiAjZW5kaWYKIAogICAgIHZvaWQgZGlzcGF0Y2hEaXNhYmxlZEFkYXB0YXRpb25z
RGlkQ2hhbmdlRm9yTWFpbkZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDViMDg2MzBjMzMwMGI5YTc5MDJmYTdiY2JlMjJk
NmUxYzJjNjZjMTQuLjViYmNiODAzZTI3YjdlNTIwMzUwZWJiMGVmYjBmMjg2MWU5ZGUyN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBA
IC02MCw5OSArNjAsOTkgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmRldGFjaCgp
CiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMgPSB7IH07CiB9CiAKLXZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQordm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCiB7Ci0g
ICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2Vk
VGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
ewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsK
LSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50
TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZz
ZXQoKSwgZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRD
b250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgp
LCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlvbikpOwogICAgIH0KIH0KIAotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyKFJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlw
ZSkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRl
eHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRv
ciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2
YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5y
YW5nZSgpOwotICAgICAgICBhZGRNYXJrZXIoJnRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2Ut
PmVuZE9mZnNldCgpKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFp
bmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4
dFBpZWNlLT5lbmRPZmZzZXQoKSkpOwogICAgIH0KIAogfQogCi12b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCit2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUmIG5vZGUs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUpCiB7CiAgICAgYWRkTWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5
cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIGxlbmd0aCkpOwogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUqIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9j
dW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQogewogICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgsIFdURk1vdmUo
ZGF0YSkpKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRj
aE1hcmtlcihjb25zdCBSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5n
ZSwgYm9vbCBhY3RpdmVNYXRjaCkKIHsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0
KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKKyAg
ICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7ICFtYXJrZWRUZXh0LmF0RW5k
KCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGV4dFBp
ZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
dGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0
YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFj
dGl2ZU1hdGNoKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIERvY3VtZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZU1hdGNoKSk7
CiAgICAgfQogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4mIG1ldGFkYXRhKQor
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxp
ZD4mIG1ldGFkYXRhKQogewotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQocmFuZ2Up
OyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkgeworICAgIGZvciAo
VGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFy
a2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UGllY2UgPSBt
YXJrZWRUZXh0LnJhbmdlKCk7Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENv
bnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCks
IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uLCBpbnRlcnByZXRhdGlvbnMsIG1l
dGFkYXRhKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCks
IERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNl
LT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVycHJldGF0aW9ucywgbWV0YWRhdGEpKTsK
ICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlKiByYW5nZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGludGVycHJldGF0aW9ucykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjph
ZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiByYW5nZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucykKIHsKICAgICBBU1NFUlQoaW50ZXJw
cmV0YXRpb25zLnNpemUoKSA+IDEpOwogICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpIDw9
IDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNpemVfdCBudW1iZXJPZkFsdGVybmF0aXZlcyA9
IGludGVycHJldGF0aW9ucy5zaXplKCkgLSAxOwotICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtl
ZFRleHQocmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFuY2UoKSkg
eworICAgIGZvciAoVGV4dEl0ZXJhdG9yIG1hcmtlZFRleHQoJnJhbmdlKTsgIW1hcmtlZFRleHQu
YXRFbmQoKTsgbWFya2VkVGV4dC5hZHZhbmNlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0
ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIERvY3VtZW50TWFya2VyIG1h
cmtlcihEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgdGV4
dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBlbXB0eVN0cmlu
ZygpLCBWZWN0b3I8U3RyaW5nPihudW1iZXJPZkFsdGVybmF0aXZlcyksIFJldGFpblB0cjxpZD4o
KSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZBbHRlcm5hdGl2ZXM7
ICsraSkKICAgICAgICAgICAgIG1hcmtlci5zZXRBbHRlcm5hdGl2ZShpbnRlcnByZXRhdGlvbnNb
aSArIDFdLCBpKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIG1hcmtlcik7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIG1hcmtlcik7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlKiByYW5nZSwgY29uc3QgUmV0YWluUHRyPGlk
PiYgbWV0YWRhdGEpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9u
UmVzdWx0TWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEp
CiB7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgbWFya2VkVGV4dChyYW5nZSk7ICFtYXJrZWRUZXh0
LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3Ig
bWFya2VkVGV4dCgmcmFuZ2UpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRUZXh0LmFkdmFu
Y2UoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFu
Z2UoKTsKLSAgICAgICAgYWRkTWFya2VyKCZ0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERv
Y3VtZW50TWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHRleHRQaWVjZS0+
c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgU3RyaW5nKCksIFZlY3RvcjxT
dHJpbmc+KCksIG1ldGFkYXRhKSk7CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0
Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1
bHQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgU3Ry
aW5nKCksIFZlY3RvcjxTdHJpbmc+KCksIG1ldGFkYXRhKSk7CiAgICAgfQogfQogCiAjZW5kaWYK
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2Vy
KFJlZlB0cjxSYW5nZT4gcmFuZ2UpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
RHJhZ2dlZENvbnRlbnRNYXJrZXIoUmFuZ2UmIHJhbmdlKQogewotICAgIGZvciAoVGV4dEl0ZXJh
dG9yIG1hcmtlZFRleHQocmFuZ2UuZ2V0KCkpOyAhbWFya2VkVGV4dC5hdEVuZCgpOyBtYXJrZWRU
ZXh0LmFkdmFuY2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtl
ZFRleHQucmFuZ2UoKTsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5nZSk7
ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CisgICAgICAgIGF1
dG8gdGV4dFBpZWNlID0gbWFya2VkVGV4dC5yYW5nZSgpOwogICAgICAgICBEb2N1bWVudE1hcmtl
cjo6RHJhZ2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250ZW50RGF0YSB7IG1hcmtlZFRleHQubm9k
ZSgpIH07Ci0gICAgICAgIGFkZE1hcmtlcigmdGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7
IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgp
LCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBXVEZNb3ZlKGRyYWdnZWRDb250ZW50RGF0YSkgfSk7
CisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1l
bnRNYXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQ
aWVjZS0+ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRhKSB9KTsKICAgICB9
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdl
KiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBl
cywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0
aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpy
ZW1vdmVNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5v
dCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKIHsKLSAgICBmb3IgKFRl
eHRJdGVyYXRvciBtYXJrZWRUZXh0KHJhbmdlKTsgIW1hcmtlZFRleHQuYXRFbmQoKTsgbWFya2Vk
VGV4dC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBtYXJrZWRUZXh0KCZyYW5n
ZSk7ICFtYXJrZWRUZXh0LmF0RW5kKCk7IG1hcmtlZFRleHQuYWR2YW5jZSgpKSB7CiAgICAgICAg
IGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHRleHRQaWVjZSA9IG1hcmtlZFRleHQucmFuZ2UoKTsKKyAgICAgICAgYXV0byB0
ZXh0UGllY2UgPSBtYXJrZWRUZXh0LnJhbmdlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0ID0gdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpOwogICAgICAgICB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNldCgpOwotICAgICAgICByZW1vdmVNYXJrZXJzKCZ0ZXh0
UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9m
ZnNldCwgbWFya2VyVHlwZXMsIHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKKyAgICAgICAgcmVtb3ZlTWFya2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIHNob3VsZFJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICAgICB9CiB9CiAKQEAgLTMxNSwxMyAr
MzE1LDEzIEBAIHN0YXRpYyBib29sIHNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIoY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG5ld01hcmtlcikKIC8vIE1hcmtlcnMgYXJlIHN0b3JlZCBpbiBvcmRl
ciBzb3J0ZWQgYnkgdGhlaXIgc3RhcnQgb2Zmc2V0LgogLy8gTWFya2VycyBvZiB0aGUgc2FtZSB0
eXBlIGRvIG5vdCBvdmVybGFwIGVhY2ggb3RoZXIuCiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01h
cmtlcikgCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5v
ZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiB7CiAgICAgQVNTRVJUKG5ld01h
cmtlci5lbmRPZmZzZXQoKSA+PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSk7CiAgICAgaWYgKG5l
d01hcmtlci5lbmRPZmZzZXQoKSA9PSBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkgewor
ICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkgewogICAgICAgICAvLyBG
SVhNRTogRmFjdG9yIHRoZSBtYXJrZXIgcGFpbnRpbmcgY29kZSBvdXQgb2YgSW5saW5lVGV4dEJv
eCBhbmQgdGVhY2ggc2ltcGxlIGxpbmUgbGF5b3V0IHRvIHVzZSBpdC4KICAgICAgICAgaWYgKGlz
PFJlbmRlclRleHQ+KCpyZW5kZXJlcikpCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0
PigqcmVuZGVyZXIpLmVuc3VyZUxpbmVCb3hlcygpOwpAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwgY29uc3QgRG9j
dW1lbnRNYXJrZXImIG5ld01hCiAKICAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5h
ZGQobmV3TWFya2VyLnR5cGUoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4m
IGxpc3QgPSBtX21hcmtlcnMuYWRkKG5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2Rl
LCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKICAgICAgICAg
bGlzdCA9IHN0ZDo6bWFrZV91bmlxdWU8TWFya2VyTGlzdD4oKTsKQEAgLTM4NiwxNSArMzg2LDE1
IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSogbm9kZSwg
Y29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5k
ZXJlZERvY3VtZW50TWFya2VyKHRvSW5zZXJ0KSk7CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAo
bm9kZS5yZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIAot
ICAgIGludmFsaWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgIGludmFsaWRh
dGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKIC8vIGNvcGllcyBtYXJrZXJzIGZy
b20gc3JjTm9kZSB0byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRh
IHRvIHRoZSBjb3BpZXMuICBUaGUgc2hpZnQgaXMKIC8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNh
bGxlciBoYXMgY3JlYXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcg
b2YgdGhlIHNyY05vZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtl
cnMoTm9kZSogc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUq
IGRzdE5vZGUsIGludCBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5
TWFya2VycyhOb2RlJiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwg
Tm9kZSYgZHN0Tm9kZSwgaW50IGRlbHRhKQogewogICAgIGlmIChsZW5ndGggPD0gMCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwKICAg
ICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChzcmNOb2RlKTsKKyAgICBNYXJrZXJMaXN0
KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmc3JjTm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAg
ICByZXR1cm47CiAKQEAgLTQyOSwxMSArNDI5LDExIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwK
ICAgICAgICAgYWRkTWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CiAgICAgfQogCi0gICAgaWYgKGRv
Y0RpcnR5ICYmIGRzdE5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIGRzdE5vZGUtPnJlbmRlcmVy
KCktPnJlcGFpbnQoKTsKKyAgICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS5yZW5kZXJlcigpKQor
ICAgICAgICBkc3ROb2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hv
dWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgaW50IGxlbmd0aCwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJr
ZXJUeXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKIHsKICAgICBpZiAobGVuZ3RoIDw9IDApCiAg
ICAgICAgIHJldHVybjsKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
aQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCEobV9tYXJrZXJzLmlzRW1wdHkoKSkpOwog
Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgTWFya2Vy
TGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC00ODksMTMgKzQ4OSwxMyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
aQogICAgIH0KIAogICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9tYXJrZXJz
LnJlbW92ZShub2RlKTsKKyAgICAgICAgbV9tYXJrZXJzLnJlbW92ZSgmbm9kZSk7CiAgICAgICAg
IGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5n
TWFya2VyVHlwZXMgPSB7IH07CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUtPnJl
bmRlcmVyKCkpCi0gICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAo
ZG9jRGlydHkgJiYgbm9kZS5yZW5kZXJlcigpKQorICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJl
cGFpbnQoKTsKIH0KIAogRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKQEAgLTU2MywxMyArNTYzLDEzIEBAIFZlY3Rv
cjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJr
ZXJzSW5SYW5nZShSYW5nZSYKICAgICByZXR1cm4gZm91bmRNYXJrZXJzOwogfQogCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQordm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
IW1fbWFya2Vycy5pc0VtcHR5KCkpOwogICAgIAotICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtl
cnMuZmluZChub2RlKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9tYXJrZXJzLmZpbmQoJm5vZGUp
OwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkpCiAgICAgICAgIHJlbW92ZU1h
cmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMpOwogfQpAQCAtNjU4LDEzICs2NTgs
MTMgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHkKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGludCBkZWx0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1h
cmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBkZWx0YSkKIHsKICAg
ICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBNYXJrZXJMaXN0
KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGludCB0YXJnZXRTdGFydE9mZnNldCA9IG1h
cmtlci5zdGFydE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIGludCB0YXJnZXRFbmRPZmZzZXQg
PSBtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAgICAgaWYgKHRhcmdldFN0YXJ0T2Zm
c2V0ID49IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAw
KSB7CisgICAgICAgIGlmICh0YXJnZXRTdGFydE9mZnNldCA+PSBub2RlLm1heENoYXJhY3Rlck9m
ZnNldCgpIHx8IHRhcmdldEVuZE9mZnNldCA8PSAwKSB7CiAgICAgICAgICAgICBsaXN0LT5yZW1v
dmUoaSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNjk0LDcgKzY5NCw3
IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGluCiAgICAgICAgICAgICAgICAgbGlzdC0+cmVtb3Zl
KGkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbWFya2VyLnNldEVuZE9mZnNldCh0YXJnZXRFbmRPZmZzZXQgPCBub2RlLT5tYXhDaGFyYWN0
ZXJPZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgp
KTsKKyAgICAgICAgICAgIG1hcmtlci5zZXRFbmRPZmZzZXQodGFyZ2V0RW5kT2Zmc2V0IDwgbm9k
ZS5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA/IHRhcmdldEVuZE9mZnNldCA6IG5vZGUubWF4Q2hhcmFj
dGVyT2Zmc2V0KCkpOwogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAg
ICB9CiAjZW5kaWYKQEAgLTcwMiwzNCArNzAyLDM0IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGlu
CiAgICAgfQogCiAgICAgaWYgKGRpZFNoaWZ0TWFya2VyKSB7Ci0gICAgICAgIGludmFsaWRhdGVS
ZWN0c0Zvck1hcmtlcnNJbk5vZGUoKm5vZGUpOworICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JN
YXJrZXJzSW5Ob2RlKG5vZGUpOwogCi0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQotICAg
ICAgICAgICAgbm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgICAgICBpZiAobm9kZS5y
ZW5kZXJlcigpKQorICAgICAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiAgICAg
fQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShS
YW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnNldE1hcmtlcnNBY3RpdmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKICAgICBpZiAo
IXBvc3NpYmx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBOb2Rl
JiBzdGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVu
ZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKKyAgICBOb2RlJiBzdGFydENvbnRh
aW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7CisgICAgTm9kZSYgZW5kQ29udGFpbmVyID0g
cmFuZ2UuZW5kQ29udGFpbmVyKCk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+
cGFzdExhc3ROb2RlKCk7CisgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3RO
b2RlKCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUg
IT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAg
ICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lciA/IHJh
bmdlLT5zdGFydE9mZnNldCgpIDogMDsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9k
ZSA9PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKG5vZGUsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFu
Z2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqbm9kZSkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09
ICZzdGFydENvbnRhaW5lciA/IHJhbmdlLnN0YXJ0T2Zmc2V0KCkgOiAwOworICAgICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyByYW5nZS5lbmRPZmZzZXQo
KSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAgICAgc2V0TWFy
a2Vyc0FjdGl2ZSgqbm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlKTsKICAgICB9
CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5v
ZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wg
YWN0aXZlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUo
Tm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9v
bCBhY3RpdmUpCiB7Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7
CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICgh
bGlzdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NDcsOCArNzQ3LDggQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9kZSogbm9kZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQKICAgICAgICAgZGlkQWN0aXZhdGVNYXJrZXIgPSB0cnVlOwogICAgIH0KIAot
ICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtlciAmJiBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICBu
b2RlLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKGRpZEFjdGl2YXRlTWFya2VyICYm
IG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CiB9
CiAKIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5n
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBkZDdk
NjRmMDg2NTk2YWM3ZjBlZmUwMTRjMTU0MDI4YTJhNWE5NjA4Li44MmUwM2Y1YTE1YzI5NWU0ZWIz
MTAwODhhNmEzMGM2YjNlMmI5ZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDgsMTkgKzQ4LDE5IEBAIHB1YmxpYzoKICAgICB+RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyKCk7CiAKICAgICB2b2lkIGRldGFjaCgpOwotICAgIHZvaWQgYWRk
TWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIHZvaWQgYWRk
TWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYg
ZGVzY3JpcHRpb24pOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUqLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7
Ci0gICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtl
cjo6RGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihj
b25zdCBSYW5nZSosIGJvb2wgYWN0aXZlTWF0Y2gpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdl
JiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdl
JiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24p
OworICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7CisgICAgdm9pZCBh
ZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYs
IGJvb2wgYWN0aXZlTWF0Y2gpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBh
ZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5n
JiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29u
c3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRl
cnByZXRhdGlvbnMpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKFJhbmdlKiwg
Y29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOworICAgIHZvaWQgYWRkTWFya2VyKFJhbmdl
JiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxp
ZD4mIG1ldGFkYXRhKTsKKyAgICB2b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXNNYXJrZXIoUmFuZ2UmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zKTsK
KyAgICB2b2lkIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihSYW5nZSYsIGNvbnN0IFJldGFpblB0
cjxpZD4mIG1ldGFkYXRhKTsKICNlbmRpZgotICAgIHZvaWQgYWRkRHJhZ2dlZENvbnRlbnRNYXJr
ZXIoUmVmUHRyPFJhbmdlPik7CisgICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihSYW5n
ZSYpOwogCi0gICAgdm9pZCBjb3B5TWFya2VycyhOb2RlKiBzcmNOb2RlLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRlbHRhKTsKKyAgICB2b2lk
IGNvcHlNYXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVu
Z3RoLCBOb2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpOwogICAgIGJvb2wgaGFzTWFya2VycygpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3Nz
aWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1h
cmtlcnMoKSkpOwpAQCAtNzIsMTUgKzcyLDE1IEBAIHB1YmxpYzoKICAgICAvLyByZW1vdmUgdGhl
IG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3aWxsIGFkanVzdCB0aGUgc3Bh
biBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwogICAgIC8vIHRoZSBwb3J0aW9uIHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuCiAgICAgZW51bSBSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlck9yTm90IHsgRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtl
ciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgfTsKLSAgICB2b2lkIHJlbW92ZU1h
cmtlcnMoUmFuZ2UqLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9j
dW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZv
aWQgcmVtb3ZlTWFya2VycyhOb2RlKiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgs
IE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6
YWxsTWFya2VycygpLCAgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERv
Tm90UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFy
a2VycyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1
bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtl
ck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgdm9p
ZCByZW1vdmVNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjph
bGxNYXJrZXJzKCksICBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9O
b3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwotICAgIHZvaWQgcmVtb3ZlTWFya2Vy
cyhOb2RlKiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50
TWFya2VyOjphbGxNYXJrZXJzKCkpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxN
YXJrZXJzKCkpOwogICAgIHZvaWQgcmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwotICAgIHZv
aWQgc2hpZnRNYXJrZXJzKE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsK
LSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2UqLCBib29sKTsKLSAgICB2b2lkIHNldE1h
cmtlcnNBY3RpdmUoTm9kZSosIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIGJvb2wpOworICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgaW50IGRlbHRhKTsKKyAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2UmLCBib29s
KTsKKyAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUmLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJr
ZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4p
OwpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lk
IGFkZE1hcmtlcihOb2RlKiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKKyAgICB2b2lkIGFkZE1h
cmtlcihOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKIAogICAgIHR5cGVkZWYgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IE1hcmtlckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxOb2RlPiwgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+PiBNYXJrZXJNYXA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZGE1Y2QyZjA4MWMxZTg4ZjgxMTFlZmZmMzI2ZGYyMDI2
NDQ0YzQzYS4uYjJmMTNkMDIyYzA5ODczMjUyNDc5Y2JlYWE1MDg2MjcwYTg0MmJkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIEVsZW1lbnQ6On5FbGVtZW50KCkK
ICAgICAgICAgZGV0YWNoQWxsQXR0ck5vZGVzRnJvbUVsZW1lbnQoKTsKIAogICAgIGlmIChoYXNQ
ZW5kaW5nUmVzb3VyY2VzKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKHRoaXMpOworICAgICAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdS
ZXNvdXJjZXMoKnRoaXMpOwogICAgICAgICBBU1NFUlQoIWhhc1BlbmRpbmdSZXNvdXJjZXMoKSk7
CiAgICAgfQogfQpAQCAtNTQ2LDcgKzU0Niw3IEBAIGJvb2wgRWxlbWVudDo6aXNGb2N1c2FibGUo
KSBjb25zdAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25FbGVtZW50SW5BY3RpdmVDaGFpbigp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVXNlckFjdGlvbkVsZW1lbnQoKSk7Ci0gICAgcmV0dXJu
IGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaW5BY3RpdmVDaGFpbigqdGhpcyk7Cisg
ICAgcmV0dXJuIGRvY3VtZW50KCkudXNlckFjdGlvbkVsZW1lbnRzKCkuaXNJbkFjdGl2ZUNoYWlu
KCp0aGlzKTsKIH0KIAogYm9vbCBFbGVtZW50Ojppc1VzZXJBY3Rpb25FbGVtZW50QWN0aXZlKCkg
Y29uc3QKQEAgLTE4NDMsMTYgKzE4NDMsMTYgQEAgYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVz
KCkgY29uc3QKICAgICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBlbGVtZW50RGF0YSgpLT5sZW5n
dGgoKTsKIH0KIAotYm9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBF
bGVtZW50KiBvdGhlcikgY29uc3QKK2Jvb2wgRWxlbWVudDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0
ZXMoY29uc3QgRWxlbWVudCYgb3RoZXIpIGNvbnN0CiB7CiAgICAgc3luY2hyb25pemVBbGxBdHRy
aWJ1dGVzKCk7Ci0gICAgb3RoZXItPnN5bmNocm9uaXplQWxsQXR0cmlidXRlcygpOwotICAgIGlm
IChlbGVtZW50RGF0YSgpID09IG90aGVyLT5lbGVtZW50RGF0YSgpKQorICAgIG90aGVyLnN5bmNo
cm9uaXplQWxsQXR0cmlidXRlcygpOworICAgIGlmIChlbGVtZW50RGF0YSgpID09IG90aGVyLmVs
ZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlbGVtZW50RGF0YSgp
KQotICAgICAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KG90aGVyLT5lbGVt
ZW50RGF0YSgpKTsKLSAgICBpZiAob3RoZXItPmVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVy
biBvdGhlci0+ZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KGVsZW1lbnREYXRhKCkpOworICAg
ICAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KG90aGVyLmVsZW1lbnREYXRh
KCkpOworICAgIGlmIChvdGhlci5lbGVtZW50RGF0YSgpKQorICAgICAgICByZXR1cm4gb3RoZXIu
ZWxlbWVudERhdGEoKS0+aXNFcXVpdmFsZW50KGVsZW1lbnREYXRhKCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0yMDEzLDcgKzIwMTMsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9t
QW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcgog
ICAgIENvbnRhaW5lck5vZGU6OnJlbW92ZWRGcm9tQW5jZXN0b3IocmVtb3ZhbFR5cGUsIG9sZFBh
cmVudE9mUmVtb3ZlZFRyZWUpOwogCiAgICAgaWYgKGhhc1BlbmRpbmdSZXNvdXJjZXMoKSkKLSAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlRWxlbWVudEZyb21Q
ZW5kaW5nUmVzb3VyY2VzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5yZW1vdmVFbGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoKnRoaXMpOwogCiAgICAg
UmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoYXV0byog
dGltZWxpbmUgPSBkb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKQEAgLTM3NjgsOSArMzc2
OCw5IEBAIHZvaWQgRWxlbWVudDo6Y2xlYXJIb3ZlckFuZEFjdGl2ZVN0YXR1c0JlZm9yZURldGFj
aGluZ1JlbmRlcmVyKCkKICAgICBpZiAoIWlzVXNlckFjdGlvbkVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmIChob3ZlcmVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkuaG92ZXJlZEVs
ZW1lbnREaWREZXRhY2godGhpcyk7Ci0gICAgaWYgKGluQWN0aXZlQ2hhaW4oKSkKLSAgICAgICAg
ZG9jdW1lbnQoKS5lbGVtZW50SW5BY3RpdmVDaGFpbkRpZERldGFjaCh0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5ob3ZlcmVkRWxlbWVudERpZERldGFjaCgqdGhpcyk7CisgICAgaWYgKGlzSW5B
Y3RpdmVDaGFpbigpKQorICAgICAgICBkb2N1bWVudCgpLmVsZW1lbnRJbkFjdGl2ZUNoYWluRGlk
RGV0YWNoKCp0aGlzKTsKICAgICBkb2N1bWVudCgpLnVzZXJBY3Rpb25FbGVtZW50cygpLmNsZWFy
QWN0aXZlQW5kSG92ZXJlZCgqdGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDE2OWZk
ZTEzYWRiNjI3MDQxZmRkOGI1ZTZmNWI4ZjJhZGNiMzg2ZjMuLmM1ZWI2Y2I4YzQ0OGIwOTljNWUw
MTI2YWQ1YTFlN2M0ZTg4NDJiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjc4LDcgKzI3OCw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1
bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCk7CiAKLSAgICBib29sIGhh
c0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdDsKKyAgICBi
b29sIGhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQmIG90aGVyKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllc0Zyb21FbGVtZW50
KGNvbnN0IEVsZW1lbnQmKSB7IH0KIApAQCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKICAgICAv
LyBGSVhNRTogdGhpcyBzaG91bGQgbm90IGJlIHZpcnR1YWwsIGRvIG5vdCBvdmVycmlkZSB0aGlz
LgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0
OwogCi0gICAgYm9vbCBpbkFjdGl2ZUNoYWluKCkgY29uc3QgeyByZXR1cm4gaXNVc2VyQWN0aW9u
RWxlbWVudCgpICYmIGlzVXNlckFjdGlvbkVsZW1lbnRJbkFjdGl2ZUNoYWluKCk7IH0KKyAgICBi
b29sIGlzSW5BY3RpdmVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIGlzVXNlckFjdGlvbkVsZW1lbnQo
KSAmJiBpc1VzZXJBY3Rpb25FbGVtZW50SW5BY3RpdmVDaGFpbigpOyB9CiAgICAgYm9vbCBhY3Rp
dmUoKSBjb25zdCB7IHJldHVybiBpc1VzZXJBY3Rpb25FbGVtZW50KCkgJiYgaXNVc2VyQWN0aW9u
RWxlbWVudEFjdGl2ZSgpOyB9CiAgICAgYm9vbCBob3ZlcmVkKCkgY29uc3QgeyByZXR1cm4gaXNV
c2VyQWN0aW9uRWxlbWVudCgpICYmIGlzVXNlckFjdGlvbkVsZW1lbnRIb3ZlcmVkKCk7IH0KICAg
ICBib29sIGZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBpc1VzZXJBY3Rpb25FbGVtZW50KCkgJiYg
aXNVc2VyQWN0aW9uRWxlbWVudEZvY3VzZWQoKTsgfQpAQCAtNjI2LDExICs2MjYsNiBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpIHsgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgQXR0ciB0byBj
YWxsIHdpbGxNb2RpZnlBdHRyaWJ1dGUvZGlkTW9kaWZ5QXR0cmlidXRlLgotICAgIGZyaWVuZCBj
bGFzcyBBdHRyOwotCi0gICAgZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgeyBO
b3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA9IDAsIEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlIH07Ci0KICAgICB2b2lkIGRpZEFkZEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgdm9pZCB3aWxsTW9kaWZ5QXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKTsKICAgICB2b2lkIGRpZE1vZGlmeUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSk7CkBAIC02NTgsNiArNjUzLDcgQEAgcHJpdmF0
ZToKICAgICBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgY2hpbGRU
eXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3QgZmluYWw7CiAKKyAgICBlbnVtIFN5bmNocm9uaXph
dGlvbk9mTGF6eUF0dHJpYnV0ZSB7IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRl
LCBJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB9OwogICAgIHZvaWQgc2V0QXR0cmli
dXRlSW50ZXJuYWwodW5zaWduZWQgaW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlLCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogICAg
IHZvaWQgYWRkQXR0cmlidXRlSW50ZXJuYWwoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiAgICAg
dm9pZCByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbCh1bnNpZ25lZCBpbmRleCwgU3luY2hyb25pemF0
aW9uT2ZMYXp5QXR0cmlidXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
ZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXgg
NWI3NGEyYjM1OTg4NGQyNTY1MmZkZWUyODBhZjhmMjI2NzBiNTJkMC4uMTdiY2VlNmVhNzM4MmNi
MGNiNTgzM2YxMmFiNWRjNTRiNDdkNjBkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05hbWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5j
cHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKIAogI2luY2x1
ZGUgIkF0dHIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Niw3ICs2NSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxBdHRyPj4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQogVmVjdG9yPFN0cmluZz4gTmFtZWROb2RlTWFwOjpzdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IG1fZWxlbWVu
dC5nZXRBdHRyaWJ1dGVOYW1lcygpOwotICAgIGlmIChpczxIVE1MRWxlbWVudD4obV9lbGVtZW50
KSAmJiBpczxIVE1MRG9jdW1lbnQ+KG1fZWxlbWVudC5kb2N1bWVudCgpKSkgeworICAgIGlmIChp
czxIVE1MRWxlbWVudD4obV9lbGVtZW50KSAmJiBtX2VsZW1lbnQuZG9jdW1lbnQoKS5pc0hUTUxE
b2N1bWVudCgpKSB7CiAgICAgICAgIG5hbWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdKFN0cmluZyYg
bmFtZSkgewogICAgICAgICAgICAgZm9yIChhdXRvIGNoYXJhY3RlciA6IFN0cmluZ1ZpZXcgeyBu
YW1lIH0uY29kZVVuaXRzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVVwcGVyKGNo
YXJhY3RlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMDdjMmY2NWQwZWI0NGQ1N2QwYjI5MTI0ZjI1
OTIwMjVjMjgwZTdkOC4uMDE5Y2FmZjNlMGZhNjhlYTMyYThhNDVkMGUxZWUwZGIwY2U3YzkwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcApAQCAtNjYwLDcgKzY2MCw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXpl
KCkKICAgICAgICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmco
KSkgewogICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nLT5ub2RlVHlwZSgpICE9IFRFWFRfTk9E
RSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBuZXh0
VGV4dCA9IGRvd25jYXN0PFRleHQ+KG5leHRTaWJsaW5nKTsKKyAgICAgICAgICAgIFJlZjxUZXh0
PiBuZXh0VGV4dCA9IGRvd25jYXN0PFRleHQ+KCpuZXh0U2libGluZyk7CiAKICAgICAgICAgICAg
IC8vIFJlbW92ZSBlbXB0eSB0ZXh0IG5vZGVzLgogICAgICAgICAgICAgaWYgKCFuZXh0VGV4dC0+
bGVuZ3RoKCkpIHsKQEAgLTY3MSw3ICs2NzEsNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAg
ICAgICAgICAgICAvLyBCb3RoIG5vbi1lbXB0eSB0ZXh0IG5vZGVzLiBNZXJnZSB0aGVtLgogICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgICAgICAgICB0
ZXh0LT5hcHBlbmREYXRhKG5leHRUZXh0LT5kYXRhKCkpOwotICAgICAgICAgICAgZG9jdW1lbnQo
KS50ZXh0Tm9kZXNNZXJnZWQobmV4dFRleHQuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICBk
b2N1bWVudCgpLnRleHROb2Rlc01lcmdlZChuZXh0VGV4dCwgb2Zmc2V0KTsKICAgICAgICAgICAg
IG5leHRUZXh0LT5yZW1vdmUoKTsKICAgICAgICAgfQogCkBAIC0xMzc5LDcgKzEzNzksNyBAQCBi
b29sIE5vZGU6OmlzRXF1YWxOb2RlKE5vZGUqIG90aGVyKSBjb25zdAogICAgICAgICBhdXRvJiBv
dGhlckVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqb3RoZXIpOwogICAgICAgICBpZiAodGhp
c0VsZW1lbnQudGFnUU5hbWUoKSAhPSBvdGhlckVsZW1lbnQudGFnUU5hbWUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF0aGlzRWxlbWVudC5oYXNFcXVpdmFsZW50
QXR0cmlidXRlcygmb3RoZXJFbGVtZW50KSkKKyAgICAgICAgaWYgKCF0aGlzRWxlbWVudC5oYXNF
cXVpdmFsZW50QXR0cmlidXRlcyhvdGhlckVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGVJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9y
LmNwcAppbmRleCA0NWQ4NjBiYTg2ZjQ5MDM2NjE5OGJmZTg0NjRmMWMyNjUxMmU5Yjc5Li5mNmYx
MDIwNjliOWVmYzQxYTQyNWNmNmRhM2MyNDc3YmVlZGExMmUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZUl0ZXJhdG9yLmNwcApAQCAtNzMsNyArNzMsNyBAQCBpbmxpbmUgTm9kZUl0ZXJhdG9yOjpOb2Rl
SXRlcmF0b3IoTm9kZSYgcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFJlZlB0cjxObwog
ICAgIDogTm9kZUl0ZXJhdG9yQmFzZShyb290Tm9kZSwgd2hhdFRvU2hvdywgV1RGTW92ZShmaWx0
ZXIpKQogICAgICwgbV9yZWZlcmVuY2VOb2RlKHJvb3ROb2RlLCB0cnVlKQogewotICAgIHJvb3Qo
KS5kb2N1bWVudCgpLmF0dGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKKyAgICByb290KCkuZG9jdW1l
bnQoKS5hdHRhY2hOb2RlSXRlcmF0b3IoKnRoaXMpOwogfQogCiBSZWY8Tm9kZUl0ZXJhdG9yPiBO
b2RlSXRlcmF0b3I6OmNyZWF0ZShOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hhdFRvU2hvdywg
UmVmUHRyPE5vZGVGaWx0ZXI+JiYgZmlsdGVyKQpAQCAtODMsNyArODMsNyBAQCBSZWY8Tm9kZUl0
ZXJhdG9yPiBOb2RlSXRlcmF0b3I6OmNyZWF0ZShOb2RlJiByb290Tm9kZSwgdW5zaWduZWQgd2hh
dFRvU2hvdywgUmVmUAogCiBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogewotICAgIHJv
b3QoKS5kb2N1bWVudCgpLmRldGFjaE5vZGVJdGVyYXRvcih0aGlzKTsKKyAgICByb290KCkuZG9j
dW1lbnQoKS5kZXRhY2hOb2RlSXRlcmF0b3IoKnRoaXMpOwogfQogCiBFeGNlcHRpb25PcjxSZWZQ
dHI8Tm9kZT4+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRp
b0J1dHRvbkdyb3Vwcy5jcHAKaW5kZXggYjgwN2JlZmFkMzAzZjZjZjRjMTBjMjY2Zjk2NTg1NjVh
MDgwZjhiYy4uNjc5ZWJlMjZlNTYzMGRmYjUxODg2Njg1NjQ4YjY3NGM3ZDljM2I0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0zMywxOCArMzMsMTcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtYmVycy5pc0Vt
cHR5KCk7IH0KICAgICBib29sIGlzUmVxdWlyZWQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVk
Q291bnQ7IH0KICAgICBIVE1MSW5wdXRFbGVtZW50KiBjaGVja2VkQnV0dG9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGVja2VkQnV0dG9uOyB9Ci0gICAgdm9pZCBhZGQoSFRNTElucHV0RWxlbWVudCop
OwotICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2
b2lkIGFkZChIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUo
SFRNTElucHV0RWxlbWVudCYpOwogICAgIHZvaWQgcmVxdWlyZWRTdGF0ZUNoYW5nZWQoSFRNTElu
cHV0RWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3ZlKEhUTUxJbnB1dEVsZW1lbnQqKTsKLSAgICBi
b29sIGNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZShI
VE1MSW5wdXRFbGVtZW50Jik7CisgICAgYm9vbCBjb250YWlucyhIVE1MSW5wdXRFbGVtZW50Jikg
Y29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBtZW1iZXJzKCkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjRm9yQWxsQnV0dG9ucygpOwog
ICAgIHZvaWQgdXBkYXRlVmFsaWRpdHlGb3JBbGxCdXR0b25zKCk7CiAgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VDaGVja2VkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQq
KTsKICAgICB2b2lkIHNldENoZWNrZWRCdXR0b24oSFRNTElucHV0RWxlbWVudCopOwogCiAgICAg
SGFzaFNldDxIVE1MSW5wdXRFbGVtZW50Kj4gbV9tZW1iZXJzOwpAQCAtODAsMTYgKzc5LDE2IEBA
IHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6c2V0Q2hlY2tlZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50
KiBidXR0b24pCiAgICAgICAgIG9sZENoZWNrZWRCdXR0b24tPnNldENoZWNrZWQoZmFsc2UpOwog
fQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24p
Cit2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OmFkZChIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pCiB7
Ci0gICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoIW1fbWVtYmVy
cy5hZGQoYnV0dG9uKS5pc05ld0VudHJ5KQorICAgIEFTU0VSVChidXR0b24uaXNSYWRpb0J1dHRv
bigpKTsKKyAgICBpZiAoIW1fbWVtYmVycy5hZGQoJmJ1dHRvbikuaXNOZXdFbnRyeSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGJvb2wgZ3JvdXBXYXNWYWxpZCA9IGlzVmFsaWQoKTsKLSAgICBpZiAo
YnV0dG9uLT5pc1JlcXVpcmVkKCkpCisgICAgaWYgKGJ1dHRvbi5pc1JlcXVpcmVkKCkpCiAgICAg
ICAgICsrbV9yZXF1aXJlZENvdW50OwotICAgIGlmIChidXR0b24tPmNoZWNrZWQoKSkKLSAgICAg
ICAgc2V0Q2hlY2tlZEJ1dHRvbihidXR0b24pOworICAgIGlmIChidXR0b24uY2hlY2tlZCgpKQor
ICAgICAgICBzZXRDaGVja2VkQnV0dG9uKCZidXR0b24pOwogCiAgICAgYm9vbCBncm91cElzVmFs
aWQgPSBpc1ZhbGlkKCk7CiAgICAgaWYgKGdyb3VwV2FzVmFsaWQgIT0gZ3JvdXBJc1ZhbGlkKQpA
QCAtOTcsMTkgKzk2LDE5IEBAIHZvaWQgUmFkaW9CdXR0b25Hcm91cDo6YWRkKEhUTUxJbnB1dEVs
ZW1lbnQqIGJ1dHRvbikKICAgICBlbHNlIGlmICghZ3JvdXBJc1ZhbGlkKSB7CiAgICAgICAgIC8v
IEEgcmFkaW8gYnV0dG9uIG5vdCBpbiBhIGdyb3VwIGlzIGFsd2F5cyB2YWxpZC4gV2UgbmVlZCB0
byBtYWtlIGl0CiAgICAgICAgIC8vIGludmFsaWQgb25seSBpZiB0aGUgZ3JvdXAgaXMgaW52YWxp
ZC4KLSAgICAgICAgYnV0dG9uLT51cGRhdGVWYWxpZGl0eSgpOworICAgICAgICBidXR0b24udXBk
YXRlVmFsaWRpdHkoKTsKICAgICB9CiB9CiAKLXZvaWQgUmFkaW9CdXR0b25Hcm91cDo6dXBkYXRl
Q2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikKK3ZvaWQgUmFkaW9CdXR0b25H
cm91cDo6dXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQmIGJ1dHRvbikKIHsKLSAg
ICBBU1NFUlQoYnV0dG9uLT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIEFTU0VSVChtX21lbWJlcnMu
Y29udGFpbnMoYnV0dG9uKSk7CisgICAgQVNTRVJUKGJ1dHRvbi5pc1JhZGlvQnV0dG9uKCkpOwor
ICAgIEFTU0VSVChtX21lbWJlcnMuY29udGFpbnMoJmJ1dHRvbikpOwogICAgIGJvb2wgd2FzVmFs
aWQgPSBpc1ZhbGlkKCk7Ci0gICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQotICAgICAgICBzZXRD
aGVja2VkQnV0dG9uKGJ1dHRvbik7CisgICAgaWYgKGJ1dHRvbi5jaGVja2VkKCkpCisgICAgICAg
IHNldENoZWNrZWRCdXR0b24oJmJ1dHRvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2No
ZWNrZWRCdXR0b24gPT0gYnV0dG9uKQorICAgICAgICBpZiAobV9jaGVja2VkQnV0dG9uID09ICZi
dXR0b24pCiAgICAgICAgICAgICBzZXRDaGVja2VkQnV0dG9uKG51bGxwdHIpOwogICAgIH0KICAg
ICBpZiAod2FzVmFsaWQgIT0gaXNWYWxpZCgpKQpAQCAtMTMxLDIyICsxMzAsMjIgQEAgdm9pZCBS
YWRpb0J1dHRvbkdyb3VwOjpyZXF1aXJlZFN0YXRlQ2hhbmdlZChIVE1MSW5wdXRFbGVtZW50JiBi
dXR0b24pCiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpOwogfQogCi12b2lk
IFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50KiBidXR0b24pCit2b2lk
IFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50JiBidXR0b24pCiB7Ci0g
ICAgQVNTRVJUKGJ1dHRvbi0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBIYXNoU2V0PEhUTUxJbnB1
dEVsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX21lbWJlcnMuZmluZChidXR0b24pOworICAgIEFT
U0VSVChidXR0b24uaXNSYWRpb0J1dHRvbigpKTsKKyAgICBhdXRvIGl0ID0gbV9tZW1iZXJzLmZp
bmQoJmJ1dHRvbik7CiAgICAgaWYgKGl0ID09IG1fbWVtYmVycy5lbmQoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCB3YXNWYWxpZCA9IGlzVmFsaWQoKTsKICAgICBtX21lbWJlcnMucmVt
b3ZlKGl0KTsKLSAgICBpZiAoYnV0dG9uLT5pc1JlcXVpcmVkKCkpIHsKKyAgICBpZiAoYnV0dG9u
LmlzUmVxdWlyZWQoKSkgewogICAgICAgICBBU1NFUlQobV9yZXF1aXJlZENvdW50KTsKICAgICAg
ICAgLS1tX3JlcXVpcmVkQ291bnQ7CiAgICAgfQogICAgIGlmIChtX2NoZWNrZWRCdXR0b24pIHsK
LSAgICAgICAgYnV0dG9uLT5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7Ci0gICAgICAgIGlm
IChtX2NoZWNrZWRCdXR0b24gPT0gYnV0dG9uKSB7CisgICAgICAgIGJ1dHRvbi5pbnZhbGlkYXRl
U3R5bGVGb3JTdWJ0cmVlKCk7CisgICAgICAgIGlmIChtX2NoZWNrZWRCdXR0b24gPT0gJmJ1dHRv
bikgewogICAgICAgICAgICAgbV9jaGVja2VkQnV0dG9uID0gbnVsbHB0cjsKICAgICAgICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGNGb3JBbGxCdXR0b25zKCk7CiAgICAgICAgIH0KQEAgLTE2MCw3
ICsxNTksNyBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnJlbW92ZShIVE1MSW5wdXRFbGVtZW50
KiBidXR0b24pCiAgICAgaWYgKCF3YXNWYWxpZCkgewogICAgICAgICAvLyBBIHJhZGlvIGJ1dHRv
biBub3QgaW4gYSBncm91cCBpcyBhbHdheXMgdmFsaWQuIFdlIG5lZWQgdG8gbWFrZSBpdAogICAg
ICAgICAvLyB2YWxpZCBvbmx5IGlmIHRoZSBncm91cCB3YXMgaW52YWxpZC4KLSAgICAgICAgYnV0
dG9uLT51cGRhdGVWYWxpZGl0eSgpOworICAgICAgICBidXR0b24udXBkYXRlVmFsaWRpdHkoKTsK
ICAgICB9CiB9CiAKQEAgLTE4MCw5ICsxNzksOSBAQCB2b2lkIFJhZGlvQnV0dG9uR3JvdXA6OnVw
ZGF0ZVZhbGlkaXR5Rm9yQWxsQnV0dG9ucygpCiAgICAgfQogfQogCi1ib29sIFJhZGlvQnV0dG9u
R3JvdXA6OmNvbnRhaW5zKEhUTUxJbnB1dEVsZW1lbnQqIGJ1dHRvbikgY29uc3QKK2Jvb2wgUmFk
aW9CdXR0b25Hcm91cDo6Y29udGFpbnMoSFRNTElucHV0RWxlbWVudCYgYnV0dG9uKSBjb25zdAog
ewotICAgIHJldHVybiBtX21lbWJlcnMuY29udGFpbnMoYnV0dG9uKTsKKyAgICByZXR1cm4gbV9t
ZW1iZXJzLmNvbnRhaW5zKCZidXR0b24pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTQsMTYgKzE5
MywxNiBAQCBSYWRpb0J1dHRvbkdyb3Vwczo6UmFkaW9CdXR0b25Hcm91cHMoKSA9IGRlZmF1bHQ7
CiAKIFJhZGlvQnV0dG9uR3JvdXBzOjp+UmFkaW9CdXR0b25Hcm91cHMoKSA9IGRlZmF1bHQ7CiAK
LXZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OmFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6YWRkQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7Ci0gICAg
aWYgKGVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRp
b0J1dHRvbigpKTsKKyAgICBpZiAoZWxlbWVudC5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIG1fbmFtZVRvR3Jv
dXBNYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPE5hbWVUb0dyb3VwTWFwPigpOwogCi0gICAgYXV0byYg
Z3JvdXAgPSBtX25hbWVUb0dyb3VwTWFwLT5hZGQoZWxlbWVudC0+bmFtZSgpLmltcGwoKSwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGF1dG8mIGdyb3VwID0gbV9uYW1lVG9Hcm91cE1h
cC0+YWRkKGVsZW1lbnQubmFtZSgpLmltcGwoKSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGlmICghZ3JvdXApCiAgICAgICAgIGdyb3VwID0gc3RkOjptYWtlX3VuaXF1ZTxSYWRpb0J1
dHRvbkdyb3VwPigpOwogICAgIGdyb3VwLT5hZGQoZWxlbWVudCk7CkBAIC0yMjgsMTcgKzIyNywx
NSBAQCBWZWN0b3I8SFRNTElucHV0RWxlbWVudCo+IFJhZGlvQnV0dG9uR3JvdXBzOjpncm91cE1l
bWJlcnMoY29uc3QgSFRNTElucHV0RWxlbWVudAogICAgIHJldHVybiBncm91cC0+bWVtYmVycygp
OwogfQogCi12b2lkIFJhZGlvQnV0dG9uR3JvdXBzOjp1cGRhdGVDaGVja2VkU3RhdGUoSFRNTElu
cHV0RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgUmFkaW9CdXR0b25Hcm91cHM6OnVwZGF0ZUNoZWNr
ZWRTdGF0ZShIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50
LT5pc1JhZGlvQnV0dG9uKCkpOwotICAgIGlmIChlbGVtZW50LT5uYW1lKCkuaXNFbXB0eSgpKQor
ICAgIEFTU0VSVChlbGVtZW50LmlzUmFkaW9CdXR0b24oKSk7CisgICAgaWYgKGVsZW1lbnQubmFt
ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX25hbWVUb0dyb3Vw
TWFwKTsKICAgICBpZiAoIW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVybjsKLSAgICBS
YWRpb0J1dHRvbkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50LT5u
YW1lKCkuaW1wbCgpKTsKLSAgICBBU1NFUlQoZ3JvdXApOwotICAgIGdyb3VwLT51cGRhdGVDaGVj
a2VkU3RhdGUoZWxlbWVudCk7CisgICAgbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KGVsZW1lbnQubmFt
ZSgpLmltcGwoKSktPnVwZGF0ZUNoZWNrZWRTdGF0ZShlbGVtZW50KTsKIH0KIAogdm9pZCBSYWRp
b0J1dHRvbkdyb3Vwczo6cmVxdWlyZWRTdGF0ZUNoYW5nZWQoSFRNTElucHV0RWxlbWVudCYgZWxl
bWVudCkKQEAgLTI2MywzOCArMjYwLDM2IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFJhZGlvQnV0dG9u
R3JvdXBzOjpjaGVja2VkQnV0dG9uRm9yR3JvdXAoY29uc3QgQXRvbWljU3RyaW5nJiBuCiAgICAg
cmV0dXJuIGdyb3VwID8gZ3JvdXAtPmNoZWNrZWRCdXR0b24oKSA6IG51bGxwdHI7CiB9CiAKLWJv
b2wgUmFkaW9CdXR0b25Hcm91cHM6Omhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0RWxl
bWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgUmFkaW9CdXR0b25Hcm91cHM6Omhhc0NoZWNrZWRC
dXR0b24oY29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUgPSBlbGVtZW50LT5uYW1lKCk7CisgICAgQVNTRVJUKGVsZW1lbnQuaXNSYWRpb0J1dHRvbigp
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBlbGVtZW50Lm5hbWUoKTsKICAgICBp
ZiAobmFtZS5pc0VtcHR5KCkgfHwgIW1fbmFtZVRvR3JvdXBNYXApCi0gICAgICAgIHJldHVybiBl
bGVtZW50LT5jaGVja2VkKCk7Ci0KLSAgICBjb25zdCBSYWRpb0J1dHRvbkdyb3VwKiBncm91cCA9
IG1fbmFtZVRvR3JvdXBNYXAtPmdldChuYW1lLmltcGwoKSk7Ci0gICAgcmV0dXJuIGdyb3VwLT5j
aGVja2VkQnV0dG9uKCk7CisgICAgICAgIHJldHVybiBlbGVtZW50LmNoZWNrZWQoKTsKKyAgICBy
ZXR1cm4gbV9uYW1lVG9Hcm91cE1hcC0+Z2V0KG5hbWUuaW1wbCgpKS0+Y2hlY2tlZEJ1dHRvbigp
OwogfQogCi1ib29sIFJhZGlvQnV0dG9uR3JvdXBzOjppc0luUmVxdWlyZWRHcm91cChIVE1MSW5w
dXRFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBSYWRpb0J1dHRvbkdyb3Vwczo6aXNJblJl
cXVpcmVkR3JvdXAoSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBBU1NF
UlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgpLmlz
RW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlmIChl
bGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IW1fbmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSYWRpb0J1dHRv
bkdyb3VwKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50LT5uYW1lKCkuaW1w
bCgpKTsKKyAgICBhdXRvKiBncm91cCA9IG1fbmFtZVRvR3JvdXBNYXAtPmdldChlbGVtZW50Lm5h
bWUoKS5pbXBsKCkpOwogICAgIHJldHVybiBncm91cCAmJiBncm91cC0+aXNSZXF1aXJlZCgpICYm
IGdyb3VwLT5jb250YWlucyhlbGVtZW50KTsKIH0KIAotdm9pZCBSYWRpb0J1dHRvbkdyb3Vwczo6
cmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFJhZGlvQnV0dG9u
R3JvdXBzOjpyZW1vdmVCdXR0b24oSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBB
U1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKLSAgICBpZiAoZWxlbWVudC0+bmFtZSgp
LmlzRW1wdHkoKSkKKyAgICBBU1NFUlQoZWxlbWVudC5pc1JhZGlvQnV0dG9uKCkpOworICAgIGlm
IChlbGVtZW50Lm5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1f
bmFtZVRvR3JvdXBNYXApCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbmFtZVRvR3JvdXBNYXAt
PmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBOYW1lVG9Hcm91cE1hcDo6aXRlcmF0b3IgaXQgPSBt
X25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQtPm5hbWUoKS5pbXBsKCkpOworICAgIGF1dG8g
aXQgPSBtX25hbWVUb0dyb3VwTWFwLT5maW5kKGVsZW1lbnQubmFtZSgpLmltcGwoKSk7CiAgICAg
aWYgKGl0ID09IG1fbmFtZVRvR3JvdXBNYXAtPmVuZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
aXQtPnZhbHVlLT5yZW1vdmUoZWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFkaW9CdXR0b25Hcm91cHMuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdy
b3Vwcy5oCmluZGV4IGRlOGEyMDhjNWE1OTcwYmMwODRjNWE1ODU3NjM3NTJhMjk4MTlhMTQuLjRi
Mjg0NTA5MTQyZmMyM2QwMDZjNjhlYWQ1NjRiZTRlMTg2ODM2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYWRpb0J1dHRvbkdyb3Vwcy5oCkBAIC0zNCwxMyArMzQsMTMgQEAgY2xhc3MgUmFkaW9CdXR0
b25Hcm91cHMgewogcHVibGljOgogICAgIFJhZGlvQnV0dG9uR3JvdXBzKCk7CiAgICAgflJhZGlv
QnV0dG9uR3JvdXBzKCk7Ci0gICAgdm9pZCBhZGRCdXR0b24oSFRNTElucHV0RWxlbWVudCopOwot
ICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2b2lk
IGFkZEJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Jik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3Rh
dGUoSFRNTElucHV0RWxlbWVudCYpOwogICAgIHZvaWQgcmVxdWlyZWRTdGF0ZUNoYW5nZWQoSFRN
TElucHV0RWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3ZlQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQq
KTsKKyAgICB2b2lkIHJlbW92ZUJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Jik7CiAgICAgSFRNTElu
cHV0RWxlbWVudCogY2hlY2tlZEJ1dHRvbkZvckdyb3VwKGNvbnN0IEF0b21pY1N0cmluZyYgZ3Jv
dXBOYW1lKSBjb25zdDsKLSAgICBib29sIGhhc0NoZWNrZWRCdXR0b24oY29uc3QgSFRNTElucHV0
RWxlbWVudCopIGNvbnN0OwotICAgIGJvb2wgaXNJblJlcXVpcmVkR3JvdXAoSFRNTElucHV0RWxl
bWVudCopIGNvbnN0OworICAgIGJvb2wgaGFzQ2hlY2tlZEJ1dHRvbihjb25zdCBIVE1MSW5wdXRF
bGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBpc0luUmVxdWlyZWRHcm91cChIVE1MSW5wdXRFbGVt
ZW50JikgY29uc3Q7CiAgICAgVmVjdG9yPEhUTUxJbnB1dEVsZW1lbnQqPiBncm91cE1lbWJlcnMo
Y29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKaW5kZXggMDBkNmI5ZmVhNDYyNzJhM2VmOWUwZWNkMGZiOTM3ODQ1ZDhlMGE2Ni4uNzdjMGY4
MzFlMDk1ZWUyMjI0YjU0YjFlYmUzODZkNGI4YTk2NmIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBA
IC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzksNyArNzgsNyBAQCBpbmxpbmUgUmFuZ2U6
OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50KQogICAgIHJhbmdlQ291bnRlci5pbmNyZW1l
bnQoKTsKICNlbmRpZgogCi0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsK
KyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAogUmVmPFJhbmdl
PiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50KQpAQCAtOTYsNyArOTUsNyBA
QCBpbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBOb2RlKiBzdGFy
dENvbnRhaW5lciwgaW50IHN0YXJ0T2ZmcwogICAgIHJhbmdlQ291bnRlci5pbmNyZW1lbnQoKTsK
ICNlbmRpZgogCi0gICAgbV9vd25lckRvY3VtZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKyAgICBt
X293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIAogICAgIC8vIFNpbXBseSBzZXR0
aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkg
b2YgdGhlIGNoZWNraW5nCiAgICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3
ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KQEAgLTEyNSw3ICsxMjQsNyBAQCBSZWY8UmFuZ2U+IFJh
bmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdmlzaWJsZQogCiBSYW5nZTo6flJhbmdlKCkKIHsKLSAgICBtX293bmVyRG9jdW1lbnQtPmRl
dGFjaFJhbmdlKHRoaXMpOworICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UoKnRoaXMp
OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHJhbmdlQ291bnRlci5kZWNyZW1lbnQoKTsKQEAgLTEz
NSwxMSArMTM0LDExIEBAIFJhbmdlOjp+UmFuZ2UoKQogdm9pZCBSYW5nZTo6c2V0RG9jdW1lbnQo
RG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChtX293bmVyRG9jdW1lbnQucHRyKCkg
IT0gJmRvY3VtZW50KTsKLSAgICBtX293bmVyRG9jdW1lbnQtPmRldGFjaFJhbmdlKHRoaXMpOwor
ICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UoKnRoaXMpOwogICAgIG1fb3duZXJEb2N1
bWVudCA9IGRvY3VtZW50OwogICAgIG1fc3RhcnQuc2V0VG9TdGFydE9mTm9kZShkb2N1bWVudCk7
CiAgICAgbV9lbmQuc2V0VG9TdGFydE9mTm9kZShkb2N1bWVudCk7Ci0gICAgbV9vd25lckRvY3Vt
ZW50LT5hdHRhY2hSYW5nZSh0aGlzKTsKKyAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdl
KCp0aGlzKTsKIH0KIAogTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKE5vZGUq
IGNvbnRhaW5lckEsIE5vZGUqIGNvbnRhaW5lckIpCkBAIC05NzIsNyArOTcxLDcgQEAgRXhjZXB0
aW9uT3I8UmVmPERvY3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50KGNvbnN0IFN0cmluZyYKICAgICAgICAgZWxlbWVudCA9ICZkb3duY2FzdDxFbGVtZW50Pihu
b2RlKTsKICAgICBlbHNlCiAgICAgICAgIGVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQoKTsK
LSAgICBpZiAoIWVsZW1lbnQgfHwgKGlzPEhUTUxEb2N1bWVudD4oZWxlbWVudC0+ZG9jdW1lbnQo
KSkgJiYgaXM8SFRNTEh0bWxFbGVtZW50PigqZWxlbWVudCkpKQorICAgIGlmICghZWxlbWVudCB8
fCAoZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGlzPEhUTUxIdG1sRWxl
bWVudD4oKmVsZW1lbnQpKSkKICAgICAgICAgZWxlbWVudCA9IEhUTUxCb2R5RWxlbWVudDo6Y3Jl
YXRlKG5vZGUuZG9jdW1lbnQoKSk7CiAgICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudCgqZWxlbWVudCwgbWFya3VwLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnRBbmREb05v
dE1hcmtBbHJlYWR5U3RhcnRlZCk7CiB9CkBAIC0xNjY0LDkgKzE2NjMsOSBAQCB2b2lkIFJhbmdl
Ojpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2RlKQogICAgIGJvdW5kYXJ5Tm9kZVdpbGxCZVJl
bW92ZWQobV9lbmQsIG5vZGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0
SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlU
ZXh0SW5zZXJ0ZWQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSYgdGV4dCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRh
aW5lcigpICE9IHRleHQpCisgICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpICE9ICZ0ZXh0KQog
ICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm91bmRhcnlPZmZzZXQgPSBib3VuZGFyeS5v
ZmZzZXQoKTsKICAgICBpZiAob2Zmc2V0ID49IGJvdW5kYXJ5T2Zmc2V0KQpAQCAtMTY3NCwxNyAr
MTY3MywxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0SW5zZXJ0ZWQoUmFuZ2VC
b3VuZGFyeVBvaW50JiBib3VuZGFyeSwgTm9kZSogdGV4dAogICAgIGJvdW5kYXJ5LnNldE9mZnNl
dChib3VuZGFyeU9mZnNldCArIGxlbmd0aCk7CiB9CiAKLXZvaWQgUmFuZ2U6OnRleHRJbnNlcnRl
ZChOb2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgUmFu
Z2U6OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKLSAgICBBU1NFUlQodGV4dCk7Ci0gICAgQVNTRVJUKCZ0ZXh0LT5kb2N1bWVudCgp
ID09ICZvd25lckRvY3VtZW50KCkpOworICAgIEFTU0VSVCgmdGV4dC5kb2N1bWVudCgpID09ICZv
d25lckRvY3VtZW50KCkpOwogICAgIGJvdW5kYXJ5VGV4dEluc2VydGVkKG1fc3RhcnQsIHRleHQs
IG9mZnNldCwgbGVuZ3RoKTsKICAgICBib3VuZGFyeVRleHRJbnNlcnRlZChtX2VuZCwgdGV4dCwg
b2Zmc2V0LCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVt
b3ZlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHRS
ZW1vdmVkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIE5vZGUmIHRleHQsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIGlmIChib3VuZGFyeS5jb250YWluZXIo
KSAhPSB0ZXh0KQorICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSAhPSAmdGV4dCkKICAgICAg
ICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvdW5kYXJ5T2Zmc2V0ID0gYm91bmRhcnkub2Zmc2V0
KCk7CiAgICAgaWYgKG9mZnNldCA+PSBib3VuZGFyeU9mZnNldCkKQEAgLTE2OTUsMTAgKzE2OTMs
OSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0UmVtb3ZlZChSYW5nZUJvdW5kYXJ5
UG9pbnQmIGJvdW5kYXJ5LCBOb2RlKiB0ZXh0LAogICAgICAgICBib3VuZGFyeS5zZXRPZmZzZXQo
Ym91bmRhcnlPZmZzZXQgLSBsZW5ndGgpOwogfQogCi12b2lkIFJhbmdlOjp0ZXh0UmVtb3ZlZChO
b2RlKiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgUmFuZ2U6
OnRleHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQogewotICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBBU1NFUlQoJnRleHQtPmRvY3VtZW50KCkgPT0g
Jm93bmVyRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCZ0ZXh0LmRvY3VtZW50KCkgPT0gJm93bmVy
RG9jdW1lbnQoKSk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX3N0YXJ0LCB0ZXh0LCBvZmZz
ZXQsIGxlbmd0aCk7CiAgICAgYm91bmRhcnlUZXh0UmVtb3ZlZChtX2VuZCwgdGV4dCwgb2Zmc2V0
LCBsZW5ndGgpOwogfQpAQCAtMTcyMywxNSArMTcyMCwxNSBAQCB2b2lkIFJhbmdlOjp0ZXh0Tm9k
ZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogICAgIGJv
dW5kYXJ5VGV4dE5vZGVzTWVyZ2VkKG1fZW5kLCBvbGROb2RlLCBvZmZzZXQpOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgYm91bmRhcnlUZXh0Tm9kZXNTcGxpdChSYW5nZUJvdW5kYXJ5UG9pbnQm
IGJvdW5kYXJ5LCBUZXh0KiBvbGROb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5VGV4
dE5vZGVzU3BsaXQoUmFuZ2VCb3VuZGFyeVBvaW50JiBib3VuZGFyeSwgVGV4dCYgb2xkTm9kZSkK
IHsKLSAgICBhdXRvKiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKGJv
dW5kYXJ5LmNvbnRhaW5lcigpID09IG9sZE5vZGUpIHsKLSAgICAgICAgdW5zaWduZWQgc3BsaXRP
ZmZzZXQgPSBvbGROb2RlLT5sZW5ndGgoKTsKKyAgICBhdXRvKiBwYXJlbnQgPSBvbGROb2RlLnBh
cmVudE5vZGUoKTsKKyAgICBpZiAoYm91bmRhcnkuY29udGFpbmVyKCkgPT0gJm9sZE5vZGUpIHsK
KyAgICAgICAgdW5zaWduZWQgc3BsaXRPZmZzZXQgPSBvbGROb2RlLmxlbmd0aCgpOwogICAgICAg
ICB1bnNpZ25lZCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5Lm9mZnNldCgpOwogICAgICAgICBp
ZiAoYm91bmRhcnlPZmZzZXQgPiBzcGxpdE9mZnNldCkgewogICAgICAgICAgICAgaWYgKHBhcmVu
dCkKLSAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXQoKm9sZE5vZGUtPm5leHRTaWJsaW5nKCks
IGJvdW5kYXJ5T2Zmc2V0IC0gc3BsaXRPZmZzZXQsIDApOworICAgICAgICAgICAgICAgIGJvdW5k
YXJ5LnNldCgqb2xkTm9kZS5uZXh0U2libGluZygpLCBib3VuZGFyeU9mZnNldCAtIHNwbGl0T2Zm
c2V0LCAwKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBib3VuZGFyeS5zZXRP
ZmZzZXQoc3BsaXRPZmZzZXQpOwogICAgICAgICB9CkBAIC0xNzM5LDIwICsxNzM2LDE4IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBib3VuZGFyeVRleHROb2Rlc1NwbGl0KFJhbmdlQm91bmRhcnlQb2lu
dCYgYm91bmRhcnksIFRleHQqIG9sCiAgICAgfQogICAgIGlmICghcGFyZW50KQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGJvdW5kYXJ5LmNvbnRhaW5lcigpID09IHBhcmVudCAmJiBib3VuZGFy
eS5jaGlsZEJlZm9yZSgpID09IG9sZE5vZGUpIHsKLSAgICAgICAgYXV0byogbmV3Q2hpbGQgPSBv
bGROb2RlLT5uZXh0U2libGluZygpOworICAgIGlmIChib3VuZGFyeS5jb250YWluZXIoKSA9PSBw
YXJlbnQgJiYgYm91bmRhcnkuY2hpbGRCZWZvcmUoKSA9PSAmb2xkTm9kZSkgeworICAgICAgICBh
dXRvKiBuZXdDaGlsZCA9IG9sZE5vZGUubmV4dFNpYmxpbmcoKTsKICAgICAgICAgQVNTRVJUKG5l
d0NoaWxkKTsKICAgICAgICAgYm91bmRhcnkuc2V0VG9BZnRlckNoaWxkKCpuZXdDaGlsZCk7CiAg
ICAgfQogfQogCi12b2lkIFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQqIG9sZE5vZGUpCit2b2lk
IFJhbmdlOjp0ZXh0Tm9kZVNwbGl0KFRleHQmIG9sZE5vZGUpCiB7Ci0gICAgQVNTRVJUKG9sZE5v
ZGUpOwotICAgIEFTU0VSVCgmb2xkTm9kZS0+ZG9jdW1lbnQoKSA9PSAmb3duZXJEb2N1bWVudCgp
KTsKLSAgICBBU1NFUlQob2xkTm9kZS0+aXNUZXh0Tm9kZSgpKTsKLSAgICBBU1NFUlQoIW9sZE5v
ZGUtPnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLT5uZXh0U2libGluZygpKTsKLSAgICBBU1NFUlQo
IW9sZE5vZGUtPnBhcmVudE5vZGUoKSB8fCBvbGROb2RlLT5uZXh0U2libGluZygpLT5pc1RleHRO
b2RlKCkpOworICAgIEFTU0VSVCgmb2xkTm9kZS5kb2N1bWVudCgpID09ICZvd25lckRvY3VtZW50
KCkpOworICAgIEFTU0VSVCghb2xkTm9kZS5wYXJlbnROb2RlKCkgfHwgb2xkTm9kZS5uZXh0U2li
bGluZygpKTsKKyAgICBBU1NFUlQoIW9sZE5vZGUucGFyZW50Tm9kZSgpIHx8IG9sZE5vZGUubmV4
dFNpYmxpbmcoKS0+aXNUZXh0Tm9kZSgpKTsKICAgICBib3VuZGFyeVRleHROb2Rlc1NwbGl0KG1f
c3RhcnQsIG9sZE5vZGUpOwogICAgIGJvdW5kYXJ5VGV4dE5vZGVzU3BsaXQobV9lbmQsIG9sZE5v
ZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA5OGMxNjQ0ZWFkNWMxMjNlYTA5MmM3MmZmYmY5YTU2
ZDg3OTM5YTQ0Li5mNmM0NDFhOGJlYWYzNDVmODhiOTcwZGJmY2ZjMzMwNjk0ZDAwZmRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaApAQCAtMTMyLDEwICsxMzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgbm9kZUNo
aWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlJik7CiAgICAgdm9pZCBub2RlV2lsbEJl
UmVtb3ZlZChOb2RlJik7CiAKLSAgICB2b2lkIHRleHRJbnNlcnRlZChOb2RlKiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHZvaWQgdGV4dFJlbW92ZWQoTm9kZSosIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIHRleHRJbnNlcnRlZChO
b2RlJiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZvaWQgdGV4dFJl
bW92ZWQoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICB2b2lk
IHRleHROb2Rlc01lcmdlZChOb2RlV2l0aEluZGV4JiBvbGROb2RlLCB1bnNpZ25lZCBvZmZzZXQp
OwotICAgIHZvaWQgdGV4dE5vZGVTcGxpdChUZXh0KiBvbGROb2RlKTsKKyAgICB2b2lkIHRleHRO
b2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKICAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gYSB1bml0
ICh3b3JkIG9yIHNlbnRlbmNlIG9yIGJsb2NrIG9yIGRvY3VtZW50KSBib3VuZGFyeS4KICAgICAv
LyBQbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI3NjMyIGNvbW1lbnQgIzUgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5kZXgg
MGI3ZGIwYjcyMzhjMzJhZmUzY2E0YjZmYjI4NzI2YmU2OWI1Yjc0Zi4uMDYzZDY0ZDI1MTg1MThk
Mjc1ODBmMmQyZGFmYWVjYTZjNmM5M2Q5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50
LmNwcApAQCAtMjUyLDExICsyNTIsMTEgQEAgYm9vbCBTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2Ny
aXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVnYWMKICAgICB9
IGVsc2UgaWYgKChpc0NsYXNzaWNFeHRlcm5hbFNjcmlwdCB8fCBzY3JpcHRUeXBlID09IFNjcmlw
dFR5cGU6Ok1vZHVsZSkgJiYgIWhhc0FzeW5jQXR0cmlidXRlKCkgJiYgIW1fZm9yY2VBc3luYykg
ewogICAgICAgICBtX3dpbGxFeGVjdXRlSW5PcmRlciA9IHRydWU7CiAgICAgICAgIEFTU0VSVCht
X2xvYWRhYmxlU2NyaXB0KTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1ZXVl
U2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVubmVy
OjpJTl9PUkRFUl9FWEVDVVRJT04pOworICAgICAgICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS5x
dWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1
bm5lcjo6SU5fT1JERVJfRVhFQ1VUSU9OKTsKICAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUF0dHJp
YnV0ZSgpIHx8IHNjcmlwdFR5cGUgPT0gU2NyaXB0VHlwZTo6TW9kdWxlKSB7CiAgICAgICAgIEFT
U0VSVChtX2xvYWRhYmxlU2NyaXB0KTsKICAgICAgICAgQVNTRVJUKGhhc0FzeW5jQXR0cmlidXRl
KCkgfHwgbV9mb3JjZUFzeW5jKTsKLSAgICAgICAgZG9jdW1lbnQuc2NyaXB0UnVubmVyKCktPnF1
ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKCp0aGlzLCAqbV9sb2FkYWJsZVNjcmlwdCwgU2NyaXB0UnVu
bmVyOjpBU1lOQ19FWEVDVVRJT04pOworICAgICAgICBkb2N1bWVudC5zY3JpcHRSdW5uZXIoKS5x
dWV1ZVNjcmlwdEZvckV4ZWN1dGlvbigqdGhpcywgKm1fbG9hZGFibGVTY3JpcHQsIFNjcmlwdFJ1
bm5lcjo6QVNZTkNfRVhFQ1VUSU9OKTsKICAgICB9IGVsc2UgaWYgKCFoYXNTb3VyY2VBdHRyaWJ1
dGUoKSAmJiBtX3BhcnNlckluc2VydGVkICYmICFkb2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2Fk
ZWQoKSkgewogICAgICAgICBBU1NFUlQoc2NyaXB0VHlwZSA9PSBTY3JpcHRUeXBlOjpDbGFzc2lj
KTsKICAgICAgICAgbV93aWxsQmVQYXJzZXJFeGVjdXRlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAK
aW5kZXggNTBmMjkyYjA3ZjQ3NWUyNjA4YWVjYjc4YzJiYTUwMTZhNDQzYWQ3Yi4uMDUwZDE2OWI0
ZmZhNWIzMTAwY2NhNGNlMTBmYTE4NWU5MjFlYzU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcApAQCAtNzMs
NyArNzMsNyBAQCBFeGNlcHRpb25PcjxSZWY8VGV4dD4+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25l
ZCBvZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0UmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKTsKICAgICB9CiAKLSAgICBkb2N1bWVudCgpLnRleHROb2RlU3BsaXQodGhpcyk7CisgICAg
ZG9jdW1lbnQoKS50ZXh0Tm9kZVNwbGl0KCp0aGlzKTsKIAogICAgIGlmIChyZW5kZXJlcigpKQog
ICAgICAgICByZW5kZXJlcigpLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhKCksIDAsIG9sZERhdGEu
bGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1VzZXJBY3Rpb25FbGVt
ZW50U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaAppbmRl
eCAxZmE2YjNkMWVmMmQyYjhmNGQ5OTExOTlmMDQ3YzVlNWUyOWM2NTE2Li5lNzNmMGUyMTI1ZTUw
Mzc5MmE0YThiMDViZjIzOTcxNjMzYWU1NzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vVXNlckFjdGlvbkVsZW1lbnRTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVXNlckFj
dGlvbkVsZW1lbnRTZXQuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtNDAsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0FjdGl2ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJl
dHVybiBoYXNGbGFnKGVsZW1lbnQsIEZsYWc6OklzQWN0aXZlKTsgfQogICAgIGJvb2wgaXNGb2N1
c2VkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGhhc0ZsYWcoZWxlbWVudCwgRmxh
Zzo6SXNGb2N1c2VkKTsgfQogICAgIGJvb2wgaXNIb3ZlcmVkKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpIHsgcmV0dXJuIGhhc0ZsYWcoZWxlbWVudCwgRmxhZzo6SXNIb3ZlcmVkKTsgfQotICAgIGJv
b2wgaW5BY3RpdmVDaGFpbihjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJldHVybiBoYXNGbGFn
KGVsZW1lbnQsIEZsYWc6OkluQWN0aXZlQ2hhaW4pOyB9CisgICAgYm9vbCBpc0luQWN0aXZlQ2hh
aW4oY29uc3QgRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4gaGFzRmxhZyhlbGVtZW50LCBGbGFn
OjpJbkFjdGl2ZUNoYWluKTsgfQogCiAgICAgdm9pZCBzZXRBY3RpdmUoRWxlbWVudCYgZWxlbWVu
dCwgYm9vbCBlbmFibGUpIHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBGbGFnOjpJc0FjdGl2
ZSk7IH0KICAgICB2b2lkIHNldEZvY3VzZWQoRWxlbWVudCYgZWxlbWVudCwgYm9vbCBlbmFibGUp
IHsgc2V0RmxhZ3MoZWxlbWVudCwgZW5hYmxlLCBGbGFnOjpJc0ZvY3VzZWQpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApp
bmRleCA1MTZkNzZlYTRkMTdhZDgzMzRmY2ZhODgzZDc0OTkyY2YzOWI3ZjcxLi4yYjc1YmQ2N2I1
NzU0NDZiYzBmM2NjYmU0MDU4YmFhZjZmYzU4MTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTIzNCw3ICsyMzQs
NyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
JiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKTsKIAogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNUb0Fk
ZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSwgbWFy
a2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVy
bmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigqcmVw
bGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0
ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwogfQogCiBib29sIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJ
ZkFwcHJvcHJpYXRlKCkKQEAgLTI2OCwxMCArMjY4LDEwIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2li
bGVTCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJh
bWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CiAgICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
KTsKIAotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IG1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZS5wdHIo
KSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgbWFy
a2Vycy5hZGRNYXJrZXIocmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7
Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVu
dCgpLT5tYXJrZXJzKCk7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
LCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJrZXJzLmFkZE1h
cmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLmFk
ZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwog
fQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQpAQCAtMzYw
LDcgKzM2MCw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJu
YXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiByZXN1CiAgICAgICAgIGlmIChyZXN1bHQu
bGVuZ3RoKCkpCiAgICAgICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoKnJhbmdl
V2l0aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fdHlwZSwgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVj
dGlvbigpKTsKICAgICAgICAgZWxzZSBpZiAoIW1faXNEaXNtaXNzZWRCeUVkaXRpbmcpCi0gICAg
ICAgICAgICByYW5nZVdpdGhBbHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2Vy
OjpSZWplY3RlZENvcnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsKKyAgICAgICAgICAgIHJhbmdl
V2l0aEFsdGVybmF0aXZlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcigqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENv
cnJlY3Rpb24sIG1fb3JpZ2luYWxUZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRl
cm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOgogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNw
ZWxsaW5nU3VnZ2VzdGlvbnM6CkBAIC00NDQsOSArNDQ0LDkgQEAgdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9z
aXRpb24KICAgICBpZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVu
dCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0
aW5nU2VsZWN0aW9uKCkuZW5kKCkpOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFy
a2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMuYWRkTWFy
a2VyKHJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2Vy
cygpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEFsdGVybmF0aXZlVGV4dENsaWVudCogQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6YWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkKQEAgLTQ3NCw4ICs0
NzQsOCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwbwogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6Om1hcmtSZXZlcnNlZChSYW5nZSYgY2hhbmdlZFJhbmdlKQogewotICAgIGNoYW5n
ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAg
IGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CisgICAgY2hhbmdlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVj
dGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyKTsKKyAgICBjaGFuZ2VkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1h
cmtlcnMoKS5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVj
a2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFy
a0NvcnJlY3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcpCkBAIC00ODMsOSArNDgzLDkgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjptYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW4KICAgICBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29u
dGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvIG1hcmtlclR5cGUg
OiBtYXJrZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKG1hcmtlclR5
cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50IHx8IG1hcmtlclR5cGUgPT0gRG9jdW1l
bnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpCi0gICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigm
cmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAg
bWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJp
bmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigmcmVwbGFj
ZWRSYW5nZSwgbWFya2VyVHlwZSk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihyZXBs
YWNlZFJhbmdlLCBtYXJrZXJUeXBlKTsKICAgICB9CiB9CiAKQEAgLTUwNSw3ICs1MDUsNyBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNl
Rm9yTW9kaWZpZWRDb3JyZWN0aW9uKAogICAgICAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkVkaXRlZCwgY29ycmVjdGVk
LCBjb3JyZWN0aW9uKTsKICAgICB9CiAKLSAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoJnJhbmdl
T2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgbWFy
a2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0
b2NvcnJlY3RlZCwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpCkBAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRB
dXRvY29ycmVjdGlvbkEKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3
ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3
aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFn
YWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdh
aW4uCi0gICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0
aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAg
bV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3Rl
clJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFs
U3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3Vs
dChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVy
bmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggZDdmNjc3NWU5ZDQy
M2EyNzZlMWQyODc5MDljMzZiYmM3YmY1ZTU1Yi4uMjQyYmQ5ODVjZjYyMGU0MzI2ZjU3MmNmYjk0
NTk0NTY0ZGQ1ZjljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKQEAgLTc3MSwxMSArNzcxLDExIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwgdW5z
aWduCiAgICAgZm9yIChjb25zdCBhdXRvJiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKG1hcmtlci5pc0RpY3RhdGlvbigpKSB7Ci0gICAg
ICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZS5wdHIoKSwgbWFya2Vy
LnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFy
a2VyLm1ldGFkYXRhKCkpOworICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIo
bmV3UmFuZ2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0
ZXJuYXRpdmVzKCksIG1hcmtlci5tZXRhZGF0YSgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3
UmFuZ2UucHRyKCksIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKKyAgICAg
ICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UsIG1hcmtlci50eXBlKCksIG1h
cmtlci5kZXNjcmlwdGlvbigpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RpY3RhdGlvbkNvbW1hbmQuY3BwCmluZGV4IDk3NWQ0MWI0NWE5Yjc2YzYyMmIyZGI5ZWVjNmFi
NDZkYzI2NDlmNzYuLmFkZjc0NGZjNWMzMTFmY2Y2NWM2ZmQ3YTM1MWVmNjMwMDA4MWI5NzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApAQCAtNjEsOSAr
NjEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpY3RhdGlvbk1h
cmtlclN1cHBsaWVyKGFsdGVybmF0aXZlcykpOwogICAgIH0KIAotICAgIHZvaWQgYWRkTWFya2Vy
c1RvVGV4dE5vZGUoVGV4dCogdGV4dE5vZGUsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBj
b25zdCBTdHJpbmcmIHRleHRUb0JlSW5zZXJ0ZWQpIG92ZXJyaWRlCisgICAgdm9pZCBhZGRNYXJr
ZXJzVG9UZXh0Tm9kZShUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgb2Zmc2V0T2ZJbnNlcnRpb24s
IGNvbnN0IFN0cmluZyYgdGV4dFRvQmVJbnNlcnRlZCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS0+ZG9jdW1lbnQoKS5tYXJrZXJzKCk7
CisgICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS5kb2N1bWVudCgpLm1h
cmtlcnMoKTsKICAgICAgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0ZXJuYXRpdmVz
KSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YSBkYXRhIHsgYWx0
ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4dCwgdGV4dFRvQmVJbnNlcnRlZC5zdWJzdHJpbmcoYWx0
ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgpIH07CiAgICAgICAg
ICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0ZXJuYXRp
dmUucmFuZ2VTdGFydCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0
aCwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShkYXRhKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCA4NmQwMjFkMThhNDc5MTNlZWEwYjc2
NjQ4ZWY5ZmY5Y2YwNDJkNWQyLi42ZTNjY2Y3ZWQ5MDNjNTU5NTFhOGE5OGFmMDE3NDM1MTQzZWFm
NzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTExNjUsNyArMTE2NSw3IEBA
IGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYgZmlyc3QsIGNvbnN0IE5vZGUm
IHNlY29uZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIGZpcnN0RWxlbWVudCA9
IGRvd25jYXN0PEVsZW1lbnQ+KGZpcnN0KTsKICAgICBhdXRvJiBzZWNvbmRFbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4oc2Vjb25kKTsKLSAgICByZXR1cm4gZmlyc3RFbGVtZW50Lmhhc1RhZ05h
bWUoc2Vjb25kRWxlbWVudC50YWdRTmFtZSgpKSAmJiBmaXJzdEVsZW1lbnQuaGFzRXF1aXZhbGVu
dEF0dHJpYnV0ZXMoJnNlY29uZEVsZW1lbnQpOworICAgIHJldHVybiBmaXJzdEVsZW1lbnQuaGFz
VGFnTmFtZShzZWNvbmRFbGVtZW50LnRhZ1FOYW1lKCkpICYmIGZpcnN0RWxlbWVudC5oYXNFcXVp
dmFsZW50QXR0cmlidXRlcyhzZWNvbmRFbGVtZW50KTsKIH0KIAogYm9vbCBpc05vblRhYmxlQ2Vs
bEhUTUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAppbmRleCA1ODU0YWViNTVhMGYyNGQ4NTg1NWVlZDEyNjBlM2UzZDk0ZWFmMGEzLi4zNzU1
NjQyNmFmMWVlMGM0Njg4ZmUzMmQxOGM4YWIwY2JjMzU4NDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCkBAIC0yMDQ0LDcgKzIwNDQsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxp
bmcoKQogICAgICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2Up
Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAgQVNTRVJU
KHRleHQubGVuZ3RoKCkpOwpAQCAtMjA2MCw3ICsyMDYwLDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJu
U3BlbGxpbmcoKQogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxlY3RlZFJhbmdlKQot
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0
ZXh0Lmxlbmd0aCgpKTsKQEAgLTIyMjYsMTIgKzIyMjYsMTIgQEAgdm9pZCBFZGl0b3I6OmFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICBB
U1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiAhPSAtMSAmJiBncmFtbWFyRGV0YWlsLmxlbmd0
aCA+IDApOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNv
bmZ1c2VkIHdpdGggZG91YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBo
Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpz
dWJyYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFtbWFyUGhyYXNlT2Zmc2V0ICsgZ3JhbW1h
ckRldGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5sZW5ndGgpOwotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpiYWRHcmFtbWFyUmFu
Z2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdl
ID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZ3JhbW1hclNlYXJjaFJhbmdlLCBncmFtbWFyUGhy
YXNlT2Zmc2V0ICsgZ3JhbW1hckRldGFpbC5sb2NhdGlvbiwgZ3JhbW1hckRldGFpbC5sZW5ndGgp
OworICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKGJhZEdyYW1tYXJSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oKTsKICAgICAgICAgCiAgICAgICAgIGNs
aWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFz
ZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBncmFtbWFy
RGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBncmFtbWFy
RGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICBpZiAoIW1p
c3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewpAQCAtMjI0Myw3ICsyMjQzLDcgQEAgdm9pZCBFZGl0
b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQog
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbigpOwogICAgICAgICAK
ICAgICAgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlz
c3BlbGxlZFdvcmQpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlz
c3BlbGxpbmdSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyk7CiAgICAgfQogfQogCkBAIC0yMzc4LDEzICsyMzc4LDEwIEBAIGJv
b2wgRWRpdG9yOjpzcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkKICAgICByZXR1cm4gY2xpZW50KCkt
PnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3I6OmNsZWFyTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3Rpb24p
Cit2b2lkIEVkaXRvcjo6Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG1vdmluZ1NlbGVjdGlvbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVj
dGVkUmFuZ2UgPSBtb3ZpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAo
c2VsZWN0ZWRSYW5nZSkgewotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKHNlbGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAg
ICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoc2VsZWN0ZWRSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgIH0KKyAgICBpZiAoYXV0byBzZWxlY3Rl
ZFJhbmdlID0gbW92aW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIHsgRG9jdW1l
bnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciB9KTsKIH0KIAogdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKQEAgLTI0OTAsOCArMjQ4Nyw4IEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZ3b3JkU3RhcnQsCiAgICAgICAgIC8vIGNhdXNlIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBjdXJy
ZW50IHNlbnRlbmNlIHRvIGxvc2Ugb3IgZ2FpbiBzcGVsbGluZyBjb3JyZWN0aW9uIG1hcmtlcnMs
IGR1ZSB0bwogICAgICAgICAvLyBzZW50ZW5jZSByZXRybyBjb3JyZWN0aW9uLiBBcyBzdWNoLCB3
ZSBleHBhbmQgdGhlIHNwZWxsIGNoZWNraW5nIHJhbmdlIHRvIGVuY29tcGFzcyBhcyBtdWNoIG9m
IHRoZQogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNhbiwgcmVzcGVjdGluZyBib3Vu
ZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQuCi0gICAgICAgIGZ1bGxTZW50
ZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoZnVsbFNl
bnRlbmNlUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKLSAgICAgICAgc3Bl
bGxDaGVja2luZ1JhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMo
c3BlbGxDaGVja2luZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAg
ICAgICBmdWxsU2VudGVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVN
YXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAg
ICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3Zl
TWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwog
ICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVj
a2luZ09wdGlvbnMsIFdURk1vdmUoc3BlbGxDaGVja2luZ1JhbmdlKSwgV1RGTW92ZShhZGphY2Vu
dFdvcmRSYW5nZSksIFdURk1vdmUoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTI3NjEsMTQgKzI3NTgsMTQgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBs
YWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUK
ICAgICAgICAgICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgICAgIGlmICghbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5pc1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1Jh
bmdlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1pc3NwZWxsaW5n
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1p
c3NwZWxsaW5nUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgcmVwbGFjZW1l
bnQpOworICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFy
a0dyYW1tYXIgJiYgcmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyICYmIHBh
cmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlv
biA+PSAwKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0c1tpXS5kZXRh
aWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC5sZW5ndGggPiAwICYmIGRldGFp
bC5sb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNraW5n
UmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5n
dGgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcGFyYWdy
YXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwubGVu
Z3RoKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5l
cigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UucHRyKCks
IERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpH
cmFtbWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0RW5kTG9jYXRpb24gPD0gYXV0b21h
dGljUmVwbGFjZW1lbnRFbmRMb2NhdGlvbiAmJiByZXN1bHRFbmRMb2NhdGlvbiA+PSBwYXJhZ3Jh
cGguYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCgpCkBAIC0yODgyLDcgKzI4NzksNyBAQCB2b2lk
IEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZykKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24p
OwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgU2VsZWN0UmVw
bGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogICAg
IGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5n
ZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CisgICAgY2hh
bmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihjaGFuZ2VkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwog
ICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5n
ZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjk5OCw3ICsyOTk1LDcg
QEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJv
b2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAgICAgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsCiAjZW5kaWYKICAgICB9OwotICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMod29yZFJhbmdlLnB0cigpLCBtYXJrZXJUeXBlc1RvUmVtb3ZlLCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZSwgbWFya2VyVHlwZXNUb1JlbW92
ZSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CiAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vy
c0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50
KTsKIH0KIApAQCAtMzQ5MCw3ICszNDg3LDcgQEAgdW5zaWduZWQgRWRpdG9yOjpjb3VudE1hdGNo
ZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2UsIEZpbmRPcHQKIAog
ICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIGRvIHsKLSAgICAgICAgUmVmUHRyPFJh
bmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRp
b25zIC0gQmFja3dhcmRzKSk7CisgICAgICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5U
ZXh0KCpzZWFyY2hSYW5nZSwgdGFyZ2V0LCBvcHRpb25zIC0gQmFja3dhcmRzKTsKICAgICAgICAg
aWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHRS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0luU2hhZG93VHJlZSgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzUwMiwxMCArMzQ5OSwxMCBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0
Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByYW5nZSwgRmluZE9wdAog
CiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgaWYgKG1hdGNoZXMpCi0gICAgICAgICAg
ICBtYXRjaGVzLT5hcHBlbmQocmVzdWx0UmFuZ2UpOworICAgICAgICAgICAgbWF0Y2hlcy0+YXBw
ZW5kKHJlc3VsdFJhbmdlLnB0cigpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtYXJrTWF0Y2hl
cykKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyZXN1bHRSYW5n
ZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmVzdWx0UmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZXh0
TWF0Y2gpOwogCiAgICAgICAgIC8vIFN0b3AgbG9va2luZyBpZiB3ZSBoaXQgdGhlIHNwZWNpZmll
ZCBsaW1pdC4gQSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgogICAgICAgICBpZiAobGltaXQg
PiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCkBAIC0zNjU0LDEwICszNjUxLDEwIEBAIHZvaWQg
RWRpdG9yOjpzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKFJhbmdlJiByYW5nZSwgY29uc3Qg
U3RyaW5nVmlldyYgc3RyaW5nCiAgICAgICAgIHVuc2lnbmVkIHN1YnJhbmdlT2Zmc2V0ID0gc2Nh
bm5lclBvc2l0aW9uICsgcmVsYXRpdmVTdGFydFBvc2l0aW9uOwogICAgICAgICB1bnNpZ25lZCBz
dWJyYW5nZUxlbmd0aCA9IHJlbGF0aXZlRW5kUG9zaXRpb24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRp
b24gKyAxOwogCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gc3VicmFuZ2UgPSBUZXh0SXRlcmF0b3I6
OnN1YnJhbmdlKHJhbmdlLCBzdWJyYW5nZU9mZnNldCwgc3VicmFuZ2VMZW5ndGgpOworICAgICAg
ICBhdXRvIHN1YnJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShyYW5nZSwgc3VicmFuZ2VP
ZmZzZXQsIHN1YnJhbmdlTGVuZ3RoKTsKIAotICAgICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKHN1
YnJhbmdlKTsKLSAgICAgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIoc3VicmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXIpOworICAg
ICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKHN1YnJhbmdlLnB0cigpKTsKKyAgICAgICAgcmFuZ2Uu
b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoc3VicmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpUZWxlcGhvbmVOdW1iZXIpOwogCiAgICAgICAgIHNjYW5uZXJQb3NpdGlvbiArPSByZWxh
dGl2ZUVuZFBvc2l0aW9uICsgMTsKICAgICB9CkBAIC0zNzIyLDExICszNzE5LDExIEBAIHZvaWQg
RWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmICghdGV4dENo
ZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNl
bGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpIHsKICAgICAgICAgICAgIGlmIChS
ZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFu
Z2UoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tl
cigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0
aW9uKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRy
PFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRS
YW5nZSgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoc2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbnRlbmNlUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDEy
Miw3ICs0MTE5LDcgQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRD
aGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIAogICAgIFJlZlB0cjxSYW5nZT4gaW5z
ZXJ0ZWRDYW5kaWRhdGVSYW5nZSA9IHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlv
bkF0V29yZEJvdW5kYXJ5KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgYWNjZXB0ZWRDYW5kaWRh
dGUucmVwbGFjZW1lbnQubGVuZ3RoKCksIERpcmVjdGlvbkJhY2t3YXJkKTsKICAgICBpZiAoaW5z
ZXJ0ZWRDYW5kaWRhdGVSYW5nZSkKLSAgICAgICAgaW5zZXJ0ZWRDYW5kaWRhdGVSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoaW5zZXJ0ZWRDYW5k
aWRhdGVSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlLCBhY2Nl
cHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCk7CisgICAgICAgIGluc2VydGVkQ2FuZGlkYXRlUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCppbnNl
cnRlZENhbmRpZGF0ZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUsIGFj
Y2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKIAogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVk
Q2FuZGlkYXRlID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4
dENvbW1hbmQuY3BwCmluZGV4IGVmZDg2NTA5YTE1ZTZjNThkYmM5YTcwZjE5OTBiZjZmNTkwMmZk
YzIuLmZiY2QyZmZmYWVlZWQ0NTI2OTAxMzU3Y2E2MzU4YzIyYTFjYTQ0YTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC0yMDYsNyArMjA2LDcg
QEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZSgqdGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKICAgICAgICAgZW5kUG9zaXRpb24g
PSBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0aCgpKTsKICAg
ICAgICAgaWYgKG1fbWFya2VyU3VwcGxpZXIpCi0gICAgICAgICAgICBtX21hcmtlclN1cHBsaWVy
LT5hZGRNYXJrZXJzVG9UZXh0Tm9kZSh0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0LCBtX3RleHQpOwor
ICAgICAgICAgICAgbV9tYXJrZXJTdXBwbGllci0+YWRkTWFya2Vyc1RvVGV4dE5vZGUoKnRleHRO
b2RlLCBvZmZzZXQsIG1fdGV4dCk7CiAKICAgICAgICAgaWYgKG1fcmViYWxhbmNlVHlwZSA9PSBS
ZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0ZXNwYWNlcykgewogICAgICAgICAgICAgLy8g
VGhlIGluc2VydGlvbiBtYXkgcmVxdWlyZSBhZGp1c3RpbmcgYWRqYWNlbnQgd2hpdGVzcGFjZSwg
aWYgaXQgaXMgcHJlc2VudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuaAppbmRleCAyYzNiY2M0ZjMwZjBjNjhmMzU2NzllZWEwZDJmYWYwNWIzYjU5OGUxLi4xOGZk
Njc3ZWIyYTk3MTY2M2FjNzkzMjE0YmNjYjRiYzhmNTJjMDVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIFRleHQ7
CiBjbGFzcyBUZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxU
ZXh0SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXI+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5UZXh0
SW5zZXJ0aW9uTWFya2VyU3VwcGxpZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCB2b2lkIGFk
ZE1hcmtlcnNUb1RleHROb2RlKFRleHQqLCB1bnNpZ25lZCBvZmZzZXRPZkluc2VydGlvbiwgY29u
c3QgU3RyaW5nJiB0ZXh0SW5zZXJ0ZWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWFya2Vy
c1RvVGV4dE5vZGUoVGV4dCYsIHVuc2lnbmVkIG9mZnNldE9mSW5zZXJ0aW9uLCBjb25zdCBTdHJp
bmcmIHRleHRJbnNlcnRlZCkgPSAwOwogcHJvdGVjdGVkOgogICAgIFRleHRJbnNlcnRpb25NYXJr
ZXJTdXBwbGllcigpID0gZGVmYXVsdDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hl
Y2tlci5jcHAKaW5kZXggNjA0ZTc0MDU3OWJiMGFkYjk1ODA0ODZjZTI0ZmQ3MDIwYTM1YzQ3NC4u
M2VkNDgwYWVhOWEwZTI0YzYxMjUxZDI5NzRlMjNjYmMxMjllMmJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU3BlbGxD
aGVja2VyOjpkaWRDaGVja1N1Y2NlZWQoaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0CiAgICAgICAgIGlmIChyZXF1ZXN0RGF0YS5jaGVja2luZ1R5cGVzKCkuY29u
dGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpCiAgICAgICAgICAgICBtYXJrZXJUeXBl
cy5hZGQoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICBpZiAoIW1hcmtlclR5cGVz
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJl
bW92ZU1hcmtlcnMoJm1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwgbWFya2Vy
VHlwZXMpOworICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3Zl
TWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlclR5cGVz
KTsKICAgICB9CiAgICAgZGlkQ2hlY2soc2VxdWVuY2UsIHJlc3VsdHMpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5YWQwOTBm
MDhmNzQ3MDljYWQxMTc1OGE1NzQ2NGI5OGFlMDRhMGE1Li45Yjc3NjEwMmY5ZjE1YWM5NjY4OTkz
ODA5N2NiMjJlZWEyZmQwYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
bGl0VGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVD
b21tYW5kOjpkb0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQo
KSwgV1RGTW92ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIucHRyKCksIDAsIG1fb2Zmc2V0LCBt
X3RleHQxLmdldCgpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2Vycyht
X3RleHQyLCAwLCBtX29mZnNldCwgKm1fdGV4dDEsIDApOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRU
cmltVGV4dDIoKTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFu
ZDo6ZG9VbmFwcGx5KCkKIAogICAgIG1fdGV4dDItPmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7
CiAKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAw
LCBwcmVmaXhUZXh0Lmxlbmd0aCgpLCBtX3RleHQyLnB0cigpLCAwKTsKKyAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5jb3B5TWFya2VycygqbV90ZXh0MSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwg
bV90ZXh0MiwgMCk7CiAgICAgbV90ZXh0MS0+cmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCBlODllODcwYTU2YjcwOTQ2
YzdhZDdlYmJjMWNlOTUxNDBjNTIwZTQ3Li4xMDRjYTM4OTdhYzJjNjA5YzdhODk0NWU4NTAyMjdi
YTM2NWMxODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxw
ZXIuY3BwCkBAIC0yNzcsMTcgKzI3NywxNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvbwogCiAg
ICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGgg
PiAwICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gPCB0ZXh0TGVuZ3RoICYmIG1pc3NwZWxsaW5nTGVu
Z3RoIDw9IHRleHRMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVu
Z3RoIDw9IHRleHRMZW5ndGgpIHsKICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlz
c3BlbGxlZCB3b3JkCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UsIGN1cnJlbnRDaHVua09mZnNldCArIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8g
bWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgY3VycmVu
dENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwog
CiAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBh
bmQgaXRzIG9mZnNldC4KICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgewogICAg
ICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQg
KyBtaXNzcGVsbGluZ0xvY2F0aW9uOwogICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcg
PSB0ZXh0LnN1YnN0cmluZyhtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCku
dG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNz
cGVsbGluZ1JhbmdlOworICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1p
c3NwZWxsaW5nUmFuZ2UucHRyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFN0
b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgbWlzc3BlbGxpbmdS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlz
c3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAg
ICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7
CiAKICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmly
c3QgbWlzc3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KICAgICAgICAgICAgIGlmICgh
bWFya0FsbCkKQEAgLTQ1Myw4ICs0NTMsOCBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya0FsbCkgewotICAg
ICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKG1fcmFuZ2UsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsg
ZGV0YWlsLT5sb2NhdGlvbiwgZGV0YWlsLT5sZW5ndGgpOwotICAgICAgICAgICAgYmFkR3JhbW1h
clJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihi
YWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVz
ZXJEZXNjcmlwdGlvbik7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJ
dGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3Rh
cnRPZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAg
ICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFp
bC0+dXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmVt
ZW1iZXIgdGhpcyBkZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBvdXIgY3VycmVudCBj
YW5kaWRhdGUgKHRoZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQgb3JkZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmlu
ZGV4IDJjNGI2MGQwMTQzMzExMTVjYjkxMmM3MGVkOWZjYzViMjUzNGYzYmQuLjljMWFlODg4OTUx
ZmIzYmIyNTZlZDdlMDllMjQxNzZiYzhkM2MzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHZv
aWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAgICAgICAgIGlucHV0VGV4dChmaXJz
dEludGVycHJldGF0aW9uLCB0cnVlKTsKIAogICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNp
emUoKSA+IDEpCi0gICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKGVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIGludGVycHJldGF0aW9ucyk7CisgICAgICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzTWFya2VyKCplbmRp
bmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBpbnRlcnByZXRhdGlvbnMpOwogCiAg
ICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlv
bigpLnZpc2libGVFbmQoKSkpOwogICAgIH0KQEAgLTczLDcgKzczLDggQEAgdm9pZCBEaWN0YXRp
b25Db21tYW5kSU9TOjpkb0FwcGx5KCkKIAogICAgIGlmIChzdGFydEluZGV4ID49IDApIHsKICAg
ICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9t
TG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSwgc3RhcnRJbmRl
eCwgZW5kSW5kZXgsIHRydWUpOwotICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0
YXRpb25SZXN1bHRNYXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIG1fbWV0YWRhdGEpOworICAgICAg
ICBBU1NFUlQocmVzdWx0UmFuZ2UpOyAvLyBGSVhNRTogV2hhdCBndWFyYW50ZWVzIHRoaXM/Cisg
ICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVz
dWx0UmFuZ2UsIG1fbWV0YWRhdGEpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCmluZGV4IDIzMGY1ZTNiNDE3MzJiMWU2Mjg0NTA5ZDE0NDU1ODdkYTNk
ZjI5MTAuLjk4NWFkZGQ3N2I4ZDc5YjdlMTAwZmViZjlkZGM4YjRjNWM1NWRkZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTI5NSwxMyArMjk1LDEzIEBAIHZv
aWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0
b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgICAgIGludCBkaWN0YXRpb25QaHJhc2VFbmQgPSBw
cmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ICsgZGljdGF0aW9uUGhyYXNlTGVuZ3RoOwogICAg
ICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIGF1dG8g
ZGljdGF0aW9uUGhyYXNlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZ0ZXh0Tm9k
ZSwgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwgJnRleHROb2RlLCBkaWN0YXRpb25QaHJh
c2VFbmQpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihkaWN0YXRpb25QaHJhc2VSYW5nZS5wdHIoKSwgaW50
ZXJwcmV0YXRpb25zKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoZGljdGF0aW9uUGhyYXNlUmFuZ2UsIGlu
dGVycHJldGF0aW9ucyk7CiAgICAgICAgIH0KICAgICAgICAgcHJldmlvdXNEaWN0YXRpb25QaHJh
c2VTdGFydCA9IGRpY3RhdGlvblBocmFzZUVuZDsKICAgICB9CiAKICAgICBhdXRvIHJlc3VsdFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUsIDAsICZ0ZXh0Tm9kZSwg
dGV4dE5vZGUubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlv
blJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZS5wdHIoKSwgbWV0YWRhdGEpOworICAgIGRvY3VtZW50
KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZSwgbWV0YWRh
dGEpOwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKaW5kZXggZWJmNmI1YzM3ZGEzZWFjODJkYTk1
NjBiM2RlMzYzYjI2ODY2ZGUzZi4uNzlhMWRlMzJmZWNhYzZlNzQ3MTI3Y2Q4Yzg2NTIwODdiY2Mw
NWFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCkBAIC0xMjksNyArMTI5
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRmlsZVJlYWRlcjo6cmVhZEludGVybmFsKEJsb2ImIGJs
b2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXAKICAgICBpZiAobV9zdGF0ZSA9PSBMT0FESU5H
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAg
IHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMp
OwogCiAgICAgbV9ibG9iID0gJmJsb2I7CiAgICAgbV9yZWFkVHlwZSA9IHR5cGU7CkBAIC0xNjYs
NyArMTY2LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjphYm9ydCgpCiAgICAgICAgIGZpcmVFdmVudChl
dmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIAogICAgICAgICAvLyBBbGwgcG9zc2libGUgZXZl
bnRzIGhhdmUgZmlyZWQgYW5kIHdlJ3JlIGRvbmUsIG5vIG1vcmUgcGVuZGluZyBhY3Rpdml0eS4K
LSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKICAgICB9KTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQg
RmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMo
KS5sb2FkZW5kRXZlbnQpOwogICAgIAogICAgIC8vIEFsbCBwb3NzaWJsZSBldmVudHMgaGF2ZSBm
aXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFjdGl2aXR5LgotICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsK
IH0KIAogdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCkBAIC0yMTgsNyAr
MjE4LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCiAgICAgZmly
ZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogICAgIAogICAgIC8vIEFsbCBwb3Nz
aWJsZSBldmVudHMgaGF2ZSBmaXJlZCBhbmQgd2UncmUgZG9uZSwgbm8gbW9yZSBwZW5kaW5nIGFj
dGl2aXR5LgotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGlu
Z0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcAppbmRleCA5MDFjNjM5Y2UzNjBiNTI0NmZmY2MzZTkwZGY5ZWM0YTc1ODBjOTVhLi45MTQw
Y2IzOTFhMDQ0ODhkYWZhMGM4MGE1MjczYmJhMjIyNjFmMjE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRP
YmplY3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCmluZGV4IDMwNjBlYjc0YzRhMjlh
M2JlZWRlODA5NTBiMmM1YTNiN2IyZTViOTcuLjUwMmIyMjMzNjE2Y2IzY2I3NTA3NzdiM2M5NTM0
OGZlZjY5YzNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaApAQCAtMjksMTYgKzI5
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTERvY3VtZW50IDogcHVibGljIERv
Y3VtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEhUTUxEb2N1bWVudCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNv
bnN0IFVSTCYgdXJsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRNTERv
Y3VtZW50KGZyYW1lLCB1cmwsIEhUTUxEb2N1bWVudENsYXNzKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoRnJhbWUqIGZy
YW1lLCBjb25zdCBVUkwmIHVybCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEhUTUxEb2N1bWVudChmcmFtZSwgdXJsLCBIVE1MRG9jdW1lbnRDbGFzcywgU3ludGhlc2l6ZWQp
KTsKLSAgICB9Ci0KKyAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiwg
Y29uc3QgVVJMJik7CisgICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnQ+IGNyZWF0ZVN5bnRoZXNp
emVkRG9jdW1lbnQoRnJhbWUmLCBjb25zdCBVUkwmKTsKICAgICB2aXJ0dWFsIH5IVE1MRG9jdW1l
bnQoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGludCB3aWR0aCgpOwpAQCAtNjUsNyArNTcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgSFRNTERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgRG9jdW1l
bnRDbGFzc0ZsYWdzID0gMCwgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKIAogcHJp
dmF0ZToKLSAgICBib29sIGlzRnJhbWVTZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlz
RnJhbWVTZXQoKSBjb25zdCBmaW5hbDsKICAgICBSZWY8RG9jdW1lbnRQYXJzZXI+IGNyZWF0ZVBh
cnNlcigpIG92ZXJyaWRlOwogICAgIFJlZjxEb2N1bWVudD4gY2xvbmVEb2N1bWVudFdpdGhvdXRD
aGlsZHJlbigpIGNvbnN0IGZpbmFsOwogCkBAIC03Myw2ICs2NSwxNiBAQCBwcml2YXRlOgogICAg
IFRyZWVTY29wZU9yZGVyZWRNYXAgbV93aW5kb3dOYW1lZEl0ZW07CiB9OwogCitpbmxpbmUgUmVm
PEhUTUxEb2N1bWVudD4gSFRNTERvY3VtZW50OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MRG9jdW1lbnQoZnJhbWUs
IHVybCwgSFRNTERvY3VtZW50Q2xhc3MpKTsKK30KKworaW5saW5lIFJlZjxIVE1MRG9jdW1lbnQ+
IEhUTUxEb2N1bWVudDo6Y3JlYXRlU3ludGhlc2l6ZWREb2N1bWVudChGcmFtZSYgZnJhbWUsIGNv
bnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxEb2N1bWVudCgm
ZnJhbWUsIHVybCwgSFRNTERvY3VtZW50Q2xhc3MsIFN5bnRoZXNpemVkKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpIVE1MRG9jdW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggNmM2YWY3YjI3NDM2ZDY1ZjhhMmQwYzdhMWEwNWI0ZDI2ZTE2NjlkYS4uZGI5OTZiOThhZGE0
NzUyZDQ2YTlmNmQ0ZjM0MjZiZGFlMmE1NmNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtODEsNyArODEsNyBAQCBIVE1MRm9ybUVsZW1lbnQ6On5IVE1MRm9y
bUVsZW1lbnQoKQogewogICAgIGRvY3VtZW50KCkuZm9ybUNvbnRyb2xsZXIoKS53aWxsRGVsZXRl
Rm9ybSgqdGhpcyk7CiAgICAgaWYgKCFzaG91bGRBdXRvY29tcGxldGUoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwor
ICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFj
a3MoKnRoaXMpOwogCiAgICAgbV9kZWZhdWx0QnV0dG9uID0gbnVsbHB0cjsKICAgICBmb3IgKGF1
dG8mIGFzc29jaWF0ZWRFbGVtZW50IDogbV9hc3NvY2lhdGVkRWxlbWVudHMpCkBAIC00MzksOSAr
NDM5LDkgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmkKICAgICAgICAgbV9hdHRyaWJ1dGVzLnNl
dEFjY2VwdENoYXJzZXQodmFsdWUpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gYXV0b2NvbXBsZXRl
QXR0cikgewogICAgICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKQotICAgICAgICAgICAg
ZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxs
YmFja3MoKnRoaXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLnVucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgICAgICBk
b2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMp
OwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUobmFtZSwg
dmFsdWUpOwogfQpAQCAtODQzLDggKzg0Myw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXN1
bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpkaWRNb3Zl
VG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVu
dCkKIHsKICAgICBpZiAoIXNob3VsZEF1dG9jb21wbGV0ZSgpKSB7Ci0gICAgICAgIG9sZERvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7Ci0gICAg
ICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhp
cyk7CisgICAgICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25D
YWxsYmFja3MoKnRoaXMpOworICAgICAgICBuZXdEb2N1bWVudC5yZWdpc3RlckZvckRvY3VtZW50
U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogCiAgICAgSFRNTEVsZW1lbnQ6OmRp
ZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCmluZGV4IDA0MTcxMGY2MGNhMDAwMzVkMDJh
YjQ3NTRkMzYwYjU3Nzk3OThjZDguLjRlNzMxOWI4MGRhNjNiYWJjZWQ5ODc3NGI5YWI1YzEzZDlk
MzE5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkRP
TVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAj
aW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCAxZGNkN2UxZGQxNDQ1ZGE5N2UyMWYwZTRlMGJlYjY4
MzhkNGRmZjZiLi5iY2Y4OWM3NzU1YmU0YmRmMGI1OTc4MjY5ZjBmMWFlN2RlOTkwYzczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTE2MSw3ICsxNjEsNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QoU2hhZG93
Um9vdCYpCiBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiB7CiAgICAgaWYg
KG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3Rl
ckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQo
KS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAg
IC8vIE5lZWQgdG8gcmVtb3ZlIGZvcm0gYXNzb2NpYXRpb24gd2hpbGUgdGhpcyBpcyBzdGlsbCBh
biBIVE1MSW5wdXRFbGVtZW50CiAgICAgLy8gc28gdGhhdCB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUg
Y2FsbGVkIGNvcnJlY3RseS4KQEAgLTE2OSw3ICsxNjksNyBAQCBIVE1MSW5wdXRFbGVtZW50Ojp+
SFRNTElucHV0RWxlbWVudCgpCiAgICAgLy8gc2V0Rm9ybSgwKSBtYXkgcmVnaXN0ZXIgdGhpcyB0
byBhIGRvY3VtZW50LWxldmVsIHJhZGlvIGJ1dHRvbiBncm91cC4KICAgICAvLyBXZSBzaG91bGQg
dW5yZWdpc3RlciBpdCB0byBhdm9pZCBhY2Nlc3NpbmcgYSBkZWxldGVkIG9iamVjdC4KICAgICBp
ZiAoaXNSYWRpb0J1dHRvbigpKQotICAgICAgICBkb2N1bWVudCgpLmZvcm1Db250cm9sbGVyKCku
cmFkaW9CdXR0b25Hcm91cHMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgICAgIGRvY3VtZW50
KCkuZm9ybUNvbnRyb2xsZXIoKS5yYWRpb0J1dHRvbkdyb3VwcygpLnJlbW92ZUJ1dHRvbigqdGhp
cyk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBpZiAobV9oYXNUb3VjaEV2ZW50SGFu
ZGxlcikKICAgICAgICAgZG9jdW1lbnQoKS5kaWRSZW1vdmVFdmVudFRhcmdldE5vZGUoKnRoaXMp
OwpAQCAtOTIzLDcgKzkyMyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChi
b29sIG5vd0NoZWNrZWQpCiAgICAgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogCiAgICAg
aWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKLSAg
ICAgICAgYnV0dG9ucy0+dXBkYXRlQ2hlY2tlZFN0YXRlKHRoaXMpOworICAgICAgICBidXR0b25z
LT51cGRhdGVDaGVja2VkU3RhdGUoKnRoaXMpOwogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRl
cmVyKCktPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpKQogICAgICAgICByZW5kZXJlcigpLT50aGVt
ZSgpLnN0YXRlQ2hhbmdlZCgqcmVuZGVyZXIoKSwgQ29udHJvbFN0YXRlczo6Q2hlY2tlZFN0YXRl
KTsKICAgICB1cGRhdGVWYWxpZGl0eSgpOwpAQCAtMTQ0MiwxMyArMTQ0MiwxMyBAQCBib29sIEhU
TUxJbnB1dEVsZW1lbnQ6Om5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6cmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpCiB7CiAgICAg
aWYgKG5lZWRzU3VzcGVuc2lvbkNhbGxiYWNrKCkpCi0gICAgICAgIGRvY3VtZW50KCkucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3VtZW50
KCkucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVucmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5l
ZWRlZCgpCiB7CiAgICAgaWYgKCFuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKQotICAgICAgICBk
b2N1bWVudCgpLnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxi
YWNrcygqdGhpcyk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1D
b250cm9sKCkgY29uc3QKQEAgLTE1NDcsMTEgKzE1NDcsMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3VtZW50
JiBuZXcKIAogICAgIC8vIEFsd2F5cyB1bnJlZ2lzdGVyIGZvciBjYWNoZSBjYWxsYmFja3Mgd2hl
biBsZWF2aW5nIGEgZG9jdW1lbnQsIGV2ZW4gaWYgd2Ugd291bGQgb3RoZXJ3aXNlIGxpa2UgdG8g
YmUgcmVnaXN0ZXJlZAogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaygpKSB7Ci0gICAg
ICAgIG9sZERvY3VtZW50LnVucmVnaXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3Mo
dGhpcyk7Ci0gICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKHRoaXMpOworICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICAgICAgbmV3RG9jdW1lbnQucmVnaXN0
ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogICAgIH0KICAgICBpZiAo
aXNSYWRpb0J1dHRvbigpKQotICAgICAgICBvbGREb2N1bWVudC5mb3JtQ29udHJvbGxlcigpLnJh
ZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKHRoaXMpOworICAgICAgICBvbGREb2N1bWVu
dC5mb3JtQ29udHJvbGxlcigpLnJhZGlvQnV0dG9uR3JvdXBzKCkucmVtb3ZlQnV0dG9uKCp0aGlz
KTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIGlmIChtX2hhc1RvdWNoRXZlbnRIYW5k
bGVyKSB7CiAgICAgICAgIG9sZERvY3VtZW50LmRpZFJlbW92ZUV2ZW50VGFyZ2V0Tm9kZSgqdGhp
cyk7CkBAIC0xODY4LDcgKzE4NjgsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzSW5SZXF1
aXJlZFJhZGlvQnV0dG9uR3JvdXAoKQogewogICAgIEFTU0VSVChpc1JhZGlvQnV0dG9uKCkpOwog
ICAgIGlmIChSYWRpb0J1dHRvbkdyb3VwcyogYnV0dG9ucyA9IHJhZGlvQnV0dG9uR3JvdXBzKCkp
Ci0gICAgICAgIHJldHVybiBidXR0b25zLT5pc0luUmVxdWlyZWRHcm91cCh0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIGJ1dHRvbnMtPmlzSW5SZXF1aXJlZEdyb3VwKCp0aGlzKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTE5MDAsMTQgKzE5MDAsMTQgQEAgUmFkaW9CdXR0b25Hcm91cHMqIEhU
TUxJbnB1dEVsZW1lbnQ6OnJhZGlvQnV0dG9uR3JvdXBzKCkgY29uc3QKIAogaW5saW5lIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6YWRkVG9SYWRpb0J1dHRvbkdyb3VwKCkKIHsKLSAgICBpZiAoUmFk
aW9CdXR0b25Hcm91cHMqIGJ1dHRvbnMgPSByYWRpb0J1dHRvbkdyb3VwcygpKQotICAgICAgICBi
dXR0b25zLT5hZGRCdXR0b24odGhpcyk7CisgICAgaWYgKGF1dG8qIGJ1dHRvbnMgPSByYWRpb0J1
dHRvbkdyb3VwcygpKQorICAgICAgICBidXR0b25zLT5hZGRCdXR0b24oKnRoaXMpOwogfQogCiBp
bmxpbmUgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpyZW1vdmVGcm9tUmFkaW9CdXR0b25Hcm91cCgp
CiB7Ci0gICAgaWYgKFJhZGlvQnV0dG9uR3JvdXBzKiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91
cHMoKSkKLSAgICAgICAgYnV0dG9ucy0+cmVtb3ZlQnV0dG9uKHRoaXMpOworICAgIGlmIChhdXRv
KiBidXR0b25zID0gcmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAgYnV0dG9ucy0+cmVtb3Zl
QnV0dG9uKCp0aGlzKTsKIH0KIAogdW5zaWduZWQgSFRNTElucHV0RWxlbWVudDo6aGVpZ2h0KCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDE4MGM0
M2QxNTg5Njk1ZDk2NmRlMDkwM2U5ZGUyYjJjNDUxOGMzMGYuLjVlMDlmMDliMjgyY2I3ODJmODcy
MjVjNTZkYjc1NjUyMTJlMzYxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcApAQCAtNzA0LDMzICs3MDQsMzMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZWdp
c3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9tZWRpYVNlc3Npb24t
PnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1Vu
dGlsTWVkaWFDYW5TdGFydCkKLSAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRo
aXMpOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZG9jdW1lbnQucmVnaXN0ZXJG
b3JNZWRpYVZvbHVtZUNhbGxiYWNrcyh0aGlzKTsKLSAgICBkb2N1bWVudC5yZWdpc3RlckZvclBy
aXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5y
ZWdpc3RlckZvck1lZGlhVm9sdW1lQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdp
c3RlckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5k
aWYKIAotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxi
YWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5n
ZWRDYWxsYmFja3MoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmICht
X3JlcXVpcmVDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKQotICAgICAgICBkb2N1
bWVudC5yZWdpc3RlckZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3ModGhpcyk7
CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENh
bGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJ
UFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAg
ICAgICBkb2N1bWVudC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
dGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZENhbGxiYWNrcygqdGhpcyk7CiAgICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgZG9jdW1lbnQucmVnaXN0ZXJG
b3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogI2VuZGlmCiAKICAgICBkb2N1
bWVudC5yZWdpc3RlckZvckFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRD
YWxsYmFja3MoKnRoaXMpOwogCi0gICAgZG9jdW1lbnQuYWRkQXVkaW9Qcm9kdWNlcih0aGlzKTsK
KyAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKICAgICBhZGRFbGVtZW50VG9E
b2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
QEAgLTc0NSwzMyArNzQ1LDMzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3Rlcldp
dGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9tZWRpYVNlc3Npb24tPnVucmVn
aXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxN
ZWRpYUNhblN0YXJ0KQotICAgICAgICBkb2N1bWVudC5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50LnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigq
dGhpcyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBkb2N1bWVudC51bnJlZ2lz
dGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3ModGhpcyk7Ci0gICAgZG9jdW1lbnQudW5yZWdpc3Rl
ckZvclByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1
bWVudC51bnJlZ2lzdGVyRm9yTWVkaWFWb2x1bWVDYWxsYmFja3MoKnRoaXMpOworICAgIGRvY3Vt
ZW50LnVucmVnaXN0ZXJGb3JQcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRo
aXMpOwogI2VuZGlmCiAKLSAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yVmlzaWJp
bGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAKICNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgaWYgKG1fcmVxdWlyZUNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3Mp
Ci0gICAgICAgIGRvY3VtZW50LnVucmVnaXN0ZXJGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2Vk
Q2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yQ2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFn
ZVNjYWxlRmFjdG9yKQotICAgICAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZv
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogICAgIGRvY3VtZW50LnVu
cmVnaXN0ZXJGb3JVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZENhbGxiYWNrcygq
dGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0g
ICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlz
KTsKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tz
KCp0aGlzKTsKICNlbmRpZgogCiAgICAgZG9jdW1lbnQudW5yZWdpc3RlckZvckFsbG93c01lZGlh
RG9jdW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogCi0gICAgZG9j
dW1lbnQucmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKyAgICBkb2N1bWVudC5yZW1vdmVBdWRp
b1Byb2R1Y2VyKCp0aGlzKTsKICAgICByZW1vdmVFbGVtZW50RnJvbURvY3VtZW50TWFwKCp0aGlz
LCBkb2N1bWVudCk7CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQpAQCAtMTM0MSw3ICsxMzQx
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKICAgICAg
ICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCA9IHRydWU7Ci0gICAgICAg
IGRvY3VtZW50KCkuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTQwNjgsNyArNDA2OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRk
VGV4dFRyYWNrKFJlZjxUZXh0VHJhY2s+JiYgdHJhY2spCiAgICAgaWYgKCFtX3JlcXVpcmVDYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzKSB7CiAgICAgICAgIG1fcmVxdWlyZUNhcHRp
b25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3MgPSB0cnVlOwogICAgICAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwotICAgICAgICBkb2N1bWVudC5yZWdpc3RlckZv
ckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWRDYWxsYmFja3ModGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50LnJlZ2lzdGVyRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAg
bV9jYXB0aW9uRGlzcGxheU1vZGUgPSBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygp
LmNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgIH0KQEAgLTU2MTIsNyArNTYxMiw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXllcigpCiAKICAgICBpZiAobV9pc1dhaXRp
bmdVbnRpbE1lZGlhQ2FuU3RhcnQpIHsKICAgICAgICAgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2Fu
U3RhcnQgPSBmYWxzZTsKLSAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVNZWRpYUNhblN0YXJ0TGlz
dGVuZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAobV9wbGF5ZXIpIHsKQEAgLTU3NTcsNyArNTc1
Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKICAgICBzZXRTaG91bGRCdWZm
ZXJEYXRhKHRydWUpOwogCiAgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c1BsYXli
YWNrQWZ0ZXJSZXN1bWluZygpKQotICAgICAgICBkb2N1bWVudCgpLmFkZE1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcih0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIoKnRoaXMpOwogICAgIGVsc2UKICAgICAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOwog
CkBAIC03MzgyLDkgKzczODIsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE1lZGlhQ29u
dHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sIGRlcGVuZHNPblBhZwogICAgIG1fbWVk
aWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yID0gZGVwZW5kc09uUGFnZVNjYWxlOwog
CiAgICAgaWYgKG1fbWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKQotICAgICAg
ICBkb2N1bWVudCgpLnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0
aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWRDYWxsYmFja3MoKnRoaXMpOwogICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lz
dGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9j
dW1lbnQoKS51bnJlZ2lzdGVyRm9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZENhbGxiYWNrcygqdGhp
cyk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9sc0FmdGVy
UHJlc2VudGF0aW9uTW9kZUNoYW5nZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29s
bGVjdGlvbi5jcHAKaW5kZXggZDEwYzM3ZmIyMjg4MWMxM2MzMGYwN2M3YjkzNGY5MzI3NTQ2ZjFl
YS4uZTExOGJkZTFkZGMyMjNhOTNiNzE4NGJhNjA3Nzg5MWNjYWEyYjc2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcApAQCAtMjUsNyArMjUsNiBAQAogCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50Lmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRl
eCA5ZTVjMjc3NzdkNjkzZTRmNjRiZWYxYjczMTI1ODM5NWM0YWQyMzA0Li45NWRhYzEzNWI3NTYy
YjZhMjEwOTIzNDJmYmFkMGZhNGUwYWQ4ODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQ6OmZpbmlzaENyZWF0aW5nKCkKIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6On5IVE1MUGx1Z0luSW1hZ2VFbGVtZW50KCkKIHsKICAgICBpZiAobV9uZWVkc0RvY3VtZW50
QWN0aXZhdGlvbkNhbGxiYWNrcykKLSAgICAgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9j
dW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLnVucmVn
aXN0ZXJGb3JEb2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3MoKnRoaXMpOwogfQogCiB2b2lkIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnNldERpc3BsYXlTdGF0ZShEaXNwbGF5U3RhdGUgc3RhdGUp
CkBAIC0xODUsNyArMTg1LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHkKICAgICAvLyBpbmFj
dGl2ZSBvciByZWFjdGl2YXRlcyBzbyBpdCBjYW4gY2xlYXIgdGhlIHJlbmRlcmVyIGJlZm9yZSBn
b2luZyBpbnRvIHRoZSBwYWdlIGNhY2hlLgogICAgIGlmICghbV9uZWVkc0RvY3VtZW50QWN0aXZh
dGlvbkNhbGxiYWNrcykgewogICAgICAgICBtX25lZWRzRG9jdW1lbnRBY3RpdmF0aW9uQ2FsbGJh
Y2tzID0gdHJ1ZTsKLSAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVu
c2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZWdpc3RlckZvckRvY3Vt
ZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgfQogCiAgICAgaWYgKGRpc3BsYXlT
dGF0ZSgpID09IERpc3BsYXlpbmdTbmFwc2hvdCkgewpAQCAtMzAxLDggKzMwMSw4IEBAIHZvaWQg
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9s
ZERvY3VtZW50LCBEb2N1bWVuCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oJmRvY3VtZW50KCkgPT0gJm5ld0RvY3VtZW50KTsKICAgICBpZiAobV9uZWVkc0RvY3VtZW50
QWN0aXZhdGlvbkNhbGxiYWNrcykgewotICAgICAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9y
RG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgICAgICBuZXdEb2N1bWVudC5y
ZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgb2xk
RG9jdW1lbnQudW5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7
CisgICAgICAgIG5ld0RvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2FsbGJh
Y2tzKCp0aGlzKTsKICAgICB9CiAKICAgICBpZiAobV9pbWFnZUxvYWRlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKaW5kZXggY2ZkZWI1MzUyMjllOTRkY2ZlM2Fl
YjhjZDRiYzk2YjI4ODVjOTU5YS4uMjM2MTQyMjk5MjQ2NmY1YzQ2MjVkZTk0YzRmMDY0YTYzZTVm
YmQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQaWN0dXJlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCmluZGV4IDgxOGVmZjZlNzU5
NjFiYmEwYjViYWM2NTY4MTk5NTFiZTIwNmJiMzguLjgwZjcyMmE2MDVhZTkyYjkxZWQ3ODlmMTc3
ZWI3OGFmZjFlMjcwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBs
YXRlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVt
ZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkhUTUxUZW1wbGF0ZUVsZW1lbnQu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50LmgiCiAjaW5j
bHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKaW5kZXggN2ZjZmM3NTBmZGVhZTEyMmJmZDFh
ZDI4NGVmM2M1NTA3YjI2YWU2MS4uNjEzZDU0NTBkZGNmZDQ0ZGRjZGI3YmE2ZWY0MDJkOTgxZmIy
MWYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAKQEAgLTE4NCw5ICsx
ODQsOSBAQCBib29sIFJhZGlvSW5wdXRUeXBlOjppc1JhZGlvQnV0dG9uKCkgY29uc3QKIGJvb2wg
UmFkaW9JbnB1dFR5cGU6Om1hdGNoZXNJbmRldGVybWluYXRlUHNldWRvQ2xhc3MoKSBjb25zdAog
ewogICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmIGVs
ZW1lbnQgPSAqdGhpcy0+ZWxlbWVudCgpOwotICAgIGlmIChjb25zdCBSYWRpb0J1dHRvbkdyb3Vw
cyogcmFkaW9CdXR0b25Hcm91cHMgPSBlbGVtZW50LnJhZGlvQnV0dG9uR3JvdXBzKCkpCi0gICAg
ICAgIHJldHVybiAhcmFkaW9CdXR0b25Hcm91cHMtPmhhc0NoZWNrZWRCdXR0b24oJmVsZW1lbnQp
OworICAgIGF1dG8mIGVsZW1lbnQgPSAqdGhpcy0+ZWxlbWVudCgpOworICAgIGlmIChhdXRvKiBy
YWRpb0J1dHRvbkdyb3VwcyA9IGVsZW1lbnQucmFkaW9CdXR0b25Hcm91cHMoKSkKKyAgICAgICAg
cmV0dXJuICFyYWRpb0J1dHRvbkdyb3Vwcy0+aGFzQ2hlY2tlZEJ1dHRvbihlbGVtZW50KTsKICAg
ICByZXR1cm4gIWVsZW1lbnQuY2hlY2tlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50V3JpdGVyLmNwcAppbmRleCAwOTNhMGZlNzg4Y2E0NmUxYzViOTJiNmQ2NTEzMTNiYzA3
N2FiMTI1Li44NjU5M2MzMGFhZDU3NjMxOWMyN2RlZGYxN2QyMTUyZDJlODlmOTIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCBi
b29sIERvY3VtZW50V3JpdGVyOjpiZWdpbihjb25zdCBVUkwmIHVybFJlZmVyZW5jZSwgYm9vbCBk
aXNwYXRjaCwgRG9jdW1lbnQqIG93bgogCiAgICAgYm9vbCBzaG91bGRSZXVzZURlZmF1bHRWaWV3
ID0gbV9mcmFtZS0+bG9hZGVyKCkuc3RhdGVNYWNoaW5lKCkuaXNEaXNwbGF5aW5nSW5pdGlhbEVt
cHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5pc1NlY3VyZVRyYW5zaXRpb25U
byh1cmwpOwogICAgIGlmIChzaG91bGRSZXVzZURlZmF1bHRWaWV3KQotICAgICAgICBkb2N1bWVu
dC0+dGFrZURPTVdpbmRvd0Zyb20obV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGRvY3Vt
ZW50LT50YWtlRE9NV2luZG93RnJvbSgqbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgZWxzZQog
ICAgICAgICBkb2N1bWVudC0+Y3JlYXRlRE9NV2luZG93KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAppbmRleCAyYzc2NmY5NTg1NDg3NTc3ZmI1ZDZhOWQzY2I3ODcyZGRmZWUyOTAxLi41
OGUwYjA4NTFhM2IzOTkwMGEzNzI3ZDNhNmM1NjQ5MTg5ODhkZjIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCkBAIC0xODQ0LDkgKzE4NDQsOSBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVu
ZQogICAgICAgICBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlbW90aW9uRXZl
bnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50KSkg
ewogICAgICAgICAgICAgaWYgKGlzU2FtZVNlY3VyaXR5T3JpZ2luQXNNYWluRnJhbWUoKSAmJiBp
c1NlY3VyZUNvbnRleHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZlbnQpCi0gICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigpLT5hZGREZXZpY2VFdmVudExp
c3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIoKS5hZGREZXZpY2VFdmVudExpc3RlbmVyKCp0aGlzKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmRldmljZU1v
dGlvbkNvbnRyb2xsZXIoKS0+YWRkRGV2aWNlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZGV2aWNlTW90aW9uQ29udHJvbGxlcigpLmFkZERldmlj
ZUV2ZW50TGlzdGVuZXIoKnRoaXMpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzU2VjdXJlQ29udGV4dCgpKQogICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiQmxvY2tlZCBhdHRlbXB0IHRvIGFkZCBhIGRldmljZSBt
b3Rpb24gb3Igb3JpZW50YXRpb24gbGlzdGVuZXIgZnJvbSBjaGlsZCBmcmFtZSB0aGF0IHdhc24n
dCB0aGUgc2FtZSBzZWN1cml0eSBvcmlnaW4gYXMgdGhlIG1haW4gcGFnZS4iX3MpOwpAQCAtMTg1
OCwxMyArMTg1OCwxMyBAQCBib29sIERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZQogICAgICAgICBpZiAoZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCkgewogICAgICAgICAgICAg
aWYgKGlzU2FtZVNlY3VyaXR5T3JpZ2luQXNNYWluRnJhbWUoKSAmJiBpc1NlY3VyZUNvbnRleHQo
KSkgewogICAgICAgICAgICAgICAgIGlmIChEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBjb250cm9s
bGVyID0gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6ZnJvbShwYWdlKCkpKQotICAgICAgICAgICAg
ICAgICAgICBjb250cm9sbGVyLT5hZGREZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAg
ICAgICAgICAgICAgICBjb250cm9sbGVyLT5hZGREZXZpY2VFdmVudExpc3RlbmVyKCp0aGlzKTsK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJCbG9j
a2VkIGF0dGVtcHQgdG8gYWRkIGEgZGV2aWNlIG1vdGlvbiBsaXN0ZW5lciBmcm9tIGNoaWxkIGZy
YW1lIHRoYXQgd2Fzbid0IHRoZSBzYW1lIHNlY3VyaXR5IG9yaWdpbiBhcyB0aGUgbWFpbiBwYWdl
LiJfcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZp
Y2VvcmllbnRhdGlvbkV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoaXNTYW1lU2VjdXJpdHlPcmln
aW5Bc01haW5GcmFtZSgpICYmIGlzU2VjdXJlQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IERldmljZU9yaWVu
dGF0aW9uQ29udHJvbGxlcjo6ZnJvbShwYWdlKCkpKQotICAgICAgICAgICAgICAgICAgICBjb250
cm9sbGVyLT5hZGREZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBjb250cm9sbGVyLT5hZGREZXZpY2VFdmVudExpc3RlbmVyKCp0aGlzKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzU2VjdXJlQ29udGV4dCgpKQogICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiQmxvY2tlZCBhdHRlbXB0IHRvIGFkZCBhIGRl
dmljZSBvcmllbnRhdGlvbiBsaXN0ZW5lciBmcm9tIGNoaWxkIGZyYW1lIHRoYXQgd2Fzbid0IHRo
ZSBzYW1lIHNlY3VyaXR5IG9yaWdpbiBhcyB0aGUgbWFpbiBwYWdlLiJfcyk7CkBAIC0xOTMxLDE2
ICsxOTMxLDE2IEBAIGJvb2wgRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyCiAjaWYgRU5BQkxFKERFVklDRV9P
UklFTlRBVElPTikKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGVsc2UgaWYgKGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlbW90aW9uRXZlbnQgJiYgZG9jdW1lbnQoKSkKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZGV2aWNlTW90aW9uQ29udHJvbGxlcigpLT5yZW1vdmVEZXZpY2VF
dmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT5kZXZpY2VNb3Rpb25Db250
cm9sbGVyKCkucmVtb3ZlRGV2aWNlRXZlbnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgZWxzZSBpZiAo
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50ICYmIGRvY3Vt
ZW50KCkpCi0gICAgICAgIGRvY3VtZW50KCktPmRldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcigp
LT5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLT5k
ZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKCp0
aGlzKTsKICNlbHNlCiAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5kZXZp
Y2Vtb3Rpb25FdmVudCkgewogICAgICAgICBpZiAoRGV2aWNlTW90aW9uQ29udHJvbGxlciogY29u
dHJvbGxlciA9IERldmljZU1vdGlvbkNvbnRyb2xsZXI6OmZyb20ocGFnZSgpKSkKLSAgICAgICAg
ICAgIGNvbnRyb2xsZXItPnJlbW92ZURldmljZUV2ZW50TGlzdGVuZXIodGhpcyk7CisgICAgICAg
ICAgICBjb250cm9sbGVyLT5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKCp0aGlzKTsKICAgICB9
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZGV2aWNlb3JpZW50YXRpb25FdmVu
dCkgewogICAgICAgICBpZiAoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKiBjb250cm9sbGVy
ID0gRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpmcm9tKHBhZ2UoKSkpCi0gICAgICAgICAg
ICBjb250cm9sbGVyLT5yZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICAg
ICAgY29udHJvbGxlci0+cmVtb3ZlRGV2aWNlRXZlbnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgfQog
I2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjZW5kaWYgLy8gRU5BQkxFKERFVklDRV9P
UklFTlRBVElPTikKQEAgLTIwNDgsMTQgKzIwNDgsMTQgQEAgdm9pZCBET01XaW5kb3c6OnJlbW92
ZUFsbEV2ZW50TGlzdGVuZXJzKCkKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMt
PmRvY3VtZW50KCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmRldmljZU1vdGlvbkNvbnRyb2xsZXIo
KS0+cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci0gICAgICAgIGRvY3VtZW50
LT5kZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0
ZW5lcnModGhpcyk7CisgICAgICAgIGRvY3VtZW50LT5kZXZpY2VNb3Rpb25Db250cm9sbGVyKCku
cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoKnRoaXMpOworICAgICAgICBkb2N1bWVudC0+
ZGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyKCkucmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5l
cnMoKnRoaXMpOwogICAgIH0KICNlbHNlCiAgICAgaWYgKERldmljZU1vdGlvbkNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBEZXZpY2VNb3Rpb25Db250cm9sbGVyOjpmcm9tKHBhZ2UoKSkpCi0gICAg
ICAgIGNvbnRyb2xsZXItPnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKHRoaXMpOworICAg
ICAgICBjb250cm9sbGVyLT5yZW1vdmVBbGxEZXZpY2VFdmVudExpc3RlbmVycygqdGhpcyk7CiAg
ICAgaWYgKERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlciogY29udHJvbGxlciA9IERldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcjo6ZnJvbShwYWdlKCkpKQotICAgICAgICBjb250cm9sbGVyLT5y
ZW1vdmVBbGxEZXZpY2VFdmVudExpc3RlbmVycyh0aGlzKTsKKyAgICAgICAgY29udHJvbGxlci0+
cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoKnRoaXMpOwogI2VuZGlmIC8vIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAjZW5kaWYgLy8gRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAKaW5kZXggNDFhMDI3YjEzNTUxNTJj
NDg2MzNkZTRkMDFjZjZjMjAyZDNkNjdiYS4uMzM2N2QzZGJmNTlmYzMzNTcyNDk3NThhYzYzZGQx
NzI1ZTA3NjM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwCkBA
IC0zMiw0MiArMzIsNDEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EZXZpY2VDb250cm9s
bGVyOjpEZXZpY2VDb250cm9sbGVyKERldmljZUNsaWVudCogY2xpZW50KQorRGV2aWNlQ29udHJv
bGxlcjo6RGV2aWNlQ29udHJvbGxlcihEZXZpY2VDbGllbnQmIGNsaWVudCkKICAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1fdGltZXIoKnRoaXMsICZEZXZpY2VDb250cm9sbGVyOjpmaXJl
RGV2aWNlRXZlbnQpCiB7Ci0gICAgQVNTRVJUKG1fY2xpZW50KTsKIH0KIAotdm9pZCBEZXZpY2VD
b250cm9sbGVyOjphZGREZXZpY2VFdmVudExpc3RlbmVyKERPTVdpbmRvdyogd2luZG93KQordm9p
ZCBEZXZpY2VDb250cm9sbGVyOjphZGREZXZpY2VFdmVudExpc3RlbmVyKERPTVdpbmRvdyYgd2lu
ZG93KQogewogICAgIGJvb2wgd2FzRW1wdHkgPSBtX2xpc3RlbmVycy5pc0VtcHR5KCk7Ci0gICAg
bV9saXN0ZW5lcnMuYWRkKHdpbmRvdyk7CisgICAgbV9saXN0ZW5lcnMuYWRkKCZ3aW5kb3cpOwog
CiAgICAgaWYgKGhhc0xhc3REYXRhKCkpIHsKLSAgICAgICAgbV9sYXN0RXZlbnRMaXN0ZW5lcnMu
YWRkKHdpbmRvdyk7CisgICAgICAgIG1fbGFzdEV2ZW50TGlzdGVuZXJzLmFkZCgmd2luZG93KTsK
ICAgICAgICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICBtX3RpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogICAgIH0KIAogICAgIGlmICh3YXNFbXB0eSkKLSAgICAgICAgbV9j
bGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsKKyAgICAgICAgbV9jbGllbnQuc3RhcnRVcGRhdGluZygp
OwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OnJlbW92ZURldmljZUV2ZW50TGlzdGVuZXIo
RE9NV2luZG93KiB3aW5kb3cpCit2b2lkIERldmljZUNvbnRyb2xsZXI6OnJlbW92ZURldmljZUV2
ZW50TGlzdGVuZXIoRE9NV2luZG93JiB3aW5kb3cpCiB7Ci0gICAgbV9saXN0ZW5lcnMucmVtb3Zl
KHdpbmRvdyk7Ci0gICAgbV9sYXN0RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKHdpbmRvdyk7CisgICAg
bV9saXN0ZW5lcnMucmVtb3ZlKCZ3aW5kb3cpOworICAgIG1fbGFzdEV2ZW50TGlzdGVuZXJzLnJl
bW92ZSgmd2luZG93KTsKICAgICBpZiAobV9saXN0ZW5lcnMuaXNFbXB0eSgpKQotICAgICAgICBt
X2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7CisgICAgICAgIG1fY2xpZW50LnN0b3BVcGRhdGluZygp
OwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OnJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVu
ZXJzKERPTVdpbmRvdyogd2luZG93KQordm9pZCBEZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxE
ZXZpY2VFdmVudExpc3RlbmVycyhET01XaW5kb3cmIHdpbmRvdykKIHsKLSAgICBtX2xpc3RlbmVy
cy5yZW1vdmVBbGwod2luZG93KTsKLSAgICBtX2xhc3RFdmVudExpc3RlbmVycy5yZW1vdmVBbGwo
d2luZG93KTsKKyAgICBtX2xpc3RlbmVycy5yZW1vdmVBbGwoJndpbmRvdyk7CisgICAgbV9sYXN0
RXZlbnRMaXN0ZW5lcnMucmVtb3ZlQWxsKCZ3aW5kb3cpOwogICAgIGlmIChtX2xpc3RlbmVycy5p
c0VtcHR5KCkpCi0gICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKKyAgICAgICAgbV9j
bGllbnQuc3RvcFVwZGF0aW5nKCk7CiB9CiAKIHZvaWQgRGV2aWNlQ29udHJvbGxlcjo6ZGlzcGF0
Y2hEZXZpY2VFdmVudChFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RldmljZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJv
bGxlci5oCmluZGV4IDIwMGYzMTg5Yzc3NWY1OGM2OWFlZGE5Y2UyZTJiNmY3ZjE1MTMxNGIuLmUx
NjAzODVhZmUyZjk3MzUzYzBlYTIyZjI5ZTg1NmYxOGUyMGIxYTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRGV2aWNlQ29udHJvbGxlci5oCkBAIC00MCwxNiArNDAsMTYgQEAgY2xhc3MgUGFnZTsKIGNs
YXNzIERldmljZUNvbnRyb2xsZXIgOiBwdWJsaWMgU3VwcGxlbWVudDxQYWdlPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGV2aWNlQ29udHJv
bGxlcihEZXZpY2VDbGllbnQqKTsKKyAgICBleHBsaWNpdCBEZXZpY2VDb250cm9sbGVyKERldmlj
ZUNsaWVudCYpOwogICAgIHZpcnR1YWwgfkRldmljZUNvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CiAK
LSAgICB2b2lkIGFkZERldmljZUV2ZW50TGlzdGVuZXIoRE9NV2luZG93Kik7Ci0gICAgdm9pZCBy
ZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKERPTVdpbmRvdyopOwotICAgIHZvaWQgcmVtb3ZlQWxs
RGV2aWNlRXZlbnRMaXN0ZW5lcnMoRE9NV2luZG93Kik7CisgICAgdm9pZCBhZGREZXZpY2VFdmVu
dExpc3RlbmVyKERPTVdpbmRvdyYpOworICAgIHZvaWQgcmVtb3ZlRGV2aWNlRXZlbnRMaXN0ZW5l
cihET01XaW5kb3cmKTsKKyAgICB2b2lkIHJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKERP
TVdpbmRvdyYpOwogCiAgICAgdm9pZCBkaXNwYXRjaERldmljZUV2ZW50KEV2ZW50Jik7CiAgICAg
Ym9vbCBpc0FjdGl2ZSgpIHsgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7IH0KLSAgICBE
ZXZpY2VDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgRGV2aWNlQ2xp
ZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgdmlydHVhbCBib29sIGhh
c0xhc3REYXRhKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4g
Z2V0TGFzdEV2ZW50KCkgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtNTksNyArNTksNyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8RE9NV2luZG93Pj4gbV9saXN0ZW5l
cnM7CiAgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPERPTVdpbmRvdz4+IG1fbGFzdEV2ZW50TGlz
dGVuZXJzOwotICAgIERldmljZUNsaWVudCogbV9jbGllbnQ7CisgICAgRGV2aWNlQ2xpZW50JiBt
X2NsaWVudDsKICAgICBUaW1lciBtX3RpbWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCmluZGV4IDg5NDZlOTUwYTE1NjE2ZDE1YzNhOTFmNGFiYmQzMjY1ZjQzNTg0YjEu
LjU5ZmQzZTAxYWY5ZGQ3NTdkZDAzMTMyMTg1MmM2MTk3YzI5NmMyYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxF
bGVtZW50LmgiCkBAIC0zNTc3LDcgKzM1NzgsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGlkU3Rh
cnREcmFnKCkKICAgICB9CiAKICAgICBpZiAoZHJhZ2dlZENvbnRlbnRSYW5nZSkgewotICAgICAg
ICBkcmFnZ2VkQ29udGVudFJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdn
ZWRDb250ZW50TWFya2VyKGRyYWdnZWRDb250ZW50UmFuZ2UuZ2V0KCkpOworICAgICAgICBkcmFn
Z2VkQ29udGVudFJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250
ZW50TWFya2VyKCpkcmFnZ2VkQ29udGVudFJhbmdlKTsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gbV9mcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5y
ZXBhaW50Um9vdENvbnRlbnRzKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNw
cAppbmRleCBkMTMyNTEzNTMyMmVhYWIzYWRhODFlN2I3YjZlNzcyMjU3YzRjZmMxLi45MzBmMzBi
NWM5YTk1MzNkODkyNzA2OGRkNzk5MWY4NWIyYjQ0OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
U291cmNlLmNwcApAQCAtNzQsNyArNzQsNyBAQCBFeGNlcHRpb25PcjxSZWY8RXZlbnRTb3VyY2U+
PiBFdmVudFNvdXJjZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleAogICAg
IH0KIAogICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBFdmVudFNvdXJjZShjb250ZXh0
LCBmdWxsVVJMLCBldmVudFNvdXJjZUluaXQpKTsKLSAgICBzb3VyY2UtPnNldFBlbmRpbmdBY3Rp
dml0eShzb3VyY2UucHRyKCkpOworICAgIHNvdXJjZS0+c2V0UGVuZGluZ0FjdGl2aXR5KHNvdXJj
ZS5nZXQoKSk7CiAgICAgc291cmNlLT5zY2hlZHVsZUluaXRpYWxDb25uZWN0KCk7CiAgICAgc291
cmNlLT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gV1RGTW92ZShzb3VyY2UpOwpAQCAt
MTI1LDcgKzEyNSw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6Om5ldHdvcmtSZXF1ZXN0RW5kZWQoKQog
ICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKICAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTsK
ICAgICBlbHNlCi0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiB9CiAKIHZvaWQgRXZlbnRTb3VyY2U6OnNjaGVk
dWxlSW5pdGlhbENvbm5lY3QoKQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6
OmNsb3NlKCkKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAgIGVsc2UgewogICAgICAg
ICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMjYw
LDcgKzI2MCw3IEBAIHZvaWQgRXZlbnRTb3VyY2U6OmFib3J0Q29ubmVjdGlvbkF0dGVtcHQoKQog
ICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3RhdGUg
PSBDTE9TRUQ7Ci0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhpcyk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fc3RhdGUg
PT0gQ0xPU0VEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggNzNiYWZkYjQ2NjAyNzg1ZmY0MTQx
NWZlMjY5OWEwYWI3MTBhMTljYS4uYTRmODNiMjdmMGI2ZWNhZjY1MzMyMWQ2YTU1NDQ1N2VjZTY2
OWRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZv
cm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggZTQ3MTRhYWRmNmMwZDUyYTg4N2U2MmUxZTQ2OTI2MzE2YjY5Y2Q5Yi4uZjk2NDgxZjI4ZTc1
M2ZlNDE3YjFlNTUyZGQzZDhlN2I3ZDdjZjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVudC5oIgpA
QCAtNDQ2NCw3ICs0NDYzLDcgQEAgYm9vbCBGcmFtZVZpZXc6OnF1YWxpZmllc0FzVmlzdWFsbHlO
b25FbXB0eSgpIGNvbnN0CiAKICAgICBhdXRvIGlzTW9yZUNvbnRlbnRFeHBlY3RlZCA9IFsmXSgp
IHsKICAgICAgICAgLy8gUGVuZGluZyBjc3MvamF2YXNjcmlwdC9mb250IGxvYWRpbmcvcHJvY2Vz
c2luZyBtZWFucyB3ZSBzaG91bGQgd2FpdCBhIGxpdHRsZSBsb25nZXIuCi0gICAgICAgIGF1dG8g
aGFzUGVuZGluZ1NjcmlwdEV4ZWN1dGlvbiA9IGZyYW1lKCkuZG9jdW1lbnQoKS0+c2NyaXB0UnVu
bmVyKCkgJiYgZnJhbWUoKS5kb2N1bWVudCgpLT5zY3JpcHRSdW5uZXIoKS0+aGFzUGVuZGluZ1Nj
cmlwdHMoKTsKKyAgICAgICAgYXV0byBoYXNQZW5kaW5nU2NyaXB0RXhlY3V0aW9uID0gZnJhbWUo
KS5kb2N1bWVudCgpLT5zY3JpcHRSdW5uZXIoKS5oYXNQZW5kaW5nU2NyaXB0cygpOwogICAgICAg
ICBpZiAoaGFzUGVuZGluZ1NjcmlwdEV4ZWN1dGlvbikKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CmluZGV4IGFkNWYxNTRkOGVjOTc5MDgzYmQxNDU1YTM1MWRiMmVlMDE0YTIzZjIuLjhhM2IzYjk2
NWFiNjg3MzgyYmNlZjBmN2MyZWMxMzY4MTNkZWEzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9p
ZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBp
bnB1dCwgZG91YmxlIHBhcmFtKQogICAgIC8vIElmIHdlIGdldCBBbmltYXRpb25TdGF0ZUlucHV0
OjpSZXN0YXJ0QW5pbWF0aW9uIHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdhcmRs
ZXNzIG9mIHN0YXRlLgogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpNYWtl
TmV3KSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKICAg
ICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlz
LCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0
YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSBXVEY6Om51
bGxvcHQ7CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0
ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAg
aWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24pIHsKICAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0
eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsK
KyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCku
cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwogICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0YXJ0VGltZSA9IFdURjo6bnVsbG9wdDsKQEAg
LTE4Nyw3ICsxODcsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAKICAgICBpZiAoaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uKSB7CiAgICAgICAgIGlmIChtX2Fu
aW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkK
LSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCku
cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21Bbmlt
YXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIl
cCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0
aW9uU3RhdGUpKTsKICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpE
b25lOwogICAgICAgICBlbmRBbmltYXRpb24oKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEFu
aW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0
LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVk
LCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQg
d2l0aCBzdGFydCB0aW1lCiAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmlt
YXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0
aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKICAgICAgICAgICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlOwotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25D
b250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKIAogICAgICAgICAgICAgICAgIC8v
IFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KICAgICAgICAg
ICAgICAgICBpZiAobV9lbGVtZW50KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgQW5pbWF0aW9u
QmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJs
ZSBwYXJhbSkKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVPZmZzZXQgPSAtbV9hbmltYXRp
b24tPmRlbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5p
bWF0aW9uKHRpbWVPZmZzZXQpOwogCi0gICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOworICAgICAgICAgICAgICAgICAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAg
ICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSBlbHNlIHsKQEAgLTQzMSw3ICs0MzEsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6
OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFy
YW0pCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
dGFydGVkID0gc3RhcnRBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRl
QW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1h
dGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMzM5OTEz
Y2Q3MmM2NWM2NmQ5OWEzYmMzYzZmODE2ZTI5MWQ0ZjdmMC4uOGJiOTRlOTk4YWJlNWE2NWNkYjI4
MzJkNzVkZmYxZTZjNWE1OTdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTUwNywxNyArNTA3LDE1
IEBAIHVuc2lnbmVkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtCiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQordm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2Um
IGFuaW1hdGlvbikKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhpcyBhbmltYXRpb24gaXMgbm90IGlu
IHRoZSBzdGFydCB0aW1lIHdhaXRlcnMKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lUmVzcG9uc2UucmVtb3ZlKGFuaW1hdGlvbik7Ci0KLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUuYWRkKGFuaW1hdGlvbik7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUuYWRkKCZhbmltYXRpb24pOwogfQogCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25C
YXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFu
aW1hdGlvblRvUmVtb3ZlKQogewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1v
dmUoYW5pbWF0aW9uVG9SZW1vdmUpOworICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5y
ZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKIH0KIAogdm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQpAQCAtNTI5LDcgKzUyNyw3IEBAIHZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlQXZhaWxhYmxlKCkKICAgICBtX2FuaW1h
dGlvbnNXYWl0aW5nRm9yU3R5bGUuY2xlYXIoKTsKIH0KIAotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCit2b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uLCBib29sIHdpbGxHZXRSZXNw
b25zZSkKIHsKICAgICAvLyBJZiB3aWxsR2V0UmVzcG9uc2UgaXMgdHJ1ZSwgaXQgbWVhbnMgdGhp
cyBhbmltYXRpb24gaXMgYWN0dWFsbHkgd2FpdGluZyBmb3IgYSByZXNwb25zZQogICAgIC8vICh3
aGljaCB3aWxsIGNvbWUgaW4gYXMgYSBjYWxsIHRvIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSku
CkBAIC01NDgsMTcgKzU0NiwxNiBAQCB2b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQQogICAgIC8vIFRo
aXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlv
bnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAKICAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xl
LgogICAgIC8vCi0gICAgCisKICAgICBpZiAod2lsbEdldFJlc3BvbnNlKQogICAgICAgICBtX3dh
aXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gdHJ1ZTsKIAotICAgIG1fYW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5hZGQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1h
dGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuYWRkKCZhbmltYXRpb24pOwogfQogCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92
ZSkKK3ZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRv
UmVtb3ZlKQogewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5y
ZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUpOwotICAgIAorICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKICAgICBpZiAo
bV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKICAgICAg
ICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwogfQpAQCAtNTc0
LDkgKzU3MSw5IEBAIHZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VGlt
ZVJlc3BvbnNlKE1vbm90b25pY1RpbWUgdGltZSkKICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0
Tm90aWZpY2F0aW9uID0gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQor
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCiB7Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVSZW1vdmVkOiAlcCIs
IHRoaXMsIGFuaW1hdGlvbik7CisgICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVSZW1vdmVkOiAlcCIsIHRoaXMsICZhbmlt
YXRpb24pOwogCiAgICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoYW5pbWF0
aW9uKTsKICAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZShhbmltYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKaW5kZXggYjMyNGM2MWIzM2Nh
ZmY4MzdmNzQ3MTQ3MDc5MjEyMWQ1YThmZTBkMi4uNTVmNTg2ODUyYzczMWU3MjBhYjNmYmEzMjU5
ZmE2MDMyYzU1ZjVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCkBAIC05MywxMyArOTMs
MTMgQEAgcHVibGljOgogICAgIHZvaWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7CiAgICAgdm9pZCBy
ZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKE1vbm90b25pY1RpbWUpOwogICAgIAotICAgIHZvaWQg
YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2b2lk
IHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqKTsKKyAg
ICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJik7Cisg
ICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNl
Jik7CiAKLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZShBbmltYXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOwotICAgIHZvaWQgcmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSop
OworICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFu
aW1hdGlvbkJhc2UmLCBib29sIHdpbGxHZXRSZXNwb25zZSk7CisgICAgdm9pZCByZW1vdmVGcm9t
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJik7CiAK
LSAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSopOworICAgIHZv
aWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlJik7CiAKICAgICB2b2lkIHVw
ZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50Jik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCmluZGV4IDZm
OTdhYTU0ODgyMDFjNjljYmJhZTYzMTA4M2NmMjU5Mjc3ZGJiYjkuLmE3ODE2MzE3NTMzZTg4MDY5
MTRiOTBkZWUwMjg5YmZiM2E5YTIxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtNjQsMTQgKzY0LDE0IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhckVsZW1lbnQoKQogICAgICAgICAvLyBDbGVhciB0
aGUgcmVuZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3ZSBhcmUg
aW4gdGhlIG1pZGRsZSBvZgogICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCiAgICAgICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRp
b24uZ2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoKnRyYW5zaXRpb24pOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIo
KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1w
dHkoKSkgewogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFs
dWVzKCkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxs
QmVSZW1vdmVkKGFuaW1hdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9s
bGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKICAgICAgICAgICAgIGFu
aW1hdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE1OSw3ICsxNTksNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbEFu
aW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50U3R5bGUu
Z2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBleGlzdGluZyBJbXBsaWNpdEFuaW1hdGlvbiAl
cCBmb3IgcHJvcGVydHkgJXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVydHlOYW1lKHByb3ApKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxs
QmVSZW1vdmVkKGltcGxBbmltKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCppbXBsQW5pbSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGVxdWFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgVmVjdG9yPGludD4gdG9CZVJl
bW92ZWQ7CiAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMo
KSkgewogICAgICAgICBpZiAoIXRyYW5zaXRpb24tPmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBh
bmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0aW9uLmdl
dCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVS
ZW1vdmVkKCp0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFu
c2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKTsKICAgICAgICAgICAgIExPRyhBbmltYXRpb25z
LCAiUmVtb3ZpbmcgSW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9w
ZXJ0eSAlcyIsIHRyYW5zaXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJh
bnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSkpOwogICAgICAgICB9CkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXIKICAgICAvLyBNYWtlIGEgbGlzdCBvZiBhbmlt
YXRpb25zIHRvIGJlIHJlbW92ZWQuCiAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZy
YW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMuY29u
dGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0aW9u
Q29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbWF0aW9uLmdldCgpKTsKKyAg
ICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCph
bmltYXRpb24pOwogICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwogICAgICAgICAgICAg
TE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1l
bnQgJXAiLCBhbmltYXRpb24uZ2V0KCksICZlbGVtZW50KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCAwNWM4NWM2NmI4ZWU5ZTNmN2Y3ZTQzYmNjNTcwMmIw
MjYxZmE2NGQ5Li40MDA4Y2IzNThmZjk0NzY3N2MwNTVhNmYxY2JmY2FiMzRhNTBkMzAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgRnJh
bWU6OmluaXRXaXRoU2ltcGxlSFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgc3R5bGUsIGNvbnN0
IFVSTCYgdXJsKQogewogICAgIG1fbG9hZGVyLT5pbml0Rm9yU3ludGhlc2l6ZWREb2N1bWVudCh1
cmwpOwogCi0gICAgYXV0byBkb2N1bWVudCA9IEhUTUxEb2N1bWVudDo6Y3JlYXRlU3ludGhlc2l6
ZWREb2N1bWVudCh0aGlzLCB1cmwpOworICAgIGF1dG8gZG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6
OmNyZWF0ZVN5bnRoZXNpemVkRG9jdW1lbnQoKnRoaXMsIHVybCk7CiAgICAgZG9jdW1lbnQtPnNl
dENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50Q29tcGF0aWJpbGl0eU1vZGU6OkxpbWl0ZWRRdWly
a3NNb2RlKTsKICAgICBkb2N1bWVudC0+Y3JlYXRlRE9NV2luZG93KCk7CiAgICAgc2V0RG9jdW1l
bnQoZG9jdW1lbnQuY29weVJlZigpKTsKIAotICAgIGF1dG8gcm9vdEVsZW1lbnQgPSBIVE1MSHRt
bEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudC5nZXQoKSk7CisgICAgYXV0byByb290RWxlbWVudCA9
IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAotICAgIGF1dG8gYm9keSA9IEhU
TUxCb2R5RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LmdldCgpKTsKKyAgICBhdXRvIGJvZHkgPSBI
VE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgaWYgKCFzdHlsZS5pc0VtcHR5
KCkpCiAgICAgICAgIGJvZHktPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0ciwgc3R5
bGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXgg
MzY3NDVlYzBjMjQzODMxODc3Y2MzYTQ2YWRkM2Q5YjFkNzE0Yzg3Zi4uYmE5Zjc2NTI4ZDgxMDA3
MjUyYzgxNGFhZjliYThjMDZhMjg4NWIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbQpAQCAtNzg3LDEwICs3ODcsMTAgQEAgc3RhdGljIENvbnRhaW5lck5v
ZGUqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIG5vZGUs
IGZsb2EKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIHdpdGggYSB2YWxpZCBzY3JvbGxhYmxl
IGFyZWEgc3RhcnRpbmcgd2l0aCB0aGUgY3VycmVudAogICAgIC8vIG5vZGUgYW5kIHRyYXZlcnNp
bmcgaXRzIHBhcmVudHMgKG9yIHNoYWRvdyBob3N0cykuCiAgICAgZm9yIChDb250YWluZXJOb2Rl
KiBjYW5kaWRhdGUgPSBub2RlOyBjYW5kaWRhdGU7IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+cGFy
ZW50T3JTaGFkb3dIb3N0Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MSUZyYW1lRWxlbWVu
dD4oY2FuZGlkYXRlKSkKKyAgICAgICAgaWYgKGlzPEhUTUxJRnJhbWVFbGVtZW50PigqY2FuZGlk
YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChpczxIVE1MSHRtbEVs
ZW1lbnQ+KGNhbmRpZGF0ZSkgfHwgaXM8SFRNTERvY3VtZW50PihjYW5kaWRhdGUpKQorICAgICAg
ICBpZiAoaXM8SFRNTEh0bWxFbGVtZW50PigqY2FuZGlkYXRlKSB8fCBpczxIVE1MRG9jdW1lbnQ+
KCpjYW5kaWRhdGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgUmVu
ZGVyQm94KiBib3ggPSBjYW5kaWRhdGUtPnJlbmRlckJveCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcAppbmRleCA4NDk3MWI2NGE2ODQ4NTM2MDkwMWIwY2YzMjNlM2NkODNi
NmMwZmJiLi5jMDA0ZmM5ZTcwNGE2YWQzMjM0OWZiODI0Y2RjNWRkZDAzNjAxYjVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpCiAgICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVu
dC4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMu
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+CiAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCks
IGVsZW1lbnQpOworICAgICAgICAgICAgZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCksICplbGVtZW50KTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuY3BwCmluZGV4IDBjNWI2NzliMDcyNjUy
MmQzZmI4ZTRkOTVkOWVkNDc3YTQ4ZDQ3MjQuLjA3NGY0MmY5MmNhODM2MTdlNGE1ODAwNmVkNzY5
NDBlNmUzYWY0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwCkBAIC0xNjUsOSArMTY1LDkgQEAgc3RhdGljIGlubGluZSB2b2lk
IHJlbW92ZUZyb21DYWNoZUFuZEludmFsaWRhdGVEZXBlbmRlbmNpZXMoUmVuZGVyRWxlbWVudCYg
cmVuZGUKICAgICAgICAgICAgIGNsaXBwZXItPnJlbW92ZUNsaWVudEZyb21DYWNoZShyZW5kZXJl
cik7CiAgICAgfQogCi0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIXJlbmRlcmVyLmVs
ZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpCisgICAgaWYgKCFpczxTVkdFbGVtZW50PihyZW5kZXJl
ci5lbGVtZW50KCkpKQogICAgICAgICByZXR1cm47Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50Kj4q
IGRlcGVuZGVuY2llcyA9IHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnNldE9mRWxlbWVudHNSZWZlcmVuY2luZ1RhcmdldChkb3duY2FzdDxTVkdFbGVtZW50PihyZW5k
ZXJlci5lbGVtZW50KCkpKTsKKyAgICBhdXRvKiBkZXBlbmRlbmNpZXMgPSByZW5kZXJlci5kb2N1
bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5zZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJn
ZXQoZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnJlbmRlcmVyLmVsZW1lbnQoKSkpOwogICAgIGlmICgh
ZGVwZW5kZW5jaWVzKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKaW5k
ZXggMGQxZTM0NjRkYTQ2MTYyMmRmZDM5OGJmYTZlMTc1NmNmOWRmNzNiZC4uOTMxMDQzNTM4Yjhi
OGM5NTU5NDAwNzBmZTUwMDA3OWIyMDdiNDAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5jcHAKQEAg
LTE3MSwxOSArMTcxLDE5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXI6OnJlZ2lz
dGVyUmVzb3VyY2UoKQogewogICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyYgZXh0ZW5zaW9ucyA9
IHN2Z0V4dGVuc2lvbnNGcm9tRWxlbWVudChlbGVtZW50KCkpOwogICAgIGlmICghZXh0ZW5zaW9u
cy5pc0lkT2ZQZW5kaW5nUmVzb3VyY2UobV9pZCkpIHsKLSAgICAgICAgZXh0ZW5zaW9ucy5hZGRS
ZXNvdXJjZShtX2lkLCB0aGlzKTsKKyAgICAgICAgZXh0ZW5zaW9ucy5hZGRSZXNvdXJjZShtX2lk
LCAqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpQZW5kaW5nRWxlbWVudHM+IGNsaWVudHMgPSBleHRlbnNp
b25zLnJlbW92ZVBlbmRpbmdSZXNvdXJjZShtX2lkKTsKIAogICAgIC8vIENhY2hlIHVzIHdpdGgg
dGhlIG5ldyBpZC4KLSAgICBleHRlbnNpb25zLmFkZFJlc291cmNlKG1faWQsIHRoaXMpOworICAg
IGV4dGVuc2lvbnMuYWRkUmVzb3VyY2UobV9pZCwgKnRoaXMpOwogCiAgICAgLy8gVXBkYXRlIGNh
Y2hlZCByZXNvdXJjZXMgb2YgcGVuZGluZyBjbGllbnRzLgogICAgIGZvciAoYXV0byogY2xpZW50
IDogKmNsaWVudHMpIHsKICAgICAgICAgQVNTRVJUKGNsaWVudC0+aGFzUGVuZGluZ1Jlc291cmNl
cygpKTsKLSAgICAgICAgZXh0ZW5zaW9ucy5jbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3Np
YmxlKGNsaWVudCk7CisgICAgICAgIGV4dGVuc2lvbnMuY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2Vz
SWZQb3NzaWJsZSgqY2xpZW50KTsKICAgICAgICAgYXV0byogcmVuZGVyZXIgPSBjbGllbnQtPnJl
bmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzLmNwcAppbmRleCBh
MmNjNGJhZDliZjk4NTZkNjEyMTFkNzRlNjU3NmZmMWJkMDkxMDBjLi4yYjA2NTE3YWQ3NTgyOGE3
OGEzYjBlYTJlNjdjYWFiOTJjNTU5YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jlc291cmNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZXNvdXJjZXMuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGlubGluZSBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcGFpbnRpbmdSZXNvdXJjZUZyb21TVkdQYWludChE
b2N1bWVudCYKIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyUGVuZGluZ1Jlc291cmNlKFNW
R0RvY3VtZW50RXh0ZW5zaW9ucyYgZXh0ZW5zaW9ucywgY29uc3QgQXRvbWljU3RyaW5nJiBpZCwg
U1ZHRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBleHRlbnNpb25zLmFkZFBlbmRpbmdSZXNvdXJj
ZShpZCwgJmVsZW1lbnQpOworICAgIGV4dGVuc2lvbnMuYWRkUGVuZGluZ1Jlc291cmNlKGlkLCBl
bGVtZW50KTsKIH0KIAogYm9vbCBTVkdSZXNvdXJjZXM6OmJ1aWxkQ2FjaGVkUmVzb3VyY2VzKGNv
bnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jlc291cmNlc0NhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3Bw
CmluZGV4IGRhMjRjMDc2MjEwMDAyMjg1NjNmY2I1ODNjMDRkMDVlZWMwMjEyZDQuLjE5MTk1YWEx
ZGFiYzY2ZTRiMzU2NTk3MmVjOTFmODk0NzdmNDAzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVzb3VyY2VzQ2FjaGUuY3BwCkBAIC0xNjMsOSArMTYzLDgg
QEAgdm9pZCBTVkdSZXNvdXJjZXNDYWNoZTo6cmVzb3VyY2VEZXN0cm95ZWQoUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXImIHJlc291cmNlKQogICAgIGZvciAoYXV0byYgaXQgOiBjYWNoZS5tX2Nh
Y2hlKSB7CiAgICAgICAgIGlmIChpdC52YWx1ZS0+cmVzb3VyY2VEZXN0cm95ZWQocmVzb3VyY2Up
KSB7CiAgICAgICAgICAgICAvLyBNYXJrIHVzZXJzIG9mIGRlc3Ryb3llZCByZXNvdXJjZXMgYXMg
cGVuZGluZyByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBpZCBvZiB0aGUgb2xkIHJlc291cmNlLgot
ICAgICAgICAgICAgRWxlbWVudCYgcmVzb3VyY2VFbGVtZW50ID0gcmVzb3VyY2UuZWxlbWVudCgp
OwotICAgICAgICAgICAgRWxlbWVudCogY2xpZW50RWxlbWVudCA9IGl0LmtleS0+ZWxlbWVudCgp
OwotICAgICAgICAgICAgY2xpZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHJlc291cmNlRWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgp
LCBjbGllbnRFbGVtZW50KTsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudEVsZW1lbnQgPSAqaXQu
a2V5LT5lbGVtZW50KCk7CisgICAgICAgICAgICBjbGllbnRFbGVtZW50LmRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShyZXNvdXJjZS5lbGVtZW50KCku
Z2V0SWRBdHRyaWJ1dGUoKSwgY2xpZW50RWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IDRlYzFh
OGM4NWNiNDUxMjQ1NmEzNjhhMzNhMDQ3MzVhMjg5OGUzYzguLjVjNDUzMzViNWE1MzMzMDg4YjVk
ZmU0MmQ0NjI5ZWFkNmY1YThkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCkBAIC00OCwyNyArNDgsMjUgQEAgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
OjpTVkdEb2N1bWVudEV4dGVuc2lvbnMoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6On5TVkdEb2N1bWVudEV4dGVuc2lvbnMoKSA9IGRlZmF1bHQ7CiAKLXZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjphZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIGVs
ZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkVGltZUNvbnRhaW5lcihTVkdT
VkdFbGVtZW50JiBlbGVtZW50KQogewotICAgIG1fdGltZUNvbnRhaW5lcnMuYWRkKGVsZW1lbnQp
OworICAgIG1fdGltZUNvbnRhaW5lcnMuYWRkKCZlbGVtZW50KTsKICAgICBpZiAobV9hcmVBbmlt
YXRpb25zUGF1c2VkKQotICAgICAgICBlbGVtZW50LT5wYXVzZUFuaW1hdGlvbnMoKTsKKyAgICAg
ICAgZWxlbWVudC5wYXVzZUFuaW1hdGlvbnMoKTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OnJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgbV90aW1lQ29udGFpbmVycy5yZW1vdmUoZWxlbWVudCk7CisgICAg
bV90aW1lQ29udGFpbmVycy5yZW1vdmUoJmVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6YWRkUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIqIHJlc291cmNlKQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNlQ29u
dGFpbmVyJiByZXNvdXJjZSkKIHsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotCiAgICAgaWYgKGlk
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmVwbGFjZXMgcmVzb3VyY2Ug
aWYgYWxyZWFkeSBwcmVzZW50LCB0byBoYW5kbGUgcG90ZW50aWFsIGlkIGNoYW5nZXMKLSAgICBt
X3Jlc291cmNlcy5zZXQoaWQsIHJlc291cmNlKTsKKyAgICBtX3Jlc291cmNlcy5zZXQoaWQsICZy
ZXNvdXJjZSk7CiB9CiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVSZXNvdXJj
ZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKQpAQCAtMTQxLDE5ICsxMzksMTcgQEAgdm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAg
ICByZXBvcnRNZXNzYWdlKG1fZG9jdW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJFcnJvcjog
IiArIG1lc3NhZ2UpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGlu
Z1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lk
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQsIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAg
ICAgaWYgKGlkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byByZXN1bHQg
PSBtX3BlbmRpbmdSZXNvdXJjZXMuYWRkKGlkLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpCiAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5p
cXVlPFBlbmRpbmdFbGVtZW50cz4oKTsKLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5hZGQo
ZWxlbWVudCk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKCZlbGVtZW50KTsKIAot
ICAgIGVsZW1lbnQtPnNldEhhc1BlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICBlbGVtZW50LnNldEhh
c1BlbmRpbmdSZXNvdXJjZXMoKTsKIH0KIAogYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6Omlz
SWRPZlBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdApAQCAtMTY0
LDQ5ICsxNjAsNDMgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzSWRPZlBlbmRpbmdS
ZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdAogICAgIHJldHVybiBtX3BlbmRp
bmdSZXNvdXJjZXMuY29udGFpbnMoaWQpOwogfQogCi1ib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6aXNFbGVtZW50V2l0aFBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNl
cyhFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIC8vIFRoaXMgYWxnb3JpdGhtIHRha2Vz
IHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgcGVuZGluZyByZXNvdXJjZXMgYW5k
IG5lZWQgbm90LgogICAgIC8vIElmIHBlcmZvcm1hbmNlIGJlY29tZXMgYW4gaXNzdWUgd2UgY2Fu
IGtlZXAgYSBjb3VudGVkIHNldCBvZiBlbGVtZW50cyBhbmQgYW5zd2VyIHRoZSBxdWVzdGlvbiBl
ZmZpY2llbnRseS4KLSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50
cyA6IG1fcGVuZGluZ1Jlc291cmNlcy52YWx1ZXMoKSkgewogICAgICAgICBBU1NFUlQoZWxlbWVu
dHMpOwotCi0gICAgICAgIGlmIChlbGVtZW50cy0+Y29udGFpbnMoZWxlbWVudCkpCisgICAgICAg
IGlmIChlbGVtZW50cy0+Y29udGFpbnMoJmVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OmlzUGVuZGluZ1Jlc291cmNlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0
cmluZyYgaWQpIGNvbnN0Citib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aXNQZW5kaW5nUmVz
b3VyY2UoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KICAgICBpZiAoIWlzSWRPZlBlbmRpbmdSZXNvdXJjZShp
ZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX3BlbmRpbmdSZXNvdXJj
ZXMuZ2V0KGlkKS0+Y29udGFpbnMoZWxlbWVudCk7CisgICAgcmV0dXJuIG1fcGVuZGluZ1Jlc291
cmNlcy5nZXQoaWQpLT5jb250YWlucygmZWxlbWVudCk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKEVsZW1lbnQqIGVs
ZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6Y2xlYXJIYXNQZW5kaW5nUmVzb3Vy
Y2VzSWZQb3NzaWJsZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghaXNFbGVtZW50V2l0
aFBlbmRpbmdSZXNvdXJjZXMoZWxlbWVudCkpCi0gICAgICAgIGVsZW1lbnQtPmNsZWFySGFzUGVu
ZGluZ1Jlc291cmNlcygpOworICAgICAgICBlbGVtZW50LmNsZWFySGFzUGVuZGluZ1Jlc291cmNl
cygpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21Q
ZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmIGVsZW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgLy8gUmVtb3ZlIHRoZSBlbGVtZW50IGZy
b20gcGVuZGluZyByZXNvdXJjZXMuCi0gICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMuaXNFbXB0
eSgpICYmIGVsZW1lbnQtPmhhc1BlbmRpbmdSZXNvdXJjZXMoKSkgeworICAgIGlmICghbV9wZW5k
aW5nUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiBlbGVtZW50Lmhhc1BlbmRpbmdSZXNvdXJjZXMoKSkg
ewogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3ZlZDsKICAgICAgICAgZm9y
IChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGluZ1Jlc291cmNlcykgewogICAgICAgICAgICAgUGVu
ZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IHJlc291cmNlLnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1w
dHkoKSk7CiAKLSAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CisgICAgICAg
ICAgICBlbGVtZW50cy0+cmVtb3ZlKCZlbGVtZW50KTsKICAgICAgICAgICAgIGlmIChlbGVtZW50
cy0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZXNvdXJj
ZS5rZXkpOwogICAgICAgICB9CkBAIC0yMjYsNyArMjE2LDcgQEAgdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OnJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBlbGVt
ZW50KQogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCgh
ZWxlbWVudHMtPmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxl
bWVudCk7CisgICAgICAgICAgICBlbGVtZW50cy0+cmVtb3ZlKCZlbGVtZW50KTsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVk
LmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAgICB9CkBAIC0yODEsNDAgKzI3MSwyOSBAQCBS
ZWZQdHI8RWxlbWVudD4gU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVtZW50RnJvbVBl
bmRpbmdSZXNvdXJjZXNGb3JSZW1vdgogICAgIHJldHVybiBlbGVtZW50OwogfQogCi1IYXNoU2V0
PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1lbnRzUmVmZXJl
bmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpIGNvbnN0CitIYXNoU2V0
PFNWR0VsZW1lbnQqPiogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXRPZkVsZW1lbnRzUmVmZXJl
bmNpbmdUYXJnZXQoU1ZHRWxlbWVudCYgcmVmZXJlbmNlZEVsZW1lbnQpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICBjb25zdCBhdXRvIGl0ID0gbV9lbGVtZW50
RGVwZW5kZW5jaWVzLmZpbmQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2Vs
ZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CisgICAgcmV0dXJuIG1fZWxlbWVudERlcGVuZGVuY2llcy5nZXQoJnJl
ZmVyZW5jZWRFbGVtZW50KTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZEVs
ZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50KiByZWZlcmVuY2luZ0VsZW1lbnQsIFNW
R0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50KQordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmFkZEVsZW1lbnRSZWZlcmVuY2luZ1RhcmdldChTVkdFbGVtZW50JiByZWZlcmVuY2luZ0VsZW1l
bnQsIFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAgIEFTU0VSVChyZWZlcmVu
Y2luZ0VsZW1lbnQpOwotICAgIEFTU0VSVChyZWZlcmVuY2VkRWxlbWVudCk7Ci0KLSAgICBpZiAo
SGFzaFNldDxTVkdFbGVtZW50Kj4qIGVsZW1lbnRzID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmdl
dChyZWZlcmVuY2VkRWxlbWVudCkpIHsKLSAgICAgICAgZWxlbWVudHMtPmFkZChyZWZlcmVuY2lu
Z0VsZW1lbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBlbGVtZW50cyA9
IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxTVkdFbGVtZW50Kj4+KCk7Ci0gICAgZWxlbWVudHMt
PmFkZChyZWZlcmVuY2luZ0VsZW1lbnQpOwotICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5zZXQo
cmVmZXJlbmNlZEVsZW1lbnQsIFdURk1vdmUoZWxlbWVudHMpKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fZWxlbWVudERlcGVuZGVuY2llcy5lbnN1cmUoJnJlZmVyZW5jZWRFbGVtZW50LCBbJnJlZmVy
ZW5jaW5nRWxlbWVudF0geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0
PFNWR0VsZW1lbnQqPj4oc3RkOjppbml0aWFsaXplcl9saXN0PFNWR0VsZW1lbnQqPiB7ICZyZWZl
cmVuY2luZ0VsZW1lbnQgfSk7CisgICAgfSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+YWRkKCZyZWZlcmVuY2luZ0VsZW1lbnQp
OwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJl
bmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZXJlbmNpbmdFbGVtZW50KQordm9pZCBTVkdE
b2N1bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNW
R0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVudCkKIHsKICAgICBWZWN0b3I8U1ZHRWxlbWVudCo+
IHRvQmVSZW1vdmVkOwogCiAgICAgZm9yIChhdXRvJiBkZXBlbmRlbmN5IDogbV9lbGVtZW50RGVw
ZW5kZW5jaWVzKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gZGVw
ZW5kZW5jeS5rZXk7Ci0gICAgICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+JiByZWZlcmVuY2luZ0Vs
ZW1lbnRzID0gKmRlcGVuZGVuY3kudmFsdWU7Ci0gICAgICAgIHJlZmVyZW5jaW5nRWxlbWVudHMu
cmVtb3ZlKHJlZmVyZW5jaW5nRWxlbWVudCk7CisgICAgICAgIGF1dG8mIHJlZmVyZW5jaW5nRWxl
bWVudHMgPSAqZGVwZW5kZW5jeS52YWx1ZTsKKyAgICAgICAgcmVmZXJlbmNpbmdFbGVtZW50cy5y
ZW1vdmUoJnJlZmVyZW5jaW5nRWxlbWVudCk7CiAgICAgICAgIGlmIChyZWZlcmVuY2luZ0VsZW1l
bnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZWZlcmVuY2Vk
RWxlbWVudCk7CisgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoZGVwZW5kZW5jeS5rZXkp
OwogICAgIH0KIAogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRvQmVSZW1vdmVkKQpAQCAtMzMw
LDExICszMDksOSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVidWlsZEVsZW1lbnRz
KCkKIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNsZWFyVGFyZ2V0RGVwZW5kZW5jaWVz
KFNWR0VsZW1lbnQmIHJlZmVyZW5jZWRFbGVtZW50KQogewotICAgIGF1dG8gaXQgPSBtX2VsZW1l
bnREZXBlbmRlbmNpZXMuZmluZCgmcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBt
X2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCkpCisgICAgYXV0byogcmVmZXJlbmNpbmdFbGVtZW50
cyA9IG1fZWxlbWVudERlcGVuZGVuY2llcy5nZXQoJnJlZmVyZW5jZWRFbGVtZW50KTsKKyAgICBp
ZiAoIXJlZmVyZW5jaW5nRWxlbWVudHMpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoaXQt
PmtleSA9PSAmcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBy
ZWZlcmVuY2luZ0VsZW1lbnRzID0gaXQtPnZhbHVlLmdldCgpOwogICAgIGZvciAoYXV0byogZWxl
bWVudCA6ICpyZWZlcmVuY2luZ0VsZW1lbnRzKSB7CiAgICAgICAgIG1fcmVidWlsZEVsZW1lbnRz
LmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgZWxlbWVudC0+Y2FsbENsZWFyVGFyZ2V0KCk7CkBA
IC0zNTgsMjMgKzMzNSwyNSBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVidWlsZEFs
bEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZgogICAgICAgICBlbGVt
ZW50LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKFNWR05hbWVzOjpocmVmQXR0cik7CiB9CiAKLXZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdl
dChTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCkKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpyZW1vdmVBbGxFbGVtZW50UmVmZXJlbmNlc0ZvclRhcmdldChTVkdFbGVtZW50JiByZWZl
cmVuY2VkRWxlbWVudCkKIHsKLSAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMucmVtb3ZlKHJlZmVy
ZW5jZWRFbGVtZW50KTsKLSAgICBtX3JlYnVpbGRFbGVtZW50cy5yZW1vdmVGaXJzdChyZWZlcmVu
Y2VkRWxlbWVudCk7CisgICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJlbW92ZSgmcmVmZXJlbmNl
ZEVsZW1lbnQpOworICAgIG1fcmVidWlsZEVsZW1lbnRzLnJlbW92ZUZpcnN0KCZyZWZlcmVuY2Vk
RWxlbWVudCk7CiB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotdm9pZCBTVkdEb2N1bWVudEV4
dGVuc2lvbnM6OnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCog
ZWxlbWVudCkKKwordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlZ2lzdGVyU1ZHRm9udEZh
Y2VFbGVtZW50KFNWR0ZvbnRGYWNlRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBtX3N2Z0ZvbnRG
YWNlRWxlbWVudHMuYWRkKGVsZW1lbnQpOworICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50cy5hZGQo
JmVsZW1lbnQpOwogfQogCi12b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6dW5yZWdpc3RlclNW
R0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9uczo6dW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250RmFj
ZUVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG1fc3ZnRm9udEZhY2VFbGVtZW50cy5j
b250YWlucyhlbGVtZW50KSk7Ci0gICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLnJlbW92ZShlbGVt
ZW50KTsKKyAgICBBU1NFUlQobV9zdmdGb250RmFjZUVsZW1lbnRzLmNvbnRhaW5zKCZlbGVtZW50
KSk7CisgICAgbV9zdmdGb250RmFjZUVsZW1lbnRzLnJlbW92ZSgmZWxlbWVudCk7CiB9CisKICNl
bmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKaW5k
ZXggZWY3MmU5NzY1ZWM2N2MxODIzYjBjM2RkM2ZkNTc0MzY1ZTc5NTBlZC4uYzQ5ZjJkYzczZDIx
YWViMzZhMTE4YzcxYTc4ZTUwMjU0YmY5YTMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuaApAQCAtNDMsMTAgKzQzLDEwIEBAIHB1YmxpYzoKICAgICBleHBs
aWNpdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMoRG9jdW1lbnQmKTsKICAgICB+U1ZHRG9jdW1lbnRF
eHRlbnNpb25zKCk7CiAgICAgCi0gICAgdm9pZCBhZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1l
bnQqKTsKLSAgICB2b2lkIHJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCopOworICAg
IHZvaWQgYWRkVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVU
aW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQmKTsKIAotICAgIHZvaWQgYWRkUmVzb3VyY2UoY29u
c3QgQXRvbWljU3RyaW5nJiBpZCwgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIqKTsKKyAgICB2
b2lkIGFkZFJlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlbmRlclNWR1Jlc291cmNl
Q29udGFpbmVyJik7CiAgICAgdm9pZCByZW1vdmVSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcm
IGlkKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciogcmVzb3VyY2VCeUlkKGNvbnN0
IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0OwogCkBAIC02MSwxOSArNjEsMTkgQEAgcHVibGljOgog
CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGUmIHJlc291cmNlc0NhY2hlKCkgeyByZXR1cm4gKm1fcmVz
b3VyY2VzQ2FjaGU7IH0KIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+KiBzZXRPZkVsZW1lbnRz
UmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpIGNvbnN0Owot
ICAgIHZvaWQgYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KFNWR0VsZW1lbnQqIHJlZmVyZW5j
aW5nRWxlbWVudCwgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIHZvaWQgcmVt
b3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCopOworICAgIEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+KiBzZXRPZkVsZW1lbnRzUmVmZXJlbmNpbmdUYXJnZXQoU1ZHRWxlbWVu
dCYgcmVmZXJlbmNlZEVsZW1lbnQpIGNvbnN0OworICAgIHZvaWQgYWRkRWxlbWVudFJlZmVyZW5j
aW5nVGFyZ2V0KFNWR0VsZW1lbnQmIHJlZmVyZW5jaW5nRWxlbWVudCwgU1ZHRWxlbWVudCYgcmVm
ZXJlbmNlZEVsZW1lbnQpOworICAgIHZvaWQgcmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVs
ZW1lbnQoU1ZHRWxlbWVudCYpOwogICAgIHZvaWQgcmVidWlsZEFsbEVsZW1lbnRSZWZlcmVuY2Vz
Rm9yVGFyZ2V0KFNWR0VsZW1lbnQmKTsKLSAgICB2b2lkIHJlbW92ZUFsbEVsZW1lbnRSZWZlcmVu
Y2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUFsbEVsZW1lbnRSZWZl
cmVuY2VzRm9yVGFyZ2V0KFNWR0VsZW1lbnQmKTsKIAogICAgIHZvaWQgY2xlYXJUYXJnZXREZXBl
bmRlbmNpZXMoU1ZHRWxlbWVudCYpOwogICAgIHZvaWQgcmVidWlsZEVsZW1lbnRzKCk7CiAKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50
Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnRGYWNlRWxl
bWVudHM7IH0KLSAgICB2b2lkIHJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0ZvbnRGYWNl
RWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChTVkdGb250
RmFjZUVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KFNWR0Zv
bnRGYWNlRWxlbWVudCYpOworICAgIHZvaWQgdW5yZWdpc3RlclNWR0ZvbnRGYWNlRWxlbWVudChT
VkdGb250RmFjZUVsZW1lbnQmKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtOTUsMTEgKzk1LDEx
IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIEhhc2hNYXAgY29udGFpbnMgYSBsaXN0IG9mIHBlbmRp
bmcgcmVzb3VyY2VzLiBQZW5kaW5nIHJlc291cmNlcywgYXJlIHN1Y2gKICAgICAvLyB3aGljaCBh
cmUgcmVmZXJlbmNlZCBieSBhbnkgb2JqZWN0IGluIHRoZSBTVkcgZG9jdW1lbnQsIGJ1dCBkbyBO
T1QgZXhpc3QgeWV0LgogICAgIC8vIEZvciBpbnN0YW5jZSwgZHluYW1pY2FsbHkgYnVpbGQgZ3Jh
ZGllbnRzIC8gcGF0dGVybnMgLyBjbGlwcGVycy4uLgotICAgIHZvaWQgYWRkUGVuZGluZ1Jlc291
cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZFBlbmRp
bmdSZXNvdXJjZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Jik7CiAgICAgYm9vbCBp
c0lkT2ZQZW5kaW5nUmVzb3VyY2UoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBpZCkg
Y29uc3Q7Ci0gICAgdm9pZCBjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3NpYmxlKEVsZW1l
bnQqKTsKLSAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50
Kik7CisgICAgYm9vbCBpc1BlbmRpbmdSZXNvdXJjZShFbGVtZW50JiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXNJZlBvc3Np
YmxlKEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNl
cyhFbGVtZW50Jik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdFbGVtZW50cz4gcmVtb3Zl
UGVuZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpOwogCiAgICAgLy8gVGhlIGZv
bGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIGZvciBzY2hlZHVsaW5nIGEgcGVuZGluZyBy
ZXNvdXJjZSB0byBiZSByZW1vdmVkLgpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8RWxlbWVudD4gcmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzRm9yUmVtb3Zh
bE1hcChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGlzRWxlbWVu
dFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGlzRWxlbWVu
dFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQmKSBjb25zdDsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGVuZGluZ0VsZW1lbnRzPiByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1vdmFsKGNvbnN0
IEF0b21pY1N0cmluZyYpOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IDRm
OWYwZDRkNGNlYTMyNjFkOTcyNzkyZjU2MTg1NDU3N2ExM2NhNmQuLjEyZWU3N2MwMGQ5MjUyZDY3
NDc3Y2RlZjFiYTFiMmQ5MGQ1YjU1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAg
LTI5MCw3ICsyOTAsNyBAQCBTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCgpCiAgICAgICAgIG1fc3Zn
UmFyZURhdGEgPSBudWxscHRyOwogICAgIH0KICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5yZWJ1aWxkQWxsRWxlbWVudFJlZmVyZW5jZXNGb3JUYXJnZXQoKnRoaXMpOwotICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVu
Y2VzRm9yVGFyZ2V0KHRoaXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KCp0aGlzKTsKIH0KIAogaW50IFNW
R0VsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIFNWR0Vs
ZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENvbnRh
aW5lck5vZGUmIG9sZAogCiAgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1
bWVudCkgewogICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5jbGVhclRh
cmdldERlcGVuZGVuY2llcygqdGhpcyk7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLnJlbW92ZUFsbEVsZW1lbnRSZWZlcmVuY2VzRm9yVGFyZ2V0KHRoaXMpOworICAg
ICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxFbGVtZW50UmVm
ZXJlbmNlc0ZvclRhcmdldCgqdGhpcyk7CiAgICAgfQogICAgIGludmFsaWRhdGVJbnN0YW5jZXMo
KTsKIH0KQEAgLTk5Miw3ICs5OTIsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jl
c291cmNlc0lmTmVlZGVkKCkKICAgICAgICAgQVNTRVJUKGNsaWVudEVsZW1lbnQtPmhhc1BlbmRp
bmdSZXNvdXJjZXMoKSk7CiAgICAgICAgIGlmIChjbGllbnRFbGVtZW50LT5oYXNQZW5kaW5nUmVz
b3VyY2VzKCkpIHsKICAgICAgICAgICAgIGNsaWVudEVsZW1lbnQtPmJ1aWxkUGVuZGluZ1Jlc291
cmNlKCk7Ci0gICAgICAgICAgICBleHRlbnNpb25zLmNsZWFySGFzUGVuZGluZ1Jlc291cmNlc0lm
UG9zc2libGUoY2xpZW50RWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBleHRlbnNpb25zLmNs
ZWFySGFzUGVuZGluZ1Jlc291cmNlc0lmUG9zc2libGUoKmNsaWVudEVsZW1lbnQpOwogICAgICAg
ICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKaW5k
ZXggNjVjZmRlMWRlNzcyNmFkN2I5YjIzNGU1YzM5ZDQ2ZGRiN2MzMzBhMS4uNWRhMGQ0OWUzYThk
NmYyMzk0MjBhZTUzYmY4ZmQ5MTdiMTE3MjNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoKnRo
aXMpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpyZXF1ZXN0SW1hZ2VSZXNvdXJjZSgp
CkBAIC05OSwxMyArOTksMTMgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGRQZW5kaW5n
UmVzb3VyY2UoKQogICAgICAgICBpZiAodGFyZ2V0LmlkZW50aWZpZXIuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2Uo
dGFyZ2V0LmlkZW50aWZpZXIsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHRhcmdldC5pZGVudGlmaWVyLCAqdGhp
cyk7CiAgICAgICAgICAgICBBU1NFUlQoaGFzUGVuZGluZ1Jlc291cmNlcygpKTsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAodGFyZ2V0LmVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKSB7CisgICAg
fSBlbHNlIGlmIChpczxTVkdFbGVtZW50PigqdGFyZ2V0LmVsZW1lbnQpKSB7CiAgICAgICAgIC8v
IFJlZ2lzdGVyIHVzIHdpdGggdGhlIHRhcmdldCBpbiB0aGUgZGVwZW5kZW5jaWVzIG1hcC4gQW55
IGNoYW5nZSBvZiBocmVmRWxlbWVudAogICAgICAgICAvLyB0aGF0IGxlYWRzIHRvIHJlbGF5b3V0
L3JlcGFpbnRpbmcgbm93IGluZm9ybXMgdXMsIHNvIHdlIGNhbiByZWFjdCB0byBpdC4KLSAgICAg
ICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5n
VGFyZ2V0KHRoaXMsIGRvd25jYXN0PFNWR0VsZW1lbnQ+KHRhcmdldC5lbGVtZW50LmdldCgpKSk7
CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZEVsZW1lbnRSZWZl
cmVuY2luZ1RhcmdldCgqdGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnRhcmdldC5lbGVtZW50
KSk7CiAgICAgfQogCiAgICAgaW52YWxpZGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEZhY2VFbGVtZW50LmNwcAppbmRleCBmZTNiNjE5NTMwZDUxMGI1NTcyYWUyNWEwYTE0Y2JkODBi
OGI2OWY3Li4zM2I2Yjc4YTg1MTEyNGMzZDNiN2NmZTc5YjUwOTU4YTM1YjBlYzVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMzA0LDcgKzMwNCw3IEBA
IE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvQW5jZXN0b3IoSW5zZXJ0CiAgICAgICAgIEFTU0VSVCghbV9mb250RWxlbWVudCk7
CiAgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdDo6RG9uZTsKICAgICB9
Ci0gICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVnaXN0ZXJTVkdGb250RmFj
ZUVsZW1lbnQodGhpcyk7CisgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVn
aXN0ZXJTVkdGb250RmFjZUVsZW1lbnQoKnRoaXMpOwogCiAgICAgcmVidWlsZEZvbnRGYWNlKCk7
CiAgICAgcmV0dXJuIEluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0OjpEb25lOwpAQCAtMzE2LDcg
KzMxNiw3IEBAIHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJl
bW92YWxUeXBlIHJlbW92YWxUeXBlLCBDb250YWluZXJOCiAKICAgICBpZiAocmVtb3ZhbFR5cGUu
ZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KSB7CiAgICAgICAgIG1fZm9udEVsZW1lbnQgPSBudWxs
cHRyOwotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS51bnJlZ2lzdGVy
U1ZHRm9udEZhY2VFbGVtZW50KHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS51bnJlZ2lzdGVyU1ZHRm9udEZhY2VFbGVtZW50KCp0aGlzKTsKICAgICAgICAg
bV9mb250RmFjZVJ1bGUtPm11dGFibGVQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKIAogICAgICAgICBk
b2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNUGF0aEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKaW5kZXggMThlOWRkNTE2ZjM1NzU2
ZDU4YjlmYzQ0YzVhNjNjNGYzYTA2N2IwNC4uNjBiYTcxNDc1MzQ5OGQ2ODEzZmZkYjg4NzlmNmNh
N2Q2ZDExYjEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5jcHAKQEAgLTU4
LDE3ICs1OCwxNyBAQCB2b2lkIFNWR01QYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2Uo
KQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlS
SVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgpKTsKICAgICBpZiAoIXRhcmdldC5lbGVtZW50KSB7
CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5
IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIHRhcmdldC5pZGVudGlmaWVyKSkK
KyAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jl
c291cmNlKCp0aGlzLCB0YXJnZXQuaWRlbnRpZmllcikpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgaWYgKCF0YXJnZXQuaWRlbnRpZmllci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJn
ZXQuaWRlbnRpZmllciwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UodGFyZ2V0LmlkZW50aWZpZXIsICp0aGlzKTsK
ICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmICh0YXJnZXQuZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICB9IGVs
c2UgaWYgKGlzPFNWR0VsZW1lbnQ+KCp0YXJnZXQuZWxlbWVudCkpIHsKICAgICAgICAgLy8gUmVn
aXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hh
bmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVw
YWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAgICBk
b2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJn
ZXQodGhpcywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5j
aW5nVGFyZ2V0KCp0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0LmVsZW1lbnQpKTsK
ICAgICB9CiAKICAgICB0YXJnZXRQYXRoQ2hhbmdlZCgpOwpAQCAtNzYsNyArNzYsNyBAQCB2b2lk
IFNWR01QYXRoRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogCiB2b2lkIFNWR01QYXRo
RWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRo
aXMpOworICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdl
dFJlZmVyZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogTm9kZTo6SW5zZXJ0ZWRJbnRvQW5j
ZXN0b3JSZXN1bHQgU1ZHTVBhdGhFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRp
b25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKaW5kZXggYTI4ZTcxNDUyY2M4MmM2
MTA3NzM0YmNkYmM3ZTQ3NWZjM2NiZmMzMy4uYTc3N2I4ZGRhZGRiYmMwZDhhMTAzNzMxOGFmOGFi
M2JlYWQzZjI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCkBAIC0yMzcs
NyArMjM3LDcgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6aW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5j
aWVzKCkKIHsKICAgICAvLyA8bXBhdGg+IGNhbiBvbmx5IHJlZmVyZW5jZSA8cGF0aD4gYnV0IHRo
aXMgZGVwZW5kZW5jeSBpcyBub3QgaGFuZGxlZCBpbgogICAgIC8vIG1hcmtGb3JMYXlvdXRBbmRQ
YXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbiBzbyB3ZSB1cGRhdGUgYW55IG1wYXRoIGRlcGVuZGVu
Y2llcyBtYW51YWxseS4KLSAgICBpZiAoSGFzaFNldDxTVkdFbGVtZW50Kj4qIGRlcGVuZGVuY2ll
cyA9IGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnNldE9mRWxlbWVudHNSZWZlcmVu
Y2luZ1RhcmdldCh0aGlzKSkgeworICAgIGlmIChIYXNoU2V0PFNWR0VsZW1lbnQqPiogZGVwZW5k
ZW5jaWVzID0gZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuc2V0T2ZFbGVtZW50c1Jl
ZmVyZW5jaW5nVGFyZ2V0KCp0aGlzKSkgewogICAgICAgICBmb3IgKGF1dG8qIGVsZW1lbnQgOiAq
ZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgICAgICBpZiAoaXM8U1ZHTVBhdGhFbGVtZW50PigqZWxl
bWVudCkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8U1ZHTVBhdGhFbGVtZW50PigqZWxlbWVu
dCkudGFyZ2V0UGF0aENoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApp
bmRleCAxNjE3MWEzMDVlZDNjYzQ4ZTgwYzg1OGU5YzU2YzlhNjc0Y2FhMjcwLi40ZDE0NDE1Y2Q1
OWE3ZTJjMDY1YThlYWMxNmRkOTU1MmFlN2M1NjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIGlubGluZSBTVkdTVkdFbGVtZW50OjpTVkdTVkdF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1CiB7CiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpOwogICAgIHJlZ2lzdGVyQXR0
cmlidXRlcygpOwotICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKHRoaXMpOworICAgIGRvY3VtZW50LnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9u
Q2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogUmVmPFNWR1NWR0VsZW1lbnQ+IFNWR1NWR0VsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW1lbnQp
CkBAIC03NywxNCArNzcsMTQgQEAgU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQogewog
ICAgIGlmIChtX3ZpZXdTcGVjKQogICAgICAgICBtX3ZpZXdTcGVjLT5yZXNldENvbnRleHRFbGVt
ZW50KCk7Ci0gICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1lbnRTdXNwZW5zaW9uQ2Fs
bGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92
ZVRpbWVDb250YWluZXIodGhpcyk7CisgICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZW1vdmVUaW1lQ29udGFpbmVyKCp0aGlzKTsKIH0KIAogdm9pZCBTVkdTVkdF
bGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xkRG9jdW1lbnQsIERvY3Vt
ZW50JiBuZXdEb2N1bWVudCkKIHsKLSAgICBvbGREb2N1bWVudC51bnJlZ2lzdGVyRm9yRG9jdW1l
bnRTdXNwZW5zaW9uQ2FsbGJhY2tzKHRoaXMpOwotICAgIGRvY3VtZW50KCkucmVnaXN0ZXJGb3JE
b2N1bWVudFN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CisgICAgb2xkRG9jdW1lbnQudW5yZWdp
c3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CisgICAgZG9jdW1lbnQo
KS5yZWdpc3RlckZvckRvY3VtZW50U3VzcGVuc2lvbkNhbGxiYWNrcygqdGhpcyk7CiAgICAgU1ZH
R3JhcGhpY3NFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChvbGREb2N1bWVudCwgbmV3RG9j
dW1lbnQpOwogfQogCkBAIC00NzQsNyArNDc0LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+
IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWwK
IE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IFNWR1NWR0VsZW1lbnQ6Omluc2VydGVk
SW50b0FuY2VzdG9yKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYg
cGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7CiAgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVk
VG9Eb2N1bWVudCkgewotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5h
ZGRUaW1lQ29udGFpbmVyKHRoaXMpOworICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5hZGRUaW1lQ29udGFpbmVyKCp0aGlzKTsKICAgICAgICAgaWYgKCFkb2N1bWVudCgp
LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hcmVBbmltYXRpb25zUGF1c2VkKCkpCiAgICAgICAgICAg
ICB1bnBhdXNlQW5pbWF0aW9ucygpOwogCkBAIC00OTAsNyArNDkwLDcgQEAgTm9kZTo6SW5zZXJ0
ZWRJbnRvQW5jZXN0b3JSZXN1bHQgU1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3Io
SW5zZXJ0aW9uVHkKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3RvcihSZW1v
dmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJl
ZSkKIHsKICAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50KSB7Ci0g
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZVRpbWVDb250YWlu
ZXIodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92
ZVRpbWVDb250YWluZXIoKnRoaXMpOwogICAgICAgICBwYXVzZUFuaW1hdGlvbnMoKTsKICAgICB9
CiAgICAgU1ZHR3JhcGhpY3NFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKHJlbW92YWxUeXBl
LCBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUUmVmRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQu
Y3BwCmluZGV4IGI3M2YzY2Y4NzhmOWU4OTVjNmQ1M2JmYzU4ZjAxZDg2ZDUzMTMwMjIuLjgyM2Yx
ZjAyMzUzMmEwNjM4N2VhNjEzNjVkMDc5N2RkNWIwMmM1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RSZWZFbGVtZW50LmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6
OmRldGFjaFRhcmdldCgpCiAgICAgLy8gTWFyayB0aGUgcmVmZXJlbmNlZCBJRCBhcyBwZW5kaW5n
LgogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlS
SVN0cmluZyhocmVmKCksIGRvY3VtZW50KCkpOwogICAgIGlmICghdGFyZ2V0LmlkZW50aWZpZXIu
aXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQ
ZW5kaW5nUmVzb3VyY2UodGFyZ2V0LmlkZW50aWZpZXIsIHRoaXMpOworICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UodGFyZ2V0LmlkZW50
aWZpZXIsICp0aGlzKTsKIH0KIAogdm9pZCBTVkdUUmVmRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKQEAg
LTIzNSw3ICsyMzUsNyBAQCB2b2lkIFNWR1RSZWZFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJj
ZSgpCiAgICAgICAgIGlmICh0YXJnZXQuaWRlbnRpZmllci5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRk
UGVuZGluZ1Jlc291cmNlKHRhcmdldC5pZGVudGlmaWVyLCB0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkUGVuZGluZ1Jlc291cmNlKHRhcmdldC5pZGVu
dGlmaWVyLCAqdGhpcyk7CiAgICAgICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVt
ZW50LmNwcAppbmRleCBhMTE5MWY5MDFhMzA0ODIzYTUzMTdlYTY1NzExMzUwMmJiNDVlMGMyLi41
NTg5NWE5NmRlNzgzYzE0Yzc3Mjg4ODkxNTE1N2FiNmRjNDFkNDI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcApAQCAtNTMsNyArNTMsNyBAQCBTVkdUZXh0UGF0
aEVsZW1lbnQ6On5TVkdUZXh0UGF0aEVsZW1lbnQoKQogCiB2b2lkIFNWR1RleHRQYXRoRWxlbWVu
dDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKQogewotICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KHRoaXMpOwor
ICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUFsbFRhcmdldFJlZmVy
ZW5jZXNGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OnJl
Z2lzdGVyQXR0cmlidXRlcygpCkBAIC0xNDYsMTcgKzE0NiwxNyBAQCB2b2lkIFNWR1RleHRQYXRo
RWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzb3VyY2UoKQogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJ
UmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgp
KTsKICAgICBpZiAoIXRhcmdldC5lbGVtZW50KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3Rl
ciBhcyBwZW5kaW5nIGlmIHdlIGFyZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAg
ICAgICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291
cmNlKHRoaXMsIHRhcmdldC5pZGVudGlmaWVyKSkKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKCp0aGlzLCB0YXJnZXQuaWRlbnRp
ZmllcikpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCF0YXJnZXQuaWRlbnRp
Zmllci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJnZXQuaWRlbnRpZmllciwgdGhpcyk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3Vy
Y2UodGFyZ2V0LmlkZW50aWZpZXIsICp0aGlzKTsKICAgICAgICAgICAgIEFTU0VSVChoYXNQZW5k
aW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0YXJnZXQuZWxlbWVu
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cGF0aFRhZykpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIg
dXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRlbmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9m
IGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVhZHMgdG8gcmVsYXlvdXQvcmVwYWludGlu
ZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0IHRvIGl0LgotICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVtZW50UmVmZXJlbmNpbmdUYXJnZXQodGhp
cywgZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0LmVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFy
Z2V0KCp0aGlzLCBkb3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0LmVsZW1lbnQpKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCBiYmNjNDM3ODg1MjA2
OGNlM2YyMzcwNWUyZDZiNzRlYzIzZmFiNTQ5Li4wNjE0MmE0Y2ZjOTk5NzlhNDhkYmFlNjRhYzIx
NmU3MjkyYmMwNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC0yNDAs
NyArMjQwLDcgQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojp1cGRhdGVTaGFkb3dUcmVlKCkKICAgICBT
dHJpbmcgdGFyZ2V0SUQ7CiAgICAgYXV0byogdGFyZ2V0ID0gZmluZFRhcmdldCgmdGFyZ2V0SUQp
OwogICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJnZXRJRCwgdGhpcyk7CisgICAgICAgIGRvY3Vt
ZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZSh0YXJnZXRJRCwg
KnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCmluZGV4IGJiZGEyNDBhYzFmMmI2NDY4OGU1
YWZhNzMzZTk3Mjc1ZDYwNTFiYzEuLmMxMmU5ZWFkNGI4YzlmZGU4NjgwMDEzOGZkYzBlOTUwMWI1
MWJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgU1ZHU01JTEVsZW1lbnQ6On5TVkdTTUlMRWxlbWVu
dCgpCiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCkKIHsK
LSAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZl
cmVuY2VzRm9yRWxlbWVudCh0aGlzKTsKKyAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZW1vdmVBbGxUYXJnZXRSZWZlcmVuY2VzRm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIHZv
aWQgU1ZHU01JTEVsZW1lbnQ6OmNsZWFyVGFyZ2V0KCkKQEAgLTE5OSwxNyArMTk5LDE3IEBAIHZv
aWQgU1ZHU01JTEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1Jlc291cmNlKCkKIAogICAgIGlmICghc3Zn
VGFyZ2V0KSB7CiAgICAgICAgIC8vIERvIG5vdCByZWdpc3RlciBhcyBwZW5kaW5nIGlmIHdlIGFy
ZSBhbHJlYWR5IHBlbmRpbmcgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgaWYgKGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNlKHRoaXMsIGlkKSkKKyAgICAg
ICAgaWYgKGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmlzUGVuZGluZ1Jlc291cmNl
KCp0aGlzLCBpZCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpZC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFk
ZFBlbmRpbmdSZXNvdXJjZShpZCwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsICp0aGlzKTsKICAgICAgICAg
ICAgIEFTU0VSVChoYXNQZW5kaW5nUmVzb3VyY2VzKCkpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgdGFyZ2V0IGluIHRoZSBkZXBlbmRl
bmNpZXMgbWFwLiBBbnkgY2hhbmdlIG9mIGhyZWZFbGVtZW50CiAgICAgICAgIC8vIHRoYXQgbGVh
ZHMgdG8gcmVsYXlvdXQvcmVwYWludGluZyBub3cgaW5mb3JtcyB1cywgc28gd2UgY2FuIHJlYWN0
IHRvIGl0LgotICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRFbGVt
ZW50UmVmZXJlbmNpbmdUYXJnZXQodGhpcywgc3ZnVGFyZ2V0KTsKKyAgICAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkRWxlbWVudFJlZmVyZW5jaW5nVGFyZ2V0KCp0aGlz
LCAqc3ZnVGFyZ2V0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCAzMDk5OTcxZjMzN2Y2MDkwZjg0MmE0ZmY5MjFmNWI1YzkyM2JjNjY4Li4xYzg0NzA0
YjdiMzk2NTI5OGE4NzI4OTRiY2ZhZDJlMTJiNGRhNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC0xNjEwLDcgKzE2MTAsNyBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IElu
dGVybmFsczo6ZHVtcE1hcmtlclJlY3RzKGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZVN0cmluZykK
IHZvaWQgSW50ZXJuYWxzOjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmIHJhbmdlLCBi
b29sIGlzQWN0aXZlKQogewogICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFy
a2VycygpLmFkZFRleHRNYXRjaE1hcmtlcigmcmFuZ2UsIGlzQWN0aXZlKTsKKyAgICByYW5nZS5v
d25lckRvY3VtZW50KCkubWFya2VycygpLmFkZFRleHRNYXRjaE1hcmtlcihyYW5nZSwgaXNBY3Rp
dmUpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNldE1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKQpAQCAtMjkyMCwzMSArMjkyMCwzMSBAQCB2b2lk
IEludGVybmFsczo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYg
ZWxlbWVudCkKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKICAg
ICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KCZlbGVtZW50KTsKKyAgICBkb2N1bWVudC0+d2Vi
a2l0V2lsbEVudGVyRnVsbFNjcmVlbihlbGVtZW50KTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6Ondl
YmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQg
SW50ZXJuYWxzOjp3ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KEVsZW1lbnQmKQog
ewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHREb2N1bWVudCgpOwogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+d2Via2l0RGlkRW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7CisgICAgZG9jdW1lbnQtPndlYmtpdERpZEVu
dGVyRnVsbFNjcmVlbigpOwogfQogCi12b2lkIEludGVybmFsczo6d2Via2l0V2lsbEV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQordm9pZCBJbnRlcm5hbHM6OndlYmtp
dFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYpCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KCZlbGVtZW50KTsKKyAgICBkb2N1bWVudC0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuKCk7
CiB9CiAKLXZvaWQgSW50ZXJuYWxzOjp3ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgSW50ZXJuYWxzOjp3ZWJraXREaWRFeGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoRWxlbWVudCYpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4
dERvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGRv
Y3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoJmVsZW1lbnQpOworICAg
IGRvY3VtZW50LT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbigpOwogfQogCiBib29sIEludGVybmFs
czo6aXNBbmltYXRpbmdGdWxsU2NyZWVuKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNw
cAppbmRleCA0OTQ3NGM3MDQyZDNmMGY5YTRiYTZmZTM2NmEzMGEzODM4NDBiZDgwLi42NDg2MzM4
YmM3MTc0YTUyZTVlMDY1Y2ZlODU1Mzk0OTczODU2ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXIuY3BwCkBAIC05Myw3ICs5Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxXb3JrZXI+PiBXb3JrZXI6
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OlJ1CiAgICAgd29y
a2VyLT5tX3Nob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA9IHNob3Vs
ZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeTsKIAogICAgIC8vIFRoZSB3b3Jr
ZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdXN0IGVuc3Vy
ZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIG5vciBhcmUgaXRzIGV2
ZW50IGxpc3RlbmVycy4KLSAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0eSh3b3JrZXIucHRy
KCkpOworICAgIHdvcmtlci0+c2V0UGVuZGluZ0FjdGl2aXR5KHdvcmtlci5nZXQoKSk7CiAKICAg
ICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93b3JrZXJzLmh0bWwj
b2ZmaWNpYWwtbW9tZW50LW9mLWNyZWF0aW9uCiAgICAgd29ya2VyLT5tX3dvcmtlckNyZWF0aW9u
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgV29y
a2VyOjpub3RpZnlGaW5pc2hlZCgpCiAgICAgfQogICAgIG1fc2NyaXB0TG9hZGVyID0gbnVsbHB0
cjsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250YWluZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL1NlcnZpY2VXb3JrZXJDb250YWluZXIu
Y3BwCmluZGV4IDdhOTZkOTc4Y2M5YjgzM2I5MjMyNmUwODJiMzk2ODBmZTI5NTMxNzcuLjc0NDJk
ZDQ1NTM3ZjFmNGY0YWVhZDYyNjUyZTM2YTc0NjA5ZDk5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvc2VydmljZS9TZXJ2aWNlV29ya2VyQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2UvU2VydmljZVdvcmtlckNvbnRhaW5lci5jcHAK
QEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFNlcnZpY2VXb3JrZXJDb250YWluZXI6OnNjaGVkdWxl
Sm9iKFJlZjxTZXJ2aWNlV29ya2VySm9iPiYmIGpvYikKIAogICAgIEFTU0VSVChtX3N3Q29ubmVj
dGlvbik7CiAKLSAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgc2V0UGVuZGluZ0Fj
dGl2aXR5KCp0aGlzKTsKIAogICAgIGF1dG8mIGpvYkRhdGEgPSBqb2ItPmRhdGEoKTsKICAgICBh
dXRvIHJlc3VsdCA9IG1fam9iTWFwLmFkZChqb2ItPmlkZW50aWZpZXIoKSwgV1RGTW92ZShqb2Ip
KTsKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIFNlcnZpY2VXb3JrZXJDb250YWluZXI6OmpvYkRp
ZEZpbmlzaChTZXJ2aWNlV29ya2VySm9iJiBqb2IpCiAgICAgYXV0byB0YWtlbiA9IG1fam9iTWFw
LnRha2Uoam9iLmlkZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0YWtlbiwgIXRha2Vu
IHx8IHRha2VuLT5wdHIoKSA9PSAmam9iKTsKIAotICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKIH0KIAogU1dTZXJ2ZXJDb25u
ZWN0aW9uSWRlbnRpZmllciBTZXJ2aWNlV29ya2VyQ29udGFpbmVyOjpjb25uZWN0aW9uSWRlbnRp
ZmllcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAwZGQ3MTUyYmJk
ZGMzNzRlY2ZhODg5ZDA2ZTk5N2ZiZmQxOTFhODY4Li41MTE2NDU3ZGE4NWZmMTczNDE0MzFmNmRh
NWY4OGVjNjc3Mzk1NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAg
LTE5Nyw5ICsxOTcsOSBAQCBFeGNlcHRpb25PcjxEb2N1bWVudCo+IFhNTEh0dHBSZXF1ZXN0Ojpy
ZXNwb25zZVhNTCgpCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBudWxscHRyOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSFRNTCkKLSAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlRG9jdW1lbnQgPSBIVE1MRG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7Cisg
ICAgICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50ID0gSFRNTERvY3VtZW50OjpjcmVhdGUo
bnVsbHB0ciwgbV91cmwpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fcmVz
cG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50OjpjcmVhdGUoMCwgbV91cmwpOworICAgICAgICAg
ICAgICAgIG1fcmVzcG9uc2VEb2N1bWVudCA9IFhNTERvY3VtZW50OjpjcmVhdGUobnVsbHB0ciwg
bV91cmwpOwogICAgICAgICAgICAgbV9yZXNwb25zZURvY3VtZW50LT5vdmVycmlkZUxhc3RNb2Rp
ZmllZChtX3Jlc3BvbnNlLmxhc3RNb2RpZmllZCgpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VE
b2N1bWVudC0+c2V0Q29udGVudChtX3Jlc3BvbnNlQnVpbGRlci50b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKSk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlRG9jdW1lbnQtPnNldENvbnRleHREb2N1
bWVudChkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpOwpAQCAt
NDI5LDcgKzQyOSw3IEBAIE9wdGlvbmFsPEV4Y2VwdGlvbk9yPHZvaWQ+PiBYTUxIdHRwUmVxdWVz
dDo6cHJlcGFyZVRvU2VuZCgpCiAgICAgaWYgKCFjb250ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3Js
ZENvbnRlbnRTZWN1cml0eVBvbGljeSgpICYmICFjb250ZXh0LmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd0Nvbm5lY3RUb1NvdXJjZShtX3VybCkpIHsKICAgICAgICAgaWYgKCFtX2FzeW5j
KQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbk9yPHZvaWQ+IHsgRXhjZXB0aW9uIHsgTmV0
d29ya0Vycm9yIH0gfTsKLSAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwogICAgICAgICBtX3RpbWVvdXRUaW1lci5zdG9w
KCk7CiAgICAgICAgIG1fbmV0d29ya0Vycm9yVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb25Pcjx2b2lkPiB7IH07CkBAIC02NTIsNyArNjUyLDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoKQogICAgICAgICAv
LyBhIHJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3MgYmVjYXVzZSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxp
c3RlbmVycyBhbGl2ZSwKICAgICAgICAgLy8gYW5kIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhl
IEphdmFTY3JpcHQgd3JhcHBlci4KICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5
KCp0aGlzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXF1ZXN0LnNldERvbWFpbkZvckNhY2hl
UGFydGl0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZG9tYWluRm9yQ2FjaGVQYXJ0aXRp
b24oKSk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFJTeW5j
aHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CkBAIC03MTUsNyArNzE1LDcgQEAg
Ym9vbCBYTUxIdHRwUmVxdWVzdDo6aW50ZXJuYWxBYm9ydCgpCiAgICAgLy8gU2F2ZSB0aGlzIGlu
Zm9ybWF0aW9uIHRvIGEgbG9jYWwgdmFyaWFibGUgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGRyb3Ag
cHJvdGVjdGlvbi4KICAgICBib29sIG5ld0xvYWRTdGFydGVkID0gbV9sb2FkZXI7CiAKLSAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiAKICAgICByZXR1cm4gIW5ld0xvYWRTdGFydGVkOwogfQpAQCAtNzYyLDcgKzc2Miw3IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvcigpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpuZXR3b3JrRXJyb3JUaW1lckZpcmVkKCkKIHsKICAgICBuZXR3b3JrRXJyb3IoKTsKLSAgICB1
bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiB9CiAgICAgCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydEVycm9yKCkKQEAgLTkxMyw3
ICs5MTMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogICAgIC8vIEluIGNhc2UgZGlkRmFpbCBpcyBjYWxsZWQgc3luY2hyb25vdXNs
eSBvbiBhbiBhc3luY2hyb25vdXMgWEhSIGNhbGwsIGxldCdzIGRpc3BhdGNoIG5ldHdvcmsgZXJy
b3IgYXN5bmNocm9ub3VzbHkKICAgICBpZiAobV9hc3luYyAmJiBtX3NlbmRGbGFnICYmICFtX2xv
YWRlcikgewogICAgICAgICBtX3NlbmRGbGFnID0gZmFsc2U7Ci0gICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KCp0aGlzKTsKICAgICAg
ICAgbV90aW1lb3V0VGltZXIuc3RvcCgpOwogICAgICAgICBtX25ldHdvcmtFcnJvclRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogICAgICAgICByZXR1cm47CkBAIC05NDYsNyArOTQ2LDcgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQogICAgIG1f
dGltZW91dFRpbWVyLnN0b3AoKTsKIAogICAgIGlmIChoYWRMb2FkZXIpCi0gICAgICAgIHVuc2V0
UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aFN0ZXAuY3BwCmluZGV4IGFhNDBjMjE3MGZlNzM3MGM0MjRmYTQwZjcxMGU2
MDE3ODg2NDYwMDQuLjRiNTU5MTdhMzcxYjZhYTZjMjRmMmQzNTBmY2U5OTdkMGVkOWU5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJB
dHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0xOTksNyArMTk4LDcgQEAgaW5saW5lIGJvb2wgbm9k
ZU1hdGNoZXNCYXNpY1Rlc3QoTm9kZSYgbm9kZSwgU3RlcDo6QXhpcyBheGlzLCBjb25zdCBTdGVw
OjpOb2RlVGUKICAgICAgICAgICAgIGlmIChuYW1lID09IHN0YXJBdG9tKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgfHwgbmFtZXNwYWNlVVJJID09IG5v
ZGUubmFtZXNwYWNlVVJJKCk7CiAKLSAgICAgICAgICAgIGlmIChpczxIVE1MRG9jdW1lbnQ+KG5v
ZGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmRvY3VtZW50KCkuaXNIVE1M
RG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4obm9kZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGF0aHMgd2l0aG91dCBuYW1lc3BhY2VzIHNob3Vs
ZCBtYXRjaCBIVE1MIGVsZW1lbnRzIGluIEhUTUwgZG9jdW1lbnRzIGRlc3BpdGUgdGhvc2UgaGF2
aW5nIGFuIFhIVE1MIG5hbWVzcGFjZS4gTmFtZXMgYXJlIGNvbXBhcmVkIGNhc2UtaW5zZW5zaXRp
dmVseS4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
ZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLmxvY2FsTmFtZSgpLCBuYW1lKSAmJiAobmFtZXNw
YWNlVVJJLmlzTnVsbCgpIHx8IG5hbWVzcGFjZVVSSSA9PSBub2RlLm5hbWVzcGFjZVVSSSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAppbmRleCA5OTAxN2FiZWI1OTkzM2MzMGVh
YzAyZTY4MmM1MjQ2YjIwMTdjOTU2Li5hNjhhY2Q3NWRiZTJiZjIxZWFkY2ViYTA1MTEzYTg4MmEy
MGRlZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCkBAIC0yMSwxMSArMjEs
MTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWFNMVFByb2Nlc3Nv
ci5oIgogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLSNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0K
ICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCkBAIC0zMyw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Qb2xpY3kuaCIKICNp
bmNsdWRlICJUZXh0LmgiCkBAIC04Nyw3ICs4NSw3IEBAIFJlZjxEb2N1bWVudD4gWFNMVFByb2Nl
c3Nvcjo6Y3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5n
CiAKICAgICAgICAgaWYgKERvY3VtZW50KiBvbGREb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgp
KSB7CiAgICAgICAgICAgICByZXN1bHQtPnNldFRyYW5zZm9ybVNvdXJjZURvY3VtZW50KG9sZERv
Y3VtZW50KTsKLSAgICAgICAgICAgIHJlc3VsdC0+dGFrZURPTVdpbmRvd0Zyb20ob2xkRG9jdW1l
bnQpOworICAgICAgICAgICAgcmVzdWx0LT50YWtlRE9NV2luZG93RnJvbSgqb2xkRG9jdW1lbnQp
OwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTZWN1cml0eU9yaWdpblBvbGljeShvbGREb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW5Qb2xpY3koKSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldENvb2tp
ZVVSTChvbGREb2N1bWVudC0+Y29va2llVVJMKCkpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRG
aXJzdFBhcnR5Rm9yQ29va2llcyhvbGREb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxs
U2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9X
ZWJGdWxsU2NyZWVuTWFuYWdlci5jcHAKaW5kZXggNmM5OWUzM2ZkMTE2MzEyYzQ3ZDEwYjIyYTYy
MWZiNzFiNjI5ZGZiMC4uMjkwYTE5NTlmZjMxNDkzMmM4YjkxYmJjZjc3ZmJmMDc4NDY1NTllYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNj
cmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9GdWxsU2NyZWVu
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgV2ViRnVs
bFNjcmVlbk1hbmFnZXI6OndpbGxFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViRnVsbFNjcmVlbk1hbmFnZXIgJXAgd2lsbEVudGVyRnVsbFNjcmVlbigpIC0gZWxl
bWVudCAlcCIsIHRoaXMsIG1fZWxlbWVudC5nZXQoKSk7CiAKLSAgICBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9lbGVtZW50LmdldCgp
KTsKKyAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbigq
bV9lbGVtZW50KTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBtX3BhZ2UtPmhpZGVQ
YWdlQmFubmVycygpOwogI2VuZGlmCkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBXZWJGdWxsU2Ny
ZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBMT0coRnVsbHNjcmVlbiwg
IldlYkZ1bGxTY3JlZW5NYW5hZ2VyICVwIGRpZEVudGVyRnVsbFNjcmVlbigpIC0gZWxlbWVudCAl
cCIsIHRoaXMsIG1fZWxlbWVudC5nZXQoKSk7CiAKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCku
d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0KCkpOworICAg
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW4oKTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkpCiAgICAgYXV0byogY3VycmVudFBsYXliYWNrQ29udHJvbHNFbGVt
ZW50ID0gbV9wYWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkuY3VycmVudFBsYXliYWNrQ29u
dHJvbHNFbGVtZW50KCk7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFu
YWdlcjo6d2lsbEV4aXRGdWxsU2NyZWVuKCkKICNlbmRpZgogCiAgICAgbV9maW5hbEZyYW1lID0g
c2NyZWVuUmVjdE9mQ29udGVudHMobV9lbGVtZW50LmdldCgpKTsKLSAgICBtX2VsZW1lbnQtPmRv
Y3VtZW50KCkud2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX2VsZW1lbnQuZ2V0
KCkpOworICAgIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4o
KTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBtX3BhZ2UtPnNob3dQYWdlQmFubmVy
cygpOwogI2VuZGlmCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdl
cjo6ZGlkRXhpdEZ1bGxTY3JlZW4oKQogICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIHNldEZ1
bGxzY3JlZW5JbnNldHMoRmxvYXRCb3hFeHRlbnQoKSk7CiAgICAgc2V0RnVsbHNjcmVlbkF1dG9I
aWRlRHVyYXRpb24oMF9zKTsKLSAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhp
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fZWxlbWVudC5nZXQoKSk7CisgICAgbV9lbGVtZW50LT5k
b2N1bWVudCgpLndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViRnVsbFNj
cmVlbk1hbmFnZXI6OnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oYm9vbCBhbmltYXRpbmcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRp
YVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4IGFkMjFk
ZDJmZTI2ZWIyM2M4NjlkMDViODFmZWQzMzQ5MWJmNmZjOGIuLjU2MjNjYzAzMTQwYWI2NmE5ZjZj
ZjU1NjM5NzBiZTUyNzY1M2ZhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyOjpzdGFydFVzZXJNZWRpYVJlcXVlc3QoVXNlck1lZGlhUmVxdWVz
dCYKIAogICAgIGF1dG8mIHBlbmRpbmdSZXF1ZXN0cyA9IG1fYmxvY2tlZFVzZXJNZWRpYVJlcXVl
c3RzLmFkZChkb2N1bWVudCwgVmVjdG9yPFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0Pj4oKSkuaXRl
cmF0b3ItPnZhbHVlOwogICAgIGlmIChwZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAg
ICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAgICAgICBkb2N1
bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICBwZW5kaW5nUmVxdWVz
dHMuYXBwZW5kKCZyZXF1ZXN0KTsKIH0KIApAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjptZWRpYUNhblN0YXJ0KERvY3VtZW50JiBkb2N1
bWVudCkKICAgICB3aGlsZSAoIXBlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAg
aWYgKCFkb2N1bWVudC5wYWdlKCktPmNhblN0YXJ0TWVkaWEoKSkgewogICAgICAgICAgICAgbV9i
bG9ja2VkVXNlck1lZGlhUmVxdWVzdHMuYWRkKCZkb2N1bWVudCwgcGVuZGluZ1JlcXVlc3RzKTsK
LSAgICAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnJlbW92ZU1lZGlhUmVxdWVzdEZyb21NYXBz
KFVzZXJNZWRpYVJlcXUKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChwZW5k
aW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVxdWVzdC5kb2N1bWVudCgpLT5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICByZXF1ZXN0LmRv
Y3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fYmxvY2tlZFVzZXJNZWRpYVJlcXVlc3RzLmFkZChkb2N1bWVudCwg
cGVuZGluZ1JlcXVlc3RzKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDY3ODU0OGNmNzQ3YzExNTEyZDQ4
MDQ3YjU3ZDM5MDE5Yzk1YjdkNzAuLjE3M2ZkODkyZTY4YTk0ZTgzNjllZTY4ZGI5NmMxNWU5NWE3
ZDhjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCkBAIC0zMjEsOSArMzIxLDkgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQogICAg
IEFTU0VSVCghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5pc0JlaW5nRGVzdHJveWVkKCkpOwogCiAg
ICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQotICAgICAgICBtX3BsdWdpbkVs
ZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworICAg
ICAgICBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCkucmVtb3ZlTWVkaWFDYW5TdGFydExpc3Rl
bmVyKCp0aGlzKTsKIAotICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVBdWRp
b1Byb2R1Y2VyKHRoaXMpOworICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5yZW1vdmVB
dWRpb1Byb2R1Y2VyKCp0aGlzKTsKIAogICAgIGRlc3Ryb3lQbHVnaW5BbmRSZXNldCgpOwogCkBA
IC01OTEsMTMgKzU5MSwxMyBAQCB2b2lkIFBsdWdpblZpZXc6OmluaXRpYWxpemVQbHVnaW4oKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIo
dGhpcyk7CisgICAgICAgICAgICAgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLmFkZE1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLmFkZEF1ZGlvUHJvZHVjZXIodGhpcyk7CisgICAgbV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOwogCiAjaWYgRU5BQkxFKFBSSU1BUllfU05B
UFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBw
bHVnSW5JbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqbV9w
bHVnaW5FbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lci5tbQppbmRleCBh
ZjVhYzJmMjg5YmMxYjEyMDQ2NmM1OWMwMjc5MDZlYzE0ODE2NWU3Li41MzdjYzY2ODA1ZDQ5YmUw
ZWQwZmI0MWY2MDkwNjM1ZTZiOTk1YWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViS2l0RnVsbFNjcmVlbkxpc3Rl
bmVyLm1tCkBAIC00NSwyNSArNDUsMjUgQEAgLSAoaWQpaW5pdFdpdGhFbGVtZW50OihFbGVtZW50
KillbGVtZW50CiAtICh2b2lkKXdlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW4KIHsKICAgICBpZiAo
X2VsZW1lbnQpCi0gICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKKyAgICAgICAgX2VsZW1lbnQtPmRv
Y3VtZW50KCkud2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbigqX2VsZW1lbnQpOwogfQogCiAtICh2
b2lkKXdlYmtpdERpZEVudGVyRnVsbFNjcmVlbgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAg
ICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVu
dChfZWxlbWVudC5nZXQoKSk7CisgICAgICAgIF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdERp
ZEVudGVyRnVsbFNjcmVlbigpOwogfQogCiAtICh2b2lkKXdlYmtpdFdpbGxFeGl0RnVsbFNjcmVl
bgogewogICAgIGlmIChfZWxlbWVudCkKLSAgICAgICAgX2VsZW1lbnQtPmRvY3VtZW50KCkud2Vi
a2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgICAg
IF9lbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbigpOwogfQogCiAt
ICh2b2lkKXdlYmtpdERpZEV4aXRGdWxsU2NyZWVuCiB7CiAgICAgaWYgKF9lbGVtZW50KQotICAg
ICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoX2VsZW1lbnQuZ2V0KCkpOworICAgICAgICBfZWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbigpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbQppbmRleCBk
NGRhYzU0MmU0YzY5OGM1MGNkZWE0NDk2MGRhYWZkNmI2OWM5M2FkLi44OWJmYTcwYzE5MWJmMTli
NjhjYTMzNmEzZTI0ZDE1MTg0MTA0ZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KQEAgLTIzNyw3
ICsyMzcsNyBAQCAtICh2b2lkKWVudGVyRnVsbFNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KIAog
ICAgIF9zYXZlZFNjYWxlID0gW193ZWJWaWV3IF92aWV3U2NhbGVGYWN0b3JdOwogICAgIFtfd2Vi
VmlldyBfc2NhbGVXZWJWaWV3OjEgYXRPcmlnaW46TlNNYWtlUG9pbnQoMCwgMCldOwotICAgIFtz
ZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVt
ZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRW50ZXJGdWxsU2Ny
ZWVuKCpfZWxlbWVudCk7CiAgICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNj
cmVlbih0cnVlKTsKICAgICBbc2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQoKTsKIApAQCAt
MjcyLDcgKzI3Miw3IEBAIC0gKHZvaWQpZmluaXNoZWRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb246
KGJvb2wpY29tcGxldGVkCiAgICAgICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKICAgICAg
ICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgICAgIFtzZWxmIF9kb2N1
bWVudF0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgICAgICBbc2VsZiBfZG9j
dW1lbnRdLT53ZWJraXREaWRFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgp
KTsKKyAgICAgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuKCk7
CiAgICAgICAgIAogICAgICAgICBOU1JlY3Qgd2luZG93Qm91bmRzID0gW1tzZWxmIHdpbmRvd10g
ZnJhbWVdOwogICAgICAgICB3aW5kb3dCb3VuZHMub3JpZ2luID0gTlNaZXJvUG9pbnQ7CkBAIC0z
MjAsNyArMzIwLDcgQEAgLSAodm9pZClleGl0RnVsbFNjcmVlbgogCiAgICAgX2ZpbmFsRnJhbWUg
PSBzY3JlZW5SZWN0T2ZDb250ZW50cyhfZWxlbWVudC5nZXQoKSk7CiAKLSAgICBbc2VsZiBfZG9j
dW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgp
KTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKICAg
ICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwogCiAgICAg
aWYgKF9pc0VudGVyaW5nRnVsbFNjcmVlbikKQEAgLTM2Miw3ICszNjIsNyBAQCAtICh2b2lkKWZp
bmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246KGJvb2wpY29tcGxldGVkCiAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRB
bmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXRE
aWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxmIF9k
b2N1bWVudF0tPndlYmtpdERpZEV4aXRGdWxsU2NyZWVuKCk7CiAgICAgW193ZWJWaWV3IF9zY2Fs
ZVdlYlZpZXc6X3NhdmVkU2NhbGUgYXRPcmlnaW46TlNNYWtlUG9pbnQoMCwgMCldOwogCiAgICAg
TlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25k
ZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDlk
ZGU3ZGRlMWE3YWQ3ZmQ2ZjIxODI1NGYwYjE3ZDMyZWJmN2JiM2EuLjJkZTAzYWMzNmNjNWNlNDU1
ZDc1N2VkNzYzMDg4YTU2YThkNGY5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0KQEAgLTE0ODIsMTAgKzE0ODIsOCBAQCAtICh2b2lkKV9jb21tb25Jbml0
aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lIGdyb3VwTmFtZToo
TlNTdAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIFdlYkNvcmU6OnByb3ZpZGVOb3Rp
ZmljYXRpb24oX3ByaXZhdGUtPnBhZ2UsIG5ldyBXZWJOb3RpZmljYXRpb25DbGllbnQoc2VsZikp
OwogI2VuZGlmCi0jaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBXZWJDb3JlOjpwcm92aWRlRGV2aWNlT3JpZW50YXRpb25UbyhfcHJp
dmF0ZS0+cGFnZSwgbmV3IFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50KHNlbGYpKTsKLSNlbmRp
ZgorI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIFdlYkNvcmU6OnByb3ZpZGVEZXZpY2VPcmllbnRhdGlvblRvKCpfcHJpdmF0ZS0+cGFn
ZSwgKm5ldyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudChzZWxmKSk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYTM5MWY5NjcwNmZkZmY1MGZkMzM2ODMxYjBkZjkw
MDA4NzMzM2QxNS4uM2IyMWNmMWQwOGEyNTM0MjBlN2VkMDE0YTI4NDM1YmI2MWY2ZTMzMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0y
MTEsNyArMjExLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0
KCkKICAgICAvLyBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0byBk
ZWxpdmVyIGRhdGEgYmVmb3JlIHdlJ3ZlCiAgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4KICAg
ICBpZiAoIW1fbG9hZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0YXJ0
TWVkaWEoKSkgewotICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCkt
PmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgICAgIG1faXNXYWl0aW5nVG9T
dGFydCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI4Nyw3ICsyODcs
NyBAQCBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCiAgICAgICAgIGluc3RhbmNlTWFwKCkucmVt
b3ZlKG1faW5zdGFuY2UpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKLSAgICAgICAg
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRo
aXMpOworICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0
YXJ0TGlzdGVuZXIoKnRoaXMpOwogCiAgICAgc3RvcCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuY3BwCmluZGV4IGZlYjJkZjNkZDQ3NjA5ZTFiM2Y2NDA5ZWNkMjYwZDI4ZDIyOGRiYTgu
LmU3NjE3NDRlMGQxYjg1YWZmZDEwYjc3N2NkZDM3OTFhNGY3MWIzMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwCkBAIC03NTY0LDEzICs3NTY0LDEzIEBAIHZvaWQgV2ViVmlldzo6
ZnVsbFNjcmVlbkNsaWVudFNldFBhcmVudFdpbmRvdyhIV05EIGhvc3RXaW5kb3cpCiB2b2lkIFdl
YlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBBU1NF
UlQobV9mdWxsU2NyZWVuRWxlbWVudCk7Ci0gICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1l
bnQoKS53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVt
ZW50LmdldCgpKTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW4oKm1fZnVsbFNjcmVlbkVsZW1lbnQpOwogfQogCiB2b2lkIFdlYlZp
ZXc6OmZ1bGxTY3JlZW5DbGllbnREaWRFbnRlckZ1bGxTY3JlZW4oKQogewogICAgIEFTU0VSVCht
X2Z1bGxTY3JlZW5FbGVtZW50KTsKLSAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgp
LndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5n
ZXQoKSk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS53ZWJraXREaWRFbnRl
ckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEV4
aXRGdWxsU2NyZWVuKCkKQEAgLTc1ODIsNyArNzU4Miw3IEBAIHZvaWQgV2ViVmlldzo6ZnVsbFNj
cmVlbkNsaWVudFdpbGxFeGl0RnVsbFNjcmVlbigpCiB2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5D
bGllbnREaWRFeGl0RnVsbFNjcmVlbigpCiB7CiAgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1l
bnQpOwotICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1
bGxTY3JlZW5Gb3JFbGVtZW50KG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVs
bFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkud2Via2l0RGlkRXhpdEZ1bGxTY3JlZW4oKTsKICAg
ICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gbnVsbHB0cjsKIH0KIAo=
</data>
<flag name="review"
          id="376385"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>